Datenbank Schema Änderungen

This commit is contained in:
Moritz Utcke
2024-01-06 14:12:01 +07:00
parent 9a6f5218d0
commit 30cc5fab63
77 changed files with 661 additions and 2385 deletions

View File

@@ -0,0 +1,293 @@
import { getKlimafaktoren } from "#lib/Klimafaktoren";
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import {
GebaeudeStammdaten,
VerbrauchsausweisWohnen,
} from "@ibcornelsen/database";
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
ausweis: VerbrauchsausweisWohnen & {
gebaeude_stammdaten: GebaeudeStammdaten;
}
): number {
let faktorKeller = 1.2;
if (ausweis.keller_beheizt && (ausweis.gebaeude_stammdaten.einheiten || 1) <= 2) {
faktorKeller = 1.35;
}
return (ausweis.gebaeude_stammdaten.flaeche || 1) * faktorKeller;
}
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
ausweis: VerbrauchsausweisWohnen & {
gebaeude_stammdaten: GebaeudeStammdaten;
}
) {
const date = ausweis.startdatum;
const klimafaktoren = await getKlimafaktoren(
date,
ausweis.gebaeude_stammdaten.plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktor(
ausweis.brennstoff_1 as string,
ausweis.einheit_1 as string
);
let brennstoff_2 = getHeizwertfaktor(
ausweis.brennstoff_2 as string,
ausweis.einheit_2 as string
);
const energetischeNutzflaeche =
energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis);
let energieVerbrauchGesamt_1 =
((ausweis.verbrauch_1 || 0) +
(ausweis.verbrauch_2 || 0) +
(ausweis.verbrauch_3 || 0)) *
brennstoff_1.umrechnungsfaktor;
let energieVerbrauchGesamt_2 =
((ausweis.verbrauch_4 || 0) +
(ausweis.verbrauch_5 || 0) +
(ausweis.verbrauch_6 || 0)) *
brennstoff_2.umrechnungsfaktor;
let energieVerbrauchWarmwasser_1 = 0;
let energieVerbrauchWarmwasser_2 = 0;
let leerstandsZuschlagWarmwasser = 0;
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
let leerstand = (ausweis.gebaeude_stammdaten.leerstand || 0) / 100;
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
if (ausweis.gebaeude_stammdaten.solarsystem_warmwasser) {
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
energieVerbrauchWarmwasser_1 =
energieVerbrauchGesamt_1 *
((ausweis.anteil_warmwasser_1 || 0) / 100) *
0.6;
energieVerbrauchWarmwasser_2 =
energieVerbrauchGesamt_2 *
((ausweis.anteil_warmwasser_2 || 0) / 100) *
0.6;
} else {
// Wenn Warmwasser enthalten und Anteil bekannt und **kein** Solarsystem
energieVerbrauchWarmwasser_1 =
energieVerbrauchGesamt_1 *
((ausweis.anteil_warmwasser_1 || 0) / 100);
energieVerbrauchWarmwasser_2 =
energieVerbrauchGesamt_2 *
((ausweis.anteil_warmwasser_2 || 0) / 100);
}
leerstandsZuschlagWarmwasser =
leerstand *
(energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
} else {
if (ausweis.gebaeude_stammdaten.solarsystem_warmwasser) {
// Wenn Warmwasser Anteil unbekannt und Solarsystem
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3;
energieVerbrauchWarmwasser_2 = 0;
} else {
// Wenn Warmwasser Anteil unbekannt und **kein** Solarsystem
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 20 * 3;
energieVerbrauchWarmwasser_2 = 0;
}
}
let energieVerbrauchHeizung_1 = energieVerbrauchGesamt_1;
let energieVerbrauchHeizung_2 = energieVerbrauchGesamt_2;
if (ausweis.warmwasser_enthalten) {
energieVerbrauchHeizung_1 -= energieVerbrauchWarmwasser_1;
energieVerbrauchHeizung_2 -= energieVerbrauchWarmwasser_2;
}
let durchschnittsKlimafaktor =
(klimafaktoren[0] + klimafaktoren[1] + klimafaktoren[2]) / 3 || 1;
let energieVerbrauchHeizungBereinigt_1 =
energieVerbrauchHeizung_1 * durchschnittsKlimafaktor;
let energieVerbrauchHeizungBereinigt_2 =
energieVerbrauchHeizung_2 * durchschnittsKlimafaktor;
let kuehlungsZuschlag = 0;
if (ausweis.wird_gekuehlt) {
kuehlungsZuschlag = 6 * 3 * energetischeNutzflaeche;
}
let durchschnittsEnergieVerbrauchHeizungBereingt =
(energieVerbrauchHeizungBereinigt_1 +
energieVerbrauchHeizungBereinigt_2) /
(3 * energetischeNutzflaeche);
let faktorDurchschnittsEnergieVerbrauchHeizungBereinigt =
-0.0028 * durchschnittsEnergieVerbrauchHeizungBereingt + 0.9147;
if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt <= 0.25) {
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 0.25;
} else if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt >= 1.0) {
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 1.0;
}
let leerstandsZuschlagHeizung =
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt *
leerstand *
(energieVerbrauchHeizungBereinigt_1 +
energieVerbrauchHeizungBereinigt_2);
let endEnergieVerbrauch_1 =
(energieVerbrauchHeizungBereinigt_1 + energieVerbrauchWarmwasser_1) /
(3 * energetischeNutzflaeche);
let endEnergieVerbrauch_2 =
(energieVerbrauchHeizungBereinigt_2 + energieVerbrauchWarmwasser_2) /
(3 * energetischeNutzflaeche);
let endEnergieVerbrauchLeerstandsZuschlag =
(leerstandsZuschlagHeizung + leerstandsZuschlagWarmwasser) /
(3 * energetischeNutzflaeche);
let endEnergieVerbrauchKuehlungsZuschlag =
kuehlungsZuschlag / (3 * energetischeNutzflaeche);
let primaerfaktorww = 0;
let primaerfaktorww_1 = 0;
if (!ausweis.warmwasser_enthalten && ausweis.gebaeude_stammdaten.durchlauf_erhitzer) {
primaerfaktorww = 1.8;
primaerfaktorww_1 = 1.8;
} else {
primaerfaktorww = brennstoff_1.primaerenergiefaktor;
primaerfaktorww_1 = brennstoff_2.primaerenergiefaktor;
}
let primaerEnergieVerbrauch_1 =
(energieVerbrauchHeizungBereinigt_1 *
brennstoff_1.primaerenergiefaktor +
energieVerbrauchWarmwasser_1 * primaerfaktorww) /
(3 * energetischeNutzflaeche);
let primaerEnergieVerbrauch_2 =
(energieVerbrauchHeizungBereinigt_2 *
brennstoff_2.primaerenergiefaktor +
energieVerbrauchWarmwasser_2 * primaerfaktorww_1) /
(3 * energetischeNutzflaeche);
let primaerEnergieVerbrauchLeerstandsZuschlag =
endEnergieVerbrauchLeerstandsZuschlag *
brennstoff_1.primaerenergiefaktor;
let primaerEnergieVerbrauchKuehlungsZuschlag =
endEnergieVerbrauchKuehlungsZuschlag * 1.8;
let co2Emissionen_1 = endEnergieVerbrauch_1 * brennstoff_1.coe;
let co2Emissionen_2 = endEnergieVerbrauch_2 * brennstoff_2.coe;
let co2EmissionenLeerstandsZuschlag =
endEnergieVerbrauchLeerstandsZuschlag * brennstoff_1.coe;
let co2EmissionenKuehlungsZuschlag =
endEnergieVerbrauchKuehlungsZuschlag * brennstoff_2.coe;
let endEnergieVerbrauchGesamt =
endEnergieVerbrauch_1 +
endEnergieVerbrauch_2 +
endEnergieVerbrauchLeerstandsZuschlag +
endEnergieVerbrauchKuehlungsZuschlag;
let primaerEnergieVerbrauchGesamt =
primaerEnergieVerbrauch_1 +
primaerEnergieVerbrauch_2 +
primaerEnergieVerbrauchLeerstandsZuschlag +
primaerEnergieVerbrauchKuehlungsZuschlag;
let co2EmissionenGesamt =
co2Emissionen_1 +
co2Emissionen_2 +
co2EmissionenLeerstandsZuschlag +
co2EmissionenKuehlungsZuschlag;
return {
brennstoff_1: brennstoff_1,
brennstoff_2: brennstoff_2,
klimafaktoren: klimafaktoren,
kuehlungsZuschlag: Math.round(kuehlungsZuschlag),
durchschnittsKlimafaktor: Math.round(durchschnittsKlimafaktor),
ausweis: ausweis,
anteil_heizung_1: 1 - (ausweis.anteil_warmwasser_1 || 0) / 100,
anteil_heizung_2: 1 - (ausweis.anteil_warmwasser_2 || 0) / 100,
verbrauch_1_kwh: Math.round(
(ausweis.verbrauch_1 || 0) * brennstoff_1.umrechnungsfaktor
),
verbrauch_2_kwh: Math.round(
(ausweis.verbrauch_2 || 0) * brennstoff_1.umrechnungsfaktor
),
verbrauch_3_kwh: Math.round(
(ausweis.verbrauch_3 || 0) * brennstoff_1.umrechnungsfaktor
),
verbrauch_4_kwh: Math.round(
(ausweis.verbrauch_4 || 0) * brennstoff_2.umrechnungsfaktor
),
verbrauch_5_kwh: Math.round(
(ausweis.verbrauch_5 || 0) * brennstoff_2.umrechnungsfaktor
),
verbrauch_6_kwh: Math.round(
(ausweis.verbrauch_6 || 0) * brennstoff_2.umrechnungsfaktor
),
energetische_nutzfläche: Math.round(energetischeNutzflaeche),
leerstand: leerstand,
leerstandsZuschlagHeizung: Math.round(leerstandsZuschlagHeizung),
leerstandsZuschlagWarmwasser: Math.round(leerstandsZuschlagWarmwasser),
endEnergieVerbrauchLeerstandsZuschlag: Math.round(
endEnergieVerbrauchLeerstandsZuschlag
),
endEnergieVerbrauchKuehlungsZuschlag: Math.round(
endEnergieVerbrauchKuehlungsZuschlag
),
coeeffkg: co2EmissionenGesamt,
energieVerbrauchGesamt_1: Math.round(energieVerbrauchGesamt_1),
energieVerbrauchGesamt_2: Math.round(energieVerbrauchGesamt_2),
energieVerbrauchWarmwasser_1: Math.round(energieVerbrauchWarmwasser_1),
energieVerbrauchWarmwasser_2: Math.round(energieVerbrauchWarmwasser_2),
energieVerbrauchHeizung_1: energieVerbrauchHeizung_1,
energieVerbrauchHeizung_2: energieVerbrauchHeizung_2,
anteil_warmwasser_1: (ausweis.anteil_warmwasser_1 || 0) / 100,
anteil_warmwasser_2: (ausweis.anteil_warmwasser_2 || 0) / 100,
energieVerbrauchHeizungBereinigt_1: Math.round(
energieVerbrauchHeizungBereinigt_1
),
energieVerbrauchHeizungBereinigt_2: Math.round(
energieVerbrauchHeizungBereinigt_2
),
durchschnittsEnergieVerbrauchHeizungBereingt: Math.round(
durchschnittsEnergieVerbrauchHeizungBereingt
),
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt: Math.round(
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt
),
endEnergieVerbrauch_1: Math.round(endEnergieVerbrauch_1),
endEnergieVerbrauch_2: Math.round(endEnergieVerbrauch_2),
primaerEnergieVerbrauch_1: Math.round(primaerEnergieVerbrauch_1),
primaerEnergieVerbrauch_2: Math.round(primaerEnergieVerbrauch_2),
primaerEnergieVerbrauchLeerstandsZuschlag: Math.round(
primaerEnergieVerbrauchLeerstandsZuschlag
),
primaerEnergieVerbrauchKuehlungsZuschlag: Math.round(
primaerEnergieVerbrauchKuehlungsZuschlag
),
co2Emissionen_1: co2Emissionen_1,
co2Emissionen_2: co2Emissionen_2,
co2EmissionenLeerstandsZuschlag: co2EmissionenLeerstandsZuschlag,
co2EmissionenKuehlungsZuschlag: co2EmissionenKuehlungsZuschlag,
co2EmissionenGesamt: Math.round(co2EmissionenGesamt),
endEnergieVerbrauchGesamt: Math.round(endEnergieVerbrauchGesamt),
primaerEnergieVerbrauchGesamt: Math.round(
primaerEnergieVerbrauchGesamt
),
};
}