Neue Datenbank eingebunden

This commit is contained in:
Moritz Utcke
2023-05-10 19:40:22 +04:00
parent 724f3ff546
commit 33c8a1d447
26 changed files with 483 additions and 631 deletions

View File

@@ -1,6 +1,6 @@
import { Moment } from "moment";
import { BitChecker } from "../BitChecker";
import { Dachgeschoss } from "./types";
import { Bedarfsausweis } from "./Bedarfsausweis";
import { Verbrauchsausweis } from "./Verbrauchsausweis";
import { VerbrauchsausweisGewerbe } from "./VerbrauchsausweisGewerbe";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
@@ -18,124 +18,25 @@ export type Ausstellgrund =
export type Lueftungskonzept = "Fensterlüftung" | "Schachtlüftung" | "Lüftungsanlage ohne Wärmerückgewinnung" | "Lüftungsanlage mit Wärmerückgewinnung"
export interface Ausweis {
ausweisart: Ausweisart;
id: number;
user_id: number;
rechnung_adresse: number;
versand_adresse: number;
objekt_typ: string;
objekt_plz: string;
objekt_ort: string;
objekt_strasse: string;
objekt_gebaeudeteil: string;
objekt_saniert: boolean;
baujahr_gebaeude: number;
baujahr_anlage: number;
anzahl_einheiten: number;
export type Ausweis = Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
erstellungsdatum: Date;
ausstellgrund: Ausstellgrund;
export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Ausweis {
let ausweis;
energieverbrauch_zeitraum: Moment;
energieverbrauch_1_heizquelle_1: number;
energieverbrauch_2_heizquelle_1: number;
energieverbrauch_3_heizquelle_1: number;
energieverbrauch_1_heizquelle_2: number;
energieverbrauch_2_heizquelle_2: number;
energieverbrauch_3_heizquelle_2: number;
if (ausweisart == "VA") {
ausweis = new Verbrauchsausweis();
} else if (ausweisart == "VANW") {
ausweis = new VerbrauchsausweisGewerbe();
} else if (ausweisart == "BA") {
ausweis = new Bedarfsausweis();
} else {
throw new Error("Unbekannte Ausweisart.");
}
energietraeger_einheit_heizquelle_1: string;
energietraeger_einheit_heizquelle_2: string;
energietraeger_1: string;
energietraeger_2: string;
anteil_warmwasser_1: number;
anteil_warmwasser_2: number;
uid: string;
wohnflaeche: number;
keller_beheizt: boolean;
dachgeschoss: Dachgeschoss;
zusaetzliche_heizquelle: boolean;
warmwasser_enthalten: boolean;
lueftungskonzept: Lueftungskonzept;
wird_gekuehlt: boolean;
leerstand: number;
images: string[];
versorgungssysteme: boolean[];
fenster_dach: boolean[];
energiequelle_2_nutzung: boolean[];
daemmung: boolean[];
/**
* Bedarfsausweis spezifische Eigenschaften
*/
anzahl_vollgeschosse: number;
geschosshoehe: number;
anzahl_gauben: number;
breite_gauben: number;
masse_a: number;
masse_b: number;
masse_c: number;
masse_d: number;
masse_e: number;
masse_f: number;
fensterflaeche_so_sw: number;
fensterflaeche_nw_no: number;
aussenwandflaeche_unbeheizt: number;
dachflaeche: number;
dach_u_wert: number;
deckenflaeche: number;
decke_u_wert: number;
aussenwand_flaeche: number;
aussenwand_u_wert: number;
fussboden_flaeche: number;
fussboden_u_wert: number;
volumen: number;
dicht: boolean;
fenster_flaeche_1: number;
fenster_art_1: number;
fenster_flaeche_2: number;
fenster_art_2: number;
dachfenster_flaeche: number;
dachfenster_art: number;
haustuer_flaeche: number;
haustuer_art: number;
dach_bauart: string;
dach_daemmung: number;
decke_bauart: string;
decke_daemmung: number;
aussenwand_bauart: string;
aussenwand_daemmung: number;
boden_bauart: string;
boden_daemmung: number;
warmwasser_verteilung: string;
warmwasser_speicherung: string;
warmwasser_erzeugung: string;
heizung_zentral: boolean;
heizung_verteilung: string;
heizung_speicherung: string;
waerme_erzeugung_heizung: string;
anteil_zusatzheizung: number;
kollektor_flaeche: number;
// VANW
vanw_stromverbrauch_enthalten: number;
vanw_stromverbrauch_sonstige: string;
vanw_strom_1: number;
vanw_strom_2: number;
vanw_strom_3: number;
regnummer: string;
erledigt: boolean;
anrede: string;
name: string;
vorname: string;
email: string;
telefonnummer: string;
}
if (initializer) {
ausweis.ausstellgrund = initializer.ausstellgrund;
ausweis.ausweisart = initializer.ausweisart;
}
return ausweis;
}

View File

@@ -5,8 +5,9 @@ import { BitChecker } from "../BitChecker";
import { getHeizungswerte } from "../Heizungswerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class Bedarfsausweis implements Ausweis {
export class Bedarfsausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -25,7 +26,7 @@ export class Bedarfsausweis implements Ausweis {
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Vermietung";
public energieverbrauch_zeitraum: Moment = moment();
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;
@@ -137,6 +138,9 @@ export class Bedarfsausweis implements Ausweis {
// Temporär
public tabellenwerte_aendern: boolean = false;
public gebaeude_uid?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public constructor() {}
public static fromBase64(base64: string): Bedarfsausweis | null {
@@ -150,17 +154,15 @@ export class Bedarfsausweis implements Ausweis {
}
}
public get primaer_energie_verbrauch(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
public get primaer_energie_verbrauch(): number {
const Endenergieverbrauch = this.end_energie_verbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
this.energietraeger_einheit_heizquelle_1
);
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
this.energietraeger_einheit_heizquelle_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
}
public get end_energie_verbrauch(): number {

View File

@@ -1,214 +1,31 @@
import { Moment } from "moment";
import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment";
import { BitChecker } from "../BitChecker";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Ausstellgrund, Ausweisart } from "./types";
import { Energiekennwerte } from "../Energiekennwerte";
import { Gebaeude } from "../Gebaeude";
export class Verbrauchsausweis implements Ausweis {
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 warmwasser_enthalten: boolean = true;
public id?: number;
public uid?: string;
public baujahr_anlage: number = 0;
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: Dachgeschoss = Dachgeschoss.NICHT_VORHANDEN;
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
public wird_gekuehlt: boolean = false;
public leerstand: number = 0;
public images: string[] = [];
public versorgungssysteme: ReturnType<typeof BitChecker> = BitChecker(0);
public fenster_dach: ReturnType<typeof BitChecker> = BitChecker(0);
public energiequelle_2_nutzung: ReturnType<typeof BitChecker> = BitChecker(0);
public daemmung: ReturnType<typeof BitChecker> = BitChecker(0);
public get energetische_nutzfläche(): number {
return this.wohnflaeche * (this.keller_beheizt ? 1.35 : 1.2);
};
return (
this.gebaeude.wohnflaeche *
(this.gebaeude.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: number = 0;
public fenster_flaeche_2: number = 0;
public fenster_art_2: number = 0;
public dachfenster_flaeche: number = 0;
public dachfenster_art: number = 0;
public haustuer_flaeche: number = 0;
public haustuer_art: number = 0;
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;
public regnummer?: string;
// 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 kennwerte: Energiekennwerte = new Energiekennwerte();
public gebaeude: Gebaeude = new Gebaeude();
public constructor() {}
public async upload() {
const body = this.getUploadBody();
const response = await fetch("/api/ausweis/verbrauchsausweis", {
method: "PUT",
body: JSON.stringify(body)
})
return response;
}
public async save() {
const body = this.getUploadBody();
const response = await fetch("/api/ausweis/verbrauchsausweis", {
method: "POST",
body: JSON.stringify(body)
})
return response;
}
private getUploadBody() {
return {
ausweisart: "VA",
objekt_typ: this.objekt_typ,
objekt_plz: this.objekt_plz,
objekt_ort: this.objekt_ort,
objekt_strasse: this.objekt_strasse,
objekt_gebaeudeteil: this.objekt_gebaeudeteil,
objekt_saniert: this.objekt_saniert,
baujahr_gebaeude: this.baujahr_gebaeude,
baujahr_anlage: this.baujahr_anlage,
anzahl_einheiten: this.anzahl_einheiten,
ausstellgrund: this.ausstellgrund,
energieverbrauch_zeitraum: this.energieverbrauch_zeitraum.toDate(),
energieverbrauch_1_heizquelle_1: this.energieverbrauch_1_heizquelle_1,
energieverbrauch_2_heizquelle_1: this.energieverbrauch_2_heizquelle_1,
energieverbrauch_3_heizquelle_1: this.energieverbrauch_3_heizquelle_1,
energieverbrauch_1_heizquelle_2: this.energieverbrauch_1_heizquelle_2,
energieverbrauch_2_heizquelle_2: this.energieverbrauch_2_heizquelle_2,
energieverbrauch_3_heizquelle_2: this.energieverbrauch_3_heizquelle_2,
energietraeger_einheit_heizquelle_1: this.energietraeger_einheit_heizquelle_1,
energietraeger_einheit_heizquelle_2: this.energietraeger_einheit_heizquelle_2,
energietraeger_1: this.energietraeger_1,
energietraeger_2: this.energietraeger_2,
anteil_warmwasser_1: this.anteil_warmwasser_1,
anteil_warmwasser_2: this.anteil_warmwasser_2,
wohnflaeche: this.wohnflaeche,
keller_beheizt: this.keller_beheizt,
dachgeschoss: this.dachgeschoss,
zusaetzliche_heizquelle: this.zusaetzliche_heizquelle,
warmwasser_enthalten: this.warmwasser_enthalten,
lueftungskonzept: this.lueftungskonzept,
wird_gekuehlt: this.wird_gekuehlt,
leerstand: this.leerstand,
images: this.images,
versorgungssysteme: this.versorgungssysteme.value,
fenster_dach: this.versorgungssysteme.value,
energiequelle_2_nutzung: this.versorgungssysteme.value,
daemmung: this.versorgungssysteme.value,
anrede: this.anrede,
name: this.name,
vorname: this.vorname,
email: this.email,
telefonnummer: this.telefonnummer,
}
}
public static fromBase64(base64: string): Verbrauchsausweis | null {
try {
const text = Buffer.from(base64, "base64");
@@ -224,7 +41,10 @@ export class Verbrauchsausweis implements Ausweis {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
const brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
@@ -232,38 +52,44 @@ export class Verbrauchsausweis implements Ausweis {
public get end_energie_verbrauch(): Promise<number> {
return (async () => {
const date = this.energieverbrauch_zeitraum;
const date = this.kennwerte.zeitraum;
const klimafaktoren = await getKlimafaktorenClient(
date,
this.objekt_plz
this.gebaeude.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 brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_2,
this.kennwerte.einheit_2
);
let verbrauch_1_kwh =
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh =
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh =
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh =
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh =
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh =
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
if (this.anteil_warmwasser_1 == 0) {
if (this.kennwerte.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
}
if (this.leerstand > 0) {
if (this.gebaeude.leerstand > 0) {
let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -274,17 +100,16 @@ export class Verbrauchsausweis implements Ausweis {
verbrauch_4_kwh +
verbrauch_5_kwh +
verbrauch_6_kwh) *
(this.leerstand / 100)) /
(this.gebaeude.leerstand / 100)) /
durchschnittsKlimafaktor;
}
if (this.energiequelle_2_nutzung[3]) {
if (this.gebaeude.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 anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert =
(anteil_heizung *
@@ -304,7 +129,6 @@ export class Verbrauchsausweis implements Ausweis {
kuehlungsZuschlag) /
3 /
this.energetische_nutzfläche;
return Energieverbrauchskennwert;
})();

View File

@@ -5,9 +5,10 @@ import moment from "moment";
import { BitChecker } from "../BitChecker";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class VerbrauchsausweisGewerbe implements Ausweis {
export class VerbrauchsausweisGewerbe {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -131,6 +132,9 @@ export class VerbrauchsausweisGewerbe implements Ausweis {
public email: string = "";
public telefonnummer: string = "";
public gebaeude_uid?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public constructor() {}
public static fromBase64(base64: string): VerbrauchsausweisGewerbe | null {

View File

@@ -1,9 +0,0 @@
export class Ausweis {
public static fromUID(uid: string) {
}
public static fromPrivateId(id: number) {
}
}

View File

@@ -0,0 +1,25 @@
import moment, { Moment } from "moment";
export class Energiekennwerte {
public zeitraum: Moment = moment();
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 einheit_1: string = "";
public einheit_2: string = "";
public energietraeger_1: string = "";
public energietraeger_2: string = "";
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public warmwasser_enthalten: boolean = false;
public zusaetzliche_heizquelle: boolean = false;
public constructor(initializer?: Energiekennwerte) {
if (initializer) {
this.zeitraum = initializer.zeitraum;
}
}
}

37
src/lib/Gebaeude.ts Normal file
View File

@@ -0,0 +1,37 @@
import { Ausweis } from "./Ausweis/Ausweis";
import { Dachgeschoss, Lueftungskonzept } from "./Ausweis/types";
import { BitChecker } from "./BitChecker";
export class Gebaeude {
public typ: string = "";
public plz: string = "";
public ort: string = "";
public strasse: string = "";
public gebaeudeteil: string = "";
public saniert: boolean = false;
public baujahr: number = 0;
public einheiten: number = 0;
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss_beheizt: Dachgeschoss = Dachgeschoss.UNBEHEIZT;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
public wird_gekuehlt: boolean = false;
public leerstand: number = 0;
public versorgungssysteme: boolean[] = BitChecker(0);
public fenster_dach: boolean[] = BitChecker(0);
public energiequelle_2_nutzung: boolean[] = BitChecker(0);
public daemmung: boolean[] = BitChecker(0);
public ausweis?: Ausweis;
public uid?: string;
public constructor(initializer?: Gebaeude) {
if (initializer) {
this.typ = initializer.typ;
this.plz = initializer.plz;
this.ort = initializer.ort;
}
}
}