Skip to content

Commit

Permalink
Merge pull request jzck#267 from RedFroggy/266GenerationMixte
Browse files Browse the repository at this point in the history
fix(fix-266): Mixte generation ECS + CH must use the same generator type
  • Loading branch information
jgavignet authored Nov 28, 2024
2 parents d99174e + a834268 commit 2aff29e
Show file tree
Hide file tree
Showing 10 changed files with 4,402 additions and 7 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
],
"dependencies": {
"@jest/globals": "^29.7.0",
"fast-xml-parser": "^4.3.3",
"fast-xml-parser": "^4.5.0",
"lodash": "^4.17.21"
},
"devDependencies": {
Expand Down
76 changes: 74 additions & 2 deletions src/13.2_generateur_combustion.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { bug_for_bug_compat, tv, tvColumnLines } from './utils.js';
import getFicheTechnique from './ficheTechnique.js';
import enums from './enums.js';

function criterePn(Pn, matcher) {
let critere_list = tvColumnLines('generateur_combustion', 'critere_pn', matcher);
Expand Down Expand Up @@ -57,12 +58,30 @@ function excel_to_js_exec(box, pn, E, F) {
* 3 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système à combustion : pn, rpn,rpint, autres données forfaitaires
* 4 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système à combustion : pn, rpn,rpint,qp0, autres données forfaitaires
* 5 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système à combustion : pn, rpn,rpint,qp0,temp_fonc_30,temp_fonc_100
*
* @param dpe {FullDpe}
* @param di {Donnee_intermediaire} données du générateur
* @param de {Donnee_entree} données du générateur
* @param type {'ecs'|'ch'}
* @param GV {number} déperdition de l'enveloppe
* @param tbase {number} température de fonctionnement du générateur
* @param methodeSaisie {number} méthode de saisie des caractéristiques du générateur
*/
export function tv_generateur_combustion(di, de, du, type, GV, tbase, methodeSaisie) {
export function tv_generateur_combustion(dpe, di, de, type, GV, tbase, methodeSaisie) {
const typeGenerateurKey = `enum_type_generateur_${type}_id`;
const enumTypeGenerateurId = de[typeGenerateurKey];
let enumTypeGenerateurId = de[typeGenerateurKey];
let row;

/**
* Certains DPE configurent mal les données du générateur ECS lorsque c'est un générateur mixte Chauffage + ECS
* Confrontation du type de générateur ECS et CH et prise en compte des données du générateur de chauffage
*
* enum_usage_generateur_id = 3 - 'chauffage + ecs'
*/
if (bug_for_bug_compat && type === 'ecs' && de.enum_usage_generateur_id === '3') {
enumTypeGenerateurId = checkEcsVsChauffageForMixteGeneration(dpe, enumTypeGenerateurId);
}

/**
* Si le type de générateur est
* 84 - ECS - système collectif par défaut en abscence d'information : chaudière fioul pénalisante
Expand Down Expand Up @@ -311,3 +330,56 @@ function updateGenerateur(dpe, ids, de, type) {
de[enumType] = newGenerateurId;
}
}

/**
* Vérifier que les informations du générateur ECS sont bien les mêmes que celles du générateur de chauffage
* Dans le cas d'une génération mixte, le type du générateur doit être le même
* @param dpe {FullDpe}
* @param ecsGenerateurId {string}
* @returns {string}
*/
function checkEcsVsChauffageForMixteGeneration(dpe, ecsGenerateurId) {
/**
* @type {InstallationChauffageItem[]}
*/
const installationsCh = dpe.logement.installation_chauffage_collection.installation_chauffage;

// Récupération des générateurs de chauffage ayant pour usage ECS + Chauffage également
const generateursChMixtes = installationsCh.reduce((acc, ch) => {
return acc.concat(
ch.generateur_chauffage_collection.generateur_chauffage.filter(
(value) => value.donnee_entree.enum_usage_generateur_id === '3'
)
);
}, []);

if (generateursChMixtes.length) {
const firstChGenerateurMixte = generateursChMixtes[0];
const firstChGenerateurMixteId =
firstChGenerateurMixte.donnee_entree.enum_type_generateur_ch_id;
const typeGenerateurEcs = enums.type_generateur_ecs;
const typeGenerateurCh = enums.type_generateur_ch;

const ecsGenerateurType = typeGenerateurEcs[ecsGenerateurId];
const chGenerateurType = typeGenerateurCh[firstChGenerateurMixteId];

// Si les 2 générateurs n'ont pas le même type
if (ecsGenerateurType !== chGenerateurType) {
// Recherche de l'identifiant du générateur ECS identique au générateur de chauffage
const newEcsGenerateurId = Object.keys(typeGenerateurEcs).find(
(key) => typeGenerateurEcs[key] === typeGenerateurCh[firstChGenerateurMixteId]
);

if (newEcsGenerateurId) {
console.error(`
Le générateur mixte ECS + CH identifié pour la génération ECS '${ecsGenerateurType}' n'est pas le même que celui identifié pour le générateur de chauffage '${chGenerateurType}'.
On conserve le type de générateur de chauffage '${chGenerateurType}' pour la suite des calculs ECS.
`);

return newEcsGenerateurId;
}
}
}

return ecsGenerateurId;
}
2 changes: 1 addition & 1 deletion src/13.2_generateur_combustion_ch.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ export function calc_generateur_combustion_ch(dpe, di, de, du, em_ch, GV, ca_id,
const tbase = Tbase[ca][zc.slice(0, 2)];

const methodeSaisie = parseInt(de.enum_methode_saisie_carac_sys_id);
tv_generateur_combustion(di, de, du, 'ch', GV, tbase, methodeSaisie);
tv_generateur_combustion(dpe, di, de, 'ch', GV, tbase, methodeSaisie);

const type_gen_ch_list = tvColumnIDs('temp_fonc_30', 'type_generateur_ch');
if (type_gen_ch_list.includes(de.enum_type_generateur_ch_id)) {
Expand Down
2 changes: 1 addition & 1 deletion src/14_generateur_ecs.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ export default function calc_gen_ecs(dpe, gen_ecs, ecs_di, ecs_de, GV, ca_id, zc
const tbase = Tbase[ca][zc.slice(0, 2)];

const methodeSaisie = parseInt(de.enum_methode_saisie_carac_sys_id);
tv_generateur_combustion(di, de, du, 'ecs', GV, tbase, methodeSaisie);
tv_generateur_combustion(dpe, di, de, 'ecs', GV, tbase, methodeSaisie);

if (bug_for_bug_compat) {
if (di.qp0 < 1) {
Expand Down
6 changes: 5 additions & 1 deletion test/corpus.json
Original file line number Diff line number Diff line change
Expand Up @@ -182,5 +182,9 @@
"2364E0984413P",
"2213E1322779R",
"2464E1550878T",
"2492E0831922R"
"2492E0831922R",
"2395E2052253O",
"2395E2052243E",
"2325E0656049S",
"2395E2052218F"
]
Loading

0 comments on commit 2aff29e

Please sign in to comment.