@open3cl/engine 1.2.3 → 1.2.5
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.
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</a>
|
|
13
13
|
|
|
14
14
|
<h3 align="center">Open3CL</h3>
|
|
15
|
-
|
|
15
|
+
Implémentation open source du moteur Open3CL de l'ADEME.
|
|
16
16
|
<p align="center">
|
|
17
17
|
|
|
18
18
|
![Javascript][Javascript]
|
|
@@ -50,8 +50,12 @@
|
|
|
50
50
|
|
|
51
51
|
## A propos du projet
|
|
52
52
|
|
|
53
|
-
Open3CL est une librairie JavaScript open source, spécialement conçue pour faciliter le calcul des Diagnostics de
|
|
54
|
-
|
|
53
|
+
Open3CL est une librairie JavaScript open source, spécialement conçue pour faciliter le calcul des Diagnostics de
|
|
54
|
+
Performance Énergétique (DPE).
|
|
55
|
+
Elle implémente la norme définie
|
|
56
|
+
dans [l'annexe 1 de l'arrêté du 31 mars 2021](https://rt-re-batiment.developpement-durable.gouv.fr/IMG/pdf/consolide_annexe_1_arrete_du_31_03_2021_relatif_aux_methodes_et_procedures_applicables.pdf).
|
|
57
|
+
Elle est destinée aux développeurs qui souhaitent intégrer des calculs énergétiques précis et conformes à la
|
|
58
|
+
réglementation dans leurs applications.
|
|
55
59
|
|
|
56
60
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
57
61
|
|
|
@@ -104,11 +108,67 @@ const dpeData = {
|
|
|
104
108
|
const result = calcul_3cl(dpeData);
|
|
105
109
|
```
|
|
106
110
|
|
|
111
|
+
## Variables d'environnements
|
|
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 |
|
|
117
|
+
| CORPUS_DPES_FILE_PATH | Chemin vers le dossier contenant tous les DPES téléchargés |
|
|
118
|
+
|
|
119
|
+
Attention aux quotas sur l'api:
|
|
120
|
+
|
|
121
|
+
- 100 requêtes / seconde
|
|
122
|
+
- 1000 requêtes / minute
|
|
123
|
+
- 10000 requêtes / jour
|
|
124
|
+
|
|
107
125
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
108
126
|
|
|
109
|
-
##
|
|
127
|
+
## Lancement des tests sur des corpus de DPE
|
|
128
|
+
|
|
129
|
+
Les tests de corpus consistent à analyser une liste de numéro de DPE présent dans un fichier CSV.
|
|
130
|
+
Pour chaque DPE, le fichier est téléchargé si pas déjà présent en local, et il est envoyé à la librairie Open3CL.
|
|
131
|
+
On analyse en sortie de la lib certaines valeurs que l'on compare aux valeurs du DPE initial. Le seuil de tolérance est
|
|
132
|
+
fixé par défaut à 5%.
|
|
133
|
+
La liste des valeurs analysées est la suivante:
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
deperdition_mur,
|
|
137
|
+
deperdition_baie_vitree,
|
|
138
|
+
deperdition_plancher_bas,
|
|
139
|
+
deperdition_plancher_haut,
|
|
140
|
+
deperdition_porte,
|
|
141
|
+
deperdition_renouvellement_air,
|
|
142
|
+
hperm,
|
|
143
|
+
deperdition_pont_thermique,
|
|
144
|
+
surface_sud_equivalente,
|
|
145
|
+
besoin_ecs,
|
|
146
|
+
besoin_ch,
|
|
147
|
+
conso_auxiliaire_distribution_ecs,
|
|
148
|
+
conso_auxiliaire_generation_ch,
|
|
149
|
+
conso_auxiliaire_generation_ecs,
|
|
150
|
+
conso_ecs,
|
|
151
|
+
conso_ch,
|
|
152
|
+
conso_auxiliaire_distribution_ch,
|
|
153
|
+
conso_auxiliaire_ventilation,
|
|
154
|
+
ep_conso_5_usages,
|
|
155
|
+
ep_conso_5_usages_m2,
|
|
156
|
+
emission_ges_5_usages,
|
|
157
|
+
emission_ges_5_usages_m2;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
- `npm run test:corpus`. Va générer 2 rapports de sortie au format csv (détaillé) et json (global)
|
|
161
|
+
- `npm run test:corpus -- corpus-file-path=corpus.csv`. Chemin relatif vers le fichier de corpus à analyser
|
|
162
|
+
Par défaut, le corpus utilisé est présent ici : [test/corpus/corpus_dpe.csv](test/corpus/corpus_dpe.csv)
|
|
163
|
+
- `npm run test:corpus -- dpes-folder-path=/home/user/dpes`. Chemin vers le dossier où les DPE seront téléchargés. Si un
|
|
164
|
+
fichier DPE est déjà présent dans ce dossier, il ne sera pas retéléchargé.
|
|
165
|
+
|
|
166
|
+
### Résultats corpus
|
|
110
167
|
|
|
111
|
-
|
|
168
|
+
| Version librairie | corpus | Taux d'erreur | Nb de DPES analysés | Nb en dessous tu taux d'erreur | Taux de réussite | Détail des valeurs |
|
|
169
|
+
| :---------------- | :------------------------------------ | :------------ | ------------------- | ------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
170
|
+
| 1.2.3 | corpus_dpe.csv | 5% | 9980 | 4489 | 45% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=corpus_dpe.csv) |
|
|
171
|
+
| 1.2.3 | dpe_immeuble_chauffage_individuel.csv | 5% | 9998 | 3257 | 32% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_individuel.csv) |
|
|
112
172
|
|
|
113
173
|
## Roadmap
|
|
114
174
|
|
|
@@ -120,7 +180,8 @@ Lister ici les rapports de tests avec stats sur le CORPUS DPE.
|
|
|
120
180
|
- [ ] DPE à l'immeuble
|
|
121
181
|
- [ ] Photovoltaïque
|
|
122
182
|
|
|
123
|
-
Voir la liste des [issues](https://github.com/Open3CL/engine/issues) pour avoir le détail complet des bugs et
|
|
183
|
+
Voir la liste des [issues](https://github.com/Open3CL/engine/issues) pour avoir le détail complet des bugs et
|
|
184
|
+
fonctionnalités en cours de réalisation.
|
|
124
185
|
|
|
125
186
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
126
187
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { parse } from 'fast-csv';
|
|
2
|
+
|
|
3
|
+
export default class CsvParserStore {
|
|
4
|
+
/**
|
|
5
|
+
* @param stream {ReadStream}
|
|
6
|
+
* @param opts {import('fast-csv').ParserOptionsArgs}
|
|
7
|
+
* @param transform {import('fast-csv').RowTransformFunction}
|
|
8
|
+
* @return Promise<object[]>
|
|
9
|
+
*/
|
|
10
|
+
parseFromStream(stream, opts, transform) {
|
|
11
|
+
const rows = [];
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
stream
|
|
14
|
+
.pipe(parse(opts).transform(transform))
|
|
15
|
+
.on('error', (error) => reject(error))
|
|
16
|
+
.on('data', (row) => rows.push(row))
|
|
17
|
+
.on('end', () => resolve(rows));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import CsvParserStore from './csv-parser.store.js';
|
|
3
|
+
import { createReadStream } from 'node:fs';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
|
|
6
|
+
describe('CsvParserStore', () => {
|
|
7
|
+
/** @type {CsvParserStore} **/
|
|
8
|
+
let store;
|
|
9
|
+
|
|
10
|
+
/** @type {ReadStream} **/
|
|
11
|
+
let stream;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
store = new CsvParserStore();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
describe('parseFromStream', () => {
|
|
18
|
+
it('should parse a csv file from a stream', () => {
|
|
19
|
+
stream = createReadStream(resolve('test/corpus/corpus_dpe.csv'));
|
|
20
|
+
|
|
21
|
+
return store
|
|
22
|
+
.parseFromStream(stream, {}, (data) => data)
|
|
23
|
+
.then((data) => {
|
|
24
|
+
expect(data).toBeDefined();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
package/engine.js
CHANGED
|
@@ -499,6 +499,9 @@ export function calcul_3cl(dpe) {
|
|
|
499
499
|
...conso
|
|
500
500
|
};
|
|
501
501
|
|
|
502
|
+
const conso_coeff_1_9 = get_conso_coeff_1_9_2026(dpe);
|
|
503
|
+
logement.sortie.ep_conso = { ...logement.sortie.ep_conso, ...conso_coeff_1_9 };
|
|
504
|
+
|
|
502
505
|
return dpe;
|
|
503
506
|
}
|
|
504
507
|
|
|
@@ -527,3 +530,35 @@ export function get_classe_ges_dpe(dpe) {
|
|
|
527
530
|
)
|
|
528
531
|
};
|
|
529
532
|
}
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Calcul de la nouvelle conso suite à la modification du coefficient pour le chauffage électrique
|
|
536
|
+
* Applicable uniquement à partir de janvier 2026
|
|
537
|
+
*
|
|
538
|
+
* {@link https://www.ecologie.gouv.fr/actualites/evolutions-du-calcul-du-dpe-reponses-vos-questions#:~:text=Les%20DPE%20r%C3%A9alis%C3%A9s%20avant%20le,%2DAudit%20de%20l'Ademe.}
|
|
539
|
+
*
|
|
540
|
+
* @param dpe {FullDpe}
|
|
541
|
+
* @returns {{ep_conso_5_usages_2026: number; ep_conso_5_usages_2026_m2: number; classe_bilan_dpe_2026: string}}
|
|
542
|
+
*/
|
|
543
|
+
export function get_conso_coeff_1_9_2026(dpe) {
|
|
544
|
+
const zc_id = dpe.logement.meteo.enum_zone_climatique_id;
|
|
545
|
+
const ca_id = dpe.logement.meteo.enum_classe_altitude_id;
|
|
546
|
+
const th = calc_th(dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id);
|
|
547
|
+
|
|
548
|
+
const ep_conso_5_usages_2026 =
|
|
549
|
+
(0.9 / 1.3) *
|
|
550
|
+
(Number(dpe.logement.sortie.ep_conso.ep_conso_5_usages) -
|
|
551
|
+
Number(dpe.logement.sortie.ef_conso.conso_5_usages)) +
|
|
552
|
+
Number(dpe.logement.sortie.ef_conso.conso_5_usages);
|
|
553
|
+
|
|
554
|
+
let Sh;
|
|
555
|
+
if (th === 'maison' || th === 'appartement')
|
|
556
|
+
Sh = Number(dpe.logement.caracteristique_generale.surface_habitable_logement);
|
|
557
|
+
else if (th === 'immeuble')
|
|
558
|
+
Sh = Number(dpe.logement.caracteristique_generale.surface_habitable_immeuble);
|
|
559
|
+
|
|
560
|
+
const ep_conso_5_usages_2026_m2 = Math.floor(ep_conso_5_usages_2026 / Sh);
|
|
561
|
+
const classe_bilan_dpe_2026 = classe_bilan_dpe(ep_conso_5_usages_2026_m2, zc_id, ca_id, Sh);
|
|
562
|
+
|
|
563
|
+
return { classe_bilan_dpe_2026, ep_conso_5_usages_2026_m2, ep_conso_5_usages_2026 };
|
|
564
|
+
}
|
package/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { calcul_3cl, get_classe_ges_dpe } from './engine.js';
|
|
2
|
-
export { calcul_3cl, get_classe_ges_dpe };
|
|
1
|
+
import { calcul_3cl, get_classe_ges_dpe, get_conso_coeff_1_9_2026 } from './engine.js';
|
|
2
|
+
export { calcul_3cl, get_classe_ges_dpe, get_conso_coeff_1_9_2026 };
|
|
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.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Open Source 3CL-DPE engine",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"directories": {
|
|
@@ -15,14 +15,6 @@
|
|
|
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:bench:5": "npm run test:corpus -- threshold=5 && npm run test:corpus -- compatibility threshold=5",
|
|
19
|
-
"test:corpus:bench:6": "npm run test:corpus -- threshold=6 && npm run test:corpus -- compatibility threshold=6",
|
|
20
|
-
"test:corpus:bench:7": "npm run test:corpus -- threshold=7 && npm run test:corpus -- compatibility threshold=7",
|
|
21
|
-
"test:corpus:bench:8": "npm run test:corpus -- threshold=8 && npm run test:corpus -- compatibility threshold=8",
|
|
22
|
-
"test:corpus:bench:9": "npm run test:corpus -- threshold=9 && npm run test:corpus -- compatibility threshold=9",
|
|
23
|
-
"test:corpus:bench:10": "npm run test:corpus -- threshold=10 && npm run test:corpus -- compatibility threshold=10",
|
|
24
|
-
"test:corpus:bench": "npm run test:corpus:bench:5 && npm run test:corpus:bench:6 && npm run test:corpus:bench:7 && npm run test:corpus:bench:8 && npm run test:corpus:bench:9 && npm run test:corpus:bench:10",
|
|
25
|
-
"test:benchmark": "node inspect test/run_benchmark.js",
|
|
26
18
|
"qa:lint": "eslint .",
|
|
27
19
|
"qa:lint:fix": "npm run qa:lint -- --fix",
|
|
28
20
|
"qa:duplication": "jscpd",
|
|
@@ -55,6 +47,8 @@
|
|
|
55
47
|
"@semantic-release/github": "^10.0.2",
|
|
56
48
|
"@types/node": "^20.12.4",
|
|
57
49
|
"@vitest/coverage-v8": "^3.0.6",
|
|
50
|
+
"ansi-colors": "^4.1.3",
|
|
51
|
+
"cli-progress": "^3.12.0",
|
|
58
52
|
"deep-object-diff": "^1.1.9",
|
|
59
53
|
"eslint": "^8.57.0",
|
|
60
54
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -66,6 +60,7 @@
|
|
|
66
60
|
"fast-csv": "^5.0.2",
|
|
67
61
|
"husky": "^9.0.11",
|
|
68
62
|
"jscpd": "^3.5.10",
|
|
63
|
+
"piscina": "^5.1.2",
|
|
69
64
|
"prettier": "^3.2.5",
|
|
70
65
|
"pretty-quick": "^4.0.0",
|
|
71
66
|
"semantic-release": "^23.0.6",
|