From f955aa24fb475662fd5db1724bb16b36e3186d94 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Wed, 28 Feb 2024 14:02:31 +0100 Subject: [PATCH] VA On-Screen Checks --- Dockerfile | 2 +- .../audits/BedarfsausweisBenoetigt.ts | 4 +- .../audits/HeizungJuengerDreiJahre.ts | 12 ++ .../Verbrauchsausweis/audits/KlimaFaktoren.ts | 21 +++ .../Verbrauchsausweis/audits/LeerStand.ts | 11 ++ .../Verbrauchsausweis/audits/WarmWasser.ts | 12 ++ .../Verbrauchsausweis/audits/WohnFlaeche.ts | 12 ++ .../audits/ZeitraumAktuell.ts | 22 +++ .../Verbrauchsausweis/audits/hidden.ts | 8 +- .../VerbrauchsausweisWohnenModule.svelte | 134 +++++++++++++++++- 10 files changed, 233 insertions(+), 5 deletions(-) create mode 100644 src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts create mode 100644 src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts create mode 100644 src/components/Verbrauchsausweis/audits/LeerStand.ts create mode 100644 src/components/Verbrauchsausweis/audits/WarmWasser.ts create mode 100644 src/components/Verbrauchsausweis/audits/WohnFlaeche.ts create mode 100644 src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts diff --git a/Dockerfile b/Dockerfile index f9a71dc4..d76f08a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun +FROM oven/bun:1.0.23 EXPOSE 3000 diff --git a/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts b/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts index 52f4374a..0ac69265 100644 --- a/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts +++ b/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts @@ -1,6 +1,6 @@ -import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; -export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): boolean { +export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean { if (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0) { return ( diff --git a/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts b/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts new file mode 100644 index 00000000..d01d6ee8 --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts @@ -0,0 +1,12 @@ +import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; + +export function auditHeizungJuengerDreiJahre(gebaeude: GebaeudeAufnahmeClient ): boolean { + + if (gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) { + return ( + (gebaeude.baujahr_heizung.sort()[0] >= (new Date().getFullYear())-3) + ); + } + + return false +} diff --git a/src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts b/src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts new file mode 100644 index 00000000..09abf500 --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts @@ -0,0 +1,21 @@ +import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; +import { prisma } from "@ibcornelsen/database/server"; +import { client } from "src/trpc"; +import moment from "moment"; +import { getKlimafaktoren } from "#lib/Klimafaktoren"; + +export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise { + if (hidden.has(AuditType.KLIMA_FAKTOREN)) { + return false; + } + + if (ausweis.startdatum && gebaeude.plz && ausweis.verbrauch_1) { + const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz); + if (!response) { + return true; + } + } + + return false; +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/LeerStand.ts b/src/components/Verbrauchsausweis/audits/LeerStand.ts new file mode 100644 index 00000000..b35f6660 --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/LeerStand.ts @@ -0,0 +1,11 @@ +import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; + +export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient ): boolean { + if (gebaeude.leerstand ) { + return ( + (gebaeude.leerstand > 30) + ); + } + + return false +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/WarmWasser.ts b/src/components/Verbrauchsausweis/audits/WarmWasser.ts new file mode 100644 index 00000000..337be57f --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/WarmWasser.ts @@ -0,0 +1,12 @@ +import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; + +export function auditWarmWasser(ausweis: VerbrauchsausweisWohnenClient): boolean { + + if (ausweis.warmwasser_anteil_bekannt && ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1) { + return ( + ausweis.anteil_warmwasser_1 <= 6 || ausweis.anteil_warmwasser_1 >= 35 + ); + } + + return false +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts b/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts new file mode 100644 index 00000000..14bcf290 --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts @@ -0,0 +1,12 @@ +import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; + +export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean { + if (gebaeude.einheiten && gebaeude.flaeche ) { + + return ( + (gebaeude.flaeche < gebaeude.einheiten * 30) + ); + } + + return false +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts b/src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts new file mode 100644 index 00000000..ff346ade --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts @@ -0,0 +1,22 @@ +import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; + +export function auditZeitraumAktuell(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): boolean { + if (hidden.has(AuditType.ZEITRAUM_AKTUELL)) { + return false; + } + + if (ausweis) { + if (ausweis.startdatum && ausweis.verbrauch_1) { + let checkDate = new Date(); + checkDate.setMonth(checkDate.getMonth() - 54); + + return (ausweis.startdatum < checkDate && ausweis.verbrauch_1 > 0); + } + } + + return false; +} + + + diff --git a/src/components/Verbrauchsausweis/audits/hidden.ts b/src/components/Verbrauchsausweis/audits/hidden.ts index f80850be..23246c6d 100644 --- a/src/components/Verbrauchsausweis/audits/hidden.ts +++ b/src/components/Verbrauchsausweis/audits/hidden.ts @@ -2,5 +2,11 @@ export const hidden = new Set() export enum AuditType { HEIZUNG_GEBAEUDE_BAUJAHR, - VERBRAUCH_ABWEICHUNG + HEIZUNG_JUENGER_DREI_JAHRE, + VERBRAUCH_ABWEICHUNG, + ZEITRAUM_AKTUELL, + KLIMA_FAKTOREN, + WOHN_FLAECHE, + WARM_WASSER, + LEER_STAND } \ No newline at end of file diff --git a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte index 3ee2b3b5..b6087eea 100644 --- a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte @@ -11,6 +11,12 @@ import BilderZusatzsysteme from "#components/Ausweis/BilderZusatzsysteme.svelte"; import { RawNotificationWrapper, RawNotification, notifications, addNotification, updateNotification } from "@ibcornelsen/ui"; import { auditHeizungGebaeudeBaujahr } from "#components/Verbrauchsausweis/audits/HeizungGebaeudeBaujahr"; + import { auditHeizungJuengerDreiJahre } from "#components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre"; + import { auditZeitraumAktuell } from "#components/Verbrauchsausweis/audits/ZeitraumAktuell"; + import { auditKlimaFaktoren } from "#components/Verbrauchsausweis/audits/KlimaFaktoren"; + import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche"; + import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser"; + import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand"; import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden"; import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt"; import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung"; @@ -638,7 +644,7 @@ {/each} - {#if auditBedarfsausweisBenoetigt(ausweis, gebaeude)} + {#if auditBedarfsausweisBenoetigt(ausweis, gebaeude_aufnahme_allgemein)} {/if} + {#if auditHeizungJuengerDreiJahre(gebaeude_aufnahme_allgemein)} + { + hidden.add(AuditType.HEIZUNG_JUENGER_DREI_JAHRE); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Ihre Heizungsanlage ist jünger als 3 Jahre. Für den Verbrauchsausweis müssen + Sie mindestens 3 Verbrauchsjahre eingeben die den aktuellen Stand des Gebäudes + abbilden. Ein Verbrauchsausweis ist daher nicht möglich. Bitte klicken Sie + hier um zum Eingabeformular für den Bedarfsausweis + zu gelangen. + + {/if} + + {#if auditZeitraumAktuell(ausweis, gebaeude)} + { + hidden.add(AuditType.ZEITRAUM_AKTUELL); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Verbrauchszeiträume sind nicht aktuell genug. Das Ende des letzten + Verbrauchszeitraumes darf nicht mehr als 18 Monate zurückliegen. Ein + Verbrauchsausweis ist mit diesen Zeiträumen daher nicht möglich. Bitte + klicken Sie hier um zum Eingabeformular + für den Bedarfsausweis zu gelangen. + + {/if} + + {#await auditKlimaFaktoren(ausweis, gebaeude) then result} + {#if result} + { + hidden.add(AuditType.KLIMA_FAKTOREN); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Verbrauchszeiträume sind zu aktuell und es liegen noch keine + Klimafaktoren dazu vor. Bitte verschieben Sie die Verbrauchszeiträume + 1 Jahr nach hinten. Wenn das nicht möglich ist, klicken Sie + hier um zum Eingabeformular für den + Bedarfsausweis zu gelangen. + + {/if} + {/await} + + {#if auditWohnFlaeche(gebaeude_aufnahme_allgemein)} + { + hidden.add(AuditType.WOHN_FLAECHE); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Wohnfläche ist viel zu klein. Bitte überprüfen Sie Ihre Eingabe nochmal + und stellen sicher, daß sich Ihre Angaben auf das gesamte Gebäude beziehen. + + {/if} + + {#if auditWarmWasser(ausweis)} + { + hidden.add(AuditType.WARM_WASSER); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Bitte überprüfen Sie nochmal die Höhe des Warmwasseranteils. Dieser scheint + nicht ganz im Rahmen zu liegen. + + {/if} + + {#if auditLeerStand(gebaeude_aufnahme_allgemein)} + { + hidden.add(AuditType.LEER_STAND); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Bei Leerstand größer als 30% darf kein Verbrauchsausweis ausgestellt werden. + Bitte klicken Sie hier um zum Eingabeformular + für den Bedarfsausweis zu gelangen. + + {/if} + {#if auditVerbrauchAbweichung(ausweis, gebaeude).length > 0}