@open3cl/engine 1.7.0 → 1.7.1

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 (48) hide show
  1. package/10_besoin_fr.spec.js +1 -0
  2. package/10_clim.spec.js +1 -0
  3. package/11_besoin_ecs.spec.js +1 -0
  4. package/11_ecs.spec.js +1 -0
  5. package/12.4_pac.spec.js +1 -0
  6. package/13.2_generateur_combustion.spec.js +3 -3
  7. package/13.2_generateur_combustion_ch.spec.js +3 -3
  8. package/14_generateur_ecs.spec.js +1 -0
  9. package/15_conso_aux.spec.js +3 -3
  10. package/2021_04_13_confort_ete.spec.js +1 -0
  11. package/3.1_b.spec.js +1 -0
  12. package/3.2.1_mur.spec.js +1 -0
  13. package/3.2.2_plancher_bas.spec.js +1 -0
  14. package/3.2.3_plancher_haut.spec.js +1 -0
  15. package/3.3.1.4_porte.spec.js +1 -0
  16. package/3.3_baie_vitree.spec.js +1 -0
  17. package/3.4_pont_thermique.spec.js +1 -0
  18. package/4_ventilation.spec.js +1 -0
  19. package/5_conso_ventilation.spec.js +1 -0
  20. package/6.2_surface_sud_equivalente.spec.js +1 -0
  21. package/9_besoin_ch.spec.js +1 -0
  22. package/9_chauffage.spec.js +3 -3
  23. package/9_conso_ch.spec.js +1 -0
  24. package/9_emetteur_ch.spec.js +1 -0
  25. package/9_generateur_ch.spec.js +1 -0
  26. package/README.md +412 -291
  27. package/conso.spec.js +1 -0
  28. package/engine.js +3 -1
  29. package/engine.spec.js +1 -0
  30. package/package.json +15 -14
  31. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.spec.js +0 -222
  32. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +0 -345
  33. package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.spec.js +0 -87
  34. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.spec.js +0 -260
  35. package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.spec.js +0 -272
  36. package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +0 -231
  37. package/features/engine/domain/ch/generateur-ch.service.spec.js +0 -849
  38. package/features/engine/domain/conso/froid/conso-froid.service.spec.js +0 -233
  39. package/features/engine/domain/ecs/installation-ecs.service.spec.js +0 -337
  40. package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.spec.js +0 -607
  41. package/features/engine/domain/enveloppe/deperdition-enveloppe.service.spec.js +0 -550
  42. package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.spec.js +0 -82
  43. package/features/engine/domain/enveloppe/mur/deperdition-mur.service.spec.js +0 -542
  44. package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +0 -430
  45. package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.spec.js +0 -411
  46. package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +0 -653
  47. package/features/engine/domain/enveloppe/porte/deperdition-porte.service.spec.js +0 -117
  48. package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +0 -508
@@ -1,542 +0,0 @@
1
- import corpus from '../../../../../../test/corpus-sano.json';
2
- import { getAdemeFileJson } from '../../../../../../test/test-helpers.js';
3
- import { DeperditionMurService } from './deperdition-mur.service.js';
4
- import { ContexteBuilder } from '../../contexte.builder.js';
5
- import { DpeNormalizerService } from '../../../../normalizer/domain/dpe-normalizer.service.js';
6
- import { TvStore } from '../../../../dpe/infrastructure/tv.store.js';
7
- import { beforeEach, describe, expect, test } from 'vitest';
8
- import { describeIntegration } from '../../../../../../test/helpers/integration-test.js';
9
-
10
- /** @type {DeperditionMurService} **/
11
- let service;
12
-
13
- /** @type {DpeNormalizerService} **/
14
- let normalizerService;
15
-
16
- /** @type {ContexteBuilder} **/
17
- let contexteBuilder;
18
-
19
- describe('Calcul de déperdition des murs', () => {
20
- beforeEach(() => {
21
- service = new DeperditionMurService(new TvStore());
22
- normalizerService = new DpeNormalizerService();
23
- contexteBuilder = new ContexteBuilder();
24
- });
25
-
26
- describe('Determination de uMur et uMur0', () => {
27
- test.each([
28
- {
29
- label: 'cas 2187E1039187C mur 1',
30
- enumMateriauxStructureMurId: '2',
31
- enumMethodeSaisieUId: '8',
32
- enumMethodeSaisieU0Id: '2',
33
- paroiAncienne: false,
34
- epaisseurStructure: 60,
35
- enumTypeIsolationId: '9',
36
- enumTypeDoublageId: '2',
37
- enumPeriodeConstructionId: '2',
38
- zoneClimatiqueId: '3',
39
- umurExpected: 1,
40
- umur0Expected: 1.8
41
- },
42
- {
43
- label:
44
- "(2287E0577966W) Mur 2 Sud, Est, Ouest (p1) - Mur en blocs de béton creux d'épaisseur ≥ 25 cm avec un doublage rapporté donnant sur l'extérieur",
45
- enumMateriauxStructureMurId: '12',
46
- enumMethodeSaisieUId: '7',
47
- enumMethodeSaisieU0Id: '2',
48
- paroiAncienne: false,
49
- enumTypeIsolationId: '1',
50
- enumTypeDoublageId: '4',
51
- enumPeriodeConstructionId: '1',
52
- enumIsolationId: '5',
53
- epaisseurStructure: 25,
54
- zoneClimatiqueId: '3',
55
- umurExpected: 0.8, // 0.7 dans le DPE original, mais certainement lié à une erreur
56
- umur0Expected: 1.55091
57
- }
58
- ])(
59
- '$label',
60
- ({
61
- enumMateriauxStructureMurId,
62
- enumMethodeSaisieUId,
63
- enumMethodeSaisieU0Id,
64
- enumTypeDoublageId,
65
- enumTypeIsolationId,
66
- umurSaisi,
67
- epaisseurStructure,
68
- paroiAncienne,
69
- resistanceIsolation,
70
- umurExpected,
71
- umur0Expected,
72
- enumPeriodeConstructionId = 1,
73
- enumIsolationId,
74
- effetJoule = false,
75
- zoneClimatiqueId = '1'
76
- }) => {
77
- /** @type {Contexte} */
78
- const ctx = {
79
- effetJoule,
80
- enumPeriodeConstructionId,
81
- zoneClimatique: {
82
- id: zoneClimatiqueId
83
- }
84
- };
85
-
86
- /** @type {MurDE} */
87
- const de = {
88
- enum_materiaux_structure_mur_id: enumMateriauxStructureMurId,
89
- enum_methode_saisie_u_id: enumMethodeSaisieUId,
90
- enum_methode_saisie_u0_id: enumMethodeSaisieU0Id,
91
- umur_saisi: umurSaisi,
92
- resistance_isolation: resistanceIsolation,
93
- paroi_ancienne: paroiAncienne,
94
- epaisseur_structure: epaisseurStructure,
95
- enum_type_doublage_id: enumTypeDoublageId,
96
- enum_type_isolation_id: enumTypeIsolationId,
97
- enum_periode_isolation_id: enumIsolationId
98
- };
99
-
100
- const di = service.execute(ctx, de);
101
- expect(di.umur0).toBe(umur0Expected);
102
- expect(di.umur).toBeCloseTo(umurExpected);
103
- }
104
- );
105
-
106
- test("Mur 1 Sud, Est, Ouest (p1) - Mur en blocs de béton pleins d'épaisseur ≤ 20 cm avec isolation intérieure (10 cm) donnant sur l'extérieur", () => {
107
- /** @type {Contexte} */
108
- const ctx = {
109
- effetJoule: false,
110
- enumPeriodeConstructionId: '6',
111
- zoneClimatique: {
112
- id: '3'
113
- }
114
- };
115
- /** @type {MurDE} */
116
- const de = {
117
- enum_materiaux_structure_mur_id: '11',
118
- enum_methode_saisie_u_id: '3',
119
- enum_methode_saisie_u0_id: '2',
120
- paroi_ancienne: false,
121
- epaisseur_structure: 20,
122
- enum_type_doublage_id: '2',
123
- enum_type_isolation_id: '3',
124
- epaisseur_isolation: 10
125
- };
126
-
127
- const di = service.execute(ctx, de);
128
- expect(di.umur0).toBe(2.5);
129
- expect(di.umur).toBeCloseTo(0.3448275862068969);
130
- });
131
-
132
- test('Mur 1 Nord - Mur en pierre de taille et moellons avec remplissage tout venant d'épaisseur 70 cm avec isolation intérieure (10 cm) donnant sur l'extérieur', () => {
133
- /** @type {Contexte} */
134
- const ctx = {
135
- effetJoule: false,
136
- enumPeriodeConstructionId: '6',
137
- zoneClimatique: {
138
- id: '3'
139
- }
140
- };
141
- /** @type {MurDE} */
142
- const de = {
143
- enum_materiaux_structure_mur_id: '3',
144
- enum_methode_saisie_u_id: '3',
145
- enum_methode_saisie_u0_id: '2',
146
- paroi_ancienne: true,
147
- epaisseur_structure: 70,
148
- enum_type_doublage_id: '2',
149
- enum_type_isolation_id: '3',
150
- epaisseur_isolation: 10
151
- };
152
-
153
- const di = service.execute(ctx, de);
154
- expect(di.umur0).toBe(1.45);
155
- expect(di.umur).toBeCloseTo(0.31351351351351353);
156
- });
157
-
158
- test("(2387E0430619S) Mur 3 Nord, Est (p1) - Mur en placoplatre isolé par l'intérieur (environ 10 cm) avec isolation intérieure donnant sur des circulations avec ouverture directe sur l'extérieur", () => {
159
- /** @type {Contexte} */
160
- const ctx = {
161
- effetJoule: false,
162
- enumPeriodeConstructionId: '6',
163
- zoneClimatique: {
164
- id: '3'
165
- }
166
- };
167
- /** @type {MurDE} */
168
- const de = {
169
- enum_materiaux_structure_mur_id: '23',
170
- enum_methode_saisie_u_id: '9',
171
- enum_methode_saisie_u0_id: '5',
172
- paroi_ancienne: false,
173
- enum_type_doublage_id: '2',
174
- enum_type_isolation_id: '3',
175
- umur_saisi: 0.32
176
- };
177
-
178
- const di = service.execute(ctx, de);
179
- expect(di.umur0).toBeUndefined();
180
- expect(di.umur).toBeCloseTo(0.32);
181
- });
182
-
183
- test("Mur 1 Nord, Sud, Ouest (p1) - Mur en pierre de taille et moellons avec remplissage tout venant d'épaisseur 50 cm non isolé donnant sur l'extérieur", () => {
184
- /** @type {Contexte} */
185
- const ctx = {
186
- effetJoule: false,
187
- enumPeriodeConstructionId: '6',
188
- zoneClimatique: {
189
- id: '3'
190
- }
191
- };
192
- /** @type {MurDE} */
193
- const de = {
194
- enum_materiaux_structure_mur_id: '3',
195
- enum_methode_saisie_u_id: '1',
196
- enum_methode_saisie_u0_id: '2',
197
- enduit_isolant_paroi_ancienne: true,
198
- epaisseur_structure: 50,
199
- enum_type_doublage_id: '2',
200
- enum_type_isolation_id: '2'
201
- };
202
-
203
- const di = service.execute(ctx, de);
204
- expect(di.umur0).toBeCloseTo(0.81545);
205
- expect(di.umur).toBeCloseTo(0.81545);
206
- });
207
-
208
- test("Mur 8 Est - Mur en pierre de taille et moellons avec remplissage tout venant d'épaisseur 50 cm avec un doublage rapporté non isolé donnant sur l'extérieur", () => {
209
- /** @type {Contexte} */
210
- const ctx = {
211
- effetJoule: false,
212
- enumPeriodeConstructionId: '6',
213
- zoneClimatique: {
214
- id: '3'
215
- }
216
- };
217
- /** @type {MurDE} */
218
- const de = {
219
- enum_materiaux_structure_mur_id: '3',
220
- enum_methode_saisie_u_id: '1',
221
- enum_methode_saisie_u0_id: '2',
222
- paroi_ancienne: true,
223
- epaisseur_structure: 50,
224
- enum_type_doublage_id: '3',
225
- enum_type_isolation_id: '2'
226
- };
227
-
228
- const di = service.execute(ctx, de);
229
- expect(di.umur0).toBeCloseTo(1.59664);
230
- expect(di.umur).toBeCloseTo(1.59664);
231
- });
232
-
233
- test('(2287E0577966W) umur 0.7 au lieu de 0.8', () => {
234
- /** @type {Contexte} */
235
- const ctx = {
236
- effetJoule: true,
237
- enumPeriodeConstructionId: '1',
238
- zoneClimatique: {
239
- id: '3'
240
- }
241
- };
242
- /** @type {MurDE} */
243
- const de = {
244
- enum_materiaux_structure_mur_id: '12',
245
- enum_methode_saisie_u_id: '7',
246
- enum_methode_saisie_u0_id: '2',
247
- paroi_ancienne: false,
248
- epaisseur_structure: 25,
249
- enum_type_doublage_id: '4',
250
- enum_type_isolation_id: '1',
251
- enum_periode_isolation_id: '5'
252
- };
253
-
254
- const di = service.execute(ctx, de);
255
- expect(di.umur0).toBeCloseTo(1.55091);
256
- expect(di.umur).toBeCloseTo(0.7); // 0.7 dans le DPE d'origine, comme si effet joule
257
- });
258
-
259
- test("(2387E0430619S) Mur 3 Nord, Est (p1) - Mur en placoplatre isolé par l'intérieur (environ 10 cm) avec isolation intérieure donnant sur des circulations avec ouverture directe sur l'extérieur", () => {
260
- /** @type {Contexte} */
261
- const ctx = {
262
- effetJoule: true,
263
- enumPeriodeConstructionId: '1',
264
- zoneClimatique: {
265
- id: 3
266
- }
267
- };
268
- /** @type {MurDE} */
269
- const de = {
270
- enum_materiaux_structure_mur_id: '23',
271
- enum_methode_saisie_u_id: '9',
272
- enum_methode_saisie_u0_id: '5',
273
- paroi_ancienne: false,
274
- umur_saisi: 0.32,
275
- epaisseur_structure: 25,
276
- enum_type_doublage_id: '2',
277
- enum_type_isolation_id: '3'
278
- };
279
-
280
- const di = service.execute(ctx, de);
281
- expect(di.umur0).toBeUndefined(); // umur saisie directement
282
- expect(di.umur).toBeCloseTo(0.32);
283
- });
284
-
285
- test('(2287E1724516Y) Mur 4 Nord, Sud (p1) - Mur en pan de bois sans remplissage tout venant d'épaisseur 18 cm avec isolation intérieure (R=2.5m².K/W) donnant sur l'extérieur', () => {
286
- /** @type {Contexte} */
287
- const ctx = {
288
- effetJoule: false,
289
- enumPeriodeConstructionId: '1',
290
- zoneClimatique: {
291
- id: 3
292
- }
293
- };
294
- /** @type {MurDE} */
295
- const de = {
296
- enum_materiaux_structure_mur_id: '5',
297
- enum_methode_saisie_u_id: '6',
298
- enum_methode_saisie_u0_id: '2',
299
- enduit_isolant_paroi_ancienne: true,
300
- epaisseur_structure: 18,
301
- resistance_isolation: 2.5,
302
- enum_type_doublage_id: '2',
303
- enum_type_isolation_id: '3'
304
- };
305
-
306
- const di = service.execute(ctx, de);
307
- expect(di.umur0).toBeCloseTo(0.82983999999999991);
308
- expect(di.umur).toBeCloseTo(0.26990177584075975);
309
- });
310
-
311
- test('(2187E0982013C) Mur Nord, Sud, Est, Ouest - Mur en pierre de taille et moellons avec remplissage tout venant d'épaisseur 50 cm non isolé donnant sur l'extérieur', () => {
312
- /** @type {Contexte} */
313
- const ctx = {
314
- effetJoule: false,
315
- enumPeriodeConstructionId: '1',
316
- zoneClimatique: {
317
- id: 3
318
- }
319
- };
320
- /** @type {MurDE} */
321
- const de = {
322
- enum_type_adjacence_id: '1',
323
- enum_materiaux_structure_mur_id: '3',
324
- enum_methode_saisie_u_id: '1',
325
- enum_methode_saisie_u0_id: '2',
326
- enduit_isolant_paroi_ancienne: true,
327
- epaisseur_structure: 18,
328
- resistance_isolation: 2.5,
329
- enum_type_doublage_id: '2',
330
- enum_type_isolation_id: '2'
331
- };
332
-
333
- const di = service.execute(ctx, de);
334
- expect(di.umur0).toBeCloseTo(0.81545);
335
- expect(di.umur).toBeCloseTo(0.81545);
336
- });
337
-
338
- test('Isolation inconnue (méthode 2) : umur est plafonné par la valeur forfaitaire de la table', () => {
339
- // enum_methode_saisie_u_id = '2' => on prend le min entre umur_nu et la valeur tabulée.
340
- /** @type {Contexte} */
341
- const ctx = {
342
- effetJoule: false,
343
- enumPeriodeConstructionId: '2',
344
- zoneClimatique: { id: '3' }
345
- };
346
- /** @type {MurDE} */
347
- const de = {
348
- enum_materiaux_structure_mur_id: '12',
349
- enum_methode_saisie_u_id: '2',
350
- enum_methode_saisie_u0_id: '2',
351
- epaisseur_structure: 25,
352
- enum_type_doublage_id: '2',
353
- enum_type_isolation_id: '2'
354
- };
355
-
356
- const di = service.execute(ctx, de);
357
- // Valeurs de référence de régression
358
- expect(di.umur0).toBeCloseTo(2.3);
359
- expect(di.umur).toBeCloseTo(2.3);
360
- });
361
-
362
- test("Épaisseur d'isolation saisie mais manquante (méthode 4) : repli sur min(umur0, 2.5)", () => {
363
- // Sans epaisseur_isolation, un avertissement est émis et umur = min(umur0, 2.5).
364
- /** @type {Contexte} */
365
- const ctx = {
366
- effetJoule: false,
367
- enumPeriodeConstructionId: '2',
368
- zoneClimatique: { id: '3' }
369
- };
370
- /** @type {MurDE} */
371
- const de = {
372
- enum_materiaux_structure_mur_id: '12',
373
- enum_methode_saisie_u_id: '4',
374
- enum_methode_saisie_u0_id: '2',
375
- epaisseur_structure: 25,
376
- enum_type_doublage_id: '2',
377
- enum_type_isolation_id: '2',
378
- description: 'mur sans épaisseur isolation'
379
- };
380
-
381
- const di = service.execute(ctx, de);
382
- expect(di.umur0).toBeCloseTo(2.3);
383
- expect(di.umur).toBeCloseTo(2.3);
384
- });
385
-
386
- test("Résistance d'isolation saisie (méthode 5) : umur calculé à partir de la résistance", () => {
387
- /** @type {Contexte} */
388
- const ctx = {
389
- effetJoule: false,
390
- enumPeriodeConstructionId: '2',
391
- zoneClimatique: { id: '3' }
392
- };
393
- /** @type {MurDE} */
394
- const de = {
395
- enum_materiaux_structure_mur_id: '12',
396
- enum_methode_saisie_u_id: '5',
397
- enum_methode_saisie_u0_id: '2',
398
- epaisseur_structure: 25,
399
- enum_type_doublage_id: '2',
400
- enum_type_isolation_id: '3',
401
- resistance_isolation: 2.5
402
- };
403
-
404
- const di = service.execute(ctx, de);
405
- expect(di.umur0).toBeCloseTo(2.3);
406
- // 1 / (1 / 2.3 + 2.5) => valeur de référence de régression
407
- expect(di.umur).toBeCloseTo(0.34074);
408
- });
409
-
410
- test('umur0 via matériau seul (méthode u0 = 1) sans épaisseur de structure', () => {
411
- /** @type {Contexte} */
412
- const ctx = {
413
- effetJoule: false,
414
- enumPeriodeConstructionId: '2',
415
- zoneClimatique: { id: '3' }
416
- };
417
- /** @type {MurDE} */
418
- const de = {
419
- enum_materiaux_structure_mur_id: '12',
420
- enum_methode_saisie_u_id: '1',
421
- enum_methode_saisie_u0_id: '1',
422
- enum_type_doublage_id: '2',
423
- enum_type_isolation_id: '2'
424
- };
425
-
426
- const di = service.execute(ctx, de);
427
- // Matériau seul => valeur forfaitaire plafonnée à 2.5
428
- expect(di.umur0).toBeCloseTo(2.5);
429
- expect(di.umur).toBeCloseTo(2.5);
430
- });
431
-
432
- test('umur0 saisi directement via une méthode u0 non gérée (défaut)', () => {
433
- /** @type {Contexte} */
434
- const ctx = {
435
- effetJoule: false,
436
- enumPeriodeConstructionId: '2',
437
- zoneClimatique: { id: '3' }
438
- };
439
- /** @type {MurDE} */
440
- const de = {
441
- enum_methode_saisie_u_id: '1',
442
- enum_methode_saisie_u0_id: '9',
443
- umur0_saisi: 1.234,
444
- enum_type_doublage_id: '2',
445
- enum_type_isolation_id: '2'
446
- };
447
-
448
- const di = service.execute(ctx, de);
449
- expect(di.umur0).toBeCloseTo(1.234);
450
- expect(di.umur).toBeCloseTo(1.234);
451
- });
452
- });
453
-
454
- test.each([
455
- {
456
- label: 'mur avec isolation inconnue et période isolation 1975',
457
- enumTypeIsolationId: 1,
458
- enumPeriodIsolationId: 3,
459
- enumPeriodeConstructionId: undefined,
460
- typeIsolationExpected: 3
461
- },
462
- {
463
- label: 'mur avec isolation inconnue et période construction 1975',
464
- enumTypeIsolationId: 1,
465
- enumPeriodIsolationId: undefined,
466
- enumPeriodeConstructionId: 6,
467
- typeIsolationExpected: 3
468
- },
469
- {
470
- label: 'mur avec isolation inconnue et période isolation 1974',
471
- enumTypeIsolationId: 1,
472
- enumPeriodIsolationId: 2,
473
- enumPeriodeConstructionId: undefined,
474
- typeIsolationExpected: 2
475
- },
476
- {
477
- label: 'mur avec isolation inconnue et période construction 1974',
478
- enumTypeIsolationId: 1,
479
- enumPeriodIsolationId: undefined,
480
- enumPeriodeConstructionId: 1,
481
- typeIsolationExpected: 2
482
- },
483
- {
484
- label: 'mur avec isolation iti+ite',
485
- enumTypeIsolationId: 6,
486
- enumPeriodIsolationId: 1,
487
- enumPeriodeConstructionId: undefined,
488
- typeIsolationExpected: 6
489
- }
490
- ])(
491
- "Récupération du type d'isolation pour $label",
492
- ({
493
- enumTypeIsolationId,
494
- enumPeriodIsolationId = undefined,
495
- enumPeriodeConstructionId = undefined,
496
- typeIsolationExpected
497
- }) => {
498
- /**
499
- * @type {MurDE}
500
- */
501
- let murDE = {
502
- enum_type_isolation_id: enumTypeIsolationId,
503
- enum_periode_isolation_id: enumPeriodIsolationId
504
- };
505
-
506
- /**
507
- * @type {Contexte}
508
- */
509
- const ctx = { enumPeriodeConstructionId };
510
-
511
- expect(service.typeIsolation(ctx, murDE)).toBe(typeIsolationExpected);
512
- }
513
- );
514
-
515
- describeIntegration("Test d'intégration de mur", () => {
516
- test.each(corpus)('vérification des DI des murs pour dpe %s', (ademeId) => {
517
- let dpeRequest = getAdemeFileJson(ademeId);
518
- dpeRequest = normalizerService.normalize(dpeRequest);
519
-
520
- /** @type {Contexte} */
521
- const ctx = contexteBuilder.fromDpe(dpeRequest);
522
-
523
- const murs = dpeRequest.logement.enveloppe.mur_collection?.mur || [];
524
-
525
- murs.forEach((m) => {
526
- // dans ces cas de figure, les données paroi_ancienne sont bien traitées
527
- if (['2187E0982013C', '2287E2336469P', '2387E0045247S'].includes(ademeId)) {
528
- m.donnee_entree.enduit_isolant_paroi_ancienne = m.donnee_entree.paroi_ancienne;
529
- }
530
- const di = service.execute(ctx, m.donnee_entree);
531
-
532
- if (m.donnee_intermediaire.umur0) {
533
- expect(di.umur0).toBeCloseTo(m.donnee_intermediaire.umur0, 2);
534
- } else {
535
- expect(di.umur0).toBeUndefined();
536
- }
537
- expect(di.umur).toBeCloseTo(m.donnee_intermediaire.umur, 2);
538
- expect(di.b).toBeCloseTo(m.donnee_intermediaire.b, 2);
539
- });
540
- });
541
- });
542
- });