Skip to content

Commit 69b94f1

Browse files
Merge pull request #133 from Open3CL/fix_issue_132
Fix issue 132
2 parents 47777b4 + 537ed93 commit 69b94f1

File tree

14 files changed

+11836
-154
lines changed

14 files changed

+11836
-154
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ Il existe actuellement 8 corpus (avec 10000 dpe analysés dans chaque corpus) :
183183
Par défaut, le corpus utilisé est présent ici : [test/corpus/corpus_dpe.csv](test/corpus/files/corpus_dpe.csv)
184184
- `npm run test:corpus -- dpes-folder-path=/home/user/dpes`. Chemin vers le dossier ou les DPE seront téléchargés. Si un
185185
fichier DPE est déjà présent dans ce dossier, il ne sera pas retéléchargé.
186+
- `npm run test:corpus -- dpes-code=2592E1233185X`. Execution du corpus sur le dpe spécifié.
187+
- Si le dpe n'est pas présent en local, il sera téléchargé sur le site de l'ADEME.
186188

187189
### Résultats corpus
188190

dist/reports/corpus/corpus_list_main.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
"dpe_appartement_individuel_chauffage_individuel_2025.csv",
1010
"dpe_appartement_individuel_chauffage_collectif_2025.csv"
1111
],
12-
"branches": ["main", "issue_23"]
12+
"branches": ["main", "fix_issue_132"]
1313
}

src/16.2_production_enr.js

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import enums from './enums.js';
22
import { mois_liste, tv } from './utils.js';
33
import tvs from './tv.js';
4+
import { COEFF_EP_1_9, COEFF_EP_2_3 } from './conso.js';
45

56
export class ProductionENR {
67
#taplpi = {
@@ -19,7 +20,7 @@ export class ProductionENR {
1920
* @param productionElecEnr
2021
* @param Sh {string}
2122
*/
22-
calculateEnr(productionElecEnr, conso, Sh, th, zc_id) {
23+
calculateEnr(productionElecEnr, conso, Sh, th, zc_id, use_coeff_ch_elec_2_3) {
2324
const productionElectricite = {
2425
conso_elec_ac: 0,
2526
production_pv: 0,
@@ -44,7 +45,7 @@ export class ProductionENR {
4445
this.updateEfConso(productionElectricite, conso, Sh);
4546

4647
// Mise à jour des consommations d'énergie primaire en minorant l'énergie consommée par l'énergie autoconsommée par le poste
47-
this.updateEPConso(productionElectricite, conso, Sh);
48+
this.updateEPConso(productionElectricite, conso, Sh, use_coeff_ch_elec_2_3);
4849
}
4950

5051
return {
@@ -179,26 +180,49 @@ export class ProductionENR {
179180
* Mise à jour des consommations ef en minorant l'énergie primaire consommée par l'énergie autoconsommée par chaque enveloppe
180181
* @param productionElectricite
181182
* @param conso {{ep_conso: Ep_conso}}
182-
* @param Sh
183+
* @param Sh {number}
184+
* @param use_coeff_ch_elec_2_3 {boolean} "true" pour ne pas utiliser le dernier coeff de chauffage électrique
183185
*/
184-
updateEPConso(productionElectricite, conso, Sh) {
185-
conso.ep_conso.ep_conso_ecs -= 2.3 * productionElectricite.conso_elec_ac_ecs;
186-
conso.ep_conso.ep_conso_ch -= 2.3 * productionElectricite.conso_elec_ac_ch;
187-
conso.ep_conso.ep_conso_fr -= 2.3 * productionElectricite.conso_elec_ac_fr;
188-
conso.ep_conso.ep_conso_eclairage -= 2.3 * productionElectricite.conso_elec_ac_eclairage;
189-
conso.ep_conso.ep_conso_totale_auxiliaire -=
190-
2.3 * productionElectricite.conso_elec_ac_auxiliaire;
191-
192-
const conso_elec =
193-
productionElectricite.conso_elec_ac_ecs +
194-
productionElectricite.conso_elec_ac_ch +
195-
productionElectricite.conso_elec_ac_fr +
196-
productionElectricite.conso_elec_ac_eclairage +
197-
productionElectricite.conso_elec_ac_auxiliaire;
198-
199-
conso.ep_conso.ep_conso_5_usages -= 2.3 * conso_elec;
200-
201-
conso.ep_conso.ep_conso_5_usages_m2 = Math.floor(conso.ep_conso.ep_conso_5_usages / Sh);
186+
updateEPConso(productionElectricite, conso, Sh, use_coeff_ch_elec_2_3) {
187+
if (use_coeff_ch_elec_2_3) {
188+
conso.ep_conso.ep_conso_ecs -= COEFF_EP_2_3 * productionElectricite.conso_elec_ac_ecs;
189+
conso.ep_conso.ep_conso_ch -= COEFF_EP_2_3 * productionElectricite.conso_elec_ac_ch;
190+
conso.ep_conso.ep_conso_fr -= COEFF_EP_2_3 * productionElectricite.conso_elec_ac_fr;
191+
conso.ep_conso.ep_conso_eclairage -=
192+
COEFF_EP_2_3 * productionElectricite.conso_elec_ac_eclairage;
193+
conso.ep_conso.ep_conso_totale_auxiliaire -=
194+
COEFF_EP_2_3 * productionElectricite.conso_elec_ac_auxiliaire;
195+
196+
const conso_elec =
197+
productionElectricite.conso_elec_ac_ecs +
198+
productionElectricite.conso_elec_ac_ch +
199+
productionElectricite.conso_elec_ac_fr +
200+
productionElectricite.conso_elec_ac_eclairage +
201+
productionElectricite.conso_elec_ac_auxiliaire;
202+
203+
conso.ep_conso.ep_conso_5_usages -= COEFF_EP_2_3 * conso_elec;
204+
205+
conso.ep_conso.ep_conso_5_usages_m2 = Math.floor(conso.ep_conso.ep_conso_5_usages / Sh);
206+
} else {
207+
conso.ep_conso.ep_conso_ecs -= COEFF_EP_1_9 * productionElectricite.conso_elec_ac_ecs;
208+
conso.ep_conso.ep_conso_ch -= COEFF_EP_1_9 * productionElectricite.conso_elec_ac_ch;
209+
conso.ep_conso.ep_conso_fr -= COEFF_EP_1_9 * productionElectricite.conso_elec_ac_fr;
210+
conso.ep_conso.ep_conso_eclairage -=
211+
COEFF_EP_1_9 * productionElectricite.conso_elec_ac_eclairage;
212+
conso.ep_conso.ep_conso_totale_auxiliaire -=
213+
COEFF_EP_1_9 * productionElectricite.conso_elec_ac_auxiliaire;
214+
215+
const conso_elec =
216+
productionElectricite.conso_elec_ac_ecs +
217+
productionElectricite.conso_elec_ac_ch +
218+
productionElectricite.conso_elec_ac_fr +
219+
productionElectricite.conso_elec_ac_eclairage +
220+
productionElectricite.conso_elec_ac_auxiliaire;
221+
222+
conso.ep_conso.ep_conso_5_usages -= COEFF_EP_1_9 * conso_elec;
223+
224+
conso.ep_conso.ep_conso_5_usages_m2 = Math.floor(conso.ep_conso.ep_conso_5_usages / Sh);
225+
}
202226
}
203227

204228
/**

src/conso.js

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,36 @@ import calc_conso_eclairage from './16_conso_eclairage.js';
33
import tvs from './tv.js';
44
import { tv } from './utils.js';
55

6-
const coef_ep = {
7-
'électricité ch': 2.3,
8-
'électricité ecs': 2.3,
9-
'électricité fr': 2.3,
10-
'électricité éclairage': 2.3,
11-
'électricité auxiliaire': 2.3
6+
export const COEFF_EP_2_3 = 2.3;
7+
export const COEFF_EP_1_9 = 1.9;
8+
9+
/**
10+
* Coeff de chauffage 1.9 au 01/01/2026
11+
* @link {https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000052134589}
12+
*/
13+
export const coef_ep = {
14+
'électricité ch': COEFF_EP_1_9,
15+
'électricité ecs': COEFF_EP_1_9,
16+
'électricité fr': COEFF_EP_1_9,
17+
'électricité éclairage': COEFF_EP_1_9,
18+
'électricité auxiliaire': COEFF_EP_1_9
1219
};
1320

14-
// 31 mars 2021
15-
// https://www.legifrance.gouv.fr/download/pdf?id=doxMrRr0wbfJVvtWjfDP4gHzzERt1iX0PtobthCE6A0=
21+
/**
22+
* Coeff de chauffage 2.3 avant le 01/01/2026
23+
*/
24+
export const coef_ep_2_3 = {
25+
'électricité ch': COEFF_EP_2_3,
26+
'électricité ecs': COEFF_EP_2_3,
27+
'électricité fr': COEFF_EP_2_3,
28+
'électricité éclairage': COEFF_EP_2_3,
29+
'électricité auxiliaire': COEFF_EP_2_3
30+
};
31+
32+
/**
33+
* Au 31 mars 2021
34+
* @link {https://www.legifrance.gouv.fr/download/pdf?id=doxMrRr0wbfJVvtWjfDP4gHzzERt1iX0PtobthCE6A0=}
35+
*/
1636
const coef_ges = {
1737
'bois – bûches': 0.03,
1838
'bois – granulés (pellets) ou briquettes': 0.03,
@@ -32,8 +52,11 @@ const coef_ges = {
3252
'électricité auxiliaire': 0.064
3353
};
3454

35-
// annexe 7
36-
// https://www.legifrance.gouv.fr/download/file/doxMrRr0wbfJVvtWjfDP4qE7zNsiFZL-4wqNyqoY-CA=/JOE_TEXTE
55+
/**
56+
* Annexe 7
57+
* @link {https://www.legifrance.gouv.fr/download/file/doxMrRr0wbfJVvtWjfDP4qE7zNsiFZL-4wqNyqoY-CA=/JOE_TEXTE}
58+
* @link {https://www.legifrance.gouv.fr/download/pdf?id=7hpbVyq228foxHzNM7WleDImAyXlPNb9zULelSY01V8=}
59+
*/
3760
const coef_cout = {
3861
'fioul domestique': 0.09142,
3962
'réseau de chauffage urbain': 0.0787,
@@ -44,7 +67,6 @@ const coef_cout = {
4467
'bois – bûches': 0.03201,
4568
'bois – plaquettes forestières': 0.03201,
4669
'bois – plaquettes d’industrie': 0.03201,
47-
// https://www.legifrance.gouv.fr/download/pdf?id=7hpbVyq228foxHzNM7WleDImAyXlPNb9zULelSY01V8=
4870
'gaz naturel': cout_gaz_naturel,
4971
"électricité d'origine renouvelable utilisée dans le bâtiment": cout_electricite,
5072
'électricité ch': cout_electricite,
@@ -161,7 +183,8 @@ export default function calc_conso(
161183
fr,
162184
prorataECS,
163185
prorataChauffage,
164-
dateDpe
186+
dateDpe,
187+
coeffEp
165188
) {
166189
const gen_ch = ch.reduce((acc, ch) => {
167190
const generateur_chauffage = ch.generateur_chauffage_collection.generateur_chauffage;
@@ -217,7 +240,7 @@ export default function calc_conso(
217240
gen_ecs,
218241
fr,
219242
'ep_conso',
220-
coef_ep,
243+
coeffEp,
221244
prorataECS,
222245
prorataChauffage
223246
),

src/engine.js

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import calc_besoin_ch from './9_besoin_ch.js';
77
import calc_chauffage, { tauxChargeForGenerator } from './9_chauffage.js';
88
import calc_confort_ete from './2021_04_13_confort_ete.js';
99
import calc_qualite_isolation from './2021_04_13_qualite_isolation.js';
10-
import calc_conso, { classe_bilan_dpe, classe_emission_ges } from './conso.js';
10+
import calc_conso, {
11+
classe_bilan_dpe,
12+
classe_emission_ges,
13+
coef_ep,
14+
coef_ep_2_3
15+
} from './conso.js';
1116
import {
1217
add_references,
1318
bug_for_bug_compat,
@@ -38,6 +43,10 @@ export function getVersion() {
3843
return LIB_VERSION;
3944
}
4045

46+
/**
47+
* @param dpe {FullDpe}
48+
* @return {FullDpe}
49+
*/
4150
export function calcul_3cl(dpe) {
4251
sanitize_dpe(dpe);
4352
const modele = enums.modele_dpe[dpe.administratif.enum_modele_dpe_id];
@@ -507,17 +516,35 @@ export function calcul_3cl(dpe) {
507516
clim,
508517
prorataECS,
509518
prorataChauffage,
510-
dateDpe
519+
dateDpe,
520+
coef_ep
511521
);
512522

513523
const production_electricite = productionENR.calculateEnr(
514524
dpe.logement.production_elec_enr,
515525
conso,
516526
Sh,
517527
th,
518-
zc_id
528+
zc_id,
529+
false
519530
);
520531

532+
const conso2_3 = calc_conso(
533+
Sh,
534+
zc_id,
535+
ca_id,
536+
vt_list,
537+
instal_ch,
538+
ecs,
539+
clim,
540+
prorataECS,
541+
prorataChauffage,
542+
dateDpe,
543+
coef_ep_2_3
544+
);
545+
546+
productionENR.calculateEnr(dpe.logement.production_elec_enr, conso2_3, Sh, th, zc_id, true);
547+
521548
// get all baie_vitree orientations
522549
const ph_list = env.plancher_haut_collection.plancher_haut || [];
523550
logement.sortie = {
@@ -529,8 +556,17 @@ export function calcul_3cl(dpe) {
529556
...conso
530557
};
531558

532-
const conso_coeff_1_9 = get_conso_coeff_1_9_2026(dpe);
533-
logement.sortie.ep_conso = { ...logement.sortie.ep_conso, ...conso_coeff_1_9 };
559+
logement.sortie.ep_conso = {
560+
...logement.sortie.ep_conso,
561+
coeff_2_3_classe_bilan_dpe: conso2_3.ep_conso.classe_bilan_dpe,
562+
coeff_2_3_ep_conso_5_usages: conso2_3.ep_conso.ep_conso_5_usages,
563+
coeff_2_3_ep_conso_5_usages_m2: conso2_3.ep_conso.ep_conso_5_usages_m2
564+
};
565+
566+
logement.sortie.ep_conso.classe_bilan_dpe_2026 = logement.sortie.ep_conso.classe_bilan_dpe;
567+
logement.sortie.ep_conso.ep_conso_5_usages_2026 = logement.sortie.ep_conso.ep_conso_5_usages;
568+
logement.sortie.ep_conso.ep_conso_5_usages_2026_m2 =
569+
logement.sortie.ep_conso.ep_conso_5_usages_m2;
534570

535571
return dpe;
536572
}
@@ -568,14 +604,14 @@ export function get_classe_ges_dpe(dpe) {
568604
* {@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.}
569605
*
570606
* @param dpe {FullDpe}
571-
* @returns {{ep_conso_5_usages_2026: number; ep_conso_5_usages_2026_m2: number; classe_bilan_dpe_2026: string}}
607+
* @returns {{ep_conso_5_usages: number; ep_conso_5_usages_m2: number; classe_bilan_dpe: string}}
572608
*/
573609
export function get_conso_coeff_1_9_2026(dpe) {
574610
const zc_id = dpe.logement.meteo.enum_zone_climatique_id;
575611
const ca_id = dpe.logement.meteo.enum_classe_altitude_id;
576612
const th = calc_th(dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id);
577613

578-
const ep_conso_5_usages_2026 =
614+
const ep_conso_5_usages =
579615
(0.9 / 1.3) *
580616
(Number(dpe.logement.sortie.ep_conso.ep_conso_5_usages) -
581617
Number(dpe.logement.sortie.ef_conso.conso_5_usages)) +
@@ -587,8 +623,8 @@ export function get_conso_coeff_1_9_2026(dpe) {
587623
else if (th === 'immeuble')
588624
Sh = Number(dpe.logement.caracteristique_generale.surface_habitable_immeuble);
589625

590-
const ep_conso_5_usages_2026_m2 = Math.floor(ep_conso_5_usages_2026 / Sh);
591-
const classe_bilan_dpe_2026 = classe_bilan_dpe(ep_conso_5_usages_2026_m2, zc_id, ca_id, Sh);
626+
const ep_conso_5_usages_m2 = Math.floor(ep_conso_5_usages / Sh);
627+
const classe_dpe = classe_bilan_dpe(ep_conso_5_usages_m2, zc_id, ca_id, Sh);
592628

593-
return { classe_bilan_dpe_2026, ep_conso_5_usages_2026_m2, ep_conso_5_usages_2026 };
629+
return { classe_bilan_dpe: classe_dpe, ep_conso_5_usages_m2, ep_conso_5_usages };
594630
}

0 commit comments

Comments
 (0)