diff --git a/src/components/Ausweis/Ausweisart.svelte b/src/components/Ausweis/Ausweisart.svelte index 8e57e97b..220c25d8 100644 --- a/src/components/Ausweis/Ausweisart.svelte +++ b/src/components/Ausweis/Ausweisart.svelte @@ -139,7 +139,7 @@ required bind:value={gebaeude_aufnahme_allgemein.saniert} > - Bitte auswählen + Bitte auswählen saniert unsaniert diff --git a/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts b/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts index 0ac69265..e5e4d5d7 100644 --- a/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts +++ b/src/components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.ts @@ -1,17 +1,22 @@ import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean { + if (ausweis.ausstellgrund == "Neubau" || ausweis.ausstellgrund == "Modernisierung") { + return true; + } + + if (gebaeude.saniert == true && ( gebaeude.dachgeschoss_gedaemmt == false || gebaeude.oberste_geschossdecke_gedaemmt == false)){ + return true; + } if (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0) { return ( (gebaeude.baujahr_gebaeude[0] < 1978 && (gebaeude.einheiten || 0) <= 4 && - gebaeude.saniert == false && + (gebaeude.saniert == false ) && (ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Sonstiges" || - ausweis.ausstellgrund == "Verkauf")) || - ausweis.ausstellgrund == "Neubau" || - ausweis.ausstellgrund == "Modernisierung" + ausweis.ausstellgrund == "Verkauf")) ); } diff --git a/src/components/Verbrauchsausweis/audits/EndEnergie.ts b/src/components/Verbrauchsausweis/audits/EndEnergie.ts new file mode 100644 index 00000000..9f9b4fdc --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/EndEnergie.ts @@ -0,0 +1,27 @@ +import { GebaeudeClient, VerbrauchsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; +import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016"; +import { getKlimafaktoren } from "#lib/Klimafaktoren"; + +export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient): Promise { + if (hidden.has(AuditType.END_ENERGIE)) { + return false; + } + //sobald Fläche, Klimafaktoren und alle Verbrauchsjahre eingegeben wurden. + if (gebaeude_aufnahme_allgemein){ + if (gebaeude_aufnahme_allgemein.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) { + try { + const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz); + // Alle Klimfaktoren konnten abgefragt werden. + const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016({...ausweis, gebaeude_aufnahme_allgemein: {...gebaeude_aufnahme_allgemein, gebaeude_stammdaten: gebaeude}}); + if (eevva){ + if (eevva?.endEnergieVerbrauchGesamt <= 45 || eevva?.endEnergieVerbrauchGesamt >= 500) { + return true; + } + } + } catch (e) { + } + } + } + return false; +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts b/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts index d01d6ee8..bc324f81 100644 --- a/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts +++ b/src/components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.ts @@ -1,11 +1,14 @@ import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "../audits/hidden"; -export function auditHeizungJuengerDreiJahre(gebaeude: GebaeudeAufnahmeClient ): boolean { +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) - ); + if (!hidden.has(AuditType.HEIZUNG_JUENGER_DREI_JAHRE)) { + 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 index ac69b034..6dea6b33 100644 --- a/src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts +++ b/src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts @@ -1,8 +1,5 @@ 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 { diff --git a/src/components/Verbrauchsausweis/audits/LeerStand.ts b/src/components/Verbrauchsausweis/audits/LeerStand.ts index b35f6660..103d01bd 100644 --- a/src/components/Verbrauchsausweis/audits/LeerStand.ts +++ b/src/components/Verbrauchsausweis/audits/LeerStand.ts @@ -1,7 +1,8 @@ import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; -export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient ): boolean { - if (gebaeude.leerstand ) { +export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient): boolean { + if (gebaeude.leerstand && !hidden.has(AuditType.LEER_STAND)) { return ( (gebaeude.leerstand > 30) ); diff --git a/src/components/Verbrauchsausweis/audits/PlzNichtErkannt.ts b/src/components/Verbrauchsausweis/audits/PlzNichtErkannt.ts new file mode 100644 index 00000000..3b322959 --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/PlzNichtErkannt.ts @@ -0,0 +1,22 @@ +import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { client } from "src/trpc"; +import { memoize } from "src/lib/Memoization"; +import { AuditType, hidden } from "../audits/hidden"; + +export const auditPlzNichtErkannt = memoize(async (gebaeude: GebaeudeAufnahmeClient) => { + if (gebaeude.plz) { + if (gebaeude.plz.length == 5) { + try { + const result = await client.v1.postleitzahlen.query({ plz: gebaeude.plz, limit: 1 }); + if (result.length > 0) { + return false; + } + } catch (e) { + if (!hidden.has(AuditType.PLZ_NICHT_ERKANNT)){ + return true; + } + } + } + } + return false +}); diff --git a/src/components/Verbrauchsausweis/audits/VerbrauchAbweichung.ts b/src/components/Verbrauchsausweis/audits/VerbrauchAbweichung.ts index 7102cd8f..c64af80d 100644 --- a/src/components/Verbrauchsausweis/audits/VerbrauchAbweichung.ts +++ b/src/components/Verbrauchsausweis/audits/VerbrauchAbweichung.ts @@ -10,19 +10,19 @@ export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, return []; } - if (getAbweichung(ausweis.verbrauch_1 || 0, ausweis.verbrauch_2 || 0) > 0.25) { + if (getAbweichung(ausweis.verbrauch_1 || 0, ausweis.verbrauch_2 || 0) > 0.30) { return [1, 2]; } - if (getAbweichung(ausweis.verbrauch_2 || 0, ausweis.verbrauch_3 || 0) > 0.25) { + if (getAbweichung(ausweis.verbrauch_2 || 0, ausweis.verbrauch_3 || 0) > 0.30) { return [2, 3]; } - if (getAbweichung(ausweis.verbrauch_4 || 0, ausweis.verbrauch_5 || 0) > 0.25) { + if (getAbweichung(ausweis.verbrauch_4 || 0, ausweis.verbrauch_5 || 0) > 0.30) { return [4, 5]; } - if (getAbweichung(ausweis.verbrauch_5 || 0, ausweis.verbrauch_6 || 0) > 0.25) { + if (getAbweichung(ausweis.verbrauch_5 || 0, ausweis.verbrauch_6 || 0) > 0.30) { return [5, 6]; } diff --git a/src/components/Verbrauchsausweis/audits/WarmWasser.ts b/src/components/Verbrauchsausweis/audits/WarmWasser.ts index 337be57f..1c1de130 100644 --- a/src/components/Verbrauchsausweis/audits/WarmWasser.ts +++ b/src/components/Verbrauchsausweis/audits/WarmWasser.ts @@ -1,11 +1,14 @@ import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; 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 - ); + if (!hidden.has(AuditType.WARM_WASSER)){ + return ( + ausweis.anteil_warmwasser_1 <= 6 || ausweis.anteil_warmwasser_1 >= 35 + ); + } } return false diff --git a/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts b/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts index 14bcf290..a2151fe8 100644 --- a/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts +++ b/src/components/Verbrauchsausweis/audits/WohnFlaeche.ts @@ -1,11 +1,13 @@ import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "./hidden"; export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean { if (gebaeude.einheiten && gebaeude.flaeche ) { - - return ( - (gebaeude.flaeche < gebaeude.einheiten * 30) - ); + if (!hidden.has(AuditType.WOHN_FLAECHE)){ + return ( + (gebaeude.flaeche < gebaeude.einheiten * 30) + ); + } } return false diff --git a/src/components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche.ts b/src/components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche.ts new file mode 100644 index 00000000..c53c962d --- /dev/null +++ b/src/components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche.ts @@ -0,0 +1,10 @@ +import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; +import { AuditType, hidden } from "../audits/hidden"; + +export function auditWohnflaecheGroesserGesamtflaeche(gebaeude: GebaeudeAufnahmeClient ): boolean { + if (gebaeude.flaeche && gebaeude.nutzflaeche){ + return (gebaeude.flaeche > gebaeude.nutzflaeche && !hidden.has(AuditType.WOHNFLAECHE_GROESSER_GESAMTFLAECHE)); + } + + return false; +} \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/hidden.ts b/src/components/Verbrauchsausweis/audits/hidden.ts index 23246c6d..d7a5c9e4 100644 --- a/src/components/Verbrauchsausweis/audits/hidden.ts +++ b/src/components/Verbrauchsausweis/audits/hidden.ts @@ -8,5 +8,8 @@ export enum AuditType { KLIMA_FAKTOREN, WOHN_FLAECHE, WARM_WASSER, - LEER_STAND + LEER_STAND, + PLZ_NICHT_ERKANNT, + END_ENERGIE, + WOHNFLAECHE_GROESSER_GESAMTFLAECHE } \ No newline at end of file diff --git a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte index a20a3af0..bae875ab 100644 --- a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte @@ -17,9 +17,12 @@ import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche"; import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser"; import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand"; + import { auditPlzNichtErkannt } from "#components/Verbrauchsausweis/audits/PlzNichtErkannt"; import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden"; import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt"; import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung"; + import { auditEndEnergie } from "#components/Verbrauchsausweis/audits/EndEnergie"; + import { auditWohnflaecheGroesserGesamtflaeche } from "#components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche"; import { Enums } from "@ibcornelsen/database/client" import Overlay from "#components/Overlay.svelte"; import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte"; @@ -92,6 +95,13 @@ let waitOverlayHidden = true; let speichernOverlayHidden = true; + + $: { + if (gebaeude_aufnahme_allgemein.saniert) { + gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true; + gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true; + } + } @@ -101,7 +111,9 @@ - Bitte warten sie, ihr Ausweis wird nun erstellt. + + Bitte warten sie, ihr Ausweis wird nun erstellt. + @@ -110,15 +122,19 @@ - + - + - Später Weitermachen + Später Weitermachen A - Prüfung der Ausweisart - + @@ -151,7 +171,8 @@ Keller * Bitte auswählen - nicht vorhanden - unbeheizt - beheizt + nicht vorhanden + unbeheizt + beheizt @@ -227,11 +257,22 @@ Dachgeschoss * - + Bitte auswählen - nicht vorhanden - unbeheizt - beheizt + nicht vorhanden + unbeheizt + beheizt @@ -239,14 +280,16 @@ - Bitte geben Sie hier die beheizte Gesamtfläche in m² ein (wenn bekannt). - Dabei handelt es sich um die Wohnfläche + weiterer Flächen innerhalb des Gebäudes - (z.B. Fläche des beheizten Kellers). - Diese Fläche wird dann im Energieausweis als energetische Nutzfläche (An) ausgewiesen. + Bitte geben Sie hier die beheizte Gesamtfläche in m² ein + (wenn bekannt). Dabei handelt es sich um die Wohnfläche + + weiterer Flächen innerhalb des Gebäudes (z.B. Fläche des + beheizten Kellers). Diese Fläche wird dann im Energieausweis + als energetische Nutzfläche (An) ausgewiesen. C - Eingabe von 3 zusammenhängenden Verbrauchsjahren - + @@ -279,22 +326,24 @@ - Warmwasser im Verbrauch enthalten + type="checkbox" + class="checkbox" + name="warmwasser_enthalten" + data-test="warmwasser_enthalten" + bind:checked={ausweis.warmwasser_enthalten} + /> + Warmwasser im Verbrauch enthalten - Anteil bekannt + type="checkbox" + class="checkbox" + name="warmwasser_anteil_bekannt" + data-test="warmwasser_anteil_bekannt" + bind:checked={ausweis.warmwasser_anteil_bekannt} + disabled={!ausweis.warmwasser_enthalten} + /> + Anteil bekannt @@ -306,11 +355,13 @@ @@ -322,13 +373,15 @@ ein Anteil von 18% angenommen. @@ -345,7 +398,8 @@ HeizungWarmwasserLüftungKühlung - + Bitte auswählen Einfamilienhaus - + Bitte auswählen Gesamtgebäude Wohnen @@ -447,7 +514,8 @@ @@ -472,7 +540,8 @@ @@ -492,7 +561,8 @@ - {#each Object.entries($notifications) as [uid, notification] (uid)} @@ -540,6 +609,28 @@ {/if} + {#await auditPlzNichtErkannt(gebaeude_aufnahme_allgemein) then result} + {#if result} + { + hidden.add(AuditType.PLZ_NICHT_ERKANNT); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Postleitzahl konnte nicht zugeordnet werden. Bitte prüfen + Sie die Eingabe. Sollte die Postleitzahl korrekt eingegeben + sein, werden wir den Ort händisch zuordnen. + + {/if} + {/await} + {#if auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)} - 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. + 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} @@ -595,11 +687,11 @@ 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. + 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} @@ -618,11 +710,12 @@ 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. + 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} @@ -641,8 +734,9 @@ 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. + 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} @@ -660,8 +754,8 @@ type: "warning", }} > - Bitte überprüfen Sie nochmal die Höhe des Warmwasseranteils. Dieser scheint - nicht ganz im Rahmen zu liegen. + Bitte überprüfen Sie nochmal die Höhe des Warmwasseranteils. Dieser + scheint nicht ganz im Rahmen zu liegen. {/if} @@ -679,12 +773,12 @@ 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. + 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} + {#if auditVerbrauchAbweichung(ausweis, gebaeude).length > 0} - Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(ausweis, - gebaeude - )[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude)[1]} beträgt mehr als 25% - und sie haben keinen Leerstand angegeben. Sind sie sich sicher, dass - das stimmt? + Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung( + ausweis, + gebaeude, + )[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude)[1]} beträgt mehr + als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher, + dass das stimmt? + + {/if} + + {#await auditEndEnergie(ausweis, gebaeude, gebaeude_aufnahme_allgemein) then result} + {#if result} + { + hidden.add(AuditType.END_ENERGIE); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Endenergie liegt außerhalb des normalen Rahmens. Bitte + nochmal überprüfen. Bei Passivhäusern oder ganz alten + unsanierten Gebäuden ist so eine Abweichung durchaus möglich. + + {/if} + {/await} + + {#if auditWohnflaecheGroesserGesamtflaeche(gebaeude_aufnahme_allgemein)} + { + hidden.add(AuditType.WOHNFLAECHE_GROESSER_GESAMTFLAECHE); + gebaeude = gebaeude; + }, + type: "warning", + }} + > + Die Wohnfläche darf nicht größer als die Nutzfläche sein. {/if}
Bitte warten sie, ihr Ausweis wird nun erstellt.
+ Bitte warten sie, ihr Ausweis wird nun erstellt. +