@open3cl/engine 1.1.2 → 1.2.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.
@@ -36,7 +36,7 @@ export class ProductionENR {
36
36
  conso_elec_ac_autre_usage: 0
37
37
  };
38
38
 
39
- if (productionElecEnr && productionElecEnr.donnee_entree.presence_production_pv === 1) {
39
+ if (productionElecEnr && productionElecEnr.donnee_entree?.presence_production_pv === 1) {
40
40
  // Calcul de l'électricité auto-consommée pour chaque enveloppe
41
41
  this.calculateConsoElecAc(productionElectricite, productionElecEnr, conso, zc_id, th, Sh);
42
42
 
package/3.2.1_mur.js CHANGED
@@ -320,8 +320,8 @@ function checkDoublageWithMinUmur0(type_doublage, di, de, umur0_avant, umur_avan
320
320
  }
321
321
 
322
322
  if (
323
- umur0_avant.toFixed(3) === umur0Doublage.toFixed(3) ||
324
- umur_avant.toFixed(3) === umur0Doublage.toFixed(3)
323
+ umur0_avant?.toFixed(3) === umur0Doublage?.toFixed(3) ||
324
+ umur_avant?.toFixed(3) === umur0Doublage?.toFixed(3)
325
325
  ) {
326
326
  console.error(`
327
327
  Le calcul Umur0 pour le mur ${de.description} utilise Umur0 minoré à 2.5 pour l'application du doublage alors qu'il est de ${di.umur0}.
@@ -138,7 +138,7 @@ export default function calc_pb(pb, zc, pc_id, effetJoule, pb_list) {
138
138
  const de = pb.donnee_entree;
139
139
  const du = {};
140
140
  const di = {};
141
- di.upb0 = pb.donnee_intermediaire.upb0;
141
+ di.upb0 = pb.donnee_intermediaire?.upb0;
142
142
 
143
143
  b(di, de, du, zc);
144
144
 
@@ -96,7 +96,7 @@ export default function calc_ph(ph, zc, pc_id, effetJoule) {
96
96
  const de = ph.donnee_entree;
97
97
  const du = {};
98
98
  const di = {};
99
- di.uph0 = ph.donnee_intermediaire.uph0;
99
+ di.uph0 = ph.donnee_intermediaire?.uph0;
100
100
 
101
101
  b(di, de, du, zc);
102
102
 
package/3_deperdition.js CHANGED
@@ -106,8 +106,8 @@ function verifyMursEquality(calculatedMurs, declaredMurs) {
106
106
  const uMurForDeclaredMurs = declaredMurs.map(
107
107
  (declaredMur) =>
108
108
  declaredMur.donnee_entree.surface_paroi_opaque *
109
- declaredMur.donnee_intermediaire.umur *
110
- declaredMur.donnee_intermediaire.b
109
+ declaredMur.donnee_intermediaire?.umur *
110
+ declaredMur.donnee_intermediaire?.b
111
111
  );
112
112
 
113
113
  return (
@@ -124,6 +124,15 @@ function verifyMursEquality(calculatedMurs, declaredMurs) {
124
124
  * @return {number}
125
125
  */
126
126
  function totalDeperditionPontThermique(dpe, calculatedPontsThermiques, declaredPontsThermiques) {
127
+ const calculatedDeperditionPT = calculatedPontsThermiques.reduce(
128
+ (acc, pt) => acc + Upt(pt) || 0,
129
+ 0
130
+ );
131
+
132
+ if (!dpe.logement.sortie?.deperdition?.deperdition_pont_thermique) {
133
+ return calculatedDeperditionPT;
134
+ }
135
+
127
136
  // Total déclaré des déperditions des ponts thermiques
128
137
  const declaredDeperditionPT = dpe.logement.sortie.deperdition.deperdition_pont_thermique;
129
138
 
@@ -136,11 +145,6 @@ function totalDeperditionPontThermique(dpe, calculatedPontsThermiques, declaredP
136
145
  declaredPontsThermiques
137
146
  );
138
147
 
139
- const calculatedDeperditionPT = calculatedPontsThermiques.reduce(
140
- (acc, pt) => acc + Upt(pt) || 0,
141
- 0
142
- );
143
-
144
148
  /**
145
149
  * Si individuellement les ponts thermiques déclarés et calculés sont identiques, la déperdition totale devrait l'être également
146
150
  * Pour certains DPE, il réside une différence que l'on prendra en compte pour la suite des calculs.
@@ -164,7 +168,7 @@ function totalDeperditionPontThermique(dpe, calculatedPontsThermiques, declaredP
164
168
  */
165
169
  function totalDeperditionMurs(dpe, calculatedMurs, declaredMurs) {
166
170
  // Total déclaré des déperditions des murs
167
- const declaredDeperditionMurs = dpe.logement.sortie.deperdition.deperdition_mur;
171
+ const declaredDeperditionMurs = dpe.logement.sortie?.deperdition?.deperdition_mur;
168
172
 
169
173
  /**
170
174
  * Comparaison des valeurs intermédiaires calculées et déclarées pour chacun des murs
@@ -95,7 +95,7 @@ function getSsd(bv, zc, mois, coeff) {
95
95
  const orientation = enums.orientation[de.enum_orientation_id];
96
96
  const inclinaison = enums.inclinaison_vitrage[de.enum_inclinaison_vitrage_id ?? 3];
97
97
  let oi = `${orientation} ${inclinaison}`;
98
- if (inclinaison === 'horizontal') oi = 'horizontal';
98
+ if (orientation === 'horizontal' || inclinaison === 'horizontal') oi = 'horizontal';
99
99
  const c1j = c1[zc][mois][oi];
100
100
 
101
101
  const fe1 = di.fe1 ?? 1;
package/conso.js CHANGED
@@ -295,7 +295,7 @@ export default function calc_conso(
295
295
  return ret;
296
296
  }
297
297
 
298
- function classe_bilan_dpe(ep_conso_5_usages_m2, zc_id, ca_id, Sh) {
298
+ export function classe_bilan_dpe(ep_conso_5_usages_m2, zc_id, ca_id, Sh) {
299
299
  const ca = enums.classe_altitude[ca_id];
300
300
 
301
301
  const cut = tvs.dpe_class_limit[ca][Math.round(Sh)] ?? [];
@@ -318,7 +318,7 @@ function classe_bilan_dpe(ep_conso_5_usages_m2, zc_id, ca_id, Sh) {
318
318
  return 'G';
319
319
  }
320
320
 
321
- function classe_emission_ges(emission_ges_5_usages_m2, zc_id, ca_id, Sh) {
321
+ export function classe_emission_ges(emission_ges_5_usages_m2, zc_id, ca_id, Sh) {
322
322
  const ca = enums.classe_altitude[ca_id];
323
323
 
324
324
  const cut = tvs.ges_class_limit[ca][Math.round(Sh)] ?? [];
package/engine.js CHANGED
@@ -7,7 +7,7 @@ import calc_besoin_ch from './9_besoin_ch.js';
7
7
  import calc_chauffage, { tauxChargeForGenerator } from './9_chauffage.js';
8
8
  import calc_confort_ete from './2021_04_13_confort_ete.js';
9
9
  import calc_qualite_isolation from './2021_04_13_qualite_isolation.js';
10
- import calc_conso from './conso.js';
10
+ import calc_conso, { classe_bilan_dpe, classe_emission_ges } from './conso.js';
11
11
  import {
12
12
  add_references,
13
13
  bug_for_bug_compat,
@@ -492,3 +492,29 @@ export function calcul_3cl(dpe) {
492
492
 
493
493
  return dpe;
494
494
  }
495
+
496
+ /**
497
+ * Retourne les classes calculées ges dpe.
498
+ * @param dpe {FullDpe}
499
+ * @returns {{dpeClass: string, gesClass: string}}
500
+ */
501
+ export function get_classe_ges_dpe(dpe) {
502
+ const zc_id = dpe.logement.meteo.enum_zone_climatique_id;
503
+ const ca_id = dpe.logement.meteo.enum_classe_altitude_id;
504
+ const th = calc_th(dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id);
505
+
506
+ let Sh;
507
+ if (th === 'maison' || th === 'appartement')
508
+ Sh = dpe.logement.caracteristique_generale.surface_habitable_logement;
509
+ else if (th === 'immeuble') Sh = dpe.logement.caracteristique_generale.surface_habitable_immeuble;
510
+
511
+ return {
512
+ dpeClass: classe_bilan_dpe(dpe.logement.sortie.ep_conso.ep_conso_5_usages_m2, zc_id, ca_id, Sh),
513
+ gesClass: classe_emission_ges(
514
+ dpe.logement.sortie.emission_ges.emission_ges_5_usages_m2,
515
+ zc_id,
516
+ ca_id,
517
+ Sh
518
+ )
519
+ };
520
+ }
package/ficheTechnique.js CHANGED
@@ -16,7 +16,7 @@ export default function getFicheTechnique(
16
16
  field = 'description'
17
17
  ) {
18
18
  /** @type {FicheTechniqueItem[]} */
19
- let fichesTechniques = dpe.fiche_technique_collection.fiche_technique;
19
+ let fichesTechniques = dpe.fiche_technique_collection?.fiche_technique || [];
20
20
 
21
21
  if (!Array.isArray(fichesTechniques)) {
22
22
  fichesTechniques = [fichesTechniques];
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { calcul_3cl } from './engine.js';
2
- export { calcul_3cl };
1
+ import { calcul_3cl, get_classe_ges_dpe } from './engine.js';
2
+ export { calcul_3cl, get_classe_ges_dpe };
3
3
  import { Umur, Uph, Upb, Uporte, Ubv, Upt } from './3_deperdition.js';
4
4
  export { Umur, Uph, Upb, Uporte, Ubv, Upt };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open3cl/engine",
3
- "version": "1.1.2",
3
+ "version": "1.2.1",
4
4
  "description": "Open Source 3CL-DPE engine",
5
5
  "main": "index.js",
6
6
  "directories": {