Ticket Plausibilitätsprüfung

This commit is contained in:
Carl Mahnke
2024-03-18 11:45:05 +01:00
parent df8fa9cce1
commit cc5032e0e1
13 changed files with 323 additions and 109 deletions

View File

@@ -139,7 +139,7 @@
required required
bind:value={gebaeude_aufnahme_allgemein.saniert} bind:value={gebaeude_aufnahme_allgemein.saniert}
> >
<option disabled>Bitte auswählen</option> <option disabled selected value={false}>Bitte auswählen</option>
<option value={true}>saniert</option> <option value={true}>saniert</option>
<option value={false}>unsaniert</option> <option value={false}>unsaniert</option>
</select> </select>

View File

@@ -1,17 +1,22 @@
import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean { 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) { if (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0) {
return ( return (
(gebaeude.baujahr_gebaeude[0] < 1978 && (gebaeude.baujahr_gebaeude[0] < 1978 &&
(gebaeude.einheiten || 0) <= 4 && (gebaeude.einheiten || 0) <= 4 &&
gebaeude.saniert == false && (gebaeude.saniert == false ) &&
(ausweis.ausstellgrund == "Vermietung" || (ausweis.ausstellgrund == "Vermietung" ||
ausweis.ausstellgrund == "Sonstiges" || ausweis.ausstellgrund == "Sonstiges" ||
ausweis.ausstellgrund == "Verkauf")) || ausweis.ausstellgrund == "Verkauf"))
ausweis.ausstellgrund == "Neubau" ||
ausweis.ausstellgrund == "Modernisierung"
); );
} }

View File

@@ -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<boolean> {
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;
}

View File

@@ -1,12 +1,15 @@
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; 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) { if (gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) {
if (!hidden.has(AuditType.HEIZUNG_JUENGER_DREI_JAHRE)) {
return ( return (
(gebaeude.baujahr_heizung.sort()[0] >= (new Date().getFullYear())-3) (gebaeude.baujahr_heizung.sort()[0] >= (new Date().getFullYear()) - 3)
); );
} }
}
return false return false
} }

View File

@@ -1,8 +1,5 @@
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { AuditType, hidden } from "./hidden"; 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"; import { getKlimafaktoren } from "#lib/Klimafaktoren";
export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise<boolean> { export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise<boolean> {

View File

@@ -1,7 +1,8 @@
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import { AuditType, hidden } from "./hidden";
export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient ): boolean { export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient): boolean {
if (gebaeude.leerstand ) { if (gebaeude.leerstand && !hidden.has(AuditType.LEER_STAND)) {
return ( return (
(gebaeude.leerstand > 30) (gebaeude.leerstand > 30)
); );

View File

@@ -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
});

View File

@@ -10,19 +10,19 @@ export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient,
return []; 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]; 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]; 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]; 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]; return [5, 6];
} }

View File

@@ -1,12 +1,15 @@
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { AuditType, hidden } from "./hidden";
export function auditWarmWasser(ausweis: VerbrauchsausweisWohnenClient): boolean { export function auditWarmWasser(ausweis: VerbrauchsausweisWohnenClient): boolean {
if (ausweis.warmwasser_anteil_bekannt && ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1) { if (ausweis.warmwasser_anteil_bekannt && ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1) {
if (!hidden.has(AuditType.WARM_WASSER)){
return ( return (
ausweis.anteil_warmwasser_1 <= 6 || ausweis.anteil_warmwasser_1 >= 35 ausweis.anteil_warmwasser_1 <= 6 || ausweis.anteil_warmwasser_1 >= 35
); );
} }
}
return false return false
} }

View File

@@ -1,12 +1,14 @@
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; import { GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import { AuditType, hidden } from "./hidden";
export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean { export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
if (gebaeude.einheiten && gebaeude.flaeche ) { if (gebaeude.einheiten && gebaeude.flaeche ) {
if (!hidden.has(AuditType.WOHN_FLAECHE)){
return ( return (
(gebaeude.flaeche < gebaeude.einheiten * 30) (gebaeude.flaeche < gebaeude.einheiten * 30)
); );
} }
}
return false return false
} }

View File

@@ -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;
}

View File

@@ -8,5 +8,8 @@ export enum AuditType {
KLIMA_FAKTOREN, KLIMA_FAKTOREN,
WOHN_FLAECHE, WOHN_FLAECHE,
WARM_WASSER, WARM_WASSER,
LEER_STAND LEER_STAND,
PLZ_NICHT_ERKANNT,
END_ENERGIE,
WOHNFLAECHE_GROESSER_GESAMTFLAECHE
} }

View File

@@ -17,9 +17,12 @@
import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche"; import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche";
import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser"; import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser";
import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand"; import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand";
import { auditPlzNichtErkannt } from "#components/Verbrauchsausweis/audits/PlzNichtErkannt";
import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden"; import { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden";
import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt"; import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt";
import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung"; 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 { Enums } from "@ibcornelsen/database/client"
import Overlay from "#components/Overlay.svelte"; import Overlay from "#components/Overlay.svelte";
import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte"; import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte";
@@ -92,6 +95,13 @@
let waitOverlayHidden = true; let waitOverlayHidden = true;
let speichernOverlayHidden = true; let speichernOverlayHidden = true;
$: {
if (gebaeude_aufnahme_allgemein.saniert) {
gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true;
gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true;
}
}
</script> </script>
<Overlay bind:hidden={speichernOverlayHidden}> <Overlay bind:hidden={speichernOverlayHidden}>
@@ -101,7 +111,9 @@
</Overlay> </Overlay>
<Overlay bind:hidden={waitOverlayHidden}> <Overlay bind:hidden={waitOverlayHidden}>
<p class="text-white font-semibold text-4xl">Bitte warten sie, ihr Ausweis wird nun erstellt.</p> <p class="text-white font-semibold text-4xl">
Bitte warten sie, ihr Ausweis wird nun erstellt.
</p>
</Overlay> </Overlay>
<div class="flex flex-row gap-8 items-center mb-8"> <div class="flex flex-row gap-8 items-center mb-8">
@@ -110,15 +122,19 @@
<Progressbar progress={0} /> <Progressbar progress={0} />
</div> </div>
<PerformanceScore bind:ausweis bind:gebaeude_aufnahme_allgemein bind:gebaeude /> <PerformanceScore
bind:ausweis
bind:gebaeude_aufnahme_allgemein
bind:gebaeude
/>
</div> </div>
<form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis"> <form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<div <div class="yellow-box">
class="yellow-box"
>
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<button class="button" type="button" on:click={spaeterWeitermachen}>Später Weitermachen</button> <button class="button" type="button" on:click={spaeterWeitermachen}
>Später Weitermachen</button
>
<div class="flex gap-4"> <div class="flex gap-4">
<Hilfe /> <Hilfe />
<button <button
@@ -133,7 +149,11 @@
<Label>A - Prüfung der Ausweisart</Label> <Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:gebaeude bind:gebaeude_aufnahme_allgemein bind:ausweis /> <Ausweisart
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
<hr /> <hr />
@@ -151,7 +171,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
name="adresse" data-test="adresse" name="adresse"
data-test="adresse"
type="text" type="text"
autocomplete="off" autocomplete="off"
required required
@@ -177,7 +198,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
name="ort" data-test="ort" name="ort"
data-test="ort"
readonly={true} readonly={true}
bind:value={gebaeude_aufnahme_allgemein.ort} bind:value={gebaeude_aufnahme_allgemein.ort}
type="text" type="text"
@@ -194,7 +216,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
name="flaeche" data-test="flaeche" name="flaeche"
data-test="flaeche"
maxlength="4" maxlength="4"
type="number" type="number"
required required
@@ -211,14 +234,21 @@
<Label>Keller *</Label> <Label>Keller *</Label>
<div> <div>
<select <select
name="keller" data-test="keller" name="keller"
data-test="keller"
required required
bind:value={gebaeude_aufnahme_allgemein.keller} bind:value={gebaeude_aufnahme_allgemein.keller}
> >
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}>nicht vorhanden</option> <option value={Enums.Heizungsstatus.NICHT_VORHANDEN}
<option value={Enums.Heizungsstatus.UNBEHEIZT}>unbeheizt</option> >nicht vorhanden</option
<option value={Enums.Heizungsstatus.BEHEIZT}>beheizt</option> >
<option value={Enums.Heizungsstatus.UNBEHEIZT}
>unbeheizt</option
>
<option value={Enums.Heizungsstatus.BEHEIZT}
>beheizt</option
>
</select> </select>
</div> </div>
</div> </div>
@@ -227,11 +257,22 @@
<div class="form-group col-md-3"> <div class="form-group col-md-3">
<Label>Dachgeschoss *</Label> <Label>Dachgeschoss *</Label>
<div> <div>
<select name="dachgeschoss" data-test="dachgeschoss" bind:value={gebaeude_aufnahme_allgemein.dachgeschoss} required> <select
name="dachgeschoss"
data-test="dachgeschoss"
bind:value={gebaeude_aufnahme_allgemein.dachgeschoss}
required
>
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}>nicht vorhanden</option> <option value={Enums.Heizungsstatus.NICHT_VORHANDEN}
<option value={Enums.Heizungsstatus.UNBEHEIZT}>unbeheizt</option> >nicht vorhanden</option
<option value={Enums.Heizungsstatus.BEHEIZT}>beheizt</option> >
<option value={Enums.Heizungsstatus.UNBEHEIZT}
>unbeheizt</option
>
<option value={Enums.Heizungsstatus.BEHEIZT}
>beheizt</option
>
</select> </select>
</div> </div>
</div> </div>
@@ -239,14 +280,16 @@
<!-- Gesamtfläche --> <!-- Gesamtfläche -->
<div class="form-group col-md-3"> <div class="form-group col-md-3">
<HelpLabel title="Gesamtfläche m²"> <HelpLabel title="Gesamtfläche m²">
Bitte geben Sie hier die beheizte Gesamtfläche in m² ein (wenn bekannt). Bitte geben Sie hier die beheizte Gesamtfläche in m² ein
Dabei handelt es sich um die Wohnfläche + weiterer Flächen innerhalb des Gebäudes (wenn bekannt). Dabei handelt es sich um die Wohnfläche +
(z.B. Fläche des beheizten Kellers). weiterer Flächen innerhalb des Gebäudes (z.B. Fläche des
Diese Fläche wird dann im Energieausweis als energetische Nutzfläche (An) ausgewiesen. beheizten Kellers). Diese Fläche wird dann im Energieausweis
als energetische Nutzfläche (An) ausgewiesen.
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
name="nutzflaeche" data-test="nutzflaeche" name="nutzflaeche"
data-test="nutzflaeche"
maxlength="4" maxlength="4"
type="number" type="number"
required required
@@ -264,7 +307,11 @@
<Label>C - Eingabe von 3 zusammenhängenden Verbrauchsjahren</Label> <Label>C - Eingabe von 3 zusammenhängenden Verbrauchsjahren</Label>
<div class="GRB"> <div class="GRB">
<Verbrauch bind:gebaeude bind:gebaeude_aufnahme_allgemein bind:ausweis /> <Verbrauch
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div> </div>
<hr /> <hr />
@@ -281,7 +328,8 @@
<input <input
type="checkbox" type="checkbox"
class="checkbox" class="checkbox"
name="warmwasser_enthalten" data-test="warmwasser_enthalten" name="warmwasser_enthalten"
data-test="warmwasser_enthalten"
bind:checked={ausweis.warmwasser_enthalten} bind:checked={ausweis.warmwasser_enthalten}
/> />
<Label>Warmwasser im Verbrauch enthalten</Label> <Label>Warmwasser im Verbrauch enthalten</Label>
@@ -290,7 +338,8 @@
<input <input
type="checkbox" type="checkbox"
class="checkbox" class="checkbox"
name="warmwasser_anteil_bekannt" data-test="warmwasser_anteil_bekannt" name="warmwasser_anteil_bekannt"
data-test="warmwasser_anteil_bekannt"
bind:checked={ausweis.warmwasser_anteil_bekannt} bind:checked={ausweis.warmwasser_anteil_bekannt}
disabled={!ausweis.warmwasser_enthalten} disabled={!ausweis.warmwasser_enthalten}
/> />
@@ -306,11 +355,13 @@
</HelpLabel> </HelpLabel>
<input <input
name="anteil_warmwasser_1" data-test="anteil_warmwasser_1" name="anteil_warmwasser_1"
data-test="anteil_warmwasser_1"
maxlength="2" maxlength="2"
type="number" type="number"
bind:value={ausweis.anteil_warmwasser_1} bind:value={ausweis.anteil_warmwasser_1}
disabled={!ausweis.warmwasser_anteil_bekannt || !ausweis.warmwasser_enthalten} disabled={!ausweis.warmwasser_anteil_bekannt ||
!ausweis.warmwasser_enthalten}
autocomplete="off" autocomplete="off"
/> />
</div> </div>
@@ -322,13 +373,15 @@
ein Anteil von 18% angenommen. ein Anteil von 18% angenommen.
</HelpLabel> </HelpLabel>
<input <input
name="anteil_warmwasser_2" data-test="anteil_warmwasser_2" name="anteil_warmwasser_2"
data-test="anteil_warmwasser_2"
maxlength="3" maxlength="3"
type="number" type="number"
autocomplete="off" autocomplete="off"
bind:value={ausweis.anteil_warmwasser_2} bind:value={ausweis.anteil_warmwasser_2}
disabled={!ausweis.zusaetzliche_heizquelle || disabled={!ausweis.zusaetzliche_heizquelle ||
!ausweis.warmwasser_anteil_bekannt || !ausweis.warmwasser_enthalten} !ausweis.warmwasser_anteil_bekannt ||
!ausweis.warmwasser_enthalten}
/> />
</div> </div>
@@ -345,7 +398,8 @@
<label class="checkbox-inline" <label class="checkbox-inline"
><input ><input
type="checkbox" type="checkbox"
name="alternative_heizung" data-test="alternative_heizung" name="alternative_heizung"
data-test="alternative_heizung"
bind:checked={ausweis.alternative_heizung} bind:checked={ausweis.alternative_heizung}
value="Heizung" value="Heizung"
/>Heizung</label />Heizung</label
@@ -353,7 +407,8 @@
<label class="checkbox-inline" <label class="checkbox-inline"
><input ><input
type="checkbox" type="checkbox"
name="alternative_warmwasser" data-test="alternative_warmwasser" name="alternative_warmwasser"
data-test="alternative_warmwasser"
bind:checked={ausweis.alternative_warmwasser} bind:checked={ausweis.alternative_warmwasser}
value="Warmwasser" value="Warmwasser"
/>Warmwasser</label />Warmwasser</label
@@ -361,7 +416,8 @@
<label class="checkbox-inline" <label class="checkbox-inline"
><input ><input
type="checkbox" type="checkbox"
name="alternative_lueftung" data-test="alternative_lueftung" name="alternative_lueftung"
data-test="alternative_lueftung"
bind:checked={ausweis.alternative_lueftung} bind:checked={ausweis.alternative_lueftung}
value="Lüftung" value="Lüftung"
/>Lüftung</label />Lüftung</label
@@ -369,7 +425,8 @@
<label class="checkbox-inline" <label class="checkbox-inline"
><input ><input
type="checkbox" type="checkbox"
name="alternative_kuehlung" data-test="alternative_kuehlung" name="alternative_kuehlung"
data-test="alternative_kuehlung"
bind:checked={ausweis.alternative_kuehlung} bind:checked={ausweis.alternative_kuehlung}
value="Kühlung" value="Kühlung"
/>Kühlung</label />Kühlung</label
@@ -392,7 +449,12 @@
Bitte wählen Sie hier den Gebäudetyp aus. Bitte wählen Sie hier den Gebäudetyp aus.
</HelpLabel> </HelpLabel>
<div> <div>
<select name="gebaeudetyp" data-test="gebaeudetyp" bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp} required> <select
name="gebaeudetyp"
data-test="gebaeudetyp"
bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
required
>
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value="Einfamilienhaus">Einfamilienhaus</option> <option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Freistehendes Einfamilienhaus" <option value="Freistehendes Einfamilienhaus"
@@ -431,7 +493,12 @@
'Gewerbe'. 'Gewerbe'.
</HelpLabel> </HelpLabel>
<div> <div>
<select name="gebaeudeteil" data-test="gebaeudeteil" bind:value={gebaeude_aufnahme_allgemein.gebaeudeteil} required> <select
name="gebaeudeteil"
data-test="gebaeudeteil"
bind:value={gebaeude_aufnahme_allgemein.gebaeudeteil}
required
>
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value="Gesamtgebäude">Gesamtgebäude</option> <option value="Gesamtgebäude">Gesamtgebäude</option>
<option value="Wohnen">Wohnen</option> <option value="Wohnen">Wohnen</option>
@@ -447,7 +514,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<select <select
name="lueftung" data-test="lueftung" name="lueftung"
data-test="lueftung"
required required
bind:value={gebaeude_aufnahme_allgemein.lueftung} bind:value={gebaeude_aufnahme_allgemein.lueftung}
> >
@@ -472,7 +540,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<select <select
name="kuehlung" data-test="kuehlung" name="kuehlung"
data-test="kuehlung"
required required
bind:value={gebaeude_aufnahme_allgemein.kuehlung} bind:value={gebaeude_aufnahme_allgemein.kuehlung}
> >
@@ -492,7 +561,8 @@
</HelpLabel> </HelpLabel>
<div> <div>
<input <input
name="leerstand" data-test="leerstand" name="leerstand"
data-test="leerstand"
maxlength="2" maxlength="2"
type="number" type="number"
bind:value={gebaeude_aufnahme_allgemein.leerstand} bind:value={gebaeude_aufnahme_allgemein.leerstand}
@@ -507,7 +577,12 @@
>F - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des >F - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des
Gebäudes</Label Gebäudes</Label
> >
<BilderZusatzsysteme {images} {gebaeude} {gebaeude_aufnahme_allgemein} {ausweis} /> <BilderZusatzsysteme
{images}
{gebaeude}
{gebaeude_aufnahme_allgemein}
{ausweis}
/>
<hr /> <hr />
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<Hilfe /> <Hilfe />
@@ -516,7 +591,6 @@
</div> </div>
</form> </form>
<RawNotificationWrapper> <RawNotificationWrapper>
{#each Object.entries($notifications) as [uid, notification] (uid)} {#each Object.entries($notifications) as [uid, notification] (uid)}
<RawNotification notification={{ ...notification, uid }}> <RawNotification notification={{ ...notification, uid }}>
@@ -540,6 +614,28 @@
</RawNotification> </RawNotification>
{/if} {/if}
{#await auditPlzNichtErkannt(gebaeude_aufnahme_allgemein) then result}
{#if result}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "PLZ_NICHT_ERKANNT",
dismissable: true,
onUserDismiss: () => {
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.
</RawNotification>
{/if}
{/await}
{#if auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)} {#if auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)}
<RawNotification <RawNotification
notification={{ notification={{
@@ -573,9 +669,10 @@
type: "warning", type: "warning",
}} }}
> >
Ihre Heizungsanlage ist jünger als 3 Jahre. Für den Verbrauchsausweis müssen Ihre Heizungsanlage ist jünger als 3 Jahre. Für den
Sie mindestens 3 Verbrauchsjahre eingeben die den aktuellen Stand des Gebäudes Verbrauchsausweis müssen Sie mindestens 3 Verbrauchsjahre eingeben
abbilden. Ein Verbrauchsausweis ist daher nicht möglich. Bitte klicken Sie die den aktuellen Stand des Gebäudes abbilden. Ein Verbrauchsausweis
ist daher nicht möglich. Bitte klicken Sie
<a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den Bedarfsausweis <a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den Bedarfsausweis
zu gelangen. zu gelangen.
</RawNotification> </RawNotification>
@@ -595,11 +692,11 @@
type: "warning", type: "warning",
}} }}
> >
Die Verbrauchszeiträume sind nicht aktuell genug. Das Ende des letzten Die Verbrauchszeiträume sind nicht aktuell genug. Das Ende des
Verbrauchszeitraumes darf nicht mehr als 18 Monate zurückliegen. Ein letzten Verbrauchszeitraumes darf nicht mehr als 18 Monate
Verbrauchsausweis ist mit diesen Zeiträumen daher nicht möglich. Bitte zurückliegen. Ein Verbrauchsausweis ist mit diesen Zeiträumen daher
klicken Sie <a href="/bedarfsausweis">hier</a> um zum Eingabeformular nicht möglich. Bitte klicken Sie <a href="/bedarfsausweis">hier</a> um
für den Bedarfsausweis zu gelangen. zum Eingabeformular für den Bedarfsausweis zu gelangen.
</RawNotification> </RawNotification>
{/if} {/if}
@@ -619,8 +716,9 @@
}} }}
> >
Die Verbrauchszeiträume sind zu aktuell und es liegen noch keine Die Verbrauchszeiträume sind zu aktuell und es liegen noch keine
Klimafaktoren dazu vor. Bitte verschieben Sie die Verbrauchszeiträume Klimafaktoren dazu vor. Bitte verschieben Sie die
1 Jahr nach hinten. Wenn das nicht möglich ist, klicken Sie Verbrauchszeiträume 1 Jahr nach hinten. Wenn das nicht möglich
ist, klicken Sie
<a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den <a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den
Bedarfsausweis zu gelangen. Bedarfsausweis zu gelangen.
</RawNotification> </RawNotification>
@@ -641,8 +739,9 @@
type: "warning", type: "warning",
}} }}
> >
Die Wohnfläche ist viel zu klein. Bitte überprüfen Sie Ihre Eingabe nochmal Die Wohnfläche ist viel zu klein. Bitte überprüfen Sie Ihre Eingabe
und stellen sicher, daß sich Ihre Angaben auf das gesamte Gebäude beziehen. nochmal und stellen sicher, daß sich Ihre Angaben auf das gesamte
Gebäude beziehen.
</RawNotification> </RawNotification>
{/if} {/if}
@@ -660,8 +759,8 @@
type: "warning", type: "warning",
}} }}
> >
Bitte überprüfen Sie nochmal die Höhe des Warmwasseranteils. Dieser scheint Bitte überprüfen Sie nochmal die Höhe des Warmwasseranteils. Dieser
nicht ganz im Rahmen zu liegen. scheint nicht ganz im Rahmen zu liegen.
</RawNotification> </RawNotification>
{/if} {/if}
@@ -679,8 +778,8 @@
type: "warning", type: "warning",
}} }}
> >
Bei Leerstand größer als 30% darf kein Verbrauchsausweis ausgestellt werden. Bei Leerstand größer als 30% darf kein Verbrauchsausweis ausgestellt
Bitte klicken Sie <a href="/bedarfsausweis">hier</a> um zum Eingabeformular werden. Bitte klicken Sie <a href="/bedarfsausweis">hier</a> um zum Eingabeformular
für den Bedarfsausweis zu gelangen. für den Bedarfsausweis zu gelangen.
</RawNotification> </RawNotification>
{/if} {/if}
@@ -699,17 +798,59 @@
type: "warning", type: "warning",
}} }}
> >
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(ausweis, Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
gebaeude ausweis,
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude)[1]} beträgt mehr als 25% gebaeude,
und sie haben keinen Leerstand angegeben. Sind sie sich sicher, dass )[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude)[1]} beträgt mehr
das stimmt? als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
dass das stimmt?
</RawNotification>
{/if}
{#await auditEndEnergie(ausweis, gebaeude, gebaeude_aufnahme_allgemein) then result}
{#if result}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "END_ENERGIE",
dismissable: true,
onUserDismiss: () => {
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.
</RawNotification>
{/if}
{/await}
{#if auditWohnflaecheGroesserGesamtflaeche(gebaeude_aufnahme_allgemein)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "WOHNFLAECHE_GROESSER_GESAMTFLAECHE",
dismissable: true,
onUserDismiss: () => {
hidden.add(AuditType.WOHNFLAECHE_GROESSER_GESAMTFLAECHE);
gebaeude = gebaeude;
},
type: "warning",
}}
>
Die Wohnfläche darf nicht größer als die Nutzfläche sein.
</RawNotification> </RawNotification>
{/if} {/if}
</RawNotificationWrapper> </RawNotificationWrapper>
<style> <style>
:global(input[type="number"]), :global(input[type="text"]) { :global(input[type="number"]),
:global(input[type="text"]) {
@apply input input-bordered py-1.5 px-2 h-auto; @apply input input-bordered py-1.5 px-2 h-auto;
} }