@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
package/10_besoin_fr.spec.js
CHANGED
|
@@ -38,7 +38,7 @@ const { calc_sse_j } = await import('./6.2_surface_sud_equivalente.js');
|
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* 10. Calcul des besoins de froid (Bfr)
|
|
41
|
-
* @see
|
|
41
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §10
|
|
42
42
|
*/
|
|
43
43
|
describe('calc_besoin_fr_j - besoin de froid journalier', () => {
|
|
44
44
|
test('retourne 0 lorsque le nombre de jours de référence est nul', () => {
|
package/10_clim.js
CHANGED
|
@@ -5,7 +5,7 @@ function tv_seer(di, de, du, zc_id) {
|
|
|
5
5
|
enum_zone_climatique_id: zc_id,
|
|
6
6
|
enum_periode_installation_fr_id: requestInputID(de, du, 'periode_installation_fr')
|
|
7
7
|
};
|
|
8
|
-
const row = tv('seer', matcher
|
|
8
|
+
const row = tv('seer', matcher);
|
|
9
9
|
if (row) {
|
|
10
10
|
de.tv_seer_id = Number(row.tv_seer_id);
|
|
11
11
|
di.eer = row.eer;
|
package/10_clim.spec.js
CHANGED
|
@@ -31,7 +31,7 @@ beforeEach(() => {
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* 10. Calcul de la consommation de climatisation (froid)
|
|
34
|
-
* @see
|
|
34
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §10
|
|
35
35
|
*/
|
|
36
36
|
describe('calc_clim - consommation de climatisation', () => {
|
|
37
37
|
test('prorate le besoin de froid au ratio surface_clim / Sh', () => {
|
|
@@ -69,14 +69,10 @@ describe('calc_clim - consommation de climatisation', () => {
|
|
|
69
69
|
|
|
70
70
|
calc_clim(c, 1000, 1500, '2', 100);
|
|
71
71
|
|
|
72
|
-
expect(tv).toHaveBeenCalledWith(
|
|
73
|
-
'
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
enum_periode_installation_fr_id: '4'
|
|
77
|
-
},
|
|
78
|
-
c.donnee_entree
|
|
79
|
-
);
|
|
72
|
+
expect(tv).toHaveBeenCalledWith('seer', {
|
|
73
|
+
enum_zone_climatique_id: '2',
|
|
74
|
+
enum_periode_installation_fr_id: '4'
|
|
75
|
+
});
|
|
80
76
|
});
|
|
81
77
|
|
|
82
78
|
test.each([['6'], ['7'], ['8']])(
|
package/11_besoin_ecs.spec.js
CHANGED
|
@@ -23,7 +23,7 @@ const { default: calc_besoin_ecs, calc_besoin_ecs_j } = await import('./11_besoi
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* 11. Calcul du besoin d'eau chaude sanitaire (Becs)
|
|
26
|
-
* @see
|
|
26
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §11
|
|
27
27
|
*/
|
|
28
28
|
describe('calc_besoin_ecs_j - besoin ECS journalier', () => {
|
|
29
29
|
test('valeur de référence en mode conventionnel (56 L/j/personne)', () => {
|
package/11_ecs.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { InstallationEcsDE } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
2
|
import enums from './enums.js';
|
|
2
3
|
import calc_gen_ecs from './14_generateur_ecs.js';
|
|
3
4
|
import { tv, requestInput, mois_liste, Njj } from './utils.js';
|
|
@@ -196,7 +197,7 @@ const TYPES_INSTALLATION_ECS_COLLECTIVE = ['2', '3'];
|
|
|
196
197
|
* @see Moteur_DPE.dll Calcul_batiment.cs l.583-592 (Becs / Rdim seulement pour une installation
|
|
197
198
|
* individuelle en immeuble ; Becs × Sh_ecs / SH sans Rdim pour une installation collective)
|
|
198
199
|
* @param th {string} type de bâtiment (maison, appartement, immeuble)
|
|
199
|
-
* @param de {
|
|
200
|
+
* @param de {InstallationEcsDE} donnée d'entrée de l'installation ECS
|
|
200
201
|
* @returns {boolean}
|
|
201
202
|
*/
|
|
202
203
|
export function isRdimEcsNeutralise(th, de) {
|
package/11_ecs.spec.js
CHANGED
|
@@ -61,7 +61,7 @@ beforeEach(() => {
|
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* 11. Prise en compte de l'ECS (ratio de besoin + rendement de distribution)
|
|
64
|
-
* @see
|
|
64
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §11 / §17.2.1
|
|
65
65
|
*/
|
|
66
66
|
describe('calc_ecs - ratio de besoin ECS', () => {
|
|
67
67
|
test('virtualisation : le ratio est la clé de répartition ECS', () => {
|
|
@@ -87,7 +87,7 @@ describe('calc_ecs - ratio de besoin ECS', () => {
|
|
|
87
87
|
* Immeuble à ECS individuelles de surfaces différentes (cas CSTB IC1-0-3 / IC1-0-5 : 4
|
|
88
88
|
* appartements de 20, 30, 45 et 80 m² sur 175 m², rdim 1) : besoin au prorata de la surface
|
|
89
89
|
* desservie, comme Tribu (Becs appartement 1 = Becs immeuble × 20 / 175).
|
|
90
|
-
* @see
|
|
90
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §11.4
|
|
91
91
|
*/
|
|
92
92
|
test('immeuble à ECS individuelles : ratio = surface desservie / surface de l’immeuble', () => {
|
|
93
93
|
const des = [20, 30, 45, 80].map((surface) => ({
|
package/11_nadeq.js
CHANGED
package/11_nadeq.spec.js
CHANGED
package/12.4_pac.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
/** @import { GenerateurChauffageDE, GenerateurChauffageDI } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
2
|
+
/** @import { GenerateurEcsDE, GenerateurEcsDI } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
3
|
import { requestInputID, tv } from './utils.js';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Calcul ou récupération des paramètres scop ou cop
|
|
5
|
-
* @param di {
|
|
6
|
-
* @param de {
|
|
7
|
+
* @param di {GenerateurChauffageDI|GenerateurEcsDI}
|
|
8
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
7
9
|
* @param du {Object}
|
|
8
10
|
* @param zc_id {string}
|
|
9
11
|
* @param ed_id {string|null}
|
|
@@ -31,7 +33,7 @@ function tv_scop(di, de, du, zc_id, ed_id, type) {
|
|
|
31
33
|
};
|
|
32
34
|
matcher[`enum_type_generateur_${type}_id`] = requestInputID(de, du, `type_generateur_${type}`);
|
|
33
35
|
if (ed_id) matcher.enum_type_emission_distribution_id = ed_id;
|
|
34
|
-
const row = tv('scop', matcher
|
|
36
|
+
const row = tv('scop', matcher);
|
|
35
37
|
if (row) {
|
|
36
38
|
const scop = row.scop_ou_cop;
|
|
37
39
|
di[scop] = Number(row.scop);
|
package/12.4_pac.spec.js
CHANGED
|
@@ -26,7 +26,7 @@ beforeEach(() => {
|
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* 12.4 - Détermination du SCOP / COP des pompes à chaleur.
|
|
29
|
-
* @see
|
|
29
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §12.4
|
|
30
30
|
*/
|
|
31
31
|
describe('scopOrCop - méthode de saisie "caractéristiques saisies" (id 6)', () => {
|
|
32
32
|
test('SCOP renseigné : rg et rg_dep prennent la valeur du SCOP sans accès à la table', () => {
|
|
@@ -55,14 +55,10 @@ describe('scopOrCop - valeur forfaitaire (table scop)', () => {
|
|
|
55
55
|
|
|
56
56
|
scopOrCop(di, de, {}, 'h1a', null, 'ch');
|
|
57
57
|
|
|
58
|
-
expect(tv).toHaveBeenCalledWith(
|
|
59
|
-
'
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
enum_type_generateur_ch_id: '160'
|
|
63
|
-
},
|
|
64
|
-
de
|
|
65
|
-
);
|
|
58
|
+
expect(tv).toHaveBeenCalledWith('scop', {
|
|
59
|
+
enum_zone_climatique_id: 'h1a',
|
|
60
|
+
enum_type_generateur_ch_id: '160'
|
|
61
|
+
});
|
|
66
62
|
expect(di.scop).toBe(4.2);
|
|
67
63
|
expect(di.rg).toBe(4.2);
|
|
68
64
|
expect(di.rg_dep).toBe(4.2);
|
|
@@ -76,15 +72,11 @@ describe('scopOrCop - valeur forfaitaire (table scop)', () => {
|
|
|
76
72
|
|
|
77
73
|
scopOrCop(di, de, {}, 'h2b', '5', 'ecs');
|
|
78
74
|
|
|
79
|
-
expect(tv).toHaveBeenCalledWith(
|
|
80
|
-
'
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
enum_type_emission_distribution_id: '5'
|
|
85
|
-
},
|
|
86
|
-
de
|
|
87
|
-
);
|
|
75
|
+
expect(tv).toHaveBeenCalledWith('scop', {
|
|
76
|
+
enum_zone_climatique_id: 'h2b',
|
|
77
|
+
enum_type_generateur_ecs_id: '10',
|
|
78
|
+
enum_type_emission_distribution_id: '5'
|
|
79
|
+
});
|
|
88
80
|
// scop_ou_cop vaut 'cop' : la valeur est stockée sous di.cop
|
|
89
81
|
expect(di.cop).toBe(3.1);
|
|
90
82
|
expect(di.rg).toBe(3.1);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
|
|
2
|
+
/** @import { GenerateurChauffage, GenerateurChauffageDE, GenerateurChauffageDI, InstallationChauffage } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
3
|
+
/** @import { GenerateurEcsDE, GenerateurEcsDI } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
4
|
import { bug_for_bug_compat, convertExpression, tv, tvColumnLines } from './utils.js';
|
|
2
5
|
import enums from './enums.js';
|
|
3
6
|
import { updateGenerateurBouilleurs } from './13.2_generateur_combustion_bouilleur.js';
|
|
@@ -63,7 +66,7 @@ export const PN_MAX_QP0_CHAUDIERE_GAZ = 400000;
|
|
|
63
66
|
* (Tribu, `Calcul_generateur.cs` Rpn_chaudieregaz, `Math.Min(400.0, Pn)`) plafonne Pn à 400 kW :
|
|
64
67
|
* au-delà, la formule n'est plus représentative (elle décroît et devient négative vers 1 500 kW).
|
|
65
68
|
* Le plafond ne s'applique pas aux chaudières fioul (Rpn_chaudierefioul : Pn non plafonné).
|
|
66
|
-
* @see
|
|
69
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2
|
|
67
70
|
*
|
|
68
71
|
* @param row {object} ligne de la table generateur_combustion
|
|
69
72
|
* @param pnCollectif {number} puissance nominale du générateur (W)
|
|
@@ -154,7 +157,7 @@ export function pnEstimee(GV, tbase, ratioSurface = 1) {
|
|
|
154
157
|
* pour le chauffage, 8 pour l'ECS) du générateur.
|
|
155
158
|
*
|
|
156
159
|
* @param dpe {FullDpe}
|
|
157
|
-
* @param de {
|
|
160
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
158
161
|
* @param type {'ch' | 'ecs'}
|
|
159
162
|
* @returns {boolean|undefined} undefined si non renseigné
|
|
160
163
|
*/
|
|
@@ -170,7 +173,7 @@ export function chaudiereMurale(dpe, de, type) {
|
|
|
170
173
|
* générateur ECS mixte de même `reference_generateur_mixte`, sinon générateur ECS mixte unique.
|
|
171
174
|
*
|
|
172
175
|
* @param dpe {FullDpe}
|
|
173
|
-
* @param de {
|
|
176
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE} données du générateur de chauffage
|
|
174
177
|
* @returns {number|undefined}
|
|
175
178
|
*/
|
|
176
179
|
export function volumeStockageEcsMixte(dpe, de) {
|
|
@@ -200,7 +203,7 @@ export function volumeStockageEcsMixte(dpe, de) {
|
|
|
200
203
|
* pour une installation collective, Pch est conservée (comportement historique).
|
|
201
204
|
*
|
|
202
205
|
* @param dpe {FullDpe}
|
|
203
|
-
* @param de {
|
|
206
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE} données du générateur
|
|
204
207
|
* @param type {'ch' | 'ecs'}
|
|
205
208
|
* @param pch {number} Pch (W) proratisée à la surface desservie
|
|
206
209
|
* @param optionsPn {{installationIndividuelle?: boolean, volumeStockage?: number}}
|
|
@@ -249,8 +252,8 @@ export function pnEstimeeGenerateur(dpe, de, type, pch, optionsPn = {}) {
|
|
|
249
252
|
* 5 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système à combustion : pn, rpn,rpint,qp0,temp_fonc_30,temp_fonc_100
|
|
250
253
|
*
|
|
251
254
|
* @param dpe {FullDpe}
|
|
252
|
-
* @param di {
|
|
253
|
-
* @param de {
|
|
255
|
+
* @param di {GenerateurChauffageDI|GenerateurEcsDI} données du générateur
|
|
256
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE} données du générateur
|
|
254
257
|
* @param type {'ecs'|'ch'}
|
|
255
258
|
* @param GV {number} déperdition de l'enveloppe
|
|
256
259
|
* @param tbase {number} température de fonctionnement du générateur
|
|
@@ -392,8 +395,8 @@ export function tv_generateur_combustion(
|
|
|
392
395
|
* dans Cper). Le XML ne transporte pas cette donnée : elle est lue dans la fiche technique du
|
|
393
396
|
* générateur. Sans fiche technique, la ventouse est conservée comme approximation (choix
|
|
394
397
|
* Open3CL, la méthode ne prévoyant pas de valeur par défaut).
|
|
395
|
-
* @see
|
|
396
|
-
* @see
|
|
398
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2
|
|
399
|
+
* @see Tribu Calcul_generateur.cs (ventilateur_combustion)
|
|
397
400
|
*/
|
|
398
401
|
const indexEF = de.ventilateurCombustion ?? de.presence_ventouse;
|
|
399
402
|
const E = E_tab[indexEF];
|
|
@@ -474,7 +477,7 @@ export function tv_generateur_combustion(
|
|
|
474
477
|
/**
|
|
475
478
|
* Mise à jour du type de générateur si besoin
|
|
476
479
|
* @param dpe {FullDpe}
|
|
477
|
-
* @param de {
|
|
480
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
478
481
|
* @param type {'ch' | 'ecs'}
|
|
479
482
|
*/
|
|
480
483
|
export function updateGenerateurCombustion(dpe, de, type) {
|
|
@@ -515,7 +518,7 @@ export function valeurVeilleuse(valeur) {
|
|
|
515
518
|
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.4 / §14.1 (« Pveil : si veilleuse »)
|
|
516
519
|
*
|
|
517
520
|
* @param dpe {FullDpe}
|
|
518
|
-
* @param de {
|
|
521
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
519
522
|
* @param type {'ch' | 'ecs'}
|
|
520
523
|
* @returns {1 | 0 | undefined} 1 si veilleuse, 0 si pas de veilleuse, undefined si non renseigné
|
|
521
524
|
*/
|
|
@@ -558,7 +561,7 @@ export function presenceVeilleuse(dpe, de, type) {
|
|
|
558
561
|
* Récupération d'informations complémentaires issues des fiches techniques pour les générateurs
|
|
559
562
|
*
|
|
560
563
|
* @param dpe {FullDpe}
|
|
561
|
-
* @param de {
|
|
564
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
562
565
|
* @param type {'ch' | 'ecs'}
|
|
563
566
|
*/
|
|
564
567
|
function addInfosFromFichesTechniques(dpe, de, type) {
|
|
@@ -590,7 +593,7 @@ function addInfosFromFichesTechniques(dpe, de, type) {
|
|
|
590
593
|
* Vérifier que les informations du générateur ECS sont bien les mêmes que celles du générateur de chauffage
|
|
591
594
|
* Dans le cas d'une génération mixte, le type du générateur doit être le même
|
|
592
595
|
* @param dpe {FullDpe}
|
|
593
|
-
* @param de {
|
|
596
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
594
597
|
* @param typeGenerateurKey {string}
|
|
595
598
|
* @returns {string}
|
|
596
599
|
*/
|
|
@@ -612,7 +615,7 @@ function checkEcsVsChauffageForMixteGeneration(dpe, de, typeGenerateurKey) {
|
|
|
612
615
|
}
|
|
613
616
|
|
|
614
617
|
/**
|
|
615
|
-
* @type {
|
|
618
|
+
* @type {InstallationChauffage[]}
|
|
616
619
|
*/
|
|
617
620
|
const installationsCh = dpe.logement.installation_chauffage_collection.installation_chauffage;
|
|
618
621
|
|
|
@@ -668,9 +671,9 @@ function checkEcsVsChauffageForMixteGeneration(dpe, de, typeGenerateurKey) {
|
|
|
668
671
|
* 3. même énergie (`enum_type_energie_id`), si un seul générateur de chauffage mixte correspond ;
|
|
669
672
|
* 4. générateur de chauffage mixte unique du DPE, si son énergie n'est pas incompatible.
|
|
670
673
|
*
|
|
671
|
-
* @param generateursChMixtes {
|
|
672
|
-
* @param de {
|
|
673
|
-
* @returns {
|
|
674
|
+
* @param generateursChMixtes {GenerateurChauffage[]} générateurs de chauffage d'usage 'chauffage + ecs'
|
|
675
|
+
* @param de {GenerateurEcsDE} données du générateur ECS
|
|
676
|
+
* @returns {GenerateurChauffage|null} null si aucun jumeau ne peut être identifié sans ambiguïté
|
|
674
677
|
*/
|
|
675
678
|
export function findGenerateurChMixteJumeau(generateursChMixtes, de) {
|
|
676
679
|
const sameValue = (a, b) =>
|
|
@@ -121,7 +121,7 @@ const ROW_DEFAUT = {
|
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
123
|
* 13.2 - Récupération des caractéristiques forfaitaires d'un générateur à combustion.
|
|
124
|
-
* @see
|
|
124
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2
|
|
125
125
|
*/
|
|
126
126
|
describe('tv_generateur_combustion - caractéristiques du générateur', () => {
|
|
127
127
|
test('puissance nominale calculée à partir de GV et Tbase lorsqu’elle est absente', () => {
|
|
@@ -358,7 +358,7 @@ describe('tv_generateur_combustion - compatibilité bug_for_bug_compat', () => {
|
|
|
358
358
|
|
|
359
359
|
/**
|
|
360
360
|
* Système collectif par défaut : chaudière fioul standard datant de la construction du bâtiment.
|
|
361
|
-
* @see
|
|
361
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §17.2.1.1
|
|
362
362
|
*/
|
|
363
363
|
describe('système collectif par défaut : chaudière selon l’année de construction', () => {
|
|
364
364
|
test('CH 119 + ligne compatible : type et ligne de la période de construction retenus', () => {
|
|
@@ -668,7 +668,7 @@ describe('tv_generateur_combustion - génération mixte (checkEcsVsChauffageForM
|
|
|
668
668
|
/**
|
|
669
669
|
* Issue #210 : l'ECS mixte doit être appariée avec SON générateur de chauffage mixte (même appareil),
|
|
670
670
|
* et non avec le premier générateur de chauffage mixte du DPE.
|
|
671
|
-
* @see
|
|
671
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2 et §14
|
|
672
672
|
*/
|
|
673
673
|
describe('findGenerateurChMixteJumeau - appariement ECS / chauffage mixte (issue #210)', () => {
|
|
674
674
|
const ch = (donnees) => ({ donnee_entree: { enum_usage_generateur_id: '3', ...donnees } });
|
|
@@ -876,7 +876,7 @@ const dpeFiches = (...fiches) => ({
|
|
|
876
876
|
|
|
877
877
|
/**
|
|
878
878
|
* 13.2 - Orchestration des substitutions de générateurs et enrichissement fiches techniques.
|
|
879
|
-
* @see
|
|
879
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2
|
|
880
880
|
*/
|
|
881
881
|
describe('updateGenerateurCombustion - orchestration des substitutions', () => {
|
|
882
882
|
test('délègue aux trois routines de substitution avec les mêmes arguments', () => {
|
|
@@ -983,7 +983,7 @@ describe('updateGenerateurCombustion - orchestration des substitutions', () => {
|
|
|
983
983
|
/**
|
|
984
984
|
* Issue #35 : les coefficients (E, F) de la formule qp0 dépendent de la présence d'un ventilateur
|
|
985
985
|
* dans le circuit de combustion (fiche technique), la ventouse n'étant qu'un repli.
|
|
986
|
-
* @see
|
|
986
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2
|
|
987
987
|
*/
|
|
988
988
|
describe('tv_generateur_combustion - coefficients (E, F) selon le ventilateur de combustion (#35)', () => {
|
|
989
989
|
const ROW_EF = { ...ROW_DEFAUT, rpn: 'E*40', qp0_perc: 'Pn*(E+F*log10(Pn))/100' };
|
|
@@ -1032,7 +1032,7 @@ describe('tv_generateur_combustion - coefficients (E, F) selon le ventilateur de
|
|
|
1032
1032
|
* Issue #39 : présence d'une veilleuse lue dans la sous-fiche technique du générateur.
|
|
1033
1033
|
* Tribu : entrée `Is_veilleuse` (DPE.DataClasses/generateur.cs), Pveil1 = 0 si absente
|
|
1034
1034
|
* (DPE.Core/Calcul_generateur.cs).
|
|
1035
|
-
* @see
|
|
1035
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.4 / §14.1
|
|
1036
1036
|
*/
|
|
1037
1037
|
describe('presenceVeilleuse - fiche technique « Présence d’une veilleuse »', () => {
|
|
1038
1038
|
const ficheGen = (desc, veilleuse) => [
|
|
@@ -1151,7 +1151,7 @@ describe('presenceVeilleuse - fiche technique « Présence d’une veilleuse »'
|
|
|
1151
1151
|
/**
|
|
1152
1152
|
* Issue #124 : générateur collectif virtualisé, puissance saisie collective (Pn) ou individualisée
|
|
1153
1153
|
* (Pe = a × Pn) selon les logiciels.
|
|
1154
|
-
* @see
|
|
1154
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2 et §17.2.1
|
|
1155
1155
|
*/
|
|
1156
1156
|
describe('tv_generateur_combustion - convention de puissance d’un générateur virtualisé (#124)', () => {
|
|
1157
1157
|
const ROW_PN = {
|
|
@@ -1418,7 +1418,7 @@ describe('caracteristiquesGenerateurCombustion - selon la méthode de saisie', (
|
|
|
1418
1418
|
/**
|
|
1419
1419
|
* Plafond de Pn à 400 kW dans Qp0 = Pn × (E + F × log Pn) / 100 des chaudières gaz après 2015
|
|
1420
1420
|
* (moteur de référence Tribu : Calcul_generateur.cs, Rpn_chaudieregaz, Math.Min(400.0, Pn)).
|
|
1421
|
-
* @see
|
|
1421
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2
|
|
1422
1422
|
*/
|
|
1423
1423
|
describe('puissanceFormuleQp0 - plafond de Pn à 400 kW pour les chaudières gaz', () => {
|
|
1424
1424
|
const ROW_GAZ = {
|
|
@@ -1486,7 +1486,7 @@ describe('puissanceFormuleQp0 - plafond de Pn à 400 kW pour les chaudières gaz
|
|
|
1486
1486
|
|
|
1487
1487
|
/**
|
|
1488
1488
|
* Estimation de la puissance nominale d'un générateur à combustion (pn absente).
|
|
1489
|
-
* @see
|
|
1489
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2.4
|
|
1490
1490
|
*/
|
|
1491
1491
|
describe('pnEstimee - puissance nominale estimée (issue #264)', () => {
|
|
1492
1492
|
// 1,2 × 200 × (19 − (−9)) / 0,95³ -- valeur de référence de régression
|
|
@@ -1518,7 +1518,7 @@ describe('pnEstimee - puissance nominale estimée (issue #264)', () => {
|
|
|
1518
1518
|
|
|
1519
1519
|
/**
|
|
1520
1520
|
* Pn estimée par la puissance de dimensionnement (issue #271).
|
|
1521
|
-
* @see
|
|
1521
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2.4
|
|
1522
1522
|
*/
|
|
1523
1523
|
describe('pnEstimeeGenerateur - Pdim = max(Pch ; Pecs) et table Pdim → Pn (issue #271)', () => {
|
|
1524
1524
|
const dpeAvecEcsMixte = (generateursEcs) => ({
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
/** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
|
|
2
|
+
/** @import { GenerateurChauffageDE } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
3
|
+
/** @import { GenerateurEcsDE } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
4
|
import getFicheTechnique from './ficheTechnique.js';
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* Pour les générateurs "poêles à bois bouilleur", les calculs sont faits comme pour les chaudières bois
|
|
5
8
|
* @param dpe {FullDpe}
|
|
6
|
-
* @param de {
|
|
9
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
7
10
|
* @param type {'ch' | 'ecs'}
|
|
8
11
|
*/
|
|
9
12
|
export function updateGenerateurBouilleurs(dpe, de, type) {
|
|
@@ -121,7 +124,7 @@ export function updateGenerateurBouilleurs(dpe, de, type) {
|
|
|
121
124
|
* - Pour un poêle à bois bouilleur bûche installé avant 1948, on prendra la chaudière bois bûche avant 1978
|
|
122
125
|
* @param dpe {FullDpe}
|
|
123
126
|
* @param ids
|
|
124
|
-
* @param de {
|
|
127
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
125
128
|
* @param type {'ch' | 'ecs'}
|
|
126
129
|
*/
|
|
127
130
|
function updateGenerateurBouilleur(dpe, ids, de, type) {
|
|
@@ -18,7 +18,7 @@ beforeEach(() => {
|
|
|
18
18
|
/**
|
|
19
19
|
* 13.1 - Les poêles à bois bouilleur sont assimilés à des chaudières bois de la
|
|
20
20
|
* période correspondante.
|
|
21
|
-
* @see
|
|
21
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.1
|
|
22
22
|
*/
|
|
23
23
|
describe('updateGenerateurBouilleurs - substitution par une chaudière bois équivalente', () => {
|
|
24
24
|
test('type non concerné : aucune substitution', () => {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { GenerateurChauffageDE, GenerateurChauffageDI } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
1
2
|
import enums from './enums.js';
|
|
2
3
|
import { bug_for_bug_compat, requestInput, requestInputID, tv } from './utils.js';
|
|
3
4
|
|
|
@@ -18,7 +19,7 @@ const coef_pond = {
|
|
|
18
19
|
* Coefficients de conversion PCS / PCI.
|
|
19
20
|
* Le propane et le butane sont des GPL : k = 1.09 (et non 1.11, valeur du gaz naturel), comme
|
|
20
21
|
* dans le moteur de référence CSTB (Tribu).
|
|
21
|
-
* @see
|
|
22
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.2
|
|
22
23
|
*/
|
|
23
24
|
export const K = {
|
|
24
25
|
électricité: 1,
|
|
@@ -84,7 +85,7 @@ export const TOLERANCE_TEMP_FONC = 0.01;
|
|
|
84
85
|
* 13.2.1.5 Chaudières basse température et condensation
|
|
85
86
|
* « Si l'année d'installation des émetteurs est inconnue, prendre l'année de construction du
|
|
86
87
|
* bâtiment. »
|
|
87
|
-
* @see
|
|
88
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.5
|
|
88
89
|
*
|
|
89
90
|
* @param ac {number} année de construction du bâtiment
|
|
90
91
|
* @return {string} période d'installation des émetteurs
|
|
@@ -148,7 +149,7 @@ export function temp_fonc_pour_periode(de, em_ch, periodeParDefaut) {
|
|
|
148
149
|
* - plusieurs : celle de l'année de construction si elle en fait partie, sinon la plus récente ;
|
|
149
150
|
* - aucune : null (repli sur l'année de construction, valeurs hors tables).
|
|
150
151
|
*
|
|
151
|
-
* @see
|
|
152
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.5
|
|
152
153
|
*
|
|
153
154
|
* @param tempFonc30Dpe {number} temp_fonc_30 d'origine du DPE
|
|
154
155
|
* @param tempFonc100Dpe {number} temp_fonc_100 d'origine du DPE
|
|
@@ -203,7 +204,7 @@ export function deductionPeriodeEmetteursActive(tempFonc30Dpe, tempFonc100Dpe, e
|
|
|
203
204
|
* d'installation des émetteurs non exportée (issue #220) ; les valeurs retenues proviennent
|
|
204
205
|
* toujours des tables (tv_temp_fonc_30_id / tv_temp_fonc_100_id renseignés).
|
|
205
206
|
*
|
|
206
|
-
* @see
|
|
207
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.5
|
|
207
208
|
*/
|
|
208
209
|
export function tv_temp_fonc_30_100(di, de, du, em_ch, ac) {
|
|
209
210
|
const tempFonc30Dpe = di.temp_fonc_30;
|
|
@@ -281,9 +282,9 @@ function Tch_xfinal(x, Cdimref) {
|
|
|
281
282
|
* une division en place ramenait QP0 à ~0 (÷ 100 à chaque appel), et le terme 0,45 × QP0 du
|
|
282
283
|
* rendement de génération en était absent.
|
|
283
284
|
*
|
|
284
|
-
* @see
|
|
285
|
-
* @param de {
|
|
286
|
-
* @param di {
|
|
285
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1
|
|
286
|
+
* @param de {GenerateurChauffageDE}
|
|
287
|
+
* @param di {GenerateurChauffageDI}
|
|
287
288
|
* @param k {number} rapport PCI/PCS de l'énergie
|
|
288
289
|
* @returns {number}
|
|
289
290
|
*/
|
|
@@ -68,7 +68,7 @@ const RG_DEP_AIR_CHAUD = 0.874622228362935;
|
|
|
68
68
|
/**
|
|
69
69
|
* Pertes à l'arrêt QP0 (kW sur PCS) : pour les générateurs d'air chaud, la valeur de la table 13.2
|
|
70
70
|
* est en % de Pn et doit être ramenée en W.
|
|
71
|
-
* @see
|
|
71
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1
|
|
72
72
|
*/
|
|
73
73
|
describe('qp0PcsKw - pertes à l’arrêt sur PCS', () => {
|
|
74
74
|
test('générateur à air chaud : qp0 ramené en W (÷ 100) puis en kW PCS', () => {
|
|
@@ -94,7 +94,7 @@ describe('qp0PcsKw - pertes à l’arrêt sur PCS', () => {
|
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* 13.2.1.1 - Températures de fonctionnement à 30 % et 100 % de charge.
|
|
97
|
-
* @see
|
|
97
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.1
|
|
98
98
|
*/
|
|
99
99
|
describe('tv_temp_fonc_30_100 - températures de fonctionnement', () => {
|
|
100
100
|
function emetteur(overrides = {}) {
|
|
@@ -266,7 +266,7 @@ describe('tv_temp_fonc_30_100 - températures de fonctionnement', () => {
|
|
|
266
266
|
* Mode strict : « Si l'année d'installation des émetteurs est inconnue, prendre l'année de
|
|
267
267
|
* construction du bâtiment. » En mode bug_for_bug_compat uniquement, la période est retrouvée à
|
|
268
268
|
* partir des temp_fonc_30 / temp_fonc_100 d'origine stockées dans le DPE (règle de l'expert).
|
|
269
|
-
* @see
|
|
269
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.5
|
|
270
270
|
*/
|
|
271
271
|
describe('tv_temp_fonc_30_100 - période des émetteurs absente (issue #220)', () => {
|
|
272
272
|
/**
|
|
@@ -555,7 +555,7 @@ describe('tempDistributionChPourTempFonc', () => {
|
|
|
555
555
|
|
|
556
556
|
/**
|
|
557
557
|
* 13.2.1.2 - Rendement de génération des chaudières (rg PCI).
|
|
558
|
-
* @see
|
|
558
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.2
|
|
559
559
|
*/
|
|
560
560
|
describe('calc_generateur_combustion_ch - rendement de génération', () => {
|
|
561
561
|
test('chaudière gaz standard : rendement PCI et rendement dépensier', () => {
|
|
@@ -822,7 +822,7 @@ describe('calc_generateur_combustion_ch - rendement de génération', () => {
|
|
|
822
822
|
* Pveil = 150 W, Tfonc30/100 = 56/70, Cdimref = 0.05 / TchFinal(Ch_5)).
|
|
823
823
|
* Comme QP0, la puissance de veilleuse est exprimée sur PCS (Pveil × k) dans le dénominateur.
|
|
824
824
|
* Avant correctif (Pveil sur PCI) : rg = 0.740607866698453 (Cch −0,42 %).
|
|
825
|
-
* @see
|
|
825
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.2
|
|
826
826
|
*/
|
|
827
827
|
test('autotest État MI4-0-1 : rg identique à Tribu (Pveil exprimée sur PCS)', () => {
|
|
828
828
|
const di = {
|
|
@@ -902,7 +902,7 @@ describe('calc_generateur_combustion_ch - rendement de génération', () => {
|
|
|
902
902
|
* Issue #39 : la présence de veilleuse lue dans la fiche technique (de.presence_veilleuse)
|
|
903
903
|
* prime sur la valeur intermédiaire pveilleuse du DPE. Sans fiche, comportement inchangé.
|
|
904
904
|
* Tribu : Pveil1 = 0 si Is_veilleuse != oui (DPE.Core/Calcul_generateur.cs).
|
|
905
|
-
* @see
|
|
905
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.4
|
|
906
906
|
*/
|
|
907
907
|
describe('présence de veilleuse (issue #39)', () => {
|
|
908
908
|
const di = (extra) => ({
|
|
@@ -985,7 +985,7 @@ describe('calc_generateur_combustion_ch - rendement de génération', () => {
|
|
|
985
985
|
|
|
986
986
|
/**
|
|
987
987
|
* Coefficient de conversion PCS / PCI : le propane et le butane sont des GPL (k = 1.09).
|
|
988
|
-
* @see
|
|
988
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.1.2
|
|
989
989
|
*/
|
|
990
990
|
describe('K - coefficient PCS / PCI', () => {
|
|
991
991
|
test('propane et butane : même coefficient que le gpl (1.09), distinct du gaz naturel', () => {
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
|
|
2
|
+
/** @import { GenerateurChauffageDE } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
3
|
+
/** @import { GenerateurEcsDE } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
4
|
import getFicheTechnique from './ficheTechnique.js';
|
|
2
5
|
|
|
3
6
|
/**
|
|
@@ -91,7 +94,7 @@ export function getChaudiereFioulDefautId(dpe, type, typeSaisiId) {
|
|
|
91
94
|
/**
|
|
92
95
|
* Pour les générateurs "Autre système à combustion", les calculs sont faits comme pour les chaudières standard
|
|
93
96
|
* @param dpe {FullDpe}
|
|
94
|
-
* @param de {
|
|
97
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
95
98
|
* @param type {'ch' | 'ecs'}
|
|
96
99
|
*/
|
|
97
100
|
export function updateGenerateurChaudieres(dpe, de, type) {
|
|
@@ -169,7 +172,7 @@ export function updateGenerateurChaudieres(dpe, de, type) {
|
|
|
169
172
|
* - Pour un système 'autre système à combustion fioul' granulés installé en 2000, on prendra la chaudière gaz standard 2001-2015
|
|
170
173
|
* @param dpe {FullDpe}
|
|
171
174
|
* @param ids
|
|
172
|
-
* @param de {
|
|
175
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
173
176
|
* @param type {'ch' | 'ecs'}
|
|
174
177
|
*/
|
|
175
178
|
function updateGenerateurChaudiere(dpe, ids, de, type) {
|
|
@@ -20,7 +20,7 @@ beforeEach(() => {
|
|
|
20
20
|
/**
|
|
21
21
|
* 13.2 - Les "autres systèmes à combustion" sont assimilés à des chaudières standard
|
|
22
22
|
* de la période correspondante.
|
|
23
|
-
* @see
|
|
23
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2
|
|
24
24
|
*/
|
|
25
25
|
describe('updateGenerateurChaudieres - substitution par une chaudière équivalente', () => {
|
|
26
26
|
test('type non concerné : aucune substitution, pas de champ previous', () => {
|
|
@@ -108,7 +108,7 @@ describe('findIdForAnnee - sélection de la période', () => {
|
|
|
108
108
|
/**
|
|
109
109
|
* Système collectif par défaut (ch 119 / ecs 84) : chaudière atmosphérique mixte standard
|
|
110
110
|
* datant de la construction du bâtiment, énergie fioul.
|
|
111
|
-
* @see
|
|
111
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §17.2.1.1
|
|
112
112
|
*/
|
|
113
113
|
describe('getChaudiereFioulDefautId - chaudière fioul par défaut selon l’année de construction', () => {
|
|
114
114
|
const dpe = (annee) => ({
|
|
@@ -173,13 +173,13 @@ export function valeurChaudiereMurale(valeur) {
|
|
|
173
173
|
* majoritairement murales), première sinon.
|
|
174
174
|
*
|
|
175
175
|
* @param params {{
|
|
176
|
-
* pch: number, Pch (W), déjà proratisée à la surface desservie
|
|
177
|
-
* volumeStockage?: number|string, Vs (L) de la production d'ECS assurée par le générateur
|
|
178
|
-
* usageEcs?: boolean, le générateur produit de l'ECS (usage ECS ou mixte)
|
|
179
|
-
* usageChauffage?: boolean, le générateur assure le chauffage (défaut true)
|
|
176
|
+
* pch: number, // Pch (W), déjà proratisée à la surface desservie
|
|
177
|
+
* volumeStockage?: number|string, // Vs (L) de la production d'ECS assurée par le générateur
|
|
178
|
+
* usageEcs?: boolean, // le générateur produit de l'ECS (usage ECS ou mixte)
|
|
179
|
+
* usageChauffage?: boolean, // le générateur assure le chauffage (défaut true)
|
|
180
180
|
* libelleTypeGenerateur?: string,
|
|
181
|
-
* murale?: boolean, pose murale (undefined si inconnue)
|
|
182
|
-
* anneeInstallation?: number année d'installation (undefined si inconnue)
|
|
181
|
+
* murale?: boolean, // pose murale (undefined si inconnue)
|
|
182
|
+
* anneeInstallation?: number // année d'installation (undefined si inconnue)
|
|
183
183
|
* }}
|
|
184
184
|
* @returns {number} Pn (W)
|
|
185
185
|
*/
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Module de calcul pur (aucune dépendance) : pas de mock nécessaire.
|
|
15
|
-
* @see
|
|
15
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2.2.4 Calcul des puissances nominales (p.90-91)
|
|
16
16
|
*/
|
|
17
17
|
describe('puissanceEcs - puissance de dimensionnement ECS selon le volume de stockage', () => {
|
|
18
18
|
test('production instantanée (Vs = 0) : Pecs = 21 kW', () => {
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
* Module pur (aucune dépendance importée) : les caractéristiques du générateur sont fournies par
|
|
15
15
|
* une fonction injectée, remplacée ici par un double de test déterministe.
|
|
16
16
|
*
|
|
17
|
-
* @see
|
|
17
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §13.2 et §17.2.1 (virtualisation)
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
/**
|
package/13.2_generateur_pac.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
|
|
2
|
+
/** @import { GenerateurChauffageDE } from './features/dpe/domain/models/installation-chauffage.model.js' */
|
|
3
|
+
/** @import { GenerateurEcsDE } from './features/dpe/domain/models/installation-ecs.model.js' */
|
|
1
4
|
/**
|
|
2
5
|
* Pour les générateurs "Autre système thermodynamique", les calculs sont faits comme pour les 'cet sur air ambiant'
|
|
3
6
|
* @param dpe {FullDpe}
|
|
4
|
-
* @param de {
|
|
7
|
+
* @param de {GenerateurChauffageDE|GenerateurEcsDE}
|
|
5
8
|
* @param type {'ch' | 'ecs'}
|
|
6
9
|
*/
|
|
7
10
|
export function updateGenerateurPacs(dpe, de, type) {
|