@open3cl/engine 1.3.1 → 1.3.3

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.
@@ -3,78 +3,77 @@ import tvs from './tv.js';
3
3
  import { mois_liste } from './utils.js';
4
4
 
5
5
  export function calc_sse_j(bv_list, ets, ca, zc, mois) {
6
- const ssej = bv_list.reduce((acc, bv) => {
7
- const typeAdjacence = parseInt(bv.donnee_entree.enum_type_adjacence_id);
8
-
9
- /**
10
- * 6.3 Traitement des espaces tampons solarisés
11
- * 10 - 'espace tampon solarisé (véranda,loggia fermée)'
12
- */
13
- if (typeAdjacence === 10 && ets) {
14
- // Certaines vérandas sont dupliqués dans les DPE.
15
- if (Array.isArray(ets)) {
16
- ets = ets[0];
17
- }
18
-
19
- const bver = ets.donnee_intermediaire.bver;
20
- const T = ets.donnee_intermediaire.coef_transparence_ets;
21
-
6
+ const baiesAdjVeranda = bv_list.filter((bv) => bv.donnee_entree.enum_type_adjacence_id === '10');
7
+ const baiesAdjExt = bv_list.filter((bv) => bv.donnee_entree.enum_type_adjacence_id === '1');
8
+
9
+ if (!ets) {
10
+ return baiesAdjExt.reduce((acc, bv) => {
11
+ return acc + getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
12
+ }, 0);
13
+ }
14
+
15
+ // Certaines vérandas sont dupliqués dans les DPE.
16
+ if (Array.isArray(ets)) {
17
+ ets = ets[0];
18
+ }
19
+
20
+ const bver = ets.donnee_intermediaire.bver;
21
+ const T = ets.donnee_intermediaire.coef_transparence_ets;
22
+
23
+ /**
24
+ * Surface sud équivalente représentant les apports solaires indirects dans le logement
25
+ */
26
+ let baies = ets.baie_ets_collection.baie_ets;
27
+
28
+ if (!Array.isArray(baies)) {
29
+ baies = [baies];
30
+ }
31
+
32
+ /**
33
+ * Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement solaire
34
+ * traversant directement l’espace tampon pour arriver dans la partie habitable du logement
35
+ * Calculés pour les baies vitrées qui séparent le logement de l'espace tampon
36
+ * @type {number}
37
+ */
38
+ const Ssdj =
39
+ T *
40
+ baiesAdjVeranda.reduce((acc, bv) => {
22
41
  /**
23
42
  * Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement solaire
24
43
  * traversant directement l’espace tampon pour arriver dans la partie habitable du logement
25
44
  * Calculés pour les baies vitrées qui séparent le logement de l'espace tampon
26
45
  * @type {number}
27
46
  */
28
- const Ssdj = getBaiesSurEspaceTampon(bv_list).reduce((acc, bv) => {
29
- return acc + T * getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
30
- }, 0);
31
-
32
- /**
33
- * Surface sud équivalente représentant les apports solaires indirects dans le logement
34
- */
35
- let baies = ets.baie_ets_collection.baie_ets;
36
-
37
- if (!Array.isArray(baies)) {
38
- baies = [baies];
39
- }
40
-
41
- const Sstj = baies.reduce((acc, bv) => {
42
- return acc + getSsd(bv, zc, mois, 0.8 * T + 0.024);
43
- }, 0);
44
-
45
- /**
46
- * Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement
47
- * solaire entrant dans la partie habitable du logement après de multiples réflexions dans l’espace tampon solarisé
48
- * @type {number}
49
- */
50
- const Ssindj = Sstj - Ssdj;
51
-
52
- /**
53
- * Impact de l’espace tampon solarisé sur les apports solaires à travers les baies vitrées qui séparent le logement
54
- * de l'espace tampon
55
- * @type {number}
56
- */
57
- const SseVerandaj = Ssdj + Ssindj * bver;
58
-
59
- return acc + SseVerandaj;
60
- }
61
-
62
- // Pour les fenêtres qui ne donnent pas sur l'extérieur, pas de surface sud équivalente
63
- if (typeAdjacence !== 1) {
64
- return acc;
65
- }
47
+ return acc + getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
48
+ }, 0);
49
+
50
+ /**
51
+ * 6.3 Traitement des espaces tampons solarisés
52
+ * 10 - 'espace tampon solarisé (véranda,loggia fermée)'
53
+ */
54
+ const Sstj = baies.reduce((acc, bv) => {
55
+ return acc + getSsd(bv, zc, mois, 0.8 * T + 0.024);
56
+ }, 0);
66
57
 
58
+ /**
59
+ * Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement
60
+ * solaire entrant dans la partie habitable du logement après de multiples réflexions dans l’espace tampon solarisé
61
+ * @type {number}
62
+ */
63
+ const ssIndj = Sstj - Ssdj;
64
+
65
+ /**
66
+ * Impact de l’espace tampon solarisé sur les apports solaires à travers les baies vitrées qui séparent le logement
67
+ * de l'espace tampon
68
+ * @type {number}
69
+ */
70
+ const SseVerandaj = Ssdj + ssIndj * bver;
71
+
72
+ const sseBaiesExt = baiesAdjExt.reduce((acc, bv) => {
67
73
  return acc + getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
68
74
  }, 0);
69
- return ssej;
70
- }
71
75
 
72
- /**
73
- * Retourne la liste des baies vitrées qui donnent sur l'espace tampon solarisé
74
- * @param baiesVitrees {BaieVitreeItem[]}
75
- */
76
- function getBaiesSurEspaceTampon(baiesVitrees) {
77
- return baiesVitrees.filter((bv) => bv.donnee_entree.enum_type_adjacence_id === '10');
76
+ return sseBaiesExt + SseVerandaj;
78
77
  }
79
78
 
80
79
  /**
package/9_conso_ch.js CHANGED
@@ -81,9 +81,6 @@ export function conso_ch(
81
81
  const gen_lge_id = requestInputID(de, du, 'lien_generateur_emetteur');
82
82
  const coef = coef_ch(de.fch || 0.5)[cfg_ch][_pos] || 1;
83
83
 
84
- let conso_ch = 0;
85
- let conso_ch_dep;
86
-
87
84
  let em_filt;
88
85
 
89
86
  if (em_list.length === 1) {
@@ -115,31 +112,43 @@ export function conso_ch(
115
112
  );
116
113
  break;
117
114
  }
118
- default: {
119
- const hasMultipleEmetteur = em_filt.length > 1;
120
-
121
- const emetteur_eq = em_filt.reduce((acc, em) => {
122
- const int = calc_intermittence(GV, Sh, hsp, em.donnee_intermediaire.i0);
123
- const r_em = rendement_emission(em);
124
-
125
- /**
126
- * 9.1.3 Installation avec plusieurs émissions pour un même générateur
127
- * La part de la consommation traitée par chaque émetteur est proratisé par le ratio des surfaces habitables.
128
- * @type {number|number}
129
- */
130
- const ratio_s = hasMultipleEmetteur
131
- ? em.donnee_entree.surface_chauffee / de.surface_chauffee
132
- : 1;
133
-
134
- const Ich = 1 / r_em;
135
- return acc + ratio_s * int * Ich;
136
- }, 0);
137
-
138
- const Ich = emetteur_eq / di.rg;
139
- const Ich_dep = emetteur_eq / di.rg_dep;
140
- conso_ch = coef * Ich * bch;
141
- conso_ch_dep = coef * Ich_dep * bch_dep;
115
+ case 'convecteurs bi-jonction': {
116
+ // Installation individuelle
117
+ const coeffInd = coef_ch(de.fch)[cfg_ch][1];
118
+ const consoInd = calc_conso_ch_default(di, de, bch, bch_dep, coeffInd, em_filt, GV, Sh, hsp);
119
+
120
+ // Installation collective
121
+ const coeffColl = coef_ch(de.fch)[cfg_ch][0];
122
+ const consoColl = calc_conso_ch_default(
123
+ di,
124
+ de,
125
+ bch,
126
+ bch_dep,
127
+ coeffColl,
128
+ em_filt,
129
+ GV,
130
+ Sh,
131
+ hsp,
132
+ 1.03
133
+ );
134
+
135
+ di.conso_ch = consoInd.conso_ch + consoColl.conso_ch;
136
+ di.conso_ch_depensier = consoInd.conso_ch_dep + consoColl.conso_ch_dep;
142
137
 
138
+ break;
139
+ }
140
+ default: {
141
+ const { conso_ch, conso_ch_dep } = calc_conso_ch_default(
142
+ di,
143
+ de,
144
+ bch,
145
+ bch_dep,
146
+ coef,
147
+ em_filt,
148
+ GV,
149
+ Sh,
150
+ hsp
151
+ );
143
152
  di.conso_ch = conso_ch;
144
153
  di.conso_ch_depensier = conso_ch_dep;
145
154
  break;
@@ -147,6 +156,34 @@ export function conso_ch(
147
156
  }
148
157
  }
149
158
 
159
+ function calc_conso_ch_default(di, de, bch, bch_dep, coeff, em_filt, GV, Sh, hsp, i0) {
160
+ const hasMultipleEmetteur = em_filt.length > 1;
161
+
162
+ const emetteur_eq = em_filt.reduce((acc, em) => {
163
+ const int = calc_intermittence(GV, Sh, hsp, i0 ? i0 : em.donnee_intermediaire.i0);
164
+ const r_em = rendement_emission(em);
165
+
166
+ /**
167
+ * 9.1.3 Installation avec plusieurs émissions pour un même générateur
168
+ * La part de la consommation traitée par chaque émetteur est proratisé par le ratio des surfaces habitables.
169
+ * @type {number|number}
170
+ */
171
+ const ratio_s = hasMultipleEmetteur
172
+ ? em.donnee_entree.surface_chauffee / de.surface_chauffee
173
+ : 1;
174
+
175
+ const Ich = 1 / r_em;
176
+ return acc + ratio_s * int * Ich;
177
+ }, 0);
178
+
179
+ const Ich = emetteur_eq / di.rg;
180
+ const Ich_dep = emetteur_eq / di.rg_dep;
181
+ const conso_ch = coeff * Ich * bch;
182
+ const conso_ch_dep = coeff * Ich_dep * bch_dep;
183
+
184
+ return { conso_ch, conso_ch_dep };
185
+ }
186
+
150
187
  /**
151
188
  * 9.8 Installation de chauffage collectif avec base + appoint
152
189
  */
package/README.md CHANGED
@@ -110,10 +110,11 @@ const result = calcul_3cl(dpeData);
110
110
 
111
111
  ## Variables d'environnements
112
112
 
113
- | Nom | Description |
114
- | ----------------------- | ----------------------------------- |
115
- | ADEME_API_CLIENT_ID | Client id pour l'api de l'ademe |
116
- | ADEME_API_CLIENT_SECRET | Client secret pour l'api de l'ademe |
113
+ | Nom | Description |
114
+ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------- |
115
+ | ADEME_API_CLIENT_ID | Client id pour l'api de l'ademe |
116
+ | ADEME_API_CLIENT_SECRET | Client secret pour l'api de l'ademe |
117
+ | DPE_FOLDER_PATH | Chemin vers lequel sont stockés les fichiers DPE (si non précisé, utiliser `dpes-folder-path` dans la ligne de commande |
117
118
 
118
119
  Attention aux quotas sur l'api:
119
120
 
@@ -178,10 +179,15 @@ Résultats des tests de corpus avec le mode de compatibilité activé.
178
179
  | 1.2.8 | dpe_immeuble_chauffage_collectif.csv | 5% | 10000 | 5747 (+468) | 57% (+4%) | |
179
180
  | 1.2.8 | dpe_immeuble_chauffage_mixte.csv | 5% | 10000 | 3142 (+414) | 31% (+4%) | |
180
181
  | ------------------ | -------------------------------------- | -------------- | --------------------- | -------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------- |
181
- | 1.3.1 | corpus_dpe.csv | 5% | 9980 | 4508 (+19) | 45% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=corpus_dpe.csv) |
182
- | 1.3.1 | dpe_immeuble_chauffage_individuel.csv | 5% | 9998 | 5459 (+184) | 55% (+2%) | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_individuel.csv) |
183
- | 1.3.1 | dpe_immeuble_chauffage_collectif.csv | 5% | 10000 | 5848 (+101) | 58% (+1%) | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_collectif.csv) |
184
- | 1.3.1 | dpe_immeuble_chauffage_mixte.csv | 5% | 10000 | 4018 (+876) | 40% (+9%) | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_mixte.csv) |
182
+ | 1.3.1 | corpus_dpe.csv | 5% | 9980 | 4508 (+19) | 45% | |
183
+ | 1.3.1 | dpe_immeuble_chauffage_individuel.csv | 5% | 9998 | 5459 (+184) | 55% (+2%) | |
184
+ | 1.3.1 | dpe_immeuble_chauffage_collectif.csv | 5% | 10000 | 5848 (+101) | 58% (+1%) | |
185
+ | 1.3.1 | dpe_immeuble_chauffage_mixte.csv | 5% | 10000 | 4018 (+876) | 40% (+9%) | |
186
+ | ------------------ | -------------------------------------- | -------------- | --------------------- | -------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------- |
187
+ | 1.3.2 | corpus_dpe.csv | 5% | 9980 | 4519 (+11) | 45% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=corpus_dpe.csv) |
188
+ | 1.3.2 | dpe_immeuble_chauffage_individuel.csv | 5% | 9998 | 5476 (+17) | 55% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_individuel.csv) |
189
+ | 1.3.2 | dpe_immeuble_chauffage_collectif.csv | 5% | 10000 | 5869 (+21) | 58% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_collectif.csv) |
190
+ | 1.3.2 | dpe_immeuble_chauffage_mixte.csv | 5% | 10000 | 4040 (+22) | 40% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_mixte.csv) |
185
191
 
186
192
  ## Roadmap
187
193
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open3cl/engine",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Open Source 3CL-DPE engine",
5
5
  "main": "index.js",
6
6
  "directories": {
@@ -15,6 +15,10 @@
15
15
  "test": "vitest run",
16
16
  "test:ci": "vitest run --coverage",
17
17
  "test:corpus": "node test/corpus/run_corpus_checks.js",
18
+ "test:corpus:ch-ind": "node test/corpus/run_corpus_checks.js --corpus-file-path=test/corpus/dpe_immeuble_chauffage_individuel.csv",
19
+ "test:corpus:ch-col": "node test/corpus/run_corpus_checks.js --corpus-file-path=test/corpus/dpe_immeuble_chauffage_collectif.csv",
20
+ "test:corpus:ch-mix": "node test/corpus/run_corpus_checks.js --corpus-file-path=test/corpus/dpe_immeuble_chauffage_mixte.csv",
21
+ "test:corpus:all": "npm run test:corpus && npm run test:corpus:ch-ind && npm run test:corpus:ch-col && npm run test:corpus:ch-mix",
18
22
  "qa:lint": "eslint .",
19
23
  "qa:lint:fix": "npm run qa:lint -- --fix",
20
24
  "qa:duplication": "jscpd",