From ef19b5c52cf9399acc6ff6086b0d8c6b7a7dbcc5 Mon Sep 17 00:00:00 2001 From: Hermes Bot Date: Sat, 7 Nov 2026 19:23:27 +0000 Subject: [PATCH] =?UTF-8?q?fix(ventilation):=20r=C3=A8gle=20unique=20de=20?= =?UTF-8?q?reprise=20de=20la=20ligne=20q4pa=5Fconv=20du=20dpe=20en=20analy?= =?UTF-8?q?se=20de=20corpus=20(#332)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avec compat_for_corpus_analysis, la ligne tv_q4pa_conv_id du DPE est reprise en entier dès qu'elle couvre la période de construction et ne s'écarte du recalcul que dans le sens « surfaces isolées » et/ou « avec joints ». Cette règle remplace les cas #312 et #294 et couvre #332 (menuiseries exportées sans joint, ligne 12 « avec joints »). Mode par défaut inchangé. Nouvelle architecture (features/) non modifiée. --- src/4_ventilation.js | 108 +++++++++------------ src/4_ventilation.spec.js | 145 ++++++++++++++++++++-------- test/fixtures/2606E1314062H.xml | 38 ++++++++ test/open3cl-q4pa-ligne-dpe.spec.js | 39 ++++++++ 4 files changed, 225 insertions(+), 105 deletions(-) create mode 100644 test/fixtures/2606E1314062H.xml diff --git a/src/4_ventilation.js b/src/4_ventilation.js index e34dcdee0..345aa61c4 100644 --- a/src/4_ventilation.js +++ b/src/4_ventilation.js @@ -23,18 +23,6 @@ function tv_debits_ventilation(di, de, du) { } } -/** - * Vrai si le DPE comporte au moins une menuiserie (baie ou porte) et qu'aucune n'exporte - * le champ `presence_joint` (issue #294). - */ -export function presenceJointNonRenseignee(porte_list, bv_list) { - const menuiseries = (porte_list || []).concat(bv_list || []); - return ( - menuiseries.length > 0 && - menuiseries.every((m) => [undefined, null, ''].includes(m.donnee_entree?.presence_joint)) - ); -} - /** * Vrai si la ligne de la table `q4pa_conv` couvre la période de construction du DPE. */ @@ -45,13 +33,22 @@ export function isLigneQ4paMemePeriode(rowQ4paConv, cg) { } /** - * Vrai si la ligne de la table `q4pa_conv` considère les surfaces isolées (`isolation_surfaces` = 1) - * alors que le recalcul à partir des parois les donne non isolées (`isolation_surfaces` = 0). + * Vrai si la ligne `q4pa_conv` du DPE ne s'écarte des valeurs recalculées que dans le sens + * « surfaces isolées » et/ou « avec joints » : chaque critère porté par la ligne est supérieur ou + * égal à la valeur recalculée, et au moins un est strictement supérieur. Un critère absent de la + * ligne (ex. joints sur les lignes « surfaces isolées ») n'est pas comparé. */ -export function isLigneQ4paSurfacesIsolees(rowQ4paConv, isolationSurfacesRecalculee) { - return ( - String(rowQ4paConv.isolation_surfaces) === '1' && String(isolationSurfacesRecalculee) === '0' - ); +export function isLigneQ4paPlusFavorable(rowQ4paConv, isolationSurfaces, presenceJoints) { + let plusFavorable = false; + for (const [valeurLigne, valeurRecalculee] of [ + [rowQ4paConv.isolation_surfaces, isolationSurfaces], + [rowQ4paConv.presence_joints_menuiserie, presenceJoints] + ]) { + if ([undefined, null, ''].includes(valeurLigne)) continue; + if (String(valeurLigne) < String(valeurRecalculee)) return false; + if (String(valeurLigne) > String(valeurRecalculee)) plusFavorable = true; + } + return plusFavorable; } function tv_q4pa_conv(di, de, cg, mur_list, ph_list, porte_list, bv_list) { @@ -116,63 +113,46 @@ function tv_q4pa_conv(di, de, cg, mur_list, ph_list, porte_list, bv_list) { }); if (rowQ4paConv) { - let ligneDpeReprise = false; /** * Le moteur de référence reçoit Q4Pa_conv en entrée : c'est le logiciel de saisie qui choisit - * la ligne de la table. Certains logiciels (LICIEL notamment) retiennent une ligne dont le - * critère `isolation_surfaces` contredit l'isolation déclarée des parois (ex. ligne 10 « avant - * 1948, surfaces isolées », 2, alors que toutes les parois sont non isolées → ligne 1, 4,6). - * Si la ligne saisie correspond à la période de construction du DPE, on la reprend en entier - * (isolation et joints) pour reproduire le calcul du logiciel. + * la ligne de la table. Certains logiciels retiennent une ligne qui contredit les parois ou + * les menuiseries déclarées (ex. ligne 10 « avant 1948, surfaces isolées » alors que les + * parois sont non isolées (#312), ligne 12 « avant 1948, avec joints » alors que les + * menuiseries sont sans joint (#332) ou n'exportent pas `presence_joint` (#294)). * - * Cette reprise n'est faite qu'avec l'option `compat_for_corpus_analysis` (analyse du corpus - * ADEME). Par défaut, la ligne contradictoire est seulement signalée et q4pa_conv est - * recalculé selon la méthode : un contrôle de cohérence du DPE doit détecter l'erreur et un - * scénario de travaux ne doit pas la propager. + * Avec l'option `compat_for_corpus_analysis` (analyse du corpus ADEME) uniquement, une seule + * règle : si la ligne du DPE couvre la période de construction et qu'elle ne s'écarte du + * recalcul que dans le sens « surfaces isolées » / « avec joints », elle est reprise en + * entier, pour reproduire le calcul du logiciel. * - * Sens unique : la reprise ne s'applique que si la ligne indique des surfaces isolées alors que - * le recalcul les donne non isolées. Dans le sens inverse (ligne « non isolées », recalcul - * « isolées »), le DPE a pu être modifié par l'appelant (scénario d'isolation des parois) : - * la valeur recalculée est utilisée. - * @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §4 - */ - if (rowQ4paConv.isolation_surfaces !== isolation_surfaces) { - if ( - compat_for_corpus_analysis && - isLigneQ4paSurfacesIsolees(rowQ4paConv, isolation_surfaces) && - isLigneQ4paMemePeriode(rowQ4paConv, cg) - ) { - console.error( - `Calcul de hperm pour la ventilation ${de.description}. Le DPE considère isolation_surfaces = ${rowQ4paConv.isolation_surfaces} \n alors que ce devrait être isolation_surfaces = ${isolation_surfaces}. La ligne q4pa_conv ${de.tv_q4pa_conv_id} du DPE est conservée.` - ); - isolation_surfaces = rowQ4paConv.isolation_surfaces; - pjt = rowQ4paConv.presence_joints_menuiserie === '1' ? '1' : '0'; - ligneDpeReprise = true; - } else { - console.error( - `Calcul de hperm pour la ventilation ${de.description}. Le DPE considère isolation_surfaces = ${rowQ4paConv.isolation_surfaces} \n alors que ce devrait être isolation_surfaces = ${isolation_surfaces}. La valeur recalculée isolation_surfaces = ${isolation_surfaces} est utilisée.` - ); - } - } - - /** - * Issue #294 : aucune menuiserie n'exporte `presence_joint`. Aucune donnée ne contredit alors - * la ligne q4pa_conv retenue par le logiciel (ex. ligne 12 « avant 1948 avec joints », 2,5) : - * on reprend sa valeur `presence_joints_menuiserie` au lieu de considérer les menuiseries - * sans joint. Uniquement avec l'option `compat_for_corpus_analysis`. + * Sinon (mode par défaut, ligne d'une autre période ou écart dans le sens inverse, cas d'un + * scénario de travaux qui améliore les parois ou les menuiseries) : q4pa_conv est recalculé + * selon la méthode et les écarts sont seulement signalés. * @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §4 */ if ( compat_for_corpus_analysis && - !ligneDpeReprise && - presenceJointNonRenseignee(porte_list, bv_list) + isLigneQ4paMemePeriode(rowQ4paConv, cg) && + isLigneQ4paPlusFavorable(rowQ4paConv, isolation_surfaces, pjt) ) { - pjt = rowQ4paConv.presence_joints_menuiserie === '1' ? '1' : '0'; - } else if (!ligneDpeReprise && rowQ4paConv.presence_joints_menuiserie !== pjt) { console.error( - `Calcul de hperm pour la ventilation ${de.description}. Le DPE considère presence_joints_menuiserie = ${rowQ4paConv.presence_joints_menuiserie} - alors que ce devrait être presence_joints_menuiserie = ${pjt}. La valeur recalculée presence_joints_menuiserie = ${pjt} est utilisée.` + `Calcul de hperm pour la ventilation ${de.description}. La ligne q4pa_conv ${de.tv_q4pa_conv_id} du DPE (isolation_surfaces = ${rowQ4paConv.isolation_surfaces}, presence_joints_menuiserie = ${rowQ4paConv.presence_joints_menuiserie}) + contredit les valeurs recalculées (isolation_surfaces = ${isolation_surfaces}, presence_joints_menuiserie = ${pjt}). La ligne du DPE est conservée.` ); + isolation_surfaces = rowQ4paConv.isolation_surfaces === '1' ? '1' : '0'; + pjt = rowQ4paConv.presence_joints_menuiserie === '1' ? '1' : '0'; + } else { + if (rowQ4paConv.isolation_surfaces !== isolation_surfaces) { + console.error( + `Calcul de hperm pour la ventilation ${de.description}. Le DPE considère isolation_surfaces = ${rowQ4paConv.isolation_surfaces} \n alors que ce devrait être isolation_surfaces = ${isolation_surfaces}. La valeur recalculée isolation_surfaces = ${isolation_surfaces} est utilisée.` + ); + } + if (rowQ4paConv.presence_joints_menuiserie !== pjt) { + console.error( + `Calcul de hperm pour la ventilation ${de.description}. Le DPE considère presence_joints_menuiserie = ${rowQ4paConv.presence_joints_menuiserie} + alors que ce devrait être presence_joints_menuiserie = ${pjt}. La valeur recalculée presence_joints_menuiserie = ${pjt} est utilisée.` + ); + } } } } diff --git a/src/4_ventilation.spec.js b/src/4_ventilation.spec.js index f9c9b487b..4f66b57e4 100644 --- a/src/4_ventilation.spec.js +++ b/src/4_ventilation.spec.js @@ -24,9 +24,8 @@ vi.mock('./5_conso_ventilation.js', () => ({ const { default: calc_ventilation, calc_hperm, - presenceJointNonRenseignee, isLigneQ4paMemePeriode, - isLigneQ4paSurfacesIsolees + isLigneQ4paPlusFavorable } = await import('./4_ventilation.js'); const { tv } = await import('./utils.js'); const { default: calc_pvent } = await import('./5_conso_ventilation.js'); @@ -446,11 +445,12 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => const ROW_12 = { q4pa_conv: '2.5', tv_q4pa_conv_id: '12', + enum_periode_construction_id: '1', isolation_surfaces: '0', presence_joints_menuiserie: '1' }; - test('aucune menuiserie ne renseigne le champ : joints du DPE repris, sans message', async () => { + test('aucune menuiserie ne renseigne le champ : ligne du DPE reprise', async () => { const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); const { calc_ventilation_bug, tvBug } = await chargerAvecBug(ROW_12); const baies = [{ donnee_entree: { surface_totale_baie: 10 } }]; @@ -462,7 +462,9 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => 'q4pa_conv', expect.objectContaining({ isolation_surfaces: '0', presence_joints_menuiserie: '1' }) ); - expect(errorSpy).not.toHaveBeenCalled(); + expect(errorSpy).toHaveBeenCalledWith( + expect.stringContaining('La ligne du DPE est conservée') + ); errorSpy.mockRestore(); }); @@ -482,13 +484,37 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => ); }); - test('presence_joint renseigné à 0 : la valeur recalculée prime et l’écart est signalé', async () => { + /** + * Issue #332 : menuiseries toutes exportées sans joint alors que la ligne du DPE est « avec + * joints » (2606E1314062H). Même règle : la ligne de la même période est reprise. + */ + test('presence_joint renseigné à 0 (#332) : ligne « avec joints » du DPE reprise', async () => { const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); const { calc_ventilation_bug, tvBug } = await chargerAvecBug(ROW_12); const baies = [{ donnee_entree: { surface_totale_baie: 10, presence_joint: 0 } }]; calc_ventilation_bug(vtLigne12(), CG, 'th', 80, 100, murNonIsole, [], [], baies); + expect(tvBug).toHaveBeenLastCalledWith( + 'q4pa_conv', + expect.objectContaining({ isolation_surfaces: '0', presence_joints_menuiserie: '1' }) + ); + expect(errorSpy).toHaveBeenCalledWith( + expect.stringContaining('La ligne q4pa_conv 12 du DPE') + ); + errorSpy.mockRestore(); + }); + + test('ligne « avec joints » d’une autre période : joints recalculés et écart signalé', async () => { + const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + const { calc_ventilation_bug, tvBug } = await chargerAvecBug({ + ...ROW_12, + enum_periode_construction_id: '2' + }); + const baies = [{ donnee_entree: { surface_totale_baie: 10, presence_joint: 0 } }]; + + calc_ventilation_bug(vtLigne12(), CG, 'th', 80, 100, murNonIsole, [], [], baies); + expect(tvBug).toHaveBeenLastCalledWith( 'q4pa_conv', expect.objectContaining({ presence_joints_menuiserie: '0' }) @@ -498,6 +524,27 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => ); errorSpy.mockRestore(); }); + + test('ligne « sans joints » alors que les menuiseries ont des joints : joints recalculés', async () => { + const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + const { calc_ventilation_bug, tvBug } = await chargerAvecBug({ + ...ROW_12, + tv_q4pa_conv_id: '1', + presence_joints_menuiserie: '0' + }); + const baies = [{ donnee_entree: { surface_totale_baie: 10, presence_joint: 1 } }]; + + calc_ventilation_bug(vtLigne12(), CG, 'th', 80, 100, murNonIsole, [], [], baies); + + expect(tvBug).toHaveBeenLastCalledWith( + 'q4pa_conv', + expect.objectContaining({ presence_joints_menuiserie: '1' }) + ); + expect(errorSpy).toHaveBeenCalledWith( + expect.stringContaining('La valeur recalculée presence_joints_menuiserie = 1 est utilisée') + ); + errorSpy.mockRestore(); + }); }); /** @@ -533,9 +580,9 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => expect.objectContaining({ isolation_surfaces: '1', presence_joints_menuiserie: '0' }) ); expect(errorSpy).toHaveBeenCalledWith( - expect.stringContaining('La ligne q4pa_conv 10 du DPE est conservée') + expect.stringContaining('La ligne q4pa_conv 10 du DPE') ); - // les joints de la ligne reprise concordent : pas de second message + // un seul message pour la ligne reprise expect(errorSpy).toHaveBeenCalledTimes(1); errorSpy.mockRestore(); }); @@ -607,7 +654,7 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => errorSpy.mockRestore(); }); - test('presence_joint non exporté : seuls les joints de la ligne du DPE sont repris', async () => { + test('presence_joint non exporté : la ligne n’est pas reprise, même pour les joints', async () => { vi.spyOn(console, 'error').mockImplementation(() => {}); const { calc_ventilation_bug, tvBug } = await chargerAvecBug(ROW_12); const { murs } = surfacesIsolantes(); @@ -617,7 +664,7 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => expect(tvBug).toHaveBeenLastCalledWith( 'q4pa_conv', - expect.objectContaining({ isolation_surfaces: '1', presence_joints_menuiserie: '1' }) + expect.objectContaining({ isolation_surfaces: '1', presence_joints_menuiserie: '0' }) ); }); }); @@ -716,31 +763,6 @@ describe('calc_ventilation - compatibilité bug_for_bug_compat activée', () => }); }); -describe('presenceJointNonRenseignee', () => { - test('aucune menuiserie : faux', () => { - expect(presenceJointNonRenseignee([], [])).toBe(false); - expect(presenceJointNonRenseignee(undefined, undefined)).toBe(false); - }); - - test('champ absent, null ou vide sur toutes les menuiseries : vrai', () => { - expect( - presenceJointNonRenseignee( - [{ donnee_entree: { presence_joint: '' } }], - [{ donnee_entree: {} }, { donnee_entree: { presence_joint: null } }] - ) - ).toBe(true); - }); - - test('au moins une menuiserie renseignée (même à 0) : faux', () => { - expect( - presenceJointNonRenseignee( - [{ donnee_entree: { presence_joint: 0 } }], - [{ donnee_entree: {} }] - ) - ).toBe(false); - }); -}); - describe('isLigneQ4paMemePeriode', () => { test('période contenue dans une liste « a|b|c » : vrai', () => { expect( @@ -766,18 +788,59 @@ describe('isLigneQ4paMemePeriode', () => { }); }); -describe('isLigneQ4paSurfacesIsolees', () => { +describe('isLigneQ4paPlusFavorable', () => { test('ligne « surfaces isolées » et recalcul « non isolées » : vrai', () => { - expect(isLigneQ4paSurfacesIsolees({ isolation_surfaces: '1' }, '0')).toBe(true); - expect(isLigneQ4paSurfacesIsolees({ isolation_surfaces: 1 }, 0)).toBe(true); + expect(isLigneQ4paPlusFavorable({ isolation_surfaces: '1' }, '0', '0')).toBe(true); + expect(isLigneQ4paPlusFavorable({ isolation_surfaces: 1 }, '0', '1')).toBe(true); + }); + + test('ligne « avec joints » et recalcul « sans joints », isolation concordante : vrai', () => { + expect( + isLigneQ4paPlusFavorable( + { isolation_surfaces: '0', presence_joints_menuiserie: '1' }, + '0', + '0' + ) + ).toBe(true); + }); + + test('ligne « non isolées » et recalcul « isolées » : faux, même si la ligne a des joints', () => { + expect(isLigneQ4paPlusFavorable({ isolation_surfaces: '0' }, '1', '0')).toBe(false); + expect( + isLigneQ4paPlusFavorable( + { isolation_surfaces: '0', presence_joints_menuiserie: '1' }, + '1', + '0' + ) + ).toBe(false); }); - test('ligne « non isolées » et recalcul « isolées » : faux (sens inverse)', () => { - expect(isLigneQ4paSurfacesIsolees({ isolation_surfaces: '0' }, '1')).toBe(false); + test('ligne « sans joints » et recalcul « avec joints » : faux', () => { + expect( + isLigneQ4paPlusFavorable( + { isolation_surfaces: '0', presence_joints_menuiserie: '0' }, + '0', + '1' + ) + ).toBe(false); }); test('valeurs concordantes ou ligne sans critère : faux', () => { - expect(isLigneQ4paSurfacesIsolees({ isolation_surfaces: '1' }, '1')).toBe(false); - expect(isLigneQ4paSurfacesIsolees({}, '0')).toBe(false); + expect(isLigneQ4paPlusFavorable({ isolation_surfaces: '1' }, '1', '0')).toBe(false); + expect( + isLigneQ4paPlusFavorable( + { isolation_surfaces: '0', presence_joints_menuiserie: '1' }, + '0', + '1' + ) + ).toBe(false); + expect(isLigneQ4paPlusFavorable({}, '0', '0')).toBe(false); + expect( + isLigneQ4paPlusFavorable( + { isolation_surfaces: null, presence_joints_menuiserie: '' }, + '0', + '0' + ) + ).toBe(false); }); }); diff --git a/test/fixtures/2606E1314062H.xml b/test/fixtures/2606E1314062H.xml new file mode 100644 index 000000000..e9116f53b --- /dev/null +++ b/test/fixtures/2606E1314062H.xml @@ -0,0 +1,38 @@ + + 2606E1314062H + ACTIF +2.62026-05-132026-05-151log 2.51 (bld 826.8901)152574.1.106161000AE01351 rue Saint Bernardin06270VILLENEUVE-LOUBET1 rue Saint Bernardin 06270 VILLENEUVE-LOUBET1 rue Saint Bernardin 06270 VILLENEUVE-LOUBET12026-04-1406161_0700_0000157f48f52-2851-4179-b256-a79ad92520c91 Rue Saint Bernardin 06270 Villeneuve-Loubet1Rue Saint Bernardin0616106270Villeneuve-Loubethousenumber0.9609045454545451032499.36293024.41212026-05-15T13:27:55+02:00190012160.389999389648422.248111012Mur 13a72e836-c030-41a1-9e7f-82ebc7ee135d28322120.087220.0872185022022102.052.05Mur 2 Sud452eda2e-da34-4638-a779-c975865c31eb1116.1886.188185022032111.701244808965261.70124Mur 3 Ouest498dd412-db89-46c6-b51d-a33264facfd61146.1886.188185022032111.701244808965261.70124Mur 4 Nord110081dc-8616-4e95-98c1-a46dc900ccbd11225.46623.846185022032111.701244808965261.70124Mur 52a6ffa79-a653-49a5-b568-16ba4e45c83328322314.16114.161185022022102.052.05Mur 6 Sud006baef1-00b7-46b1-9251-0945cf415d9f11123.18423.184185022032111.701244808965261.70124Mur 7 Ouestcabcd9f4-284f-4dc7-b51a-a79fc8bfae0a1145.464.29185022032111.701244808965261.70124Mur 8 Nord81c76740-cf8a-4610-9942-a188e0b39a3011222.51219.002185022032111.701244808965261.70124Mur 91774c832-0dba-4c89-95cd-45f54aab448528322312.49512.495185022022102.052.05Plancher 1c3b91010-edb7-41bb-a606-8ba1cd4804072832230.3911112100222Plafond 1f0bde874-a4cf-4a3d-bf40-b57809cc506f1159.909999389648401113359810.832.5Fenêtre 194b97de9-a0b3-4b88-bcb8-384849cc87b8110081dc-8616-4e95-98c1-a46dc900ccbd110.54126232160134554011820005110221912.62.52.32.30.4411Fenêtre 2979fd52f-6298-4ca4-b1b8-53bce890112f110081dc-8616-4e95-98c1-a46dc900ccbd111.082113015613401472000589221915.85.44.64.60.5211Fenêtre 386a5a643-c39d-497c-8ec4-5ece505ccf3581c76740-cf8a-4610-9942-a188e0b39a30113.51326232160134554011820005110221912.62.52.32.30.4411Fenêtre 43121e2b1-9c7e-487c-ac6a-d6632e760dbccabcd9f4-284f-4dc7-b51a-a79fc8bfae0a111.17126232160134554011820005110241912.62.52.32.30.4411Fenêtre 592094feb-4fe2-4544-8cdf-44d5ba76c68ff0bde874-a4cf-4a3d-bf40-b57809cc506f110.4824422116015483401000590221912.9330.4711Mur 1 (vers le haut)-b41eb165-7a90-4d04-9276-1ca93d9131433a72e836-c030-41a1-9e7f-82ebc7ee135d298.44120.50Mur 2 Sud (vers le haut)-250f77dc-7a6a-4332-875b-ff919b5255b7452eda2e-da34-4638-a779-c975865c31eb292.6120.50.86Mur 3 Ouest (vers le haut)-f24d3fe8-a9f6-4906-9853-4cd010d31abe498dd412-db89-46c6-b51d-a33264facfd6292.6120.50.86Mur 4 Nord (vers le haut)-4a9d704f-1323-492e-a14d-75e0bcec5c63110081dc-8616-4e95-98c1-a46dc900ccbd2910.7120.50.86Mur 5 (vers le haut)-2691bedd-3953-4b84-84be-d192599438462a6ffa79-a653-49a5-b568-16ba4e45c833295.95120.50Mur 6 Sud (vers le haut)-5c5bf176-6784-49f5-84ed-f37621449006006baef1-00b7-46b1-9251-0945cf415d9f2911.04120.50.86Mur 7 Ouest (vers le haut)-85b6db56-f493-4a59-aa57-8f85a94fbc1fcabcd9f4-284f-4dc7-b51a-a79fc8bfae0a292.6120.50.86Mur 8 Nord (vers le haut)-76aae657-e049-45c8-aecb-a9cf70c0316a81c76740-cf8a-4610-9942-a188e0b39a302910.72120.50.86Mur 9 (vers le haut)-bee2aa69-c16f-419b-a787-f2f92611746a1774c832-0dba-4c89-95cd-45f54aab4485295.95120.50Mur 1 (vers le bas)-7cae7ee8-77a9-43dc-8411-45fc25b1d7723a72e836-c030-41a1-9e7f-82ebc7ee135d298.44120.50Mur 2 Sud (vers le bas)-1956e43c-905d-4a63-9d8b-f772255e4273452eda2e-da34-4638-a779-c975865c31eb292.6120.50.86Mur 3 Ouest (vers le bas)-33314a09-a53b-4834-a3af-03be9bb0c2ad498dd412-db89-46c6-b51d-a33264facfd6292.6120.50.86Mur 4 Nord (vers le bas)-66fefd6e-fae2-4b87-8251-e452a2823974110081dc-8616-4e95-98c1-a46dc900ccbd2910.7120.50.86Mur 5 (vers le bas)-c1db1fc1-0fab-4527-920c-dca4e8a3f48b2a6ffa79-a653-49a5-b568-16ba4e45c833295.95120.50Mur 6 Sud (vers le bas)-222195b2-5452-4a99-a8ef-c6e761656edc006baef1-00b7-46b1-9251-0945cf415d9f2911.04120.50.86Mur 7 Ouest (vers le bas)-c0a2db36-5086-4dd3-af06-ec388e4e66eccabcd9f4-284f-4dc7-b51a-a79fc8bfae0a292.6120.50.86Mur 8 Nord (vers le bas)-4c5f1f8b-78ce-4b47-9a7a-73b4ce852a3881c76740-cf8a-4610-9942-a188e0b39a302910.72120.50.86Mur 9 (vers le bas)-c1fa86f0-d6a3-4aa9-912e-2b5389b6a1e31774c832-0dba-4c89-95cd-45f54aab4485295.95120.50Mur 1 (à gauche du refend)-9acf1ae7-bccb-47a9-a77e-5223606fa4e63a72e836-c030-41a1-9e7f-82ebc7ee135d642.38140.50Mur 2 Sud (à gauche du refend)-c00bba86-fb30-41ba-9547-8cb4ccea9743452eda2e-da34-4638-a779-c975865c31eb642.38140.50.73Mur 3 Ouest (à gauche du refend)-b9c314d1-c0ca-43da-8511-61d20a940d95498dd412-db89-46c6-b51d-a33264facfd6642.38140.50.73Mur 4 Nord (à gauche du refend)-b04dfe02-2b97-4394-8e7d-d1099f69178a110081dc-8616-4e95-98c1-a46dc900ccbd642.38140.50.73Mur 5 (à gauche du refend)-1e6bc1ea-2ab3-441a-983f-bfa7426541e52a6ffa79-a653-49a5-b568-16ba4e45c833642.38140.50Mur 6 Sud (à gauche du refend)-0fefd7c7-f369-4460-bece-ccfd9ffc47ea006baef1-00b7-46b1-9251-0945cf415d9f642.1140.50.73Mur 7 Ouest (à gauche du refend)-db0510b2-0a23-47ea-b187-4d8f7e4fe529cabcd9f4-284f-4dc7-b51a-a79fc8bfae0a642.1140.50.73Mur 8 Nord (à gauche du refend)-64931b32-5164-4670-8069-fd8455facc8981c76740-cf8a-4610-9942-a188e0b39a30642.1140.50.73Mur 9 (à gauche du refend)-cecd90d9-1c7e-476e-b859-f603e87bf9e41774c832-0dba-4c89-95cd-45f54aab4485642.1140.50Mur 1 (à droite du refend)-1f0197f8-b6a9-4886-9123-326fe47232643a72e836-c030-41a1-9e7f-82ebc7ee135d642.38140.50Mur 2 Sud (à droite du refend)-fc48fc0b-0847-415d-9b8b-3f627aca8ce9452eda2e-da34-4638-a779-c975865c31eb642.38140.50.73Mur 3 Ouest (à droite du refend)-6cdb45fb-5f95-4a49-a86e-4eb3c28c6a8a498dd412-db89-46c6-b51d-a33264facfd6642.38140.50.73Mur 4 Nord (à droite du refend)-7697b2e0-8ff6-4dea-bf25-dce10a6153be110081dc-8616-4e95-98c1-a46dc900ccbd642.38140.50.73Mur 5 (à droite du refend)-22cd8607-3c61-4c60-bb87-3fd15a3d44902a6ffa79-a653-49a5-b568-16ba4e45c833642.38140.50Mur 6 Sud (à droite du refend)-9b076ffa-e2a3-47aa-8ad7-089cea3c32da006baef1-00b7-46b1-9251-0945cf415d9f642.1140.50.73Mur 7 Ouest (à droite du refend)-8ad59664-5d57-452c-8b6d-9722121ebe31cabcd9f4-284f-4dc7-b51a-a79fc8bfae0a642.1140.50.73Mur 8 Nord (à droite du refend)-2f8952d5-6809-48ec-9c17-2ae988c2368e81c76740-cf8a-4610-9942-a188e0b39a30642.1140.50.73Mur 9 (à droite du refend)-89db45ea-4e96-4fda-998b-1efee89adbe81774c832-0dba-4c89-95cd-45f54aab4485642.1140.50Fenêtre 1-Mur 4 Norde3ee14bf-ebd9-4226-9e0e-98ac443b49c694b97de9-a0b3-4b88-bcb8-384849cc87b8110081dc-8616-4e95-98c1-a46dc900ccbd7531510.38Fenêtre 2-Mur 4 Nord7006da39-5414-4184-96f1-fc9328db8d59979fd52f-6298-4ca4-b1b8-53bce890112f110081dc-8616-4e95-98c1-a46dc900ccbd7561510.38Fenêtre 3-Mur 8 Nord30a7ef7a-0799-4eae-9261-fe8a1fbbc86486a5a643-c39d-497c-8ec4-5ece505ccf3581c76740-cf8a-4610-9942-a188e0b39a307513.21510.38Fenêtre 4-Mur 7 Ouest007e387f-ee0c-4e67-9590-580c4ebb17bd3121e2b1-9c7e-487c-ac6a-d6632e760dbccabcd9f4-284f-4dc7-b51a-a79fc8bfae0a754.41510.3860.389999389648462e8699c-c97c-4ebb-a73c-f020fc5bcdf211212525002.5139.213683407289245.7876975372314Chauffe-eau vertical ElectriqueEcs_02c91c0a-2eed-46eb-abc5-8eaeecb197ea11160.3899993896484112210.871025346.578527961446471.066137661590.975285664322075.02642084788Chauffe-eau verticalE02c91c0a-2eed-46eb-abc5-8eaeecb197ea69211221801111590.975285664322075.026420847880.740777871462791Chauffage sans solaireInstallation 160.38999938964841111110985.472961415113651.76598125358678.1118811540710784.3834286212Convecteur électrique NFCEmet_c9ed3138-29a0-411c-945f-961e49cbb6d260.389999389648411111384021110.860.9510.99Convecteur électrique NFCGe3b370bc-4396-421c-9ed4-971a68dcfd1798111291118678.1118811540710784.383428621239.213683407289245.787697537231485.0013809445207140.689543211809049.725299493408218.414054.5428348.37338094452118.91682400518893.13161325575.995850940.1414034093471950.11900631414263121647.454066127331156.590471162387070.6218082192001.85909499359131104.109319641113146.86850449371310985.472961415113651.76598125351025.346578527961446.47106613766008678.1118811540710784.38342862121590.975285664322075.02642084788114.5936472418210000000000010383.6808140602171.94371450581816488.412367290420490.32825726053022.85300483043942.55019961097217.7279270273350000000000019728.9935467144326.693057561053E685.570870163774851.966330071834103.413389775134.8767124078647.9069614616065700000000000796.8912214003813.2C1811222633242824000000000002167000000008678.111881154071590.9752856643210383.68081406021685.570870163774103.413389775796.89122140038181133221671000111.763004014922684443Mur 4 Nord Pierre de taille moellons constitués d'un seul matériau / inconnu donnant sur Extérieur, non isolé +Mur 6 Sud Pierre de taille moellons constitués d'un seul matériau / inconnu donnant sur Extérieur, non isolé +Mur 8 Nord Pierre de taille moellons constitués d'un seul matériau / inconnu donnant sur Extérieur, non isolé1Pas de plancher déperditif2Plafond 1 Inconnu donnant sur Extérieur, isolé3Fenêtres battantes, Menuiserie PVC - double vitrage vertical (e = 16 mm) avec Fermeture +Fenêtres battantes, Menuiserie Bois - simple vitrage vertical avec Fermeture +Fenêtres battantes, Menuiserie Bois - double vitrage horizontal (e = 16 mm)4Convecteur électrique NFC Electrique, installation en 2015, individuel5Chauffe-eau vertical Electrique installation en 2020, individuel, production par semi-accumulation 6Ventilation naturelle par conduit8Convecteur électrique NFC : +avec régulation pièce par pièce, intermittence par pièce avec minimum de température91Surface20.09 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceLocal chauffé2Doublageabsence de doublage2OrientationSud21Surface6.19 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationSud21Surface6.19 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationOuest21Surface23.85 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationNord21Surface14.16 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceLocal chauffé2Doublageabsence de doublage2OrientationEst21Surface23.18 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationSud21Surface4.29 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationOuest21Surface19 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceExtérieur2Doublageindéterminé ou lame d'air inf 15 mm2OrientationNord21Surface12.5 m²2Matériau murPierre de taille moellons constitués d'un seul matériau / inconnu2Epaisseur mur50 cm2Isolation : oui / non / inconnueNon2Bâtiment construit en matériaux anciens Non2Inertie Légère2Type d'adjacenceLocal chauffé2Doublageabsence de doublage2OrientationEst22Upb0 (saisie directe ou type plancher inconnu)2 W/m²K1Surface30.39 m²2Isolation : oui / non / inconnueNon2Inertie Lourde1Type d'adjacenceLocal chauffé23Uph0 (saisie directe ou type plafond inconnu)2,5 W/m²K1Surface59.91 m²2Isolation : oui / non / inconnueOui2Année isolation 19001Inertie Lourde1Type d'adjacenceExtérieur24Surface de baies0.54 m²2Type de vitrageDouble vitrage vertical2Epaisseur lame air16 mm2Présence couche peu émissiveNon2Gaz de remplissageArgon ou Krypton2Double fenêtreNon2Inclinaison vitrageVerticale (Inclinaison ≥ 75°)2Type menuiserieMenuiserie PVC2Positionnement de la menuiserieNu intérieur2Type ouvertureFenêtres battantes2Type voletsJalousie accordéon, fermeture à lames orientables y compris les vénitiens extérieurs tout métal, volets battants ou persiennes avec ajours fixes2Orientation des baiesNord2Type de masque prochesAbsence de masque proche2Type de masques lointains Absence de masque lointain2Présence de jointsNon2Type d'adjacenceExtérieur2Largeur approximative du dormant5 cm24Surface de baies1.08 m²2Type de vitrageSimple vitrage vertical2Présence couche peu émissiveNon2Double fenêtreNon2Inclinaison vitrageVerticale (Inclinaison ≥ 75°)2Type menuiserieMenuiserie Bois2Positionnement de la menuiserieNu intérieur2Type ouvertureFenêtres battantes2Type voletsJalousie accordéon, fermeture à lames orientables y compris les vénitiens extérieurs tout métal, volets battants ou persiennes avec ajours fixes2Orientation des baiesNord2Type de masque prochesAbsence de masque proche2Type de masques lointains Absence de masque lointain2Présence de jointsNon2Type d'adjacenceExtérieur2Largeur approximative du dormant5 cm24Surface de baies3.51 m²2Type de vitrageDouble vitrage vertical2Epaisseur lame air16 mm2Présence couche peu émissiveNon2Gaz de remplissageArgon ou Krypton2Double fenêtreNon2Inclinaison vitrageVerticale (Inclinaison ≥ 75°)2Type menuiserieMenuiserie PVC2Positionnement de la menuiserieNu intérieur2Type ouvertureFenêtres battantes2Type voletsJalousie accordéon, fermeture à lames orientables y compris les vénitiens extérieurs tout métal, volets battants ou persiennes avec ajours fixes2Orientation des baiesNord2Type de masque prochesAbsence de masque proche2Type de masques lointains Absence de masque lointain2Présence de jointsNon2Type d'adjacenceExtérieur2Largeur approximative du dormant5 cm24Surface de baies1.17 m²2Type de vitrageDouble vitrage vertical2Epaisseur lame air16 mm2Présence couche peu émissiveNon2Gaz de remplissageArgon ou Krypton2Double fenêtreNon2Inclinaison vitrageVerticale (Inclinaison ≥ 75°)2Type menuiserieMenuiserie PVC2Positionnement de la menuiserieNu intérieur2Type ouvertureFenêtres battantes2Type voletsJalousie accordéon, fermeture à lames orientables y compris les vénitiens extérieurs tout métal, volets battants ou persiennes avec ajours fixes2Orientation des baiesOuest2Type de masque prochesAbsence de masque proche2Type de masques lointains Absence de masque lointain2Présence de jointsNon2Type d'adjacenceExtérieur2Largeur approximative du dormant5 cm24Surface de baies0.48 m²2Type de vitrageDouble vitrage horizontal2Epaisseur lame air16 mm2Présence couche peu émissiveNon2Gaz de remplissageAir2Double fenêtreNon2Inclinaison vitrageHorizontale (25° ≤ Inclinaison < 75°)2Type menuiserieMenuiserie Bois2Positionnement de la menuiserieNu intérieur2Type ouvertureFenêtres battantes2Type voletsSans2Orientation des baiesNord2Type de masque prochesAbsence de masque proche2Type de masques lointains Absence de masque lointain2Présence de jointsNon2Type d'adjacenceExtérieur2Largeur approximative du dormant5 cm26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique8.44 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique10.7 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique5.95 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique11.04 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique10.72 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique5.95 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique8.44 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique10.7 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique5.95 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique11.04 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique2.6 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique10.72 m26Type de pont thermiquePlancher intermédiaire lourd - Mur lourd2Longueur du pont thermique5.95 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.38 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueRefend - Mur2Longueur du pont thermique2.1 m26Type de pont thermiqueMenuiseries - Mur2Longueur du pont thermique3 m2Largeur du dormant menuiserie Lp5 cm2Retour isolation autour menuiserieNon2Position menuiseriesNu intérieur26Type de pont thermiqueMenuiseries - Mur2Longueur du pont thermique6 m2Largeur du dormant menuiserie Lp5 cm2Retour isolation autour menuiserieNon2Position menuiseriesNu intérieur26Type de pont thermiqueMenuiseries - Mur2Longueur du pont thermique13.2 m2Largeur du dormant menuiserie Lp5 cm2Retour isolation autour menuiserieNon2Position menuiseriesNu intérieur26Type de pont thermiqueMenuiseries - Mur2Longueur du pont thermique4.4 m2Largeur du dormant menuiserie Lp5 cm2Retour isolation autour menuiserieNon2Position menuiseriesNu intérieur27Type d’installation de chauffageInstallation de chauffage sans solaire2Type générateurConvecteur électrique NFC2Surface chauffée60.39 m²2Année d'installation20152Energie utiliséeElectricité2Présence d'une ventouseNon2Présence d'une veilleuseNon2Type émetteurConvecteur électrique NFC2Surface chauffée par émetteur60.39 m²2Type de chauffageDivisé avec régulation pièce par pièce2Equipement d'intermittencePar pièce avec minimum de température2Présence de comptageNon2Type de distributionConvecteur électrique NFC (60.39m²): Pas de réseau de distribution28Type générateurChauffe-eau vertical Electrique2Année installation20202Energie utiliséeElectricité2Type production ECSIndividuel2Présence d'une veilleuseNon3Pièces alimentées contiguësNon2Production en volume habitableOui2Volume de stockage80 L2Type de ballonChauffe-eau vertical2Catégorie de ballonAutres ou inconnue210Type de ventilationVentilation naturelle par conduit2Année installation19001Plusieurs façades exposéesOui2Menuiseries avec jointsOui211Département 06 - Alpes Maritimes2Altitude164Type de bienAppartement2Année de construction19005Surface de référence du logement60.392Nombre de niveaux du logement22Hauteur moyenne sous plafond2.24213Faire vérifier et compléter les isolants par un professionnelisolation9Utiliser une programmateur pour le faire fonctionner uniquement en heures creuseschauffe-eau5Bien nettoyer l'interieur du dormant de fenetre, pour une aération correctvitrages4Eteindre les lumières lorsque personne n'utilise la pièce.éclairage3Ne jamais placer un meuble devant un émetteur de chaleurradiateur1Ne jamais boucher les entrées d'airventilationDes travaux peuvent vous permettre d'améliorer significativement l’efficacité énergétique de votre logement et ainsi de faire des économies d’énergie, d’améliorer son confort, de le valoriser et de le rendre plus écologique. Le pack de travaux vous permet de réaliser les travaux prioritaires, et le pack d’aller vers un logement très performant.1159.752827422996239741951Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W3Isolation des toiture avec une pente <60° : L'isolation des toitures devrait permettre d'atteindre une résistance thermique minimal au moins égale à 4 m².k/W. +Veiller à ce que l'isolation soit continue sur toute la surface du plancher.Veiller à ce que l'isolation soit continue sur toute la surface du plancher. Si la couche est rapportée à un pare -vapeur, lacérer celui-ci avant la pose de la nouvelle couche.R = 4m2.k/W287.20012733216456097130953Isolation des toiture avec une pente <60° : L'isolation des toitures devrait permettre d'atteindre une résistance thermique minimal au moins égale à 4 m².k/W. +Veiller à ce que l'isolation soit continue sur toute la surface du plancher.Veiller à ce que l'isolation soit continue sur toute la surface du plancher. Si la couche est rapportée à un pare -vapeur, lacérer celui-ci avant la pose de la nouvelle couche.R = 4m2.k/W5Pompe à chaleur air/air +Multi split : Remplacement du système de chauffage par une pompe à chaleur Air-Air Multisplit.En copropriété, vérifier les contraintes techniques et le règlement de copropriété 387.20012733216456397136951Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W1Isolation des murs par l'extérieur : Si un ravalement de façade est prévu, effectuer une isolation par l'extérieur avec des retours d'isolants au niveau des tableaux des baies quand cela est possible. +Envisager prioritairement une isolation des murs par l'extérieur, elle permet de limiter les ponts thermiques. +Mise en place d'un isolant avec une résistance de 6m²k/WTravaux pouvant nécessiter une autorisation d'urbanismeR = 6 m².K/W3Isolation des toiture avec une pente <60° : L'isolation des toitures devrait permettre d'atteindre une résistance thermique minimal au moins égale à 4 m².k/W. +Veiller à ce que l'isolation soit continue sur toute la surface du plancher.Veiller à ce que l'isolation soit continue sur toute la surface du plancher. Si la couche est rapportée à un pare -vapeur, lacérer celui-ci avant la pose de la nouvelle couche.R = 4m2.k/W5Pompe à chaleur air/air +Multi split : Remplacement du système de chauffage par une pompe à chaleur Air-Air Multisplit.En copropriété, vérifier les contraintes techniques et le règlement de copropriété \ No newline at end of file diff --git a/test/open3cl-q4pa-ligne-dpe.spec.js b/test/open3cl-q4pa-ligne-dpe.spec.js index 24caaa90f..960f7efbe 100644 --- a/test/open3cl-q4pa-ligne-dpe.spec.js +++ b/test/open3cl-q4pa-ligne-dpe.spec.js @@ -81,3 +81,42 @@ describe('q4pa_conv et ligne tv_q4pa_conv_id du DPE - issue #312', () => { expect(output.logement.sortie.ep_conso.classe_bilan_dpe).toBe('E'); }); }); + +/** + * Non-régression https://github.com/Open3CL/engine/issues/332 + * + * Le DPE 2606E1314062H (appartement avant 1948) retient la ligne q4pa_conv 12 « avant 1948, avec + * joints » (2,5) alors que ses cinq baies exportent presence_joint = 0 (ligne 1 : 4,6). + * - option `compat_for_corpus_analysis` : la ligne du DPE est reprise (même règle que #312) ; + * - par défaut : q4pa_conv est recalculé selon la méthode. + */ +describe('q4pa_conv et ligne « avec joints » du DPE - issue #332', () => { + test('2606E1314062H avec compat_for_corpus_analysis : q4pa_conv, hperm et conso_ch identiques au DPE', () => { + set_bug_for_bug_compat(); + set_tv_match_optimized_version(); + /** @type {FullDpe} */ + const input = getAdemeFileJson('2606E1314062H'); + const output = calcul_3cl(structuredClone(input), CORPUS_ANALYSIS_OPTIONS); + + const ventIn = [input.logement.ventilation_collection.ventilation].flat()[0]; + const ventOut = [output.logement.ventilation_collection.ventilation].flat()[0]; + expect(ventOut.donnee_intermediaire.q4pa_conv).toBe(2.5); + expect(ventOut.donnee_intermediaire.hperm).toBeCloseTo(ventIn.donnee_intermediaire.hperm, 1); + expect(output.logement.sortie.ef_conso.conso_ch).toBeCloseTo( + input.logement.sortie.ef_conso.conso_ch, + 0 + ); + expect(output.logement.sortie.ep_conso.classe_bilan_dpe).toBe('E'); + }); + + test('2606E1314062H par défaut : q4pa_conv recalculé selon la méthode (menuiseries sans joint)', () => { + set_bug_for_bug_compat(); + set_tv_match_optimized_version(); + /** @type {FullDpe} */ + const input = getAdemeFileJson('2606E1314062H'); + const output = calcul_3cl(structuredClone(input)); + + const ventOut = [output.logement.ventilation_collection.ventilation].flat()[0]; + expect(ventOut.donnee_intermediaire.q4pa_conv).toBe(4.6); + }); +});