Automatische Berechnung Test

Automatische Prüfung der Berechnung durch Vergleich mit alten Ergebnissen auf alten Ausweisen.
This commit is contained in:
Moritz Utcke
2024-03-11 10:04:23 +07:00
parent 02e108140a
commit e994383317
4 changed files with 258 additions and 37 deletions

View File

@@ -4,7 +4,7 @@ import * as fs from "fs";
const start = moment().set("year", 2019).set("month", 8).set("date", 1);
const end = moment().set("year", 2022).set("month", 10).set("date", 1);
const end = moment().set("year", 2023).set("month", 1).set("date", 1);
let current = start.clone();

View File

@@ -0,0 +1,133 @@
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { faker } from "@faker-js/faker";
import { Enums } from "@ibcornelsen/database/client";
import moment from "moment";
export async function importVerbrauchsausweisWohnenAltesSystem(count: number = 5) {
const response = await fetch("https://online-energieausweis.org/user/ausweis-import.php", {
method: "POST",
body: JSON.stringify({
i: count,
offset: 0,
q: {}
})
})
const data = await response.json();
return data
}
export function verbrauchsausweisWohnenImportTranslate(ausweis: Record<string, any>) {
const ausweisTranslated: VerbrauchsausweisWohnenClient = {
rechnungen: null,
gebaeude_aufnahme_allgemein: {
baujahr_gebaeude: [ausweis.baujahr_gebaeude],
baujahr_heizung: [ausweis.baujahr_anlage],
baujahr_klima: [ausweis.baujahr_klimaanlage],
adresse: ausweis.objekt_strasse,
plz: ausweis.objekt_plz,
ort: ausweis.objekt_ort,
nutzflaeche: ausweis.nutzflaeche,
einheiten: ausweis.anzahl_einheiten,
saniert: ausweis.objekt_saniert,
keller: ausweis.keller_beheizt == "Beheizt" ? Enums.Heizungsstatus.BEHEIZT : ausweis.keller_beheizt == "Unbeheizt" ? Enums.Heizungsstatus.UNBEHEIZT : Enums.Heizungsstatus.NICHT_VORHANDEN,
dachgeschoss: ausweis.dachgeschoss == "Beheizt" ? Enums.Heizungsstatus.BEHEIZT : ausweis.dachgeschoss == "Unbeheizt" ? Enums.Heizungsstatus.UNBEHEIZT : Enums.Heizungsstatus.NICHT_VORHANDEN,
flaeche: ausweis.wohnflaeche,
gebaeudetyp: ausweis.objekt_typ,
gebaeudeteil: ausweis.objekt_gebaeudeteil,
lueftung: ausweis.lueftungskonzept,
kuehlung: ausweis.wird_gekuehlt,
gebaeude_stammdaten: {
adresse: ausweis.objekt_strasse,
plz: ausweis.objekt_plz,
ort: ausweis.objekt_ort,
uid: faker.string.uuid(),
gebaeude_bilder: [],
latitude: null,
longitude: null,
},
brennstoff_1: ausweis.energietraeger_1,
brennstoff_2: ausweis.energietraeger_2,
alternative_heizung: ausweis.alheizung,
alternative_kuehlung: ausweis.alkuehlung,
alternative_lueftung: ausweis.allueftung,
alternative_warmwasser: ausweis.alwarmwasser,
ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen,
energieeffizienzklasse: "",
aussenwand_gedaemmt: ausweis.aussenwand_gedaemmt,
aussenwand_min_12cm_gedaemmt: ausweis.aussenwand_min_12cm_gedaemmt,
bestellt: ausweis.bestellt,
boxpruefung: ausweis.boxpruefung,
brennwert_kessel: ausweis.brennwert_kessel,
dachgeschoss_gedaemmt: ausweis.dachgeschoss_gedaemmt,
dachgeschoss_min_12cm_gedaemmt: ausweis.dachgeschoss_min_12cm_gedaemmt,
doppel_verglasung: ausweis.doppel_verglasung,
dreifach_verglasung: ausweis.dreifach_verglasung,
durchlauf_erhitzer: ausweis.durchlauf_erhitzer,
einfach_verglasung: ausweis.einfach_verglasung,
einzelofen: ausweis.einzelofen,
erledigt: ausweis.erledigt,
erstellungsdatum: ausweis.erstellungsdatum,
fenster_dicht: ausweis.fenster_dicht,
fenster_teilweise_undicht: ausweis.fenster_teilweise_undicht,
heizungsrohre_gedaemmt: ausweis.heizungsrohre_gedaemmt,
isolier_verglasung: ausweis.isolier_verglasung,
keller_decke_gedaemmt: ausweis.keller_decke_gedaemmt,
keller_wand_gedaemmt: ausweis.keller_wand_gedaemmt,
niedertemperatur_kessel: ausweis.niedertemperatur_kessel,
oberste_geschossdecke_gedaemmt: ausweis.oberste_geschossdecke_gedaemmt,
oberste_geschossdecke_min_12cm_gedaemmt: ausweis.oberste_geschossdecke_min_12cm_gedaemmt,
raum_temperatur_regler: ausweis.raum_temperatur_regler,
rolllaeden_kaesten_gedaemmt: ausweis.rolllaeden_kaesten_gedaemmt,
solarsystem_warmwasser: ausweis.solarsystem_warmwasser,
standard_kessel: ausweis.standard_kessel,
waermepumpe: ausweis.waermepumpe,
warmwasser_rohre_gedaemmt: ausweis.warmwasser_rohre_gedaemmt,
zentralheizung: ausweis.zentralheizung,
zirkulation: ausweis.zirkulation,
photovoltaik: ausweis.photovoltaik,
leerstand: ausweis.leerstand,
prueftext: ausweis["check-texts"],
storniert: false,
tueren_dicht: ausweis.tueren_dicht,
tueren_undicht: ausweis.tueren_undicht,
zurueckgestellt: ausweis.zurueckGestellt,
uid: faker.string.uuid(),
events: []
},
verbrauch_1: parseInt(ausweis.energieverbrauch_1_heizquelle_1),
verbrauch_2: parseInt(ausweis.energieverbrauch_2_heizquelle_1),
verbrauch_3: parseInt(ausweis.energieverbrauch_3_heizquelle_1),
verbrauch_4: parseInt(ausweis.energieverbrauch_1_heizquelle_2),
verbrauch_5: parseInt(ausweis.energieverbrauch_2_heizquelle_2),
verbrauch_6: parseInt(ausweis.energieverbrauch_3_heizquelle_2),
einheit_1: ausweis.energietraeger_einheit_heizquelle_1,
einheit_2: ausweis.energietraeger_einheit_heizquelle_2,
warmwasser_enthalten: ausweis.warmwasser_enthalten,
uid: faker.string.uuid(),
alternative_heizung: ausweis.alheizung,
alternative_kuehlung: ausweis.alkuehlung,
alternative_lueftung: ausweis.allueftung,
alternative_warmwasser: ausweis.alwarmwasser,
anteil_warmwasser_1: ausweis.anteil_warmwasser_1,
anteil_warmwasser_2: ausweis.anteil_warmwasser_2,
ausstellgrund: ausweis.ausstellgrund,
ausstellungsdatum: moment(ausweis.bestelldatum).toDate(),
erledigt: ausweis.erledigt,
erstellungsdatum: moment(ausweis.erstellungsdatum).toDate(),
keller_beheizt: ausweis.keller_beheizt,
registriernummer: ausweis.regnummer,
startdatum: moment(`${ausweis.energieverbrauch_zeitraum_jahr}-01-${ausweis.energieverbrauch_zeitraum_monat}`).toDate(),
warmwasser_anteil_bekannt: ausweis.warmwasser_anteil_bekannt,
wird_gekuehlt: ausweis.wird_gekuehlt,
zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle,
}
return ausweisTranslated
}

View File

@@ -0,0 +1,118 @@
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { faker } from "@faker-js/faker";
import { Enums } from "@ibcornelsen/database/client";
export function verbrauchsausweisWohnenFaker(seed: number = 42): VerbrauchsausweisWohnenClient {
faker.seed(seed);
const tuerenDicht = faker.datatype.boolean();
const verbrauch_1 = faker.number.int({ min: 5000, max: 20000 });
const verbrauch_4 = faker.number.int({ min: 5000, max: 15000 });
const ausweis: VerbrauchsausweisWohnenClient = {
rechnungen: null,
gebaeude_aufnahme_allgemein: {
baujahr_gebaeude: [faker.number.int({ min: 1960, max: 2014 })],
baujahr_heizung: [faker.number.int({ min: 1960, max: 2014 })],
baujahr_klima: [faker.number.int({ min: 1985, max: 2014 })],
adresse: faker.location.streetAddress(),
plz: faker.location.zipCode({ format: "#####" }),
ort: faker.location.city(),
nutzflaeche: faker.number.int({ min: 50, max: 300 }),
einheiten: faker.number.int({ min: 1, max: 3 }),
saniert: faker.datatype.boolean(),
keller: faker.helpers.enumValue(Enums.Heizungsstatus),
dachgeschoss: faker.helpers.enumValue(Enums.Heizungsstatus),
flaeche: faker.number.int({ min: 50, max: 300 }),
gebaeudetyp: "Einfamilienhaus",
gebaeudeteil: "Gesamtgebäude",
lueftung: "Fensterlüftung",
kuehlung: "Vorhanden",
gebaeude_stammdaten: {
adresse: faker.location.streetAddress(),
plz: faker.location.zipCode({ format: "#####" }),
ort: faker.location.city(),
uid: faker.string.uuid(),
gebaeude_bilder: [],
latitude: faker.location.latitude(),
longitude: faker.location.longitude(),
},
brennstoff_1: "Erdgas H",
alternative_heizung: faker.datatype.boolean(),
alternative_kuehlung: faker.datatype.boolean(),
alternative_lueftung: faker.datatype.boolean(),
alternative_warmwasser: faker.datatype.boolean(),
aussenwand_gedaemmt: faker.datatype.boolean(),
aussenwand_min_12cm_gedaemmt: faker.datatype.boolean(),
ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen,
bestellt: faker.datatype.boolean(),
boxpruefung: faker.datatype.boolean(),
brennstoff_2: "Erdgas H",
brennwert_kessel: faker.datatype.boolean(),
dachgeschoss_gedaemmt: faker.datatype.boolean(),
dachgeschoss_min_12cm_gedaemmt: faker.datatype.boolean(),
doppel_verglasung: faker.datatype.boolean(),
dreifach_verglasung: faker.datatype.boolean(),
durchlauf_erhitzer: faker.datatype.boolean(),
einfach_verglasung: faker.datatype.boolean(),
einzelofen: faker.datatype.boolean(),
energieeffizienzklasse: "",
erledigt: faker.datatype.boolean(),
erstellungsdatum: faker.date.past(),
fenster_dicht: faker.datatype.boolean(),
fenster_teilweise_undicht: faker.datatype.boolean(),
heizungsrohre_gedaemmt: faker.datatype.boolean(),
isolier_verglasung: faker.datatype.boolean(),
keller_decke_gedaemmt: faker.datatype.boolean(),
keller_wand_gedaemmt: faker.datatype.boolean(),
leerstand: faker.number.int({ min: 0, max: 20 }),
niedertemperatur_kessel: faker.datatype.boolean(),
oberste_geschossdecke_gedaemmt: faker.datatype.boolean(),
oberste_geschossdecke_min_12cm_gedaemmt: faker.datatype.boolean(),
photovoltaik: faker.datatype.boolean(),
prueftext: faker.lorem.sentence(),
raum_temperatur_regler: faker.datatype.boolean(),
rolllaeden_kaesten_gedaemmt: faker.datatype.boolean(),
solarsystem_warmwasser: faker.datatype.boolean(),
standard_kessel: faker.datatype.boolean(),
storniert: false,
tueren_dicht: tuerenDicht,
tueren_undicht: !tuerenDicht,
waermepumpe: faker.datatype.boolean(),
warmwasser_rohre_gedaemmt: faker.datatype.boolean(),
zentralheizung: faker.datatype.boolean(),
zirkulation: faker.datatype.boolean(),
zurueckgestellt: faker.datatype.boolean(),
uid: faker.string.uuid(),
events: []
},
verbrauch_1: verbrauch_1,
verbrauch_2: verbrauch_1 + faker.number.int({ min: -2000, max: 2000 }),
verbrauch_3: verbrauch_1 + faker.number.int({ min: -2000, max: 2000 }),
einheit_1: "kWh",
warmwasser_enthalten: faker.datatype.boolean(),
uid: faker.string.uuid(),
alternative_heizung: faker.datatype.boolean(),
alternative_kuehlung: faker.datatype.boolean(),
alternative_lueftung: faker.datatype.boolean(),
alternative_warmwasser: faker.datatype.boolean(),
anteil_warmwasser_1: faker.number.int({ min: 0, max: 60 }),
anteil_warmwasser_2: faker.number.int({ min: 0, max: 60 }),
ausstellgrund: faker.helpers.enumValue(Enums.Ausstellgrund),
ausstellungsdatum: faker.date.past(),
einheit_2: "kWh",
erledigt: faker.datatype.boolean(),
erstellungsdatum: faker.date.past(),
keller_beheizt: faker.datatype.boolean(),
registriernummer: faker.string.uuid(),
startdatum: faker.date.past({ years: 3 }),
verbrauch_4: verbrauch_4,
verbrauch_5: verbrauch_4 + faker.number.int({ min: -2000, max: 2000 }),
verbrauch_6: verbrauch_4 + faker.number.int({ min: -2000, max: 2000 }),
warmwasser_anteil_bekannt: faker.datatype.boolean(),
wird_gekuehlt: faker.datatype.boolean(),
zusaetzliche_heizquelle: faker.datatype.boolean(),
}
return ausweis;
}

View File

@@ -1,43 +1,13 @@
import { test, describe } from "bun:test";
import { test, describe, expect } from "bun:test";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { importVerbrauchsausweisWohnenAltesSystem, verbrauchsausweisWohnenImportTranslate } from "#lib/altes-system/import";
describe('Energieverbrauch', async () => {
const ausweis: VerbrauchsausweisWohnenClient = {
gebaeude_aufnahme_allgemein: {
baujahr_heizung: [1989],
baujahr_gebaeude: [1981],
einheiten: 2,
saniert: true,
adresse: "Curslacker Deich 170",
plz: "21039",
ort: "Hamburg",
nutzflaeche: 0,
keller: "NICHT_VORHANDEN",
dachgeschoss: "UNBEHEIZT",
flaeche: 152,
baujahr_klima: [],
gebaeude_stammdaten: {
adresse: "Curslacker Deich 170",
plz: "21039",
ort: "Hamburg"
},
brennstoff_1: "Erdgas H",
gebaeudetyp: "Einfamilienhaus",
gebaeudeteil: "Gesamtgebäude",
lueftung: "Fensterlüftung",
kuehlung: "NICHT_VORHANDEN"
},
verbrauch_1: 16000,
verbrauch_2: 15000,
verbrauch_3: 15500,
einheit_1: "kWh",
warmwasser_enthalten: false,
}
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
const alteAusweise = await importVerbrauchsausweisWohnenAltesSystem();
const ausweis = verbrauchsausweisWohnenImportTranslate(alteAusweise.data[0]);
test("Endenergieverbrauch", async () => {
console.log(berechnungen)
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
expect(berechnungen?.endEnergieVerbrauchGesamt).toBeCloseTo(alteAusweise.data[0].calculations.endEnergieVerbrauchGesamt, -1)
})
})