@open3cl/engine 1.11.2 → 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.
Files changed (154) hide show
  1. package/10_besoin_fr.spec.js +1 -1
  2. package/10_clim.js +1 -1
  3. package/10_clim.spec.js +5 -9
  4. package/11_besoin_ecs.spec.js +1 -1
  5. package/11_ecs.js +2 -1
  6. package/11_ecs.spec.js +2 -2
  7. package/11_nadeq.js +1 -0
  8. package/11_nadeq.spec.js +1 -1
  9. package/11_rdim_ecs_individuelle_unique.js +78 -0
  10. package/11_rdim_ecs_individuelle_unique.spec.js +136 -0
  11. package/12.4_pac.js +5 -3
  12. package/12.4_pac.spec.js +10 -18
  13. package/13.2_generateur_combustion.js +19 -16
  14. package/13.2_generateur_combustion.spec.js +10 -10
  15. package/13.2_generateur_combustion_bouilleur.js +5 -2
  16. package/13.2_generateur_combustion_bouilleur.spec.js +1 -1
  17. package/13.2_generateur_combustion_ch.js +8 -7
  18. package/13.2_generateur_combustion_ch.spec.js +7 -7
  19. package/13.2_generateur_combustion_chaudiere.js +5 -2
  20. package/13.2_generateur_combustion_chaudiere.spec.js +2 -2
  21. package/13.2_generateur_combustion_pdim.js +6 -6
  22. package/13.2_generateur_combustion_pdim.spec.js +1 -1
  23. package/13.2_generateur_combustion_pn.spec.js +1 -1
  24. package/13.2_generateur_pac.js +4 -1
  25. package/13.2_generateur_pac.spec.js +1 -1
  26. package/13_rendement_distribution_ecs.spec.js +1 -1
  27. package/14_generateur_ecs.js +2 -1
  28. package/14_generateur_ecs.spec.js +4 -4
  29. package/15_conso_aux.js +19 -17
  30. package/15_conso_aux.spec.js +8 -8
  31. package/16.2_production_enr.js +4 -3
  32. package/16.2_production_enr.spec.js +1 -1
  33. package/16_conso_eclairage.spec.js +1 -1
  34. package/2021_04_13_confort_ete.spec.js +1 -1
  35. package/2021_04_13_qualite_isolation.js +1 -1
  36. package/2021_04_13_qualite_isolation.spec.js +2 -2
  37. package/3.1_b.spec.js +1 -1
  38. package/3.2.1_mur.js +10 -9
  39. package/3.2.1_mur.spec.js +11 -19
  40. package/3.2.2_plancher_bas.js +4 -3
  41. package/3.2.2_plancher_bas.spec.js +10 -20
  42. package/3.2.3_plancher_haut.js +1 -1
  43. package/3.2.3_plancher_haut.spec.js +2 -2
  44. package/3.3.1.4_porte.js +1 -1
  45. package/3.3.1.4_porte.spec.js +2 -2
  46. package/3.3_baie_vitree.js +2 -2
  47. package/3.3_baie_vitree.spec.js +3 -3
  48. package/3.4_pont_thermique.js +6 -4
  49. package/3.4_pont_thermique.spec.js +7 -7
  50. package/3_deperdition.js +1 -0
  51. package/3_deperdition.spec.js +3 -3
  52. package/4_ventilation.js +2 -2
  53. package/4_ventilation.spec.js +1 -1
  54. package/5_conso_ventilation.spec.js +1 -1
  55. package/6.1_apport_gratuit.spec.js +2 -2
  56. package/6.2_surface_sud_equivalente.js +12 -9
  57. package/6.2_surface_sud_equivalente.spec.js +3 -3
  58. package/7_inertie.js +7 -4
  59. package/7_inertie.spec.js +1 -1
  60. package/8_intermittence.spec.js +1 -1
  61. package/9_besoin_ch.js +5 -3
  62. package/9_besoin_ch.spec.js +3 -3
  63. package/9_chauffage.js +12 -11
  64. package/9_chauffage.spec.js +7 -7
  65. package/9_conso_ch.spec.js +3 -3
  66. package/9_emetteur_ch.js +5 -5
  67. package/9_emetteur_ch.spec.js +1 -1
  68. package/9_generateur_ch.js +16 -13
  69. package/9_generateur_ch.spec.js +6 -6
  70. package/README.md +19 -19
  71. package/apport_et_besoin.spec.js +1 -1
  72. package/conso.js +18 -14
  73. package/conso.spec.js +3 -3
  74. package/core/assets/domain/synchronize-assets.js +2 -0
  75. package/core/assets/domain/synchronize-c1-tables.js +2 -0
  76. package/core/assets/domain/synchronize-dpe-ges-limit-values-tables.js +2 -0
  77. package/core/assets/domain/synchronize-enum-tables.js +2 -0
  78. package/core/assets/domain/synchronize-solicitations-tables.js +2 -0
  79. package/core/assets/domain/synchronize-valeur-tables.js +6 -0
  80. package/core/file/infrastructure/adapter/csv-parser.store.js +2 -1
  81. package/dpe-sanitizer.service.js +1 -0
  82. package/engine.js +11 -2
  83. package/engine.spec.js +23 -2
  84. package/enums.d.ts +1257 -0
  85. package/features/dpe/domain/models/baie-ets.model.ts +8 -11
  86. package/features/dpe/domain/models/baie-vitree.model.ts +28 -96
  87. package/features/dpe/domain/models/climatisation.model.ts +13 -23
  88. package/features/dpe/domain/models/dpe-xsd.generated.ts +2797 -0
  89. package/features/dpe/domain/models/dpe.model.ts +105 -181
  90. package/features/dpe/domain/models/ets.model.ts +10 -18
  91. package/features/dpe/domain/models/installation-chauffage.model.ts +92 -99
  92. package/features/dpe/domain/models/installation-ecs.model.ts +45 -77
  93. package/features/dpe/domain/models/mur.model.ts +10 -38
  94. package/features/dpe/domain/models/plancher.model.ts +22 -63
  95. package/features/dpe/domain/models/pont-thermique.model.ts +10 -20
  96. package/features/dpe/domain/models/porte.model.ts +10 -30
  97. package/features/dpe/domain/models/production-elec-enr.model.ts +13 -27
  98. package/features/dpe/domain/models/sortie.model.ts +32 -176
  99. package/features/dpe/domain/models/type-generateur.model.js +4 -3
  100. package/features/dpe/domain/models/type-habitation.model.js +8 -6
  101. package/features/dpe/domain/models/type-stockage.model.js +4 -3
  102. package/features/dpe/domain/models/type-ventilation.model.js +4 -3
  103. package/features/dpe/domain/models/ventilation.model.ts +15 -25
  104. package/features/dpe/infrastructure/ch/chTv.store.js +2 -2
  105. package/features/dpe/infrastructure/ecs/ecsTv.store.js +3 -3
  106. package/features/dpe/infrastructure/enveloppe/baieVitreeTv.store.js +1 -1
  107. package/features/dpe/infrastructure/froid/frTv.store.js +3 -3
  108. package/features/dpe/infrastructure/froid/frTv.store.spec.js +1 -1
  109. package/features/dpe/infrastructure/tv.store.js +1 -1
  110. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.js +3 -0
  111. package/features/engine/domain/apport_et_besoin/apport_gratuit/apport-gratuit.service.js +3 -1
  112. package/features/engine/domain/apport_et_besoin/ch/besoin-ch.service.js +3 -1
  113. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.js +9 -3
  114. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +1 -1
  115. package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.js +2 -1
  116. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.js +4 -1
  117. package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.js +3 -1
  118. package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.js +7 -2
  119. package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +1 -1
  120. package/features/engine/domain/ch/emetteur-ch.service.js +3 -1
  121. package/features/engine/domain/ch/emetteur-ch.service.spec.js +1 -1
  122. package/features/engine/domain/ch/generateur-ch.service.js +4 -1
  123. package/features/engine/domain/ch/generateur-ch.service.spec.js +3 -3
  124. package/features/engine/domain/ch/installation-ch.service.js +2 -0
  125. package/features/engine/domain/conso/conso.service.js +2 -0
  126. package/features/engine/domain/conso/froid/conso-froid.service.js +5 -1
  127. package/features/engine/domain/contexte.builder.js +2 -0
  128. package/features/engine/domain/ecs/generateur-ecs.service.js +1 -0
  129. package/features/engine/domain/ecs/installation-ecs.service.js +3 -0
  130. package/features/engine/domain/engine.service.js +1 -0
  131. package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.js +4 -1
  132. package/features/engine/domain/enveloppe/deperdition-enveloppe.service.js +3 -0
  133. package/features/engine/domain/enveloppe/deperdition.service.js +8 -4
  134. package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.js +4 -1
  135. package/features/engine/domain/enveloppe/mur/deperdition-mur.service.js +3 -1
  136. package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.js +3 -1
  137. package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +2 -2
  138. package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.js +4 -2
  139. package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.js +9 -1
  140. package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +1 -1
  141. package/features/engine/domain/enveloppe/porte/deperdition-porte.service.js +3 -1
  142. package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.js +3 -1
  143. package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +1 -1
  144. package/features/engine/domain/logement/nadeq.service.js +1 -1
  145. package/features/engine/domain/logement/nadeq.service.spec.js +1 -1
  146. package/features/engine/domain/models/contexte.model.ts +2 -2
  147. package/features/normalizer/domain/dpe-normalizer.service.js +1 -0
  148. package/ficheTechnique.js +4 -2
  149. package/globals.d.ts +14 -0
  150. package/package.json +3 -2
  151. package/preprocessor/index.js +1 -0
  152. package/tv.d.ts +759 -0
  153. package/tvs.d.ts +2 -7
  154. package/utils.js +8 -6
package/conso.spec.js CHANGED
@@ -78,7 +78,7 @@ const { tv } = await import('./utils.js');
78
78
 
79
79
  /**
80
80
  * Classe énergétique (bilan DPE)
81
- * @see : Methode_de_calcul_3CL_DPE_2021-338.pdf
81
+ * @see Methode_de_calcul_3CL_DPE_2021-338.pdf
82
82
  */
83
83
  describe('classe_bilan_dpe - seuils de classe énergétique', () => {
84
84
  test('consommation nulle (null) : aucune classe', () => {
@@ -121,7 +121,7 @@ describe('classe_bilan_dpe - seuils de classe énergétique', () => {
121
121
 
122
122
  /**
123
123
  * Classe climat (émissions GES)
124
- * @see : Methode_de_calcul_3CL_DPE_2021-338.pdf
124
+ * @see Methode_de_calcul_3CL_DPE_2021-338.pdf
125
125
  */
126
126
  describe('classe_emission_ges - seuils de classe climat', () => {
127
127
  test('émission nulle (null) : aucune classe', () => {
@@ -758,7 +758,7 @@ describe('calc_conso - agrégation des consommations', () => {
758
758
 
759
759
  /**
760
760
  * Ligne « électricité » de sortie_par_energie (issue #34).
761
- * @see : Methode_de_calcul_3CL_DPE_2021-338.pdf - §15, §16.2 ; arrêté DPE habitation du 31/03/2021 §3.a, §4.a
761
+ * @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15, §16.2 ; arrêté DPE habitation du 31/03/2021 §3.a, §4.a
762
762
  */
763
763
  describe('sortie_par_energie - ligne électricité (issue #34)', () => {
764
764
  const elecDe = (res) =>
@@ -1,3 +1,5 @@
1
+ /** @import { SynchronizeEnumTables } from './synchronize-enum-tables.js' */
2
+ /** @import { SynchronizeValeurTables } from './synchronize-valeur-tables.js' */
1
3
  export class SynchronizeAssets {
2
4
  /**
3
5
  * @type {SynchronizeEnumTables}
@@ -1,3 +1,5 @@
1
+ /** @import { ApplicationConfig } from '../../conf/infrastructure/application.config.js' */
2
+ /** @import { FileStore } from '../../file/infrastructure/adapter/file.store.js' */
1
3
  import { set } from 'lodash-es';
2
4
 
3
5
  const ZONE_CLIMATIQUE_PROPERTY = 'zc';
@@ -1,3 +1,5 @@
1
+ /** @import { ApplicationConfig } from '../../conf/infrastructure/application.config.js' */
2
+ /** @import { FileStore } from '../../file/infrastructure/adapter/file.store.js' */
1
3
  import { set } from 'lodash-es';
2
4
 
3
5
  const CLASSE_ALTITUDE_PROPERTY = 'classe_altitude';
@@ -1,3 +1,5 @@
1
+ /** @import { ApplicationConfig } from '../../conf/infrastructure/application.config.js' */
2
+ /** @import { FileStore } from '../../file/infrastructure/adapter/file.store.js' */
1
3
  /**
2
4
  * Download the `enum_tables.xlsx` file from the official ademe repository and generates a new `enums.js` file
3
5
  * Please see @link https://gitlab.com/observatoire-dpe/observatoire-dpe/-/tree/master
@@ -1,3 +1,5 @@
1
+ /** @import { ApplicationConfig } from '../../conf/infrastructure/application.config.js' */
2
+ /** @import { FileStore } from '../../file/infrastructure/adapter/file.store.js' */
1
3
  import { set } from 'lodash-es';
2
4
 
3
5
  const ILPA_PROPERTY = 'ilpa';
@@ -1,3 +1,9 @@
1
+ /** @import { ApplicationConfig } from '../../conf/infrastructure/application.config.js' */
2
+ /** @import { FileStore } from '../../file/infrastructure/adapter/file.store.js' */
3
+ /** @import { AddAdditionnalUeValuesTables } from './add-additionnal-ue-values-tables.js' */
4
+ /** @import { SynchronizeC1Tables } from './synchronize-c1-tables.js' */
5
+ /** @import { SynchronizeDpeGesLimitValuesTables } from './synchronize-dpe-ges-limit-values-tables.js' */
6
+ /** @import { SynchronizeSolicitationsTables } from './synchronize-solicitations-tables.js' */
1
7
  import { ObjectUtil } from '../../util/infrastructure/object-util.js';
2
8
 
3
9
  /**
@@ -1,10 +1,11 @@
1
+ /** @import { ReadStream } from 'node:fs' */
1
2
  import { parse } from 'fast-csv';
2
3
 
3
4
  export default class CsvParserStore {
4
5
  /**
5
6
  * @param stream {ReadStream}
6
7
  * @param opts {import('fast-csv').ParserOptionsArgs}
7
- * @param transform {import('fast-csv').RowTransformFunction}
8
+ * @param transform {import('fast-csv').ParserRowTransformFunction<any, any>}
8
9
  * @return Promise<object[]>
9
10
  */
10
11
  parseFromStream(stream, opts, transform) {
@@ -1,3 +1,4 @@
1
+ /** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
1
2
  import { ObjectUtil } from './core/util/infrastructure/object-util.js';
2
3
  import { set, has } from 'lodash-es';
3
4
 
package/engine.js CHANGED
@@ -1,3 +1,4 @@
1
+ /** @import { FullDpe } from './features/dpe/domain/models/dpe.model.js' */
1
2
  import enums from './enums.js';
2
3
  import calc_deperdition from './3_deperdition.js';
3
4
  import calc_apport_et_besoin from './apport_et_besoin.js';
@@ -34,9 +35,12 @@ import getFicheTechnique from './ficheTechnique.js';
34
35
  import { ProductionENR, ratioProrataPvLogement } from './16.2_production_enr.js';
35
36
  import DpeSanitizerService from './dpe-sanitizer.service.js';
36
37
  import { reconstituerRdimDpeGenereImmeuble } from './17.2_rdim_dpe_genere_immeuble.js';
37
- import { reconstituerRdimEcsIndividuelleUnique } from './11_rdim_ecs_individuelle_unique.js';
38
+ import {
39
+ reconstituerRdimEcsIndividuelleUnique,
40
+ reconstituerRdimEcsIndividuellesMultiples
41
+ } from './11_rdim_ecs_individuelle_unique.js';
38
42
 
39
- const LIB_VERSION = '1.11.2';
43
+ const LIB_VERSION = '1.11.4';
40
44
 
41
45
  const dpeSanitizerService = new DpeSanitizerService();
42
46
 
@@ -305,6 +309,11 @@ export function calcul_3cl(inputDpe, options) {
305
309
  * @see https://github.com/Open3CL/engine/issues/288
306
310
  */
307
311
  reconstituerRdimEcsIndividuelleUnique(th, ecs, cg.surface_habitable_immeuble);
312
+ /**
313
+ * Immeuble avec plusieurs installations ECS individuelles décrites chacune pour un logement type
314
+ * (Σ Sh_i × nombre_logement_i ≈ SH, sans rdim) : rdim_i = nombre_logement_i.
315
+ */
316
+ reconstituerRdimEcsIndividuellesMultiples(th, ecs, cg.surface_habitable_immeuble);
308
317
  const Nb_lgt = cg.nombre_appartement || 1;
309
318
 
310
319
  /**
package/engine.spec.js CHANGED
@@ -75,7 +75,8 @@ vi.mock('./17.2_rdim_dpe_genere_immeuble.js', () => ({
75
75
  reconstituerRdimDpeGenereImmeuble: vi.fn()
76
76
  }));
77
77
  vi.mock('./11_rdim_ecs_individuelle_unique.js', () => ({
78
- reconstituerRdimEcsIndividuelleUnique: vi.fn()
78
+ reconstituerRdimEcsIndividuelleUnique: vi.fn(),
79
+ reconstituerRdimEcsIndividuellesMultiples: vi.fn()
79
80
  }));
80
81
 
81
82
  // Les instances Inertie / ProductionENR sont créées au chargement du module.
@@ -129,7 +130,7 @@ const calc_confort_ete = (await import('./2021_04_13_confort_ete.js')).default;
129
130
  const calc_qualite_isolation = (await import('./2021_04_13_qualite_isolation.js')).default;
130
131
  const getFicheTechnique = (await import('./ficheTechnique.js')).default;
131
132
  const { reconstituerRdimDpeGenereImmeuble } = await import('./17.2_rdim_dpe_genere_immeuble.js');
132
- const { reconstituerRdimEcsIndividuelleUnique } =
133
+ const { reconstituerRdimEcsIndividuelleUnique, reconstituerRdimEcsIndividuellesMultiples } =
133
134
  await import('./11_rdim_ecs_individuelle_unique.js');
134
135
 
135
136
  /** Objet conso renvoyé par le mock de `calc_conso` (mêmes réf pour les 3 appels). */
@@ -1326,6 +1327,26 @@ describe('calcul_3cl - rdim de l’installation ECS individuelle unique d’un i
1326
1327
  });
1327
1328
  });
1328
1329
 
1330
+ describe('calcul_3cl - rdim des installations ECS individuelles multiples d’un immeuble', () => {
1331
+ test('reconstitution appelée avec le type de bâtiment, les installations ECS et SH, avant le calcul ECS', () => {
1332
+ const dpe = makeDpe();
1333
+ dpe.logement.caracteristique_generale.surface_habitable_immeuble = 566.16;
1334
+ vi.mocked(reconstituerRdimEcsIndividuellesMultiples).mockImplementationOnce(() => {
1335
+ expect(calc_ecs).not.toHaveBeenCalled();
1336
+ return false;
1337
+ });
1338
+
1339
+ calcul_3cl(dpe, { sanitize: false });
1340
+
1341
+ expect(reconstituerRdimEcsIndividuellesMultiples).toHaveBeenCalledWith(
1342
+ 'maison',
1343
+ dpe.logement.installation_ecs_collection.installation_ecs,
1344
+ 566.16
1345
+ );
1346
+ expect(calc_ecs).toHaveBeenCalled();
1347
+ });
1348
+ });
1349
+
1329
1350
  describe('get_conso_coeff_1_7_2027', () => {
1330
1351
  test('projette la conso EP 2027 pour une maison', () => {
1331
1352
  vi.mocked(classe_bilan_dpe).mockReturnValue('C');