155 lines
4.4 KiB
TypeScript
155 lines
4.4 KiB
TypeScript
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<number> {
|
|
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<number> {
|
|
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;
|
|
})();
|
|
}
|
|
}
|