Skip to content

fix(ecs): reconstituer le rdim des installations ECS individuelles multiples en immeuble - #321

Open
elliot-redfroggy wants to merge 1 commit into
mainfrom
fix/ecs-multi-installations-individuelles-rdim
Open

elliot-redfroggy wants to merge 1 commit into
mainfrom
fix/ecs-multi-installations-individuelles-rdim

Conversation

@elliot-redfroggy

Copy link
Copy Markdown
Collaborator

Contexte

La PR #288 reconstitue rdim = nombre_logement pour une installation ECS individuelle unique décrite
pour un logement type dans un DPE immeuble. Certains logiciels (3.0.x, 2.0.x, 1.1.x…) exportent de la
même façon plusieurs installations individuelles : pour chaque installation i,
surface_habitable = Sh_i d'un logement type, nombre_logement = N_i, pas de rdim, avec
Σ Sh_i × N_i = SH.

Sans rdim, Open3CL attribue à chaque installation le besoin d'un « logement moyen » et ne remultiplie pas
sa consommation par N_i. Sur ces DPE, la conso ECS sort à environ 25 % de la valeur ADEME.

Règle Tribu

  • DPE.Core/Calcul_batiment.cs l. 581-588 (Calcul_Cecs) : la boucle traite chaque installation
    indépendamment
    . Pour une installation individuelle en immeuble collectif :
    Ratio = Sh_ecs × Rdim / SH, puis Becs = Becs1 × Ratio / Rdim, soit le besoin d'un logement.
  • DPE.Core/Calcul_batiment.cs l. 1660-1662 (Calcul_Cecs_installation_2) :
    Cecs_i = Becs1 × Ratio × (1 − Fecs) × Iecs / Rdim, puis Cecs_bat += Cecs_i × Rdim.
  • DPE.Core/Calcul_installation_ECS.cs l. 75 : Rdim est lu tel quel dans la saisie, sans
    agrégation entre installations.
  • Guide Tribu TE-211208, « Particularités d'une répétition de systèmes d'ECS individuel dans un
    immeuble collectif » : Sh_ecs = surface affectée à une installation, Rdim = nombre
    d'installations identiques.
  • Méthode 3CL, § 17.1.3.2 : les consommations d'un appartement moyen sont « multipliées par le nombre
    d'appartements équipés du type de système considéré, puis additionnées ». Le § 11.4 (0,5 × Becs
    par système) concerne un logement équipé de deux systèmes, pas ce cas.

Contrôle sur l'export ADEME (3cl_tribu 1.4.23 à 1.4.25) : besoin_ecs_i = Becs_immeuble × Sh_i / SH
et conso_ecs = Σ conso_ecs_i × N_i à 0,01 % près. Exemples : 2244E3039157K (2 inst., N = 2 et 6),
2275E2551585V (N = 7 et 7), 2293E0504226Y (N = 7 et 5).

Correctif

src/11_rdim_ecs_individuelle_unique.js gagne deux fonctions,
rdimsImplicitesEcsIndividuellesMultiples et reconstituerRdimEcsIndividuellesMultiples, appelées
dans engine.js juste après la reconstitution de l'installation unique. La règle s'applique si :

Elle pose alors rdim_i = N_i (1 si absent) et rdim_reconstitue = true sur chaque installation, et
réutilise la chaîne existante : besoin / rdim dans 11_ecs.js, conso × rdim dans conso.js.

La garde de surface écarte les exports où Sh_i est déjà la surface desservie (Σ Sh_i = SH, N_i parfois
fractionnaires). Sur le corpus mixte, aucun cas n'est proche de la limite : les cas retenus sont à
≤ 0,3 % et les cas exclus à ≥ 10 %.

Mesure corpus (runner officiel, origin/main 221ee3a → branche)

Corpus DPE KO main KO branche KO→OK OK→KO
appartement_individuel_chauffage_collectif_2025 9 926 541 541 0 0
appartement_individuel_chauffage_individuel_2025 9 893 452 452 0 0
immeuble_chauffage_collectif 9 739 1 059 1 049 10 0
immeuble_chauffage_individuel 9 923 1 384 1 371 14 1
immeuble_chauffage_mixte 9 570 2 822 2 584 238 0
individuel_a_partir_dpe_immeuble_2026 9 811 4 133 4 133 0 0
logement_individuel_2025 9 831 651 651 0 0
maison_individuelle_2025 9 771 768 768 0 0
maison_individuelle_2026 non mesuré (DPE absents en local) – – – –
Total 11 810 11 549 262 1

Le seul OK→KO est 2359E0854624N (logiciel 4.1.1, 3cl_tribu 1.4.25.1), et son export est
incohérent : la conso ECS ADEME (4 048 kWh) est inférieure au besoin ECS de l'immeuble (7 068 kWh)
alors que l'immeuble est équipé de ballons électriques (rendement < 1). Le logiciel a calculé avec
Rdim = 1 tout en exportant N = 2 et 4, si bien que seuls 2 logements sur 6 sont couverts. Ce DPE n'est
pas reproductible de façon cohérente.

Contrôle des scénarios de travaux (un seul DPE modifié, sans purge)

  • Harnais murs, fenêtres, joule→PAC et chaudière (600 DPE) : 596 résultats identiques à main. Les
    4 DPE qui diffèrent sont des immeubles concernés par la règle (2371E1607682T, 2344E0419229Z,
    2286E1357778P, 2321E0986207Y). L'état initial s'y rapproche de l'ADEME, « sans purge » reste égal à
    « purge », et le gain des travaux est du même ordre que sur main (−50 contre −46, −133 contre −135,
    −52 contre −55, −53 contre −57 kWh/m²).
  • Cas témoin 2469E2650374G : 533 G → 324 E, q4pa 2, identique à main.
  • Scénario ECS ajouté : remplacement du ballon de l'installation 1 sur 60 DPE immeubles concernés.
    • Le rdim est reconstitué aussi sur le DPE modifié.
    • Seule l'installation modifiée bouge, et Δconso_totale = Δconso_inst1 × rdim_1.
    • Le sens de variation est le même que sur main.
    • Réinjecter la sortie (rdim désormais présent) donne un résultat identique.
    • État initial dans les 5 % de l'ADEME : 60/60 contre 0/60 sur main.

Tests

  • src/11_rdim_ecs_individuelle_unique.spec.js couvre :
    • le cas nominal et les valeurs en chaîne ;
    • nombre_logement absent ;
    • les bornes de la tolérance de 5 % ;
    • Σ Sh = SH ;
    • LICIEL (tous N = 1) ;
    • un rdim exporté ;
    • une installation collective ;
    • maison ou appartement ;
    • une installation unique ;
    • les données manquantes ou invalides ;
    • le positionnement de rdim et du flag.
  • src/engine.spec.js vérifie l'appel avant calc_ecs.
  • Couverture du fichier modifié : 100 %. Prettier et ESLint passent.
  • Suite vitest complète : 35 échecs préexistants, identiques sur main et sur la branche ; 13 tests
    ajoutés, tous verts.

…ltiples en immeuble

Dans un DPE immeuble décrivant plusieurs installations ECS individuelles
pour un logement type (surface_habitable d'un logement, nombre_logement = N,
sans rdim, avec Σ Sh × N ≈ SH à 5 % près et au moins un N > 1), chaque
installation reçoit rdim = nombre_logement, comme le fait Tribu
(Calcul_batiment.cs l. 581-588 et 1660-1662) : besoin ramené à un logement,
conso remultipliée par N à l'agrégation.

Étend le cas de l'installation unique (#288) à plusieurs installations.
@michaeldesigaud
michaeldesigaud self-requested a review October 30, 2026 15:31

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants