@open3cl/engine 1.7.0 → 1.7.2
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/10_besoin_fr.spec.js +1 -0
- package/10_clim.spec.js +1 -0
- package/11_besoin_ecs.spec.js +1 -0
- package/11_ecs.spec.js +1 -0
- package/12.4_pac.spec.js +1 -0
- package/13.2_generateur_combustion.js +2 -10
- package/13.2_generateur_combustion.spec.js +3 -3
- package/13.2_generateur_combustion_ch.spec.js +3 -3
- package/14_generateur_ecs.spec.js +1 -0
- package/15_conso_aux.spec.js +3 -3
- package/2021_04_13_confort_ete.spec.js +1 -0
- package/3.1_b.js +45 -33
- package/3.1_b.spec.js +1 -0
- package/3.2.1_mur.spec.js +1 -0
- package/3.2.2_plancher_bas.spec.js +1 -0
- package/3.2.3_plancher_haut.spec.js +1 -0
- package/3.3.1.4_porte.spec.js +1 -0
- package/3.3_baie_vitree.js +32 -10
- package/3.3_baie_vitree.spec.js +1 -0
- package/3.4_pont_thermique.js +21 -13
- package/3.4_pont_thermique.spec.js +2 -1
- package/4_ventilation.spec.js +1 -0
- package/5_conso_ventilation.spec.js +1 -0
- package/6.2_surface_sud_equivalente.spec.js +1 -0
- package/9_besoin_ch.spec.js +1 -0
- package/9_chauffage.spec.js +3 -3
- package/9_conso_ch.spec.js +1 -0
- package/9_emetteur_ch.spec.js +1 -0
- package/9_generateur_ch.spec.js +1 -0
- package/README.md +442 -291
- package/conso.spec.js +1 -0
- package/engine.js +3 -1
- package/engine.spec.js +1 -0
- package/ficheTechnique.js +133 -53
- package/ficheTechnique.spec.js +46 -14
- package/formula.js +251 -0
- package/formula.spec.js +99 -0
- package/package.json +15 -15
- package/utils.js +195 -44
- package/utils.spec.js +69 -0
- package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.spec.js +0 -222
- package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +0 -345
- package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.spec.js +0 -87
- package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.spec.js +0 -260
- package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.spec.js +0 -272
- package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +0 -231
- package/features/engine/domain/ch/generateur-ch.service.spec.js +0 -849
- package/features/engine/domain/conso/froid/conso-froid.service.spec.js +0 -233
- package/features/engine/domain/ecs/installation-ecs.service.spec.js +0 -337
- package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.spec.js +0 -607
- package/features/engine/domain/enveloppe/deperdition-enveloppe.service.spec.js +0 -550
- package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.spec.js +0 -82
- package/features/engine/domain/enveloppe/mur/deperdition-mur.service.spec.js +0 -542
- package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +0 -430
- package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.spec.js +0 -411
- package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +0 -653
- package/features/engine/domain/enveloppe/porte/deperdition-porte.service.spec.js +0 -117
- package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +0 -508
package/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<a id="readme-top"></a>
|
|
2
|
+
|
|
2
3
|
[![Contributors][contributors-shield]][contributors-url]
|
|
3
4
|
[![Forks][forks-shield]][forks-url]
|
|
4
5
|
[![Stargazers][stars-shield]][stars-url]
|
|
@@ -17,79 +18,237 @@ Implémentation open source du moteur Open3CL de l'ADEME.
|
|
|
17
18
|
|
|
18
19
|
![Javascript][Javascript]
|
|
19
20
|
|
|
20
|
-
<br/>
|
|
21
|
-
<a href="https://github.com/Open3CL/issues/new?labels=bug&template=bug-report---.md">Créer un bug</a>
|
|
21
|
+
<br/>
|
|
22
|
+
<a href="https://github.com/Open3CL/engine/issues/new?labels=bug&template=bug-report---.md">Créer un bug</a>
|
|
23
|
+
·
|
|
24
|
+
<a href="https://github.com/Open3CL/engine/issues/new?labels=enhancement&template=feature-request---.md">Créer une feature</a>
|
|
25
|
+
·
|
|
26
|
+
<a href="https://open3cl.github.io/engine/build/">Démo en ligne</a>
|
|
22
27
|
·
|
|
23
|
-
<a href="https://github.
|
|
28
|
+
<a href="https://open3cl.github.io/engine/reports/corpus">Rapports de corpus</a>
|
|
24
29
|
</p>
|
|
25
30
|
</div>
|
|
26
31
|
|
|
32
|
+
<div align="center">
|
|
33
|
+
|
|
34
|
+
**Donnez-lui un DPE au format XML ou JSON, il vous rend les consommations, les émissions et les étiquettes.**
|
|
35
|
+
|
|
36
|
+
</div>
|
|
37
|
+
|
|
27
38
|
<details>
|
|
28
|
-
<summary
|
|
39
|
+
<summary>📚 Sommaire</summary>
|
|
29
40
|
<ol>
|
|
30
|
-
<li>
|
|
31
|
-
<
|
|
41
|
+
<li><a href="#-à-propos-du-projet">À propos du projet</a>
|
|
42
|
+
<ul>
|
|
43
|
+
<li><a href="#ce-que-fait-le-moteur">Ce que fait le moteur</a></li>
|
|
44
|
+
<li><a href="#périmètre-couvert">Périmètre couvert</a></li>
|
|
45
|
+
<li><a href="#lécosystème-open3cl">L'écosystème Open3CL</a></li>
|
|
46
|
+
</ul>
|
|
32
47
|
</li>
|
|
33
|
-
<li>
|
|
34
|
-
<a href="#demarrage">Démarrage</a>
|
|
48
|
+
<li><a href="#-démarrage">Démarrage</a>
|
|
35
49
|
<ul>
|
|
36
|
-
<li><a href="#
|
|
50
|
+
<li><a href="#pré-requis">Pré-requis</a></li>
|
|
37
51
|
<li><a href="#installation">Installation</a></li>
|
|
38
|
-
<li><a href="#
|
|
52
|
+
<li><a href="#en-30-secondes">En 30 secondes</a></li>
|
|
53
|
+
</ul>
|
|
54
|
+
</li>
|
|
55
|
+
<li><a href="#-utilisation">Utilisation</a>
|
|
56
|
+
<ul>
|
|
57
|
+
<li><a href="#api-publique">API publique</a></li>
|
|
58
|
+
<li><a href="#options-de-calcul">Options de calcul</a></li>
|
|
59
|
+
<li><a href="#lire-le-résultat">Lire le résultat</a></li>
|
|
60
|
+
<li><a href="#tester-un-dpe-sans-écrire-de-code">Tester un DPE sans écrire de code</a></li>
|
|
61
|
+
</ul>
|
|
62
|
+
</li>
|
|
63
|
+
<li><a href="#-tests-de-corpus">Tests de corpus</a>
|
|
64
|
+
<ul>
|
|
65
|
+
<li><a href="#le-rapport-interactif">Le rapport interactif</a></li>
|
|
66
|
+
<li><a href="#lancer-un-corpus">Lancer un corpus</a></li>
|
|
67
|
+
<li><a href="#résultats-corpus">Résultats corpus</a></li>
|
|
39
68
|
</ul>
|
|
40
69
|
</li>
|
|
41
|
-
<li><a href="
|
|
42
|
-
<li><a href="
|
|
43
|
-
<li><a href="
|
|
44
|
-
<li><a href="
|
|
45
|
-
<li><a href="
|
|
46
|
-
<li><a href="#contact">Contact</a></li>
|
|
47
|
-
<li><a href="#acknowledgments">Acknowledgments</a></li>
|
|
70
|
+
<li><a href="#-roadmap">Roadmap</a></li>
|
|
71
|
+
<li><a href="#-contribuer">Contribuer</a></li>
|
|
72
|
+
<li><a href="#-licence">Licence</a></li>
|
|
73
|
+
<li><a href="#-contact">Contact</a></li>
|
|
74
|
+
<li><a href="#-remerciements">Remerciements</a></li>
|
|
48
75
|
</ol>
|
|
49
76
|
</details>
|
|
50
77
|
|
|
51
|
-
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 🌍 À propos du projet
|
|
81
|
+
|
|
82
|
+
**Open3CL** est une librairie JavaScript open source qui calcule un **Diagnostic de Performance Énergétique (DPE)**.
|
|
83
|
+
Elle implémente la méthode **3CL-DPE 2021** définie dans
|
|
84
|
+
[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),
|
|
85
|
+
la même méthode que celle utilisée par les logiciels certifiés du marché.
|
|
86
|
+
|
|
87
|
+
Concrètement : vous lui fournissez les **données d'entrée** d'un DPE (l'enveloppe du bâtiment, les systèmes de
|
|
88
|
+
chauffage,
|
|
89
|
+
d'ECS, de ventilation, de climatisation) et elle recalcule **l'intégralité des sorties** — déperditions, besoins,
|
|
90
|
+
consommations, émissions de gaz à effet de serre, coûts et étiquettes.
|
|
91
|
+
|
|
92
|
+
| | |
|
|
93
|
+
| :---------------------- | :--------------------------------------------------------------------------------------------------------- |
|
|
94
|
+
| 🎯 **Conforme** | Implémente la méthode réglementaire 3CL-DPE 2021, article par article |
|
|
95
|
+
| 🔍 **Vérifiable** | ~90 000 DPE réels rejoués à chaque version, résultats publiés (voir [Résultats corpus](#résultats-corpus)) |
|
|
96
|
+
| 🧩 **Sans dépendance** | Pure JavaScript (ESM), aucun service externe, fonctionne en Node.js comme dans un navigateur |
|
|
97
|
+
| 📦 **Prête à intégrer** | Entrée XML ADEME ou objet JSON, sortie JSON complète |
|
|
98
|
+
| 🆓 **Libre** | Licence GPL-3.0, développée au grand jour |
|
|
99
|
+
|
|
100
|
+
### Ce que fait le moteur
|
|
101
|
+
|
|
102
|
+
```mermaid
|
|
103
|
+
flowchart LR
|
|
104
|
+
A["📄 DPE<br/>XML ou JSON"] --> B["🧹 Sanitisation<br/>normalisation des entrées"]
|
|
105
|
+
B --> C["🧱 Enveloppe<br/>déperditions, inertie,<br/>ponts thermiques"]
|
|
106
|
+
C --> D["🌡️ Besoins<br/>chauffage, ECS,<br/>refroidissement"]
|
|
107
|
+
D --> E["⚙️ Systèmes<br/>générateurs, émetteurs,<br/>auxiliaires"]
|
|
108
|
+
E --> F["🔌 Consommations<br/>EF, EP, GES, coûts"]
|
|
109
|
+
F --> G["🏷️ Étiquettes<br/>DPE & climat"]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
<details>
|
|
113
|
+
<summary><strong>Le détail des étapes de calcul</strong></summary>
|
|
114
|
+
|
|
115
|
+
| Étape | Ce qui est calculé |
|
|
116
|
+
| :-------------------- | :---------------------------------------------------------------------------------------------------- |
|
|
117
|
+
| **Sanitisation** | Normalisation et correction des données d'entrée incohérentes (optionnelle) |
|
|
118
|
+
| **Enveloppe** | Déperditions des murs, planchers, baies, portes, ponts thermiques, renouvellement d'air, perméabilité |
|
|
119
|
+
| **Inertie & confort** | Classe d'inertie, confort d'été, qualité d'isolation |
|
|
120
|
+
| **Besoins** | Besoins de chauffage et d'ECS mensuels, apports solaires et internes, besoin de refroidissement |
|
|
121
|
+
| **Systèmes** | Rendements de génération / distribution / émission / stockage, pertes, intermittence |
|
|
122
|
+
| **Auxiliaires** | Consommations des auxiliaires de génération et de distribution (chauffage et ECS) |
|
|
123
|
+
| **Consommations** | Énergie finale, énergie primaire, émissions de GES, coûts par usage et par énergie |
|
|
124
|
+
| **Étiquettes** | Classe énergie et classe climat, y compris la projection avec le coefficient EP 1,7 |
|
|
125
|
+
|
|
126
|
+
</details>
|
|
127
|
+
|
|
128
|
+
### Périmètre couvert
|
|
52
129
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
130
|
+
| Type de DPE | Statut |
|
|
131
|
+
| :-------------------------------------------- | :--------------------------- |
|
|
132
|
+
| Maison individuelle | ✅ Supporté |
|
|
133
|
+
| Appartement (chauffage individuel) | ✅ Supporté |
|
|
134
|
+
| Appartement (chauffage collectif ou mixte) | ✅ Supporté |
|
|
135
|
+
| Immeuble collectif | ✅ Supporté |
|
|
136
|
+
| Appartement généré à partir d'un DPE immeuble | 🚧 En cours de fiabilisation |
|
|
137
|
+
| Photovoltaïque | 🚧 En cours |
|
|
138
|
+
|
|
139
|
+
> [!NOTE]
|
|
140
|
+
> Le moteur vise la **reproduction fidèle** des sorties des logiciels certifiés, y compris certains de leurs écarts à la
|
|
141
|
+
> méthode.
|
|
142
|
+
|
|
143
|
+
### L'écosystème Open3CL
|
|
144
|
+
|
|
145
|
+
| Ressource | Description |
|
|
146
|
+
| :-------------------------------------------------------------------- | :------------------------------------------------------------- |
|
|
147
|
+
| [open3cl.fr](https://open3cl.fr) | Le site du projet |
|
|
148
|
+
| [Démonstrateur](https://open3cl.github.io/engine/build/) | Chargez un DPE XML et comparez les sorties du moteur, en ligne |
|
|
149
|
+
| [Rapports de corpus](https://open3cl.github.io/engine/reports/corpus) | Le tableau de bord interactif des résultats sur DPE réels |
|
|
150
|
+
| [@open3cl/engine](https://www.npmjs.com/package/@open3cl/engine) | Le paquet npm |
|
|
58
151
|
|
|
59
152
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
60
153
|
|
|
61
|
-
|
|
154
|
+
---
|
|
62
155
|
|
|
63
|
-
|
|
156
|
+
## 🚀 Démarrage
|
|
64
157
|
|
|
65
|
-
|
|
158
|
+
### Pré-requis
|
|
159
|
+
|
|
160
|
+
| Outil | Version |
|
|
161
|
+
| :---------- | :-------- |
|
|
162
|
+
| **Node.js** | ≥ 24.14.1 |
|
|
163
|
+
| **npm** | ≥ 11.11.0 |
|
|
164
|
+
|
|
165
|
+
La version exacte utilisée en développement et en CI est fixée dans [`.nvmrc`](.nvmrc) (`nvm use`).
|
|
66
166
|
|
|
67
167
|
### Installation
|
|
68
168
|
|
|
69
169
|
```sh
|
|
70
|
-
|
|
170
|
+
npm install @open3cl/engine
|
|
71
171
|
```
|
|
72
172
|
|
|
73
|
-
|
|
173
|
+
<details>
|
|
174
|
+
<summary>Avec un autre gestionnaire de paquets</summary>
|
|
74
175
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
176
|
+
```sh
|
|
177
|
+
yarn add @open3cl/engine
|
|
178
|
+
pnpm add @open3cl/engine
|
|
179
|
+
```
|
|
79
180
|
|
|
80
|
-
|
|
181
|
+
</details>
|
|
81
182
|
|
|
82
|
-
|
|
183
|
+
### En 30 secondes
|
|
83
184
|
|
|
84
185
|
```javascript
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
|
|
88
|
-
|
|
186
|
+
import { calcul_3cl_xml } from '@open3cl/engine';
|
|
187
|
+
import { readFileSync } from 'node:fs';
|
|
188
|
+
|
|
189
|
+
const dpe = calcul_3cl_xml(readFileSync('./mon-dpe.xml', 'utf8'));
|
|
190
|
+
|
|
191
|
+
const { ep_conso, emission_ges } = dpe.logement.sortie;
|
|
192
|
+
|
|
193
|
+
console.log(`Étiquette énergie : ${ep_conso.classe_bilan_dpe}`);
|
|
194
|
+
console.log(`Consommation : ${ep_conso.ep_conso_5_usages_m2} kWh/m²/an`);
|
|
195
|
+
console.log(`Étiquette climat : ${emission_ges.classe_emission_ges}`);
|
|
196
|
+
console.log(`Émissions : ${emission_ges.emission_ges_5_usages_m2} kgCO₂/m²/an`);
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```text
|
|
200
|
+
Étiquette énergie : D
|
|
201
|
+
Consommation : 174 kWh/m²/an
|
|
202
|
+
Étiquette climat : C
|
|
203
|
+
Émissions : 30 kgCO₂/m²/an
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
> [!TIP]
|
|
207
|
+
> Les fichiers XML de n'importe quel DPE publié sont téléchargeables depuis
|
|
208
|
+
> [l'observatoire de l'ADEME](https://observatoire-dpe-audit.ademe.fr/). C'est le moyen le plus simple de tester le
|
|
209
|
+
> moteur sur un cas réel.
|
|
210
|
+
|
|
211
|
+
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 🛠️ Utilisation
|
|
216
|
+
|
|
217
|
+
### API publique
|
|
218
|
+
|
|
219
|
+
| Fonction | Entrée | Description |
|
|
220
|
+
| :------------------------------ | :---------- | :--------------------------------------------------------- |
|
|
221
|
+
| `calcul_3cl(dpe, options?)` | Objet JSON | Calcule un DPE et renvoie l'objet enrichi de ses sorties |
|
|
222
|
+
| `calcul_3cl_xml(xml, options?)` | Chaîne XML | Parse le XML puis appelle `calcul_3cl` |
|
|
223
|
+
| `get_classe_ges_dpe(dpe)` | DPE calculé | Recalcule les étiquettes énergie et climat |
|
|
224
|
+
| `get_conso_coeff_1_7_2027(dpe)` | DPE calculé | Projette la consommation avec le coefficient EP 1,7 (2027) |
|
|
225
|
+
| `getVersion()` | – | Version du moteur utilisée |
|
|
89
226
|
|
|
90
|
-
|
|
227
|
+
### Options de calcul
|
|
91
228
|
|
|
92
|
-
|
|
229
|
+
```javascript
|
|
230
|
+
import { calcul_3cl, calcul_3cl_xml } from '@open3cl/engine';
|
|
231
|
+
|
|
232
|
+
// Depuis un objet JSON — sanitisation activée par défaut
|
|
233
|
+
const a = calcul_3cl(dpeData);
|
|
234
|
+
const b = calcul_3cl(dpeData, { sanitize: true }); // équivalent
|
|
235
|
+
|
|
236
|
+
// Sans pré-transformation : les données d'entrée sont utilisées telles quelles
|
|
237
|
+
const c = calcul_3cl(dpeData, { sanitize: false });
|
|
238
|
+
|
|
239
|
+
// Depuis un XML ADEME
|
|
240
|
+
const d = calcul_3cl_xml(xmlString);
|
|
241
|
+
const e = calcul_3cl_xml(xmlString, { sanitize: false });
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
| Option | Défaut | Effet |
|
|
245
|
+
| :--------- | :----- | :----------------------------------------------------------------------------------------------------- |
|
|
246
|
+
| `sanitize` | `true` | Normalise et corrige les incohérences du DPE d'entrée avant calcul. Désactivez-le pour un calcul brut. |
|
|
247
|
+
|
|
248
|
+
<details>
|
|
249
|
+
<summary><strong>Exemple d'objet JSON d'entrée (partiel)</strong></summary>
|
|
250
|
+
|
|
251
|
+
```javascript
|
|
93
252
|
const dpeData = {
|
|
94
253
|
numero_dpe: '2113E1018248X',
|
|
95
254
|
statut: 'ACTIF',
|
|
@@ -104,311 +263,303 @@ const dpeData = {
|
|
|
104
263
|
description: 'Chaudière individuelle gaz standard',
|
|
105
264
|
surface_chauffee: 49.96,
|
|
106
265
|
generateur_chauffage_collection: {
|
|
107
|
-
generateur_chauffage: [{description: '...'}]
|
|
266
|
+
generateur_chauffage: [{ description: '...' }]
|
|
108
267
|
}
|
|
109
268
|
}
|
|
110
269
|
]
|
|
111
270
|
}
|
|
112
271
|
}
|
|
113
272
|
};
|
|
273
|
+
```
|
|
114
274
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const result = calcul_3cl(dpeData, {sanitize: true});
|
|
275
|
+
La structure attendue est celle du **XML DPE de l'ADEME**, converti en JSON. Les types complets sont décrits dans
|
|
276
|
+
[`types.d.ts`](types.d.ts).
|
|
118
277
|
|
|
119
|
-
|
|
120
|
-
const result = calcul_3cl(dpeData, {sanitize: false});
|
|
278
|
+
</details>
|
|
121
279
|
|
|
122
|
-
|
|
123
|
-
const result = calcul_3cl_xml('<xml><dpe><numero_dpe>2113E1018248X</numero_dpe></dpe</xml>');
|
|
124
|
-
const result = calcul_3cl_xml('<xml><dpe><numero_dpe>2113E1018248X</numero_dpe></dpe</xml>', {
|
|
125
|
-
sanitize: true
|
|
126
|
-
});
|
|
280
|
+
### Lire le résultat
|
|
127
281
|
|
|
128
|
-
|
|
129
|
-
const result = calcul_3cl_xml('<xml><dpe><numero_dpe>2113E1018248X</numero_dpe></dpe</xml>', {
|
|
130
|
-
sanitize: false
|
|
131
|
-
});
|
|
132
|
-
```
|
|
282
|
+
Le DPE renvoyé est l'objet d'entrée, enrichi de `logement.sortie` :
|
|
133
283
|
|
|
134
|
-
|
|
284
|
+
| Chemin | Contenu |
|
|
285
|
+
| :----------------------------------------- | :----------------------------------------------------- |
|
|
286
|
+
| `sortie.deperdition` | Déperditions par paroi et déperdition d'enveloppe (GV) |
|
|
287
|
+
| `sortie.apport_et_besoin` | Besoins de chauffage et d'ECS, apports, `nadeq` |
|
|
288
|
+
| `sortie.ef_conso` | Consommations en énergie finale, par usage |
|
|
289
|
+
| `sortie.ep_conso` | Énergie primaire, `classe_bilan_dpe`, projection 2027 |
|
|
290
|
+
| `sortie.emission_ges` | Émissions de GES et `classe_emission_ges` |
|
|
291
|
+
| `sortie.cout` | Coûts annuels par usage |
|
|
292
|
+
| `sortie.confort_ete` / `qualite_isolation` | Indicateurs de confort d'été et de qualité d'isolation |
|
|
293
|
+
| `sortie.production_electricite` | Production photovoltaïque |
|
|
135
294
|
|
|
136
|
-
|
|
137
|
-
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
138
|
-
| DPE_FOLDER_PATH | **Obligatoire**: Chemin vers lequel sont stockés les fichiers DPE (si non précisé, utiliser `dpes-folder-path` dans la ligne de commande |
|
|
139
|
-
| ADEME_API_CLIENT_ID | Client id pour l'api de l'ademe |
|
|
140
|
-
| ADEME_API_CLIENT_SECRET | Client secret pour l'api de l'ademe |
|
|
141
|
-
| MAX_WORKER_THREADS | Nombre de threads maximum pour les tests de corpus, par défaut: os.availableParallelism \* 1.5 |
|
|
142
|
-
| WORKER_THREADS_CHUNKS | Nombre de dpe à analyser par thread, par défaut: 200 |
|
|
143
|
-
| DOWNLOAD_DPE_WAIT | Temps d'attente en ms entre chaque dpe à télécharge, par défaut: 1s |
|
|
144
|
-
| SCW_ACCESS_KEY | Client id pour l'api scaleway |
|
|
145
|
-
| SCW_SECRET_KEY | Client secret pour l'api scaleway |
|
|
146
|
-
| S3_REGION | Region du bucket S3 dans lequel sont sauvegardés les DPE |
|
|
147
|
-
| S3_ENDPOINT | Url du endpoint du bucket S3 dans lequel sont sauvegardés les DPE |
|
|
148
|
-
| DOWNLOAD_DPE_WAIT | Temps d'attente en ms entre chaque dpe à télécharge, par défaut: 1s |
|
|
295
|
+
### Tester un DPE sans écrire de code
|
|
149
296
|
|
|
150
|
-
|
|
297
|
+
Le [démonstrateur en ligne](https://open3cl.github.io/engine/build/) accepte un DPE au format XML, l'envoie au moteur et
|
|
298
|
+
affiche **côte à côte** les valeurs du DPE d'origine, celles calculées par Open3CL, et le différentiel.
|
|
151
299
|
|
|
152
|
-
|
|
153
|
-
- 1000 requêtes / minute
|
|
154
|
-
- 10000 requêtes / jour
|
|
300
|
+
C'est le moyen le plus rapide de qualifier un écart : problème dans le DPE d'origine, ou bug dans la librairie ?
|
|
155
301
|
|
|
156
|
-
|
|
157
|
-
meilleure configuration est:
|
|
302
|
+
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
158
303
|
|
|
159
|
-
|
|
160
|
-
- `export API_ADEME_DOWNLOAD_WAIT=1000`
|
|
161
|
-
- `export WORKER_THREADS_CHUNKS=300`
|
|
304
|
+
---
|
|
162
305
|
|
|
163
|
-
|
|
306
|
+
## 🧪 Tests de corpus
|
|
164
307
|
|
|
165
|
-
|
|
308
|
+
> Un corpus, c'est une liste de numéros de DPE réels. Le moteur les rejoue **tous**, compare ses sorties à celles du
|
|
309
|
+
> DPE publié, et en tire un taux de conformité. C'est le principal indicateur de qualité du projet.
|
|
166
310
|
|
|
167
|
-
|
|
311
|
+
```mermaid
|
|
312
|
+
flowchart LR
|
|
313
|
+
A["📋 Liste de<br/>numéros DPE"] --> B["⬇️ Téléchargement<br/>API ADEME<br/><sub>ou cache local</sub>"]
|
|
314
|
+
B --> C["⚙️ Calcul<br/>Open3CL"]
|
|
315
|
+
C --> D["📐 Comparaison<br/><sub>écart ≤ 5 %</sub>"]
|
|
316
|
+
D --> E["📊 Rapports<br/>JSON · CSV · HTML"]
|
|
317
|
+
```
|
|
168
318
|
|
|
169
|
-
|
|
319
|
+
**22 grandeurs** sont comparées pour chaque DPE. Quatre d'entre elles sont **bloquantes** : un DPE n'est déclaré
|
|
320
|
+
conforme
|
|
321
|
+
que si **toutes** restent sous le seuil de tolérance de **5 %**.
|
|
170
322
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
323
|
+
| Contrôle bloquant | Ce que c'est |
|
|
324
|
+
| :----------------------------------------------------- | :---------------------------------- |
|
|
325
|
+
| `sortie.ef_conso.conso_ecs` | Consommation d'eau chaude sanitaire |
|
|
326
|
+
| `sortie.ef_conso.conso_ch` | Consommation de chauffage |
|
|
327
|
+
| `sortie.ep_conso.ep_conso_5_usages` (ou `_m2`) | Consommation en énergie primaire |
|
|
328
|
+
| `sortie.emission_ges.emission_ges_5_usages` (ou `_m2`) | Émissions de gaz à effet de serre |
|
|
174
329
|
|
|
175
|
-
|
|
330
|
+
📖 **Guide complet** : [docs/CORPUS.md](docs/CORPUS.md) — liste des corpus, contrôles informatifs, variables
|
|
331
|
+
d'environnement, quotas de l'API ADEME, structure des rapports.
|
|
176
332
|
|
|
177
|
-
|
|
178
|
-
le dpe proposé par la librairie Open3CL sont :
|
|
333
|
+
### Le rapport interactif
|
|
179
334
|
|
|
180
|
-
-
|
|
181
|
-
|
|
182
|
-
- logement.sortie.ep_conso.ep_conso_5_usages ou logement.sortie.ep_conso.ep_conso_5_usages_m2
|
|
183
|
-
- logement.sortie.emission_ges.emission_ges_5_usages ou logement.sortie.emission_ges.emission_ges_5_usages_m2
|
|
335
|
+
Chaque exécution produit un tableau de bord HTML : jauge de réussite, ratio par contrôle, liste des DPE au-dessus du
|
|
336
|
+
seuil avec le **détail des propriétés en écart**, et comparaison entre deux branches.
|
|
184
337
|
|
|
185
|
-
|
|
338
|
+
<div align="center">
|
|
339
|
+
<a href="https://open3cl.github.io/engine/reports/corpus">
|
|
340
|
+
<img src="images/corpus-report.png" alt="Rapport de corpus Open3CL" width="900">
|
|
341
|
+
</a>
|
|
342
|
+
<br/>
|
|
343
|
+
<sub>👉 <a href="https://open3cl.github.io/engine/reports/corpus"><strong>Ouvrir le rapport interactif</strong></a></sub>
|
|
344
|
+
</div>
|
|
186
345
|
|
|
187
|
-
|
|
346
|
+
> [!NOTE]
|
|
347
|
+
> GitHub neutralise les scripts et les `iframe` dans les fichiers markdown : le rapport ne peut donc pas être
|
|
348
|
+
> **intégré**
|
|
349
|
+
> tel quel dans ce README. Il est affiché ici sous forme d'aperçu cliquable, et reste consultable en ligne ou en local :
|
|
350
|
+
>
|
|
351
|
+
> ```sh
|
|
352
|
+
> npm run reports:preview # sert dist/reports/corpus et ouvre le navigateur
|
|
353
|
+
> ```
|
|
188
354
|
|
|
189
|
-
|
|
190
|
-
- `dpe_logement_individuel_2025.csv`: Corpus avec uniquement des dpe individuels réalisés en 2025
|
|
191
|
-
- `dpe_maison_individuelle_2025.csv`: Corpus avec uniquement des dpe maison individuelle réalisés en 2025
|
|
192
|
-
- `dpe_appartement_individuel_chauffage_individuel_2025.csv`: Corpus avec uniquement des dpe appartement avec chauffage
|
|
193
|
-
individuel réalisés en 2025
|
|
194
|
-
- `dpe_appartement_individuel_chauffage_collectif_2025.csv`: Corpus avec uniquement des dpe appartement avec chauffage
|
|
195
|
-
collectif réalisés en 2025
|
|
196
|
-
- `dpe_immeuble_chauffage_individuel.csv`: Corpus avec uniquement des dpe immeuble pour des logements avec chauffage
|
|
197
|
-
individuel
|
|
198
|
-
- `dpe_immeuble_chauffage_collectif.csv`: Corpus avec uniquement des dpe immeuble pour des logements avec chauffage
|
|
199
|
-
collectif
|
|
200
|
-
- `dpe_immeuble_chauffage_mixte.csv`: Corpus avec uniquement des dpe immeuble pour des logements avec chauffage mixte
|
|
201
|
-
- `dpe_individuel_a_partir_dpe_immeuble_2026.csv`: Corpus avec uniquement des dpe individuels réalisés à partir du dpe
|
|
202
|
-
immeuble en 2026
|
|
355
|
+
### Lancer un corpus
|
|
203
356
|
|
|
204
|
-
|
|
357
|
+
```sh
|
|
358
|
+
# Tous les corpus, puis mise à jour automatique des résultats dans ce README
|
|
359
|
+
npm run test:corpus:all
|
|
205
360
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
361
|
+
# Un seul corpus
|
|
362
|
+
npm run test:corpus
|
|
363
|
+
|
|
364
|
+
# Un corpus précis
|
|
365
|
+
npm run test:corpus -- corpus-file-path=corpus.csv
|
|
366
|
+
|
|
367
|
+
# Un seul DPE, pour investiguer
|
|
368
|
+
npm run test:corpus -- dpes-code=2592E1233185X
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
| Argument | Description |
|
|
372
|
+
| :------------------------ | :------------------------------------------------------------------------- |
|
|
373
|
+
| `corpus-file-path=<path>` | Fichier de corpus à analyser (défaut : `test/corpus/files/corpus_dpe.csv`) |
|
|
374
|
+
| `dpes-folder-path=<path>` | Dossier de cache des DPE. Un DPE déjà présent n'est pas retéléchargé |
|
|
375
|
+
| `dpes-code=<code>` | Ne rejoue qu'un seul DPE |
|
|
376
|
+
|
|
377
|
+
> [!TIP]
|
|
378
|
+
> Définissez `DPE_FOLDER_PATH` une fois pour toutes plutôt que de répéter `dpes-folder-path`. Les DPE absents du cache
|
|
379
|
+
> sont téléchargés depuis l'API de l'ADEME — pensez aux [quotas](docs/CORPUS.md#quotas-de-lapi-ademe).
|
|
215
380
|
|
|
216
381
|
### Résultats corpus
|
|
217
382
|
|
|
218
|
-
|
|
383
|
+
Ces résultats sont **générés automatiquement** à la fin de `npm run test:corpus:all` par
|
|
384
|
+
[`scripts/generate_corpus_readme.js`](scripts/generate_corpus_readme.js). Ne les modifiez pas à la main.
|
|
385
|
+
|
|
386
|
+
<!-- CORPUS:START -->
|
|
387
|
+
|
|
388
|
+
> **Version `1.6.2`** · branche `main` · généré le 2026-09-18
|
|
389
|
+
> Seuil de tolérance **5%**
|
|
390
|
+
|
|
391
|
+
<table>
|
|
392
|
+
<tr>
|
|
393
|
+
<td align="center"><strong>9</strong><br/><sub>corpus</sub></td>
|
|
394
|
+
<td align="center"><strong>89 996</strong><br/><sub>DPE analysés</sub></td>
|
|
395
|
+
<td align="center"><strong>59 497</strong><br/><sub>DPE conformes</sub></td>
|
|
396
|
+
<td align="center"><strong>66,11 %</strong><br/><sub>réussite globale</sub></td>
|
|
397
|
+
</tr>
|
|
398
|
+
</table>
|
|
399
|
+
|
|
400
|
+
| | Corpus | Réussite | | DPE conformes |
|
|
401
|
+
| :-: | :---------------------------------------------------------------------------------------------------------------------- | ----------: | :--------------------- | -------------: |
|
|
402
|
+
| 🔴 | **Généraliste**<br/><sub>`corpus_dpe.csv`</sub> | **45,97 %** | `█████████░░░░░░░░░░░` | 4 597 / 10 000 |
|
|
403
|
+
| 🟢 | **Appartement · chauffage individuel (2025)**<br/><sub>`dpe_appartement_individuel_chauffage_individuel_2025.csv`</sub> | **91,55 %** | `██████████████████░░` | 9 155 / 10 000 |
|
|
404
|
+
| 🟢 | **Logement individuel (2025)**<br/><sub>`dpe_logement_individuel_2025.csv`</sub> | **88,14 %** | `██████████████████░░` | 8 812 / 9 998 |
|
|
405
|
+
| 🟢 | **Maison individuelle (2025)**<br/><sub>`dpe_maison_individuelle_2025.csv`</sub> | **87,93 %** | `██████████████████░░` | 8 793 / 10 000 |
|
|
406
|
+
| 🟡 | **Immeuble · chauffage individuel**<br/><sub>`dpe_immeuble_chauffage_individuel.csv`</sub> | **73,76 %** | `███████████████░░░░░` | 7 375 / 9 999 |
|
|
407
|
+
| 🟡 | **Appartement · chauffage collectif (2025)**<br/><sub>`dpe_appartement_individuel_chauffage_collectif_2025.csv`</sub> | **69,47 %** | `██████████████░░░░░░` | 6 947 / 10 000 |
|
|
408
|
+
| 🟡 | **Immeuble · chauffage collectif**<br/><sub>`dpe_immeuble_chauffage_collectif.csv`</sub> | **62,27 %** | `████████████░░░░░░░░` | 6 226 / 9 999 |
|
|
409
|
+
| 🔴 | **Immeuble · chauffage mixte**<br/><sub>`dpe_immeuble_chauffage_mixte.csv`</sub> | **48,37 %** | `██████████░░░░░░░░░░` | 4 837 / 10 000 |
|
|
410
|
+
| 🔴 | **Individuel généré depuis l'immeuble (2026)**<br/><sub>`dpe_individuel_a_partir_dpe_immeuble_2026.csv`</sub> | **27,55 %** | `██████░░░░░░░░░░░░░░` | 2 755 / 10 000 |
|
|
411
|
+
|
|
412
|
+
<sub>🟢 ≥ 85 % · 🟡 ≥ 60 % · 🔴 < 60 %</sub>
|
|
413
|
+
|
|
414
|
+
#### Temps d’exécution
|
|
415
|
+
|
|
416
|
+
> Durée de l’appel à `calcul_3cl` par DPE, sur 89 956 calculs.
|
|
417
|
+
> La copie défensive de l’entrée et la lecture du fichier sont exclues de la mesure.
|
|
418
|
+
|
|
419
|
+
<table>
|
|
420
|
+
<tr>
|
|
421
|
+
<td align="center"><strong>5,61 ms</strong><br/><sub>moyenne</sub></td>
|
|
422
|
+
<td align="center"><strong>5,03 ms</strong><br/><sub>médiane</sub></td>
|
|
423
|
+
<td align="center"><strong>0,11 ms</strong><br/><sub>min</sub></td>
|
|
424
|
+
<td align="center"><strong>705,8 ms</strong><br/><sub>max</sub></td>
|
|
425
|
+
</tr>
|
|
426
|
+
</table>
|
|
427
|
+
|
|
428
|
+
| Corpus | Moyenne | Médiane | Min | Max | p95 | p99 |
|
|
429
|
+
| :--------------------------------------------- | ------: | ------: | ------: | -------: | ------: | ------: |
|
|
430
|
+
| **Généraliste** | 4,50 ms | 4,09 ms | 0,20 ms | 34,8 ms | 8,12 ms | 11,3 ms |
|
|
431
|
+
| **Appartement · chauffage individuel (2025)** | 3,71 ms | 3,46 ms | 1,32 ms | 26,1 ms | 6,22 ms | 7,99 ms |
|
|
432
|
+
| **Logement individuel (2025)** | 5,30 ms | 4,84 ms | 1,52 ms | 42,5 ms | 9,73 ms | 13,2 ms |
|
|
433
|
+
| **Maison individuelle (2025)** | 6,54 ms | 6,02 ms | 1,71 ms | 54,5 ms | 11,6 ms | 16,4 ms |
|
|
434
|
+
| **Immeuble · chauffage individuel** | 7,17 ms | 6,22 ms | 0,11 ms | 137,7 ms | 14,3 ms | 22,3 ms |
|
|
435
|
+
| **Appartement · chauffage collectif (2025)** | 3,98 ms | 3,76 ms | 1,22 ms | 37,6 ms | 6,35 ms | 8,00 ms |
|
|
436
|
+
| **Immeuble · chauffage collectif** | 6,40 ms | 5,58 ms | 0,15 ms | 101,0 ms | 12,1 ms | 21,2 ms |
|
|
437
|
+
| **Immeuble · chauffage mixte** | 6,01 ms | 5,01 ms | 0,22 ms | 705,8 ms | 12,4 ms | 19,8 ms |
|
|
438
|
+
| **Individuel généré depuis l'immeuble (2026)** | 6,89 ms | 6,27 ms | 1,52 ms | 65,1 ms | 13,0 ms | 19,7 ms |
|
|
439
|
+
|
|
440
|
+
<sub>La moyenne est tirée vers le haut par les DPE collectifs, dont le coût atteint plusieurs
|
|
441
|
+
dizaines de fois la médiane : c’est la médiane qui décrit le cas courant, et p95/p99 le cas
|
|
442
|
+
défavorable réel.</sub>
|
|
443
|
+
|
|
444
|
+
<!-- CORPUS:END -->
|
|
445
|
+
|
|
446
|
+
📈 Historique complet des versions : [docs/CORPUS-HISTORY.md](docs/CORPUS-HISTORY.md)
|
|
219
447
|
|
|
220
|
-
<
|
|
221
|
-
<summary>Voir les versions précédents</summary>
|
|
222
|
-
|
|
223
|
-
| Version librairie | corpus | Nb en dessous du taux d'erreur | Taux de réussite | Description |
|
|
224
|
-
| :------------------- | -------------------------------------------------------- | ------------------------------ | ----------------------- | ------------------------------------------------- |
|
|
225
|
-
| <ins>**1.2.3**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4489**<ins> | <ins>**45%**<ins> | |
|
|
226
|
-
| 1.2.3 | dpe_immeuble_chauffage_individuel.csv | 3257 | 32% | |
|
|
227
|
-
| 1.2.3 | dpe_immeuble_chauffage_collectif.csv | 5279 | 53% | |
|
|
228
|
-
| 1.2.3 | dpe_immeuble_chauffage_mixte.csv | 2728 | 27% | |
|
|
229
|
-
| <ins>**1.2.8**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**489**<ins> | <ins>**45%**<ins> | |
|
|
230
|
-
| 1.2.8 | dpe_immeuble_chauffage_individuel.csv | 5275 (+2018) | 53% (+21%) | |
|
|
231
|
-
| 1.2.8 | dpe_immeuble_chauffage_collectif.csv | 5747 (+468) | 57% (+4%) | |
|
|
232
|
-
| 1.2.8 | dpe_immeuble_chauffage_mixte.csv | 3142 (+414) | 31% (+4%) | |
|
|
233
|
-
| <ins>**1.3.1**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4508 (+19)**<ins> | <ins>**45%**<ins> | |
|
|
234
|
-
| 1.3.1 | dpe_immeuble_chauffage_individuel.csv | 5459 (+184) | 55% (+2%) | |
|
|
235
|
-
| 1.3.1 | dpe_immeuble_chauffage_collectif.csv | 5848 (+101) | 58% (+1%) | |
|
|
236
|
-
| 1.3.1 | dpe_immeuble_chauffage_mixte.csv | 4018 (+876) | 40% (+9%) | |
|
|
237
|
-
| <ins>**1.3.2**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4519 (+11)**<ins> | <ins>**45%**<ins> | |
|
|
238
|
-
| 1.3.2 | dpe_immeuble_chauffage_individuel.csv | 5476 (+17) | 55% | |
|
|
239
|
-
| 1.3.2 | dpe_immeuble_chauffage_collectif.csv | 5869 (+21) | 58% | |
|
|
240
|
-
| 1.3.2 | dpe_immeuble_chauffage_mixte.csv | 4040 (+22) | 40% | |
|
|
241
|
-
| <ins>**1.3.5**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522 (+3)**<ins> | <ins>**45%**<ins> | |
|
|
242
|
-
| 1.3.5 | dpe_immeuble_chauffage_individuel.csv | 5488 (+12) | 55% | |
|
|
243
|
-
| 1.3.5 | dpe_immeuble_chauffage_collectif.csv | 5869 | 58% | |
|
|
244
|
-
| 1.3.5 | dpe_immeuble_chauffage_mixte.csv | 4082 (+42) | 40% | |
|
|
245
|
-
| <ins>**1.3.6**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522**<ins> | <ins>**45%**<ins> | |
|
|
246
|
-
| 1.3.6 | dpe_immeuble_chauffage_individuel.csv | 5650 (+162) | 56% | |
|
|
247
|
-
| 1.3.6 | dpe_immeuble_chauffage_collectif.csv | 5894 (+25) | 59% (+1%) | |
|
|
248
|
-
| 1.3.6 | dpe_immeuble_chauffage_mixte.csv | 4141 (+59) | 41% (+1%) | |
|
|
249
|
-
| <ins>**1.3.7**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522**<ins> | <ins>**45%**<ins> | |
|
|
250
|
-
| 1.3.7 | dpe_immeuble_chauffage_individuel.csv | 6960 (+1310) | 69% (+13%) | |
|
|
251
|
-
| 1.3.7 | dpe_immeuble_chauffage_collectif.csv | 6106 (+212) | 61% (+2%) | |
|
|
252
|
-
| 1.3.7 | dpe_immeuble_chauffage_mixte.csv | 4730 (+589) | 47% (+6%) | |
|
|
253
|
-
| <ins>**1.3.8**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522**<ins> | <ins>**45%**<ins> | |
|
|
254
|
-
| 1.3.8 | dpe_immeuble_chauffage_individuel.csv | 6965 (+5) | 69% | |
|
|
255
|
-
| 1.3.8 | dpe_immeuble_chauffage_collectif.csv | 6110 (+4) | 61% | |
|
|
256
|
-
| 1.3.8 | dpe_immeuble_chauffage_mixte.csv | 4735 (+5) | 47% | |
|
|
257
|
-
| <ins>**1.3.9**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4460**<ins> (-62) | <ins>**44% (-1%)**<ins> | Pertes liés au fix bug tribu zone 2hd valeur dh19 |
|
|
258
|
-
| 1.3.9 | dpe_immeuble_chauffage_individuel.csv | 6901 (-64) | 69% | Pertes liés au fix bug tribu zone 2hd valeur dh19 |
|
|
259
|
-
| 1.3.9 | dpe_immeuble_chauffage_collectif.csv | 6058 (-58) | 60% (-1%) | Pertes liés au fix bug tribu zone 2hd valeur dh19 |
|
|
260
|
-
| 1.3.9 | dpe_immeuble_chauffage_mixte.csv | 4728 (-7) | 47% | Pertes liés au fix bug tribu zone 2hd valeur dh19 |
|
|
261
|
-
| <ins>**1.3.11**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4468**<ins> (+8) | <ins>**44%**<ins> | |
|
|
262
|
-
| 1.3.11 | dpe_immeuble_chauffage_individuel.csv | 6901 | 69% | |
|
|
263
|
-
| 1.3.11 | dpe_immeuble_chauffage_collectif.csv | 6058 | 60% | |
|
|
264
|
-
| 1.3.11 | dpe_immeuble_chauffage_mixte.csv | 4727 (-1) | 47% | Dpes erronés sur le calcul volume ballon ecs |
|
|
265
|
-
| <ins>**1.3.12**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4467**<ins> (-1) | <ins>**44%**<ins> | Dpe erroné avec surface chauffée invalide |
|
|
266
|
-
| 1.3.12 | dpe_logement_individuel_2025.csv | 8429 | 84% | |
|
|
267
|
-
| 1.3.12 | dpe_immeuble_chauffage_individuel.csv | 6900 (-1) | 69% | Dpe erroné avec surface chauffée invalide |
|
|
268
|
-
| 1.3.12 | dpe_immeuble_chauffage_collectif.csv | 6058 | 60% | |
|
|
269
|
-
| 1.3.12 | dpe_immeuble_chauffage_mixte.csv | 4725 (-2) | 47% | Dpe erroné avec surface chauffée invalide |
|
|
270
|
-
| <ins>**1.3.15**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4481**<ins> (+14) | <ins>**45 (+1%)**<ins> | |
|
|
271
|
-
| 1.3.15 | dpe_logement_individuel_2025.csv | 8453 | 84% | |
|
|
272
|
-
| 1.3.15 | dpe_immeuble_chauffage_individuel.csv | 7106 (+205) | 71% (+2%) | |
|
|
273
|
-
| 1.3.15 | dpe_immeuble_chauffage_collectif.csv | 6083 (+25) | 61% (+1%) | |
|
|
274
|
-
| 1.3.15 | dpe_immeuble_chauffage_mixte.csv | 4751 (+24) | 47% | |
|
|
275
|
-
| <ins>**1.3.20**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4500**<ins> (+19) | <ins>**45%**<ins> | |
|
|
276
|
-
| 1.3.20 | dpe_logement_individuel_2025.csv | 8459 (+6) | 84% | |
|
|
277
|
-
| 1.3.20 | dpe_maison_individuelle_2025.csv | 8638 | 86% | |
|
|
278
|
-
| 1.3.20 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 8561 | 86% | |
|
|
279
|
-
| 1.3.20 | dpe_immeuble_chauffage_individuel.csv | 7106 | 71% | |
|
|
280
|
-
| 1.3.20 | dpe_immeuble_chauffage_collectif.csv | 6083 | 61% | |
|
|
281
|
-
| 1.3.20 | dpe_immeuble_chauffage_mixte.csv | 4751 | 47% | |
|
|
282
|
-
| <ins>**1.3.21**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4502**<ins> (+2) | <ins>**45%**<ins> | |
|
|
283
|
-
| 1.3.21 | dpe_logement_individuel_2025.csv | 8504 (+45) | 85% (+1%) | |
|
|
284
|
-
| 1.3.21 | dpe_maison_individuelle_2025.csv | 8652 (+14) | 86% | |
|
|
285
|
-
| 1.3.21 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 8578 (+17) | 86% | |
|
|
286
|
-
| 1.3.21 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6681 | 67% | |
|
|
287
|
-
| 1.3.21 | dpe_immeuble_chauffage_individuel.csv | 7144 (+38) | 71% | |
|
|
288
|
-
| 1.3.21 | dpe_immeuble_chauffage_collectif.csv | 6144 (+61) | 61% | |
|
|
289
|
-
| 1.3.21 | dpe_immeuble_chauffage_mixte.csv | 4760 (+9) | 47% | |
|
|
290
|
-
| 1.3.25 | dpe_logement_individuel_2025.csv | 8512 (+8) | 85% | |
|
|
291
|
-
| 1.3.25 | dpe_maison_individuelle_2025.csv | 8674 (+22) | 87% (+1%) | |
|
|
292
|
-
| 1.3.25 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 8581 (+3) | 86% | |
|
|
293
|
-
| 1.3.25 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6680 (-1) | 67% | Dpe erronés enlevés du corpus |
|
|
294
|
-
| 1.3.25 | dpe_immeuble_chauffage_individuel.csv | 7142 (-2) | 71% | Dpe erronés enlevés du corpus |
|
|
295
|
-
| 1.3.25 | dpe_immeuble_chauffage_collectif.csv | 6144 | 61% | |
|
|
296
|
-
| 1.3.25 | dpe_immeuble_chauffage_mixte.csv | 4758 (-2) | 47% | Dpe erronés enlevés du corpus |
|
|
297
|
-
| <ins>**1.4.0**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4515**<ins> | <ins>**45%**<ins> | Maj coeff electricité (janvier 2026) |
|
|
298
|
-
| 1.4.0 | dpe_logement_individuel_2025.csv | 8512 | 85% | Maj coeff electricité (janvier 2026) |
|
|
299
|
-
| 1.4.0 | dpe_maison_individuelle_2025.csv | 8674 | 87% | Maj coeff electricité (janvier 2026) |
|
|
300
|
-
| 1.4.0 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 8581 | 86% | Maj coeff electricité (janvier 2026) |
|
|
301
|
-
| 1.4.0 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6680 | 67% | Maj coeff electricité (janvier 2026) |
|
|
302
|
-
| 1.4.0 | dpe_immeuble_chauffage_individuel.csv | 7142 | 71% | Maj coeff electricité (janvier 2026) |
|
|
303
|
-
| 1.4.0 | dpe_immeuble_chauffage_collectif.csv | 6144 | 61% | Maj coeff electricité (janvier 2026) |
|
|
304
|
-
| 1.4.0 | dpe_immeuble_chauffage_mixte.csv | 4758 | 47% | Maj coeff electricité (janvier 2026) |
|
|
305
|
-
| <ins>**1.4.2**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4515**<ins> | <ins>**45%**<ins> | |
|
|
306
|
-
| 1.4.2 | dpe_logement_individuel_2025.csv | 8512 | 85% | |
|
|
307
|
-
| 1.4.2 | dpe_maison_individuelle_2025.csv | 8674 | 87% | |
|
|
308
|
-
| 1.4.2 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 8581 | 86% | |
|
|
309
|
-
| 1.4.2 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6680 | 67% | |
|
|
310
|
-
| 1.4.2 | dpe_immeuble_chauffage_individuel.csv | 7143 | 71% | |
|
|
311
|
-
| 1.4.2 | dpe_immeuble_chauffage_collectif.csv | 6144 | 61% | |
|
|
312
|
-
| 1.4.2 | dpe_immeuble_chauffage_mixte.csv | 4758 | 47% | |
|
|
313
|
-
| 1.4.2 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2757 | 27% | |
|
|
314
|
-
| <ins>**1.4.3**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4556**<ins> | <ins>**45%**<ins> | |
|
|
315
|
-
| 1.4.3 | dpe_logement_individuel_2025.csv | 8716 | 87% | |
|
|
316
|
-
| 1.4.3 | dpe_maison_individuelle_2025.csv | 8715 | 87% | |
|
|
317
|
-
| 1.4.3 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 9070 | 91% | |
|
|
318
|
-
| 1.4.3 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6804 | 68% | |
|
|
319
|
-
| 1.4.3 | dpe_immeuble_chauffage_individuel.csv | 7320 | 73% | |
|
|
320
|
-
| 1.4.3 | dpe_immeuble_chauffage_collectif.csv | 6149 | 61% | |
|
|
321
|
-
| 1.4.3 | dpe_immeuble_chauffage_mixte.csv | 4805 | 48% | |
|
|
322
|
-
| 1.4.3 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2755 | 27% | |
|
|
323
|
-
| <ins>**1.4.4**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4560 (+4)**<ins> | <ins>**45%**<ins> | |
|
|
324
|
-
| 1.4.4 | dpe_logement_individuel_2025.csv | 8719 (+3) | 87% (+2%) | |
|
|
325
|
-
| 1.4.4 | dpe_maison_individuelle_2025.csv | 8715 | 87% | |
|
|
326
|
-
| 1.4.4 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 9070 | 91% | |
|
|
327
|
-
| 1.4.4 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6803 (-1) | 68% | |
|
|
328
|
-
| 1.4.4 | dpe_immeuble_chauffage_individuel.csv | 7320 | 73% | |
|
|
329
|
-
| 1.4.4 | dpe_immeuble_chauffage_collectif.csv | 6149 | 61% | |
|
|
330
|
-
| 1.4.4 | dpe_immeuble_chauffage_mixte.csv | 4805 | 48% | |
|
|
331
|
-
| 1.4.4 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2755 | 27% | |
|
|
332
|
-
| <ins>**1.4.5**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4582 (+22)**<ins> | <ins>**46% (+1%)**<ins> | |
|
|
333
|
-
| 1.4.5 | dpe_logement_individuel_2025.csv | 8790 (+71) | 88% (+1%) | |
|
|
334
|
-
| 1.4.5 | dpe_maison_individuelle_2025.csv | 8791 (+76) | 88% (+1%) | |
|
|
335
|
-
| 1.4.5 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 9143 (+73) | 91% | |
|
|
336
|
-
| 1.4.5 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6836 (+33) | 68% | |
|
|
337
|
-
| 1.4.5 | dpe_immeuble_chauffage_individuel.csv | 7371 (+51) | 74% (+1%) | |
|
|
338
|
-
| 1.4.5 | dpe_immeuble_chauffage_collectif.csv | 6155 (+6) | 61% | |
|
|
339
|
-
| 1.4.5 | dpe_immeuble_chauffage_mixte.csv | 4816 (+11S) | 48% | |
|
|
340
|
-
| 1.4.5 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2755 | 27% | |
|
|
341
|
-
| <ins>**1.5.1 **<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4582**<ins> | <ins>**46%**<ins> | |
|
|
342
|
-
| 1.5.1 | dpe_logement_individuel_2025.csv | 8790 | 88% | |
|
|
343
|
-
| 1.5.1 | dpe_maison_individuelle_2025.csv | 8791 | 88% | |
|
|
344
|
-
| 1.5.1 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 9143 | 91% | |
|
|
345
|
-
| 1.5.1 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6836 | 68% | |
|
|
346
|
-
| 1.5.1 | dpe_immeuble_chauffage_individuel.csv | 7371 | 74% | |
|
|
347
|
-
| 1.5.1 | dpe_immeuble_chauffage_collectif.csv | 6155 | 61% | |
|
|
348
|
-
| 1.5.1 | dpe_immeuble_chauffage_mixte.csv | 4816 | 48% | |
|
|
349
|
-
| 1.5.1 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2755 | 27% | |
|
|
448
|
+
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
350
449
|
|
|
351
|
-
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## 🗺️ Roadmap
|
|
453
|
+
|
|
454
|
+
```mermaid
|
|
455
|
+
flowchart TD
|
|
456
|
+
subgraph fait ["✅ Fait"]
|
|
457
|
+
A1["Site Open3CL"]
|
|
458
|
+
A2["Rapports de corpus interactifs"]
|
|
459
|
+
end
|
|
460
|
+
subgraph cours ["🚧 En cours"]
|
|
461
|
+
B1["Refonte technique"]
|
|
462
|
+
B2["DPE à l'immeuble"]
|
|
463
|
+
B3["Certification ADEME"]
|
|
464
|
+
end
|
|
465
|
+
fait --> cours
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
| Étape | Statut | Détail |
|
|
469
|
+
| :------------------ | :---------- | :--------------------------------------------------------------- |
|
|
470
|
+
| Site Open3CL | ✅ Terminé | [open3cl.fr](https://open3cl.fr) |
|
|
471
|
+
| Rapports de tests | ✅ Terminé | Tableau de bord interactif publié à chaque exécution |
|
|
472
|
+
| Refonte technique | 🚧 En cours | Découpage par article de la méthode, couverture de tests à 100 % |
|
|
473
|
+
| DPE à l'immeuble | 🚧 En cours | Fiabilisation des appartements générés depuis un DPE immeuble |
|
|
474
|
+
| Certification ADEME | 🚧 En cours | Objectif de long terme |
|
|
352
475
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
| <ins>**1.6.1 **<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4591 (+3)**<ins> | <ins>**46%**<ins> | |
|
|
356
|
-
| 1.6.1 | dpe_logement_individuel_2025.csv | 8791 (+1) | 88% | |
|
|
357
|
-
| 1.6.1 | dpe_maison_individuelle_2025.csv | 8793 (+2) | 88% | |
|
|
358
|
-
| 1.6.1 | dpe_appartement_individuel_chauffage_individuel_2025.csv | 9146 (+3) | 91% | |
|
|
359
|
-
| 1.6.1 | dpe_appartement_individuel_chauffage_collectif_2025.csv | 6837 (+1) | 68% | |
|
|
360
|
-
| 1.6.1 | dpe_immeuble_chauffage_individuel.csv | 7371 | 74% | |
|
|
361
|
-
| 1.6.1 | dpe_immeuble_chauffage_collectif.csv | 6155 | 61% | |
|
|
362
|
-
| 1.6.1 | dpe_immeuble_chauffage_mixte.csv | 4819 (+3) | 48% | |
|
|
363
|
-
| 1.6.1 | dpe_individuel_a_partir_dpe_immeuble_2026.csv | 2755 | 27% | |
|
|
364
|
-
|
|
365
|
-
## Roadmap
|
|
366
|
-
|
|
367
|
-
- [x] Site Open 3CL
|
|
368
|
-
- [ ] Refacto technique
|
|
369
|
-
- [ ] Rapports de tests
|
|
370
|
-
- [ ] Certification ADEME
|
|
371
|
-
- [ ] Fonctionnalités
|
|
372
|
-
- [ ] DPE à l'immeuble
|
|
373
|
-
- [ ] Photovoltaïque
|
|
374
|
-
|
|
375
|
-
Voir la liste des [issues](https://github.com/Open3CL/engine/issues) pour avoir le détail complet des bugs et
|
|
376
|
-
fonctionnalités en cours de réalisation.
|
|
476
|
+
Le détail complet des bugs et fonctionnalités en cours est dans les
|
|
477
|
+
[issues](https://github.com/Open3CL/engine/issues).
|
|
377
478
|
|
|
378
479
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
379
480
|
|
|
380
|
-
|
|
481
|
+
---
|
|
381
482
|
|
|
382
|
-
|
|
483
|
+
## 🤝 Contribuer
|
|
383
484
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
- Soumettre une pull request avec une description claire des changements apportés.
|
|
387
|
-
- Consultez le fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour plus de détails.
|
|
485
|
+
Toutes les contributions sont les bienvenues : correction d'un écart de calcul, ajout de tests, documentation, ou
|
|
486
|
+
simplement le signalement d'un DPE qui ne passe pas.
|
|
388
487
|
|
|
389
|
-
|
|
488
|
+
```sh
|
|
489
|
+
git clone https://github.com/Open3CL/engine.git
|
|
490
|
+
cd engine
|
|
491
|
+
npm ci
|
|
492
|
+
npm run test:unit # tests unitaires
|
|
493
|
+
npm run qa:lint # analyse statique
|
|
494
|
+
npm run qa:format # formatage
|
|
495
|
+
```
|
|
390
496
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
497
|
+
| Vous voulez… | Allez voir |
|
|
498
|
+
| :----------------------------- | :------------------------------------------------------------------------------------------------------------------- |
|
|
499
|
+
| Signaler un bug | [Ouvrir un bug](https://github.com/Open3CL/engine/issues/new?labels=bug&template=bug-report---.md) |
|
|
500
|
+
| Proposer une fonctionnalité | [Ouvrir une feature](https://github.com/Open3CL/engine/issues/new?labels=enhancement&template=feature-request---.md) |
|
|
501
|
+
| Soumettre du code | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
502
|
+
| Comprendre les tests de corpus | [docs/CORPUS.md](docs/CORPUS.md) |
|
|
503
|
+
|
|
504
|
+
📖 Le guide de contribution détaillé — conventions de commit, règles de code, cycle d'une pull request, méthode de
|
|
505
|
+
debug d'un écart de calcul — est dans **[CONTRIBUTING.fr.md](CONTRIBUTING.fr.md)**.
|
|
394
506
|
|
|
395
507
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
396
508
|
|
|
397
|
-
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
## 📄 Licence
|
|
398
512
|
|
|
399
|
-
Distribué sous
|
|
513
|
+
Distribué sous licence **GPL-3.0**. Voir le fichier [`LICENSE`](LICENSE) pour plus d'informations.
|
|
400
514
|
|
|
401
515
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
402
516
|
|
|
403
|
-
|
|
517
|
+
---
|
|
404
518
|
|
|
405
|
-
|
|
519
|
+
## 📬 Contact
|
|
520
|
+
|
|
521
|
+
Pour toute question : **open3cl@redfroggy.fr**
|
|
406
522
|
|
|
407
523
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
408
524
|
|
|
409
|
-
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## 🙏 Remerciements
|
|
528
|
+
|
|
529
|
+
### Les contributeurs
|
|
530
|
+
|
|
531
|
+
Merci à toutes les personnes qui ont écrit, testé, relu ou corrigé une ligne de ce moteur.
|
|
532
|
+
|
|
533
|
+
<a href="https://github.com/Open3CL/engine/graphs/contributors">
|
|
534
|
+
<img src="https://contrib.rocks/image?repo=Open3CL/engine" alt="Contributeurs Open3CL" />
|
|
535
|
+
</a>
|
|
410
536
|
|
|
411
|
-
|
|
537
|
+
### Les organisations qui soutiennent le projet
|
|
538
|
+
|
|
539
|
+
<table>
|
|
540
|
+
<tr>
|
|
541
|
+
<td align="center" width="33%">
|
|
542
|
+
<a href="https://redfroggy.fr/"><strong>RedFroggy</strong></a>
|
|
543
|
+
<br/><br/>
|
|
544
|
+
<sub>À l'initiative du projet et de sa maintenance. Studio de développement web et mobile.</sub>
|
|
545
|
+
</td>
|
|
546
|
+
<td align="center" width="33%">
|
|
547
|
+
<a href="https://kardino.fr"><strong>Kardino</strong></a>
|
|
548
|
+
<br/><br/>
|
|
549
|
+
<sub>Accompagnement à la rénovation énergétique des logements.</sub>
|
|
550
|
+
</td>
|
|
551
|
+
<td align="center" width="33%">
|
|
552
|
+
<a href="https://checkdpe.fr/"><strong>Check DPE</strong></a>
|
|
553
|
+
<br/><br/>
|
|
554
|
+
<sub>Vérification et analyse de DPE en ligne.</sub>
|
|
555
|
+
</td>
|
|
556
|
+
</tr>
|
|
557
|
+
</table>
|
|
558
|
+
|
|
559
|
+
### Les ressources
|
|
560
|
+
|
|
561
|
+
- L'[ADEME](https://www.ademe.fr/) pour la publication de la méthode 3CL-DPE 2021 et l'ouverture des données DPE
|
|
562
|
+
- L'[observatoire DPE-Audit](https://observatoire-dpe-audit.ademe.fr/) qui rend possible les tests de corpus
|
|
412
563
|
|
|
413
564
|
<p align="right">(<a href="#readme-top">Retour sommaire</a>)</p>
|
|
414
565
|
|