init
This commit is contained in:
95
src/data/visitWorks.ts
Normal file
95
src/data/visitWorks.ts
Normal file
@ -0,0 +1,95 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user