@open3cl/engine 1.0.12 → 1.0.14

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 (34) hide show
  1. package/13.2_generateur_combustion_ch.js +1 -1
  2. package/features/dpe/domain/models/dpe.model.ts +9 -0
  3. package/features/dpe/domain/models/installation-chauffage.model.ts +26 -2
  4. package/features/dpe/domain/models/type-generateur.model.js +8 -0
  5. package/features/dpe/infrastructure/ch/chTv.store.js +94 -0
  6. package/features/dpe/infrastructure/ch/chTv.store.spec.js +99 -0
  7. package/features/dpe/infrastructure/ecs/ecsTv.store.js +5 -3
  8. package/features/dpe/infrastructure/ecs/ecsTv.store.spec.js +4 -0
  9. package/features/dpe/infrastructure/froid/frTv.store.js +4 -2
  10. package/features/dpe/infrastructure/tv.store.js +28 -0
  11. package/features/dpe/infrastructure/tv.store.spec.js +12 -0
  12. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.js +57 -3
  13. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.spec.js +117 -2
  14. package/features/engine/domain/apport_et_besoin/apport_gratuit/apport-gratuit.service.js +18 -2
  15. package/features/engine/domain/apport_et_besoin/apport_gratuit/apport-gratuit.service.spec.js +13 -2
  16. package/features/engine/domain/apport_et_besoin/ch/besoin-ch.service.js +150 -0
  17. package/features/engine/domain/apport_et_besoin/ch/besoin-ch.service.spec.js +145 -0
  18. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.js +168 -0
  19. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +313 -0
  20. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.js +12 -8
  21. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.spec.js +28 -13
  22. package/features/engine/domain/ch/emetteur-ch.service.js +100 -0
  23. package/features/engine/domain/ch/emetteur-ch.service.spec.js +78 -0
  24. package/features/engine/domain/ch/generateur-ch.service.js +365 -0
  25. package/features/engine/domain/ch/generateur-ch.service.spec.js +734 -0
  26. package/features/engine/domain/ch/installation-ch.service.js +39 -0
  27. package/features/engine/domain/ch/installation-ch.service.spec.js +41 -0
  28. package/features/engine/domain/contexte.builder.js +1 -0
  29. package/features/engine/domain/contexte.builder.spec.js +2 -0
  30. package/features/engine/domain/ecs/generateur-ecs.service.js +2 -2
  31. package/features/engine/domain/ecs/installation-ecs.service.js +5 -5
  32. package/features/engine/domain/engine.service.js +13 -2
  33. package/features/engine/domain/models/contexte.model.ts +1 -0
  34. package/package.json +1 -1
@@ -0,0 +1,39 @@
1
+ import { inject } from 'dioma';
2
+ import { GenerateurChService } from './generateur-ch.service.js';
3
+
4
+ /**
5
+ * Calcul des installations de chauffage
6
+ *
7
+ * @see Méthode de calcul 3CL-DPE 2021 (cotobre 2021) chapitre 3
8
+ */
9
+ export class InstallationChService {
10
+ /**
11
+ * @type {GenerateurChService}
12
+ */
13
+ #generateurChService;
14
+
15
+ /**
16
+ * @param generateurChService {GenerateurChService}
17
+ */
18
+ constructor(generateurChService = inject(GenerateurChService)) {
19
+ this.#generateurChService = generateurChService;
20
+ }
21
+
22
+ /**
23
+ * Détermination des données des installations de chauffage
24
+ *
25
+ * @param ctx {Contexte}
26
+ * @param logement {Logement}
27
+ */
28
+ execute(ctx, logement) {
29
+ const installationsChauffage =
30
+ logement.installation_chauffage_collection?.installation_chauffage || [];
31
+
32
+ installationsChauffage.forEach((installationChauffage) => {
33
+ /**
34
+ * Calcul des données nécessaires au calcul pour chaque générateur (qp0)
35
+ */
36
+ this.#generateurChService.execute(ctx, logement, installationChauffage);
37
+ });
38
+ }
39
+ }
@@ -0,0 +1,41 @@
1
+ import { beforeEach, describe, expect, test, vi } from 'vitest';
2
+ import { InstallationChService } from './installation-ch.service.js';
3
+ import { GenerateurChService } from './generateur-ch.service.js';
4
+
5
+ /** @type {InstallationChService} **/
6
+ let service;
7
+
8
+ /** @type {GenerateurChService} **/
9
+ let generateurChService;
10
+
11
+ describe('Calcul des installations de chauffage', () => {
12
+ beforeEach(() => {
13
+ generateurChService = new GenerateurChService();
14
+ service = new InstallationChService(generateurChService);
15
+ });
16
+
17
+ test('Calcul des données des générateurs de chaque installation de chauffage', () => {
18
+ vi.spyOn(generateurChService, 'execute').mockReturnThis();
19
+
20
+ /** @type {InstallationChauffage} */
21
+ const installationCh = {
22
+ donnee_entree: { enum_type_installation_id: 1 },
23
+ generateur_chauffage_collection: {
24
+ generateur_chauffage: [{ donnee_entree: { position_volume_chauffe_stockage: 1 } }]
25
+ }
26
+ };
27
+
28
+ /** @type {Logement} */
29
+ const logement = {
30
+ installation_chauffage_collection: { installation_chauffage: [installationCh] }
31
+ };
32
+
33
+ /** @type {Contexte} */
34
+ const ctx = {
35
+ zoneClimatique: { id: 1 }
36
+ };
37
+
38
+ service.execute(ctx, logement);
39
+ expect(generateurChService.execute).toHaveBeenCalledWith(ctx, logement, installationCh);
40
+ });
41
+ });
@@ -36,6 +36,7 @@ export class ContexteBuilder {
36
36
  typeHabitation: this.#getTypeHabitation(caracteristiqueGenerale),
37
37
  typeDpe: typeDpe,
38
38
  enumPeriodeConstructionId: caracteristiqueGenerale.enum_periode_construction_id?.toString(),
39
+ anneeConstruction: parseInt(caracteristiqueGenerale.annee_construction),
39
40
  effetJoule: this.#hasEffetJoule(dpe),
40
41
  surfaceHabitable: surfaceHabitable,
41
42
  hauteurSousPlafond: caracteristiqueGenerale.hsp,
@@ -106,6 +106,7 @@ describe('Generateur du contexte du calcul', () => {
106
106
  enum_classe_altitude_id: 2
107
107
  },
108
108
  caracteristique_generale: {
109
+ annee_construction: 2005,
109
110
  enum_periode_construction_id: 4,
110
111
  surface_habitable_logement: 48.9,
111
112
  surface_habitable_immeuble: 105,
@@ -120,6 +121,7 @@ describe('Generateur du contexte du calcul', () => {
120
121
  surfaceHabitable: dpe.logement.caracteristique_generale.surface_habitable_logement,
121
122
  typeHabitation: TypeHabitation.MAISON,
122
123
  typeDpe: TypeDpe.MAISON,
124
+ anneeConstruction: 2005,
123
125
  enumPeriodeConstructionId: '4',
124
126
  hauteurSousPlafond: 2.8,
125
127
  nombreAppartement: 18,
@@ -21,12 +21,12 @@ export class GenerateurEcsService {
21
21
  }
22
22
 
23
23
  /**
24
- * Détermination des apports et besoins pour le bien concerné
24
+ * Détermination des données de calcul pour une installation ECS
25
25
  *
26
26
  * @param installationEcs {InstallationEcs}
27
27
  */
28
28
  execute(installationEcs) {
29
- const generateursEcs = installationEcs.generateur_ecs_collection.generateur_ecs || [];
29
+ const generateursEcs = installationEcs.generateur_ecs_collection?.generateur_ecs || [];
30
30
 
31
31
  generateursEcs.forEach((generateurEcs) => {
32
32
  /** @type {GenerateurEcsDE}*/
@@ -58,8 +58,8 @@ export class InstallationEcsService {
58
58
  */
59
59
  this.pertesDistributionStockageEcsInstallation(
60
60
  installationEcs,
61
- besoinEcsInstallation,
62
- besoinEcsDepensierInstallation
61
+ besoinEcsInstallation * 1000,
62
+ besoinEcsDepensierInstallation * 1000
63
63
  );
64
64
  });
65
65
  }
@@ -73,7 +73,7 @@ export class InstallationEcsService {
73
73
  }
74
74
 
75
75
  /**
76
- * Return le besoin rationalisé de l'installation par rapport au besoin glbal du logement
76
+ * Return le besoin rationalisé de l'installation par rapport au besoin global du logement
77
77
  *
78
78
  * @param ctx {Contexte}
79
79
  * @param installationEcs {InstallationEcs}
@@ -109,8 +109,8 @@ export class InstallationEcsService {
109
109
  * Qgw: pertes brutes annuelles de stockage (Wh)
110
110
  *
111
111
  * @param installationEcs {InstallationEcs}
112
- * @param besoinEcsInstallation {number}
113
- * @param besoinEcsDepensierInstallation {number}
112
+ * @param besoinEcsInstallation {number} // en Wh
113
+ * @param besoinEcsDepensierInstallation {number} // en Wh
114
114
  */
115
115
  pertesDistributionStockageEcsInstallation(
116
116
  installationEcs,
@@ -58,6 +58,14 @@ export class EngineService {
58
58
  confort_ete: undefined,
59
59
  qualite_isolation: undefined
60
60
  };
61
+ proceededDpe.logement.donnees_de_calcul = {
62
+ apportsInterne: [],
63
+ apportsInterneDepensier: [],
64
+ apportsInterneCh: [],
65
+ apportsSolaire: [],
66
+ besoinChauffageHP: [],
67
+ besoinChauffageDepensierHP: []
68
+ };
61
69
  const ctx = this.#contextBuilder.fromDpe(proceededDpe);
62
70
 
63
71
  // Calcul de l'inertie
@@ -101,6 +109,8 @@ export class EngineService {
101
109
 
102
110
  // Calcul du DPE dans le collectif
103
111
 
112
+ delete proceededDpe.logement.donnees_de_calcul;
113
+
104
114
  return proceededDpe;
105
115
  }
106
116
 
@@ -142,9 +152,10 @@ export class EngineService {
142
152
  m.emetteur_chauffage_collection.emetteur_chauffage?.map((n) => {
143
153
  delete n.donnee_intermediaire;
144
154
  });
145
- m.generateur_chauffage_collection.generateur_chauffage?.map((n) => {
155
+ // @todo calculer les données intermédiaires (notamment pn et qp0)
156
+ /*m.generateur_chauffage_collection.generateur_chauffage?.map((n) => {
146
157
  delete n.donnee_intermediaire;
147
- });
158
+ });*/
148
159
  delete m.donnee_intermediaire;
149
160
  });
150
161
  delete dpe.logement.production_elec_enr?.donnee_intermediaire;
@@ -4,6 +4,7 @@ export interface Contexte {
4
4
  typeHabitation: TypeHabitation;
5
5
  typeDpe: TypeDpe;
6
6
  enumPeriodeConstructionId: number;
7
+ anneeConstruction: number;
7
8
  surfaceHabitable: number;
8
9
  hauteurSousPlafond: number;
9
10
  nombreAppartement: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open3cl/engine",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "Open Source 3CL-DPE engine",
5
5
  "main": "index.js",
6
6
  "directories": {