Passa al contenuto principale

Dominio fin — Panoramica sviluppatore

🎯 Cosa fa

Il dominio fin (funded projects) gestisce i progetti formativi finanziati da FondItalia: ciclo di vita del progetto, fasi, moduli, edizioni, iscrizioni, aziende partecipanti, rendicontazione.

Dominio grande: ~29 tabelle. Questa pagina copre il core F2 (8 tabelle): progetti, fasi, moduli, edizioni, aziende, iscrizioni, adesioni. Le aree restanti (spese, staff, documenti, integrazioni, anagrafiche di supporto) saranno documentate in spec successive.

🗺️ Mappa moduli

Database — TrainingHub.Database/fin/

Core in questa documentazione (8):

AreaTabellaRuolo
Progettifin.projectsProgetto formativo finanziato
Progettifin.phasesAnagrafica fasi (ordinate, con managedType)
Progettifin.projectPhasesIstanza fase per progetto (stato + completionRate)
Strutturafin.modulesModuli formativi del progetto
Strutturafin.editionsEdizioni del modulo (replicazioni)
Partecipazionefin.projectCompaniesN:N progetto ↔ azienda + regime aiuto
Partecipazionefin.enrollmentsIscrizione lavoratore → edizione
Partecipazionefin.companyMembershipsAdesione azienda al fondo

Estensioni coperte lato utente (dettaglio dev pianificato come lavoro futuro):

AreaTabellePagina utente
Documenti & compliancecompanyDocuments, projectDocuments, staffDocuments, documentTypesDocumenti di progetto
Fondi & bandiaccounts, budgets, cofinancing, contributions, noticesFondi, bandi e budget
Speseexpenses, expenseCategories, expenseDocumentsSpese e rendicontazione
Staff & sessionistaff (FK nullable userId → kset.users per riuso identità / email / ruoli), projectStaff, sessions, attendanceRegisters, phaseRequirements, projectHistoryStaff e sessioni
Anagrafiche & integrazioniteachingMethods, thematicAreas, integrationRequestsAnagrafiche e integrazioni

Schema DB dettagliato di queste estensioni non incluso in Schema DB (focus sulle 8 core).

Documentazione pregressa

Ricco materiale disponibile in:

  • docs/fonditalia-client-overview.md — panoramica cliente-friendly delle fasi (call 03/04/2026).
  • docs/fonditalia-technical-overview.md — overview tecnica.
  • docs/fonditalia_context_for_claude_code.md — contesto storico.
  • docs/superpowers/specs/2026-04-02-fonditalia-integration-design.md e 2026-04-03-fonditalia-v2-design.md — spec iniziali.

UI CRUD — TrainingHub.BackOffice/Components/CRUD/fin/

~29 entità CRUD auto-generate. Pattern identico a inv/reg/edu/job (vedi componenti UI inv).

Le 8 entità core:

  • Project, Phase, ProjectPhase
  • Module, Edition
  • ProjectCompany, Enrollment, CompanyMembership

🔧 Enum e stati

Dal file TrainingHub.Shared/Enums.cs:

public enum AccountType { rete, monoaziendale }
public enum PhaseManagedType { active, tracking, tracking_readonly }
public enum PhaseRequirementType { document, data_field, action }
public enum ProjectStatus { BOZZA, IN_CONFIGURAZIONE, ANALISI_FABBISOGNI,
IN_COMPOSIZIONE, PRESENTATO, IN_CONDIVISIONE, CONDIVISIONE_OK,
CONDIVISIONE_NEGATA, INVIO_ALLEGATI_AZIENDE, IN_APPROVAZIONE,
APPROVATO, APPROVATO_CON_MODIFICHE, RIGETTATO, IN_PREPARAZIONE,
IN_EROGAZIONE, EROGAZIONE_COMPLETATA, IN_RENDICONTAZIONE,
RENDICONTAZIONE_INVIATA, CHIUSO, IN_INTEGRAZIONI, SALDO,
REVOCATO, RINUNCIATO }
public enum AidRegime { de_minimis, aiuti_formazione }
public enum ProjectPhaseStatus { not_started, in_progress, completed, skipped }
public enum MembershipStatus { active, ceased }
public enum DocumentStatus { da_richiedere, richiesto, ricevuto, approvato, scaduto }
public enum DocumentSubject { azienda, progetto, docente, modulo, sessione, corsista, spesa }
public enum AllocationMode { total, pro_quota }
public enum ExpenseDocumentRole { costo, pagamento }

🧩 Pattern chiave

Ciclo a fasi

Il progetto segue una sequenza di fasi regolamentate. Ogni fase ha:

  • Un managedType: active (gestita nel sistema), tracking (solo stato), tracking_readonly (esterna, no dati).
  • Requisiti (phaseRequirements fuori scope): documenti, campi dati, azioni richieste per chiudere la fase.
  • Un flag hideable che permette di saltarla.

Lo stato del progetto (projects.status) è sincronizzato con la fase attiva, ma con più granularità (23 stati vs ~12 fasi). La logica di sincronizzazione non è documentata — candidata a una pagina Logica applicativa in spec successiva.

Multi-progetto per azienda

Un'azienda può partecipare a più progetti contemporaneamente via projectCompanies. La disponibilità sul conto (companyMemberships.availableBalance) è condivisa: il sistema dovrebbe scalarla con l'avvio di nuovi progetti, ma la logica non è chiara.

Integrazione esterna FemiWeb

Presentazione, rendicontazione e comunicazioni con FondItalia passano da FemiWeb (piattaforma esterna). Il sistema esporta/importa dati con FemiWeb — la tabella integrationRequests (fuori scope) traccia queste comunicazioni.

📦 Dipendenze

  • Brighela.SimpleCRUD — CRUD base
  • UI stack standard (DevExpress, Tabiot)
  • Cross-dominio:
    • fin.projectCompanies.companyIdreg.companies(id)
    • fin.companyMemberships.companyIdreg.companies(id)
    • fin.enrollments.workerIdjob.workers(id)

📁 File chiave

  • Database/fin/Tables/*.sql (~29)
  • BackOffice/Components/CRUD/fin/*.razor (~29)
  • Shared/Enums.cs — enum progetto, fase, regime, stato
  • docs/fonditalia-*.md — documentazione storica

⚠️ Domande aperte / debito tecnico

  • Sincronizzazione projects.statusprojectPhases.status. Logica non documentata. Chi aggiorna chi?
  • Transizioni stato progetto. Macchina a stati formale vs transizioni ad hoc nel code-behind? Verificare.
  • Validazione saldo disponibile. Un progetto che supera la disponibilità dell'azienda non è bloccato automaticamente.
  • fin.editions vs edu.trainingSessions. Concettualmente simili: due concetti separati o uno da riusare?
  • Integrazione FemiWeb. Gestita via integrationRequests ma non esiste documentazione di protocollo/payload.
  • phaseRequirements (fuori scope). Logica di validazione "fase completabile solo se requisiti OK": dov'è?

🔗 Vedi anche