@open3cl/engine 1.6.0 → 1.6.2

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 (108) hide show
  1. package/10_besoin_fr.spec.js +122 -0
  2. package/10_clim.spec.js +116 -0
  3. package/11_besoin_ecs.spec.js +69 -0
  4. package/11_ecs.spec.js +282 -0
  5. package/11_nadeq.spec.js +37 -0
  6. package/12.4_pac.spec.js +131 -0
  7. package/13.2_generateur_combustion.js +2 -0
  8. package/13.2_generateur_combustion.spec.js +537 -0
  9. package/13.2_generateur_combustion_bouilleur.js +4 -1
  10. package/13.2_generateur_combustion_bouilleur.spec.js +74 -0
  11. package/13.2_generateur_combustion_ch.spec.js +323 -0
  12. package/13.2_generateur_combustion_chaudiere.spec.js +85 -0
  13. package/13.2_generateur_pac.spec.js +64 -0
  14. package/13_rendement_distribution_ecs.spec.js +38 -0
  15. package/14_generateur_ecs.js +4 -4
  16. package/14_generateur_ecs.spec.js +745 -0
  17. package/15_conso_aux.spec.js +225 -0
  18. package/16.2_production_enr.spec.js +188 -0
  19. package/16_conso_eclairage.spec.js +62 -0
  20. package/2021_04_13_confort_ete.spec.js +159 -0
  21. package/2021_04_13_qualite_isolation.js +1 -1
  22. package/2021_04_13_qualite_isolation.spec.js +286 -0
  23. package/3.1_b.js +1 -1
  24. package/3.1_b.spec.js +367 -0
  25. package/3.2.1_mur.spec.js +812 -39
  26. package/3.2.2_plancher_bas.spec.js +643 -78
  27. package/3.2.3_plancher_haut.spec.js +452 -0
  28. package/3.3.1.4_porte.spec.js +114 -0
  29. package/3.3_baie_vitree.spec.js +449 -295
  30. package/3.4_pont_thermique.spec.js +890 -0
  31. package/3_deperdition.spec.js +397 -0
  32. package/4_ventilation.js +1 -1
  33. package/4_ventilation.spec.js +406 -0
  34. package/5_conso_ventilation.spec.js +186 -0
  35. package/6.2_surface_sud_equivalente.spec.js +138 -0
  36. package/8_intermittence.spec.js +33 -0
  37. package/9_besoin_ch.js +2 -2
  38. package/9_besoin_ch.spec.js +381 -0
  39. package/9_chauffage.js +4 -0
  40. package/9_chauffage.spec.js +478 -92
  41. package/9_conso_ch.spec.js +502 -248
  42. package/9_emetteur_ch.spec.js +339 -0
  43. package/9_generateur_ch.spec.js +467 -81
  44. package/README.md +18 -9
  45. package/apport_et_besoin.spec.js +126 -0
  46. package/conso.js +1 -1
  47. package/conso.spec.js +471 -82
  48. package/core/assets/domain/add-additionnal-ue-values-tables.spec.js +53 -0
  49. package/core/assets/domain/synchronize-solicitations-tables.spec.js +25 -0
  50. package/core/assets/domain/synchronize-valeur-tables.spec.js +48 -0
  51. package/core/conf/infrastructure/application.config.spec.js +35 -0
  52. package/core/file/infrastructure/adapter/csv-parser.store.spec.js +31 -13
  53. package/core/file/infrastructure/adapter/file.store.spec.js +148 -12
  54. package/core/tv/infrastructure/assets/additional-ue-values.spec.js +36 -0
  55. package/core/util/infrastructure/object-util.spec.js +20 -0
  56. package/core/util/logger/log-service.js +16 -7
  57. package/core/util/logger/log-service.spec.js +101 -0
  58. package/dpe-sanitizer.service.spec.js +138 -0
  59. package/engine.js +7 -5
  60. package/engine.spec.js +854 -0
  61. package/enums.spec.js +46 -0
  62. package/features/dpe/domain/models/type-generateur.model.js +1 -2
  63. package/features/dpe/domain/models/type-generateur.model.spec.js +25 -0
  64. package/features/dpe/domain/models/type-habitation.model.spec.js +41 -0
  65. package/features/dpe/domain/models/type-stockage.model.spec.js +18 -0
  66. package/features/dpe/domain/models/type-ventilation.model.spec.js +19 -0
  67. package/features/dpe/infrastructure/ch/chTv.store.spec.js +4 -4
  68. package/features/dpe/infrastructure/enveloppe/baieVitreeTv.store.js +14 -2
  69. package/features/dpe/infrastructure/enveloppe/baieVitreeTv.store.spec.js +16 -0
  70. package/features/dpe/infrastructure/tv.store.js +28 -9
  71. package/features/dpe/infrastructure/tv.store.spec.js +44 -0
  72. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.spec.js +2 -1
  73. package/features/engine/domain/apport_et_besoin/ch/besoin-ch.service.spec.js +18 -0
  74. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +33 -1
  75. package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.spec.js +21 -1
  76. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.spec.js +41 -1
  77. package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.spec.js +44 -1
  78. package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +2 -1
  79. package/features/engine/domain/ch/generateur-ch.service.js +2 -0
  80. package/features/engine/domain/ch/generateur-ch.service.spec.js +117 -2
  81. package/features/engine/domain/ch/installation-ch.service.spec.js +14 -0
  82. package/features/engine/domain/conso/froid/conso-froid.service.spec.js +82 -1
  83. package/features/engine/domain/constants.spec.js +14 -0
  84. package/features/engine/domain/contexte.builder.spec.js +21 -0
  85. package/features/engine/domain/ecs/generateur-ecs.service.spec.js +11 -0
  86. package/features/engine/domain/ecs/installation-ecs.service.spec.js +55 -2
  87. package/features/engine/domain/engine.service.spec.js +227 -4
  88. package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.spec.js +124 -1
  89. package/features/engine/domain/enveloppe/deperdition-enveloppe.service.spec.js +270 -2
  90. package/features/engine/domain/enveloppe/deperdition.service.spec.js +141 -0
  91. package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.spec.js +2 -1
  92. package/features/engine/domain/enveloppe/mur/deperdition-mur.service.spec.js +117 -1
  93. package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +134 -1
  94. package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.spec.js +126 -1
  95. package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +18 -1
  96. package/features/engine/domain/enveloppe/porte/deperdition-porte.service.spec.js +2 -1
  97. package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +67 -1
  98. package/features/normalizer/domain/dpe-normalizer.service.js +1 -1
  99. package/features/normalizer/domain/dpe-normalizer.service.spec.js +53 -2
  100. package/ficheTechnique.spec.js +26 -0
  101. package/index.spec.js +54 -0
  102. package/package.json +5 -2
  103. package/preprocessor/index.js +20 -0
  104. package/preprocessor/index.spec.js +15 -0
  105. package/tv.spec.js +38 -0
  106. package/utils.js +43 -1
  107. package/utils.spec.js +518 -2
  108. package/output.js +0 -1
@@ -0,0 +1,126 @@
1
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
2
+
3
+ /**
4
+ * Dépendances mockées pour isoler `apport_et_besoin.js` (pur assembleur) :
5
+ * - `enums` : mapping zone/altitude/inertie ;
6
+ * - besoins ECS / froid, apports internes / solaires, surface sud équivalente :
7
+ * simples délégations dont on contrôle le retour ;
8
+ * - `Nadeq` : service de calcul du nombre d'adultes équivalents, remplacé par
9
+ * une classe factice via `vi.hoisted`.
10
+ */
11
+ const { calculateNadeq } = vi.hoisted(() => ({ calculateNadeq: vi.fn() }));
12
+
13
+ vi.mock('./enums.js', () => ({
14
+ default: {
15
+ zone_climatique: { 0: 'h1a' },
16
+ classe_altitude: { 0: 'ca1' },
17
+ classe_inertie: { 0: 'moyenne' }
18
+ }
19
+ }));
20
+
21
+ vi.mock('./6.2_surface_sud_equivalente.js', () => ({ calc_sse: vi.fn() }));
22
+ vi.mock('./10_besoin_fr.js', () => ({ default: vi.fn() }));
23
+ vi.mock('./11_besoin_ecs.js', () => ({ default: vi.fn() }));
24
+ vi.mock('./6.1_apport_gratuit.js', () => ({ calc_ai: vi.fn(), calc_as: vi.fn() }));
25
+ vi.mock('./11_nadeq.js', () => ({ Nadeq: vi.fn(() => ({ calculateNadeq })) }));
26
+
27
+ const { default: calc_apport_et_besoin } = await import('./apport_et_besoin.js');
28
+ const { calc_sse } = await import('./6.2_surface_sud_equivalente.js');
29
+ const { default: calc_besoin_fr } = await import('./10_besoin_fr.js');
30
+ const { default: calc_besoin_ecs } = await import('./11_besoin_ecs.js');
31
+ const { calc_ai, calc_as } = await import('./6.1_apport_gratuit.js');
32
+
33
+ /** Logement minimal contenant les collections lues par l'assembleur. */
34
+ function logementFixture() {
35
+ return {
36
+ enveloppe: {
37
+ inertie: { enum_classe_inertie_id: 0 },
38
+ baie_vitree_collection: { baie_vitree: ['bv'] },
39
+ ets_collection: { ets: ['ets'] }
40
+ }
41
+ };
42
+ }
43
+
44
+ beforeEach(() => {
45
+ calculateNadeq.mockReset().mockReturnValue(2.5);
46
+ vi.mocked(calc_sse).mockReset().mockReturnValue(7);
47
+ vi.mocked(calc_besoin_ecs).mockReset().mockReturnValue({ besoin_ecs: 1 });
48
+ vi.mocked(calc_besoin_fr)
49
+ .mockReset()
50
+ .mockImplementation(() => ({ besoin_fr: 5, besoin_fr_depensier: 6 }));
51
+ vi.mocked(calc_ai)
52
+ .mockReset()
53
+ .mockImplementation(() => ({ apport_interne_ch: 10, apport_interne_fr: 20 }));
54
+ vi.mocked(calc_as)
55
+ .mockReset()
56
+ .mockImplementation(() => ({ apport_solaire_ch: 30, apport_solaire_fr: 40 }));
57
+ });
58
+
59
+ /**
60
+ * Calcul des apports et besoins (assembleur chauffage / froid / ECS)
61
+ * @see : Methode_de_calcul_3CL_DPE_2021-338.pdf
62
+ */
63
+ describe('calc_apport_et_besoin', () => {
64
+ test('agrège les besoins, apports et volumes ECS (climatisation présente)', () => {
65
+ const ret = calc_apport_et_besoin(
66
+ logementFixture(),
67
+ 'maison',
68
+ [],
69
+ ['clim'],
70
+ 100,
71
+ 1,
72
+ 250,
73
+ 0,
74
+ 0,
75
+ 0
76
+ );
77
+
78
+ expect(ret.nadeq).toBe(2.5);
79
+ // volumes d'ECS journaliers : 56 L et 79 L (dépensier) par adulte équivalent
80
+ expect(ret.v40_ecs_journalier).toBe(140);
81
+ expect(ret.v40_ecs_journalier_depensier).toBe(197.5);
82
+ expect(ret.surface_sud_equivalente).toBe(7);
83
+ // fusion des retours délégués
84
+ expect(ret.besoin_ecs).toBe(1);
85
+ expect(ret.besoin_fr).toBe(5);
86
+ expect(ret.besoin_fr_depensier).toBe(6);
87
+ expect(ret.apport_interne_fr).toBe(20);
88
+ expect(ret.apport_solaire_fr).toBe(40);
89
+ expect(ret.apport_interne_ch).toBe(10);
90
+ expect(ret.apport_solaire_ch).toBe(30);
91
+ });
92
+
93
+ test('délègue avec les bons libellés (altitude/zone/inertie) et collections', () => {
94
+ const logement = logementFixture();
95
+ calc_apport_et_besoin(logement, 'maison', [], ['clim'], 100, 1, 250, 4, 0, 0);
96
+
97
+ expect(calculateNadeq).toHaveBeenCalledWith(logement);
98
+ expect(calc_besoin_ecs).toHaveBeenCalledWith('ca1', 'h1a', 2.5);
99
+ expect(calc_besoin_fr).toHaveBeenCalledWith(
100
+ 'ca1',
101
+ 'h1a',
102
+ 100,
103
+ 2.5,
104
+ 250,
105
+ 'moyenne',
106
+ ['bv'],
107
+ ['ets']
108
+ );
109
+ // les apports internes/solaires reçoivent l'indicateur ilpa
110
+ expect(calc_ai).toHaveBeenCalledWith(4, 'ca1', 'h1a', 100, 2.5);
111
+ expect(calc_as).toHaveBeenCalledWith(4, 'ca1', 'h1a', ['bv'], ['ets']);
112
+ expect(calc_sse).toHaveBeenCalledWith('ca1', 'h1a', ['bv'], ['ets']);
113
+ });
114
+
115
+ test('sans climatisation : besoins de froid et apports de froid remis à zéro', () => {
116
+ const ret = calc_apport_et_besoin(logementFixture(), 'maison', [], [], 100, 1, 250, 0, 0, 0);
117
+
118
+ expect(ret.besoin_fr).toBe(0);
119
+ expect(ret.besoin_fr_depensier).toBe(0);
120
+ expect(ret.apport_interne_fr).toBe(0);
121
+ expect(ret.apport_solaire_fr).toBe(0);
122
+ // les apports de chauffage restent inchangés
123
+ expect(ret.apport_interne_ch).toBe(10);
124
+ expect(ret.apport_solaire_ch).toBe(30);
125
+ });
126
+ });
package/conso.js CHANGED
@@ -98,7 +98,7 @@ const coef_cout = {
98
98
  * @param destination {'ch' | 'ecs' | 'éclairage'}
99
99
  * @return {string} la clef à utiliser pour récupérer le coefficient depuis la table `coef_ges`
100
100
  */
101
- function getCoefKey(type_energie, destination) {
101
+ export function getCoefKey(type_energie, destination) {
102
102
  if (type_energie === 'électricité') {
103
103
  if (!['ch', 'ecs', 'éclairage'].includes(destination)) {
104
104
  console.error(`Type d'électricité inconnu: ${destination}`);