import type { DossierVisitFindingRow, VisitFindingDefinitionRow, } from './types'; export const VISIT_FINDING_SEED: VisitFindingDefinitionRow[] = [ { code: 'structural_crack', label: 'Fissure structurelle / désordre porteur', default_works_delta_eur: 15000, severity: 5, sort_order: 10, }, { code: 'roof_full_replace', label: 'Toiture à refaire (complète)', default_works_delta_eur: 35000, severity: 5, sort_order: 20, }, { code: 'roof_partial', label: 'Toiture partielle / zinguerie lourde', default_works_delta_eur: 8000, severity: 3, sort_order: 30, }, { code: 'humidity_basement', label: 'Infiltrations cave / vide sanitaire', default_works_delta_eur: 12000, severity: 3, sort_order: 40, }, { code: 'electrical_rewire', label: 'Rénovation électrique complète', default_works_delta_eur: 15000, severity: 4, sort_order: 50, }, { code: 'asbestos', label: 'Présence amiante / désamiantage à prévoir', default_works_delta_eur: 10000, severity: 4, sort_order: 60, }, { code: 'septic_non_conform', label: 'Assainissement non conforme', default_works_delta_eur: 12000, severity: 3, sort_order: 70, }, { code: 'facade_insulation', label: 'ITE / ravalement lourd', default_works_delta_eur: 25000, severity: 3, sort_order: 80, }, { code: 'heat_pump_full', label: 'Chauffage à refaire (pompe à chaleur + réseau)', default_works_delta_eur: 18000, severity: 2, sort_order: 90, }, ]; export function definitionMap( defs: VisitFindingDefinitionRow[], ): Map { return new Map(defs.map((d) => [d.code, d])); } export function sumCheckedVisitWorksEUR( findings: DossierVisitFindingRow[], defs: VisitFindingDefinitionRow[], ): number { const map = definitionMap(defs); let sum = 0; for (const f of findings) { if (!f.checked) continue; const def = map.get(f.finding_code); if (!def) continue; const delta = f.works_delta_override_eur != null ? f.works_delta_override_eur : def.default_works_delta_eur; sum += delta; } return sum; }