Files
online-energieausweis/src/lib/Ausweis/Verbrauchsausweis.ts
2023-05-08 16:35:36 +04:00

258 lines
8.0 KiB
TypeScript

import { Moment } from "moment";
import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment";
import fuelList from "~/components/Ausweis/fuelList";
import { BitChecker } from "../BitChecker";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
VERBRAUCHSAUSWEIS_NICHT_WOHNGEBAEUDE,
BEDARFSAUSWEIS,
}
export enum Lueftungskonzept {
"Fensterlüftung",
"Schachtlüftung",
"Lüftungsanlage ohne Wärmerückgewinnung",
"Lüftungsanlage mit Wärmerückgewinnung",
}
export type Ausweisart = "VA" | "BA" | "VANW";
export type Ausstellgrund =
| "Vermietung"
| "Neubau"
| "Verkauf"
| "Modernisierung"
| "Sonstiges";
export class Verbrauchsausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
public rechnung_adresse: number = 0;
public versand_adresse: number = 0;
public objekt_typ: string = "";
public objekt_plz: string = "";
public objekt_ort: string = "";
public objekt_strasse: string = "";
public objekt_gebaeudeteil: string = "";
public objekt_saniert: boolean = false;
public baujahr_gebaeude: number = 0;
public baujahr_anlage: number = 0;
public anzahl_einheiten: number = 0;
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Vermietung";
public energieverbrauch_zeitraum: Moment = moment();
public energieverbrauch_1_heizquelle_1: number = 0;
public energieverbrauch_2_heizquelle_1: number = 0;
public energieverbrauch_3_heizquelle_1: number = 0;
public energieverbrauch_1_heizquelle_2: number = 0;
public energieverbrauch_2_heizquelle_2: number = 0;
public energieverbrauch_3_heizquelle_2: number = 0;
public energietraeger_einheit_heizquelle_1: string = "";
public energietraeger_einheit_heizquelle_2: string = "";
public energietraeger_1: string = "";
public energietraeger_2: string = "";
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public uid: string = "";
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss: string = "";
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = Lueftungskonzept.Fensterlüftung;
public wird_gekuehlt: boolean = false;
public leerstand: number = 0;
public images: string[] = [];
public versorgungssysteme: boolean[] = BitChecker(0);
public fenster_dach: boolean[] = BitChecker(0);
public energiequelle_2_nutzung: boolean[] = BitChecker(0);
public daemmung: boolean[] = BitChecker(0);
public get energetische_nutzfläche(): number {
return this.wohnflaeche * (this.keller_beheizt ? 1.35 : 1.2);
};
/**
* Bedarfsausweis spezifische Eigenschaften
*/
public anzahl_vollgeschosse: number = 0;
public geschosshoehe: number = 0;
public anzahl_gauben: number = 0;
public breite_gauben: number = 0;
public masse_a: number = 0;
public masse_b: number = 0;
public masse_c: number = 0;
public masse_d: number = 0;
public masse_e: number = 0;
public masse_f: number = 0;
public fensterflaeche_so_sw: number = 0;
public fensterflaeche_nw_no: number = 0;
public aussenwandflaeche_unbeheizt: number = 0;
public dachflaeche: number = 0;
public dach_u_wert: number = 0;
public deckenflaeche: number = 0;
public decke_u_wert: number = 0;
public aussenwand_flaeche: number = 0;
public aussenwand_u_wert: number = 0;
public fussboden_flaeche: number = 0;
public fussboden_u_wert: number = 0;
public volumen: number = 0;
public dicht: boolean = false;
public fenster_flaeche_1: number = 0;
public fenster_art_1: string = "";
public fenster_flaeche_2: number = 0;
public fenster_art_2: string = "";
public dachfenster_flaeche: number = 0;
public dachfenster_art: string = "";
public haustuer_flaeche: number = 0;
public haustuer_art: string = "";
public dach_bauart: string = "";
public dach_daemmung: number = 0;
public decke_bauart: string = "";
public decke_daemmung: number = 0;
public aussenwand_bauart: string = "";
public aussenwand_daemmung: number = 0;
public boden_bauart: string = "";
public boden_daemmung: number = 0;
public warmwasser_verteilung: string = "";
public warmwasser_speicherung: string = "";
public warmwasser_erzeugung: string = "";
public heizung_zentral: boolean = false;
public heizung_verteilung: string = "";
public heizung_speicherung: string = "";
public waerme_erzeugung_heizung: string = "";
public anteil_zusatzheizung: number = 0;
public kollektor_flaeche: number = 0;
// VANW
public vanw_stromverbrauch_enthalten: number = 0;
public vanw_stromverbrauch_sonstige: string = "";
public vanw_strom_1: number = 0;
public vanw_strom_2: number = 0;
public vanw_strom_3: number = 0;
public regnummer: string = "";
public erledigt: boolean = false;
public anrede: string = "";
public name: string = "";
public vorname: string = "";
public email: string = "";
public telefonnummer: string = "";
public constructor() {}
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 primaer_energie_verbrauch(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
}
public get end_energie_verbrauch(): Promise<number> {
return (async () => {
const date = this.energieverbrauch_zeitraum;
const klimafaktoren = await getKlimafaktorenClient(
date,
this.objekt_plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
let brennstoff_2 = getHeizwertfaktorClient(this.energietraeger_2, this.energietraeger_einheit_heizquelle_2);
let verbrauch_1_kwh =
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
let verbrauch_2_kwh =
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
let verbrauch_3_kwh =
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
let verbrauch_4_kwh =
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
let verbrauch_5_kwh =
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
let verbrauch_6_kwh =
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
if (this.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
}
if (this.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.leerstand / 100)) /
durchschnittsKlimafaktor;
}
if (this.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 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.energetische_nutzfläche;
return Energieverbrauchskennwert;
})();
}
}