@open3cl/engine
Version:
Open Source 3CL-DPE engine
123 lines (105 loc) • 4.26 kB
JavaScript
import { bug_for_bug_compat, tv } from './utils.js';
import { TvsStore } from './core/tv/infrastructure/tvs.store.js';
const tvsStore = new TvsStore();
export function rendement_emission(em, rg = 1) {
const re = em.donnee_intermediaire.rendement_emission;
const rd = em.donnee_intermediaire.rendement_distribution;
const rr = em.donnee_intermediaire.rendement_regulation;
return rg * re * rd * rr;
}
function tv_rendement_distribution_ch(di, de) {
let row;
row = tvsStore.getRendementDistributionCh(
de.enum_type_emission_distribution_id,
de.reseau_distribution_isole
);
if (!row && de.tv_rendement_distribution_ch_id) {
// Find rendement distribution by id if it exists
row = tvsStore.getRendementDistributionChById(de.tv_rendement_distribution_ch_id);
}
if (row) {
di.rendement_distribution = Number(row.rd);
de.tv_rendement_distribution_ch_id = Number(row.tv_rendement_distribution_ch_id);
} else {
console.error('!! pas de valeur forfaitaire trouvée pour rendement_distribution_ch !!');
}
}
function tv_rendement_emission(di, de) {
const matcher = {
enum_type_emission_distribution_id: de.enum_type_emission_distribution_id
};
const row = tv('rendement_emission', matcher, de);
if (row) {
di.rendement_emission = Number(row.re);
de.tv_rendement_emission_id = Number(row.tv_rendement_emission_id);
} else {
console.error('!! pas de valeur forfaitaire trouvée pour rendement_emission !!');
}
}
function tv_rendement_regulation(di, de) {
const matcher = {
enum_type_emission_distribution_id: de.enum_type_emission_distribution_id
};
const row = tv('rendement_regulation', matcher, de);
if (row) {
di.rendement_regulation = Number(row.rr);
de.tv_rendement_regulation_id = Number(row.tv_rendement_regulation_id);
} else {
console.error('!! pas de valeur forfaitaire trouvée pour rendement_regulation !!');
}
}
function tv_intermittence(di, de, inst_ch_de, map_id, inertie_id) {
let hasComptage = false;
let row;
if (inst_ch_de.ficheTechniqueComptage) {
// Si une fiche technique permet de connaitre la présence ou non d'un comptage individuel pour le chauffage
const ficheTechniqueValue = inst_ch_de.ficheTechniqueComptage.valeur;
hasComptage =
ficheTechniqueValue &&
(Number.parseInt(ficheTechniqueValue) === 1 || ficheTechniqueValue.toLowerCase() === 'oui');
} else {
if (bug_for_bug_compat) {
// Si info inconnue, on se base sur tv_intermittence_id pour récupérer cette info
const inertie = {
tv_intermittence_id: de.tv_intermittence_id
};
row = tv('intermittence', inertie, de);
if (row && row.comptage_individuel) {
hasComptage = row.comptage_individuel.includes('Présence');
}
}
}
const matcher = {
enum_methode_application_dpe_log_id: map_id,
enum_type_installation_id: inst_ch_de.enum_type_installation_id,
enum_type_chauffage_id: de.enum_type_chauffage_id,
enum_equipement_intermittence_id: de.enum_equipement_intermittence_id,
enum_type_regulation_id: de.enum_type_regulation_id,
enum_type_emission_distribution_id: de.enum_type_emission_distribution_id,
comptage_individuel: hasComptage ? 'Présence' : 'Absence'
};
// Pas de valeur d'inertie pour les méthodes d'applications différentes de "dpe maison individuelle"
// dans le fichier de table de valeur sur l'onglet "intermittence", si on le précise on ne trouve aucune correspondance
// et la mauvaise valeur est sélectionnée
if (map_id === '1') {
matcher.enum_classe_inertie_id = inertie_id;
}
row = tv('intermittence', matcher, de);
if (row) {
di.i0 = Number(row.i0);
de.tv_intermittence_id = Number(row.tv_intermittence_id);
} else {
console.error('!! pas de valeur forfaitaire trouvée pour intermittence !!');
}
}
export function calc_emetteur_ch(em_ch, inst_ch_de, map_id, inertie_id) {
const de = em_ch.donnee_entree;
const di = {};
const du = {};
tv_rendement_distribution_ch(di, de);
tv_rendement_emission(di, de);
tv_rendement_regulation(di, de);
tv_intermittence(di, de, inst_ch_de, map_id, inertie_id);
em_ch.donnee_intermediaire = di;
em_ch.donnee_utilisateur = du;
}