@open3cl/engine 1.11.3 → 1.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/10_besoin_fr.spec.js +1 -1
- package/10_clim.js +1 -1
- package/10_clim.spec.js +5 -9
- package/11_besoin_ecs.spec.js +1 -1
- package/11_ecs.js +2 -1
- package/11_ecs.spec.js +2 -2
- package/11_nadeq.js +1 -0
- package/11_nadeq.spec.js +1 -1
- package/12.4_pac.js +5 -3
- package/12.4_pac.spec.js +10 -18
- package/13.2_generateur_combustion.js +19 -16
- package/13.2_generateur_combustion.spec.js +10 -10
- package/13.2_generateur_combustion_bouilleur.js +5 -2
- package/13.2_generateur_combustion_bouilleur.spec.js +1 -1
- package/13.2_generateur_combustion_ch.js +8 -7
- package/13.2_generateur_combustion_ch.spec.js +7 -7
- package/13.2_generateur_combustion_chaudiere.js +5 -2
- package/13.2_generateur_combustion_chaudiere.spec.js +2 -2
- package/13.2_generateur_combustion_pdim.js +6 -6
- package/13.2_generateur_combustion_pdim.spec.js +1 -1
- package/13.2_generateur_combustion_pn.spec.js +1 -1
- package/13.2_generateur_pac.js +4 -1
- package/13.2_generateur_pac.spec.js +1 -1
- package/13_rendement_distribution_ecs.spec.js +1 -1
- package/14_generateur_ecs.js +2 -1
- package/14_generateur_ecs.spec.js +4 -4
- package/15_conso_aux.js +19 -17
- package/15_conso_aux.spec.js +8 -8
- package/16.2_production_enr.js +4 -3
- package/16.2_production_enr.spec.js +1 -1
- package/16_conso_eclairage.spec.js +1 -1
- package/2021_04_13_confort_ete.spec.js +1 -1
- package/2021_04_13_qualite_isolation.js +1 -1
- package/2021_04_13_qualite_isolation.spec.js +2 -2
- package/3.1_b.spec.js +1 -1
- package/3.2.1_mur.js +10 -9
- package/3.2.1_mur.spec.js +11 -19
- package/3.2.2_plancher_bas.js +4 -3
- package/3.2.2_plancher_bas.spec.js +10 -20
- package/3.2.3_plancher_haut.js +1 -1
- package/3.2.3_plancher_haut.spec.js +2 -2
- package/3.3.1.4_porte.js +1 -1
- package/3.3.1.4_porte.spec.js +2 -2
- package/3.3_baie_vitree.js +2 -2
- package/3.3_baie_vitree.spec.js +3 -3
- package/3.4_pont_thermique.js +6 -4
- package/3.4_pont_thermique.spec.js +7 -7
- package/3_deperdition.js +1 -0
- package/3_deperdition.spec.js +3 -3
- package/4_ventilation.js +2 -2
- package/4_ventilation.spec.js +1 -1
- package/5_conso_ventilation.spec.js +1 -1
- package/6.1_apport_gratuit.spec.js +2 -2
- package/6.2_surface_sud_equivalente.js +12 -9
- package/6.2_surface_sud_equivalente.spec.js +3 -3
- package/7_inertie.js +7 -4
- package/7_inertie.spec.js +1 -1
- package/8_intermittence.spec.js +1 -1
- package/9_besoin_ch.js +5 -3
- package/9_besoin_ch.spec.js +3 -3
- package/9_chauffage.js +12 -11
- package/9_chauffage.spec.js +7 -7
- package/9_conso_ch.spec.js +3 -3
- package/9_emetteur_ch.js +5 -5
- package/9_emetteur_ch.spec.js +1 -1
- package/9_generateur_ch.js +16 -13
- package/9_generateur_ch.spec.js +6 -6
- package/README.md +19 -19
- package/apport_et_besoin.spec.js +1 -1
- package/conso.js +18 -14
- package/conso.spec.js +3 -3
- package/core/assets/domain/synchronize-assets.js +2 -0
- package/core/assets/domain/synchronize-c1-tables.js +2 -0
- package/core/assets/domain/synchronize-dpe-ges-limit-values-tables.js +2 -0
- package/core/assets/domain/synchronize-enum-tables.js +2 -0
- package/core/assets/domain/synchronize-solicitations-tables.js +2 -0
- package/core/assets/domain/synchronize-valeur-tables.js +6 -0
- package/core/file/infrastructure/adapter/csv-parser.store.js +2 -1
- package/dpe-sanitizer.service.js +1 -0
- package/engine.js +2 -1
- package/enums.d.ts +1257 -0
- package/features/dpe/domain/models/baie-ets.model.ts +1 -1
- package/features/dpe/domain/models/baie-vitree.model.ts +6 -2
- package/features/dpe/domain/models/climatisation.model.ts +1 -1
- package/features/dpe/domain/models/dpe.model.ts +16 -23
- package/features/dpe/domain/models/ets.model.ts +1 -1
- package/features/dpe/domain/models/installation-chauffage.model.ts +54 -8
- package/features/dpe/domain/models/installation-ecs.model.ts +24 -6
- package/features/dpe/domain/models/mur.model.ts +1 -1
- package/features/dpe/domain/models/plancher.model.ts +1 -1
- package/features/dpe/domain/models/pont-thermique.model.ts +1 -1
- package/features/dpe/domain/models/porte.model.ts +1 -1
- package/features/dpe/domain/models/production-elec-enr.model.ts +1 -1
- package/features/dpe/domain/models/sortie.model.ts +1 -1
- package/features/dpe/domain/models/type-generateur.model.js +4 -3
- package/features/dpe/domain/models/type-habitation.model.js +8 -6
- package/features/dpe/domain/models/type-stockage.model.js +4 -3
- package/features/dpe/domain/models/type-ventilation.model.js +4 -3
- package/features/dpe/domain/models/ventilation.model.ts +1 -1
- package/features/dpe/infrastructure/ch/chTv.store.js +2 -2
- package/features/dpe/infrastructure/ecs/ecsTv.store.js +3 -3
- package/features/dpe/infrastructure/enveloppe/baieVitreeTv.store.js +1 -1
- package/features/dpe/infrastructure/froid/frTv.store.js +3 -3
- package/features/dpe/infrastructure/froid/frTv.store.spec.js +1 -1
- package/features/dpe/infrastructure/tv.store.js +1 -1
- package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.js +3 -0
- package/features/engine/domain/apport_et_besoin/apport_gratuit/apport-gratuit.service.js +3 -1
- package/features/engine/domain/apport_et_besoin/ch/besoin-ch.service.js +3 -1
- package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.js +9 -3
- package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +1 -1
- package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.js +2 -1
- package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.js +4 -1
- package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.js +3 -1
- package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.js +7 -2
- package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +1 -1
- package/features/engine/domain/ch/emetteur-ch.service.js +3 -1
- package/features/engine/domain/ch/emetteur-ch.service.spec.js +1 -1
- package/features/engine/domain/ch/generateur-ch.service.js +4 -1
- package/features/engine/domain/ch/generateur-ch.service.spec.js +3 -3
- package/features/engine/domain/ch/installation-ch.service.js +2 -0
- package/features/engine/domain/conso/conso.service.js +2 -0
- package/features/engine/domain/conso/froid/conso-froid.service.js +5 -1
- package/features/engine/domain/contexte.builder.js +2 -0
- package/features/engine/domain/ecs/generateur-ecs.service.js +1 -0
- package/features/engine/domain/ecs/installation-ecs.service.js +3 -0
- package/features/engine/domain/engine.service.js +1 -0
- package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.js +4 -1
- package/features/engine/domain/enveloppe/deperdition-enveloppe.service.js +3 -0
- package/features/engine/domain/enveloppe/deperdition.service.js +8 -4
- package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.js +4 -1
- package/features/engine/domain/enveloppe/mur/deperdition-mur.service.js +3 -1
- package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.js +3 -1
- package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +2 -2
- package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.js +4 -2
- package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.js +9 -1
- package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +1 -1
- package/features/engine/domain/enveloppe/porte/deperdition-porte.service.js +3 -1
- package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.js +3 -1
- package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +1 -1
- package/features/engine/domain/logement/nadeq.service.js +1 -1
- package/features/engine/domain/logement/nadeq.service.spec.js +1 -1
- package/features/engine/domain/models/contexte.model.ts +2 -2
- package/features/normalizer/domain/dpe-normalizer.service.js +1 -0
- package/ficheTechnique.js +4 -2
- package/globals.d.ts +14 -0
- package/package.json +3 -3
- package/preprocessor/index.js +1 -0
- package/tv.d.ts +759 -0
- package/tvs.d.ts +2 -7
- package/utils.js +8 -6
|
@@ -9,7 +9,7 @@ const { updateGenerateurPacs } = await import('./13.2_generateur_pac.js');
|
|
|
9
9
|
/**
|
|
10
10
|
* 13.2 - Substitution des générateurs "autre système thermodynamique" par un CET
|
|
11
11
|
* sur air ambiant équivalent selon la période d'installation.
|
|
12
|
-
* @see
|
|
12
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2
|
|
13
13
|
*/
|
|
14
14
|
describe('updateGenerateurPacs - substitution des générateurs thermodynamiques', () => {
|
|
15
15
|
test("aucune période d'installation renseignée : aucune modification", () => {
|
|
@@ -16,7 +16,7 @@ const { default: rendement_distribution_ecs } = await import('./13_rendement_dis
|
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* 13. Rendement de distribution de l'ECS
|
|
19
|
-
* @see
|
|
19
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13
|
|
20
20
|
*/
|
|
21
21
|
describe('rendement_distribution_ecs', () => {
|
|
22
22
|
test('ne retourne aucune valeur (fonction sans effet de sortie)', () => {
|
package/14_generateur_ecs.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { GenerateurEcsDI } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
2
|
import enums from './enums.js';
|
|
2
3
|
import {
|
|
3
4
|
bug_for_bug_compat,
|
|
@@ -200,7 +201,7 @@ const PVEILLEUSES_EXPORTEES_TRIBU = [10, 0.01];
|
|
|
200
201
|
* chauffe-eau gaz / GPL instantané 2001-2015, veilleuse de la méthode (100 W) retenue, et
|
|
201
202
|
* pveilleuse exportée par le DPE égale à 10 W ou 0,01 kW.
|
|
202
203
|
* @param typeGenerateurId {string|number} enum_type_generateur_ecs_id
|
|
203
|
-
* @param di {
|
|
204
|
+
* @param di {GenerateurEcsDI}
|
|
204
205
|
* @returns {boolean}
|
|
205
206
|
*/
|
|
206
207
|
export function isPveilChauffeEauGazInstantaneTribu(typeGenerateurId, di) {
|
|
@@ -90,7 +90,7 @@ const { getChaudiereFioulDefautId } = await import('./13.2_generateur_combustion
|
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
92
|
* 14. Générateur d'ECS : rendements et consommations
|
|
93
|
-
* @see
|
|
93
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §14
|
|
94
94
|
*/
|
|
95
95
|
describe('rendements de génération (fonctions pures)', () => {
|
|
96
96
|
const di = { rpn: 0.9, qp0: 0.1, pveil: 0.02, Qgw: 1000 };
|
|
@@ -415,7 +415,7 @@ describe('calc_gen_ecs - consommation par générateur', () => {
|
|
|
415
415
|
|
|
416
416
|
/**
|
|
417
417
|
* 14.1 - Pertes de stockage forfaitaires (générateur électrique à accumulation).
|
|
418
|
-
* @see
|
|
418
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §14.1
|
|
419
419
|
*/
|
|
420
420
|
test('électrique avec stockage : pertes de stockage forfaitaires et matcher de volume', () => {
|
|
421
421
|
vi.mocked(tvColumnIDs).mockImplementation((table) =>
|
|
@@ -690,7 +690,7 @@ describe('calc_gen_ecs - consommation par générateur', () => {
|
|
|
690
690
|
|
|
691
691
|
/**
|
|
692
692
|
* Issue #39 : présence de veilleuse lue dans la fiche technique (de.presence_veilleuse).
|
|
693
|
-
* @see
|
|
693
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §14.1
|
|
694
694
|
*/
|
|
695
695
|
test.each([
|
|
696
696
|
[1, undefined, 0.02],
|
|
@@ -943,7 +943,7 @@ describe('calc_gen_ecs - consommation par générateur', () => {
|
|
|
943
943
|
|
|
944
944
|
/**
|
|
945
945
|
* Type 84 : chaudière fioul standard datant de la construction du bâtiment.
|
|
946
|
-
* @see
|
|
946
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §17.2.1.1
|
|
947
947
|
*/
|
|
948
948
|
test('type 84 combustion compatible 84 : chaudière de la période de construction retenue', () => {
|
|
949
949
|
vi.mocked(getChaudiereFioulDefautId).mockReturnValue('39');
|
package/15_conso_aux.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** @import { EmetteurChauffage, EmetteurChauffageDI, GenerateurChauffageDE, GenerateurChauffageDI } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
2
|
+
/** @import { GenerateurEcsDE, GenerateurEcsDI, InstallationEcsDE, InstallationEcsDI } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
3
|
import enums from './enums.js';
|
|
2
4
|
import tvs from './tv.js';
|
|
3
5
|
import { mois_liste, Njj, Tbase } from './utils.js';
|
|
@@ -11,8 +13,8 @@ const H_CHAUDIERE_BOIS = 10.5;
|
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* 15.1 Consommation des auxiliaires de génération
|
|
14
|
-
* @param di {
|
|
15
|
-
* @param de {
|
|
16
|
+
* @param di {GenerateurChauffageDI|GenerateurEcsDI}
|
|
17
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
16
18
|
* @param type {'ecs'|'ch'}
|
|
17
19
|
* @param besoin {number} Besoin en chauffage ou ecs pour ce générateur
|
|
18
20
|
* @param besoin_dep {number} Besoin en chauffage ou ecs pour ce générateur (mode dépensier)
|
|
@@ -31,7 +33,7 @@ export function conso_aux_gen(di, de, type, besoin, besoin_dep) {
|
|
|
31
33
|
* nominale réelle du générateur, comme le moteur de référence CSTB (Tribu) et comme le calcul
|
|
32
34
|
* dépensier. Autotests CSTB APP3-0-3 (chaudière bois collective 150 kW, Tribu Qaux_ch =
|
|
33
35
|
* 13,27 kWh) et IC4-0-1 (chaudière bois 300 kW, Tribu Qaux_ch = 864,60 kWh).
|
|
34
|
-
* @see
|
|
36
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
35
37
|
*/
|
|
36
38
|
const pnReel = di.pn / (de.ratio_virtualisation || 1);
|
|
37
39
|
let pe = pnReel;
|
|
@@ -53,7 +55,7 @@ export function conso_aux_gen(di, de, type, besoin, besoin_dep) {
|
|
|
53
55
|
* Installation collective virtualisée : Paux_g (W) est celle du générateur de l'immeuble
|
|
54
56
|
* (Pn = pe, puissance immeuble) et Caux_g = Paux_g × Bch_logement / Pn. Le terme G ne doit pas
|
|
55
57
|
* être proratisé par ratio_virtualisation (sinon G × ratio), comme le moteur CSTB (Tribu).
|
|
56
|
-
* @see
|
|
58
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
57
59
|
*/
|
|
58
60
|
const Paux_g_ch = g + h * (pe / 1000);
|
|
59
61
|
|
|
@@ -65,7 +67,7 @@ export function conso_aux_gen(di, de, type, besoin, besoin_dep) {
|
|
|
65
67
|
* le moteur de référence CSTB (Tribu) n'utilise aucune clé de répartition pour ces
|
|
66
68
|
* installations (DPE.Core : Calcul_installation.cs l.79-80, Calcul_generateur.cs l.1497,
|
|
67
69
|
* Calcul_batiment.cs l.652). La clé reste appliquée au collectif et à l'ECS.
|
|
68
|
-
* @see
|
|
70
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
69
71
|
*/
|
|
70
72
|
const ignoreCle = type === 'ch' && String(de.enum_type_installation_id) === '1';
|
|
71
73
|
const cle = ignoreCle ? 1 : de[`cle_repartition_${type}`] || 1;
|
|
@@ -78,7 +80,7 @@ export function conso_aux_gen(di, de, type, besoin, besoin_dep) {
|
|
|
78
80
|
* seconde fois (sinon Bch × (Sc / Sh)²), comme le moteur de référence CSTB (Tribu).
|
|
79
81
|
* Autotest CSTB MI5-0-8 : radiateur gaz, Sc = 96 m², Sh = 136 m², Tribu Qaux_ch = 84,69 kWh
|
|
80
82
|
* (59,78 kWh avec le double prorata, −29 %).
|
|
81
|
-
* @see
|
|
83
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
82
84
|
*/
|
|
83
85
|
di[`conso_auxiliaire_generation_${type}`] = (Paux_g_ch * besoinAppart) / pnReel || 0;
|
|
84
86
|
di[`conso_auxiliaire_generation_${type}_depensier`] = (Paux_g_ch * besoinAppartDep) / pnReel || 0;
|
|
@@ -167,9 +169,9 @@ function getFacteur(values, type, id, presenceVentilateur) {
|
|
|
167
169
|
|
|
168
170
|
/**
|
|
169
171
|
* Calcul de la consommation des auxiliaires de distribution de chauffage
|
|
170
|
-
* @param em_ch {
|
|
171
|
-
* @param de {
|
|
172
|
-
* @param di {
|
|
172
|
+
* @param em_ch { EmetteurChauffage[]}
|
|
173
|
+
* @param de {GenerateurChauffageDE} donnée du générateur de chauffage
|
|
174
|
+
* @param di {GenerateurChauffageDI} donnée intermédiaire du générateur de chauffage
|
|
173
175
|
* @param du {object} donnée utilisateur du générateur de chauffage
|
|
174
176
|
* @param surfaceHabitable {number}
|
|
175
177
|
* @param zcId {number} id de la zone climatique du bien
|
|
@@ -214,9 +216,9 @@ export function conso_aux_distribution_ch(
|
|
|
214
216
|
|
|
215
217
|
/**
|
|
216
218
|
* 15.2.1 Puissance des circulateurs de chauffage
|
|
217
|
-
* @param em_ch {
|
|
218
|
-
* @param de {
|
|
219
|
-
* @param di {
|
|
219
|
+
* @param em_ch { EmetteurChauffage[]}
|
|
220
|
+
* @param de {GenerateurChauffageDE} donnée du générateur de chauffage
|
|
221
|
+
* @param di {GenerateurChauffageDI} donnée intermédiaire du générateur de chauffage
|
|
220
222
|
* @param du {object} donnée utilisateur du générateur de chauffage
|
|
221
223
|
* @param surfaceHabitable {number}
|
|
222
224
|
* @param GV {number} déperdition de l'enveloppe
|
|
@@ -285,7 +287,7 @@ function getPuissanceCirculateur(em_ch, de, di, du, surfaceHabitable, GV, Tbase)
|
|
|
285
287
|
|
|
286
288
|
// Exposition de la longueur du réseau (lb) dans les données intermédiaires des émetteurs desservis
|
|
287
289
|
em_ch.forEach((em) => {
|
|
288
|
-
em.donnee_intermediaire = em.donnee_intermediaire || {};
|
|
290
|
+
em.donnee_intermediaire = /** @type {EmetteurChauffageDI} */ (em.donnee_intermediaire || {});
|
|
289
291
|
em.donnee_intermediaire.lb = Lem;
|
|
290
292
|
});
|
|
291
293
|
|
|
@@ -319,8 +321,8 @@ function getPuissanceCirculateur(em_ch, de, di, du, surfaceHabitable, GV, Tbase)
|
|
|
319
321
|
* température impose 15 °C, quel que soit l'ordre de saisie des émetteurs (comme le moteur de
|
|
320
322
|
* référence CSTB Tribu). Auparavant, seul le premier émetteur était considéré.
|
|
321
323
|
*
|
|
322
|
-
* @see
|
|
323
|
-
* @param em_ch {
|
|
324
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.1
|
|
325
|
+
* @param em_ch {EmetteurChauffage[]}
|
|
324
326
|
* @return {number}
|
|
325
327
|
*/
|
|
326
328
|
export function getDeltaDim(em_ch) {
|
|
@@ -343,8 +345,8 @@ export function getDeltaDim(em_ch) {
|
|
|
343
345
|
* CAS 3 - enum_bouclage_reseau_ecs_id = 3 (traçage) : conso = 0.14 * BECS_annuel * Sh_install / Sh_logement
|
|
344
346
|
*
|
|
345
347
|
* @param ecs {object} installation ECS
|
|
346
|
-
* @param de {
|
|
347
|
-
* @param di {
|
|
348
|
+
* @param de {InstallationEcsDE} donnée d'entrée de l'installation ECS
|
|
349
|
+
* @param di {InstallationEcsDI} donnée intermédiaire de l'installation ECS
|
|
348
350
|
* @param Sh_logement {number} surface habitable du logement
|
|
349
351
|
* @param Sh_immeuble {number} surface habitable de l'immeuble
|
|
350
352
|
* @param caId {number} id de la classe d'altitude
|
package/15_conso_aux.spec.js
CHANGED
|
@@ -36,7 +36,7 @@ const { conso_aux_gen, conso_aux_distribution_ch, conso_aux_distribution_ecs, ge
|
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* 15.1 Consommation des auxiliaires de génération
|
|
39
|
-
* @see
|
|
39
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
40
40
|
*/
|
|
41
41
|
describe('conso_aux_gen - auxiliaires de génération', () => {
|
|
42
42
|
let di;
|
|
@@ -94,7 +94,7 @@ describe('conso_aux_gen - auxiliaires de génération', () => {
|
|
|
94
94
|
/**
|
|
95
95
|
* Le besoin transmis par calc_chauffage est déjà proratisé par Sc / Sh : aucun second prorata.
|
|
96
96
|
* Autotest CSTB MI5-0-8 : radiateur gaz (G = 40, H = 0), Sc = 96 m², Sh = 136 m².
|
|
97
|
-
* @see
|
|
97
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
98
98
|
*/
|
|
99
99
|
test('chauffage : surface chauffée partielle sans second prorata Sc / Sh du besoin', () => {
|
|
100
100
|
const diPartiel = { pn: 20000 };
|
|
@@ -235,7 +235,7 @@ describe('conso_aux_gen - auxiliaires de génération', () => {
|
|
|
235
235
|
* installation individuelle (enum_type_installation_id = 1) : ce besoin est déjà proratisé
|
|
236
236
|
* par Sc / Sh, et le moteur CSTB (Tribu) n'utilise aucune clé pour ces installations.
|
|
237
237
|
* La clé reste appliquée au collectif et à l'ECS.
|
|
238
|
-
* @see
|
|
238
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.1
|
|
239
239
|
*/
|
|
240
240
|
describe('clé de répartition (issue #252)', () => {
|
|
241
241
|
test('chauffage, installation individuelle : la clé de répartition est ignorée', () => {
|
|
@@ -297,7 +297,7 @@ describe('conso_aux_gen - auxiliaires de génération', () => {
|
|
|
297
297
|
|
|
298
298
|
/**
|
|
299
299
|
* 15.2 Consommation des auxiliaires de distribution de chauffage
|
|
300
|
-
* @see
|
|
300
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2
|
|
301
301
|
*/
|
|
302
302
|
describe('conso_aux_distribution_ch - auxiliaires de distribution', () => {
|
|
303
303
|
const emCh = [
|
|
@@ -379,7 +379,7 @@ describe('conso_aux_distribution_ch - auxiliaires de distribution', () => {
|
|
|
379
379
|
* Seuls les émetteurs reliés au générateur (même enum_lien_generateur_emetteur_id) dimensionnent
|
|
380
380
|
* son circulateur. Autotest CSTB IC5-0-3 : chaudière (lien 1) sur plancher chauffant + convecteurs
|
|
381
381
|
* électriques d'appoint (lien 2) : Fcot du plancher (0,156), pas le forçage multi-émetteurs.
|
|
382
|
-
* @see
|
|
382
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.1
|
|
383
383
|
*/
|
|
384
384
|
test('émetteurs reliés à un autre générateur : exclus du dimensionnement du circulateur', () => {
|
|
385
385
|
const plancher = {
|
|
@@ -412,7 +412,7 @@ describe('conso_aux_distribution_ch - auxiliaires de distribution', () => {
|
|
|
412
412
|
/**
|
|
413
413
|
* La longueur du réseau le plus défavorisé (Lem) est exposée sous le nom lb dans la donnée
|
|
414
414
|
* intermédiaire de chaque émetteur desservi par le circulateur.
|
|
415
|
-
* @see
|
|
415
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.1
|
|
416
416
|
*/
|
|
417
417
|
test('longueur du réseau lb exposée dans la donnée intermédiaire des émetteurs', () => {
|
|
418
418
|
const em = [
|
|
@@ -640,7 +640,7 @@ describe('conso_aux_distribution_ch - auxiliaires de distribution', () => {
|
|
|
640
640
|
|
|
641
641
|
/**
|
|
642
642
|
* 15.2.1 Chute nominale de température de dimensionnement ΔθDim
|
|
643
|
-
* @see
|
|
643
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.1
|
|
644
644
|
*/
|
|
645
645
|
describe('getDeltaDim - chute nominale de température de dimensionnement', () => {
|
|
646
646
|
const em = (temp, type = '10') => ({
|
|
@@ -674,7 +674,7 @@ describe('getDeltaDim - chute nominale de température de dimensionnement', () =
|
|
|
674
674
|
|
|
675
675
|
/**
|
|
676
676
|
* 15.2.3 Consommation des auxiliaires de distribution d'ECS
|
|
677
|
-
* @see
|
|
677
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.3
|
|
678
678
|
*
|
|
679
679
|
* Les scénarios ci-dessous s'appuient sur l'année réduite à Janvier (31 jours,
|
|
680
680
|
* tefs = 10 °C) définie par les mocks en tête de fichier :
|
package/16.2_production_enr.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { EfConso, EpConso, SortieParEnergie } from './features/dpe/domain/models/sortie.model.js' */
|
|
1
2
|
import enums from './enums.js';
|
|
2
3
|
import { mois_liste, tv } from './utils.js';
|
|
3
4
|
import tvs from './tv.js';
|
|
@@ -152,7 +153,7 @@ export class ProductionENR {
|
|
|
152
153
|
|
|
153
154
|
/**
|
|
154
155
|
* Récupération des consommations électriques pour ch et ecs
|
|
155
|
-
* @type {
|
|
156
|
+
* @type {SortieParEnergie}
|
|
156
157
|
*/
|
|
157
158
|
let consoElec = conso.sortie_par_energie_collection.sortie_par_energie.find(
|
|
158
159
|
(sortie) => sortie.enum_type_energie_id === '1'
|
|
@@ -302,7 +303,7 @@ export class ProductionENR {
|
|
|
302
303
|
/**
|
|
303
304
|
* Mise à jour des consommations ef en minorant l'énergie primaire consommée par l'énergie autoconsommée par chaque enveloppe
|
|
304
305
|
* @param productionElectricite
|
|
305
|
-
* @param conso {{ep_conso:
|
|
306
|
+
* @param conso {{ep_conso: EpConso}}
|
|
306
307
|
* @param Sh {number}
|
|
307
308
|
* @param coeff_ep_override {number?} coeff ep à surcharger si définit
|
|
308
309
|
*/
|
|
@@ -350,7 +351,7 @@ export class ProductionENR {
|
|
|
350
351
|
|
|
351
352
|
/**
|
|
352
353
|
* Calcul des taux d'autoproduction consommés pour chaque enveloppe
|
|
353
|
-
* @param efConso {
|
|
354
|
+
* @param efConso {EfConso}
|
|
354
355
|
* @param consoElec
|
|
355
356
|
* @param ccom {number}
|
|
356
357
|
* @param consoElecTotale {number}
|
|
@@ -3,7 +3,7 @@ import { describe, expect, test, it } from 'vitest';
|
|
|
3
3
|
|
|
4
4
|
describe('production ENR unit tests', () => {
|
|
5
5
|
/**
|
|
6
|
-
* @see
|
|
6
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf Page 103
|
|
7
7
|
*/
|
|
8
8
|
const productionENR = new ProductionENR();
|
|
9
9
|
|
|
@@ -23,7 +23,7 @@ const { default: calc_conso_eclairage } = await import('./16_conso_eclairage.js'
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* 16.1 Consommation d'éclairage (Cecl)
|
|
26
|
-
* @see
|
|
26
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §16.1
|
|
27
27
|
*
|
|
28
28
|
* Cecl = (C * Pecl * Nh) / 1000 avec C = 0.9 (interrupteur) et Pecl = 1.4 W/m²
|
|
29
29
|
* Nh = nombre d'heures de fonctionnement de l'éclairage, fonction de la zone climatique.
|
|
@@ -45,7 +45,7 @@ function plancherHaut({ typeAdjacence = 'extérieur', typeIsolation = 'isolé' }
|
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* Indicateur de confort d'été
|
|
48
|
-
* @see
|
|
48
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - annexe confort d'été
|
|
49
49
|
*/
|
|
50
50
|
describe("calc_confort_ete - indicateur de confort d'été", () => {
|
|
51
51
|
test('inertie lourde + aspect traversant : niveau « bon »', () => {
|
|
@@ -120,7 +120,7 @@ export default function calc_qualite_isolation(enveloppe, dp) {
|
|
|
120
120
|
* Il ne prend en compte QUE les déperditions par les parois et les ponts thermiques :
|
|
121
121
|
* les déperditions par renouvellement d'air (DR) sont volontairement exclues
|
|
122
122
|
* (cf. issue #45).
|
|
123
|
-
* @see
|
|
123
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - annexe 8 (indicateurs de qualité d'isolation)
|
|
124
124
|
*/
|
|
125
125
|
const deperdition =
|
|
126
126
|
dp.deperdition_mur +
|
|
@@ -9,7 +9,7 @@ const { default: calc_qualite_isolation, qualite_isol } =
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Qualité de l'isolation
|
|
12
|
-
* @see
|
|
12
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - annexe qualité d'isolation
|
|
13
13
|
*/
|
|
14
14
|
describe('qualite_isol - classement selon les seuils U', () => {
|
|
15
15
|
const seuils = [0.3, 0.45, 0.65];
|
|
@@ -123,7 +123,7 @@ describe('calc_qualite_isolation - agrégation et classement', () => {
|
|
|
123
123
|
/**
|
|
124
124
|
* Ubat est un coefficient de transmission surfacique moyen : il exclut les
|
|
125
125
|
* déperditions par renouvellement d'air (DR).
|
|
126
|
-
* @see
|
|
126
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - annexe 8 / issue #45
|
|
127
127
|
*/
|
|
128
128
|
test("les déperditions par renouvellement d'air (DR) ne sont pas prises en compte dans ubat", () => {
|
|
129
129
|
const env = enveloppe({
|
package/3.1_b.spec.js
CHANGED
|
@@ -54,7 +54,7 @@ afterEach(() => {
|
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* 3.1 Coefficient de réduction des déperditions (b)
|
|
57
|
-
* @see
|
|
57
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.1
|
|
58
58
|
*/
|
|
59
59
|
describe('findRanges - encadrement du rapport surface_aiu / surface_aue', () => {
|
|
60
60
|
const ranges = [0.25, 0.5, 0.75, 1, 1.25, 2, 2.5, 3, 3.5, 4, 6, 8, 10, 25, 50];
|
package/3.2.1_mur.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { MurDE, MurDI } from './features/dpe/domain/models/mur.model.js' */
|
|
1
2
|
import enums from './enums.js';
|
|
2
3
|
import {
|
|
3
4
|
tv,
|
|
@@ -24,7 +25,7 @@ const scriptName = new URL(import.meta.url).pathname.split('/').pop();
|
|
|
24
25
|
* logiciels) : colonne la plus proche, et en cas d'égalité la colonne inférieure (la plus
|
|
25
26
|
* défavorable thermiquement). Les bornes ouvertes « ≤ x » / « ≥ x » sont ramenées à x.
|
|
26
27
|
*
|
|
27
|
-
* @see
|
|
28
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1.2
|
|
28
29
|
*
|
|
29
30
|
* @param enumMateriauxStructureMurId {string|number}
|
|
30
31
|
* @param epaisseur {number|string}
|
|
@@ -87,7 +88,7 @@ function matcherEpaisseurTable(matcher) {
|
|
|
87
88
|
* 2, 3 - pierre de taille et moellons ; 4 - pisé / béton de terre ; 5, 6 - pan de bois (colombage) ;
|
|
88
89
|
* 7 - bois (rondin) ; 8, 9 - briques pleines ; 21 - autre matériau traditionnel ancien.
|
|
89
90
|
*
|
|
90
|
-
* @see
|
|
91
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1
|
|
91
92
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
92
93
|
*/
|
|
93
94
|
export const MATERIAUX_PAROI_ANCIENNE = [2, 3, 4, 5, 6, 7, 8, 9, 21];
|
|
@@ -99,7 +100,7 @@ export const MATERIAUX_PAROI_ANCIENNE = [2, 3, 4, 5, 6, 7, 8, 9, 21];
|
|
|
99
100
|
* La méthode ne précise pas de règle d'interpolation pour Umur0 : cette valeur n'est utilisée qu'en
|
|
100
101
|
* compatibilité (bug_for_bug), lorsque le DPE d'origine l'a manifestement appliquée.
|
|
101
102
|
*
|
|
102
|
-
* @see
|
|
103
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1.2
|
|
103
104
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
104
105
|
*
|
|
105
106
|
* @param enumMateriauxStructureMurId {string|number}
|
|
@@ -204,7 +205,7 @@ function tv_umur0(di, de, du) {
|
|
|
204
205
|
* Certains logiciels interpolent Umur0 entre les deux colonnes d'épaisseur qui encadrent
|
|
205
206
|
* l'épaisseur saisie (ex : 2,28 pour un béton banché de 32 cm, entre 30 et 35 cm).
|
|
206
207
|
* Si l'Umur0 du DPE correspond à cette interpolation (tolérance empirique de 0,006), on la reprend.
|
|
207
|
-
* @see
|
|
208
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1.2
|
|
208
209
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
209
210
|
*/
|
|
210
211
|
if (bug_for_bug_compat && du.umur0_avant !== undefined) {
|
|
@@ -260,7 +261,7 @@ function tv_umur(di, de, du, pc_id, zc, effetJoule) {
|
|
|
260
261
|
enum_zone_climatique_id: zc,
|
|
261
262
|
effet_joule: effetJoule
|
|
262
263
|
};
|
|
263
|
-
const row = tv('umur', matcher
|
|
264
|
+
const row = tv('umur', matcher);
|
|
264
265
|
if (row) {
|
|
265
266
|
di.umur = Number(row.umur);
|
|
266
267
|
de.tv_umur_id = Number(row.tv_umur_id);
|
|
@@ -330,7 +331,7 @@ function calc_umur0(di, de, du, versionDpe) {
|
|
|
330
331
|
* DPE antérieurs à la version 2.4 : certains logiciels n'y cumulent déjà pas le doublage avec une
|
|
331
332
|
* isolation ITE/ITI. Si l'Umur0 du DPE vaut min(2,5 ; Umur0 de la paroi nue), le doublage n'a pas
|
|
332
333
|
* été appliqué : on ne l'applique pas non plus.
|
|
333
|
-
* @see
|
|
334
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1
|
|
334
335
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
335
336
|
*/
|
|
336
337
|
if (
|
|
@@ -376,7 +377,7 @@ function calc_umur0(di, de, du, versionDpe) {
|
|
|
376
377
|
* intègre l'enduit. Si l'Umur du DPE vaut min(2,5 ; Umur0 avec enduit), le DPE a bien appliqué
|
|
377
378
|
* l'enduit : l'Umur0 d'origine ne doit pas être conservé.
|
|
378
379
|
* Garde : l'enduit isolant ne vaut que pour les parois anciennes (MATERIAUX_PAROI_ANCIENNE).
|
|
379
|
-
* @see
|
|
380
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1
|
|
380
381
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
381
382
|
*/
|
|
382
383
|
const enduitAppliqueDansDpe =
|
|
@@ -510,8 +511,8 @@ export default function calc_mur(mur, zc, pc_id, effetJoule, versionDpe) {
|
|
|
510
511
|
* Vérification si le calcul des déperditions des murs utilisent, dans le DPE d'origine, une minoration à 2.5 de Umur0
|
|
511
512
|
* pour l'application du doublage
|
|
512
513
|
* @param type_doublage {number}
|
|
513
|
-
* @param di {
|
|
514
|
-
* @param de {
|
|
514
|
+
* @param di {MurDI}
|
|
515
|
+
* @param de {MurDE}
|
|
515
516
|
* @param umur0_avant {number}
|
|
516
517
|
* @param umur_avant {number}
|
|
517
518
|
*/
|
package/3.2.1_mur.spec.js
CHANGED
|
@@ -106,7 +106,7 @@ beforeEach(() => {
|
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
108
|
* 3.2.1 Coefficient de transmission des murs (Umur)
|
|
109
|
-
* @see
|
|
109
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1
|
|
110
110
|
*/
|
|
111
111
|
describe('calc_mur - mur non isolé', () => {
|
|
112
112
|
test('type de paroi inconnu : Umur0 = 2,5 et Umur = min(Umur0 ; 2,5)', () => {
|
|
@@ -710,8 +710,7 @@ describe('calc_mur - table forfaitaire (Umur)', () => {
|
|
|
710
710
|
enum_periode_construction_id: '1',
|
|
711
711
|
enum_zone_climatique_id: 'h1a',
|
|
712
712
|
effet_joule: '0'
|
|
713
|
-
})
|
|
714
|
-
mur.donnee_entree
|
|
713
|
+
})
|
|
715
714
|
);
|
|
716
715
|
// min(0,5 ; 2,5) = 0,5
|
|
717
716
|
expect(mur.donnee_intermediaire.umur).toBe(0.5);
|
|
@@ -732,8 +731,7 @@ describe('calc_mur - table forfaitaire (Umur)', () => {
|
|
|
732
731
|
|
|
733
732
|
expect(tv).toHaveBeenCalledWith(
|
|
734
733
|
'umur',
|
|
735
|
-
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
736
|
-
mur.donnee_entree
|
|
734
|
+
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
737
735
|
);
|
|
738
736
|
});
|
|
739
737
|
|
|
@@ -751,8 +749,7 @@ describe('calc_mur - table forfaitaire (Umur)', () => {
|
|
|
751
749
|
|
|
752
750
|
expect(tv).toHaveBeenCalledWith(
|
|
753
751
|
'umur',
|
|
754
|
-
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
755
|
-
mur.donnee_entree
|
|
752
|
+
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
756
753
|
);
|
|
757
754
|
});
|
|
758
755
|
|
|
@@ -790,8 +787,7 @@ describe('calc_mur - année de construction saisie (table forfaitaire)', () => {
|
|
|
790
787
|
|
|
791
788
|
expect(tv).toHaveBeenCalledWith(
|
|
792
789
|
'umur',
|
|
793
|
-
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
794
|
-
mur.donnee_entree
|
|
790
|
+
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
795
791
|
);
|
|
796
792
|
warn.mockRestore();
|
|
797
793
|
});
|
|
@@ -827,8 +823,7 @@ describe('calc_mur - année de construction saisie (table forfaitaire)', () => {
|
|
|
827
823
|
// parseInt(getKeyByValue(periode_isolation, '1975-1977'), 10) = 2 (nombre)
|
|
828
824
|
expect(tv).toHaveBeenCalledWith(
|
|
829
825
|
'umur',
|
|
830
|
-
expect.objectContaining({ enum_periode_construction_id: 2 })
|
|
831
|
-
mur.donnee_entree
|
|
826
|
+
expect.objectContaining({ enum_periode_construction_id: 2 })
|
|
832
827
|
);
|
|
833
828
|
expect(warn).toHaveBeenCalled();
|
|
834
829
|
warn.mockRestore();
|
|
@@ -867,8 +862,7 @@ describe('calc_mur - année de construction saisie (table forfaitaire)', () => {
|
|
|
867
862
|
// Le dernier appel forfaitaire réutilise la période de construction d'origine ('1')
|
|
868
863
|
expect(tv).toHaveBeenLastCalledWith(
|
|
869
864
|
'umur',
|
|
870
|
-
expect.objectContaining({ enum_periode_construction_id: '1' })
|
|
871
|
-
mur.donnee_entree
|
|
865
|
+
expect.objectContaining({ enum_periode_construction_id: '1' })
|
|
872
866
|
);
|
|
873
867
|
warn.mockRestore();
|
|
874
868
|
});
|
|
@@ -887,8 +881,7 @@ describe('calc_mur - année de construction saisie (table forfaitaire)', () => {
|
|
|
887
881
|
|
|
888
882
|
expect(tv).toHaveBeenCalledWith(
|
|
889
883
|
'umur',
|
|
890
|
-
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
891
|
-
mur.donnee_entree
|
|
884
|
+
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
892
885
|
);
|
|
893
886
|
expect(warn).not.toHaveBeenCalled();
|
|
894
887
|
warn.mockRestore();
|
|
@@ -930,8 +923,7 @@ describe('calc_mur - bug_for_bug sur tv_umur (récupération depuis tv_umur_id)'
|
|
|
930
923
|
// Le matcher final utilise l'effet Joule ('1') et la période ('5') issus du DPE
|
|
931
924
|
expect(tv).toHaveBeenLastCalledWith(
|
|
932
925
|
'umur',
|
|
933
|
-
expect.objectContaining({ effet_joule: '1', enum_periode_construction_id: '5' })
|
|
934
|
-
mur.donnee_entree
|
|
926
|
+
expect.objectContaining({ effet_joule: '1', enum_periode_construction_id: '5' })
|
|
935
927
|
);
|
|
936
928
|
error.mockRestore();
|
|
937
929
|
});
|
|
@@ -1077,7 +1069,7 @@ describe('calc_mur - doublage et isolation ITE/ITI (#146)', () => {
|
|
|
1077
1069
|
* 3.2.1.2 Calcul des Umur0 : l'épaisseur saisie est ramenée sur une colonne de la table du
|
|
1078
1070
|
* matériau déclaré, sans jamais basculer vers un autre matériau (issue #138).
|
|
1079
1071
|
* Convention (la méthode ne précise pas l'arrondi) : colonne la plus proche, égalité => inférieure.
|
|
1080
|
-
* @see
|
|
1072
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1.2
|
|
1081
1073
|
*/
|
|
1082
1074
|
describe('epaisseurStructureTable - épaisseur hors table (issue #138)', () => {
|
|
1083
1075
|
test.each([
|
|
@@ -1138,7 +1130,7 @@ describe('epaisseurStructureTable - épaisseur hors table (issue #138)', () => {
|
|
|
1138
1130
|
|
|
1139
1131
|
/**
|
|
1140
1132
|
* Correctifs de compatibilité (bug_for_bug) sur les murs.
|
|
1141
|
-
* @see
|
|
1133
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.1
|
|
1142
1134
|
* @see https://github.com/Open3CL/engine/issues/295
|
|
1143
1135
|
*/
|
|
1144
1136
|
describe('issue #295 - enduit isolant sur paroi ancienne (MUR1)', () => {
|
package/3.2.2_plancher_bas.js
CHANGED
|
@@ -9,7 +9,7 @@ function tv_upb0(di, de, du) {
|
|
|
9
9
|
const matcher = {
|
|
10
10
|
enum_type_plancher_bas_id: de.enum_type_plancher_bas_id
|
|
11
11
|
};
|
|
12
|
-
const row = tv('upb0', matcher
|
|
12
|
+
const row = tv('upb0', matcher);
|
|
13
13
|
if (row) {
|
|
14
14
|
di.upb0 = Number(row.upb0);
|
|
15
15
|
de.tv_upb0_id = Number(row.tv_upb0_id);
|
|
@@ -44,7 +44,7 @@ function tv_upb(di, de, du, pc_id, zc, effetJoule) {
|
|
|
44
44
|
enum_zone_climatique_id: zc,
|
|
45
45
|
effet_joule: effetJoule
|
|
46
46
|
};
|
|
47
|
-
const row = tv('upb', matcher
|
|
47
|
+
const row = tv('upb', matcher);
|
|
48
48
|
if (row) {
|
|
49
49
|
di.upb = Number(row.upb);
|
|
50
50
|
de.tv_upb_id = Number(row.tv_upb_id);
|
|
@@ -61,7 +61,7 @@ const values_2s_p = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20];
|
|
|
61
61
|
* (perimetre_ue) du seul plancher courant, sans sommer les autres planchers de même adjacence.
|
|
62
62
|
* Les valeurs absentes du tableau sont obtenues par interpolation linéaire sur upb.
|
|
63
63
|
*
|
|
64
|
-
* @see
|
|
64
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.2 (tableau ue)
|
|
65
65
|
*/
|
|
66
66
|
function tv_ue(di, de, du, pc_id) {
|
|
67
67
|
const type_adjacence = enums.type_adjacence[de.enum_type_adjacence_id];
|
|
@@ -84,6 +84,7 @@ function tv_ue(di, de, du, pc_id) {
|
|
|
84
84
|
const surfaceUe = de.surface_ue || de.surface_paroi_opaque;
|
|
85
85
|
const perimetreUe = de.perimetre_ue || 0;
|
|
86
86
|
|
|
87
|
+
/** @type {Record<string, any>} `2s_p` est d'abord numérique puis devient une regex (chaîne) */
|
|
87
88
|
const matcher = {
|
|
88
89
|
type_adjacence_plancher,
|
|
89
90
|
'2s_p': Math.round((2 * surfaceUe) / perimetreUe)
|