Überarbeitung Verbrauchsausweis+ Berechnung

This commit is contained in:
Moritz Utcke
2023-09-20 13:22:17 +06:00
parent 471f3bae8d
commit ec7a9ad88c
15 changed files with 204 additions and 202 deletions

View File

@@ -1,17 +1,10 @@
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
<!-- PROJECT LOGO -->
<br /> <br />
<div align="center"> <div align="center">
<a href="https://github.com/IBCornelsen/database"> <a href="https://github.com/IBCornelsen/online-energieausweis">
<img src="images/logo.png" alt="Logo" width="80" height="80"> <img src="public/images/header/logo-big.png" alt="Logo" width="240" height="80">
</a> </a>
<h3 align="center">IBC Online Energieausweis</h3> <h3 align="center">IBCornelsen Online Energieausweis</h3>
<p align="center"> <p align="center">
Online Energieausweis erstellen - IBCornelsen Online Energieausweis erstellen - IBCornelsen
@@ -19,11 +12,11 @@
<a href="https://docs.ibcornelsen.de/storage/"><strong>Dokumentation »</strong></a> <a href="https://docs.ibcornelsen.de/storage/"><strong>Dokumentation »</strong></a>
<br /> <br />
<br /> <br />
<a href="https://github.com/IBCornelsen/database">Demo</a> <a href="https://github.com/IBCornelsen/online-energieausweis">Demo</a>
· ·
<a href="https://github.com/IBCornelsen/database/issues">Bug gefunden?</a> <a href="https://github.com/IBCornelsen/online-energieausweis/issues">Bug gefunden?</a>
· ·
<a href="https://github.com/IBCornelsen/database/issues">Feature Anfordern</a> <a href="https://github.com/IBCornelsen/online-energieausweis/issues">Feature Anfordern</a>
</p> </p>
</div> </div>
@@ -38,13 +31,9 @@
## Beschreibung ## Beschreibung
Dies ist das Repository für die Datenbank des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden. Dies ist das Repository für das Online-Energieausweis Projekt des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden.
Momentan arbeiten wir an der Umsetzung einer neuen, verbesserten Datenbankstruktur die aktuelle Probleme mit Hinsicht auf die Skalierung unserer Architektur lösen wird. Momentan arbeiten wir an der generellen Struktur, um eine problemlose Skalierung unserer Services gewährleisten zu können.
Hier eine Veranschaulichung:
![Datenbankstruktur](images/struktur.png)
### Anforderungen ### Anforderungen
@@ -54,16 +43,15 @@ Für dieses Projekt benötigst du:
* docker * docker
* Installationsanleitungen für **docker** kannst du [hier](https://docs.docker.com/engine/install/) finden. * Installationsanleitungen für **docker** kannst du [hier](https://docs.docker.com/engine/install/) finden.
* NodeJS * Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen allerdings **bun** aufgrund der verbesserten Geschwindigkeit und dem gelieferten Feature Set, da **bun** sowohl einen Package Manager als auch einen Task Runner beinhaltet.
* Downloads für Node stehen [hier](https://nodejs.org/en) zur Verfügung. * Installationsanleitungen für **bun** kannst du [hier](https://bun.sh/) finden.
* Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen **pNPM** da er in den meisten Situationen schneller ist und dabei das gleiche Feature Set wie **NPM** bietet.
### Installation ### Installation
1. Klone das Repository 1. Klone das Repository
```sh ```sh
git clone https://github.com/IBCornelsen/database.git git clone https://github.com/IBCornelsen/online-energieausweis
``` ```
2. Führe `docker-compose` aus. 2. Führe `docker-compose` aus.
@@ -72,14 +60,16 @@ Für dieses Projekt benötigst du:
docker-compose up --build docker-compose up --build
``` ```
3. Öffne `localhost:3000` in deinem Browser.
## Nächste Schritte ## Nächste Schritte
* [ ] Verteilte Datenbankstruktur * [ ] Funktionierender Checkout Flow
* [ ] Performance Optimierungen * [ ] Performance Optimierungen
* [ ] Umstieg auf PostgreSQL * [ ] Automatische Tests
* [ ] Umzug der alten Daten * [ ] Dokumentation
See the [open issues](https://github.com/IBCornelsen/database/issues) for a full list of proposed features (and known issues). Siehe alle [offenen issues](https://github.com/IBCornelsen/online-energieausweis/issues) für eine Liste der vorgeschlagenen Features (und bekannten Probleme).
## Beiträge zu unserer Arbeit ## Beiträge zu unserer Arbeit
@@ -99,15 +89,4 @@ Veröffentlicht unter der GPL-3.0 Lizenz. Siehe `LICENSE` für mehr Information.
IBCornelsen - [info@ibcornelsen.de](mailto://info@ibcornelsen.de) IBCornelsen - [info@ibcornelsen.de](mailto://info@ibcornelsen.de)
Organisation: [https://github.com/IBCornelsen/database](https://github.com/IBCornelsen/database) Organisation: [https://github.com/IBCornelsen](https://github.com/IBCornelsen)
[contributors-shield]: https://img.shields.io/github/contributors/IBCornelsen/database.svg?style=for-the-badge
[contributors-url]: https://github.com/IBCornelsen/database/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/IBCornelsen/database.svg?style=for-the-badge
[forks-url]: https://github.com/IBCornelsen/database/network/members
[stars-shield]: https://img.shields.io/github/stars/IBCornelsen/database.svg?style=for-the-badge
[stars-url]: https://github.com/IBCornelsen/database/stargazers
[issues-shield]: https://img.shields.io/github/issues/IBCornelsen/database.svg?style=for-the-badge
[issues-url]: https://github.com/IBCornelsen/database/issues
[license-shield]: https://img.shields.io/github/license/IBCornelsen/database.svg?style=for-the-badge
[license-url]: https://github.com/IBCornelsen/database/blob/master/LICENSE

View File

@@ -9,7 +9,7 @@
"preview": "bun --bun astro preview", "preview": "bun --bun astro preview",
"astro": "astro", "astro": "astro",
"test:e2e": "cypress run", "test:e2e": "cypress run",
"test:unit": "vitest", "test:unit": "bun test",
"format": "prettier --write .", "format": "prettier --write .",
"build:production": "astro build && bun --bun server.js", "build:production": "astro build && bun --bun server.js",
"i18n:generate": "bunx astro-i18next generate" "i18n:generate": "bunx astro-i18next generate"
@@ -24,6 +24,7 @@
"@mollie/api-client": "^3.7.0", "@mollie/api-client": "^3.7.0",
"astro": "^2.5.1", "astro": "^2.5.1",
"astro-i18next": "1.0.0-beta.21", "astro-i18next": "1.0.0-beta.21",
"bun": "^1.0.2",
"cookiejs": "^2.1.2", "cookiejs": "^2.1.2",
"esbuild": "^0.18.17", "esbuild": "^0.18.17",
"express": "^4.18.2", "express": "^4.18.2",
@@ -52,7 +53,6 @@
"eslint": "~8.15.0", "eslint": "~8.15.0",
"eslint-config-prettier": "8.1.0", "eslint-config-prettier": "8.1.0",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"typescript": "^4.9.5", "typescript": "^4.9.5"
"vitest": "^0.29.8"
} }
} }

View File

@@ -40,8 +40,8 @@
let translation_2 = 0; let translation_2 = 0;
$: { $: {
(async () => { (async () => {
const endEnergieVerbrauch = (await ausweis.end_energie_verbrauch); const endEnergieVerbrauch = (await ausweis.endEnergieVerbrauch);
const primaerEnergieVerbrauch = (await ausweis.primaer_energie_verbrauch); const primaerEnergieVerbrauch = (await ausweis.primaerEnergieVerbrauch);
translation_1 = Math.max(0, Math.min(100, endEnergieVerbrauch / maxPerformance * 100)) translation_1 = Math.max(0, Math.min(100, endEnergieVerbrauch / maxPerformance * 100))
translation_2 = Math.max(0, Math.min(100, primaerEnergieVerbrauch / maxPerformance * 100)) translation_2 = Math.max(0, Math.min(100, primaerEnergieVerbrauch / maxPerformance * 100))
})() })()

View File

@@ -33,10 +33,5 @@ export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Auswe
throw new Error("Unbekannte Ausweisart."); throw new Error("Unbekannte Ausweisart.");
} }
if (initializer) {
ausweis.ausstellgrund = initializer.ausstellgrund;
ausweis.ausweisart = initializer.ausweisart;
}
return ausweis; return ausweis;
} }

View File

@@ -4,8 +4,6 @@ import moment from "moment";
import { BitChecker } from "../BitChecker"; import { BitChecker } from "../BitChecker";
import { getHeizungswerte } from "../Heizungswerte"; import { getHeizungswerte } from "../Heizungswerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types"; import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class Bedarfsausweis { export class Bedarfsausweis {
public ausweisart: Ausweisart = "VA"; public ausweisart: Ausweisart = "VA";
@@ -154,8 +152,8 @@ export class Bedarfsausweis {
} }
} }
public get primaer_energie_verbrauch(): number { public get primaerEnergieBedarf(): number {
const Endenergieverbrauch = this.end_energie_verbrauch; const Endenergieverbrauch = this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient( const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1, this.energietraeger_1,
@@ -165,7 +163,7 @@ export class Bedarfsausweis {
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor; return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
} }
public get end_energie_verbrauch(): number { public get endEnergieVerbrauch(): number {
let dach_u_wert = 1 / (1 / this.dach_daemmung / 0.04); let dach_u_wert = 1 / (1 / this.dach_daemmung / 0.04);
let aussenwand_u_wert = 1 / (1 / this.aussenwand_daemmung / 0.04); let aussenwand_u_wert = 1 / (1 / this.aussenwand_daemmung / 0.04);
let fussboden_u_wert = 1 / (1 / this.boden_daemmung / 0.04); let fussboden_u_wert = 1 / (1 / this.boden_daemmung / 0.04);

View File

@@ -1,34 +1,46 @@
import { getKlimafaktorenClient } from "../Klimafaktoren"; import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor"; import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import { Ausstellgrund, Ausweisart } from "./types"; import { Ausstellgrund, Ausweisart } from "./types";
import { Energiekennwerte } from "../Energiekennwerte";
import { Gebaeude } from "../Gebaeude"; import { Gebaeude } from "../Gebaeude";
import { User } from "#lib/User";
export class Verbrauchsausweis { export class Verbrauchsausweis {
public ausweisart: Ausweisart = "VA";
public ausstellgrund: Ausstellgrund = "Vermietung";
public warmwasser_enthalten: boolean = true;
public id?: number; public id?: number;
public uid?: string; public uid?: string;
public baujahr_anlage: number[] = []; public gebaeude_stammdaten: Gebaeude = new Gebaeude();
public benutzer?: User;
public rechnung?: any;
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Sonstiges";
public registriernummer: string = "";
public erledigt: boolean = false;
public baujahr_heizung: number[] = [];
public zusaetzliche_heizquelle: boolean = false;
public brennstoff_1: string = "Erdgas";
public einheit_1: string = "kWh";
public brennstoff_2: string = "Erdgas";
public einheit_2: string = "kWh";
public startdatum: Date = new Date();
public enddatum: Date = new Date();
public verbrauch_1: number = 0;
public verbrauch_2: number = 0;
public verbrauch_3: number = 0;
public verbrauch_4: number = 0;
public verbrauch_5: number = 0;
public verbrauch_6: number = 0;
public warmwasser_enthalten: boolean = false;
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public get energetische_nutzfläche(): number { public get energetische_nutzfläche(): number {
return ( return (
this.gebaeude.wohnflaeche * this.gebaeude_stammdaten.wohnflaeche *
(this.gebaeude.keller_beheizt ? 1.35 : 1.2) (this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2)
); );
} }
public regnummer?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public gebaeude: Gebaeude = new Gebaeude();
public constructor(initializer?: Verbrauchsausweis) { public constructor(initializer?: Verbrauchsausweis) {
if (initializer) {
this.ausweisart = initializer.ausweisart;
this.kennwerte = initializer.kennwerte;
}
} }
public static fromBase64(base64: string): Verbrauchsausweis | null { public static fromBase64(base64: string): Verbrauchsausweis | null {
@@ -42,59 +54,59 @@ export class Verbrauchsausweis {
} }
} }
public get primaer_energie_verbrauch(): Promise<number> { public get primaerEnergieBedarf(): Promise<number> {
return (async () => { return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch; const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient( const brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1, this.brennstoff_1,
this.kennwerte.einheit_1 this.einheit_1
); );
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor; return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})(); })();
} }
public get end_energie_verbrauch(): Promise<number> { public get endEnergieVerbrauch(): Promise<number> {
return (async () => { return (async () => {
const date = this.kennwerte.zeitraum; const date = this.startdatum;
const klimafaktoren = await getKlimafaktorenClient( const klimafaktoren = await getKlimafaktorenClient(
date, date,
this.gebaeude.plz this.gebaeude_stammdaten.plz
); );
// Endenergieverbrauch // Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient( let brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1, this.brennstoff_1,
this.kennwerte.einheit_1 this.einheit_1
); );
let brennstoff_2 = getHeizwertfaktorClient( let brennstoff_2 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_2, this.brennstoff_2,
this.kennwerte.einheit_2 this.einheit_2
); );
let verbrauch_1_kwh = let verbrauch_1_kwh =
this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor; this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh = let verbrauch_2_kwh =
this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor; this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh = let verbrauch_3_kwh =
this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor; this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh = let verbrauch_4_kwh =
this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor; this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh = let verbrauch_5_kwh =
this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor; this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh = let verbrauch_6_kwh =
this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor; this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0; let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0; let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0; let kuehlungsZuschlag = 0;
if (this.kennwerte.anteil_warmwasser_1 == 0) { if (this.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3; warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
} }
if (this.gebaeude.leerstand > 0) { if (this.gebaeude_stammdaten.leerstand > 0) {
let durchschnittsKlimafaktor = let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3; klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -105,16 +117,16 @@ export class Verbrauchsausweis {
verbrauch_4_kwh + verbrauch_4_kwh +
verbrauch_5_kwh + verbrauch_5_kwh +
verbrauch_6_kwh) * verbrauch_6_kwh) *
(this.gebaeude.leerstand / 100)) / (this.gebaeude_stammdaten.leerstand / 100)) /
durchschnittsKlimafaktor; durchschnittsKlimafaktor;
} }
if (this.gebaeude.energiequelle_2_nutzung[3]) { if (this.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3; kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
} }
let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100; let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100; let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert = let Energieverbrauchskennwert =
(anteil_heizung * (anteil_heizung *

View File

@@ -148,9 +148,9 @@ export class VerbrauchsausweisGewerbe {
} }
} }
public get primaer_energie_verbrauch(): Promise<number> { public get primaerEnergieBedarf(): Promise<number> {
return (async () => { return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch; const Endenergieverbrauch = await this.endEnergieVerbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1); const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
@@ -158,7 +158,7 @@ export class VerbrauchsausweisGewerbe {
})(); })();
} }
public get end_energie_verbrauch(): Promise<number> { public get endEnergieVerbrauch(): Promise<number> {
return (async () => { return (async () => {
const date = this.energieverbrauch_zeitraum; const date = this.energieverbrauch_zeitraum;
const klimafaktoren = await getKlimafaktorenClient( const klimafaktoren = await getKlimafaktorenClient(

View File

@@ -1,25 +0,0 @@
import moment, { Moment } from "moment";
export class Energiekennwerte {
public zeitraum: Moment = moment();
public verbrauch_1: number = 0;
public verbrauch_2: number = 0;
public verbrauch_3: number = 0;
public verbrauch_4: number = 0;
public verbrauch_5: number = 0;
public verbrauch_6: number = 0;
public einheit_1: string = "";
public einheit_2: string = "";
public energietraeger_1: string = "";
public energietraeger_2: string = "";
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public warmwasser_enthalten: boolean = false;
public zusaetzliche_heizquelle: boolean = false;
public constructor(initializer?: Energiekennwerte) {
if (initializer) {
this.zeitraum = initializer.zeitraum;
}
}
}

View File

@@ -6,7 +6,12 @@ export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>
return [0, 0, 0]; return [0, 0, 0];
} }
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`); const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`, {
method: "GET",
headers: {
"Content-Type": "application/json"
}
});
const json = await response.json(); const json = await response.json();
if (!json.success) { if (!json.success) {

9
src/lib/client/fetch.ts Normal file
View File

@@ -0,0 +1,9 @@
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
const response = await fetch(`/api/${resourceUri}`, options);
if (!response.ok) {
throw new Error("Fehler beim Abrufen der Daten.");
}
return response.json();
}

View File

@@ -1,3 +1,5 @@
export async function getKlimafaktorenServer(date: Date, zip: string) { export async function getKlimafaktorenServer(date: Date, zip: string, accuracy: "months" | "years" = "months"): Promise<number[] | null> {
return null;
} }

21
src/lib/server/fetch.ts Normal file
View File

@@ -0,0 +1,21 @@
/**
* Dies ist die Server-Side Implementierung von fetch, die Daten werden direkt vom Server abgerufen.
* Dadurch können unnötige Requests vermieden werden.
* @date 9/20/2023 - 11:33:30 AM
*
* @export
* @async
* @param {string} resourceUri
* @param {?RequestInit} [options]
* @returns {Promise<any>}
*/
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
const response = await fetch(`http://localhost:3000/api/${resourceUri}`, options);
if (!response.ok) {
throw new Error("Fehler beim Abrufen der Daten.");
}
return response.json();
}

View File

@@ -3,30 +3,26 @@ import moment from "moment";
import { ActionFailedError, InvalidDataError, MissingPropertyError, error, success } from "src/lib/APIResponse"; import { ActionFailedError, InvalidDataError, MissingPropertyError, error, success } from "src/lib/APIResponse";
import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor"; import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor";
export const get: APIRoute = async function({ request }) { export const get: APIRoute = async function({ url }) {
let body; const body = url.searchParams;
try { let zip = body.get("zip");
body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
} catch(e) {
return error(["Failed to parse URL"]);
}
if (!body.date) { if (!body.get("date")) {
return MissingPropertyError(["date"]); return MissingPropertyError(["date"]);
} }
let accuracy = body.accuracy || "months"; let accuracy = body.get("accuracy") || "months";
if (accuracy !== "months" && accuracy !== "years") { if (accuracy !== "months" && accuracy !== "years") {
return error(["Accuracy must be either 'months' or 'years'."]) return error(["Accuracy must be either 'months' or 'years'."])
} }
if (!body.zip) { if (!zip) {
return error(["Invalid ZIP Code, must be 4 or 5 characters long."]) return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
} }
let start = moment(body.date); let start = moment(body.get("date"));
let end = moment(body.date).add("2", "years"); let end = moment(body.get("date")).add("2", "years");
if (!start.isValid()) { if (!start.isValid()) {
return error(["Invalid start date given."]); return error(["Invalid start date given."]);
@@ -49,7 +45,7 @@ export const get: APIRoute = async function({ request }) {
currentDate.add(1, accuracy); currentDate.add(1, accuracy);
} }
const climateFactors = await getClimateFactor(intervals, body.zip); const climateFactors = await getClimateFactor(intervals, zip);
if (!climateFactors) { if (!climateFactors) {
return ActionFailedError(); return ActionFailedError();

View File

@@ -0,0 +1,18 @@
import { test, expect } from "bun:test";
import { Verbrauchsausweis } from "#lib/Ausweis/Verbrauchsausweis";
/**
* Wir erstellen einen neuen Verbrauchsausweis um unsere Tests durchzuführen.
*/
const ausweis = new Verbrauchsausweis();
ausweis.ausstellgrund = "Vermietung";
ausweis.baujahr_heizung = [1998];
ausweis.verbrauch_1 = 10000;
ausweis.verbrauch_2 = 10000;
ausweis.verbrauch_3 = 10000;
test("Endenergieverbrauch", async () => {
});

View File

@@ -1,8 +0,0 @@
/// <reference types="vitest" />
import { getViteConfig } from "astro/config";
export default getViteConfig({
test: {
globals: true,
},
});