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 { 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 { 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 { 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; })(); } }