Überarbeitung Verbrauchsausweis+ Berechnung

This commit is contained in:
Moritz Utcke
2023-09-20 13:22:17 +06:00
parent 471f3bae8d
commit ec7a9ad88c
15 changed files with 204 additions and 202 deletions

View File

@@ -32,11 +32,6 @@ export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Auswe
} else {
throw new Error("Unbekannte Ausweisart.");
}
if (initializer) {
ausweis.ausstellgrund = initializer.ausstellgrund;
ausweis.ausweisart = initializer.ausweisart;
}
return ausweis;
}

View File

@@ -4,8 +4,6 @@ import moment from "moment";
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 {
public ausweisart: Ausweisart = "VA";
@@ -154,8 +152,8 @@ export class Bedarfsausweis {
}
}
public get primaer_energie_verbrauch(): number {
const Endenergieverbrauch = this.end_energie_verbrauch;
public get primaerEnergieBedarf(): number {
const Endenergieverbrauch = this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
@@ -165,7 +163,7 @@ export class Bedarfsausweis {
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
}
public get end_energie_verbrauch(): number {
public get endEnergieVerbrauch(): number {
let dach_u_wert = 1 / (1 / this.dach_daemmung / 0.04);
let aussenwand_u_wert = 1 / (1 / this.aussenwand_daemmung / 0.04);
let fussboden_u_wert = 1 / (1 / this.boden_daemmung / 0.04);

View File

@@ -1,34 +1,46 @@
import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import { Ausstellgrund, Ausweisart } from "./types";
import { Energiekennwerte } from "../Energiekennwerte";
import { Gebaeude } from "../Gebaeude";
import { User } from "#lib/User";
export class Verbrauchsausweis {
public ausweisart: Ausweisart = "VA";
public ausstellgrund: Ausstellgrund = "Vermietung";
public warmwasser_enthalten: boolean = true;
public id?: number;
public uid?: string;
public baujahr_anlage: number[] = [];
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 energetische_nutzfläche(): number {
return (
this.gebaeude.wohnflaeche *
(this.gebaeude.keller_beheizt ? 1.35 : 1.2)
this.gebaeude_stammdaten.wohnflaeche *
(this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2)
);
}
public regnummer?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public gebaeude: Gebaeude = new Gebaeude();
public constructor(initializer?: Verbrauchsausweis) {
if (initializer) {
this.ausweisart = initializer.ausweisart;
this.kennwerte = initializer.kennwerte;
}
}
public static fromBase64(base64: string): Verbrauchsausweis | null {
@@ -42,59 +54,59 @@ export class Verbrauchsausweis {
}
}
public get primaer_energie_verbrauch(): Promise<number> {
public get primaerEnergieBedarf(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
this.brennstoff_1,
this.einheit_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
}
public get end_energie_verbrauch(): Promise<number> {
public get endEnergieVerbrauch(): Promise<number> {
return (async () => {
const date = this.kennwerte.zeitraum;
const date = this.startdatum;
const klimafaktoren = await getKlimafaktorenClient(
date,
this.gebaeude.plz
this.gebaeude_stammdaten.plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
this.brennstoff_1,
this.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_2,
this.kennwerte.einheit_2
this.brennstoff_2,
this.einheit_2
);
let verbrauch_1_kwh =
this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh =
this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh =
this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh =
this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh =
this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh =
this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
if (this.kennwerte.anteil_warmwasser_1 == 0) {
if (this.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
}
if (this.gebaeude.leerstand > 0) {
if (this.gebaeude_stammdaten.leerstand > 0) {
let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -105,16 +117,16 @@ export class Verbrauchsausweis {
verbrauch_4_kwh +
verbrauch_5_kwh +
verbrauch_6_kwh) *
(this.gebaeude.leerstand / 100)) /
(this.gebaeude_stammdaten.leerstand / 100)) /
durchschnittsKlimafaktor;
}
if (this.gebaeude.energiequelle_2_nutzung[3]) {
if (this.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
}
let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert =
(anteil_heizung *

View File

@@ -148,9 +148,9 @@ export class VerbrauchsausweisGewerbe {
}
}
public get primaer_energie_verbrauch(): Promise<number> {
public get primaerEnergieBedarf(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
@@ -158,7 +158,7 @@ export class VerbrauchsausweisGewerbe {
})();
}
public get end_energie_verbrauch(): Promise<number> {
public get endEnergieVerbrauch(): Promise<number> {
return (async () => {
const date = this.energieverbrauch_zeitraum;
const klimafaktoren = await getKlimafaktorenClient(

View File

@@ -1,25 +0,0 @@
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;
}
}
}

View File

@@ -6,7 +6,12 @@ export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>
return [0, 0, 0];
}
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`);
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`, {
method: "GET",
headers: {
"Content-Type": "application/json"
}
});
const json = await response.json();
if (!json.success) {

9
src/lib/client/fetch.ts Normal file
View File

@@ -0,0 +1,9 @@
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
const response = await fetch(`/api/${resourceUri}`, options);
if (!response.ok) {
throw new Error("Fehler beim Abrufen der Daten.");
}
return response.json();
}

View File

@@ -1,3 +1,5 @@
export async function getKlimafaktorenServer(date: Date, zip: string) {
export async function getKlimafaktorenServer(date: Date, zip: string, accuracy: "months" | "years" = "months"): Promise<number[] | null> {
return null;
}

21
src/lib/server/fetch.ts Normal file
View File

@@ -0,0 +1,21 @@
/**
* Dies ist die Server-Side Implementierung von fetch, die Daten werden direkt vom Server abgerufen.
* Dadurch können unnötige Requests vermieden werden.
* @date 9/20/2023 - 11:33:30 AM
*
* @export
* @async
* @param {string} resourceUri
* @param {?RequestInit} [options]
* @returns {Promise<any>}
*/
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
const response = await fetch(`http://localhost:3000/api/${resourceUri}`, options);
if (!response.ok) {
throw new Error("Fehler beim Abrufen der Daten.");
}
return response.json();
}