Guida processo
Essentials consulting/IT italiano (HR admin)
Certificazioni scadenza + multi-CCNL + employment type/P.IVA/IBAN per consulting/IT 50-500 FTE.
Essentials consulting/IT italiano (HR admin)
Ultimo aggiornamento: 2026-05-25 Owner: Product Writer Audience: hr_admin, admin tenant, owner
Scopo
Spiegare le 3 funzioni Horis pensate specificamente per il segmento consulting/IT italiano 50-500 FTE: tracciamento certificazioni con scadenza, multi-CCNL versioning, employment type / P.IVA / IBAN. Senza queste tre, un'app HR è poco utilizzabile in body rental, staff augmentation e per la vendita di profili a clienti.
Concetti chiave
- Certificazione: differente da una skill. Ha ente emittente, codice credenziale unico (verificabile pubblicamente), data emissione e scadenza. Es. AWS Solutions Architect Associate, PMP, ITIL Foundation. In consulting si vincono o perdono gare per certificazioni scadute o assenti.
- Mapping certificazione → skill (CV_ENTITY_GRAPH_01 W02): la tabella catalogo
hr_certification_skill_mapcollega pattern di certificazione alle skill del tenant (es. CKA → Kubernetes, PMP → Project Management) con un peso. Seedata per ~15 cert top via migration 0086 (risolve gli id per tenant, zero orfani); alimenta l'espansione skill del Talent Partner (W03). - CCNL: contratto collettivo nazionale di lavoro. Per consulting/IT italiano i piu' frequenti sono Metalmeccanici Industria, Commercio (Confcommercio), Studi Professionali (Confprofessioni). Il catalog Horis e' platform-wide (i CCNL sono nazionali, non per-tenant) con seed di 6 CCNL principali.
- Employment type: distinzione strutturata fra dipendente, freelance con P.IVA, co.co.co., apprendista, stagista, tirocinante. Senza, body rental e staff aug non distinguono costi/margine.
- P.IVA italiana: 11 cifre numeriche. Obbligatoria solo se
employment_type='freelance_p_iva', vietata altrimenti (vincolo DB).
Prerequisiti
- ruolo:
owner,admin,hr_admin - migrations applicate sul progetto Supabase del tenant:
0082_hr_user_certifications.sql0083_hr_ccnl_catalog.sql0084_organization_user_details_employment.sql
Accesso rapido
- Gestione profilo dipendente:
/workspace/hr/people→ seleziona utente - API:
GET /api/profile/me/certifications(proprie)GET /api/people/{userId}/certifications(HR scope)GET /api/ccnl-catalog(catalog CCNL leggibile a tutti gli autenticati)PATCH /api/profile/me(campi self: vatNumber, iban, oltre a anagrafica)PATCH /api/people/{userId}/profile(campi HR: employmentType, ccnlId, ccnlLevel, ccnlClassification, ccnlApprenticeship)
1. Certificazioni con scadenza
Campi
name— nome certificazione (es. "AWS Solutions Architect Associate")issuer— ente emittente (es. "Amazon Web Services")credential_code— codice/ID univoco emittente (verifica)credential_url— link verifica pubblico (Credly, AWS validation, ecc.)issued_at/expires_at— date (entrambe nullable)status—active|expired|revokednotes— testo libero
Status calcolato lato UI (helper `deriveExpiryStatus`)
no_expiry— certificazione lifetimeactive— scade tra >90ggwatch— scade tra 30 e 90gg (giallo)expiring_soon— scade tra 0 e 30gg (arancione)expired— scaduta (rosso)
Permessi
- Lettura / scrittura proprie: ogni utente autenticato sulle proprie via
/api/profile/me/certifications/* - Lettura / scrittura altrui: HR admin / owner / admin tenant via
/api/people/{userId}/certifications/*, con checkcanEditProfile(riusato dal flusso anagrafica)
Out of scope iniziale (deferred)
- Reminder email automatici su scadenza (programma futuro con cron orario riusabile)
- Integrazione Credly / AWS Credential Manager / LinkedIn Learning
- Dashboard HR "certificazioni in scadenza per team/azienda"
2. Multi-CCNL con classificazione
Catalog
Tabella hr_ccnl_catalog platform-wide, read open a tutti gli autenticati, write solo via service-role / SQL Studio.
Seed iniziale (6 CCNL piu' frequenti consulting/IT italiano):
| Code | Nome | Aree tipiche | |---|---|---| | metalmeccanici-industria | Metalmeccanici Industria (Federmeccanica + Assistal) | IT services, system integrator | | commercio | Terziario Distribuzione Servizi (Confcommercio) | Consulting management, ufficio | | studi-professionali | Studi Professionali (Confprofessioni) | Body rental piccole societa' | | cooperative-sociali | Cooperative Sociali | Cooperative HR/IT | | terziario-confesercenti | Terziario, Distribuzione e Servizi (Confesercenti) | Consulting/agenzie | | industria-chimica-farmaceutica | Industria Chimica e Farmaceutica (Federchimica/Farmindustria) | IT pharma |
Campi su `organization_user_details`
ccnl_id— FK opzionale al catalogccnl_level— livello classificazione (es. "5°", "Quadro A1")ccnl_classification— qualifica/mansione free-text (es. "Tecnico Specialista", "Capo Reparto")ccnl_apprenticeship— flag boolean, regime apprendistato
Permessi
Editabili da HR admin / manager / admin / owner (NON self — e' dato di gestione contrattuale, non PII).
Out of scope iniziale (deferred)
- API CRUD del catalog (Platform owner UI)
- Versioning storico CCNL (rinnovi contrattuali)
- Calcolo stipendiale automatico per livello
3. Employment type / P.IVA / IBAN
Enum `employment_type` (default `employee`)
| Valore | Descrizione | |---|---| | employee | Dipendente standard | | freelance_p_iva | Collaboratore con P.IVA (richiede vat_number 11 cifre) | | co_co_co | Collaborazione coordinata e continuativa | | apprendista | Regime apprendistato (durata limitata, retribuzione ridotta) | | stagista | Stage curriculare (no obbligo retributivo) | | tirocinio_extracurriculare | Tirocinio extracurriculare (obbligo retributivo minimo regionale) |
`vat_number` — P.IVA italiana
- Obbligatoria SOLO se
employment_type='freelance_p_iva', vietata altrimenti (check constraint DB). - Formato: 11 cifre numeriche.
- Self-only: solo il dipendente puo' inserirla dal proprio profilo (PII finanziaria).
`iban`
- Formato regex generale:
^[A-Z]{2}[0-9A-Z]{13,32}$(validazione checksum Modulo-97 demandata al frontend o future iteration). - Self-only: come VAT.
Permessi
employment_typeeditabile da HR / manager / admin / ownervat_number+ibaneditabili solo dal dipendente (self) dal proprio profilo
Out of scope iniziale (deferred)
- VAT estere (EU cross-border B2B)
- Validazione checksum IBAN Modulo-97 server-side
- Regime fiscale (forfetario vs ordinario)
- Calcolo costo aziendale automatico su employment_type
Sicurezza & GDPR
hr_user_certificationsRLS bloccata totalmente, accesso solo via service-role admin client + check applicativocanEditProfile. Audit-tracked (created_by_user_id).hr_ccnl_catalogRLS attiva con policy read-for-authenticated (catalog pubblico interno). Write solo via service-role (Platform owner / SQL).organization_user_details.vat_numbereibansono PII finanziaria self-only. Tentativo HR di scrivere → 403pii_field_restricted.- Tutte le scritture su
organization_user_detailspassano daprofile-service.upsertProfileBasicsForcon checksource(self|hr_admin|manager).
Cosa NON c'e' (ancora — backlog programma successore)
- UI consolidata su
/workspace/hr/people+/workspace/profile(ora le API funzionano via curl/Postman; UI dedicata in programma futuro) - Reminder email scadenza certificazioni
- Catalog CCNL editabile da UI Platform owner
- Calcolo costo aziendale automatico
- Validation checksum IBAN
Programma di provenienza
HORIS_CONSULTING_QUICK_WINS_01(2026-05-25) — 4 wave: W01 certificazioni backend, W02 multi-CCNL catalog backend, W03 employment_type/P.IVA/IBAN backend, W04 wiki bilingue + closure.
