@open3cl/engine
Version:
Open Source 3CL-DPE engine
128 lines (115 loc) • 4.16 kB
JavaScript
import { mois_liste } from '../../../../../utils.js';
import { inject } from 'dioma';
import { FrTvStore } from '../../../../dpe/infrastructure/froid/frTv.store.js';
/**
* Calcul des pertes récupérées de distribution et de stockage d'ECS
* Chapitre 9.1.1 Consommation de chauffage
*
* Données calculées
* — pertes_distribution_ecs_recup : pertes de distribution d'ECS récupérées(kWh)
* — pertes_distribution_ecs_recup_depensier : pertes de distribution d'ECS récupérées(kWh) pour le scénario dépensier
* — pertes_stockage_ecs_recup : pertes de stockage d'ECS récupérées(kWh)
*
* Methode_de_calcul_3CL_DPE_2021 - Page 57
* Octobre 2021
* @see consolide_anne…arrete_du_31_03_2021_relatif_aux_methodes_et_procedures_applicables.pdf
*/
export class PerteEcsRecupService {
/**
* @type {FrTvStore}
*/
#tvStore;
/**
* @param tvStore {FrTvStore}
*/
constructor(tvStore = inject(FrTvStore)) {
this.#tvStore = tvStore;
}
/**
* Pertes de distribution et de stockage ECS (kWh)
* @param ctx {Contexte}
* @param logement {Logement}
* @return {{pertes_distribution_ecs_recup: number, pertes_distribution_ecs_recup_depensier: number, pertes_stockage_ecs_recup: number, pertes_stockage_ecs_recup_depensier: number}}
*/
execute(ctx, logement) {
return {
pertes_distribution_ecs_recup: this.pertesDistributionEcsRecup(ctx, logement, false) / 1000,
pertes_distribution_ecs_recup_depensier:
this.pertesDistributionEcsRecup(ctx, logement, true) / 1000,
pertes_stockage_ecs_recup: this.pertesStockageEcsRecup(ctx, logement, false) / 1000,
pertes_stockage_ecs_recup_depensier: this.pertesStockageEcsRecup(ctx, logement, true) / 1000
};
}
/**
* Pertes récupérées de distribution d’ECS pour le chauffage (Wh)
* 9.1.1 Consommation de chauffage
*
* @param ctx {Contexte}
* @param logement {Logement}
* @param depensier {boolean}
* @returns {number}
*/
pertesDistributionEcsRecup(ctx, logement, depensier) {
const installationsEcs = logement.installation_ecs_collection?.installation_ecs || [];
const pertesDistribution = installationsEcs.reduce((acc, installation) => {
/** @type {InstallationEcsDU}*/
const installationEcsDU = installation.donnee_utilisateur;
const pertesDistributionIndividuelleVolumeChauffee = depensier
? installationEcsDU.QdwIndVc.depensier
: installationEcsDU.QdwIndVc.conventionnel;
const pertesDistributionCollectiveVolumeChauffee = depensier
? installationEcsDU.QdwColVc.depensier
: installationEcsDU.QdwColVc.conventionnel;
return (
acc +
pertesDistributionIndividuelleVolumeChauffee +
pertesDistributionCollectiveVolumeChauffee
);
}, 0);
return mois_liste.reduce((acc, mois) => {
return (
acc +
(0.48 *
pertesDistribution *
this.#tvStore.getData(
depensier ? 'nref21' : 'nref19',
ctx.altitude.value,
ctx.zoneClimatique.value,
mois,
ctx.inertie.ilpa
)) /
8760
);
}, 0);
}
/**
* Pertes récupérées du stockage d’ECS pour le chauffage (Wh)
* 9.1.1 Consommation de chauffage
*
* @param ctx {Contexte}
* @param logement {Logement}
* @param depensier {boolean}
* @returns {number}
*/
pertesStockageEcsRecup(ctx, logement, depensier) {
const installationsEcs = logement.installation_ecs_collection?.installation_ecs || [];
let pertesStockage = installationsEcs.reduce((acc, installation) => {
/** @type {InstallationEcsDU}*/
const installationEcsDU = installation.donnee_utilisateur;
return acc + (0.48 * installationEcsDU.QgwRecuperable) / 8760.0;
}, 0);
return mois_liste.reduce((acc, mois) => {
return (
acc +
pertesStockage *
this.#tvStore.getData(
depensier ? 'nref21' : 'nref19',
ctx.altitude.value,
ctx.zoneClimatique.value,
mois,
ctx.inertie.ilpa
)
);
}, 0);
}
}