π― Cosa faβ
Definisce il persistence layer del dominio lavoratori/rischi: 15
tabelle documentate tutte in questa pagina.
πΊοΈ Tabelle (15)β
Anagrafica lavoratori (2)β
| Tabella | Ruolo |
|---|
job.workers | Anagrafica dipendente |
job.workerJobHistory | Snapshot storico mansione/ruolo/reparto |
Mansioni (4)β
| Tabella | Ruolo |
|---|
job.jobs | Mansioni (globali) |
job.jobGroups | Raggruppamenti visuali |
job.jobSubcategories | N:N mansione β sottocategoria azienda |
job.workersJobs | N:N lavoratore β mansione |
Struttura (2)β
| Tabella | Ruolo |
|---|
job.roles | Ruoli aziendali (lavoratore/preposto/dirigente) |
job.departments | Reparti gerarchici |
Rischi (7)β
| Tabella | Ruolo |
|---|
job.risks | Anagrafica rischi |
job.riskLevel | Livelli (int PK) |
job.atecoCodes | Codici ATECO gerarchici (versione corrente) |
job.atecoCodesLegacy | Codici ATECO di versioni precedenti con correspondingNewAteco FK verso atecoCodes(code). Usata in import aziende per convertire codici legacy nel codice corrente. |
job.companiesRisks | Rischi per azienda |
job.jobsRisks | Rischi per mansione |
job.workersRisks | Rischi per lavoratore (override/esclusione) |
πͺ Visteβ
| Vista | Ruolo |
|---|
job.vw_workerComplianceSummary | Rollup per-lavoratore di compliance formativa: worstStatus (expired > missing > expiring > ok), conteggi per status, minDaysRemaining. Filtra solo lavoratori con endDateWork IS NULL. Aggrega edu.vw_workerTrainingStatus per workerId. PK virtuale = workerId. Esposta come CRUD read-only WorkerComplianceSummary con FK manuali su workerId/companyId/roleId/departmentId. |
π Relazioniβ
Referenze esterne:
job.workers.companyId β reg.companies(id)
job.workers.companyLocationId β reg.companyLocations(id)
job.workers.academicQualificationId β reg.academicQualifications(id)
job.departments.companyId β reg.companies(id)
job.jobSubcategories.companySubcategoryId β reg.companySubcategories(id)
reg.companies.atecoCode β job.atecoCodes(code) (in uscita da reg)
reg.companies.riskLevelId β job.riskLevel(id) (in uscita da reg)
ποΈ Dettaglio tabelleβ
job.workersβ
- PK:
id
- FK:
companyId, companyLocationId, roleId (obbligatori);
departmentId, riskLevelId, academicQualificationId (nullable)
- Computed column:
label = lastName + ' ' + firstName
- Check:
gender IN ('M','F')
- Indici:
IX_workers_fiscalCode filtered su fiscalCode IS NOT NULL
con INCLUDE (id, companyId, endDateWork, roleId, riskLevelId,
academicQualificationId)
IX_workers_active filtered su endDateWork IS NULL con INCLUDE
simili β ottimizza liste attive
job.workerJobHistoryβ
- PK:
id
- FK:
workerId, jobId (obbligatori); riskLevelId, roleId,
departmentId nullable
- Campi:
startDate, endDate (nullable), insertTimestamp default
sysdatetime(), notes
job.jobsβ
- PK:
id
- FK:
riskLevelId (nullable = fallback azienda),
jobGroupId (nullable)
- Campo chiave:
inheritsCompanyRisks (default 1)
job.workersJobsβ
- PK:
id
- FK:
workerId, jobId
- Nessun campo aggiuntivo (associazione pura; date sono in
workerJobHistory)
job.departmentsβ
- PK:
id
- FK:
companyId (obbligatoria), parentId (self, nullable β
gerarchia)
- Campo:
active (default 1)
job.risksβ
job.riskLevelβ
- PK:
id (INT, non GUID)
- Campo:
label
job.atecoCodesβ
- PK:
code (string β natural key)
- FK:
parentCode (self, nullable), riskLevelId
- Campi:
label, selectable, position
job.companiesRisksβ
- PK: non specificata (probabilmente composita
(companyId, riskId))
- FK:
companyId, riskId, riskLevelId (nullable)
- Campo:
notes
job.jobsRisksβ
- PK: composita
(jobId, riskId)
- FK:
riskLevelId nullable
job.workersRisksβ
- PK: composita
(workerId, riskId)
- FK:
riskLevelId nullable
- Campi:
excluded (default 0), notes
job.jobSubcategoriesβ
- PK:
id
- FK:
jobId, companySubcategoryId
- Associazione N:N senza metadata
job.jobGroups, job.rolesβ
Anagrafiche semplici: PK + label.
π File chiaveβ
TrainingHub.Database/job/Tables/*.sql (13)
- Indici significativi:
IX_workers_fiscalCode, IX_workers_active
(entrambi filtered per minimizzare dimensione)
β οΈ Debito tecnicoβ
π Vedi ancheβ