tRPC Hinzugefügt
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
import { Bedarfsausweis } from "./Bedarfsausweis";
|
||||
import { Verbrauchsausweis } from "./Verbrauchsausweis";
|
||||
import { VerbrauchsausweisGewerbe } from "./VerbrauchsausweisGewerbe";
|
||||
|
||||
export enum AusweisType {
|
||||
VERBRAUCHSAUSWEIS,
|
||||
VERBRAUCHSAUSWEIS_NICHT_WOHNGEBAEUDE,
|
||||
BEDARFSAUSWEIS,
|
||||
}
|
||||
|
||||
export type Ausweisart = "VA" | "BA" | "VANW";
|
||||
export type Ausstellgrund =
|
||||
| "Vermietung"
|
||||
| "Neubau"
|
||||
| "Verkauf"
|
||||
| "Modernisierung"
|
||||
| "Sonstiges";
|
||||
|
||||
export type Lueftungskonzept = "Fensterlüftung" | "Schachtlüftung" | "Lüftungsanlage ohne Wärmerückgewinnung" | "Lüftungsanlage mit Wärmerückgewinnung"
|
||||
|
||||
export type Ausweis = Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
|
||||
|
||||
export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Ausweis {
|
||||
let ausweis;
|
||||
|
||||
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.");
|
||||
}
|
||||
|
||||
return ausweis;
|
||||
}
|
||||
@@ -1,437 +0,0 @@
|
||||
import { Moment } from "moment";
|
||||
import { getHeizwertfaktor } from "../server/Heizwertfaktor";
|
||||
import moment from "moment";
|
||||
import { BitChecker } from "../BitChecker";
|
||||
import { getHeizungswerte } from "../Heizungswerte";
|
||||
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
|
||||
|
||||
export class Bedarfsausweis {
|
||||
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[] = [];
|
||||
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: Dachgeschoss = Dachgeschoss.UNBEHEIZT;
|
||||
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: 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 {
|
||||
if (this.geschosshoehe < 2.5 || this.geschosshoehe > 3) {
|
||||
return (1 / this.geschosshoehe - 0.04) * this.volumen;
|
||||
} else {
|
||||
return 0.32 * this.volumen;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
// 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 = "";
|
||||
|
||||
// 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 {
|
||||
try {
|
||||
const text = Buffer.from(base64, "base64");
|
||||
|
||||
const json = JSON.parse(text.toString());
|
||||
return json;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public get primaerEnergieBedarf(): number {
|
||||
const Endenergieverbrauch = this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktor(
|
||||
this.energietraeger_1,
|
||||
this.energietraeger_einheit_heizquelle_1
|
||||
);
|
||||
|
||||
return Endenergieverbrauch * brennstoff_1.primaerenergiefaktor;
|
||||
}
|
||||
|
||||
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);
|
||||
let decke_u_wert = 1 / (1 / this.decke_daemmung / 0.04);
|
||||
|
||||
if (!this.tabellenwerte_aendern) {
|
||||
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) {
|
||||
var IOGdeckef = 0;
|
||||
var dachgeschossf = 0.5;
|
||||
var dachgeschossf2 = 1;
|
||||
} else if (!this.dachgeschoss) {
|
||||
var IOGdeckef = 0.8;
|
||||
var dachgeschossf = 0;
|
||||
var dachgeschossf2 = 0;
|
||||
// TODO: Dachgeschoss braucht 3 optionen
|
||||
} else {
|
||||
var IOGdeckef = 1;
|
||||
var dachgeschossf = 0;
|
||||
var dachgeschossf2 = 0;
|
||||
}
|
||||
|
||||
if (this.keller_beheizt) {
|
||||
var keller_beheizt = 1;
|
||||
} else {
|
||||
var keller_beheizt = 0;
|
||||
}
|
||||
var gaubenflaeche =
|
||||
this.breite_gauben * 2 * 0.3 + this.anzahl_gauben * 2 * 1.5;
|
||||
var gaubenvolumen = this.breite_gauben * 1.5;
|
||||
|
||||
let aussenwand_anteil = 1;
|
||||
if (
|
||||
this.objekt_typ === "Doppelhaushälfte" ||
|
||||
this.objekt_typ === "Reihenendhaus"
|
||||
) {
|
||||
aussenwand_anteil = 0.7;
|
||||
} else if (this.objekt_typ === "Reihenmittelhaus") {
|
||||
aussenwand_anteil = 0.4;
|
||||
}
|
||||
|
||||
// Außenwand
|
||||
var aussenwand_flaeche =
|
||||
((2 * this.masse_a +
|
||||
2 * this.masse_b +
|
||||
2 * this.masse_d +
|
||||
2 * this.masse_e +
|
||||
2 * this.masse_f) *
|
||||
this.geschosshoehe *
|
||||
this.anzahl_vollgeschosse +
|
||||
2 * this.masse_a * this.geschosshoehe * dachgeschossf +
|
||||
(2 * this.masse_a +
|
||||
2 * this.masse_b +
|
||||
2 * this.masse_d +
|
||||
2 * this.masse_e +
|
||||
2 * this.masse_f) *
|
||||
2.2 *
|
||||
keller_beheizt) *
|
||||
aussenwand_anteil -
|
||||
this.fenster_flaeche_1 -
|
||||
this.fenster_flaeche_2 -
|
||||
this.haustuer_flaeche +
|
||||
gaubenflaeche;
|
||||
|
||||
if (!this.tabellenwerte_aendern) {
|
||||
this.aussenwand_flaeche = Math.round(aussenwand_flaeche);
|
||||
}
|
||||
|
||||
var dachflaeche =
|
||||
((this.masse_a * this.masse_b +
|
||||
this.masse_c * this.masse_d +
|
||||
(+this.masse_f + +this.masse_c) * this.masse_e) *
|
||||
1.2 -
|
||||
this.dachfenster_flaeche) *
|
||||
dachgeschossf2;
|
||||
if (!this.tabellenwerte_aendern) {
|
||||
this.dachflaeche = Math.round(dachflaeche);
|
||||
}
|
||||
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 = Math.round(deckenflaeche);
|
||||
}
|
||||
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 = Math.round(fussboden_flaeche);
|
||||
}
|
||||
|
||||
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 = Math.round(volumen);
|
||||
}
|
||||
|
||||
if (this.dicht) {
|
||||
var Hv = 0.163 * volumen;
|
||||
} else {
|
||||
var Hv = 0.19 * volumen;
|
||||
}
|
||||
|
||||
var AHF =
|
||||
this.aussenwand_flaeche +
|
||||
this.fussboden_flaeche +
|
||||
this.dachflaeche +
|
||||
this.deckenflaeche +
|
||||
this.fenster_flaeche_2 +
|
||||
this.haustuer_flaeche +
|
||||
this.dachfenster_flaeche +
|
||||
this.fenster_flaeche_1;
|
||||
|
||||
let AN = this.energetische_nutzfläche;
|
||||
|
||||
var Qi = 22 * AN;
|
||||
// NOTE: Irgendwie sowas wie Gesamtwärmestrom der entweicht.
|
||||
var Qs =
|
||||
270 * this.fensterflaeche_so_sw * 0.567 * 0.75 +
|
||||
100 * this.fensterflaeche_nw_no * 0.567 * 0.75 +
|
||||
225 * this.dachfenster_flaeche * 0.567 * 0.75 +
|
||||
155 *
|
||||
(this.fenster_flaeche_2 +
|
||||
this.dachfenster_flaeche +
|
||||
this.fenster_flaeche_1 -
|
||||
this.fensterflaeche_so_sw -
|
||||
this.fensterflaeche_nw_no) *
|
||||
0.567 *
|
||||
0.75;
|
||||
|
||||
var Ht =
|
||||
this.aussenwand_u_wert *
|
||||
(this.aussenwand_flaeche - this.aussenwandflaeche_unbeheizt) +
|
||||
this.aussenwand_u_wert * this.aussenwandflaeche_unbeheizt * 0.5 +
|
||||
this.decke_u_wert * this.deckenflaeche * IOGdeckef +
|
||||
this.fussboden_u_wert * this.fussboden_flaeche * 0.6 +
|
||||
this.dach_u_wert * this.dachflaeche +
|
||||
this.fenster_art_1 * this.fenster_flaeche_1 +
|
||||
this.fenster_art_2 * this.fenster_flaeche_2 +
|
||||
this.dachfenster_art * this.dachfenster_flaeche +
|
||||
AHF * 0.05 +
|
||||
this.haustuer_flaeche * this.haustuer_art;
|
||||
|
||||
var Qh = (66 * (Ht + Hv) - 0.95 * (Qs + Qi)) / AN;
|
||||
|
||||
var Solarsystem_WWbw = 0;
|
||||
var Solarsystem_WWhb = 0;
|
||||
|
||||
if (AN < 500) {
|
||||
if (this.versorgungssysteme[4]) {
|
||||
var Solarsystem_WWbw = 11.3 - (3.3 / 350) * (AN - 150);
|
||||
var Solarsystem_WWhb = 0.8 - (0.4 / 350) * (AN - 150);
|
||||
}
|
||||
|
||||
if (this.kollektor_flaeche != 0) {
|
||||
var Solarsystem_WWbw = (this.kollektor_flaeche * 280) / AN;
|
||||
var Solarsystem_WWhb = 0.8 - (0.4 / 350) * (AN - 150);
|
||||
}
|
||||
} else if (AN > 500 && AN < 7000) {
|
||||
if (this.versorgungssysteme[4]) {
|
||||
var Solarsystem_WWbw = 8 - (2 / 2000) * (AN - 500);
|
||||
var Solarsystem_WWhb = 0.4 - (0.1 / 2000) * (AN - 500);
|
||||
}
|
||||
|
||||
if (this.kollektor_flaeche != 0) {
|
||||
var Solarsystem_WWbw = (this.kollektor_flaeche * 280) / AN;
|
||||
var Solarsystem_WWhb = 0.4 - (0.1 / 2000) * (AN - 500);
|
||||
}
|
||||
}
|
||||
|
||||
let hilfsenergie_lueftung = 0;
|
||||
let waerme_gewinnung_lueftung = 0;
|
||||
|
||||
if (this.lueftungskonzept == "Lüftungsanlage mit Wärmerückgewinnung") {
|
||||
hilfsenergie_lueftung = 0;
|
||||
waerme_gewinnung_lueftung = 13.5;
|
||||
}
|
||||
if (this.lueftungskonzept == "Lüftungsanlage ohne Wärmerückgewinnung") {
|
||||
if (this.baujahr_gebaeude < 1996) {
|
||||
hilfsenergie_lueftung = 4;
|
||||
waerme_gewinnung_lueftung = 3.5;
|
||||
}
|
||||
if (this.baujahr_gebaeude > 1996) {
|
||||
hilfsenergie_lueftung = 2.6;
|
||||
waerme_gewinnung_lueftung = 3.2;
|
||||
}
|
||||
}
|
||||
|
||||
let [
|
||||
heizung_zentralwv,
|
||||
verteilunghwv,
|
||||
spheizungwv,
|
||||
werzeugungheaz,
|
||||
verteilungwwwv,
|
||||
verteilungwwhg,
|
||||
warmwasser_speicherungwv,
|
||||
warmwasser_speicherunghg,
|
||||
werzeugungwweaz,
|
||||
verteilunghhb,
|
||||
spheizunghb,
|
||||
werzeugunghhb,
|
||||
verteilungwwhb,
|
||||
warmwasser_speicherunghb,
|
||||
werzeugungwwhb,
|
||||
BRSPrimärenergiefaktor,
|
||||
BRSPrimärenergiefaktor1,
|
||||
Coeffizienz,
|
||||
] = getHeizungswerte(
|
||||
this.energietraeger_1,
|
||||
this.energietraeger_2,
|
||||
AN,
|
||||
this.warmwasser_verteilung,
|
||||
this.warmwasser_speicherung,
|
||||
this.warmwasser_erzeugung,
|
||||
this.heizung_zentral,
|
||||
this.heizung_verteilung,
|
||||
this.heizung_speicherung,
|
||||
this.waerme_erzeugung_heizung
|
||||
);
|
||||
|
||||
var end_energie_heizung =
|
||||
(Qh + heizung_zentralwv + verteilunghwv + spheizungwv) *
|
||||
werzeugungheaz -
|
||||
waerme_gewinnung_lueftung;
|
||||
|
||||
var end_energie_warmwasser =
|
||||
(12 +
|
||||
verteilungwwwv -
|
||||
verteilungwwhg +
|
||||
warmwasser_speicherungwv -
|
||||
warmwasser_speicherunghg) *
|
||||
werzeugungwweaz;
|
||||
|
||||
var hilfsenergie =
|
||||
verteilunghhb +
|
||||
spheizunghb +
|
||||
werzeugunghhb +
|
||||
verteilungwwhb +
|
||||
warmwasser_speicherunghb +
|
||||
werzeugungwwhb +
|
||||
Solarsystem_WWhb +
|
||||
hilfsenergie_lueftung;
|
||||
|
||||
var endenergiegesamt = end_energie_heizung + end_energie_warmwasser + hilfsenergie;
|
||||
|
||||
var primheizung =
|
||||
end_energie_heizung *
|
||||
(1 - this.anteil_zusatzheizung) *
|
||||
BRSPrimärenergiefaktor +
|
||||
end_energie_heizung * this.anteil_zusatzheizung * BRSPrimärenergiefaktor1;
|
||||
|
||||
var primaerenergiebedarf =
|
||||
primheizung +
|
||||
(end_energie_warmwasser - Solarsystem_WWbw) * BRSPrimärenergiefaktor +
|
||||
hilfsenergie * 1.8;
|
||||
|
||||
return endenergiegesamt;
|
||||
}
|
||||
}
|
||||
@@ -1,154 +0,0 @@
|
||||
import { getKlimafaktorenClient } from "../Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "../server/Heizwertfaktor";
|
||||
import { Ausstellgrund, Ausweisart } from "./types";
|
||||
import { Gebaeude } from "../Gebaeude";
|
||||
import { User } from "#lib/User";
|
||||
|
||||
export class Verbrauchsausweis {
|
||||
public id?: number;
|
||||
public uid?: string;
|
||||
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 energetischeNutzflaeche(): number {
|
||||
return (
|
||||
this.gebaeude_stammdaten.wohnflaeche *
|
||||
(this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2)
|
||||
);
|
||||
}
|
||||
|
||||
public constructor(initializer?: Verbrauchsausweis) {
|
||||
|
||||
}
|
||||
|
||||
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 primaerEnergieBedarf(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktor(
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
|
||||
return Endenergieverbrauch * brennstoff_1.primaerenergiefaktor;
|
||||
})();
|
||||
}
|
||||
|
||||
public get endEnergieVerbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const date = this.startdatum;
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.gebaeude_stammdaten.plz
|
||||
);
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let brennstoff_1 = getHeizwertfaktor(
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
let brennstoff_2 = getHeizwertfaktor(
|
||||
this.brennstoff_2,
|
||||
this.einheit_2
|
||||
);
|
||||
|
||||
let verbrauch_1_kwh =
|
||||
this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_2_kwh =
|
||||
this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_3_kwh =
|
||||
this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_4_kwh =
|
||||
this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_5_kwh =
|
||||
this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_6_kwh =
|
||||
this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
|
||||
|
||||
let warmwasserZuschlag = 0;
|
||||
let leerstandsZuschlag = 0;
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (this.anteil_warmwasser_1 == 0) {
|
||||
warmwasserZuschlag = 20 * this.energetischeNutzflaeche * 3;
|
||||
}
|
||||
|
||||
if (this.gebaeude_stammdaten.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.gebaeude_stammdaten.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
|
||||
if (this.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
|
||||
kuehlungsZuschlag = 6 * this.energetischeNutzflaeche * 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.energetischeNutzflaeche;
|
||||
|
||||
|
||||
return Energieverbrauchskennwert;
|
||||
})();
|
||||
}
|
||||
}
|
||||
@@ -1,237 +0,0 @@
|
||||
import { Moment } from "moment";
|
||||
import { getKlimafaktorenClient } from "../Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "../server/Heizwertfaktor";
|
||||
import moment from "moment";
|
||||
import { BitChecker } from "../BitChecker";
|
||||
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
|
||||
|
||||
|
||||
export class VerbrauchsausweisGewerbe {
|
||||
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[] = [];
|
||||
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: number = Dachgeschoss.UNBEHEIZT;
|
||||
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: 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: 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;
|
||||
|
||||
// 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 gebaeude_uid?: string;
|
||||
|
||||
public constructor() {}
|
||||
|
||||
public static fromBase64(base64: string): VerbrauchsausweisGewerbe | null {
|
||||
try {
|
||||
const text = Buffer.from(base64, "base64");
|
||||
|
||||
const json = JSON.parse(text.toString());
|
||||
return json;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public get primaerEnergieBedarf(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktor(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
|
||||
|
||||
return Endenergieverbrauch * brennstoff_1.primaerenergiefaktor;
|
||||
})();
|
||||
}
|
||||
|
||||
public get endEnergieVerbrauch(): 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 = getHeizwertfaktor(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
|
||||
let brennstoff_2 = getHeizwertfaktor(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;
|
||||
})();
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
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
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
||||
import {
|
||||
GebaeudeStammdaten,
|
||||
VerbrauchsausweisWohnen,
|
||||
} from "@ibcornelsen/database";
|
||||
import moment from "moment";
|
||||
import trpc from "src/trpc";
|
||||
|
||||
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
|
||||
ausweis: VerbrauchsausweisWohnen & {
|
||||
@@ -23,11 +24,16 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
gebaeude_stammdaten: GebaeudeStammdaten;
|
||||
}
|
||||
) {
|
||||
const date = ausweis.startdatum;
|
||||
const klimafaktoren = await getKlimafaktoren(
|
||||
date,
|
||||
ausweis.gebaeude_stammdaten.plz
|
||||
);
|
||||
if (!ausweis.gebaeude_stammdaten.plz || !ausweis.startdatum) {
|
||||
return null
|
||||
}
|
||||
|
||||
const klimafaktoren = await trpc.klimafaktoren.query({
|
||||
plz: ausweis.gebaeude_stammdaten.plz,
|
||||
genauigkeit: "years",
|
||||
startdatum: ausweis.startdatum,
|
||||
enddatum: moment(ausweis.startdatum).add(2, "years").toDate()
|
||||
})
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
@@ -104,7 +110,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
}
|
||||
|
||||
let durchschnittsKlimafaktor =
|
||||
(klimafaktoren[0] + klimafaktoren[1] + klimafaktoren[2]) / 3 || 1;
|
||||
(klimafaktoren[0].klimafaktor + klimafaktoren[1].klimafaktor + klimafaktoren[2].klimafaktor) / 3 || 1;
|
||||
|
||||
let energieVerbrauchHeizungBereinigt_1 =
|
||||
energieVerbrauchHeizung_1 * durchschnittsKlimafaktor;
|
||||
|
||||
@@ -1,56 +1,22 @@
|
||||
import moment from "moment";
|
||||
import { memoize } from "./Memoization";
|
||||
import { prisma } from "@ibcornelsen/database";
|
||||
import { l } from "astro-i18n";
|
||||
import trpc from "src/trpc";
|
||||
|
||||
export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>(async (date: Date, plz: string) => {
|
||||
export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
|
||||
if (!plz || !date) {
|
||||
return [0, 0, 0];
|
||||
return null;
|
||||
}
|
||||
|
||||
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${plz}`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
});
|
||||
const json = await response.json();
|
||||
const response = await trpc.klimafaktoren.query({
|
||||
plz,
|
||||
genauigkeit: "years",
|
||||
startdatum: date,
|
||||
enddatum: moment(date).add(2, "years").toDate()
|
||||
})
|
||||
|
||||
if (!json.success) {
|
||||
return [0, 0, 0];
|
||||
if (!response) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Object.values(json.data) as [number, number, number];
|
||||
});
|
||||
|
||||
export const getKlimafaktorenServer = memoize(async (date: Date, plz: string) => {
|
||||
if (!plz || !date) {
|
||||
return [0, 0, 0];
|
||||
}
|
||||
|
||||
const klimafaktoren = await prisma.klimafaktoren.findMany({
|
||||
where: {
|
||||
plz,
|
||||
month: moment(date).month(),
|
||||
OR: [
|
||||
{
|
||||
year: moment(date).year()
|
||||
},
|
||||
{
|
||||
year: moment(date).year() + 1
|
||||
},
|
||||
{
|
||||
year: moment(date).year() + 2
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
if (klimafaktoren.length === 0) {
|
||||
return [0, 0, 0];
|
||||
}
|
||||
|
||||
return klimafaktoren.map(klimafaktor => klimafaktor.klimafaktor) as [number, number, number];
|
||||
});
|
||||
|
||||
export const getKlimafaktoren = typeof window === "undefined" ? getKlimafaktorenServer : getKlimafaktorenClient;
|
||||
return response;
|
||||
});
|
||||
@@ -1,33 +0,0 @@
|
||||
import moment, { Moment } from "moment";
|
||||
import { Klimafaktoren, prisma } from "@ibcornelsen/database";
|
||||
|
||||
export async function getClimateFactor(
|
||||
dates: Moment[],
|
||||
plz: string
|
||||
): Promise<Klimafaktoren[] | null> {
|
||||
if (dates.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (plz.length !== 5 && plz.length !== 4) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let result = await prisma.klimafaktoren.findMany({
|
||||
where: {
|
||||
plz: plz,
|
||||
month: dates[0].month(),
|
||||
OR: dates.map((date) => {
|
||||
return {
|
||||
year: date.year(),
|
||||
};
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
if (!result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
347
src/lib/XML/AusweisBerechnungen2016.ts
Normal file
347
src/lib/XML/AusweisBerechnungen2016.ts
Normal file
@@ -0,0 +1,347 @@
|
||||
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database";
|
||||
import { getEmpfehlungen } from "./getEmpfehlungen";
|
||||
|
||||
export class AusweisBerechnungen2016 {
|
||||
private ausweis: VerbrauchsausweisWohnen;
|
||||
private gebaeude: GebaeudeStammdaten;
|
||||
private _berechParameter: any;
|
||||
|
||||
public constructor(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten, berechnungen: any) {
|
||||
this.ausweis = ausweis;
|
||||
this.gebaeude = gebaeude
|
||||
this._berechParameter = berechnungen;
|
||||
}
|
||||
|
||||
public getAusweisart() {
|
||||
switch (this.ausweis.ausweisart.toLowerCase()) {
|
||||
case ('va'):
|
||||
return {'typ' : 'Wohngebaeude', 'art' : 'Verbrauchsausweis Wohngebäude', 'kuerzel' : 'va'};
|
||||
case ('ba'):
|
||||
return {'typ' : 'Wohngebaeude', 'art' : 'Bedarfsausweis Wohngebäude', 'kuerzel' : 'ba'};
|
||||
case ('vanw'):
|
||||
return {
|
||||
'typ' : 'Nichtwohngebaeude',
|
||||
'art' : 'Verbrauchsausweis Nichtwohngebäude',
|
||||
'kuerzel' : 'vanw'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public altersKlasse(art: "baujahr_gebaeude" | "baujahr_heizung") {
|
||||
const year = this.gebaeude[art][0] || 0;
|
||||
switch (true) {
|
||||
case (year <= 1918):
|
||||
return 'bis 1918';
|
||||
|
||||
case (year > 1918 && year <= 1948):
|
||||
return '1919...1948';
|
||||
|
||||
case (year > 1948 && year <= 1957):
|
||||
return '1949...1957';
|
||||
|
||||
case (year > 1957 && year <= 1968):
|
||||
return '1958...1968';
|
||||
|
||||
case (year > 1968 && year <= 1978):
|
||||
return '1969...1978';
|
||||
|
||||
case (year > 1978 && year <= 1982):
|
||||
return '1979...1982';
|
||||
|
||||
case (year > 1982 && year <= 1994):
|
||||
return '1983...1994';
|
||||
|
||||
case (year > 1994 && year <= 2002):
|
||||
return '1995...2002';
|
||||
|
||||
case (year > 2002 && year <= 2007):
|
||||
return '2003...2007';
|
||||
|
||||
case (year > 2007 && year <= 2015):
|
||||
return '2008...2015';
|
||||
|
||||
case (year > 2015):
|
||||
return 'ab 2016';
|
||||
|
||||
default:
|
||||
return '';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public getGebaeudeTeil() {
|
||||
if (this.gebaeude.gebaeudeteil == "Gesamtgebäude") {
|
||||
return "Ganzes Gebäude";
|
||||
} else if (this.gebaeude.gebaeudeteil == "Wohnen" && this.ausweis.ausweisart == "VANW") {
|
||||
return "Teil des Wohngebäudes";
|
||||
} else {
|
||||
return "Teil des Nichtwohngebäudes";
|
||||
}
|
||||
}
|
||||
|
||||
public getGebaeudeTyp(getAnbaugrad = false) {
|
||||
|
||||
let geTypes = {
|
||||
'Einfamilienhaus' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Freistehendes Einfamilienhaus' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Freistehendes Zweifamilienhaus' : {
|
||||
'typ' : "Zweifamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Doppelhaushälfte' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'einseitig angebaut'
|
||||
},
|
||||
'Reihenendhaus' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'einseitig angebaut'
|
||||
},
|
||||
'Reihenmittelhaus' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'zweiseitig angebaut'
|
||||
},
|
||||
'Mehrfamilienhaus' : {
|
||||
'typ' : "Mehrfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Wohn- und Geschäftshaus' : {
|
||||
'typ' : "Wohnteil gemischt genutztes Gebäude",
|
||||
'anbaugrad' : 'zweiseitig angebaut'
|
||||
},
|
||||
'Stadthausdrittel' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'zweiseitig angebaut'
|
||||
},
|
||||
'Bungalow' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Winkelbungalow' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
'Atrium-Bungalow' : {
|
||||
'typ' : "Einfamilienhaus",
|
||||
'anbaugrad' : 'freistehend'
|
||||
},
|
||||
};
|
||||
if (getAnbaugrad) {
|
||||
return geTypes[this.gebaeude.gebaeudetyp]['anbaugrad'];
|
||||
}
|
||||
return geTypes[this.gebaeude.gebaeudetyp]['typ'];
|
||||
}
|
||||
|
||||
public getEnergietraegerBezeichnung(bezeichnung: string, einheit: string) {
|
||||
let bez = bezeichnung.trim() + einheit.trim();
|
||||
let retArr = {
|
||||
'Heizöl ELl' : "Heizöl EL in Liter",
|
||||
'Heizöl ELkWh' : "Heizöl EL in kWh Brennwert",
|
||||
'HeizölkWh' : "Heizöl EL in kWh Brennwert",
|
||||
3 : "Heizöl-Bioöl-Mischung in Liter",
|
||||
4 : "Heizöl-Bioöl-Mischung in kWh Brennwert",
|
||||
5 : "Heizöl-Bioöl-Mischung in kWh Brennwert",
|
||||
6 : "Bioöl in Liter",
|
||||
7 : "Bioöl in kWh Brennwert",
|
||||
8 : "Bioöl in kWh Brennwert",
|
||||
'Erdgas Hm³' : "Erdgas H in m³",
|
||||
'Erdgas HkWh' : "Erdgas H in kWh Brennwert",
|
||||
'ErdgaskWh' : "Erdgas H in kWh Brennwert",
|
||||
12 : "Erdgas-Biogas-Mischung in m³",
|
||||
13 : "Erdgas-Biogas-Mischung in kWh Brennwert",
|
||||
14 : "Erdgas-Biogas-Mischung in kWh Brennwert",
|
||||
15 : "Biogas in m³",
|
||||
16 : "Biogas in kWh Brennwert",
|
||||
17 : "Biogas in kWh Brennwert",
|
||||
'Flüssiggasm³' : "Flüssiggas in m³ gasförmig",
|
||||
'Flüssiggasl' : "Flüssiggas in Liter flüssig",
|
||||
'Flüssiggaskg' : "Flüssiggas in kg",
|
||||
'FlüssiggaskWh' : "Flüssiggas in kWh Brennwert",
|
||||
22 : "Flüssiggas in kWh Brennwert",
|
||||
23 : "Steinkohle in kg",
|
||||
24 : "Steinkohle in kWh Brennwert",
|
||||
'Kokskg' : "Koks in kg",
|
||||
'KokskWh' : "Koks in kWh Brennwert",
|
||||
'Braunkohlekg' : "Braunkohle in kg",
|
||||
'BraunkohlekWh' : "Braunkohle in kWh Brennwert",
|
||||
'Brennholzm³' : "Holz in Raummeter",
|
||||
'BrennholzSRm' : "Holz in Schüttraummeter",
|
||||
'Brennholzkg' : "Holz in kg",
|
||||
'BrennholzkWh' : "Holz in kWh Brennwert",
|
||||
32 : "Holz in kWh Brennwert",
|
||||
'HolzhackschnitzelSRm' : "Holz in Schüttraummeter",
|
||||
'Holzhackschnitzelkg' : "Holz in kg",
|
||||
'HolzhackschnitzelkWh' : "Holz in kWh Brennwert",
|
||||
36 : "Holz in kWh Brennwert",
|
||||
'Holz-PelletsSRm' : "Holz in Schüttraummeter",
|
||||
'Holz-Pelletskg' : "Holz in kg",
|
||||
'Holz-PelletskWh' : "Holz in kWh Brennwert",
|
||||
40 : "Holz in kWh Brennwert",
|
||||
41 : "Wärme aus lokalem BHKW in kWh",
|
||||
'Nahwärme HKW FBkWh' : "Nah-/Fernwärme aus Heizwerken - fossiler Brennstoff in kWh",
|
||||
'Fernwärme HKW FBkWh' : "Nah-/Fernwärme aus Heizwerken - fossiler Brennstoff in kWh",
|
||||
'StrommixkWh' : "allgemeiner Strommix in kWh",
|
||||
'Erdgas LkWh' : "Erdgas H in kWh Brennwert",
|
||||
'Erdgas Lm³' : "Erdgas H in m³",
|
||||
'Erdgasm³' : "Erdgas H in m³",
|
||||
'Heizöll' : "Heizöl EL in Liter",
|
||||
'Nahwärme HKW EBkWh' : "Nah-/Fernwärme aus Heizwerken - erneuerbarer Brennstoff in kWh",
|
||||
'Fernwärme HKW EBkWh' : "Nah-/Fernwärme aus Heizwerken - erneuerbarer Brennstoff in kWh",
|
||||
'Nahwärme KWK EBkWh' : "Nah-/Fernwärme aus KWK - erneuerbarer Brennstoff in kWh",
|
||||
'Fernwärme KWK EBkWh' : "Nah-/Fernwärme aus KWK - erneuerbarer Brennstoff in kWh",
|
||||
'Nahwärme KWK FBkWh' : "Nah-/Fernwärme aus KWK - fossiler Brennstoff in kWh",
|
||||
'Fernwärme KWK FBkWh' : "Nah-/Fernwärme aus KWK - fossiler Brennstoff in kWh"
|
||||
|
||||
};
|
||||
|
||||
return retArr[bez];
|
||||
}
|
||||
|
||||
|
||||
public getEmpfehlungen() {
|
||||
let empfehlungen = getEmpfehlungen(this.ausweis, this.gebaeude);
|
||||
|
||||
if (empfehlungen.length > 0) {
|
||||
return 'http://www.bbsr-energieeinsparung.de/EnEVPortal/DE/Home/home_node.html';
|
||||
} else {
|
||||
return 'Angabe hier nicht relevant';
|
||||
}
|
||||
}
|
||||
|
||||
public getLueftungsKonzept() {
|
||||
let lueftungsKonzept: Record<string, string> = {}
|
||||
lueftungsKonzept['fensterlueftung'] = (this.gebaeude.lueftung == "Fensterlüftung")
|
||||
? "true" : "false";
|
||||
|
||||
lueftungsKonzept['schachtlueftung'] = (this.gebaeude.lueftung == "Schachtlüftung")
|
||||
? "true" : "false";
|
||||
|
||||
lueftungsKonzept['ohneRueckgewinnung'] = (this.gebaeude.lueftung
|
||||
== "Lüftungsanlage ohne Wärmerückgewinnung") ? "true" : "false";
|
||||
|
||||
lueftungsKonzept['mitRueckgewinnung'] = (this.gebaeude.lueftung
|
||||
== "Lüftungsanlage mit Wärmerückgewinnung") ? "true" : "false";
|
||||
|
||||
return lueftungsKonzept;
|
||||
}
|
||||
|
||||
public kellerBeheizt() {
|
||||
return this.ausweis.keller_beheizt ? "true" : "false";
|
||||
}
|
||||
|
||||
public anlass() {
|
||||
|
||||
let anlass = '';
|
||||
|
||||
if (this.ausweis.ausstellgrund == "Neubau") {
|
||||
anlass = 'Neubau';
|
||||
} else if (this.ausweis.ausstellgrund == "Modernisierung") {
|
||||
anlass = 'Modernisierung-Erweiterung';
|
||||
} else if (this.ausweis.ausstellgrund == "Vermietung") {
|
||||
anlass = 'Vermietung-Verkauf';
|
||||
} else if (this.ausweis.ausstellgrund == "Aushang") {
|
||||
anlass = 'Aushangpflicht';
|
||||
} else {
|
||||
anlass = 'Sonstiges';
|
||||
}
|
||||
|
||||
return anlass;
|
||||
|
||||
}
|
||||
|
||||
public async getOrt() {
|
||||
if (!this.gebaeude.plz) {
|
||||
return ""
|
||||
}
|
||||
|
||||
const result = await prisma.postleitzahlen.findUnique({
|
||||
where: {
|
||||
plz: this.gebaeude.plz
|
||||
}
|
||||
})
|
||||
|
||||
return result?.bundesland || "";
|
||||
}
|
||||
|
||||
public getBerechAusweis() {
|
||||
|
||||
return this._berechParameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* function to check if several values are filled
|
||||
*/
|
||||
public emptyParams() {
|
||||
let emptyParams: Record<string, string> = {};
|
||||
emptyParams['wirdGekuehlt'] = this.ausweis.wird_gekuehlt ? 'true' : 'false';
|
||||
|
||||
emptyParams['datenErhebungEigentuemer'] = "true";
|
||||
|
||||
emptyParams['datenErhebungAussteller'] = "false";
|
||||
|
||||
emptyParams['nwheizung'] = this.gebaeude.zentralheizung
|
||||
? 'true' : 'false';
|
||||
emptyParams['nwwarmwasser'] = this.gebaeude.einzelofen
|
||||
? 'true' : 'false';
|
||||
emptyParams['nwlueftung'] = this.gebaeude.durchlauf_erhitzer
|
||||
? 'true' : 'false';
|
||||
emptyParams['nwbeleuchtung'] = this.gebaeude.standard_kessel
|
||||
? 'true' : 'false';
|
||||
emptyParams['nwkuehlung'] = this.gebaeude.solarsystem_warmwasser
|
||||
? 'true' : 'false';
|
||||
//emptyParams['nwsonstiges'] = this.gebaeude.nwsonstiges
|
||||
// ? 'true' : 'false';
|
||||
|
||||
return emptyParams;
|
||||
}
|
||||
|
||||
|
||||
public getBauEmpfehlungen() {
|
||||
let empfehlungen = getEmpfehlungen(this.ausweis, this.gebaeude);
|
||||
|
||||
return empfehlungen.map(empfehlung => {
|
||||
return {
|
||||
"anlagenteil" : empfehlung["anlagenteil"],
|
||||
"massnahme" : empfehlung["description"]
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public getEnergieEffizienzklasse() {
|
||||
|
||||
let param = this._berechParameter.endEnergieVerbrauchGesamt;
|
||||
|
||||
if (param < 30) {
|
||||
return 'A+';
|
||||
}else if (param < 50) {
|
||||
return 'A';
|
||||
}else if (param < 75) {
|
||||
return 'B';
|
||||
}else if (param < 100) {
|
||||
return 'C';
|
||||
}else if (param < 130) {
|
||||
return 'D';
|
||||
}else if (param < 160) {
|
||||
return 'E';
|
||||
}else if (param < 200) {
|
||||
return 'F';
|
||||
}else if (param < 250) {
|
||||
return 'G';
|
||||
}else if (param >= 250) {
|
||||
return 'H';
|
||||
}
|
||||
return this._berechParameter.endEnergieVerbrauchGesamt;
|
||||
}
|
||||
|
||||
public getAusweisParameter() {
|
||||
return this.ausweis;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,350 @@
|
||||
import {
|
||||
endEnergieVerbrauchVerbrauchsausweis_2016,
|
||||
energetischeNutzflaecheVerbrauchsausweisWohnen_2016,
|
||||
} from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
||||
import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
||||
import {
|
||||
GebaeudeStammdaten,
|
||||
VerbrauchsausweisWohnen,
|
||||
prisma,
|
||||
} from "@ibcornelsen/database";
|
||||
import { AusweisBerechnungen2016 } from "../AusweisBerechnungen2016";
|
||||
import moment from "moment";
|
||||
|
||||
export async function xmlVerbrauchsausweisWohnen_2016(
|
||||
ausweis: VerbrauchsausweisWohnen & {
|
||||
gebaeude_stammdaten: GebaeudeStammdaten;
|
||||
}
|
||||
): Promise<string> {
|
||||
const gebaeude = ausweis.gebaeude_stammdaten;
|
||||
|
||||
const bundesland = await prisma.postleitzahlen.findUnique({
|
||||
where: {
|
||||
plz: gebaeude.plz as string,
|
||||
},
|
||||
});
|
||||
// Wir müssen die Postleitzahl unkenntlich machen.
|
||||
let postleitzahl = gebaeude.plz?.substring(0, 3) + "XX";
|
||||
|
||||
const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
||||
const berechnungen = new AusweisBerechnungen2016(
|
||||
ausweis,
|
||||
ausweis.gebaeude_stammdaten,
|
||||
result
|
||||
);
|
||||
const klimafaktoren = await getKlimafaktoren(
|
||||
ausweis.startdatum,
|
||||
gebaeude.plz
|
||||
);
|
||||
|
||||
// Berechnungen
|
||||
let bauAltersKlasseAnlage = berechnungen.altersKlasse("baujahr_heizung");
|
||||
let bauAltersKlasseGebaeude = berechnungen.altersKlasse("baujahr_gebaeude");
|
||||
|
||||
let kellerBeheizt = ausweis.keller_beheizt ? "true" : "false";
|
||||
|
||||
let Zeitraum1von = moment(ausweis.startdatum);
|
||||
let Zeitraum1bis = Zeitraum1von.clone()
|
||||
.add("12", "month")
|
||||
.format("YYYY-MM-DD");
|
||||
let Zeitraum2von = Zeitraum1von.clone()
|
||||
.add("12", "month")
|
||||
.add("1", "day")
|
||||
.format("YYYY-MM-DD");
|
||||
let Zeitraum2bis = Zeitraum1von.clone()
|
||||
.add("24", "month")
|
||||
.format("YYYY-MM-DD");
|
||||
let Zeitraum3von = Zeitraum1von.clone()
|
||||
.add("24", "month")
|
||||
.add("1", "day")
|
||||
.format("YYYY-MM-DD");
|
||||
let Zeitraum3bis = Zeitraum1von.clone()
|
||||
.add("36", "month")
|
||||
.format("YYYY-MM-DD");
|
||||
|
||||
let lueftungsKonzept = berechnungen.getLueftungsKonzept();
|
||||
let gebaeudeTyp = berechnungen.getGebaeudeTyp();
|
||||
|
||||
let erstellungsdatum = moment(ausweis.erstellungsdatum).format(
|
||||
"YYYY-MM-DD"
|
||||
);
|
||||
|
||||
let empfehlungen = berechnungen.getBauEmpfehlungen();
|
||||
let empfehlungenMoeglich = empfehlungen.length > 0 ? "true" : "false";
|
||||
let energieeffizienzKlasse = berechnungen.getEnergieEffizienzklasse();
|
||||
|
||||
let keineNutzungWarmwasser = ausweis.warmwasser_enthalten
|
||||
? "false"
|
||||
: "true";
|
||||
|
||||
let heizwertfaktor_1 = getHeizwertfaktor(
|
||||
ausweis.brennstoff_1,
|
||||
ausweis.einheit_1
|
||||
);
|
||||
let heizwertfaktor_2 = getHeizwertfaktor(
|
||||
ausweis.brennstoff_2,
|
||||
ausweis.einheit_2
|
||||
);
|
||||
|
||||
let warmWasserErmittlung =
|
||||
(ausweis.anteil_warmwasser_1 || 0) > 0
|
||||
? "direkter Messwert Wärmemenge"
|
||||
: "Rechenwert nach Heizkostenverordnung (Wohngebäude)";
|
||||
let warmWasserErmittlung_2 =
|
||||
(ausweis.anteil_warmwasser_2 || 0) > 0
|
||||
? "direkter Messwert Wärmemenge"
|
||||
: "Rechenwert nach Heizkostenverordnung (Wohngebäude)";
|
||||
if (!ausweis.warmwasser_enthalten) {
|
||||
warmWasserErmittlung =
|
||||
"Pauschale für dezentrale Warmwasserbereitung (Wohngebäude)";
|
||||
warmWasserErmittlung_2 =
|
||||
"Pauschale für dezentrale Warmwasserbereitung (Wohngebäude)";
|
||||
}
|
||||
|
||||
let anlageKuehlung = ausweis.wird_gekuehlt ? "true" : "false";
|
||||
|
||||
let verwalt = "";
|
||||
let artalt = "";
|
||||
if (ausweis.alternative_heizung) {
|
||||
verwalt += "Heizung ";
|
||||
}
|
||||
if (ausweis.alternative_warmwasser) {
|
||||
verwalt += "Warmwasser ";
|
||||
}
|
||||
if (ausweis.alternative_lueftung) {
|
||||
verwalt += "Lüftung ";
|
||||
}
|
||||
if (ausweis.alternative_kuehlung) {
|
||||
verwalt += "Kühlung ";
|
||||
}
|
||||
|
||||
if (gebaeude.solarsystem_warmwasser) {
|
||||
artalt += "Solar ";
|
||||
}
|
||||
if (gebaeude.waermepumpe) {
|
||||
artalt += "Erdwärme oder Umgebungswärme ";
|
||||
}
|
||||
if (
|
||||
ausweis.brennstoff_2 == "Holz-Pellets" ||
|
||||
ausweis.brennstoff_2 == "Brennholz" ||
|
||||
ausweis.brennstoff_2 == "Holzhackschnitzel" ||
|
||||
ausweis.brennstoff_2 == "Nah/Fernwärme KWK EB" ||
|
||||
ausweis.brennstoff_2 == "Nah/Fernwärme HKW EB" ||
|
||||
ausweis.brennstoff_1 == "Holz-Pellets" ||
|
||||
ausweis.brennstoff_1 == "Brennholz" ||
|
||||
ausweis.brennstoff_1 == "Holzhackschnitzel" ||
|
||||
ausweis.brennstoff_1 == "Nah/Fernwärme KWK EB" ||
|
||||
ausweis.brennstoff_1 == "Nah/Fernwärme HKW EB"
|
||||
) {
|
||||
artalt += "Nachwachsend ";
|
||||
}
|
||||
|
||||
artalt = artalt || "keine";
|
||||
verwalt = verwalt || "keine";
|
||||
|
||||
let gebaeudeTeil = berechnungen.getGebaeudeTeil();
|
||||
|
||||
const energetischeNutzflaeche =
|
||||
energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis);
|
||||
|
||||
let flaecheGekuehlt = ausweis.wird_gekuehlt ? energetischeNutzflaeche : 0;
|
||||
|
||||
let endEnergieVerbrauchGesamt = Math.round(
|
||||
result.endEnergieVerbrauchGesamt
|
||||
);
|
||||
let primaerEnergieVerbrauchGesamt = Math.round(
|
||||
result.primaerEnergieVerbrauchGesamt
|
||||
);
|
||||
|
||||
let energieTraeger = berechnungen.getEnergietraegerBezeichnung(
|
||||
ausweis.brennstoff_1,
|
||||
ausweis.einheit_1
|
||||
);
|
||||
let energieTraeger_2 = berechnungen.getEnergietraegerBezeichnung(
|
||||
ausweis.brennstoff_2,
|
||||
ausweis.einheit_2
|
||||
);
|
||||
|
||||
let warmwasserZuschlag = Math.round(result.energieVerbrauchWarmwasser_1);
|
||||
|
||||
let leerstandsZuschlagHeizung = Math.round(
|
||||
result.leerstandsZuschlagHeizung
|
||||
);
|
||||
let Aussteller_ID_DIB = "jens.cornelsen@ib-cornelsen.de";
|
||||
let Aussteller_PWD_DIBT = "62465E79F6A61F31C4DCA9E2AF788DD3";
|
||||
|
||||
let energieVerbrauch_1 = Math.round(result.verbrauch_1_kwh);
|
||||
let energieVerbrauch_2 = Math.round(result.verbrauch_2_kwh);
|
||||
let energieVerbrauch_3 = Math.round(result.verbrauch_3_kwh);
|
||||
|
||||
let xml = `<ZusatzdatenErfassung xmlns='http://energieausweis.dibt.de/WebServiceEnergie/DibtEnergieAusweisService'>
|
||||
<doc>
|
||||
<n1:EnEV-Energieausweis xmlns:n1=\"https://energieausweis.dibt.de/schema/Kontrollsystem_Versionsstand_2016-06-30.xsd\">
|
||||
<n1:Energieausweis-Daten EnEV-Version=\"2013\" Rechtsstand=\"2016-01-01\">
|
||||
<n1:Registriernummer>${ausweis.registriernummer}</n1:Registriernummer>
|
||||
<n1:Ausstellungsdatum>${erstellungsdatum}</n1:Ausstellungsdatum>
|
||||
<n1:Bundesland>${bundesland?.bundesland}</n1:Bundesland>
|
||||
<n1:Postleitzahl>${postleitzahl}</n1:Postleitzahl>
|
||||
<n1:Gebaeudeteil>${gebaeudeTeil}</n1:Gebaeudeteil>
|
||||
<n1:Baujahr-Gebaeude>${gebaeude.baujahr_gebaeude}</n1:Baujahr-Gebaeude>
|
||||
<n1:Altersklasse-Gebaeude>${bauAltersKlasseGebaeude}</n1:Altersklasse-Gebaeude>
|
||||
<n1:Baujahr-Waermeerzeuger>${gebaeude.baujahr_heizung}</n1:Baujahr-Waermeerzeuger>
|
||||
<n1:Altersklasse-Waermeerzeuger>${bauAltersKlasseAnlage}</n1:Altersklasse-Waermeerzeuger>
|
||||
<n1:wesentliche-Energietraeger>${energieTraeger}</n1:wesentliche-Energietraeger>
|
||||
<n1:Erneuerbare-Art>${artalt}</n1:Erneuerbare-Art>
|
||||
<n1:Erneuerbare-Verwendung>${verwalt}</n1:Erneuerbare-Verwendung>
|
||||
<n1:Lueftungsart-Fensterlueftung>${lueftungsKonzept["fensterlueftung"]}</n1:Lueftungsart-Fensterlueftung>
|
||||
<n1:Lueftungsart-Schachtlueftung>${lueftungsKonzept["schachtlueftung"]}</n1:Lueftungsart-Schachtlueftung>
|
||||
<n1:Lueftungsart-Anlage-o-WRG>${lueftungsKonzept["ohneRueckgewinnung"]}</n1:Lueftungsart-Anlage-o-WRG>
|
||||
<n1:Lueftungsart-Anlage-m-WRG>${lueftungsKonzept["mitRueckgewinnung"]}</n1:Lueftungsart-Anlage-m-WRG>
|
||||
<n1:Anlage-zur-Kuehlung>${anlageKuehlung}</n1:Anlage-zur-Kuehlung>
|
||||
<n1:Ausstellungsanlass>{berechnungen.anlass()}</n1:Ausstellungsanlass>
|
||||
<n1:Datenerhebung-Aussteller>false</n1:Datenerhebung-Aussteller>
|
||||
<n1:Datenerhebung-Eigentuemer>true</n1:Datenerhebung-Eigentuemer>
|
||||
<n1:Wohngebaeude>
|
||||
<n1:Gebaeudetyp>${gebaeudeTyp}</n1:Gebaeudetyp>
|
||||
<n1:Anzahl-Wohneinheiten>${gebaeude.einheiten}</n1:Anzahl-Wohneinheiten>
|
||||
<n1:Gebaeudenutzflaeche>${energetischeNutzflaeche}</n1:Gebaeudenutzflaeche>
|
||||
<n1:Verbrauchswerte>
|
||||
<n1:Flaechenermittlung-AN-aus-Wohnflaeche>true</n1:Flaechenermittlung-AN-aus-Wohnflaeche>
|
||||
<n1:Wohnflaeche>${gebaeude.flaeche}</n1:Wohnflaeche>
|
||||
<n1:Keller-beheizt>${kellerBeheizt}</n1:Keller-beheizt>
|
||||
<n1:Energietraeger>
|
||||
<n1:Energietraeger-Verbrauch>${energieTraeger}</n1:Energietraeger-Verbrauch>
|
||||
<n1:Unterer-Heizwert>${heizwertfaktor_1.umrechnungsfaktor}</n1:Unterer-Heizwert>
|
||||
<n1:Primaerenergiefaktor>${heizwertfaktor_1.primaerenergiefaktor}</n1:Primaerenergiefaktor>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum1von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum1bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_1}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${energieVerbrauch_1}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_1}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[0]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum2von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum2bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_2}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${energieVerbrauch_2}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_1}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[1]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum3von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum3bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_3}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${energieVerbrauch_3}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_1}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[2]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
</n1:Energietraeger>`;
|
||||
|
||||
if (ausweis.zusaetzliche_heizquelle) {
|
||||
xml += `<n1:Energietraeger>
|
||||
<n1:Energietraeger-Verbrauch>${energieTraeger_2}</n1:Energietraeger-Verbrauch>
|
||||
<n1:Unterer-Heizwert>${heizwertfaktor_2.umrechnungsfaktor}</n1:Unterer-Heizwert>
|
||||
<n1:Primaerenergiefaktor>${heizwertfaktor_2.primaerenergiefaktor}</n1:Primaerenergiefaktor>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum1von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum1bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_4}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${result.verbrauch_4_kwh}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_2}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung_2}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[0]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum2von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum2bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_5}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${result.verbrauch_5_kwh}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_2}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung_2}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[1]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
<n1:Zeitraum>
|
||||
<n1:Startdatum>${Zeitraum3von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum3bis}</n1:Enddatum>
|
||||
<n1:Verbrauchte-Menge>${ausweis.verbrauch_6}</n1:Verbrauchte-Menge>
|
||||
<n1:Energieverbrauch>${result.verbrauch_6_kwh}</n1:Energieverbrauch>
|
||||
<n1:Energieverbrauchsanteil-Warmwasser-zentral>${ausweis.anteil_warmwasser_2}</n1:Energieverbrauchsanteil-Warmwasser-zentral>
|
||||
<n1:Warmwasserwertermittlung>${warmWasserErmittlung_2}</n1:Warmwasserwertermittlung>
|
||||
<n1:Klimafaktor>${klimafaktoren[2]}</n1:Klimafaktor>
|
||||
</n1:Zeitraum>
|
||||
|
||||
</n1:Energietraeger>`;
|
||||
}
|
||||
|
||||
xml += `<n1:Leerstandszuschlag-Heizung>
|
||||
<n1:Leerstandszuschlag-nach-Bekanntmachung>
|
||||
<n1:Leerstandsfaktor>${result.leerstand}</n1:Leerstandsfaktor>
|
||||
<n1:Startdatum>${Zeitraum1von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum3bis}</n1:Enddatum>
|
||||
<n1:Leerstandszuschlag-kWh>${leerstandsZuschlagHeizung}</n1:Leerstandszuschlag-kWh>
|
||||
<n1:Primaerenergiefaktor>${heizwertfaktor_1.primaerenergiefaktor}</n1:Primaerenergiefaktor>
|
||||
</n1:Leerstandszuschlag-nach-Bekanntmachung>
|
||||
</n1:Leerstandszuschlag-Heizung>
|
||||
<n1:Leerstandszuschlag-Warmwasser>`;
|
||||
|
||||
if (
|
||||
ausweis.warmwasser_enthalten &&
|
||||
(gebaeude.leerstand || 0) > 0 &&
|
||||
(ausweis.anteil_warmwasser_1 || 0) > 0
|
||||
) {
|
||||
xml += `<n1:keine-Nutzung-von-WW>${keineNutzungWarmwasser}</n1:keine-Nutzung-von-WW>
|
||||
<n1:kein-Leerstand>Kein längerer Leerstand Warmwasser zu berücksichtigen.</n1:kein-Leerstand>`;
|
||||
} else {
|
||||
xml += `<n1:keine-Nutzung-von-WW>${keineNutzungWarmwasser}</n1:keine-Nutzung-von-WW>
|
||||
<n1:kein-Leerstand>Kein längerer Leerstand Warmwasser zu berücksichtigen.</n1:kein-Leerstand>`;
|
||||
}
|
||||
|
||||
xml += `</n1:Leerstandszuschlag-Warmwasser>
|
||||
<n1:Warmwasserzuschlag>
|
||||
<n1:Startdatum>${Zeitraum1von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum3bis}</n1:Enddatum>
|
||||
<n1:Primaerenergiefaktor>${heizwertfaktor_1.primaerenergiefaktor}</n1:Primaerenergiefaktor>
|
||||
<n1:Warmwasserzuschlag-kWh>${warmwasserZuschlag}</n1:Warmwasserzuschlag-kWh>
|
||||
</n1:Warmwasserzuschlag>
|
||||
<n1:Kuehlzuschlag>
|
||||
<n1:Startdatum>${Zeitraum1von}</n1:Startdatum>
|
||||
<n1:Enddatum>${Zeitraum3bis}</n1:Enddatum>
|
||||
<n1:Gebaeudenutzflaeche-gekuehlt>${flaecheGekuehlt}</n1:Gebaeudenutzflaeche-gekuehlt>
|
||||
<n1:Primaerenergiefaktor>1.8</n1:Primaerenergiefaktor>
|
||||
<n1:Kuehlzuschlag-kWh>${result.kuehlungsZuschlag}</n1:Kuehlzuschlag-kWh>
|
||||
</n1:Kuehlzuschlag>
|
||||
<n1:Mittlerer-Endenergieverbrauch>${endEnergieVerbrauchGesamt}</n1:Mittlerer-Endenergieverbrauch>
|
||||
<n1:Mittlerer-Primaerenergieverbrauch>${primaerEnergieVerbrauchGesamt}</n1:Mittlerer-Primaerenergieverbrauch>
|
||||
<n1:Energieeffizienzklasse>${energieeffizienzKlasse}</n1:Energieeffizienzklasse>
|
||||
</n1:Verbrauchswerte>
|
||||
</n1:Wohngebaeude>
|
||||
<n1:Empfehlungen-moeglich>${empfehlungenMoeglich}</n1:Empfehlungen-moeglich>`;
|
||||
|
||||
let i = 1;
|
||||
for (const empfehlung of empfehlungen) {
|
||||
let description = empfehlung.massnahme.replace(/\n/g, "");
|
||||
xml += `<n1:Modernisierungsempfehlungen>
|
||||
<n1:Nummer>${i}</n1:Nummer>
|
||||
<n1:Bauteil-Anlagenteil>${empfehlung["anlagenteil"]}</n1:Bauteil-Anlagenteil>
|
||||
<n1:Massnahmenbeschreibung>${description}</n1:Massnahmenbeschreibung>
|
||||
<n1:Modernisierungskombination>in Zusammenhang mit größerer Modernisierung</n1:Modernisierungskombination>
|
||||
</n1:Modernisierungsempfehlungen>`;
|
||||
i++;
|
||||
}
|
||||
|
||||
xml += `<n1:Extrablatt-Modernisierung>false</n1:Extrablatt-Modernisierung>
|
||||
<n1:Softwarehersteller-Programm-Version>Version 2.0</n1:Softwarehersteller-Programm-Version>
|
||||
</n1:Energieausweis-Daten>
|
||||
</n1:EnEV-Energieausweis>
|
||||
</doc>
|
||||
<ausweisnummer>${ausweis.registriernummer}</ausweisnummer>
|
||||
<username>${Aussteller_ID_DIB}</username>
|
||||
<passwort>${Aussteller_PWD_DIBT}</passwort>
|
||||
</ZusatzdatenErfassung>
|
||||
`;
|
||||
|
||||
return xml;
|
||||
}
|
||||
125
src/lib/XML/getEmpfehlungen.ts
Normal file
125
src/lib/XML/getEmpfehlungen.ts
Normal file
@@ -0,0 +1,125 @@
|
||||
import { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
|
||||
import moment from "moment";
|
||||
|
||||
export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): {
|
||||
title: string,
|
||||
description: string,
|
||||
anlagenteil: string
|
||||
}[] {
|
||||
let Warmwasserrohre_gedaemmt = gebaeude.warmwasser_rohre_gedaemmt;
|
||||
let Heizungsrohre_gedaemmt = gebaeude.heizungsrohre_gedaemmt;
|
||||
let Waermepumpe = gebaeude.waermepumpe;
|
||||
let Kellerwand_gedaemmt = gebaeude.keller_wand_gedaemmt;
|
||||
let Keller = ausweis.keller_beheizt;
|
||||
let Kellerdecke_Kalraeume_gedaemmt = gebaeude.keller_decke_gedaemmt;
|
||||
let Brennwertkessel = gebaeude.brennwert_kessel;
|
||||
let baujahr_anlagesanlage = gebaeude.baujahr_heizung[0];
|
||||
let Zentralheizung = gebaeude.zentralheizung;
|
||||
let photovoltaik = gebaeude.photovoltaik;
|
||||
let Brennstoff = ausweis.brennstoff_1;
|
||||
let Aussenwand_gedaemmt = gebaeude.aussenwand_gedaemmt;
|
||||
let Dachgeschoss = gebaeude.dachgeschoss;
|
||||
let Dachgeschoss_gedaemmt = gebaeude.dachgeschoss_gedaemmt;
|
||||
let Oberste_Geschossdecke_gedaemmt = gebaeude.oberste_geschossdecke_gedaemmt;
|
||||
let Einfachglas = gebaeude.einfach_verglasung;
|
||||
let Doppelfenster = gebaeude.doppel_verglasung;
|
||||
let Fenster_teilw_undicht = gebaeude.fenster_teilweise_undicht;
|
||||
|
||||
let empfehlungen = [];
|
||||
|
||||
if (gebaeude.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
|
||||
empfehlungen.push({
|
||||
"title" : "Erneuerung der Fenster",
|
||||
"description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.",
|
||||
"anlagenteil" : "Fenster"
|
||||
});
|
||||
}
|
||||
|
||||
if (gebaeude.dachgeschoss == "Unbeheizt" && !Oberste_Geschossdecke_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Zusätzliche Dämmung des Fußbodens des kalten Dachraumes",
|
||||
"description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||
"anlagenteil" : "Dach"
|
||||
});
|
||||
} else if (Dachgeschoss == "Beheizt" && !Dachgeschoss_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Zusätzliche Dämmung des Daches bzw. Dachraumes",
|
||||
"description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff, wenn möglich, verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||
"anlagenteil" : "Dach"
|
||||
});
|
||||
}
|
||||
|
||||
if (!Aussenwand_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Außenwand zusätzl. dämmen (z.B. Wärmedämmverbundsystem, Einblasdämmung, Dämmputz)",
|
||||
"description" : "Beim WDVS sollte man mit Dämmstärken ab 12cm planen. Bei zweischaligem Mauerwerk Luftschicht mit Einblasdämmung füllen. Bei historischen Fassaden kommt u.U. eine Innendämmung in Betracht",
|
||||
"anlagenteil" : "Außenwand gg. Außenluft"
|
||||
});
|
||||
}
|
||||
|
||||
let Relanlagenjahr = moment().year() - 35;
|
||||
|
||||
if ((!Brennwertkessel && !Waermepumpe) && baujahr_anlagesanlage <= Relanlagenjahr && Brennstoff != 'Fernwärme' && Brennstoff != 'Strommix') {
|
||||
empfehlungen.push({
|
||||
"title" : "Anlagentechnik",
|
||||
"description" : "Prüfen Sie, ob Sie bei einer Umrüstung auf einen regenerativen Anteil von 65% kommen. Bei energetisch sanierten Gebäuden z.B. Wärmepumpe. Bei unsanieten Gebäuden Fernwärmeanschluss.",
|
||||
"anlagenteil" : "Wärmeerzeuger"
|
||||
});
|
||||
}
|
||||
|
||||
if (!Kellerdecke_Kalraeume_gedaemmt && Keller == "Unbeheizt") {
|
||||
empfehlungen.push({
|
||||
"title" : "Nachträgliche Dämmung der Kellerdecke",
|
||||
"description" : "Je nach Deckenhöhe, den vorhandenen Raum voll ausnutzen. Das Einsparpotenzial für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||
"anlagenteil" : "Kellerdecke"
|
||||
});
|
||||
} else if (!Kellerwand_gedaemmt && Keller == "Beheizt") {
|
||||
empfehlungen.push({
|
||||
"title" : "Nachträgliche Dämmung der Kellerwände",
|
||||
"description" : "Man sollte mit Dämmstärken ab 12cm planen. Das Einsparpotenzial für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||
"anlagenteil" : "Außenwand gg. Erdreich"
|
||||
});
|
||||
}
|
||||
|
||||
if (Zentralheizung) {
|
||||
if (!Warmwasserrohre_gedaemmt && !Heizungsrohre_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Anlagentechnik",
|
||||
"description" : "Heizungsrohre und Warmwasserrohre dämmen",
|
||||
"anlagenteil" : "Wärmeverteilung / -abgabe"
|
||||
});
|
||||
} else if (Warmwasserrohre_gedaemmt && !Heizungsrohre_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Anlagentechnik",
|
||||
"description" : "Heizungsrohre dämmen",
|
||||
"anlagenteil" : "Wärmeverteilung / -abgabe"
|
||||
});
|
||||
} else if (!Warmwasserrohre_gedaemmt && Heizungsrohre_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Anlagentechnik",
|
||||
"description" : "Warmwasserrohre dämmen",
|
||||
"anlagenteil" : "Wärmeverteilung / -abgabe"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if ((baujahr_anlagesanlage <= (moment().year() - 30)) && (Brennstoff == "Heizöl" || Brennstoff == "Erdgas") && !Waermepumpe) {
|
||||
// Wärmepumpe
|
||||
empfehlungen.push({
|
||||
"title" : "Wärmeerzeuger",
|
||||
"description" : "Prüfen Sie den zusätzlichen Einbau einer Luft-Wasser-Wärmepumpe. Mit einem Pufferspeicher und einer 75°C-Vorlauftemperatur-Wärmepumpe kann ein relevanter Anteil der Wärmeerzeugung abgedeckt werden.",
|
||||
"anlagenteil" : "Wärmeerzeuger"
|
||||
});
|
||||
}
|
||||
|
||||
if (!photovoltaik && Brennstoff == "Strommix") {
|
||||
// Wärmepumpe
|
||||
empfehlungen.push({
|
||||
"title" : "Wärmeerzeuger",
|
||||
"description" : "PV-Anlage auf das Dach (für Energieunterstützung)",
|
||||
"anlagenteil" : "Wärmeerzeuger"
|
||||
});
|
||||
}
|
||||
|
||||
return empfehlungen;
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
import { db } from "../shared";
|
||||
|
||||
type DatabaseZIPInformation = {
|
||||
zip: string,
|
||||
city: string,
|
||||
state: string
|
||||
};
|
||||
|
||||
export class ZIPInformation {
|
||||
public constructor(public zip: string, public city: string, public state: string) {
|
||||
|
||||
}
|
||||
|
||||
public static async fromZipCode(zip: string): Promise<null | ZIPInformation[]> {
|
||||
if (zip.length > 5) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let results = await db<DatabaseZIPInformation>("zip_codes").select("*").whereLike("zip", `${zip}%`).limit(10);
|
||||
|
||||
if (!results) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return results.map(result => new ZIPInformation(result.zip, result.city, result.state))
|
||||
}
|
||||
|
||||
public static async fromCity(city: string): Promise<null | ZIPInformation[]> {
|
||||
let results = await db<DatabaseZIPInformation>("zip_codes").select("*").where("city", city);
|
||||
|
||||
if (!results) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return results.map(result => new ZIPInformation(result.zip, result.city, result.state))
|
||||
}
|
||||
|
||||
public static async fromState(state: string): Promise<null | ZIPInformation[]> {
|
||||
let results = await db<DatabaseZIPInformation>("zip_codes").select("*").where("state", state);
|
||||
|
||||
if (!results) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return results.map(result => new ZIPInformation(result.zip, result.city, result.state))
|
||||
}
|
||||
}
|
||||
@@ -1,145 +0,0 @@
|
||||
import { Benutzer, Rechnungen, VerbrauchsausweisWohnen } from "@ibcornelsen/database";
|
||||
import { Gebaeude } from "src/lib/Gebaeude";
|
||||
import { getKlimafaktorenClient } from "src/lib/Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "src/lib/server/Heizwertfaktor";
|
||||
|
||||
|
||||
export class Verbrauchsausweis implements Partial<VerbrauchsausweisWohnen & { benutzer: Benutzer, rechnung: Rechnungen }> {
|
||||
rechnungen_id: number | null = null;
|
||||
erstellungsdatum: Date | null = null;
|
||||
ausstellgrund: string | null = null;
|
||||
registriernummer: string | null = null;
|
||||
erledigt: boolean | null = null;
|
||||
baujahr_heizung: number[] = [];
|
||||
zusaetzliche_heizquelle: boolean | null = null;
|
||||
brennstoff_1: string | null = null;
|
||||
einheit_1: string | null = null;
|
||||
brennstoff_2: string | null = null;
|
||||
einheit_2: string | null = null;
|
||||
startdatum: Date | null = null;
|
||||
enddatum: Date | null = null;
|
||||
verbrauch_1: number | null = null;
|
||||
verbrauch_2: number | null = null;
|
||||
verbrauch_3: number | null = null;
|
||||
verbrauch_4: number | null = null;
|
||||
verbrauch_5: number | null = null;
|
||||
verbrauch_6: number | null = null;
|
||||
warmwasser_enthalten: boolean | null = null;
|
||||
anteil_warmwasser_1: number | null = null;
|
||||
anteil_warmwasser_2: number | null = null;
|
||||
|
||||
public get energetischeNutzflaeche(): number {
|
||||
return (
|
||||
this.gebaeude.wohnflaeche *
|
||||
(this.gebaeude.keller_beheizt ? 1.35 : 1.2)
|
||||
);
|
||||
}
|
||||
|
||||
public regnummer?: string;
|
||||
|
||||
public gebaeude: Gebaeude = new Gebaeude();
|
||||
|
||||
public constructor(initializer?: VerbrauchsausweisWohnen) {
|
||||
if (initializer) {
|
||||
Object.assign(this, initializer)
|
||||
}
|
||||
}
|
||||
|
||||
public get primaerEnergieVerbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktor(
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
|
||||
return Endenergieverbrauch * brennstoff_1.primaerenergiefaktor;
|
||||
})();
|
||||
}
|
||||
|
||||
public get endEnergieVerbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const date = this.startdatum;
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.gebaeude.plz
|
||||
);
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let brennstoff_1 = getHeizwertfaktor(
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
let brennstoff_2 = getHeizwertfaktor(
|
||||
this.brennstoff_2,
|
||||
this.einheit_2
|
||||
);
|
||||
|
||||
let verbrauch_1_kwh =
|
||||
this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_2_kwh =
|
||||
this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_3_kwh =
|
||||
this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_4_kwh =
|
||||
this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_5_kwh =
|
||||
this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_6_kwh =
|
||||
this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
|
||||
|
||||
let warmwasserZuschlag = 0;
|
||||
let leerstandsZuschlag = 0;
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (this.anteil_warmwasser_1 == 0) {
|
||||
warmwasserZuschlag = 20 * this.energetischeNutzflaeche * 3;
|
||||
}
|
||||
|
||||
if (this.gebaeude.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.gebaeude.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
|
||||
if (this.gebaeude.energiequelle_2_nutzung[3]) {
|
||||
kuehlungsZuschlag = 6 * this.energetischeNutzflaeche * 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.energetischeNutzflaeche;
|
||||
|
||||
return Energieverbrauchskennwert;
|
||||
})();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
export { default as Verbrauchsausweis } from "./Verbrauchsausweis";
|
||||
@@ -1,36 +0,0 @@
|
||||
import { Ausweis } from "src/lib/Ausweis/Ausweis";
|
||||
import { Dachgeschoss, Lueftungskonzept } from "src/lib/Ausweis/types";
|
||||
import { BitChecker } from "src/lib/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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user