Schema DB fin (core)
π― Cosa faβ
Persistence layer del dominio formazione finanziata. 48 tabelle totali β questa pagina dettaglia le 7 core della spec corrente.
πΊοΈ Tabelle core (7)β
| Area | Tabella | Ruolo |
|---|---|---|
| Progetti | fin.projects | Progetto finanziato |
| Progetti | fin.phases | Anagrafica fasi |
| Progetti | fin.projectPhases | Fasi istanziate per progetto |
| Struttura | fin.modules | Moduli formativi |
| Struttura | fin.editions | Edizioni dei moduli |
| Partecipazione | fin.projectCompanies | Aziende nel progetto |
| Partecipazione | fin.companyMemberships | Adesioni al fondo |
π Relazioniβ
Referenze esterne:
fin.projects.accountIdβfin.accounts(id)(fuori scope)fin.projects.callWindowIdβfin.callWindows(id)(fuori scope)fin.projects.trainingSessionIdβedu.trainingSessions(id)fin.projects.implementingBodyIdβfin.implementingBodies(id)(fuori scope)fin.modules.courseIdβedu.courses(id)fin.companyMemberships.companyIdβreg.companies(id)fin.companyMemberships.accountIdβfin.accounts(id)(fuori scope)fin.projectCompanies.companyIdβreg.companies(id)fin.modules.thematicAreaIdβfin.thematicAreas(id)(fuori scope)fin.modules.teachingMethodIdβfin.teachingMethods(id)(fuori scope)
ποΈ Dettaglio tabelleβ
fin.projectsβ
- PK:
id - FK (tutte NOT NULL):
accountId,callWindowId β fin.callWindows(id),trainingSessionId,implementingBodyId - Campi chiave:
code(stringa),label(stringa estesa)status(default'BOZZA',CK_projects_statuscon 21 valori) β rif. enumProjectStatus- Date:
submissionDate,approvalDate,closureDate,settlementDate,rendicontazioneDeadline hourlyRate(default 20.00,CK> 0 e β€ 25)notes(NVARCHAR MAX)
Rimosse dal modello:
noticeId(sostituita dacallWindowIdin A),startDate,endDateetotalHours(rimosse in C).
fin.phasesβ
- PK:
id - Campi:
codeValue(string identificativo),label,sortOrder,managedType(active/tracking/tracking_readonly),hideable(default 0),description
fin.projectPhasesβ
- PK:
id - FK:
projectId β fin.projects(id),phaseId β fin.phases(id) - Campi:
status(default'not_started', enumProjectPhaseStatus),completionRate(0-100),startedAt,completedAt,forceUnlocked(default 0),notes
fin.modulesβ
- PK:
id(GUID proprio; dal 2026-07-13 non piΓΉ condiviso conedu.courses) - FK:
courseId β edu.courses(id),projectId,thematicAreaId(nullable),teachingMethodId(nullable) - UNIQUE:
(projectId, courseId)β un corso una volta per progetto; lo stesso corso puΓ² essere modulo di piΓΉ progetti - Campi:
hours(decimali),notes
fin.editionsβ
- PK:
id - FK:
moduleId β fin.modules(id) - Campi:
maxPeople(nullable),notes
fin.projectCompaniesβ
- PK:
id - FK:
projectId,companyId - Campi:
aidRegime(enumAidRegime: de_minimis, aiuti_formazione),notes
fin.companyMembershipsβ
- PK:
id - FK:
companyId β reg.companies(id),accountId β fin.accounts(id) - Campi:
inpsCode,memberSince,memberUntil,availableBalance(decimali),status(default'active', enumMembershipStatus)
π Iscrizioni lavoratori (dominio edu)β
Le iscrizioni dei lavoratori a edizioni FondItalia non vivono in una tabella fin dedicata: risiedono in edu.workerTrainingDetails, con trainingSessionId = fin.editions.id (shared PK: fin.editions estende edu.trainingSessions). Le presenze sono tracciate dalle colonne attendanceHours, attendanceRate e passed della stessa tabella.
La tabella fin.enrollments Γ¨ stata rimossa: non esistono piΓΉ record separati di iscrizione nello schema fin.
πͺ Visteβ
| Vista | Scopo |
|---|---|
vw_projectsData | Lista progetti per griglia: project + account + sportello + counts (modules, editions, companies, enrollments) + budget totale + speso + percentuale uso |
vw_projectEnrollments | Iscrizioni per edizione: edition + module + project + worker + company + regime + attendance |
vw_projectExpensesSummary | Aggregato per progetto + categoria: count voci, totale, count voci linkate a iscrizioni (via edu.enrollmentCosts.expenseId) |
vw_expensesData | Griglia voci di spesa: fin.expenses + la risorsa collegata, per la pagina spese e il foglio di rendicontazione |
vw_projectFunding | Contributo del progetto: ore-persona (ore modulo Γ iscritti di quel modulo, sommate), ritiri, hourlyRate, budget e speso per capitolo A/B/D |
vw_projectFinancialBalanceCategories | Budget vs speso vs delta, per progetto e categoria (sopra vw_projectExpensesSummary + fin.budgets) |
vw_projectCofinancingByCompany | Cofinanziamento del progetto raggruppato per azienda partecipante |
vw_projectPhaseStatus | Formato lungo progetto Γ fase per il pivot della dashboard: CROSS JOIN su tutte le fasi, quelle mai seminate escono not_started |
vw_dashboardKpi | Parte non parametrica dei KPI di periodo: una riga per progetto con le date d'ancoraggio di ogni indicatore e il contributo approvato |
vw_accountBalanceProjection | Totale conto: disponibilitΓ corrente + proiezione dei versamenti maturati dall'ultimo aggiornamento per-azienda. Solo adesioni attive |
π Tabelle fuori scope (41)β
Vedi Panoramica per elenco completo per area.
π File chiaveβ
TrainingHub.Database/fin/Tables/*.sqlβ 48 tabelleTrainingHub.Database/fin/Views/*.sqlβ 10 visteTrainingHub.Shared/Enums.csβ enum dominio
β οΈ Debito tecnicoβ
-
Risolto:fin.projects.statuscome stringa libera.CK_projects_statusvincola la colonna ai 21 valori dell'enumProjectStatus. -
Indici sui filtri frequenti.IX_projectCompanies_companyIdesiste giΓ (fin/Tables/projectCompanies.sql:16). -
editionssenza date. Le edizioni non hanno date di inizio e fine in questa tabella (forse insessions, fuori scope). ScomoditΓ per reportistica da elementi core. -
projectPhases.completionRate. Come viene calcolato? Manuale o derivato dal numero di requisiti soddisfatti? Documentazione assente. -
companyMemberships.availableBalance. Chi la aggiorna? Movimenti attesi quando un progetto viene approvato / saldato. -
Risolto: la colonna Γ¨ stata rimossa in C; le ore si sommano datotalHourssuprojects.modules.hours.
π Vedi ancheβ
- Panoramica dominio
- Aggiungere un campo
- Dominio
reg: schema DB - Dominio
job: schema DB