Merge pull request #2 from IBCornelsen/VAOnScreenTests

VA On-Screen Checks
This commit is contained in:
Moritz Utcke
2024-02-29 08:39:55 +07:00
committed by GitHub
10 changed files with 235 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
FROM oven/bun
FROM oven/bun:1.0.23
EXPOSE 3000

View File

@@ -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 (

View File

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

View File

@@ -0,0 +1,23 @@
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<boolean> {
if (hidden.has(AuditType.KLIMA_FAKTOREN)) {
return false;
}
if (ausweis.startdatum && gebaeude.plz && ausweis.verbrauch_1) {
try {
const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz);
return true; // Alle Klimfaktoren konnten abgefragt werden.
} catch (e) {
return true;
}
}
return false;
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,5 +2,11 @@ export const hidden = new Set<AuditType>()
export enum AuditType {
HEIZUNG_GEBAEUDE_BAUJAHR,
VERBRAUCH_ABWEICHUNG
HEIZUNG_JUENGER_DREI_JAHRE,
VERBRAUCH_ABWEICHUNG,
ZEITRAUM_AKTUELL,
KLIMA_FAKTOREN,
WOHN_FLAECHE,
WARM_WASSER,
LEER_STAND
}

View File

@@ -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 @@
</RawNotification>
{/each}
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude)}
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude_aufnahme_allgemein)}
<RawNotification
notification={{
message: "Bedarfsausweis benötigt!",
@@ -673,6 +679,132 @@
</RawNotification>
{/if}
{#if auditHeizungJuengerDreiJahre(gebaeude_aufnahme_allgemein)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "HEIZUNG_JUENGER_DREI_JAHRE",
dismissable: true,
onUserDismiss: () => {
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
<a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den Bedarfsausweis
zu gelangen.
</RawNotification>
{/if}
{#if auditZeitraumAktuell(ausweis, gebaeude)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "ZEITRAUM_AKTUELL",
dismissable: true,
onUserDismiss: () => {
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 <a href="/bedarfsausweis">hier</a> um zum Eingabeformular
für den Bedarfsausweis zu gelangen.
</RawNotification>
{/if}
{#await auditKlimaFaktoren(ausweis, gebaeude) then result}
{#if result}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "KLIMA_FAKTOREN",
dismissable: true,
onUserDismiss: () => {
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
<a href="/bedarfsausweis">hier</a> um zum Eingabeformular für den
Bedarfsausweis zu gelangen.
</RawNotification>
{/if}
{/await}
{#if auditWohnFlaeche(gebaeude_aufnahme_allgemein)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "WOHN_FLAECHE",
dismissable: true,
onUserDismiss: () => {
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.
</RawNotification>
{/if}
{#if auditWarmWasser(ausweis)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "WARM_WASSER",
dismissable: true,
onUserDismiss: () => {
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.
</RawNotification>
{/if}
{#if auditLeerStand(gebaeude_aufnahme_allgemein)}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "LEER_STAND",
dismissable: true,
onUserDismiss: () => {
hidden.add(AuditType.LEER_STAND);
gebaeude = gebaeude;
},
type: "warning",
}}
>
Bei Leerstand größer als 30% darf kein Verbrauchsausweis ausgestellt werden.
Bitte klicken Sie <a href="/bedarfsausweis">hier</a> um zum Eingabeformular
für den Bedarfsausweis zu gelangen.
</RawNotification>
{/if}
{#if auditVerbrauchAbweichung(ausweis, gebaeude).length > 0}
<RawNotification
notification={{