Bedarfsausweis Rechnung + Datenblatt

This commit is contained in:
Moritz Utcke
2023-05-09 20:30:44 +04:00
parent e2d742e069
commit 724f3ff546
25 changed files with 934 additions and 531 deletions

View File

@@ -1,5 +1,6 @@
import { Moment } from "moment";
import { BitChecker } from "../BitChecker";
import { Dachgeschoss } from "./types";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
@@ -56,7 +57,7 @@ export interface Ausweis {
wohnflaeche: number;
keller_beheizt: boolean;
dachgeschoss: string;
dachgeschoss: Dachgeschoss;
zusaetzliche_heizquelle: boolean;
warmwasser_enthalten: boolean;
lueftungskonzept: Lueftungskonzept;
@@ -96,13 +97,13 @@ export interface Ausweis {
volumen: number;
dicht: boolean;
fenster_flaeche_1: number;
fenster_art_1: string;
fenster_art_1: number;
fenster_flaeche_2: number;
fenster_art_2: string;
fenster_art_2: number;
dachfenster_flaeche: number;
dachfenster_art: string;
dachfenster_art: number;
haustuer_flaeche: number;
haustuer_art: string;
haustuer_art: number;
dach_bauart: string;
dach_daemmung: number;
decke_bauart: string;

View File

@@ -3,28 +3,10 @@ import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment";
import { BitChecker } from "../BitChecker";
import { getHeizungswerte } from "../Heizungswerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
VERBRAUCHSAUSWEIS_NICHT_WOHNGEBAEUDE,
BEDARFSAUSWEIS,
}
export type 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 Bedarfsausweis {
export class Bedarfsausweis implements Ausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -63,7 +45,7 @@ export class Bedarfsausweis {
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss: string = "";
public dachgeschoss: Dachgeschoss = Dachgeschoss.UNBEHEIZT;
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
@@ -182,16 +164,16 @@ export class Bedarfsausweis {
}
public get end_energie_verbrauch(): number {
let Uawd = 1 / (1 / this.dach_daemmung / 0.04);
let Uawa = 1 / (1 / this.aussenwand_daemmung / 0.04);
let Uawb = 1 / (1 / this.boden_daemmung / 0.04);
let Uawogd =1 / (1 / this.decke_daemmung / 0.04);
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);
let decke_u_wert = 1 / (1 / this.decke_daemmung / 0.04);
if (!this.tabellenwerte_aendern) {
this.dach_u_wert = Math.round(Uawd);
this.decke_u_wert = Math.round(Uawogd);
this.aussenwand_u_wert = Math.round(Uawa);
this.fussboden_u_wert = Math.round(Uawb);
this.dach_u_wert = Math.round(dach_u_wert);
this.decke_u_wert = Math.round(decke_u_wert);
this.aussenwand_u_wert = Math.round(aussenwand_u_wert);
this.fussboden_u_wert = Math.round(fussboden_u_wert);
}
if (this.dachgeschoss) {
@@ -210,26 +192,26 @@ export class Bedarfsausweis {
}
if (this.keller_beheizt) {
var keller_beheiztf = 1;
var keller_beheizt = 1;
} else {
var keller_beheiztf = 0;
var keller_beheizt = 0;
}
var gaubenfl =
var gaubenflaeche =
this.breite_gauben * 2 * 0.3 + this.anzahl_gauben * 2 * 1.5;
var gaubenvol = this.breite_gauben * 1.5;
var gaubenvolumen = this.breite_gauben * 1.5;
var Fawa = 1;
let aussenwand_anteil = 1;
if (
this.objekt_typ === "Doppelhaushälfte" ||
this.objekt_typ === "Reihenendhaus"
) {
var Fawa = 0.7;
aussenwand_anteil = 0.7;
} else if (this.objekt_typ === "Reihenmittelhaus") {
var Fawa = 0.4;
aussenwand_anteil = 0.4;
}
// Außenwand
var awa1 =
var aussenwand_flaeche =
((2 * this.masse_a +
2 * this.masse_b +
2 * this.masse_d +
@@ -244,18 +226,18 @@ export class Bedarfsausweis {
2 * this.masse_e +
2 * this.masse_f) *
2.2 *
keller_beheiztf) *
Fawa -
keller_beheizt) *
aussenwand_anteil -
this.fenster_flaeche_1 -
this.fenster_flaeche_2 -
this.haustuer_flaeche +
gaubenfl;
gaubenflaeche;
if (!this.tabellenwerte_aendern) {
this.aussenwand_flaeche = awa1;
this.aussenwand_flaeche = Math.round(aussenwand_flaeche);
}
var awd1 =
var dachflaeche =
((this.masse_a * this.masse_b +
this.masse_c * this.masse_d +
(+this.masse_f + +this.masse_c) * this.masse_e) *
@@ -263,38 +245,38 @@ export class Bedarfsausweis {
this.dachfenster_flaeche) *
dachgeschossf2;
if (!this.tabellenwerte_aendern) {
this.dachflaeche = awd1;
this.dachflaeche = Math.round(dachflaeche);
}
var awogd1 =
var deckenflaeche =
(this.masse_a * this.masse_b +
this.masse_c * this.masse_d +
(+this.masse_f + +this.masse_c) * this.masse_e -
this.dachfenster_flaeche) *
IOGdeckef;
if (!this.tabellenwerte_aendern) {
this.deckenflaeche = awogd1;
this.deckenflaeche = Math.round(deckenflaeche);
}
var awb1 =
var fussboden_flaeche =
this.masse_a * this.masse_b +
this.masse_c * this.masse_d +
(+this.masse_f + +this.masse_c) * this.masse_e;
if (!this.tabellenwerte_aendern) {
this.fussboden_flaeche = awb1;
this.fussboden_flaeche = Math.round(fussboden_flaeche);
}
var behgv =
awb1 * this.geschosshoehe * this.anzahl_vollgeschosse +
awb1 * 2.2 * keller_beheiztf +
awb1 * this.geschosshoehe * dachgeschossf +
gaubenvol;
var volumen =
fussboden_flaeche * this.geschosshoehe * this.anzahl_vollgeschosse +
fussboden_flaeche * 2.2 * keller_beheizt +
fussboden_flaeche * this.geschosshoehe * dachgeschossf +
gaubenvolumen;
if (!this.tabellenwerte_aendern) {
this.volumen = behgv;
this.volumen = Math.round(volumen);
}
if (this.dicht) {
var Hv = 0.163 * behgv;
var Hv = 0.163 * volumen;
} else {
var Hv = 0.19 * behgv;
var Hv = 0.19 * volumen;
}
var AHF =
@@ -364,21 +346,21 @@ export class Bedarfsausweis {
}
}
let hilfsenergiel = 0;
let wgewinnel = 0;
let hilfsenergie_lueftung = 0;
let waerme_gewinnung_lueftung = 0;
if (this.lueftungskonzept == "Lüftungsanlage mit Wärmerückgewinnung") {
hilfsenergiel = 0;
wgewinnel = 13.5;
hilfsenergie_lueftung = 0;
waerme_gewinnung_lueftung = 13.5;
}
if (this.lueftungskonzept == "Lüftungsanlage ohne Wärmerückgewinnung") {
if (this.baujahr_gebaeude < 1996) {
hilfsenergiel = 4;
wgewinnel = 3.5;
hilfsenergie_lueftung = 4;
waerme_gewinnung_lueftung = 3.5;
}
if (this.baujahr_gebaeude > 1996) {
hilfsenergiel = 2.6;
wgewinnel = 3.2;
hilfsenergie_lueftung = 2.6;
waerme_gewinnung_lueftung = 3.2;
}
}
@@ -414,12 +396,12 @@ export class Bedarfsausweis {
this.waerme_erzeugung_heizung
);
var endenergieh =
var end_energie_heizung =
(Qh + heizung_zentralwv + verteilunghwv + spheizungwv) *
werzeugungheaz -
wgewinnel;
waerme_gewinnung_lueftung;
var endenergiew =
var end_energie_warmwasser =
(12 +
verteilungwwwv -
verteilungwwhg +
@@ -435,19 +417,19 @@ export class Bedarfsausweis {
warmwasser_speicherunghb +
werzeugungwwhb +
Solarsystem_WWhb +
hilfsenergiel;
hilfsenergie_lueftung;
var endenergiegesamt = endenergieh + endenergiew + hilfsenergie;
var endenergiegesamt = end_energie_heizung + end_energie_warmwasser + hilfsenergie;
var primheizung =
endenergieh *
end_energie_heizung *
(1 - this.anteil_zusatzheizung) *
BRSPrimärenergiefaktor +
endenergieh * this.anteil_zusatzheizung * BRSPrimärenergiefaktor1;
end_energie_heizung * this.anteil_zusatzheizung * BRSPrimärenergiefaktor1;
var primaerenergiebedarf =
primheizung +
(endenergiew - Solarsystem_WWbw) * BRSPrimärenergiefaktor +
(end_energie_warmwasser - Solarsystem_WWbw) * BRSPrimärenergiefaktor +
hilfsenergie * 1.8;
return endenergiegesamt;

View File

@@ -2,28 +2,12 @@ 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 type 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";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
export class Verbrauchsausweis {
export class Verbrauchsausweis implements Ausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -62,7 +46,7 @@ export class Verbrauchsausweis {
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss: string = "";
public dachgeschoss: Dachgeschoss = Dachgeschoss.NICHT_VORHANDEN;
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
@@ -70,10 +54,10 @@ export class Verbrauchsausweis {
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 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);
};
@@ -105,13 +89,13 @@ export class Verbrauchsausweis {
public volumen: number = 0;
public dicht: boolean = false;
public fenster_flaeche_1: number = 0;
public fenster_art_1: string = "";
public fenster_art_1: number = 0;
public fenster_flaeche_2: number = 0;
public fenster_art_2: string = "";
public fenster_art_2: number = 0;
public dachfenster_flaeche: number = 0;
public dachfenster_art: string = "";
public dachfenster_art: number = 0;
public haustuer_flaeche: number = 0;
public haustuer_art: string = "";
public haustuer_art: number = 0;
public dach_bauart: string = "";
public dach_daemmung: number = 0;
public decke_bauart: string = "";
@@ -149,6 +133,82 @@ export class Verbrauchsausweis {
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");

View File

@@ -3,26 +3,11 @@ import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment";
import { BitChecker } from "../BitChecker";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
VERBRAUCHSAUSWEIS_NICHT_WOHNGEBAEUDE,
BEDARFSAUSWEIS,
}
export type 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";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
export class VerbrauchsausweisGewerbe {
export class VerbrauchsausweisGewerbe implements Ausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -61,7 +46,7 @@ export class VerbrauchsausweisGewerbe {
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss: string = "";
public dachgeschoss: number = Dachgeschoss.UNBEHEIZT;
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
@@ -104,13 +89,13 @@ export class VerbrauchsausweisGewerbe {
public volumen: number = 0;
public dicht: boolean = false;
public fenster_flaeche_1: number = 0;
public fenster_art_1: string = "";
public fenster_art_1: number = 0;
public fenster_flaeche_2: number = 0;
public fenster_art_2: string = "";
public fenster_art_2: number = 0;
public dachfenster_flaeche: number = 0;
public dachfenster_art: string = "";
public dachfenster_art: number = 0;
public haustuer_flaeche: number = 0;
public haustuer_art: string = "";
public haustuer_art: number = 0;
public dach_bauart: string = "";
public dach_daemmung: number = 0;
public decke_bauart: string = "";

25
src/lib/Ausweis/types.ts Normal file
View File

@@ -0,0 +1,25 @@
export enum AusweisType {
VERBRAUCHSAUSWEIS,
VERBRAUCHSAUSWEIS_NICHT_WOHNGEBAEUDE,
BEDARFSAUSWEIS,
}
export type 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 enum Dachgeschoss {
BEHEIZT,
UNBEHEIZT,
NICHT_VORHANDEN
}

View File

@@ -1,4 +1,4 @@
export function BitChecker(initial: number = 0, length: number = 32): boolean[] {
export function BitChecker(initial: number = 0, length: number = 32): boolean[] & { value: number } {
const target: boolean[] = new Array(length).fill(false).map((x, i) => {
return (initial & (1 << i)) !== 0 ? true : false
});
@@ -14,5 +14,5 @@ export function BitChecker(initial: number = 0, length: number = 32): boolean[]
set(target, property, value) {
return Reflect.set(target, property, value);
}
})
}) as (boolean[] & { value: number })
}

View File

@@ -710,12 +710,12 @@ export function getHeizungswerte(
let result = fuelList.find(
(value) =>
value.energietraeger == energietraeger && value.einheit == "kWh"
value[0] == energietraeger && value[1] == "kWh"
);
let coe = 0;
if (result) {
coe = result.coe
coe = result[4]
}
return [

View File

@@ -8,8 +8,14 @@ export const getHeizwertfaktorClient = function(energietraeger: string, einheit:
primärenergiefaktor: number
} {
for (const fuel of fuelList) {
if (fuel.energietraeger == energietraeger && fuel.einheit == einheit) {
return fuel;
if (fuel[0] == energietraeger && fuel[1] == einheit) {
return {
coe: fuel[4],
energietraeger: fuel[0],
einheit: fuel[1],
umrechnungsfaktor: fuel[2],
primärenergiefaktor: fuel[3]
};
}
}