Logiche Tecniche
Descrizione delle logiche tecniche implementate nel modulo Prestazioni Professionisti.
🧮 Calcolo dei prezzi suggeriti
Prestazioni Q (F.01/F.02)
Il prezzo suggerito per le prestazioni Q viene calcolato con la formula:
prezzo = V × P × G × Q
Dove:
- V: Valore del progetto (
project_value) - P: Parametro valore dell'allegato (
value_parameter) - G: Grado di complessità dell'opera (
g_complexity) - Q: Coefficiente della prestazione (
coefficient)
Pratiche P (F.04)
Per le pratiche P viene fornito un range di prezzi suggeriti:
- min_price: Importo minimo consigliato
- max_price: Importo massimo consigliato
📊 Struttura dei gruppi
Gli item dell'Allegato A vengono organizzati in 4 gruppi:
| Gruppo | Descrizione | Contenuto |
|---|---|---|
| F.01 | Progettazione | Prestazioni Q con sezione radice F.01 |
| F.02 | Direzione lavori | Prestazioni Q con sezione radice F.02 |
| F.03 | Altro e specifiche | Item personalizzati (senza template) |
| F.04 | Pratiche e documenti | Prestazioni P (pratiche) |
💰 Calcolo dei financials
Il calcolo dei totali finanziari segue questo flusso:
1. Totale soggetto a sconto/rincaro
Solo i gruppi F.01, F.02 e F.03 sono soggetti a sconto o rincaro.
discountableTotal = F.01 + F.02 + F.03
2. Applicazione sconto/rincaro
adjustmentValue = discountableTotal × (percentage / 100) × sign
Dove sign è -1 per sconto, +1 per rincaro.
3. Totale professionale
professionalTotal = discountableTotal + adjustmentValue + F.04
4. Calcolo IVA e cassa previdenziale
- IVA professionale:
professionalTotal × vatRate - Spese: calcolate come percentuale del totale F.01-F.03
- Bolli/imposte: importo fisso configurato
- Cassa previdenziale: calcolata sulla base imponibile totale
5. Totale finale
grandTotal = professionalTotal + pensionAmount + expenses + duties + totalVat
🗄️ Sistema di caching
Il modulo utilizza un sistema di caching per ottimizzare le performance.
Chiavi di cache
| Chiave | Contenuto | Invalidazione |
|---|---|---|
g_complexity_attachment_{id} | Complessità G | Salvataggio allegato |
project_parameters_{id} | Parametri V, G, P | Salvataggio allegato |
groups_attachment_{id} | Struttura gruppi | Aggiornamento financials |
q_coefficient_{id} | Coefficiente Q | Salvataggio template Q |
p_item_template_parameters_{id} | Min/max prezzo | Salvataggio template P |
Invalidazione
La cache viene invalidata automaticamente:
- Al salvataggio dell'allegato
- Al salvataggio dei template Q o P
- Alla chiamata esplicita di
resetCache()
🔄 Versioning degli allegati
Ogni Allegato A supporta il versioning tramite:
- generation_id: Identifica la "famiglia" di versioni
- version: Numero progressivo della versione
- archived_at: Data di archiviazione della versione precedente
Alla conferma di un allegato, viene creata una nuova versione e la precedente viene archiviata.
🌳 Struttura ad albero delle sezioni Q
Le sezioni Q sono organizzate in una struttura gerarchica:
F.01 (sezione radice)
├── Sottosezione 1
│ ├── Prestazione Q
│ └── Prestazione Q
└── Sottosezione 2
└── Prestazione Q
F.02 (sezione radice)
├── Sottosezione 1
└── Sottosezione 2
La relazione parent-child è gestita dal campo parent_id nella tabella
pw_q_section_templates.