96 lines
2.2 KiB
TypeScript
96 lines
2.2 KiB
TypeScript
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<string, VisitFindingDefinitionRow> {
|
|
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;
|
|
}
|