Tutorial — aggiungere un campo al dominio fin
Pattern generale identico agli altri domini: vedi
Aggiungere un campo su inv.invoices.
🎯 Casi tipici in fin
Campo su projects
Es. aggiungere un campo externalProjectId (riferimento esterno al
codice FemiWeb).
- Editare
Database/fin/Tables/projects.sql, aggiungere[externalProjectId] NVARCHAR(128) NULL+ extended property. - Conf:
_conf/projects.dxgrid.conf.json, campo in form, posizionamento nelFormOrder. - Rigenerare via MCP.
Campo sul ciclo di vita fase
Es. aggiungere escalationLevel a projectPhases.
- Campo sul ciclo di vita: se impatta le transizioni stato, aggiornare anche la logica (da documentare in una pagina Logica applicativa in spec successiva).
Nuovo stato progetto
Aggiungere valore all'enum ProjectStatus (es. IN_CORSO_ESAMI).
- Modificare
TrainingHub.Shared/Enums.cs. - Estendere il CHECK constraint del DB.
TrainingHub.Database/fin/Tables/projects.sql:22portaCONSTRAINT [CK_projects_status] CHECK ([status]='RINUNCIATO' OR … OR [status]='BOZZA'), che enumera i 21 stati uno per uno.statusè sì una stringa, ma il vincolo la chiude: senza toccarlo, il primoINSERT/UPDATEcol nuovo stato fallisce sul CHECK, a runtime e non in compilazione. - Aggiungere lo stato alla mappa stato → fase
(
Services/FundedTraining/ProjectStatusPhaseMap.cs) e alle transizioni ammesse (ProjectStatusTransitions.cs): uno stato che non compare in nessuna delle due è raggiungibile solo scrivendo a mano sul DB. - Aggiornare traduzioni (localizations).
- Documentare transizione (da-quale-stato, a-quale-stato).
Nuovo tipo documento
Aggiungere voce a documentTypes (anagrafica, fuori scope).
- Solo dati: nessun cambio schema.
- Eventualmente aggiornare UI in modulo documenti.
⚠️ Considerazioni fin-specifiche
- Integrazione FemiWeb. Modifiche che impattano dati esportati richiedono aggiornamento del protocollo di export.
- Validazioni regolamentari. Alcune regole sono imposte da FondItalia (es. soglia 70% presenza). Non implementarle silenziosamente lato UI: documentare e concordare con stakeholder.
- Retro-compatibilità con progetti storici. Campi nullable per non rompere dati esistenti.