import { getKlimafaktorenClient } from "../Klimafaktoren"; import { getHeizwertfaktor } from "../server/Heizwertfaktor"; import { Ausstellgrund, Ausweisart } from "./types"; import { Gebaeude } from "../Gebaeude"; import { User } from "#lib/User"; export class Verbrauchsausweis { public id?: number; public uid?: string; public gebaeude_stammdaten: Gebaeude = new Gebaeude(); public benutzer?: User; public rechnung?: any; public erstellungsdatum: Date = new Date(); public ausstellgrund: Ausstellgrund = "Sonstiges"; public registriernummer: string = ""; public erledigt: boolean = false; public baujahr_heizung: number[] = []; public zusaetzliche_heizquelle: boolean = false; public brennstoff_1: string = "Erdgas"; public einheit_1: string = "kWh"; public brennstoff_2: string = "Erdgas"; public einheit_2: string = "kWh"; public startdatum: Date = new Date(); public enddatum: Date = new Date(); public verbrauch_1: number = 0; public verbrauch_2: number = 0; public verbrauch_3: number = 0; public verbrauch_4: number = 0; public verbrauch_5: number = 0; public verbrauch_6: number = 0; public warmwasser_enthalten: boolean = false; public anteil_warmwasser_1: number = 0; public anteil_warmwasser_2: number = 0; public get energetischeNutzflaeche(): number { return ( this.gebaeude_stammdaten.wohnflaeche * (this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2) ); } public constructor(initializer?: Verbrauchsausweis) { } public static fromBase64(base64: string): Verbrauchsausweis | null { try { const text = Buffer.from(base64, "base64"); const json = JSON.parse(text.toString()); return json; } catch (e) { return null; } } public get primaerEnergieBedarf(): Promise { return (async () => { const Endenergieverbrauch = await this.endEnergieVerbrauch; const brennstoff_1 = getHeizwertfaktor( this.brennstoff_1, this.einheit_1 ); return Endenergieverbrauch * brennstoff_1.primaerenergiefaktor; })(); } public get endEnergieVerbrauch(): Promise { return (async () => { const date = this.startdatum; const klimafaktoren = await getKlimafaktorenClient( date, this.gebaeude_stammdaten.plz ); // Endenergieverbrauch // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. let brennstoff_1 = getHeizwertfaktor( this.brennstoff_1, this.einheit_1 ); let brennstoff_2 = getHeizwertfaktor( 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_stammdaten.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_stammdaten.leerstand / 100)) / durchschnittsKlimafaktor; } if (this.gebaeude_stammdaten.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; })(); } }