VA On-Screen Checks
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
FROM oven/bun
|
FROM oven/bun:1.0.23
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
if (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
21
src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts
Normal file
21
src/components/Verbrauchsausweis/audits/KlimaFaktoren.ts
Normal file
@@ -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<boolean> {
|
||||||
|
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;
|
||||||
|
}
|
||||||
11
src/components/Verbrauchsausweis/audits/LeerStand.ts
Normal file
11
src/components/Verbrauchsausweis/audits/LeerStand.ts
Normal 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
|
||||||
|
}
|
||||||
12
src/components/Verbrauchsausweis/audits/WarmWasser.ts
Normal file
12
src/components/Verbrauchsausweis/audits/WarmWasser.ts
Normal 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
|
||||||
|
}
|
||||||
12
src/components/Verbrauchsausweis/audits/WohnFlaeche.ts
Normal file
12
src/components/Verbrauchsausweis/audits/WohnFlaeche.ts
Normal 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
|
||||||
|
}
|
||||||
22
src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts
Normal file
22
src/components/Verbrauchsausweis/audits/ZeitraumAktuell.ts
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2,5 +2,11 @@ export const hidden = new Set<AuditType>()
|
|||||||
|
|
||||||
export enum AuditType {
|
export enum AuditType {
|
||||||
HEIZUNG_GEBAEUDE_BAUJAHR,
|
HEIZUNG_GEBAEUDE_BAUJAHR,
|
||||||
VERBRAUCH_ABWEICHUNG
|
HEIZUNG_JUENGER_DREI_JAHRE,
|
||||||
|
VERBRAUCH_ABWEICHUNG,
|
||||||
|
ZEITRAUM_AKTUELL,
|
||||||
|
KLIMA_FAKTOREN,
|
||||||
|
WOHN_FLAECHE,
|
||||||
|
WARM_WASSER,
|
||||||
|
LEER_STAND
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,12 @@
|
|||||||
import BilderZusatzsysteme from "#components/Ausweis/BilderZusatzsysteme.svelte";
|
import BilderZusatzsysteme from "#components/Ausweis/BilderZusatzsysteme.svelte";
|
||||||
import { RawNotificationWrapper, RawNotification, notifications, addNotification, updateNotification } from "@ibcornelsen/ui";
|
import { RawNotificationWrapper, RawNotification, notifications, addNotification, updateNotification } from "@ibcornelsen/ui";
|
||||||
import { auditHeizungGebaeudeBaujahr } from "#components/Verbrauchsausweis/audits/HeizungGebaeudeBaujahr";
|
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 { 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";
|
||||||
@@ -638,7 +644,7 @@
|
|||||||
</RawNotification>
|
</RawNotification>
|
||||||
{/each}
|
{/each}
|
||||||
|
|
||||||
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude)}
|
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude_aufnahme_allgemein)}
|
||||||
<RawNotification
|
<RawNotification
|
||||||
notification={{
|
notification={{
|
||||||
message: "Bedarfsausweis benötigt!",
|
message: "Bedarfsausweis benötigt!",
|
||||||
@@ -673,6 +679,132 @@
|
|||||||
</RawNotification>
|
</RawNotification>
|
||||||
{/if}
|
{/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}
|
{#if auditVerbrauchAbweichung(ausweis, gebaeude).length > 0}
|
||||||
<RawNotification
|
<RawNotification
|
||||||
notification={{
|
notification={{
|
||||||
|
|||||||
Reference in New Issue
Block a user