Files
online-energieausweis/src/lib/client/Ausweis/Verbrauchsausweis.ts
2023-12-09 10:40:39 +05:30

145 lines
4.3 KiB
TypeScript

import { Benutzer, Rechnungen, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
import { Gebaeude } from "src/lib/Gebaeude";
import { getKlimafaktorenClient } from "src/lib/Klimafaktoren";
import { getHeizwertfaktorClient } from "src/lib/server/Heizwertfaktor";
export class Verbrauchsausweis implements Partial<VerbrauchsausweisWohnen & { benutzer: Benutzer, rechnung: Rechnungen }> {
rechnungen_id: number | null = null;
erstellungsdatum: Date | null = null;
ausstellgrund: string | null = null;
registriernummer: string | null = null;
erledigt: boolean | null = null;
baujahr_heizung: number[] = [];
zusaetzliche_heizquelle: boolean | null = null;
brennstoff_1: string | null = null;
einheit_1: string | null = null;
brennstoff_2: string | null = null;
einheit_2: string | null = null;
startdatum: Date | null = null;
enddatum: Date | null = null;
verbrauch_1: number | null = null;
verbrauch_2: number | null = null;
verbrauch_3: number | null = null;
verbrauch_4: number | null = null;
verbrauch_5: number | null = null;
verbrauch_6: number | null = null;
warmwasser_enthalten: boolean | null = null;
anteil_warmwasser_1: number | null = null;
anteil_warmwasser_2: number | null = null;
public get energetischeNutzflaeche(): number {
return (
this.gebaeude.wohnflaeche *
(this.gebaeude.keller_beheizt ? 1.35 : 1.2)
);
}
public regnummer?: string;
public gebaeude: Gebaeude = new Gebaeude();
public constructor(initializer?: VerbrauchsausweisWohnen) {
if (initializer) {
Object.assign(this, initializer)
}
}
public get primaerEnergieVerbrauch(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.brennstoff_1,
this.einheit_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
}
public get endEnergieVerbrauch(): Promise<number> {
return (async () => {
const date = this.startdatum;
const klimafaktoren = await getKlimafaktorenClient(
date,
this.gebaeude.plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient(
this.brennstoff_1,
this.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
this.brennstoff_2,
this.einheit_2
);
let verbrauch_1_kwh =
this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh =
this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh =
this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh =
this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh =
this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh =
this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
if (this.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetischeNutzflaeche * 3;
}
if (this.gebaeude.leerstand > 0) {
let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
leerstandsZuschlag =
((verbrauch_1_kwh +
verbrauch_2_kwh +
verbrauch_3_kwh +
verbrauch_4_kwh +
verbrauch_5_kwh +
verbrauch_6_kwh) *
(this.gebaeude.leerstand / 100)) /
durchschnittsKlimafaktor;
}
if (this.gebaeude.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetischeNutzflaeche * 3;
}
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert =
(anteil_heizung *
(verbrauch_1_kwh + verbrauch_4_kwh) *
klimafaktoren[0] +
anteil_warmwasser * (verbrauch_1_kwh + verbrauch_4_kwh) +
anteil_heizung *
(verbrauch_2_kwh + verbrauch_5_kwh) *
klimafaktoren[1] +
anteil_warmwasser * (verbrauch_2_kwh + verbrauch_5_kwh) +
anteil_heizung *
(verbrauch_3_kwh + verbrauch_6_kwh) *
klimafaktoren[2] +
anteil_warmwasser * (verbrauch_3_kwh + verbrauch_6_kwh) +
warmwasserZuschlag +
leerstandsZuschlag +
kuehlungsZuschlag) /
3 /
this.energetischeNutzflaeche;
return Energieverbrauchskennwert;
})();
}
}