Skip to content

Commit

Permalink
Merge pull request #245 from RedFroggy/244MethodeSaisie
Browse files Browse the repository at this point in the history
fix(fix-244): Use enum_methode_saisie_carac_sys_id to know if the data should be calculated
  • Loading branch information
jgavignet authored Nov 21, 2024
2 parents d564589 + 07be8da commit 87ffe6d
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 83 deletions.
16 changes: 14 additions & 2 deletions src/10_clim.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { tv, requestInputID } from './utils.js';
import { requestInputID, tv } from './utils.js';

function tv_seer(di, de, du, zc_id) {
const matcher = {
Expand All @@ -23,7 +23,19 @@ export default function calc_clim(clim, bfr, bfr_dep, zc_id, Sh) {
di.besoin_fr = bfr * rs;
di.besoin_fr_depensier = bfr_dep * rs;

tv_seer(di, de, du, zc_id);
/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "caractéristiques saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles des chaudières présentées sur les bases
* de données professionnelles peuvent être utilisées."
*
* 6 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système thermodynamique : scop/cop/eer
* 7 - déterminé à partir du rset/rsee( etude rt2012/re2020)
* 8 - seer saisi pour permettre la saisie de réseau de froid ou de système de climatisations qui ne sont pas éléctriques
*/
const methodeSaisie = parseInt(de.enum_methode_saisie_carac_sys_id);
if (![6, 7, 8].includes(methodeSaisie) || !di.eer) {
tv_seer(di, de, du, zc_id);
}

di.conso_fr = (0.9 * di.besoin_fr) / di.eer;
di.conso_fr_depensier = (0.9 * di.besoin_fr_depensier) / di.eer;
Expand Down
29 changes: 27 additions & 2 deletions src/12.4_pac.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,31 @@
import { tv, requestInputID } from './utils.js';
import { requestInputID, tv } from './utils.js';

export function tv_scop(di, de, du, zc_id, ed_id, type) {
/**
* Calcul ou récupération des paramètres scop ou cop
* @param di {Donnee_intermediaire}
* @param de {Donnee_entree}
* @param du {Object}
* @param zc_id {string}
* @param ed_id {string|null}
* @param type {'ecs'|'ch'}
*/
export function scopOrCop(di, de, du, zc_id, ed_id, type) {
/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "caractéristiques saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles présentées sur les bases
* de données professionnelles peuvent être utilisées."
*
* 6 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système thermodynamique : scop/cop/eer
*/
if (de.enum_methode_saisie_carac_sys_id === '6') {
di.rg = di.scop || di.cop;
di.rg_dep = di.scop || di.cop;
} else {
tv_scop(di, de, du, zc_id, ed_id, type);
}
}

function tv_scop(di, de, du, zc_id, ed_id, type) {
const matcher = {
enum_zone_climatique_id: zc_id
};
Expand Down
84 changes: 57 additions & 27 deletions src/13.2_generateur_combustion.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,19 @@ function excel_to_js_exec(box, pn, E, F) {
return result;
}

export function tv_generateur_combustion(di, de, du, type, GV, tbase) {
const typeGenerateur = `enum_type_generateur_${type}_id`;
const enum_type_generateur_id = de[typeGenerateur];

/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "caractéristiques saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles des chaudières présentées sur les bases
* de données professionnelles peuvent être utilisées."
*
* 2 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système à combustion : pn, autres données forfaitaires
* 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
*/
export function tv_generateur_combustion(di, de, du, type, GV, tbase, methodeSaisie) {
const typeGenerateurKey = `enum_type_generateur_${type}_id`;
const enumTypeGenerateurId = de[typeGenerateurKey];
let row;

/**
Expand All @@ -60,34 +69,42 @@ export function tv_generateur_combustion(di, de, du, type, GV, tbase) {
* 119 - CH - système collectif par défaut en abscence d'information : chaudière fioul pénalisante
* On garde l'information à partir de tv_generateur_combustion_id.
*/
if (bug_for_bug_compat && (
(type === 'ecs' && enum_type_generateur_id === '84')
|| (type === 'ch' && enum_type_generateur_id === '119')
) && de.tv_generateur_combustion_id
if (
bug_for_bug_compat &&
((type === 'ecs' && enumTypeGenerateurId === '84') ||
(type === 'ch' && enumTypeGenerateurId === '119')) &&
de.tv_generateur_combustion_id
) {
const tv_row = tv('generateur_combustion', {
row = tv('generateur_combustion', {
tv_generateur_combustion_id: de.tv_generateur_combustion_id
});
console.warn(
`Utilisation de tv_generateur_combustion_id pour le générateur ${de.description}.`
);
row = tv_row;
console.warn(`
Le générateur ${de.description} est caractérisé 'système collectif par défaut'.
Utilisation de tv_generateur_combustion_id pour récupération des informations techniques du générateur.
`);
} else {
// Calcul de la puissance nominale si non définie
if (!di.pn) {
// some engines don't set ms_carac_sys properly...
// so instead we just check if di.pn is set or not
di.pn = (1.2 * GV * (19 - tbase)) / 0.95 ** 3;
}

let matcher = {};
matcher[typeGenerateur] = enum_type_generateur_id;
matcher[typeGenerateurKey] = enumTypeGenerateurId;
matcher.critere_pn = criterePn(di.pn / 1000, matcher);

row = tv('generateur_combustion', matcher);
}

if (!row) console.error('!! pas de valeur forfaitaire trouvée pour generateur_combustion !!');
if (!row) {
console.error(
'Pas de valeur forfaitaire trouvée pour le générateur à combustion ${de.description}'
);
return;
}

de.tv_generateur_combustion_id = Number(row.tv_generateur_combustion_id);
if (Number(row.pn)) di.pn = Number(row.pn) * 1000;

const E = E_tab[de.presence_ventouse];
const F = F_tab[de.presence_ventouse];

Expand All @@ -97,16 +114,29 @@ export function tv_generateur_combustion(di, de, du, type, GV, tbase) {
* ratio de virtualisation
* 17.2.1 - Génération d’un DPE à l’appartement / Traitement des usages collectifs
*/
if (row.rpn)
di.rpn = excel_to_js_exec(row.rpn, di.pn / (de.ratio_virtualisation || 1), E, F) / 100;
if (type === 'ch' && row.rpint) di.rpint = excel_to_js_exec(row.rpint, di.pn, E, F) / 100;
if (row.qp0_perc) {
const qp0_calc = excel_to_js_exec(row.qp0_perc, di.pn, E, F);
if (row.qp0_perc.includes('Pn')) di.qp0 = qp0_calc * 1000;
else di.qp0 = qp0_calc * di.pn;
} else di.qp0 = 0;
if (Number(row.pveil)) di.pveil = Number(row.pveil);
else di.pveil = 0;
if ([3, 4, 5].includes(methodeSaisie)) {
if (row.rpn) {
di.rpn = excel_to_js_exec(row.rpn, di.pn / (de.ratio_virtualisation || 1), E, F) / 100;
}
if (type === 'ch' && row.rpint) {
di.rpint = excel_to_js_exec(row.rpint, di.pn, E, F) / 100;
}
}

if ([4, 5].includes(methodeSaisie)) {
if (row.qp0_perc) {
const qp0_calc = excel_to_js_exec(row.qp0_perc, di.pn, E, F);
di.qp0 = row.qp0_perc.includes('Pn') ? qp0_calc * 1000 : qp0_calc * di.pn;
} else {
di.qp0 = 0;
}
}

if (methodeSaisie === 1 || !di.pveilleuse) {
di.pveil = Number(row.pveil) || 0;
} else {
di.pveil = di.pveilleuse || 0;
}
}

/**
Expand Down
15 changes: 13 additions & 2 deletions src/13.2_generateur_combustion_ch.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,21 @@ export function calc_generateur_combustion_ch(dpe, di, de, du, em_ch, GV, ca_id,
const zc = enums.zone_climatique[zc_id];
const tbase = Tbase[ca][zc.slice(0, 2)];

tv_generateur_combustion(di, de, du, 'ch', GV, tbase);
const methodeSaisie = parseInt(de.enum_methode_saisie_carac_sys_id);
tv_generateur_combustion(di, de, du, '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)) {
tv_temp_fonc_30_100(di, de, du, em_ch, ac);
/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "caractéristiques saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles des chaudières présentées sur les bases
* de données professionnelles peuvent être utilisées."
*
* 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
*/
if (methodeSaisie !== 5 || !di.temp_fonc_30 || !di.temp_fonc_100) {
tv_temp_fonc_30_100(di, de, du, em_ch, ac);
}
}

// Mise à jour du type de générateur si besoin
Expand Down
40 changes: 12 additions & 28 deletions src/14_generateur_ecs.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import enums from './enums.js';
import {
tv,
tvColumnIDs,
bug_for_bug_compat,
getVolumeStockageFromDescription,
requestInput,
requestInputID,
Tbase,
bug_for_bug_compat,
getVolumeStockageFromDescription
tv,
tvColumnIDs
} from './utils.js';
import { tv_scop } from './12.4_pac.js';
import {
tv_generateur_combustion,
updateGenerateurCombustion
} from './13.2_generateur_combustion.js';
import { conso_aux_gen } from './15_conso_aux.js';
import { scopOrCop } from './12.4_pac.js';

function tv_pertes_stockage(di, de) {
let vb;
Expand Down Expand Up @@ -229,15 +229,7 @@ export default function calc_gen_ecs(dpe, gen_ecs, ecs_di, ecs_de, GV, ca_id, zc
const combustion_ids = tvColumnIDs('generateur_combustion', 'type_generateur_ecs');
let Iecs, Iecs_dep;
if (pac_ids.includes(type_generateur_id)) {
/**
* Si la méthode de saisie est "6 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système thermodynamique : scop/cop/eer"
*/
if (de.enum_methode_saisie_carac_sys_id === '6') {
di.rg = di.scop || di.cop;
di.rg_dep = di.scop || di.cop;
} else {
tv_scop(di, de, du, zc_id, null, 'ecs');
}
scopOrCop(di, de, du, zc_id, null, 'ecs');

const cop = di.scop || di.cop;
Iecs = 1 / cop;
Expand All @@ -258,21 +250,13 @@ export default function calc_gen_ecs(dpe, gen_ecs, ecs_di, ecs_de, GV, ca_id, zc
const zc = enums.zone_climatique[zc_id];
const tbase = Tbase[ca][zc.slice(0, 2)];

/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles des chaudières présentées sur les bases
* de données professionnelles peuvent être utilisées."
*/
if (de.enum_methode_saisie_carac_sys_id === '1') {
tv_generateur_combustion(di, de, du, 'ecs', GV, tbase);
} else {
di.pveil = di.pveilleuse || 0;
const methodeSaisie = parseInt(de.enum_methode_saisie_carac_sys_id);
tv_generateur_combustion(di, de, du, 'ecs', GV, tbase, methodeSaisie);

if (bug_for_bug_compat) {
if (di.qp0 < 1) {
di.qp0 *= 1000;
console.warn(`Correction di.qp0 pour le générateur ECS. Passage de la valeur en W`);
}
if (bug_for_bug_compat) {
if (di.qp0 < 1) {
di.qp0 *= 1000;
console.warn(`Correction di.qp0 pour le générateur ECS. Passage de la valeur en W`);
}
}

Expand Down
25 changes: 3 additions & 22 deletions src/9_generateur_ch.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import enums from './enums.js';
import { requestInput, requestInputID, tv, tvColumnIDs } from './utils.js';
import { tv_scop } from './12.4_pac.js';
import { conso_aux_gen } from './15_conso_aux.js';
import { conso_ch } from './9_conso_ch.js';
import { calc_generateur_combustion_ch } from './13.2_generateur_combustion_ch.js';
import { scopOrCop } from './12.4_pac.js';

function pertes_gen_ch(Bch_hp_j, pn) {
const pertes = (1.3 * Bch_hp_j) / (0.3 * pn);
Expand Down Expand Up @@ -162,16 +162,7 @@ export function calc_generateur_ch(

if (em) {
const ed_id = em.donnee_entree.enum_type_emission_distribution_id;

/**
* Si la méthode de saisie est "6 - caractéristiques saisies à partir de la plaque signalétique ou d'une documentation technique du système thermodynamique : scop/cop/eer"
*/
if (de.enum_methode_saisie_carac_sys_id === '6') {
di.rg = di.scop || di.cop;
di.rg_dep = di.scop || di.cop;
} else {
tv_scop(di, de, du, zc_id, ed_id, 'ch');
}
scopOrCop(di, de, du, zc_id, ed_id, 'ch');
} else {
console.error(
`Emetteur de chauffage non trouvé pour le générateur ${de.description}, les valeurs intermédiaires saisies sont prises en compte`
Expand All @@ -181,17 +172,7 @@ export function calc_generateur_ch(
di.rg_dep = di.scop || di.cop;
}
} else if (isCombustionGenerator) {
/**
* Si la méthode de saisie n'est pas "Valeur forfaitaire" mais "saisies"
* Documentation 3CL : "Pour les installations récentes ou recommandées, les caractéristiques réelles des chaudières présentées sur les bases
* de données professionnelles peuvent être utilisées."
*/
if (de.enum_methode_saisie_carac_sys_id === '1' || !di.rendement_generation) {
calc_generateur_combustion_ch(dpe, di, de, du, em_ch, GV, ca_id, zc_id, ac);
} else {
di.rg = di.rendement_generation;
di.rg_dep = di.rendement_generation;
}
calc_generateur_combustion_ch(dpe, di, de, du, em_ch, GV, ca_id, zc_id, ac);
} else {
tv_rendement_generation(di, de, du);
}
Expand Down

0 comments on commit 87ffe6d

Please sign in to comment.