-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(feat-106): fix inertie calculation and add unit tests
- Loading branch information
Jérôme GAVIGNET
committed
Oct 9, 2024
1 parent
3729bc6
commit ef764bd
Showing
4 changed files
with
432 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,88 +1,153 @@ | ||
import enums from './enums.js'; | ||
import { getKeyByValue, requestInput } from './utils.js'; | ||
|
||
function inertie_ph_lourd(de, du) { | ||
const methode_saisie_u = requestInput(de, du, 'methode_saisie_u'); | ||
if (methode_saisie_u === 'non isolé') { | ||
const type_plancher_haut = requestInput(de, du, 'type_plancher_haut'); | ||
if (!type_plancher_haut) return 1; | ||
if (type_plancher_haut.includes('lourd')) return 1; | ||
} | ||
return 0; | ||
} | ||
import { getKeyByValue } from './utils.js'; | ||
|
||
export class Inertie { | ||
inertie_ph_lourd(de) { | ||
const type_isolation = Number.parseInt(de.enum_type_isolation_id); | ||
|
||
function inertie_pb_lourd(de, du) { | ||
const methode_saisie_u = requestInput(de, du, 'methode_saisie_u'); | ||
const type_plancher_bas = requestInput(de, du, 'type_plancher_bas'); | ||
const type_adjacence = requestInput(de, du, 'type_adjacence'); | ||
if (type_plancher_bas.includes('lourd')) return 1; | ||
if ( | ||
methode_saisie_u === 'non isolé' && | ||
type_plancher_bas === 'dalle béton' && | ||
type_adjacence === 'terre-plein' | ||
) { | ||
return 1; | ||
/** | ||
* Type isolation | ||
* 2 - Non isolé | ||
* 4 - ITE | ||
* 9 - isolé mais type d'isolation inconnu | ||
*/ | ||
if ([2, 4, 9].includes(type_isolation)) { | ||
/** | ||
* Type Plancher Haut | ||
* 8 - Dalle béton | ||
* 11 - Plafond lourd type entrevous terre-cuite, poutrelles béton | ||
*/ | ||
const type_plancher_haut = Number.parseInt(de.enum_type_plancher_haut_id); | ||
if (!type_plancher_haut) return 1; | ||
if ([8, 11].includes(type_plancher_haut)) return 1; | ||
} | ||
return 0; | ||
} | ||
return 0; | ||
} | ||
|
||
function inertie_mur_lourd(de, du) { | ||
const type_isolation = requestInput(de, du, 'type_isolation'); | ||
if (type_isolation === 'non isolé' || type_isolation === 'ite') { | ||
const msm = requestInput(de, du, 'materiaux_structure_mur'); | ||
if (msm.includes('pierre') || msm.includes('pisé')) return 1; | ||
if (msm.includes('sandwich')) return 1; | ||
inertie_pb_lourd(de) { | ||
const methode_saisie_u = Number.parseInt(de.enum_methode_saisie_u_id); | ||
const type_isolation = Number.parseInt(de.enum_type_isolation_id); | ||
|
||
/** | ||
* Type isolation | ||
* 2 - Non isolé | ||
* 4 - ITE | ||
* 9 - isolé mais type d'isolation inconnu | ||
* | ||
* Méthode Saisie | ||
* 1 - non isolé | ||
*/ | ||
if (methode_saisie_u === 1 || [2, 4, 9].includes(type_isolation)) { | ||
/** | ||
* Type Plancher Bas | ||
* 9 - Dalle béton | ||
* 11 - Plancher lourd type entrevous terre-cuite, poutrelles béton | ||
* 12 - Plancher à entrevous isolant | ||
*/ | ||
const type_plancher_bas = Number.parseInt(de.enum_type_plancher_bas_id); | ||
if (!type_plancher_bas) return 1; | ||
if ([9, 11, 12].includes(type_plancher_bas)) return 1; | ||
} | ||
return 0; | ||
} | ||
return 0; | ||
} | ||
|
||
export default function calc_inertie(enveloppe) { | ||
const inertie = {}; | ||
|
||
// pb | ||
const pb = enveloppe.plancher_bas_collection.plancher_bas || []; | ||
const s_pb_lourd = pb.reduce((acc, pb) => { | ||
const de = pb.donnee_entree; | ||
const du = pb.donnee_utilisateur; | ||
return acc + de.surface_paroi_opaque * inertie_pb_lourd(de, du); | ||
}, 0); | ||
const s_pb_total = pb.reduce((acc, pb) => acc + pb.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_plancher_bas_lourd = s_pb_lourd / s_pb_total > 0.5 ? 1 : 0; | ||
|
||
// ph | ||
const ph = enveloppe.plancher_haut_collection.plancher_haut || []; | ||
const s_ph_lourd = ph.reduce((acc, ph) => { | ||
const de = ph.donnee_entree; | ||
const du = ph.donnee_utilisateur; | ||
return acc + de.surface_paroi_opaque * inertie_ph_lourd(de, du); | ||
}, 0); | ||
const s_ph_total = ph.reduce((acc, ph) => acc + ph.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_plancher_haut_lourd = s_ph_lourd / s_ph_total > 0.5 ? 1 : 0; | ||
|
||
// mur | ||
const mur = enveloppe.mur_collection.mur; | ||
const s_mur_lourd = mur.reduce((acc, mur) => { | ||
const de = mur.donnee_entree; | ||
const du = mur.donnee_utilisateur; | ||
return acc + de.surface_paroi_opaque * inertie_mur_lourd(de, du); | ||
}, 0); | ||
const s_mur_total = mur.reduce((acc, mur) => acc + mur.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_paroi_verticale_lourd = s_mur_lourd / s_mur_total > 0.5 ? 1 : 0; | ||
|
||
const nb_inertie_lourde = | ||
inertie.inertie_plancher_bas_lourd + | ||
inertie.inertie_plancher_haut_lourd + | ||
inertie.inertie_paroi_verticale_lourd; | ||
|
||
if (nb_inertie_lourde === 0) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'légère'); | ||
} else if (nb_inertie_lourde === 1) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'moyenne'); | ||
} else if (nb_inertie_lourde === 2) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'lourde'); | ||
} else if (nb_inertie_lourde === 3) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'très lourde'); | ||
inertie_mur_lourd(de) { | ||
const methode_saisie_u = Number.parseInt(de.enum_methode_saisie_u_id); | ||
const type_isolation = Number.parseInt(de.enum_type_isolation_id); | ||
|
||
/** | ||
* Type isolation | ||
* 2 - Non isolé | ||
* 4 - ITE | ||
* 9 - isolé mais type d'isolation inconnu | ||
* | ||
* Méthode Saisie | ||
* 1 - non isolé | ||
*/ | ||
if (methode_saisie_u === 1 || [2, 4, 9].includes(type_isolation)) { | ||
const materiaux_structure_mur = Number.parseInt(de.enum_materiaux_structure_mur_id); | ||
const epaisseur_structure = Number.parseFloat(de.epaisseur_structure); | ||
|
||
/** | ||
* Matériaux Structure mur | ||
* 2 - Murs en pierre de taille et moellons constitué d'un seul matériaux | ||
* 3 - Murs en pierre de taille et moellons avec remplissage tout venant | ||
* 4 - Murs en pisé ou béton de terre stabilisé (à partir d'argile crue) | ||
* 19 - Murs sandwich béton/isolant/béton (sans isolation rapportée) | ||
* 21 - Autre matériau traditionel ancien | ||
*/ | ||
if ([2, 3, 4, 19].includes(materiaux_structure_mur)) return 1; | ||
|
||
/** | ||
* Matériaux Structure mur | ||
* 11 - Murs en blocs de béton pleins | ||
* 13 - Murs en béton banché | ||
*/ | ||
if ([11, 13].includes(materiaux_structure_mur) && epaisseur_structure > 7) return 1; | ||
|
||
/** | ||
* Matériaux Structure mur | ||
* 12 - Murs en blocs de béton creux | ||
*/ | ||
if ([12].includes(materiaux_structure_mur) && epaisseur_structure > 11) return 1; | ||
|
||
/** | ||
* Matériaux Structure mur | ||
* 8 - Murs en briques pleines simples | ||
* 9 - Murs en briques pleines doubles avec lame d'air | ||
* 10 - Murs en briques creuses | ||
* 15 - Brique terre cuite alvéolaire | ||
*/ | ||
if ([8, 9, 10, 15].includes(materiaux_structure_mur) && epaisseur_structure > 10.5) return 1; | ||
} | ||
return 0; | ||
} | ||
|
||
return inertie; | ||
/** | ||
* @param enveloppe {Enveloppe} | ||
*/ | ||
calc_inertie(enveloppe) { | ||
const inertie = {}; | ||
|
||
const pb = enveloppe.plancher_bas_collection.plancher_bas || []; | ||
const s_pb_lourd = pb.reduce((acc, pb) => { | ||
const de = pb.donnee_entree; | ||
return acc + de.surface_paroi_opaque * this.inertie_pb_lourd(de); | ||
}, 0); | ||
const s_pb_total = pb.reduce((acc, pb) => acc + pb.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_plancher_bas_lourd = s_pb_lourd / s_pb_total >= 0.5 ? 1 : 0; | ||
|
||
const ph = enveloppe.plancher_haut_collection.plancher_haut || []; | ||
const s_ph_lourd = ph.reduce((acc, ph) => { | ||
const de = ph.donnee_entree; | ||
return acc + de.surface_paroi_opaque * this.inertie_ph_lourd(de); | ||
}, 0); | ||
const s_ph_total = ph.reduce((acc, ph) => acc + ph.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_plancher_haut_lourd = s_ph_lourd / s_ph_total >= 0.5 ? 1 : 0; | ||
|
||
const mur = enveloppe.mur_collection.mur || []; | ||
const s_mur_lourd = mur.reduce((acc, mur) => { | ||
const de = mur.donnee_entree; | ||
return acc + de.surface_paroi_opaque * this.inertie_mur_lourd(de); | ||
}, 0); | ||
const s_mur_total = mur.reduce((acc, mur) => acc + mur.donnee_entree.surface_paroi_opaque, 0); | ||
inertie.inertie_paroi_verticale_lourd = s_mur_lourd / s_mur_total >= 0.5 ? 1 : 0; | ||
|
||
const nb_inertie_lourde = | ||
inertie.inertie_plancher_bas_lourd + | ||
inertie.inertie_plancher_haut_lourd + | ||
inertie.inertie_paroi_verticale_lourd; | ||
|
||
if (nb_inertie_lourde === 0) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'légère'); | ||
} else if (nb_inertie_lourde === 1) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'moyenne'); | ||
} else if (nb_inertie_lourde === 2) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'lourde'); | ||
} else if (nb_inertie_lourde === 3) { | ||
inertie.enum_classe_inertie_id = getKeyByValue(enums.classe_inertie, 'très lourde'); | ||
} | ||
|
||
return inertie; | ||
} | ||
} |
Oops, something went wrong.