diff --git a/src/cronjobs/update-dwd-test.ts b/src/cronjobs/update-dwd-test.ts index 06fc1761..f823e84f 100644 --- a/src/cronjobs/update-dwd-test.ts +++ b/src/cronjobs/update-dwd-test.ts @@ -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(); diff --git a/src/lib/altes-system/import.ts b/src/lib/altes-system/import.ts new file mode 100644 index 00000000..61eb20e8 --- /dev/null +++ b/src/lib/altes-system/import.ts @@ -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) { + 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 +} \ No newline at end of file diff --git a/src/lib/faker/verbrauchsausweis-wohnen.ts b/src/lib/faker/verbrauchsausweis-wohnen.ts new file mode 100644 index 00000000..3313e535 --- /dev/null +++ b/src/lib/faker/verbrauchsausweis-wohnen.ts @@ -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; +} \ No newline at end of file diff --git a/tests/verbrauchsausweis-wohnen/energieverbrauch.test.ts b/tests/verbrauchsausweis-wohnen/energieverbrauch.test.ts index 06ce1563..59fb585f 100644 --- a/tests/verbrauchsausweis-wohnen/energieverbrauch.test.ts +++ b/tests/verbrauchsausweis-wohnen/energieverbrauch.test.ts @@ -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) }) }) \ No newline at end of file