@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
|
@@ -61,7 +61,7 @@ beforeEach(() => {
|
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* 3.2.2 Coefficient de transmission des planchers bas (Upb)
|
|
64
|
-
* @see
|
|
64
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.2
|
|
65
65
|
*/
|
|
66
66
|
describe('calc_pb - plancher non isolé (methode 1)', () => {
|
|
67
67
|
test('Upb égal à Upb0 (paroi nue) et adjacence non déperditive => upb_final = upb', () => {
|
|
@@ -216,8 +216,7 @@ describe('calc_pb - isolation inconnue / table forfaitaire (methodes 2 et 7)', (
|
|
|
216
216
|
// La période d'isolation renseignée est utilisée comme période de la table
|
|
217
217
|
expect(tv).toHaveBeenCalledWith(
|
|
218
218
|
'upb',
|
|
219
|
-
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
220
|
-
pb.donnee_entree
|
|
219
|
+
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
221
220
|
);
|
|
222
221
|
// min(0,3 ; 2) = 0,3
|
|
223
222
|
expect(pb.donnee_intermediaire.upb).toBe(0.3);
|
|
@@ -237,8 +236,7 @@ describe('calc_pb - isolation inconnue / table forfaitaire (methodes 2 et 7)', (
|
|
|
237
236
|
|
|
238
237
|
expect(tv).toHaveBeenCalledWith(
|
|
239
238
|
'upb',
|
|
240
|
-
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
241
|
-
pb.donnee_entree
|
|
239
|
+
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
242
240
|
);
|
|
243
241
|
});
|
|
244
242
|
|
|
@@ -278,8 +276,7 @@ describe('calc_pb - année de construction saisie (methode 8)', () => {
|
|
|
278
276
|
|
|
279
277
|
expect(tv).toHaveBeenCalledWith(
|
|
280
278
|
'upb',
|
|
281
|
-
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
282
|
-
pb.donnee_entree
|
|
279
|
+
expect.objectContaining({ enum_periode_construction_id: '6' })
|
|
283
280
|
);
|
|
284
281
|
warn.mockRestore();
|
|
285
282
|
});
|
|
@@ -305,8 +302,7 @@ describe('calc_pb - année de construction saisie (methode 8)', () => {
|
|
|
305
302
|
// getKeyByValue(periode_isolation, '1975-1977') = '2' (différent de pc_id) => avertissement
|
|
306
303
|
expect(tv).toHaveBeenCalledWith(
|
|
307
304
|
'upb',
|
|
308
|
-
expect.objectContaining({ enum_periode_construction_id: '2' })
|
|
309
|
-
pb.donnee_entree
|
|
305
|
+
expect.objectContaining({ enum_periode_construction_id: '2' })
|
|
310
306
|
);
|
|
311
307
|
expect(warn).toHaveBeenCalled();
|
|
312
308
|
warn.mockRestore();
|
|
@@ -346,8 +342,7 @@ describe('calc_pb - année de construction saisie (methode 8)', () => {
|
|
|
346
342
|
// Le dernier appel forfaitaire utilise la période de construction d'origine ('1')
|
|
347
343
|
expect(tv).toHaveBeenLastCalledWith(
|
|
348
344
|
'upb',
|
|
349
|
-
expect.objectContaining({ enum_periode_construction_id: '1' })
|
|
350
|
-
pb.donnee_entree
|
|
345
|
+
expect.objectContaining({ enum_periode_construction_id: '1' })
|
|
351
346
|
);
|
|
352
347
|
warn.mockRestore();
|
|
353
348
|
error.mockRestore();
|
|
@@ -368,8 +363,7 @@ describe('calc_pb - année de construction saisie (methode 8)', () => {
|
|
|
368
363
|
|
|
369
364
|
expect(tv).toHaveBeenCalledWith(
|
|
370
365
|
'upb',
|
|
371
|
-
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
372
|
-
pb.donnee_entree
|
|
366
|
+
expect.objectContaining({ enum_periode_construction_id: '5' })
|
|
373
367
|
);
|
|
374
368
|
expect(warn).not.toHaveBeenCalled();
|
|
375
369
|
warn.mockRestore();
|
|
@@ -498,11 +492,7 @@ describe('calc_pb - compatibilité bug for bug (forçage de la méthode de saisi
|
|
|
498
492
|
|
|
499
493
|
expect(error).toHaveBeenCalledWith(expect.stringContaining('effet_joule'));
|
|
500
494
|
// Le matcher forfaitaire final utilise l'effet Joule '1' issu du DPE
|
|
501
|
-
expect(tv).toHaveBeenLastCalledWith(
|
|
502
|
-
'upb',
|
|
503
|
-
expect.objectContaining({ effet_joule: '1' }),
|
|
504
|
-
pb.donnee_entree
|
|
505
|
-
);
|
|
495
|
+
expect(tv).toHaveBeenLastCalledWith('upb', expect.objectContaining({ effet_joule: '1' }));
|
|
506
496
|
error.mockRestore();
|
|
507
497
|
});
|
|
508
498
|
|
|
@@ -531,7 +521,7 @@ describe('calc_pb - compatibilité bug for bug (forçage de la méthode de saisi
|
|
|
531
521
|
|
|
532
522
|
/**
|
|
533
523
|
* Calcul de la déperdition Ue vers un plancher bas sur terre-plein / vide sanitaire / sous-sol.
|
|
534
|
-
* @see
|
|
524
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.2 (Ue)
|
|
535
525
|
*/
|
|
536
526
|
describe('calc_pb - calcul de Ue (tv_ue)', () => {
|
|
537
527
|
/** Renvoie une ue interpolée selon la valeur de upb du matcher. */
|
|
@@ -658,7 +648,7 @@ describe('calc_pb - calcul de Ue (tv_ue)', () => {
|
|
|
658
648
|
|
|
659
649
|
/**
|
|
660
650
|
* Issue #46 : ue calculé plancher par plancher, 2S/P issu du seul plancher courant.
|
|
661
|
-
* @see
|
|
651
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.2 (tableau ue : « Les données ne figurant
|
|
662
652
|
* pas dans le tableau peuvent être obtenues par interpolation et extrapolation »)
|
|
663
653
|
*/
|
|
664
654
|
describe('calcul plancher par plancher (#46)', () => {
|
package/3.2.3_plancher_haut.js
CHANGED
|
@@ -7,7 +7,7 @@ function tv_uph0(di, de, du) {
|
|
|
7
7
|
const matcher = {
|
|
8
8
|
enum_type_plancher_haut_id: de.enum_type_plancher_haut_id
|
|
9
9
|
};
|
|
10
|
-
const row = tv('uph0', matcher
|
|
10
|
+
const row = tv('uph0', matcher);
|
|
11
11
|
if (row) {
|
|
12
12
|
di.uph0 = Number(row.uph0);
|
|
13
13
|
de.tv_uph0_id = Number(row.tv_uph0_id);
|
|
@@ -52,7 +52,7 @@ beforeEach(() => {
|
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* 3.2.3 Coefficient de transmission des planchers hauts (Uph)
|
|
55
|
-
* @see
|
|
55
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.2.3
|
|
56
56
|
*/
|
|
57
57
|
describe('calc_ph - plancher non isolé', () => {
|
|
58
58
|
test('Uph égal à Uph0 (paroi nue)', () => {
|
|
@@ -249,7 +249,7 @@ describe('calc_ph - isolation inconnue (table forfaitaire)', () => {
|
|
|
249
249
|
|
|
250
250
|
/**
|
|
251
251
|
* Détermination du type de toiture (matcher de la table `uph`) selon l'adjacence.
|
|
252
|
-
* @see
|
|
252
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - page 21
|
|
253
253
|
*/
|
|
254
254
|
test.each([
|
|
255
255
|
['locaux non chauffés non accessible', 'terrasse', 'terrasse'],
|
package/3.3.1.4_porte.js
CHANGED
|
@@ -6,7 +6,7 @@ function tv_uporte(di, de, du) {
|
|
|
6
6
|
const matcher = {
|
|
7
7
|
enum_type_porte_id: de.enum_type_porte_id
|
|
8
8
|
};
|
|
9
|
-
const row = tv('uporte', matcher
|
|
9
|
+
const row = tv('uporte', matcher);
|
|
10
10
|
if (row) {
|
|
11
11
|
di.uporte = Number(row.uporte);
|
|
12
12
|
de.tv_uporte_id = Number(row.tv_uporte_id);
|
package/3.3.1.4_porte.spec.js
CHANGED
|
@@ -27,7 +27,7 @@ beforeEach(() => {
|
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* 3.3.1.4 Coefficient de transmission surfacique des portes (Uporte)
|
|
30
|
-
* @see
|
|
30
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.3.1.4
|
|
31
31
|
*/
|
|
32
32
|
describe('calc_porte - coefficient de transmission des portes', () => {
|
|
33
33
|
test('valeur forfaitaire : Uporte lu dans la table via le type de porte', () => {
|
|
@@ -42,7 +42,7 @@ describe('calc_porte - coefficient de transmission des portes', () => {
|
|
|
42
42
|
|
|
43
43
|
calc_porte(porte, 1);
|
|
44
44
|
|
|
45
|
-
expect(tv).toHaveBeenCalledWith('uporte', { enum_type_porte_id: '3' }
|
|
45
|
+
expect(tv).toHaveBeenCalledWith('uporte', { enum_type_porte_id: '3' });
|
|
46
46
|
expect(porte.donnee_intermediaire.uporte).toBe(2.4);
|
|
47
47
|
expect(porte.donnee_entree.tv_uporte_id).toBe(15);
|
|
48
48
|
});
|
package/3.3_baie_vitree.js
CHANGED
|
@@ -320,8 +320,8 @@ export default function calc_bv(bv, zc) {
|
|
|
320
320
|
mlnh.reduce((acc, ml) => acc - calc_omb(ml) / 100, 1)
|
|
321
321
|
);
|
|
322
322
|
}
|
|
323
|
-
tv_masque_proche(di, de
|
|
324
|
-
tv_masque_lointain_homogene(di, de
|
|
323
|
+
tv_masque_proche(di, de);
|
|
324
|
+
tv_masque_lointain_homogene(di, de);
|
|
325
325
|
|
|
326
326
|
delete di.deltar;
|
|
327
327
|
|
package/3.3_baie_vitree.spec.js
CHANGED
|
@@ -105,7 +105,7 @@ function baseBv(overrides = {}) {
|
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
107
|
* 3.3 Coefficients de transmission thermique et facteur solaire des baies vitrées.
|
|
108
|
-
* @see
|
|
108
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.3
|
|
109
109
|
*/
|
|
110
110
|
describe('calc_bv - parcours nominal (double vitrage avec fermeture)', () => {
|
|
111
111
|
test('renseigne b, sw, ug, uw, ujn et u_menuiserie', () => {
|
|
@@ -301,7 +301,7 @@ describe('calc_bv - traitement de la fermeture', () => {
|
|
|
301
301
|
|
|
302
302
|
/**
|
|
303
303
|
* 3.3.2 / 6.2.1 Traitement des doubles fenêtres : sw et uw équivalents.
|
|
304
|
-
* @see
|
|
304
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.3.2
|
|
305
305
|
*/
|
|
306
306
|
describe('calc_bv - double fenêtre', () => {
|
|
307
307
|
/** Baie secondaire (deuxième fenêtre) mesurable pour sw / uw équivalents. */
|
|
@@ -394,7 +394,7 @@ describe('calc_bv - double fenêtre', () => {
|
|
|
394
394
|
|
|
395
395
|
/**
|
|
396
396
|
* 6.3 Masques proches et lointains.
|
|
397
|
-
* @see
|
|
397
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §6.3
|
|
398
398
|
*/
|
|
399
399
|
describe('calc_bv - masques lointains non homogènes (fe2)', () => {
|
|
400
400
|
test('collection de masques : fe2 = 1 - somme des occultations', () => {
|
package/3.4_pont_thermique.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** @import { BaieVitree } from './features/dpe/domain/models/baie-vitree.model.js' */
|
|
2
|
+
/** @import { PontThermiqueDE, PontThermiqueDI } from './features/dpe/domain/models/pont-thermique.model.js' */
|
|
1
3
|
import enums from './enums.js';
|
|
2
4
|
import { isNil } from 'lodash-es';
|
|
3
5
|
import { tv, requestInput, cleanReference, bug_for_bug_compat } from './utils.js';
|
|
@@ -36,7 +38,7 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
|
|
|
36
38
|
const mur_list = enveloppe.mur_collection.mur || [];
|
|
37
39
|
const pb_list = enveloppe.plancher_bas_collection.plancher_bas || [];
|
|
38
40
|
const ph_list = enveloppe.plancher_haut_collection.plancher_haut || [];
|
|
39
|
-
/** @type {
|
|
41
|
+
/** @type {BaieVitree[]} **/
|
|
40
42
|
const bv_list = enveloppe.baie_vitree_collection.baie_vitree || [];
|
|
41
43
|
const porte_list = enveloppe.porte_collection.porte || [];
|
|
42
44
|
|
|
@@ -137,7 +139,7 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
|
|
|
137
139
|
* Si on ne trouve pas de mur associé au pont thermique, on vérifie si on trouve une baie vitrée associée
|
|
138
140
|
* au pont thermique et si cette dernière à une reference_paroi qui correspond à un mur existant.
|
|
139
141
|
*/
|
|
140
|
-
/** @type {
|
|
142
|
+
/** @type {BaieVitree} **/
|
|
141
143
|
const bvPt = bv_list.find((bv) => bv.donnee_entree.reference === de.reference_1);
|
|
142
144
|
if (bvPt && Number(bvPt.donnee_entree.reference_paroi) === murIndex) {
|
|
143
145
|
console.error(
|
|
@@ -444,9 +446,9 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
|
|
|
444
446
|
* Si la valeur k calculée est égale au à celle spécifiée, le facteur est déjà pris en compte
|
|
445
447
|
*
|
|
446
448
|
* @param type_liaison {string} type de liaison du pont thermique en cours d'étude
|
|
447
|
-
* @param de {
|
|
449
|
+
* @param de {PontThermiqueDE} données d'entrée du pont thermique en cours d'étude
|
|
448
450
|
* @param k {string} valeur calculée pour k
|
|
449
|
-
* @param pt_di {
|
|
451
|
+
* @param pt_di {PontThermiqueDI} données intermédiaires du pont thermique en cours d'étude
|
|
450
452
|
*/
|
|
451
453
|
function pourcentageValeurPontThermique(type_liaison, de, k, pt_di) {
|
|
452
454
|
if (
|
|
@@ -81,7 +81,7 @@ afterEach(() => {
|
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
83
|
* 3.4 Calcul des déperditions par les ponts thermiques
|
|
84
|
-
* @see
|
|
84
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4
|
|
85
85
|
*/
|
|
86
86
|
describe('calc_pont_thermique - méthode de saisie directe', () => {
|
|
87
87
|
test('k justifié saisi (méthode 2) : k pris directement', () => {
|
|
@@ -132,7 +132,7 @@ describe('calc_pont_thermique - valeur forfaitaire (méthode 1)', () => {
|
|
|
132
132
|
|
|
133
133
|
/**
|
|
134
134
|
* Les ponts thermiques des murs de circulation avec k intermédiaire nul restent nuls.
|
|
135
|
-
* @see
|
|
135
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4 (locaux de circulation)
|
|
136
136
|
*/
|
|
137
137
|
test('mur de circulation (adjacence 22) avec k intermédiaire nul : k = 0 sans accès table', () => {
|
|
138
138
|
const mur = [
|
|
@@ -157,7 +157,7 @@ describe('calc_pont_thermique - valeur forfaitaire (méthode 1)', () => {
|
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
159
|
* 3.4.5 Menuiserie / mur : les ponts thermiques avec les parois en structure bois sont négligés.
|
|
160
|
-
* @see
|
|
160
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4.5
|
|
161
161
|
*/
|
|
162
162
|
test('liaison menuiserie / mur sur structure bois : k = 0', () => {
|
|
163
163
|
const mur = [
|
|
@@ -248,7 +248,7 @@ describe('defaultValue - valeur de repli sur description non reconnue', () => {
|
|
|
248
248
|
|
|
249
249
|
/**
|
|
250
250
|
* 3.4 Reconstruction des références manquantes à partir de la description.
|
|
251
|
-
* @see
|
|
251
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4
|
|
252
252
|
*/
|
|
253
253
|
describe('calc_pont_thermique - reconstruction des références via la description', () => {
|
|
254
254
|
test('description "mur / plancher" : la référence du mur est retrouvée (liaison refend, pas de 2e paroi)', () => {
|
|
@@ -439,7 +439,7 @@ describe('calc_pont_thermique - mur de circulation avec k non nul', () => {
|
|
|
439
439
|
|
|
440
440
|
/**
|
|
441
441
|
* 3.4.1 / 3.4.3 Ponts thermiques plancher bas / mur et plancher haut lourd / mur.
|
|
442
|
-
* @see
|
|
442
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4.1 et §3.4.3
|
|
443
443
|
*/
|
|
444
444
|
describe('calc_pont_thermique - liaisons plancher / mur', () => {
|
|
445
445
|
function murPlancher(murOverrides = {}, plancherOverrides = {}) {
|
|
@@ -633,7 +633,7 @@ describe('calc_pont_thermique - liaisons plancher / mur', () => {
|
|
|
633
633
|
|
|
634
634
|
/**
|
|
635
635
|
* 3.4.5 Menuiserie / mur.
|
|
636
|
-
* @see
|
|
636
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4.5
|
|
637
637
|
*/
|
|
638
638
|
describe('calc_pont_thermique - liaison menuiserie / mur', () => {
|
|
639
639
|
function murMenuiserie(murOverrides = {}, menuiserieOverrides = {}) {
|
|
@@ -920,7 +920,7 @@ describe('calc_pont_thermique - cas limites', () => {
|
|
|
920
920
|
/**
|
|
921
921
|
* Issue #212 : l'exclusion des parois non déperditives s'applique aussi au plancher des liaisons
|
|
922
922
|
* plancher bas / mur et plancher haut lourd / mur, pas seulement au mur.
|
|
923
|
-
* @see
|
|
923
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4
|
|
924
924
|
*/
|
|
925
925
|
describe('calc_pont_thermique - plancher sur paroi non déperditive (issue #212)', () => {
|
|
926
926
|
/** Mur extérieur lourd isolé ITI + plancher lourd isolé ITE avec l'adjacence donnée. */
|
package/3_deperdition.js
CHANGED
package/3_deperdition.spec.js
CHANGED
|
@@ -52,7 +52,7 @@ afterEach(() => {
|
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* 3. Déperditions de l'enveloppe : déperditions surfaciques par paroi.
|
|
55
|
-
* @see
|
|
55
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3
|
|
56
56
|
*/
|
|
57
57
|
describe('déperditions surfaciques par paroi (U * surface * b)', () => {
|
|
58
58
|
test('Umur = surface_paroi_opaque * umur * b', () => {
|
|
@@ -106,7 +106,7 @@ describe('déperditions surfaciques par paroi (U * surface * b)', () => {
|
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
108
|
* 3.4 Déperdition d'un pont thermique : Upt = l * k * pourcentage.
|
|
109
|
-
* @see
|
|
109
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4
|
|
110
110
|
*/
|
|
111
111
|
describe('Upt - déperdition linéique des ponts thermiques', () => {
|
|
112
112
|
test("Upt = l * k lorsque le pourcentage n'est pas renseigné (défaut 1)", () => {
|
|
@@ -361,7 +361,7 @@ describe("calc_deperdition - agrégation des déperditions de l'enveloppe", () =
|
|
|
361
361
|
|
|
362
362
|
/**
|
|
363
363
|
* 3.4 Comparaison des déperditions calculées et déclarées.
|
|
364
|
-
* @see
|
|
364
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §3.4
|
|
365
365
|
*/
|
|
366
366
|
describe('totalDeperditionMurs - arbitrage entre valeur calculée et déclarée', () => {
|
|
367
367
|
/** Un mur unique : Umur = 10 * 0,5 * 1 = 5. */
|
package/4_ventilation.js
CHANGED
|
@@ -134,7 +134,7 @@ function tv_q4pa_conv(di, de, cg, mur_list, ph_list, porte_list, bv_list) {
|
|
|
134
134
|
* le recalcul les donne non isolées. Dans le sens inverse (ligne « non isolées », recalcul
|
|
135
135
|
* « isolées »), le DPE a pu être modifié par l'appelant (scénario d'isolation des parois) :
|
|
136
136
|
* la valeur recalculée est utilisée.
|
|
137
|
-
* @see
|
|
137
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §4
|
|
138
138
|
*/
|
|
139
139
|
if (rowQ4paConv.isolation_surfaces !== isolation_surfaces) {
|
|
140
140
|
if (
|
|
@@ -160,7 +160,7 @@ function tv_q4pa_conv(di, de, cg, mur_list, ph_list, porte_list, bv_list) {
|
|
|
160
160
|
* la ligne q4pa_conv retenue par le logiciel (ex. ligne 12 « avant 1948 avec joints », 2,5) :
|
|
161
161
|
* on reprend sa valeur `presence_joints_menuiserie` au lieu de considérer les menuiseries
|
|
162
162
|
* sans joint. Uniquement avec l'option `compat_for_corpus_analysis`.
|
|
163
|
-
* @see
|
|
163
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §4
|
|
164
164
|
*/
|
|
165
165
|
if (
|
|
166
166
|
compat_for_corpus_analysis &&
|
package/4_ventilation.spec.js
CHANGED
|
@@ -51,7 +51,7 @@ beforeEach(() => {
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Déperdition par renouvellement d'air dû aux infiltrations (Hperm)
|
|
54
|
-
* @see
|
|
54
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §4
|
|
55
55
|
*/
|
|
56
56
|
describe('calc_hperm - déperdition par perméabilité', () => {
|
|
57
57
|
test('plusieurs façades exposées (pfe=1) : e=0,07 et f=15', () => {
|
|
@@ -17,7 +17,7 @@ const {
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* 5. Consommation des auxiliaires de ventilation
|
|
20
|
-
* @see
|
|
20
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §5, pages 41-42
|
|
21
21
|
*/
|
|
22
22
|
describe('calc_pvent - consommation des auxiliaires de ventilation', () => {
|
|
23
23
|
let di;
|
|
@@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest';
|
|
|
3
3
|
|
|
4
4
|
describe("Recherche de bugs dans le calcul de l'apport gratuit", () => {
|
|
5
5
|
/**
|
|
6
|
-
* @see
|
|
6
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf Page 43
|
|
7
7
|
*/
|
|
8
8
|
test('calcul de f apport solaire', () => {
|
|
9
9
|
const ilpa = '0';
|
|
@@ -165,7 +165,7 @@ describe("Recherche de bugs dans le calcul de l'apport gratuit", () => {
|
|
|
165
165
|
});
|
|
166
166
|
|
|
167
167
|
/**
|
|
168
|
-
* @see
|
|
168
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf Page 43
|
|
169
169
|
*/
|
|
170
170
|
test('calcul de f apport interne', () => {
|
|
171
171
|
const ilpa = '0';
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** @import { BaieVitree, BaieVitreeDE, BaieVitreeDI } from './features/dpe/domain/models/baie-vitree.model.js' */
|
|
2
|
+
/** @import { BaieEtsDE } from './features/dpe/domain/models/baie-ets.model.js' */
|
|
3
|
+
/** @import { Ets } from './features/dpe/domain/models/ets.model.js' */
|
|
1
4
|
import enums from './enums.js';
|
|
2
5
|
import tvs from './tv.js';
|
|
3
6
|
import { mois_liste } from './utils.js';
|
|
@@ -41,8 +44,8 @@ export function calc_sse_j(bv_list, ets, ca, zc, mois) {
|
|
|
41
44
|
* Certaines vérandas sont dupliquées dans les DPE : une même véranda (même référence, ou à défaut
|
|
42
45
|
* même contenu) ne doit être comptée qu'une seule fois.
|
|
43
46
|
*
|
|
44
|
-
* @param etsList {
|
|
45
|
-
* @returns {
|
|
47
|
+
* @param etsList {Ets[]}
|
|
48
|
+
* @returns {Ets[]}
|
|
46
49
|
*/
|
|
47
50
|
export function dedoublonnerEts(etsList) {
|
|
48
51
|
const vues = new Set();
|
|
@@ -64,9 +67,9 @@ export function dedoublonnerEts(etsList) {
|
|
|
64
67
|
* rattachée à la première véranda : c'est le comportement historique, et le seul possible quand le
|
|
65
68
|
* DPE ne comporte qu'une véranda. La méthode ne permet pas de faire mieux pour une donnée manquante.
|
|
66
69
|
*
|
|
67
|
-
* @param baiesAdjVeranda {
|
|
68
|
-
* @param etsList {
|
|
69
|
-
* @returns {
|
|
70
|
+
* @param baiesAdjVeranda {BaieVitree[]}
|
|
71
|
+
* @param etsList {Ets[]}
|
|
72
|
+
* @returns {BaieVitree[][]} baies par véranda, dans l'ordre de etsList
|
|
70
73
|
*/
|
|
71
74
|
export function rattacherBaiesAuxEts(baiesAdjVeranda, etsList) {
|
|
72
75
|
const baiesParEts = etsList.map(() => []);
|
|
@@ -87,8 +90,8 @@ export function rattacherBaiesAuxEts(baiesAdjVeranda, etsList) {
|
|
|
87
90
|
/**
|
|
88
91
|
* Surface sud équivalente apportée par une véranda sur le mois j (§6.3).
|
|
89
92
|
*
|
|
90
|
-
* @param ets {
|
|
91
|
-
* @param baiesAdjVeranda {
|
|
93
|
+
* @param ets {Ets}
|
|
94
|
+
* @param baiesAdjVeranda {BaieVitree[]} baies séparant le logement de cette véranda
|
|
92
95
|
* @param zc {string}
|
|
93
96
|
* @param mois {string}
|
|
94
97
|
* @returns {number}
|
|
@@ -157,7 +160,7 @@ function calc_sse_veranda_j(ets, baiesAdjVeranda, zc, mois) {
|
|
|
157
160
|
/**
|
|
158
161
|
* Calcul de la surface sur équivalente pour la baie vitrée bv pendant le mois $mois
|
|
159
162
|
*
|
|
160
|
-
* @param bv {
|
|
163
|
+
* @param bv {{donnee_entree: BaieVitreeDE | BaieEtsDE, donnee_intermediaire?: BaieVitreeDI}} baie vitrée ou baie d'espace tampon solarisé
|
|
161
164
|
* @param zc {string} zone climatique du logement
|
|
162
165
|
* @param mois {string} mois au cours duquel calculer la surface sur équivalente de la baie vitrée
|
|
163
166
|
* @param coeff {number} coefficient à appliquer à cette surface sud
|
|
@@ -167,7 +170,7 @@ function getSsd(bv, zc, mois, coeff) {
|
|
|
167
170
|
const c1 = tvs.c1;
|
|
168
171
|
|
|
169
172
|
const de = bv.donnee_entree;
|
|
170
|
-
const di = bv.donnee_intermediaire || {};
|
|
173
|
+
const di = /** @type {BaieVitreeDI} */ (bv.donnee_intermediaire || {});
|
|
171
174
|
|
|
172
175
|
const orientation = enums.orientation[de.enum_orientation_id];
|
|
173
176
|
const inclinaison = enums.inclinaison_vitrage[de.enum_inclinaison_vitrage_id ?? 3];
|
|
@@ -51,7 +51,7 @@ function baie({ adjacence, surface, orientationId = '1', inclinaisonId = '3', sw
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* 6.2 Calcul de la surface sud équivalente (SSE)
|
|
54
|
-
* @see
|
|
54
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §6.2 / §6.3
|
|
55
55
|
*/
|
|
56
56
|
describe('calc_sse_j - surface sud équivalente journalière', () => {
|
|
57
57
|
test("sans espace tampon : somme sur les baies donnant sur l'extérieur", () => {
|
|
@@ -143,7 +143,7 @@ describe('calc_sse_j - surface sud équivalente journalière', () => {
|
|
|
143
143
|
* Issue #140 : la surface sud équivalente véranda (Sse_ver = Ssd + Ssind * bver) n'est calculée que
|
|
144
144
|
* pour les baies vitrées séparant le logement de l'espace tampon solarisé (adjacence 10).
|
|
145
145
|
* Sans aucune de ces baies, les apports de l'ETS n'entrent pas dans le logement => Sse_ver = 0.
|
|
146
|
-
* @see
|
|
146
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §6.3
|
|
147
147
|
*/
|
|
148
148
|
describe('calc_sse_j - espace tampon solarisé sans baie séparant le logement de l’ETS', () => {
|
|
149
149
|
/** Fabrique un espace tampon solarisé avec une baie donnant sur l'extérieur. */
|
|
@@ -225,7 +225,7 @@ describe('calc_sse - surface sud équivalente annuelle', () => {
|
|
|
225
225
|
* sur laquelle elle donne (reference_lnc = ets.reference).
|
|
226
226
|
* Cas de test fournis par Olivier (thermicien), zone h1b mockée avec C1 sud = 1, est = 0,40,
|
|
227
227
|
* nord = 0,31 ; Fe = 1.
|
|
228
|
-
* @see
|
|
228
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §6.3
|
|
229
229
|
*/
|
|
230
230
|
describe('calc_sse_j - plusieurs espaces tampons solarisés (issue #101)', () => {
|
|
231
231
|
const SUD = '1';
|
package/7_inertie.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** @import { Enveloppe } from './features/dpe/domain/models/dpe.model.js' */
|
|
2
|
+
/** @import { Mur, MurDE } from './features/dpe/domain/models/mur.model.js' */
|
|
3
|
+
/** @import { PlancherBas, PlancherBasDE, PlancherHaut, PlancherHautDE } from './features/dpe/domain/models/plancher.model.js' */
|
|
1
4
|
import enums from './enums.js';
|
|
2
5
|
import { getThicknessFromDescription, getKeyByValue } from './utils.js';
|
|
3
6
|
|
|
@@ -11,7 +14,7 @@ export class Inertie {
|
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* Return 1 if the plancher_haut has high inertia, 0 otherwise
|
|
14
|
-
* @param de {
|
|
17
|
+
* @param de {PlancherHautDE}
|
|
15
18
|
* @returns {number}
|
|
16
19
|
*/
|
|
17
20
|
calculateInertiePhLourd(de) {
|
|
@@ -37,7 +40,7 @@ export class Inertie {
|
|
|
37
40
|
|
|
38
41
|
/**
|
|
39
42
|
* Return 1 if the plancher_bas has high inertia, 0 otherwise
|
|
40
|
-
* @param de {
|
|
43
|
+
* @param de {PlancherBasDE}
|
|
41
44
|
* @returns {number}
|
|
42
45
|
*/
|
|
43
46
|
calculateInertiePbLourd(de) {
|
|
@@ -68,7 +71,7 @@ export class Inertie {
|
|
|
68
71
|
|
|
69
72
|
/**
|
|
70
73
|
* Return 1 if the mur has high inertia, 0 otherwise
|
|
71
|
-
* @param de {
|
|
74
|
+
* @param de {MurDE}
|
|
72
75
|
* @returns {number}
|
|
73
76
|
*/
|
|
74
77
|
calculateInertieMurLourd(de) {
|
|
@@ -163,7 +166,7 @@ export class Inertie {
|
|
|
163
166
|
|
|
164
167
|
/**
|
|
165
168
|
* Return 1 if the collection has high inertia (majority high inertia surface), 0 otherwise
|
|
166
|
-
* @param collection {
|
|
169
|
+
* @param collection {PlancherBas[] | PlancherHaut[] | Mur[]}
|
|
167
170
|
* @param method - method to apply on each item to get inertia type
|
|
168
171
|
* @returns {number}
|
|
169
172
|
*/
|
package/7_inertie.spec.js
CHANGED
package/8_intermittence.spec.js
CHANGED
|
@@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 8. Modélisation de l'intermittence
|
|
6
|
-
* @see
|
|
6
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §8
|
|
7
7
|
*
|
|
8
8
|
* i = i0 / (1 + 0.1 * (G - 1)) avec G = GV / (Sh * Hsp)
|
|
9
9
|
* (fonction pure, aucune dépendance à mocker).
|
package/9_besoin_ch.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** @import { GenerateurChauffage } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
2
|
+
/** @import { GenerateurEcs } 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 { calc_besoin_ecs_j } from './11_besoin_ecs.js';
|
|
@@ -99,7 +101,7 @@ export default function calc_besoin_ch(
|
|
|
99
101
|
* Seules les pertes des générateurs et des ballons de stockage en volume chauffé sont récupérables. Les pertes
|
|
100
102
|
* récupérées des générateurs d’air chaud sont nulles.
|
|
101
103
|
*
|
|
102
|
-
* @type {
|
|
104
|
+
* @type {GenerateurChauffage[]}
|
|
103
105
|
*/
|
|
104
106
|
const gen_ch_recup = instal_ch.flatMap((inst_ch) =>
|
|
105
107
|
inst_ch.generateur_chauffage_collection.generateur_chauffage.filter(
|
|
@@ -112,9 +114,9 @@ export default function calc_besoin_ch(
|
|
|
112
114
|
* 9.1.1 - Générateurs de la collection ECS assurant l'ECS uniquement, avec Qp0 > 0 et situés en
|
|
113
115
|
* volume chauffé : leurs pertes de génération sont aussi récupérées pour le chauffage.
|
|
114
116
|
* Les générateurs 'chauffage + ecs' sont exclus car déjà présents dans la collection chauffage.
|
|
115
|
-
* @see issue
|
|
117
|
+
* @see issue 153
|
|
116
118
|
*
|
|
117
|
-
* @type {
|
|
119
|
+
* @type {GenerateurEcs[]}
|
|
118
120
|
*/
|
|
119
121
|
const gen_ecs_recup = instal_ecs.flatMap((inst_ecs) =>
|
|
120
122
|
(inst_ecs.generateur_ecs_collection?.generateur_ecs || []).filter(
|
package/9_besoin_ch.spec.js
CHANGED
|
@@ -73,7 +73,7 @@ const { calc_Qrec_gen_j, calc_Qrec_gen_ecs_j, isGenerateurEcsSeulRecuperable } =
|
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* 9. Besoins de chauffage (Bch)
|
|
76
|
-
* @see
|
|
76
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §9
|
|
77
77
|
*/
|
|
78
78
|
describe('calc_Fj - fraction des besoins de chauffage couverte par les apports', () => {
|
|
79
79
|
test('retourne 0 lorsque le nombre de degrés-heures est nul', () => {
|
|
@@ -419,7 +419,7 @@ describe('calc_besoin_ch - branches complémentaires', () => {
|
|
|
419
419
|
/**
|
|
420
420
|
* 9.1.1 - Pertes récupérées de génération : générateurs de la collection ECS assurant l'ECS
|
|
421
421
|
* uniquement, avec Qp0 > 0 et en volume chauffé (issue #153).
|
|
422
|
-
* @see
|
|
422
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §9.1.1
|
|
423
423
|
*/
|
|
424
424
|
describe('calc_besoin_ch - récupération des pertes des générateurs ECS seuls (#153)', () => {
|
|
425
425
|
const genEcsSeul = {
|
|
@@ -566,7 +566,7 @@ describe('calc_besoin_ch - récupération des pertes des générateurs ECS seuls
|
|
|
566
566
|
* Immeuble à plusieurs installations ECS dont une collective (ex. installation mixte
|
|
567
567
|
* individuelle/collective) : besoin de chaque installation = Becs_immeuble × Sh_ecs / SH, × rdim
|
|
568
568
|
* pour une installation individuelle (Tribu, Calcul_batiment.Calcul_Cecs et l. 374).
|
|
569
|
-
* @see
|
|
569
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §9.1.1 et §11.4
|
|
570
570
|
*/
|
|
571
571
|
describe('calc_besoin_ch - immeuble à installations ECS individuelles et collectives', () => {
|
|
572
572
|
const ecsIndividuelle = (surface_habitable, rdim) => ({
|