Verbrauchsausweis Klasse
This commit is contained in:
245
src/lib/Ausweis/Verbrauchsausweis.ts
Normal file
245
src/lib/Ausweis/Verbrauchsausweis.ts
Normal file
@@ -0,0 +1,245 @@
|
||||
import { getKlimafaktorenClient } from "../Klimafaktoren";
|
||||
|
||||
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_monat: number = 0;
|
||||
public energieverbrauch_zeitraum_jahr: number = 0;
|
||||
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 public_id: 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: number = 0;
|
||||
public fenster_dach: number = 0;
|
||||
public energiequelle_2_nutzung: number = 0;
|
||||
public daemmung: number = 0;
|
||||
public energetische_nutzfläche: number = 0;
|
||||
|
||||
/**
|
||||
* 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 async endEnergieVerbrauch(): Promise<number> {
|
||||
const date = Date.parse(
|
||||
`${this.energieverbrauch_zeitraum_jahr}-${this.energieverbrauch_zeitraum_monat}-01 00:00:01`
|
||||
);
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.objekt_plz
|
||||
);
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let [umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] = [
|
||||
1, 1, 1, 1,
|
||||
];
|
||||
let [umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] = [
|
||||
1, 1, 1, 1,
|
||||
];
|
||||
if (this.energietraeger_1 && this.energietraeger_einheit_heizquelle_1) {
|
||||
[umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] =
|
||||
getHeizwertfaktor(
|
||||
this.energietraeger_1,
|
||||
this.energietraeger_einheit_heizquelle_1
|
||||
);
|
||||
}
|
||||
|
||||
if (this.energietraeger_2 && this.energietraeger_einheit_heizquelle_2) {
|
||||
[umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] =
|
||||
getHeizwertfaktor(
|
||||
this.energietraeger_2,
|
||||
this.energietraeger_einheit_heizquelle_2
|
||||
);
|
||||
}
|
||||
|
||||
let verbrauch_1_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_2_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_3_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_4_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
let verbrauch_5_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
let verbrauch_6_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
|
||||
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 (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;
|
||||
}
|
||||
}
|
||||
13
src/lib/Klimafaktoren.ts
Normal file
13
src/lib/Klimafaktoren.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import moment from "moment";
|
||||
import { memoize } from "./Memization";
|
||||
|
||||
export const getKlimafaktorenClient = memoize<Promise<number[]>>(async (date: Date, zip: string) => {
|
||||
const response = await fetch(`/api/klimafaktoren?date=${moment(date).format("YYYY-MM-DD")}&zip=${zip}`);
|
||||
const json = await response.json();
|
||||
|
||||
return json;
|
||||
});
|
||||
|
||||
export const getKlimafaktorenServer = memoize(async (date: Date, zip: string) => {
|
||||
|
||||
});
|
||||
18
src/lib/Memization.ts
Normal file
18
src/lib/Memization.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
type MemoizedFunction<T> = (...args: any[]) => T;
|
||||
|
||||
export function memoize<T>(func: (...args: any[]) => T): MemoizedFunction<T> {
|
||||
const cache = new Map<string, T>();
|
||||
|
||||
return (...args: any[]): T => {
|
||||
const key = JSON.stringify(args);
|
||||
|
||||
if (cache.has(key)) {
|
||||
return cache.get(key)!;
|
||||
}
|
||||
|
||||
const result = func(...args);
|
||||
cache.set(key, result);
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user