Merge pull request #265 from IBCornelsen/main

getMain
This commit is contained in:
UMBENOMENA
2025-01-02 14:31:44 +01:00
committed by GitHub
27 changed files with 1684 additions and 832 deletions

View File

@@ -44,7 +44,7 @@
"i18next-fs-backend": "^2.3.2",
"i18next-http-backend": "^2.6.2",
"js-cookie": "^3.0.5",
"js-interpolate": "^1.0.1",
"js-interpolate": "^1.1.0",
"katex": "^0.16.11",
"moment": "^2.30.1",
"moment-timezone": "^0.5.46",

View File

@@ -9,22 +9,20 @@
import { auditHeizungGebaeudeBaujahr } from "../Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js";
import { addNotification, deleteNotification } from "@ibcornelsen/ui";
import TagInput from "../TagInput.svelte";
import type {
BedarfsausweisWohnen,
VerbrauchsausweisGewerbe,
} from "@ibcornelsen/database/client";
import { Enums } from "@ibcornelsen/database/client";
import {
BedarfsausweisWohnenClient,
GebaeudeAufnahmeClient,
GebaeudeClient,
VerbrauchsausweisGewerbeClient,
VerbrauchsausweisWohnenClient,
} from "./types.js";
export let gebaeude: GebaeudeClient;
export let ausweis:
| VerbrauchsausweisWohnenClient
| VerbrauchsausweisGewerbe
| BedarfsausweisWohnen;
| VerbrauchsausweisGewerbeClient
| BedarfsausweisWohnenClient;
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
</script>
@@ -128,11 +126,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
<select
name="saniert"
class=""
required
bind:value={gebaeude_aufnahme_allgemein.saniert}
>
<option disabled selected value={false}>Bitte auswählen</option>
<option disabled selected>Bitte auswählen</option>
<option value={true}>saniert</option>
<option value={false}>unsaniert</option>
</select>

View File

@@ -1,39 +1,28 @@
<script lang="ts">
import Hilfe from "#components/Ausweis/Hilfe.svelte";
export let spaeterWeitermachen;
export let automatischAusfüllen;
import Hilfe from "#components/Ausweis/Hilfe.svelte";
export let spaeterWeitermachen;
export let automatischAusfüllen;
</script>
<!-- Später weitermachen / Hilfe anfordern -->
<div
class="w-full mt-5 grid gap-x-4 gap-y-2 px-4
class="w-full mt-5 grid gap-x-4 gap-y-2 px-4
grid-cols-1
xs:grid-cols-2
"
>
<div class="md:justify-self-start">
<button class="button" type="button" on:click={spaeterWeitermachen}
>Später Weitermachen
</button>
</div>
<div class="md:justify-self-start">
<button
class="button"
type="button"
on:click={spaeterWeitermachen}>Später Weitermachen
</button
>
</div>
<div class="md:justify-self-end"><Hilfe />
</div>
<div class="md:justify-self-end"><Hilfe /></div>
</div>
<div class="mt-2 px-4">
<button
class="button"
on:click={automatischAusfüllen}
type="button">Automatisch Ausfüllen
</button
>
</div>
<button class="button" on:click={automatischAusfüllen} type="button"
>Automatisch Ausfüllen
</button>
</div>

View File

@@ -14,6 +14,7 @@
GebaeudeClient,
VerbrauchsausweisWohnenClient,
} from "./types.js";
import { addNotification } from "#components/Notifications/shared.js";
export let gebaeude: GebaeudeClient;
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
@@ -81,6 +82,22 @@
}
}
$: {
console.log(month, year);
if ((availableDates.filter(date => date.month === month && date.year === year).length === 0) && typeof month === "number" && typeof year === "number") {
addNotification({
message: "Monat nicht verfügbar.",
subtext: "Der ausgewählte Monat ist in diesem Jahr nicht verfügbar, bitte wählen sie einen neuen Start Monat.",
dismissable: true,
type: "warning",
timeout: 0,
uid: "monat_nicht_verfuegbar",
selector: "select[name='energieverbrauch_zeitraum_monat']"
})
}
}
$: abweichung = auditVerbrauchAbweichung(ausweis, gebaeude);
</script>
@@ -131,7 +148,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
</div>
<div class="help-label">
<HelpLabel>TEXT FEHLT</HelpLabel>
<HelpLabel>Sie haben die Möglichkeit neben der Hauptheizung die <b>Verbräuche weiterer Heizquellen</b>
(z.B. Einzelöfen, Kamin, Nachtspeicher, Wärmepumpe, zweiter Heizkessel etc.) einzugeben.
Dazu setzen Sie den Haken bei zusätzlicher Heizquelle. Eine weiterer Bereich zur Eingabe der
Verbräuche öffnet sich dann.</HelpLabel>
</div>
</div>
@@ -147,7 +167,6 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
bind:value={month}
required
>
<option disabled>Monat</option>
{#if year !== null}
{#each availableDates.filter((date) => date.year == year) as date}
<option value={date.month}
@@ -169,7 +188,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
</select>
<div class="help-label">
<HelpLabel>TEXT FEHLT</HelpLabel>
<HelpLabel>Bitte geben Sie hier den <b>Startmonat der ersten Verbruachsperiode</b> ein. Es sind nur Monate auswählbar,
die im zulässigen Zeitraum (Endzeitpunkt von Jahr 3 darf nicht älter als 18 Monate sein) liegen. Wählen Sie ein
aktuellerses Jahr um alle Monate zu sehen.
</HelpLabel>
</div>
</div>
@@ -182,7 +204,6 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
bind:value={year}
required
>
<option disabled>Jahr</option>
{#each Array.from(availableDates.reduce((a, c) => {
a.add(c.year);
return a;
@@ -196,7 +217,8 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
</select>
<div class="help-label">
<HelpLabel>TEXT FEHLT</HelpLabel>
<HelpLabel>Bitte geben Sie das <b>Startjahr der ersten Verbruachsperiode</b> ein. Weitere Zeitangaben müssen nichht
gemacht werden, da alle 3 Verbrauchsjahre zusammenhängend sein sollen.</HelpLabel>
</div>
</div>
</div>
@@ -221,33 +243,16 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
<div class="help-label">
<HelpLabel>
<b>Heizöl:</b> Flüssiger Brennstoff; Heizöl wird aus schwer
entflammbaren Anteilen des Erdöls hergestellt.<br /><br />
<b>Erdgas H, Erdgas L:</b> Brennbares Naturgas das in
unterirdischen Lagerstätten vorkommt. Erdgas H hat im
Vergleich zu Erdgas L einen leicht höheren Methangehalt, und
daher einen etwas besseren Brennwert.<br /><br />
<b>Flüssiggas:</b> Meist Propan, Butan und deren Gemische,
die bei Raumtemperatur unter vergleichsweise geringem Druck
flüssig bleiben.<br /><br />
<b>Braunkohle:</b> Durch Druck und Luftabschluss von
organischen Substanzen entstandenes, bräunlich-schwarzes
Sedimentgestein.<br /><br />
<b>Holz-Pellets:</b> Stäbchenförmige Pellets die vollständig
oder überwiegend aus Holz oder Sägenebenprodukten
hergestellt werden.<br /><br />
<b>Holzhackschnitzel:</b> Mit schneidenden Werkzeugen
zerkleinertes Holz.<br /><br />
<b>Nahwärme, Fernwärme:</b> Versorgung von thermischer
Energie über wärmegedämmte Rohrsysteme. Die Wärme wird dabei
örtlich von Heizwerken produziert oder besteht aus
Prozesswärme von BHKW's. Im Unterschied zu Fernwärme wird
Nahwärme in kleineren Einheiten dezentral realisiert.<br
/><br />
<b>Strommix:</b> Heizen mit Strom (Nachtspeicher).<br /><br
/>
<b>Koks:</b> Stark kohlenstoffhaltiger Brennstoff.<br /><br
/>
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br/>
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br/>
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im Flüssiggastank gelagert<br/>
<b>Braunkohle:</b> Fester fossiler Brennstoff<br/>
<b>Holz-Pellets:</b> Stäbchenförmige Pellets - erneuerbarer (nachwachsender) Brennstoff<br/>
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br/>
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz - <strong>erfragen Sie
den Primärenergiefaktor bei Ihrem Energieversorger</strong> (meistens mit regenartivem Anteil)<br/>
<b>Strommix:</b> Meist bei Wärmepumpe oder Nachtspeicher.<br/>
<b>Koks:</b> stark kohlenstoffhaltiger fossiler Brennstoff.<br/>
</HelpLabel>
</div>
</div>
@@ -270,10 +275,9 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
<div class="help-label">
<HelpLabel>
Bitte geben Sie die Einheit ein. Erdgas wird meist auf der
Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in
Litern vor. Pellets oder Brennholz in SRm
(Schüttraummetern).
Bitte geben Sie die Einheit ein. Die Liste passt sich entsprechend des ausgeählten Brennstoffes an.
Erdgas wird meist auf der Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in
Litern vor. Pellets oder Brennholz in kg.
</HelpLabel>
</div>
</div>
@@ -392,7 +396,8 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
</div>
<div class="help-label">
<HelpLabel>TEXT FEHLT</HelpLabel>
<HelpLabel>Hier sind die <b>Verbräuche einer zusätzlichen Heizquelle</b>
(z.B. Einzelöfen, Kamin, Nachtspeicher, Wärmepumpe, zweiter Heizkessel etc.) einzugeben</HelpLabel>
</div>
</div>
@@ -420,34 +425,16 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
<div class="help-label">
<HelpLabel>
<b>Heizöl:</b> Flüssiger Brennstoff; Heizöl wird aus
schwer entflammbaren Anteilen des Erdöls hergestellt.<br
/><br />
<b>Erdgas H, Erdgas L:</b> Brennbares Naturgas das in
unterirdischen Lagerstätten vorkommt. Erdgas H hat im
Vergleich zu Erdgas L einen leicht höheren Methangehalt,
und daher einen etwas besseren Brennwert.<br /><br />
<b>Flüssiggas:</b> Meist Propan, Butan und deren
Gemische, die bei Raumtemperatur unter vergleichsweise
geringem Druck flüssig bleiben.<br /><br />
<b>Braunkohle:</b> Durch Druck und Luftabschluss von
organischen Substanzen entstandenes, bräunlich-schwarzes
Sedimentgestein.<br /><br />
<b>Holz-Pellets:</b> Stäbchenförmige Pellets die
vollständig oder überwiegend aus Holz oder
Sägenebenprodukten hergestellt werden.<br /><br />
<b>Holzhackschnitzel:</b> Mit schneidenden Werkzeugen
zerkleinertes Holz.<br /><br />
<b>Nahwärme, Fernwärme:</b> Versorgung von thermischer
Energie über wärmegedämmte Rohrsysteme. Die Wärme wird
dabei örtlich von Heizwerken produziert oder besteht aus
Prozesswärme von BHKW's. Im Unterschied zu Fernwärme
wird Nahwärme in kleineren Einheiten dezentral
realisiert.<br /><br />
<b>Strommix:</b> Heizen mit Strom (Nachtspeicher).<br
/><br />
<b>Koks:</b> Stark kohlenstoffhaltiger Brennstoff.<br
/><br />
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br/>
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br/>
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im Flüssiggastank gelagert<br/>
<b>Braunkohle:</b> Fester fossiler Brennstoff<br/>
<b>Holz-Pellets:</b> Stäbchenförmige Pellets - erneuerbarer (nachwachsender) Brennstoff<br/>
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br/>
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz - <strong>erfragen Sie
den Primärenergiefaktor bei Ihrem Energieversorger</strong> (meistens mit regenartivem Anteil)<br/>
<b>Strommix:</b> Meist bei Wärmepumpe oder Nachtspeicher.<br/>
<b>Koks:</b> stark kohlenstoffhaltiger fossiler Brennstoff.<br/>
</HelpLabel>
</div>
</div>
@@ -472,10 +459,9 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
<div class="help-label">
<HelpLabel>
Bitte geben Sie die Einheit ein. Erdgas wird meist auf
der Abrechnung in kWh ausgewiesen. Heizöl liegt meistens
in Litern vor. Pellets oder Brennholz in SRm
(Schüttraummetern).
Bitte geben Sie die Einheit ein. Die Liste passt sich entsprechend des ausgeählten Brennstoffes an.
Erdgas wird meist auf der Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in
Litern vor. Pellets oder Brennholz in kg.
</HelpLabel>
</div>
</div>

View File

@@ -109,7 +109,7 @@
{#if Object.keys($notifications).length > 0}
<span class="indicator-item badge badge-accent text-xs">{Object.keys($notifications).length}</span>
{/if}
<button tabindex="0" class="btn btn-square btn-ghost hover:bg-base-200">
<button tabindex="0" class="button btn-square btn-ghost hover:bg-base-200">
<Bell size={24} />
</button>
</div>
@@ -119,7 +119,7 @@
</div>
<a href="/dashboard/einstellungen"
class="btn btn-square btn-ghost hover:bg-base-200"
class="button btn-square btn-ghost hover:bg-base-200"
>
<Gear size={24} />
</a>
@@ -129,7 +129,7 @@
<a
href="/dashboard/einstellungen"
use:ripple={rippleOptions}
class="btn btn-ghost no-animation focus:shadow-none justify-start py-4 h-auto hover:bg-base-200 px-8 rounded-none w-full flex flex-row gap-4"
class="button btn-ghost no-animation focus:shadow-none justify-start py-4 h-auto hover:bg-base-200 px-8 rounded-none w-full flex flex-row gap-4"
>
<div class="avatar">
<div class="w-12 rounded-full">
@@ -173,9 +173,9 @@
font-family: Poppins !important;
}
.button-tab {
/* .button-tab {
@apply btn btn-primary btn-ghost rounded-none px-8 justify-start outline-0 gap-4 items-center text-base font-normal text-base-content no-animation;
}
} */
.button-tab:hover {
@apply bg-base-200 outline-0;

View File

@@ -1,4 +1,5 @@
<script lang="ts">
import { OpenInNewWindow } from "radix-svelte-icons";
import { Notification, deleteNotification } from "./shared.js";
import { fly } from "svelte/transition";
@@ -13,7 +14,34 @@
class:border-l-yellow-400={notification.type == "warning"}
>
<div class="flex flex-col px-4 py-2">
<h2 class="text-xl font-semibold">{@html notification.message}</h2>
<h2 class="text-xl font-semibold flex flex-row items-center gap-3">{@html notification.message} {#if notification.selector}
<button on:click={() => {
if (!notification.selector) {
return
}
const element = document.querySelector(notification.selector);
if (!element) {
return
}
element.classList.add("bg-red-300")
element.scrollIntoView({
behavior: "smooth",
block: "center",
inline: "center"
})
element.focus()
deleteNotification(notification.uid)
setTimeout(() => {
element?.classList.remove("bg-red-300")
}, 3000)
}} class="p-1.5 border rounded-lg" title="Anzeigen"><OpenInNewWindow size={18}></OpenInNewWindow></button>
{/if}</h2>
<p class="text-gray-600 text-lg"><slot></slot></p>
</div>
{#if notification.dismissable}

View File

@@ -1,3 +1,5 @@
<script lang="ts"></script>
<div class="fixed right-8 bottom-8 max-w-[400px] flex flex-col gap-4 z-50">
<slot></slot>
</div>

View File

@@ -20,6 +20,7 @@ export interface Notification {
type: "error" | "success" | "info" | "warning";
onUserDismiss: () => any;
uid?: string;
selector?: string;
}
export function updateNotification(uid: string, updater: Partial<Notification>) {

View File

@@ -0,0 +1,270 @@
<script lang="ts">
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
export let ausweis: BedarfsausweisWohnenClient;
export let gebaeude_aufnahme: GebaeudeAufnahmeClient;
import { BerechnungMonatlicherBelastungsgradT9 } from "#lib/Berechnungen/BedarfsausweisWohnen/BerechnungMonatlicherBelastungsgradT9.js";
let interpolatedValuesZeitkonstante90: any
$: {
const result = BerechnungMonatlicherBelastungsgradT9(ausweis, gebaeude_aufnahme)
interpolatedValuesZeitkonstante90 = result.interpolatedValuesZeitkonstante90
}
</script>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-left">
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="12" class="border border-gray-300 p-2">
<h2>Tabelle A.12 — Heizung Berechnung des Nutzenergiebedarfs</h2>
</th>
</tr>
<tr class="bg-gray-200 text-left">
<th colspan="12" class="border border-gray-300 p-2 text-xl">
Heizbedarf des Wohngebäudes
</th>
</tr>
<tr class="text-center h-10">
<th colspan="1" class="border border-gray-300 p-2">min. Außen-<br>temperatur<br>&#952;<sub>e,min</sub> [°C]</th>
<th colspan="1" class="border border-gray-300 p-2">Innen-<br>temperatur<br>&#952;<sub>i,h,soll</sub> [°C]</th>
<th colspan="2" class="border border-gray-300 p-2">maximaler Wärmestrom<br><sub>ges</sub> [W]<br>aus Tabelle A.6 (1)</th>
<th colspan="8" class="border border-gray-300 p-2"></th>
</tr>
<tr class="text-center h-10">
<th colspan="1" class="border border-gray-300 p-2 bg-gray-100">-12</th>
<th colspan="1" class="border border-gray-300 p-2 bg-gray-100">20</th>
<th colspan="2" class="border border-gray-300 p-2 bg-yellow-100"></th>
<th colspan="8" class="border border-gray-300 p-2"></th>
</tr>
<tr>
<th class="border border-gray-300 px-2 py-1">Tage im Monat<br>d<sub>mth</sub> [d]</th>
<th class="border border-gray-300 px-2 py-1">Bilanzinnen-<br>temperatur<br>&#952;<sub>i,h</sub> [°C]<br>aus Tabelle 8 (EFH) bzw. 10 (MFH)</th>
<th class="border border-gray-300 px-2 py-1">mittlere Außen-<br>temp.<br>&#952;<sub>e,m</sub> [°C]</th>
<th class="border border-gray-300 px-2 py-1">Mittlere Belastung<br>&#946;<sub>e,m</sub><br>aus Tabelle 9 bzw. 11 (2)</th>
<th class="border border-gray-300 px-2 py-1">P<sub>h,sink</sub> = Q̇<sub>ges</sub> · (&#952;<sub>i,h</sub> - &#952;<sub>e,min</sub>) / (&#952;<sub>i,h,soll</sub> - &#952;<sub>e,min</sub>) · &#946;<sub>e,m</sub> [W] (3)</th>
<th class="border border-gray-300 px-2 py-1">P<sub>h,source</sub> = P<sub>i,ges</sub><br>aus Tabelle A.11 (4)</th>
<th class="border border-gray-300 px-2 py-1">&#947;<sub>m</sub> = P<sub>h,source</sub> / P<sub>h,sink</sub><br>(5) = (4) / (3)</th>
<th class="border border-gray-300 px-2 py-1">&#951;<sub>m</sub> = f(γ) aus Tabelle 18<br>(6)</th>
<th class="border border-gray-300 px-2 py-1">(7) = max[1 - (5) · (6);0]</th>
<th class="border border-gray-300 px-2 py-1">&#946;<sub>m</sub><br>(8) = (2) · (7)</th>
<th class="border border-gray-300 px-2 py-1">t<sub>h,m</sub> [h] (9)</th>
<th class="border border-gray-300 px-2 py-1">Q<sub>h,b</sub> [kWh] (10)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,0</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[0].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">28</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,9</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[1].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,7</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[2].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,2</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[3].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,1</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[4].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">16,7</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[5].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">19,0</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[6].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">18,6</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[7].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,3</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[8].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,4</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[9].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,1</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[10].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">0,9</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100">
{Math.round(interpolatedValuesZeitkonstante90[11].interpolatedValue*1000)/1000}
</td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr class="text-center h-10">
<th colspan="9" class="border border-gray-300 p-2 text-left">Spalte 9:&nbsp;&nbsp;(8) &gt; 0,05 → (9) = d<sub>mth</sub> · 24 &nbsp;&nbsp;&nbsp;
(8) &leq; 0,05 → (9) = (8) / 0,05 · d<sub>mth</sub> · 24</th>
<th colspan="1" class="border border-gray-300 p-2">Summe</th>
<th colspan="1" class="border-2 border-gray-600 p-2"></th>
<th colspan="1" class="border-2 border-gray-600 p-2"></th>
</tr>
<tr class="text-center h-10">
<th colspan="10" class="border border-gray-300 p-2 text-left">Spalte 10:&nbsp;&nbsp;(10) = (3) · (7) · (9) / 1000</th>
<th colspan="1" class="border border-gray-300 p-2"></th>
<th colspan="1" class="border border-gray-300 p-2"></th>
</tr>
</tbody>
</table>
</div>

View File

@@ -0,0 +1,126 @@
<script lang="ts">
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
export let ausweis: BedarfsausweisWohnenClient;
export let gebaeude_aufnahme: GebaeudeAufnahmeClient;
import { berechnungTrinkwarmwasserWaermebedarf } from "#lib/Berechnungen/BedarfsausweisWohnen/BerechnungTrinkwarmwasser.js";
let trinkwasserWaermebedarf = 0, flaechenBezogenerWaermebedarf = 0, bezugsflaeche = 0
$: {
const result = berechnungTrinkwarmwasserWaermebedarf(ausweis, gebaeude_aufnahme)
trinkwasserWaermebedarf = result.trinkwasserWaermebedarf
flaechenBezogenerWaermebedarf = result.flaechenBezogenerWaermebedarf
bezugsflaeche = result.bezugsflaeche
}
</script>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-sm">
<!-- Tabellenkopf -->
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="3" class="border border-gray-300 p-2">
<h2>Tabelle A.9 Trinkwassererwärmung Berechnung des Wärmebedarfs zur Trinkwassererwärmung</h2>
</th>
</tr>
<tr class="text-center">
<th class="w-1/4 border border-gray-300 p-2">Bezugsfläche <br> A<sub>NGF</sub> [m²] <br> (1)</th>
<th class="w-1/4 border border-gray-300 p-2">Flächenbezogener Wärmebedarf <br> q<sub>w,b</sub> [kWh/(m²·a)] aus Tabell 19<br> (2)</th>
<th class="border border-gray-300 p-2">Trinkwasserwärmebedarf <br> Q<sub>w,b</sub> = A<sub>NGF</sub> ⋅ q<sub>w,b</sub> ⋅ d<sub>mth</sub> / 365 [kWh]<br>(4) = (1) · (2) · (3) / 365</th>
</tr>
<tr class="text-center h-10">
<th class="w-1/4 border border-gray-300 p-2 bg-yellow-100">
<input type="number" bind:value={gebaeude_aufnahme.nutzflaeche}>
</th>
<th class="w-1/4 border border-gray-300 p-2 bg-blue-100">{flaechenBezogenerWaermebedarf}</th>
</tr>
<tr class="text-center">
<th class="w-1/4 border border-gray-300 p-2">Monat</th>
<th class="w-1/4 border border-gray-300 p-2">Tage im Monat<br>d<sub>mth</sub> [d] (3)</th>
</tr>
</thead>
<!-- Tabellenkörper -->
<tbody>
<!-- Monatszeilen -->
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Januar</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Februar</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">28</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 28)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">März</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">April</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 30)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Mai</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Juni</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 30)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Juli</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">August</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">September</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 30)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Oktober</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">November</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 30)}</td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Dezember</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center">{Math.round(trinkwasserWaermebedarf / 365 * 31)}</td>
</tr>
<!-- Summenzeile -->
<tr>
<td colspan="1" class="border border-gray-300 p-2 text-center font-bold">
</td>
<td colspan="1" class="border border-gray-300 p-2 text-center font-bold">
Jahressumme Q<sub>w,b</sub> [kWh/a]
</td>
<td colspan="1" class="border-2 border-gray-600 p-2 text-center font-bold">
{trinkwasserWaermebedarf}
</td>
</tr>
<!-- Fußzeile -->
<tr>
<td colspan="3" class="border border-gray-300 p-2 text-left text-xs">
</td>
</tr>
</tbody>
</table>
</div>

View File

@@ -1,5 +1,5 @@
---
import HeaderLogin from "#header/headerLogin.svelte";
import HeaderLogin from "#header/HeaderLogin.svelte";
---
<header id="header">
@@ -58,7 +58,7 @@ lg:px-0 lg:gap-x-4">
</div>
<div class="w-full justify-self-center">
<HeaderLogin />
<HeaderLogin client:load />
</div>
</div>

View File

@@ -1,15 +1,12 @@
<script lang="ts">
import { loginClient } from "#lib/login";
import CrossCircled from "radix-svelte-icons/src/lib/icons/CrossCircled.svelte";
import { CrossCircled } from "radix-svelte-icons";
import { fade } from "svelte/transition";
let email: string;
let passwort: string;
async function login(e: SubmitEvent) {
console.log(e);
e.preventDefault();
const response = await loginClient(email, passwort);
@@ -23,12 +20,14 @@
let errorHidden = true;
</script>
<div id="card-login" class="rounded-none lg:rounded-lg lg:card lg:box bg-black/10 md:bg-black/5 lg:ring-2 border-t-2 lg:border-none border-gray-500/50 ring-gray-500/50 xs:px-2 md:px-4 py-2" >
<div
id="card-login"
class="rounded-none lg:rounded-lg lg:card lg:box bg-black/10 md:bg-black/5 lg:ring-2 border-t-2 lg:border-none border-gray-500/50 ring-gray-500/50 xs:px-2 md:px-4 py-2"
>
<form on:submit={login}>
<div class="grid grid-cols-[1fr] xs:grid-cols-[2fr_2fr_1fr] gap-2">
<input
class="my-1 rounded-md px-2 py-1 w-full"
class="my-1 rounded-md px-2 py-1 w-full"
type="text"
placeholder="nutzer@email.com"
autocomplete="off"
@@ -38,7 +37,7 @@
required
/>
<input
class="my-1 rounded-md px-2 py-1 w-full"
class="my-1 rounded-md px-2 py-1 w-full"
type="password"
minlength="8"
placeholder="********"
@@ -49,39 +48,41 @@
required
/>
{#if !errorHidden}
<div role="alert" class="alert alert-error" in:fade out:fade={{delay: 400}}>
<CrossCircled size={24} />
<span class="font-semibold">Das hat leider nicht geklappt, haben sie ihr Passwort und ihre Email Adresse richtig eingegeben?</span>
</div>
<div
role="alert"
class="alert alert-error"
in:fade
out:fade={{ delay: 400 }}
>
<CrossCircled size={24} />
<span class="font-semibold"
>Das hat leider nicht geklappt, haben sie ihr Passwort
und ihre Email Adresse richtig eingegeben?</span
>
</div>
{/if}
<button class="button self-center" type="submit">login</button>
</div>
<div id="passwort-vergessen" class="grid grid-cols-1 lg:grid-cols-[3fr_2fr] gap-2">
<div
id="passwort-vergessen"
class="grid grid-cols-1 lg:grid-cols-[3fr_2fr] gap-2"
>
<div class="w-full text-left self-center">
<a
class="justify-self-start text-sm font-bold no-underline hover:text-primary"
href="/auth/signup">Registrieren</a
> /
>
/
<a
class="justify-self-start text-sm font-bold no-underline hover:text-primary"
href="/auth/passwort-vergessen">Passwort vergessen</a
>
</div>
</div>
</form>
</div>
</div>
<style lang="postcss">
</style>

View File

@@ -93,7 +93,11 @@ if(innerWidth>1024){
<nav id="cardNavigation" class="cardNavigation box hidden relative ring-0 md:ring-2 ring-primary/50 rounded-tr-none lg:block mb-0 lg:mb-5">
<div class="nav-element bg-secondary/5 py-1 pl-2 text-xs font-bold">Eingabeformulare</div>
<div class="nav-element bg-secondary/5 py-1 pl-2 text-xs font-bold">Jetzt bestellen</div>
<div class="nav-element">
<a class="no-dropdown nav-element-child" href="/welcher-energieausweis/">Welcher Energieausweis?</a>
</div>
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
<div class="nav-element dropdown lg:dropdown-right" on:click={dropdown} on:keydown={dropdown} on:mouseover={hover} on:mouseleave={hoverout}>
@@ -113,10 +117,6 @@ if(innerWidth>1024){
</ul>
</div>
<div class="nav-element">
<a class="no-dropdown nav-element-child" href="/sanierungsfahrplan-anfragen">Sanierungsfahrplan anfragen</a>
</div>
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
<div class="nav-element dropdown lg:dropdown-right" on:click={dropdown} on:keydown={dropdown} on:mouseover={hover} on:mouseleave={hoverout}>
{#if innerWidth > 1023}
@@ -136,10 +136,10 @@ if(innerWidth>1024){
</div>
<div class="nav-element">
<a class="no-dropdown nav-element-child" href="/welcher-energieausweis">Welcher Energieausweis?</a>
</div>
<a class="no-dropdown nav-element-child" href="/sanierungsfahrplan-anfragen">Sanierungsfahrplan (iSFP)</a>
</div>
<div class="nav-element bg-secondary/5 py-1 pl-2 text-xs font-bold">Produkte</div>
<div class="nav-element bg-secondary/5 py-1 pl-2 text-xs font-bold">Produkte & Preise</div>
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
<div class="nav-element dropdown lg:dropdown-right" on:click={dropdown} on:keydown={dropdown} on:mouseover={hover} on:mouseleave={hoverout}>
@@ -193,8 +193,6 @@ if(innerWidth>1024){
</ul>
</div>
<div class="nav-element bg-secondary/5 py-1 pl-2 text-xs font-bold">Service</div>
<div class="nav-element">
<a class="no-dropdown nav-element-child" href="/energieausweis-aussteller">Energieberater finden</a>
</div>

View File

@@ -0,0 +1,32 @@
<script lang="ts">
export let bereich: string;
export let title: string;
let open: boolean = true;
let collapse: HTMLDivElement;
</script>
<div class="bereichs-label">
<div>
<div
class="grid grid-cols-[max-content_1fr_40px] items-center justify-items-start gap-2"
>
<div class="formular-abschnitt1">{bereich}</div>
<div class="formular-abschnitt2">{title}</div>
<div
class="justify-self-center self-center cursor-pointer text-[2rem] ring-1 ring-secondary px-4 rounded-sm select-none"
on:click={() => {
open = !open
}}
>
{#if open}
-
{:else}
+
{/if}
</div>
</div>
</div>
</div>
<div class="collapseBereich" bind:this={collapse} class:max-h-0={!open} class:overflow-hidden={!open} class:max-h-[1500px]={open} class:overflow-visible={open}>
<slot></slot>
</div>

View File

@@ -1,46 +1,42 @@
<script lang="ts">
export let bereich: string;
let label: HTMLDivElement;
let open: boolean = true;
function toggleBereich(event){
function toggleBereich(event: MouseEvent) {
var collapse = label.nextElementSibling as HTMLDivElement;
var x = event.target.parentNode.parentNode.parentNode;
var y = x.nextElementSibling;
var z = event.target.innerHTML;
if(z=='-'){
//y.classList.remove('hidden');
y.style.maxHeight = '0px';
y.style.overflow = 'hidden';
event.target.innerHTML = "+";
}else{
//y.classList.add('hidden');
y.style.maxHeight = '1500px';
y.style.overflow = 'visible';
event.target.innerHTML = "-";
}
}
if (open) {
//y.classList.remove('hidden');
collapse.style.maxHeight = "0px";
collapse.style.overflow = "hidden";
} else {
//y.classList.add('hidden');
collapse.style.maxHeight = "1500px";
collapse.style.overflow = "visible";
}
open = !open;
}
</script>
<div class="bereichs-label">
<div>
<div class="grid grid-cols-[max-content_1fr_40px] items-center justify-items-start gap-2">
<div class="formular-abschnitt1">{bereich}</div>
<div class="formular-abschnitt2"><slot></slot></div>
<div id="BereichToggle" class="justify-self-center self-center cursor-pointer text-[2rem] ring-1 ring-secondary px-4 rounded-sm" on:click={() => toggleBereich(event)}>-</div>
<div class="bereichs-label" bind:this={label}>
<div>
<div
class="grid grid-cols-[max-content_1fr_40px] items-center justify-items-start gap-2"
>
<div class="formular-abschnitt1">{bereich}</div>
<div class="formular-abschnitt2"><slot></slot></div>
<div
class="justify-self-center self-center cursor-pointer text-[2rem] ring-1 ring-secondary px-4 rounded-sm select-none"
on:click={toggleBereich}
>
{#if open}
-
{:else}
+
{/if}
</div>
</div>
</div>
</div>
</div>
<style lang="postcss">
</style>
</div>

View File

@@ -0,0 +1,127 @@
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
/**
// Berechnung des monatlichen Belastungsgrades aus Tabelle 9 EFH (Zeitkonstante 90,130)
* @see 18599-Tabellenverfahren-Wohngebaeude.pdf
* @export
* @param {BedarfsausweisWohnenClient} ausweis
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
*/
export function BerechnungMonatlicherBelastungsgradT9(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
let bezugsflaeche = gebaeude_aufnahme.nutzflaeche ?? 0;
let heizlastGebaeude = 2000 / bezugsflaeche;
//let heizlastGebaeude = 17.5
type MonthData = {
month: string;
values: number[];
};
// Zeitkonstante bis 50
const datasetZeitkonstante50: MonthData[] = [
{ month: "Januar", values: [0.557, 0.554, 0.550, 0.543, 0.536, 0.533, 0.531, 0.530] },
{ month: "Februar", values: [0.531, 0.527, 0.524, 0.517, 0.510, 0.507, 0.505, 0.504] },
{ month: "März", values: [0.448, 0.445, 0.443, 0.437, 0.431, 0.427, 0.427, 0.426] },
{ month: "April", values: [0.317, 0.314, 0.313, 0.308, 0.305, 0.303, 0.302, 0.301] },
{ month: "Mai", values: [0.173, 0.172, 0.171, 0.169, 0.166, 0.165, 0.165, 0.164] },
{ month: "Juni", values: [0.097, 0.096, 0.096, 0.094, 0.093, 0.092, 0.092, 0.092] },
{ month: "Juli", values: [0.029, 0.029, 0.029, 0.029, 0.028, 0.028, 0.028, 0.028] },
{ month: "August", values: [0.041, 0.041, 0.041, 0.040, 0.040, 0.040, 0.039, 0.039] },
{ month: "September", values: [0.167, 0.166, 0.165, 0.164, 0.162, 0.161, 0.161, 0.161] },
{ month: "Oktober", values: [0.308, 0.306, 0.304, 0.300, 0.296, 0.293, 0.293, 0.293] },
{ month: "November", values: [0.466, 0.463, 0.460, 0.454, 0.448, 0.445, 0.444, 0.443] },
{ month: "Dezember", values: [0.560, 0.557, 0.553, 0.546, 0.539, 0.536, 0.534, 0.533] }
];
// Zeitkonstante 90
const datasetZeitkonstante90: MonthData[] = [
{ month: "Januar", values: [0.562, 0.559, 0.555, 0.548, 0.541, 0.538, 0.536, 0.535] },
{ month: "Februar", values: [0.536, 0.532, 0.529, 0.522, 0.515, 0.512, 0.510, 0.510] },
{ month: "März", values: [0.453, 0.450, 0.447, 0.441, 0.436, 0.433, 0.431, 0.431] },
{ month: "April", values: [0.320, 0.318, 0.316, 0.311, 0.307, 0.306, 0.305, 0.304] },
{ month: "Mai", values: [0.175, 0.173, 0.172, 0.170, 0.168, 0.167, 0.166, 0.166] },
{ month: "Juni", values: [0.098, 0.097, 0.096, 0.095, 0.094, 0.093, 0.093, 0.093] },
{ month: "Juli", values: [0.030, 0.029, 0.029, 0.029, 0.028, 0.028, 0.028, 0.028] },
{ month: "August", values: [0.041, 0.041, 0.041, 0.040, 0.040, 0.040, 0.039, 0.039] },
{ month: "September", values: [0.169, 0.168, 0.167, 0.164, 0.162, 0.161, 0.161, 0.161] },
{ month: "Oktober", values: [0.311, 0.309, 0.307, 0.303, 0.299, 0.297, 0.296, 0.296] },
{ month: "November", values: [0.471, 0.467, 0.465, 0.459, 0.453, 0.450, 0.448, 0.448] },
{ month: "Dezember", values: [0.565, 0.562, 0.558, 0.551, 0.544, 0.540, 0.539, 0.538] }
];
// Zeitkonstante größer oder gleich 130
const datasetZeitkonstante130: MonthData[] = [
{ month: "Januar", values: [0.567, 0.563, 0.560, 0.553, 0.545, 0.542, 0.540, 0.539, 0.539] },
{ month: "Februar", values: [0.540, 0.537, 0.533, 0.526, 0.520, 0.516, 0.515, 0.514, 0.513] },
{ month: "März", values: [0.457, 0.454, 0.451, 0.445, 0.439, 0.435, 0.435, 0.434, 0.434] },
{ month: "April", values: [0.322, 0.320, 0.318, 0.314, 0.310, 0.308, 0.307, 0.307, 0.306] },
{ month: "Mai", values: [0.176, 0.175, 0.174, 0.172, 0.169, 0.168, 0.168, 0.168, 0.167] },
{ month: "Juni", values: [0.098, 0.097, 0.096, 0.095, 0.094, 0.094, 0.094, 0.094, 0.094] },
{ month: "Juli", values: [0.030, 0.030, 0.029, 0.029, 0.028, 0.028, 0.028, 0.028, 0.028] },
{ month: "August", values: [0.042, 0.041, 0.041, 0.040, 0.040, 0.040, 0.040, 0.040, 0.040] },
{ month: "September", values: [0.170, 0.169, 0.168, 0.166, 0.164, 0.163, 0.162, 0.162, 0.162] },
{ month: "Oktober", values: [0.313, 0.311, 0.309, 0.305, 0.301, 0.300, 0.299, 0.298, 0.298] },
{ month: "November", values: [0.474, 0.471, 0.469, 0.462, 0.456, 0.454, 0.453, 0.451, 0.451] },
{ month: "Dezember", values: [0.570, 0.566, 0.563, 0.555, 0.548, 0.545, 0.543, 0.542, 0.542] },
];
// Für "Ohne Teilbeheizung" habe ich hier einfach 0 genommen. Prakmatisch würde ich sagen.
const HeizLastTabelle = [0, 5, 10, 25, 50, 75, 100, 125, 150];
/**
* Linearly interpolates a value for the given x.
* @param heizlastGebaeude The heating load value (e.g., 82).
* @param values The array of y-values corresponding to heating loads.
* @param loads The array of heating load values (x-axis).
* @returns The interpolated value.
*/
function interpolate(heizlastGebaeude: number, values: number[], loads: number[]): number {
if (heizlastGebaeude <= loads[0]) return values[0];
if (heizlastGebaeude >= loads[loads.length - 1]) return values[values.length - 1];
for (let i = 0; i < loads.length - 1; i++) {
if (heizlastGebaeude >= loads[i] && heizlastGebaeude <= loads[i + 1]) {
const x1 = loads[i];
const x2 = loads[i + 1];
const y1 = values[i];
const y2 = values[i + 1];
return y1 + ((heizlastGebaeude - x1) * (y2 - y1)) / (x2 - x1);
}
}
throw new Error("Interpolation error: Value is out of bounds.");
}
// Zeitkonstante bis 50
const interpolatedValuesZeitkonstante1 = datasetZeitkonstante50.map(data => ({
month: data.month,
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
}));
// Zeitkonstante 90
const interpolatedValuesZeitkonstante2 = datasetZeitkonstante90.map(data => ({
month: data.month,
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
}));
// Zeitkonstante größer oder gleich 130
const interpolatedValuesZeitkonstante3 = datasetZeitkonstante130.map(data => ({
month: data.month,
interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
}));
return {
interpolatedValuesZeitkonstante1
}
}

View File

@@ -0,0 +1,50 @@
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
import { linearInterpolation } from "js-interpolate"
/**
* Implementierung Tabelle E.7 — Tabelle A.9 - Trinkwassererwärmung - Berechnung des Wärmebedarfs zur Trinkwassererwärmung
*
* @see 18599-Tabellenverfahren-Wohngebaeude.pdf
* @export
* @param {BedarfsausweisWohnenClient} ausweis
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
*/
export function berechnungTrinkwarmwasserWaermebedarf(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
// A_NGF
const bezugsflaeche = gebaeude_aufnahme.nutzflaeche ?? 0;
const einheiten = gebaeude_aufnahme.einheiten ?? 1;
// A_NGF,WE,m
const flaecheProEinheit = bezugsflaeche / einheiten;
// q_w,b
let flaechenBezogenerWaermebedarf: number;
if (flaecheProEinheit < 10) {
flaechenBezogenerWaermebedarf = 16.5
} else if (flaecheProEinheit < 160) {
flaechenBezogenerWaermebedarf = linearInterpolation([{
x: 10,
y: 16
}, {
x: 150,
y: 9
}], flaecheProEinheit)
} else {
flaechenBezogenerWaermebedarf = 8.5
}
// Q_w,b
// Trinkwasser Wärmebedarf übers gesamte Jahr gerechnet. Falls ein bestimmter Monat gesucht wird kann man einfach (Q_w,b / 365 * d_mth) rechnen.
const trinkwasserWaermebedarf = bezugsflaeche * flaechenBezogenerWaermebedarf;
return {
trinkwasserWaermebedarf,
flaechenBezogenerWaermebedarf,
bezugsflaeche
}
}

View File

@@ -1,34 +0,0 @@
// Funktion zur Berechnung des monatlichen Belastungsgrades aus Tabelle 17,8, (Januar, Zeitkonstante 90)
function monatlicherBelastungsGradT90(
wertZwei: number,
wertEins: number,
maxHeizlast: number,
maxHeizlastEins: number,
maxHeizlastZwei: number
): number {
return (
wertZwei -
((wertZwei - wertEins) * (maxHeizlast - maxHeizlastEins)) /
(maxHeizlastZwei - maxHeizlastEins)
);
}
// Beispielwerte
const wertZwei = 0.541;
const wertEins = 0.548;
const maxHeizlast = 37.86;
const maxHeizlastEins = 25;
const maxHeizlastZwei = 50;
// Berechnung
const monatlicherBelastungsgradT90 = monatlicherBelastungsGradT90(
wertZwei,
wertEins,
maxHeizlast,
maxHeizlastEins,
maxHeizlastZwei
);
console.log("Monatlicher Belastungsgrad T90:", monatlicherBelastungsgradT90);

View File

@@ -3,6 +3,7 @@
import Progressbar from "#components/Ausweis/Progressbar.svelte";
import Hilfe from "#components/Ausweis/Hilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import Label from "#components/Label.svelte";
import HelpLabel from "#components/HelpLabel.svelte";
import ZipSearch from "#components/PlzSuche.svelte";
@@ -11,14 +12,23 @@
import moment from "moment";
import { BitChecker } from "src/lib/BitChecker.js";
import { Enums } from "@ibcornelsen/database/client";
import { BedarfsausweisWohnenClient, BenutzerClient, UploadedGebaeudeBild } from "#components/Ausweis/types.js";
import {
BedarfsausweisWohnenClient,
BenutzerClient,
UploadedGebaeudeBild,
} from "#components/Ausweis/types.js";
import Bereich from "#components/labels/Bereich.svelte";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
export let ausweis: BedarfsausweisWohnenClient;
export let user: BenutzerClient = {} as BenutzerClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
let gebaeude =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten
?.gebaeude_bilder || [];
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
@@ -40,6 +50,29 @@
"Fenster mit U-Wert 1": 1,
};
async function spaeterWeitermachen() {
// const result = await verbrauchsausweisWohnenSpeichern(
// ausweis,
// gebaeude,
// gebaeude_aufnahme_allgemein,
// images,
// user
// );
// if (result !== null) {
// // Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// // Sonst müsste er alles neu eingeben...
// ausweis.uid = result.uid;
// gebaeude.uid = result.gebaeude_uid;
// gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid;
// window.history.pushState(
// {},
// "",
// `${location.pathname}?uid=${result.uid}`
// );
// speichernOverlayHidden = false;
// }
}
const arrayRange = (start: number, stop: number, step: number) =>
Array.from(
{ length: (stop - start) / step + 1 },
@@ -112,157 +145,169 @@
}
</script>
<div class="flex flex-row gap-8 items-center mb-8">
<div class="flex flex-col w-full">
<h1>Bedarfsausweis erstellen - 75€</h1>
<div class="grid grid-cols-2 gap-x-8 px-4 items-center">
<div class="w-full rounded-lg border-gray/35 border-0 relative px-4">
<Progressbar progress={0} />
</div>
<PerformanceScore {ausweis} {gebaeude} {gebaeude_aufnahme_allgemein} />
<div class="w-full rounded-lg border-gray/35 border-2 relative px-4">
<PerformanceScore
bind:ausweis
bind:gebaeude_aufnahme_allgemein
bind:gebaeude
/>
</div>
</div>
<ButtonSpaeterHilfe {automatischAusfüllen} {spaeterWeitermachen} />
<form action="FORM/transfer/VA_1to2" enctype="multipart/form-data">
<fieldset
class="bg-[rgba(252,234,187,0.2)] border-2 p-4 rounded-lg border-[#ffcc03]"
>
<div class="flex flex-row justify-between">
<a class="button" href="/speichern">Später Weitermachen</a>
<div class="flex gap-4">
<Hilfe />
<button
on:click={automatischAusfüllen}
type="button"
class="button">Automatisch Ausfüllen</button
>
</div>
</div>
<hr />
<Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis />
<hr />
<Label
>B - Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Gebäudetyp
und Gebäudeteil</Label
>
<div class="GRB">
<div>
<HelpLabel title="Straße, Hausnummer *"
>Bitte geben Sie hier die Straße und Hausnummer des Gebäudes
ein.</HelpLabel
>
<div>
<input
name="objekt_strasse"
class=" strasse"
type="text"
bind:value={ausweis.objekt_strasse}
required
/>
</div>
</div>
<ZipSearch
bind:zip={ausweis.objekt_plz}
bind:city={ausweis.objekt_ort}
name="zip"
<div id="formular-box" class="formular-boxen ring-0">
<Bereich bereich="A" title="Prüfung der Ausweisart">
<Ausweisart
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</Bereich>
<div>
<HelpLabel title="Ort *"
>Ort des Gebäudes wird automatisch ermittelt.</HelpLabel
>
<div>
<input
name="objekt_ort"
type="text"
bind:value={ausweis.objekt_ort}
/>
</div>
</div>
<div>
<HelpLabel title="Wohnfläche m² *"
>Bitte geben Sie hier die beheizte Wohnfläche in m² ein.
Dabei handelt es sich um die Wohnfläche abzüglich
vorhandener Flächen die sich außerhalb des Gebäudes
befinden. (Balkone, Terassen,etc.).</HelpLabel
>
<div>
<input
name="wohnflaeche"
type="number"
required
bind:value={ausweis.wohnflaeche}
/>
</div>
</div>
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<div>
<HelpLabel title="Gebäudetyp *"
>Bitte wählen Sie hier den Gebäudetyp aus.
</HelpLabel>
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:gebaeude_aufnahme_allgemein /></Bereich
>
<hr />
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Gebäudetyp und Gebäudeteil"
>
<div class="GRB">
<div>
<select
name="objekt_typ"
bind:value={ausweis.objekt_typ}
required
<HelpLabel title="Straße, Hausnummer *"
>Bitte geben Sie hier die Straße und Hausnummer des
Gebäudes ein.</HelpLabel
>
<option>Bitte auswählen</option>
<option value="Einfamilienhaus">
Einfamilienhaus</option
>
<option value="Freistehendes Einfamilienhaus">
Freistehendes Einfamilienhaus</option
>
<option value="Freistehendes Zweifamilienhaus">
Freistehendes Zweifamilienhaus</option
>
<option value="Doppelhaushälfte">
Doppelhaushälfte</option
>
<option value="Reihenendhaus"> Reihenendhaus</option>
<option value="Reihenmittelhaus">
Reihenmittelhaus</option
>
<option value="Mehrfamilienhaus">
Mehrfamilienhaus</option
>
<option value="Wohn- und Geschäftshaus">
Wohn- und Geschäftshaus</option
>
<option value="Atrium-Bungalow">
Atrium-Bungalow</option
>
<option value="Winkelbungalow"> Winkelbungalow</option>
</select>
<div>
<input
name="objekt_strasse"
class=" strasse"
type="text"
bind:value={ausweis.objekt_strasse}
required
/>
</div>
</div>
</div>
<div>
<HelpLabel title="Gebäudeteil *"
>Bitte geben Sie hier den Gebäudeteil ein. In den meisten
Fällen handelt es sich um das Gesamtgebäude. Sollte es sich
allerdings um ein Gebäude mit mehr als 10% Gewerbeanteil
handeln, so sollten 2 Ausweise erstellt werden. In diesem
Fall wählen Sie Gebäudeteil 'Wohnen' bzw. Gebäudeteil
'Gewerbe'.</HelpLabel
>
<ZipSearch
bind:zip={ausweis.objekt_plz}
bind:city={ausweis.objekt_ort}
name="zip"
/>
<div>
<select
name="objekt_gebaeudeteil"
bind:value={ausweis.objekt_gebaeudeteil}
required
<HelpLabel title="Ort *"
>Ort des Gebäudes wird automatisch ermittelt.</HelpLabel
>
<option>Bitte auswählen</option>
<option value="Gesamtgebäude"> Gesamtgebäude</option>
<option value="Wohnen"> Wohnen</option>
</select>
<div>
<input
name="objekt_ort"
type="text"
bind:value={ausweis.objekt_ort}
/>
</div>
</div>
<div>
<HelpLabel title="Wohnfläche m² *"
>Bitte geben Sie hier die beheizte Wohnfläche in m² ein.
Dabei handelt es sich um die Wohnfläche abzüglich
vorhandener Flächen die sich außerhalb des Gebäudes
befinden. (Balkone, Terassen,etc.).</HelpLabel
>
<div>
<input
name="wohnflaeche"
type="number"
required
bind:value={ausweis.wohnflaeche}
/>
</div>
</div>
<div>
<HelpLabel title="Gebäudetyp *"
>Bitte wählen Sie hier den Gebäudetyp aus.
</HelpLabel>
<div>
<select
name="objekt_typ"
bind:value={ausweis.objekt_typ}
required
>
<option>Bitte auswählen</option>
<option value="Einfamilienhaus">
Einfamilienhaus</option
>
<option value="Freistehendes Einfamilienhaus">
Freistehendes Einfamilienhaus</option
>
<option value="Freistehendes Zweifamilienhaus">
Freistehendes Zweifamilienhaus</option
>
<option value="Doppelhaushälfte">
Doppelhaushälfte</option
>
<option value="Reihenendhaus">
Reihenendhaus</option
>
<option value="Reihenmittelhaus">
Reihenmittelhaus</option
>
<option value="Mehrfamilienhaus">
Mehrfamilienhaus</option
>
<option value="Wohn- und Geschäftshaus">
Wohn- und Geschäftshaus</option
>
<option value="Atrium-Bungalow">
Atrium-Bungalow</option
>
<option value="Winkelbungalow">
Winkelbungalow</option
>
</select>
</div>
</div>
<div>
<HelpLabel title="Gebäudeteil *"
>Bitte geben Sie hier den Gebäudeteil ein. In den
meisten Fällen handelt es sich um das Gesamtgebäude.
Sollte es sich allerdings um ein Gebäude mit mehr als
10% Gewerbeanteil handeln, so sollten 2 Ausweise
erstellt werden. In diesem Fall wählen Sie Gebäudeteil
'Wohnen' bzw. Gebäudeteil 'Gewerbe'.</HelpLabel
>
<div>
<select
name="objekt_gebaeudeteil"
bind:value={ausweis.objekt_gebaeudeteil}
required
>
<option>Bitte auswählen</option>
<option value="Gesamtgebäude">
Gesamtgebäude</option
>
<option value="Wohnen"> Wohnen</option>
</select>
</div>
</div>
</div>
</div>
</Bereich>
<hr />
<Label
@@ -874,9 +919,17 @@
required
>
<option> Bitte auswählen</option>
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}> nicht vorhanden</option>
<option value={Enums.Heizungsstatus.UNBEHEIZT}> unbeheizt</option>
<option value={Enums.Heizungsstatus.BEHEIZT}> beheizt</option>
<option
value={Enums.Heizungsstatus.NICHT_VORHANDEN}
>
nicht vorhanden</option
>
<option value={Enums.Heizungsstatus.UNBEHEIZT}>
unbeheizt</option
>
<option value={Enums.Heizungsstatus.BEHEIZT}>
beheizt</option
>
</select>
</div>
</div>
@@ -1304,10 +1357,15 @@
>G - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des
Gebäudes</Label
>
<BilderZusatzsysteme {ausweis} {gebaeude} {gebaeude_aufnahme_allgemein} {images} />
<BilderZusatzsysteme
{ausweis}
{gebaeude}
{gebaeude_aufnahme_allgemein}
{images}
/>
<hr />
<div class="flex flex-row justify-between">
<button class="button">Weiter</button>
</div>
</fieldset>
</div>
</form>

View File

@@ -98,7 +98,6 @@
gebaeude
})
})
// TODO: Ticket mit Fehldermeldung abschicken.
}
addNotification({

View File

@@ -3,12 +3,11 @@
import Progressbar from "#components/Ausweis/Progressbar.svelte";
import Hilfe from "#components/Ausweis/Hilfe.svelte";
import BereichLabel from "#labels/BereichLabel.svelte";
import Bereich from "#labels/Bereich.svelte";
//import HelpLabel from "#labels/HelpLabel.svelte";
//import Inputlabel from "#labels/InputLabel.svelte";
//import Label from "#components/Label.svelte";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
@@ -24,11 +23,12 @@
import AusweisPreviewContainer from "#components/Ausweis/AusweisPreviewContainer.svelte";
//import ZipSearch from "#components/PlzSuche.svelte";
import {
RawNotificationWrapper,
RawNotification,
notifications,
deleteNotification,
} from "#components/Notifications/index.js";
import { auditHeizungGebaeudeBaujahr } from "#components/Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js";
import { auditHeizungJuengerDreiJahre } from "#components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.js";
@@ -57,14 +57,13 @@
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
import AusweisWeiter from "./AusweisWeiter.svelte";
import { Enums } from "@ibcornelsen/database/client";
import { OpenInNewWindow } from "radix-svelte-icons";
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
// wenn gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert...
export let ausweis: VerbrauchsausweisWohnenClient;
export let user: BenutzerClient = {} as BenutzerClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
let gebaeude =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
@@ -101,11 +100,13 @@
gebaeude_aufnahme_allgemein.baujahr_heizung = [1952];
gebaeude_aufnahme_allgemein.saniert = true;
gebaeude_aufnahme_allgemein.einheiten = 1;
gebaeude_aufnahme_allgemein.gebaeudetyp = "Einfamilienhaus"
gebaeude_aufnahme_allgemein.keller = Enums.Heizungsstatus.NICHT_VORHANDEN
gebaeude_aufnahme_allgemein.dachgeschoss = Enums.Heizungsstatus.NICHT_VORHANDEN
gebaeude_aufnahme_allgemein.lueftung = "Fensterlüftung"
gebaeude_aufnahme_allgemein.kuehlung = "1"
gebaeude_aufnahme_allgemein.gebaeudetyp = "Einfamilienhaus";
gebaeude_aufnahme_allgemein.keller =
Enums.Heizungsstatus.NICHT_VORHANDEN;
gebaeude_aufnahme_allgemein.dachgeschoss =
Enums.Heizungsstatus.NICHT_VORHANDEN;
gebaeude_aufnahme_allgemein.lueftung = "Fensterlüftung";
gebaeude_aufnahme_allgemein.kuehlung = "1";
ausweis.ausstellgrund = "Vermietung";
ausweis.verbrauch_1 = 15000;
ausweis.verbrauch_2 = 14000;
@@ -113,7 +114,7 @@
gebaeude_aufnahme_allgemein.flaeche = 152;
gebaeude_aufnahme_allgemein.nutzflaeche = 172;
ausweis.keller_beheizt = true;
gebaeude_aufnahme_allgemein.brennstoff_1 = "Erdgas H";
ausweis.einheit_1 = "kWh";
ausweis.anteil_warmwasser_1 = 18;
@@ -168,8 +169,6 @@
}
</script>
<Overlay bind:hidden={speichernOverlayHidden}>
<div class="bg-white w-full max-w-screen-sm py-8 px-8">
<AusweisGespeichertModule uid={ausweis.uid}></AusweisGespeichertModule>
@@ -184,152 +183,129 @@
<h1>Verbrauchsausweis erstellen - 45€</h1>
<div class="grid grid-cols-2 gap-x-8 px-4 items-center">
<div class="w-full rounded-lg border-gray/35 border-0 relative px-4">
<Progressbar progress={0} />
</div>
<div class="w-full rounded-lg border-gray/35 border-2 relative px-4">
<PerformanceScore
bind:ausweis
bind:gebaeude_aufnahme_allgemein
bind:gebaeude
/>
<PerformanceScore
bind:ausweis
bind:gebaeude_aufnahme_allgemein
bind:gebaeude
/>
</div>
</div>
<ButtonSpaeterHilfe {automatischAusfüllen} {spaeterWeitermachen}/>
<ButtonSpaeterHilfe {automatischAusfüllen} {spaeterWeitermachen} />
<form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<div id="formular-box" class="formular-boxen ring-0">
<!-- A Prüfung der Ausweisart -->
<BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel>
<div class="collapseBereich">
<Bereich bereich="A" title="Prüfung der Ausweisart">
<Ausweisart
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div>
</Bereich>
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<BereichLabel bereich="B"
>Eingabe&nbsp;der&nbsp;Gebäudeadresse -
Angaben&nbsp;zu&nbsp;Wohnfläche, Keller&nbsp;und&nbsp;Dachgeschoss</BereichLabel
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:gebaeude_aufnahme_allgemein /></Bereich
>
<div class="collapseBereich">
<GebaeudeDaten bind:gebaeude_aufnahme_allgemein />
</div>
<!-- C Eingabe von 3 zusammenhängenden Verbrauchsjahren -->
<BereichLabel bereich="C"
>Eingabe von 3&nbsp;zusammenhängenden Verbrauchsjahren</BereichLabel
>
<div class="collapseBereich">
<Verbrauch
<Bereich
bereich="C"
title="Eingabe von 3 zusammenhängenden Verbrauchsjahren"
><Verbrauch
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div>
/></Bereich
>
<!-- D Eingabe Warmwasseranteil und Verwendung von alternativen Energieversorgungssystemen -->
<BereichLabel bereich="D"
>Eingabe&nbsp;Warmwasseranteil
und&nbsp;Verwendung&nbsp;von&nbsp;alternativen
Energieversorgungssystemen</BereichLabel
<Bereich
bereich="D"
title="Eingabe Warmwasseranteil und Verwendung von alternativen Energieversorgungssystemen"
><Warmwasseranteil bind:ausweis /></Bereich
>
<div class="collapseBereich">
<Warmwasseranteil bind:ausweis />
</div>
<!-- E Eingabe von Gebäudeteil, Lüftung, Kühlung und Leerstand -->
<BereichLabel bereich="E"
>Eingabe&nbsp;von&nbsp;Gebäudeteil,
Lüftung,&nbsp;Kühlung&nbsp;und&nbsp;Leerstand</BereichLabel
<Bereich
bereich="E"
title="Eingabe von Gebäudeteil, Lüftung, Kühlung und Leerstand"
><LueftungundLeerstand bind:gebaeude_aufnahme_allgemein /></Bereich
>
<div class="collapseBereich">
<LueftungundLeerstand bind:gebaeude_aufnahme_allgemein />
</div>
<!-- F Angaben zur Heizungsanlage -->
<BereichLabel bereich="F"
>Angaben zur Heizunganlage</BereichLabel
>
<div class="collapseBereich">
<SanierungszustandHeizungsanlage
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div>
/></Bereich
>
<!-- G Angaben zur Fenster, Dachfenster und Türen -->
<BereichLabel bereich="G"
>Angaben zu Fenster, Dachfenster und Türen</BereichLabel
>
<div class="collapseBereich">
<SanierungszustandFensterTueren
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div>
/></Bereich
>
<!-- H Angaben zur Wärmedammung -->
<BereichLabel bereich="H"
>Angaben zur Wärmedämmung</BereichLabel
>
<div class="collapseBereich">
<SanierungszustandWaermedammung
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
</div>
/></Bereich
>
<!-- I Gebäudebild und Energieausweis PDF Vorschau -->
<BereichLabel bereich="I"
>Gebäudebild und Energieausweis PDF Vorschau</BereichLabel
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
><AusweisPreviewContainer
bind:images
bind:ausweis
bind:gebaeude
/></Bereich
>
<div class="collapseBereich">
<AusweisPreviewContainer
bind:images
bind:ausweis
bind:gebaeude />
</div>
</div>
<div
class="w-full px-4 mt-5 grid gap-x-4 gap-y-2
class="w-full px-4 mt-5 grid gap-x-4 gap-y-2
grid-cols-1
xs:grid-cols-2"
>
>
<div class="md:justify-self-start">
<AusweisWeiter
bind:ausweis
bind:images
bind:user
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
></AusweisWeiter>
</div>
<div class="md:justify-self-start">
<AusweisWeiter bind:ausweis bind:images bind:user bind:gebaeude bind:gebaeude_aufnahme_allgemein></AusweisWeiter>
</div>
<div class="md:justify-self-end"><Hilfe />
</div>
</div>
<div class="md:justify-self-end"><Hilfe /></div>
</div>
</form>
<RawNotificationWrapper>
@@ -355,6 +331,35 @@ xs:grid-cols-2"
</RawNotification>
{/if}
{#if gebaeude_aufnahme_allgemein.nutzflaeche && gebaeude_aufnahme_allgemein.flaeche && gebaeude_aufnahme_allgemein.flaeche === gebaeude_aufnahme_allgemein.nutzflaeche}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "WOHNFLAECHE_GLEICH_GESAMTFLAECHE",
dismissable: true,
type: "warning",
}}
>
Die angegebene Gesamtfläche ist gleich der angegebenen Wohnfläche, in den meisten Fällen sollte die Gesamtfläche größer sein.
</RawNotification>
{/if}
{#if typeof gebaeude_aufnahme_allgemein.einheiten === "number" && gebaeude_aufnahme_allgemein.einheiten < 1}
<RawNotification
notification={{
message: "Plausibilitätsprüfung",
timeout: 0,
uid: "ANZAHL_EINHEITEN",
dismissable: false,
type: "warning",
selector: "input[name='einheiten']"
}}
>
Die Anzahl der Wohneinheiten muss mindestens 1 betragen.
</RawNotification>
{/if}
{#await auditPlzNichtErkannt(gebaeude_aufnahme_allgemein) then result}
{#if result}
<RawNotification
@@ -520,7 +525,7 @@ xs:grid-cols-2"
für den Bedarfsausweis zu gelangen.
</RawNotification>
{/if}
{#if auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein).length > 0}
<RawNotification
notification={{
@@ -537,10 +542,12 @@ xs:grid-cols-2"
>
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
ausweis,
gebaeude_aufnahme_allgemein,
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein)[1]} beträgt mehr
als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
dass das stimmt?
gebaeude_aufnahme_allgemein
)[0]} und {auditVerbrauchAbweichung(
ausweis,
gebaeude_aufnahme_allgemein
)[1]} beträgt mehr als 30% und sie haben keinen Leerstand angegeben.
Sind sie sich sicher, dass das stimmt?
</RawNotification>
{/if}

View File

@@ -146,7 +146,7 @@ xs:grid-cols-2
</div>
<div class="mt-2"><button class="button hidden" on:click={automatischAusfüllen} type="button" >Automatisch Ausfüllen</button></div>
<div class="mt-2"><button class="button" on:click={automatischAusfüllen} type="button" >Automatisch Ausfüllen</button></div>
<hr />

View File

@@ -124,3 +124,5 @@ Anforderungen für Nichtwohngebäude eingehalten werden müssen.
Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
können Sie den Ausweis bei uns auch online erstellen lassen. Die Eingabedaten
werden dann nach einem vereinfachten Verfahren erhoben.

View File

@@ -1,7 +1,7 @@
---
import AusweisLayout from "#layouts/AusweisLayout.astro";
import BedarfsausweisContent from "#modules/BedarfsausweisWohnen/BedarfsausweisContent.svelte";
import BedarfsausweisWohnenModule from "#modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte";
import { BedarfsausweisWohnenClient } from "#components/Ausweis/types";
import { createCaller } from "#lib/caller";
@@ -31,5 +31,5 @@ if (uid) {
---
<AusweisLayout title="Bedarfsausweis erstellen | IBCornelsen">
<BedarfsausweisContent client:load ausweis={ausweis}></BedarfsausweisContent>
<BedarfsausweisWohnenModule client:load ausweis={ausweis}></BedarfsausweisWohnenModule>
</AusweisLayout>

View File

@@ -1,6 +1,18 @@
---
import Layout from "#layouts/Layout.astro";
import { berechnungNutzenergiebedarfHeizen } from "#lib/Berechnungen/BedarfsausweisWohnen/BerechnungNutzenergiebedarfHeizen.js"
import A12BerechnungNutzenergiebedarf from "#components/Tabellen/A12BerechnungNutzenergiebedarf.svelte";
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import A1AnlagenBeschreibung from "#components/Tabellen/A1AnlagenBeschreibung.svelte";
import A2Wintergarten from "#components/Tabellen/A2Wintergarten.svelte";
import A5Waermetransferkoeffizienten from "#components/Tabellen/A5Waermetransferkoeffizienten.svelte";
import A9Trinkwassererwaermung from "#components/Tabellen/A9Trinkwassererwaermung.svelte";
import A12NutzenergiebedarfHeizung from "#components/Tabellen/A12NutzenergiebedarfHeizung.svelte";
const gebaeude_aufnahme: GebaeudeAufnahmeClient = { flaeche: 152 }
const ausweis: BedarfsausweisWohnenClient = {};
---
@@ -1341,112 +1353,8 @@ import Layout from "#layouts/Layout.astro";
</table>
</div>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-sm">
<!-- Tabellenkopf -->
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="3" class="border border-gray-300 p-2">
<h2>Tabelle A.9 Trinkwassererwärmung Berechnung des Wärmebedarfs zur Trinkwassererwärmung</h2>
</th>
</tr>
<tr class="text-center">
<th class="w-1/4 border border-gray-300 p-2">Bezugsfläche <br> A<sub>NGF</sub> [m²] <br> (1)</th>
<th class="w-1/4 border border-gray-300 p-2">Flächenbezogener Wärmebedarf <br> q<sub>w,b</sub> [kWh/(m²·a)] aus Tabell 19<br> (2)</th>
<th class="border border-gray-300 p-2">Trinkwasserwärmebedarf <br> Q<sub>w,b</sub> = A<sub>NGF</sub> ⋅ q<sub>w,b</sub> ⋅ d<sub>mth</sub> / 365 [kWh]<br>(4) = (1) · (2) · (3) / 365</th>
</tr>
<tr class="text-center h-10">
<th class="w-1/4 border border-gray-300 p-2 bg-yellow-100"></th>
<th class="w-1/4 border border-gray-300 p-2 bg-blue-100"></th>
</tr>
<tr class="text-center">
<th class="w-1/4 border border-gray-300 p-2">Monat</th>
<th class="w-1/4 border border-gray-300 p-2">Tage im Monat<br>d<sub>mth</sub> [d] (3)</th>
</tr>
</thead>
<A9Trinkwassererwaermung {ausweis} {gebaeude_aufnahme} client:load></A9Trinkwassererwaermung>
<!-- Tabellenkörper -->
<tbody>
<!-- Monatszeilen -->
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Januar</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Februar</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">28</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">März</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">April</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Mai</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Juni</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Juli</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">August</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">September</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Oktober</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">November</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">30</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<tr>
<td class="w-1/4 border border-gray-300 p-2 text-center">Dezember</td>
<td class="w-1/4 border border-gray-300 p-2 text-center bg-gray-100">31</td>
<td class="border-2 border-gray-600 p-2 text-center"></td>
</tr>
<!-- Summenzeile -->
<tr>
<td colspan="1" class="border border-gray-300 p-2 text-center font-bold">
</td>
<td colspan="1" class="border border-gray-300 p-2 text-center font-bold">
Jahressumme Q<sub>w,b</sub> [kWh/a]
</td>
<td colspan="1" class="border-2 border-gray-600 p-2 text-center font-bold">
</td>
</tr>
<!-- Fußzeile -->
<tr>
<td colspan="3" class="border border-gray-300 p-2 text-left text-xs">
</td>
</tr>
</tbody>
</table>
</div>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-sm">
<!-- Tabellenkopf -->
@@ -1735,231 +1643,8 @@ import Layout from "#layouts/Layout.astro";
</table>
</div>
<A12NutzenergiebedarfHeizung {ausweis} {gebaeude_aufnahme} client:load></A12NutzenergiebedarfHeizung>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-left">
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="12" class="border border-gray-300 p-2">
<h2>Tabelle A.12 — Heizung Berechnung des Nutzenergiebedarfs</h2>
</th>
<tr class="text-center">
<tr class="bg-gray-200 text-left">
<th colspan="12" class="border border-gray-300 p-2 text-xl">
Heizbedarf des Wohngebäudes
</th>
</tr>
<th colspan="1" class="border border-gray-300 p-2">min. Außen-<br>temperatur<br>&#952;<sub>e,min</sub> [°C]</th>
<th colspan="1" class="border border-gray-300 p-2">Innen-<br>temperatur<br>&#952;<sub>i,h,soll</sub> [°C]</th>
<th colspan="2" class="border border-gray-300 p-2">maximaler Wärmestrom<br>Q̇<sub>ges</sub> [W]<br>aus Tabelle A.6 (1)</th>
<th colspan="8" class="border border-gray-300 p-2"></th>
<tr class="text-center h-10">
<th colspan="1" class="border border-gray-300 p-2 bg-gray-100">-12</th>
<th colspan="1" class="border border-gray-300 p-2 bg-gray-100">20</th>
<th colspan="2" class="border border-gray-300 p-2 bg-yellow-100"></th>
<th colspan="8" class="border border-gray-300 p-2"></th>
</tr>
</tr>
<tr>
<th class="border border-gray-300 px-2 py-1">Tage im Monat<br>d<sub>mth</sub> [d]</th>
<th class="border border-gray-300 px-2 py-1">Bilanzinnen-<br>temperatur<br>&#952;<sub>i,h</sub> [°C]<br>aus Tabelle 8 (EFH) bzw. 10 (MFH)</th>
<th class="border border-gray-300 px-2 py-1">mittlere Außen-<br>temp.<br>&#952;<sub>e,m</sub> [°C]</th>
<th class="border border-gray-300 px-2 py-1">Mittlere Belastung<br>&#946;<sub>e,m</sub><br>aus Tabelle 9 bzw. 11 (2)</th>
<th class="border border-gray-300 px-2 py-1">P<sub>h,sink</sub> = Q̇<sub>ges</sub> · (&#952;<sub>i,h</sub> - &#952;<sub>e,min</sub>) / (&#952;<sub>i,h,soll</sub> - &#952;<sub>e,min</sub>) · &#946;<sub>e,m</sub> [W] (3)</th>
<th class="border border-gray-300 px-2 py-1">P<sub>h,source</sub> = P<sub>i,ges</sub><br>aus Tabelle A.11 (4)</th>
<th class="border border-gray-300 px-2 py-1">&#947;<sub>m</sub> = P<sub>h,source</sub> / P<sub>h,sink</sub><br>(5) = (4) / (3)</th>
<th class="border border-gray-300 px-2 py-1">&#951;<sub>m</sub> = f(γ) aus Tabelle 18<br>(6)</th>
<th class="border border-gray-300 px-2 py-1">(7) = max[1 - (5) · (6);0]</th>
<th class="border border-gray-300 px-2 py-1">&#946;<sub>m</sub><br>(8) = (2) · (7)</th>
<th class="border border-gray-300 px-2 py-1">t<sub>h,m</sub> [h] (9)</th>
<th class="border border-gray-300 px-2 py-1">Q<sub>h,b</sub> [kWh] (10)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,0</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">28</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">1,9</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,7</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,2</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,1</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">16,7</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">19,0</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">18,6</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">14,3</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">9,4</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">30</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">4,1</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">31</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border border-gray-300 px-2 py-1 bg-gray-100">0,9</td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border border-gray-300 px-2 py-1 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
<td class="border-2 border-gray-600 px-2 py-1"></td>
</tr>
<tr class="text-center h-10">
<th colspan="9" class="border border-gray-300 p-2 text-left">Spalte 9:&nbsp;&nbsp;(8) &gt; 0,05 → (9) = d<sub>mth</sub> · 24 &nbsp;&nbsp;&nbsp;
(8) &leq; 0,05 → (9) = (8) / 0,05 · d<sub>mth</sub> · 24</th>
<th colspan="1" class="border border-gray-300 p-2">Summe</th>
<th colspan="1" class="border-2 border-gray-600 p-2"></th>
<th colspan="1" class="border-2 border-gray-600 p-2"></th>
</tr>
<tr class="text-center h-10">
<th colspan="10" class="border border-gray-300 p-2 text-left">Spalte 10:&nbsp;&nbsp;(10) = (3) · (7) · (9) / 1000</th>
<th colspan="1" class="border border-gray-300 p-2"></th>
<th colspan="1" class="border border-gray-300 p-2"></th>
</tr>
</tbody>
</table>
</div>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-left">
<thead>
@@ -2096,41 +1781,51 @@ import Layout from "#layouts/Layout.astro";
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="10" class="border border-gray-300 p-2">
<h2>Tabelle A.14 — Anlage gesamt - Berechnung der mittleren Belastungen</h2>
<h2>Tabelle A.14 — Anlage gesamt - Aufwandszahlen und mittlere Belastungen (Heizung)</h2>
</th>
<tr class="text-center">
<tr class="bg-gray-200 text-left">
<th colspan="10" class="border border-gray-300 p-2 text-xl">
Bestimmung der mittleren Belastung in Anlagenteilbereichen
Anlagenteilbereiche
</th>
</tr>
<tr>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center">Energiebedarf [kWh/a]</th>
<tr>
<th colspan="1" class="border border-gray-300 px-4 py-2 text-center">Objekt:</th>
<th colspan="9" class="border border-gray-300 px-4 py-2 text-center bg-yellow-100"></th>
</tr>
<tr>
<th colspan="1" class="border border-gray-300 px-4 py-2 text-center">Anlage:</th>
<th colspan="3" class="border border-gray-300 px-4 py-2 text-center bg-yellow-100"></th>
<th colspan="1" class="border border-gray-300 px-4 py-2 text-center">t<sub>h,m</sub> [h/a]<br>aus Tabelle A.12:</th>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center bg-yellow-100"></th>
<th colspan="1" class="border border-gray-300 px-4 py-2 text-center">Φ<sub>h,max</sub> [W]<br>aus Tabelle A.6:</th>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center bg-yellow-100"></th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2"></td>
<th class="border border-gray-300 px-4 py-2">Anteil</td>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center">Übergabe</th>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center">Verteilung</th>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center">Speicherung</th>
<th colspan="2" class="border border-gray-300 px-4 py-2 text-center">Erzeugung</th>
</tr>
<tr>
<th colspan="1" class="border border-gray-300 px-4 py-2 text-center">Objekt:</th>
<th colspan="9" class="border border-gray-300 px-4 py-2 text-center bg-yellow-100"></th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2 text-center">Anlage</th>
<th class="border border-gray-300 px-4 py-2 text-center">Nutzenergiebedarf<br>Q<sub>nutz</sub> = Q<sub>b</sub> [kWh/a]</th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>ce</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>ce</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>d</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>d</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>s</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>s</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>g,n</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>g,n</sub></th>
<th class="border border-gray-300 px-4 py-2"></td>
<th class="border border-gray-300 px-4 py-2">A<sub>h,m</sub></sup> / A<br>[%]<br>aus Planung</td>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>h,ce</sub> =<br>(Q<sub>h,b</sub> / t<sub>h,m</sub> · Φ<sub>h,max</sub>) · 1000</th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>h,ce</sub><br>aus Tabellen<br>20 - 25</th></th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>h,d</sub> =<br>β<sub>h,ce</sub> · e<sub></sub>h,ce</sub> · f<sub>hydr</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>h,d</sub><br>aus Tabellen<br>30 - 36</th></th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>h,s</sub> =<br>β<sub>h,d</sub> · e<sub>h,d</sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>h,s</sub><br>aus Tabellen<br>50-52</th>
<th class="border border-gray-300 px-4 py-2 text-center">β<sub>h,g</sub> =<br>β<sub>h,s · e<sub>h,s</sub></sub></th>
<th class="border border-gray-300 px-4 py-2 text-center">e<sub>h,g</sub><br>für Kessel aus<br>Tabellen 77-81</th>
</tr>
</thead>
</div>
<tbody>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2">Heizung 1</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
@@ -2142,7 +1837,7 @@ import Layout from "#layouts/Layout.astro";
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2">Heizung 2</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
@@ -2153,45 +1848,401 @@ import Layout from "#layouts/Layout.astro";
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 text-center">A<sub>w,m</sub></sup> / A<br>[%]<br>aus Planung</td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>w,ce</sub><br>aus Tabelle<br>29</td></td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>w,d</sub><br>aus Tabellen<br>42-44</td></td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>w,s</sub><br>aus Tabellen<br>55-57</td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>w,g</sub><br>aus<br>Tabellen 59-81</td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2">TWW 1</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2">TWW 2</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 text-center">A<sub>rv,m</sub></sup> / A<br>[%]<br>aus Planung</td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>rv,ce</sub><br>aus Tabelle<br>27</td></td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>rv,d</sub><br>aus Tabellen<br>47</td></td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>rv,s</sub><br>aus Tabellen<br>50-52, 55-57</td>
<td class="border border-gray-300 px-4 py-2 text-center"></td>
<td class="border border-gray-300 px-4 py-2 text-center">e<sub>rv,g</sub><br>aus<br>Tabellen </td>120-138,135
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2">Lüftung</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td colspan="10" class="border border-gray-300 px-4 py-2">Treten unterschiedliche Übergabesysteme und/oder
unterschiedliche Verteilsysteme in dem gleichen Gebäude auf, wird zur Aufteilung des Bedarfs die Fläche
als Bezugsgröße herangezogen und mehrere Zeilen für die Anlagentechnik angelegt:
<b>Q<sub>b,m</sub> = Q<sub>b</sub> &middot;
A<sub>ce,m</sub></sup> / A </b><br><br>
Wenn kein Pufferspeicher vorhanden ist: <b>e<sub>h,s</sub> = 1</b><br><br>
Zu beachten bei vorhandenem Pufferspeicher:<br>
<b>β<sub>h,g</sub> = 1</b> und die Aufwandszahl für Verteilung muss korrigiert werden:
<b>e<sub>h,d,korr</sub> = (e<sub>h,d</sub> - 1) · (8760/t<sub>h,r,L</sub>) + 1</b> (t<sub>h,r,L</sub> siehe Tabelle 13)<br><br>
Handelt es sich bei den Wärmeerzeugern um Kessel, sind noch folgende zwei Korrekturen vorzunehmen:<br><br>
Korrektur der Aufwandszahl für Erzeugung für Heizung mit:
<b>e<sub>h,g,korr</sub> = (e<sub>h,g</sub> - 1) &middot; t<sub>a</sub> / t<sub>h,rL</sub> + 1</b><br>
Korrektur der Aufwandszahl für Erzeugung für Trinkwarmwassererwärmung:
<b>e<sub>w,g,korr</sub> = (e<sub>w,g</sub> - 1) &middot; t<sub>a</sub> / t<sub>h,rL</sub> + 1</b>
</td>
</tr>
</tbody>
</table>
</div>
<div class="overflow-x-auto mt-16">
<table class="table-auto border-collapse border border-gray-300 w-full text-sm">
<thead>
<tr class="bg-gray-200 text-left">
<th colspan="7" class="border border-gray-300 p-2">
<h2>Tabelle A.15 — Anlage gesamt</h2>
</th>
<tr class="text-center">
<tr class="bg-gray-200 text-left">
<th colspan="7" class="border border-gray-300 p-2 text-xl">
Berechnung der Aufwandszahlen (gesamt) und Erzeugernutzwärmeabgabe
</th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2">Nutzenergie-<br>bedarf</td>
<th class="border border-gray-300 px-4 py-2">Übergabe</th>
<th class="border border-gray-300 px-4 py-2">Verteilung</th>
<th class="border border-gray-300 px-4 py-2">Speicherung</th>
<th class="border border-gray-300 px-4 py-2">
Flächenbezogene<br>Erzeugernutzwärmeabgabe
</th>
<th class="border border-gray-300 px-4 py-2">Erzeugung</th>
<th class="border border-gray-300 px-4 py-2">Gesamt</th>
</tr>
<tr>
<td class="border border-gray-300 px-4 py-2 text-center">Q<sub>h,nutz,m</sub> =<br>Q<sub>h,b</sub> · A<sub>h,m</sub></sup> / A</sub><br>[kWh/a]<br>aus Tabelle A.12, A.14</td>
<th class="border border-gray-300 px-4 py-2">e<sub>ce</sub></th>
<th class="border border-gray-300 px-4 py-2">e<sub>d</sub></th>
<th class="border border-gray-300 px-4 py-2">e<sub>s</sub></th>
<th class="border border-gray-300 px-4 py-2">
q<sub>outg</sub><sup>a</sup> = Q<sub>nutz</sub> / A<sub>NGF</sub> &middot; e<sub>ce</sub> &middot; e<sub>d</sub> &middot; e<sub>s</sub>
<br>[kWh/m²a]</th>
<th class="border border-gray-300 px-4 py-2">e<sub>g</sub></th>
<th class="border border-gray-300 px-4 py-2">
e<sub>ges</sub> = e<sub>ce</sub> &middot; e<sub>d</sub> &middot; e<sub>s</sub> &middot; e<sub>g</sub>
</th>
</tr>
</thead>
<tbody>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="7" class="border border-gray-300 px-4 py-2"></th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2">Deckungsanteil erneuerbare Energie (Abschnitt 6.6.1.1)</th>
<th class="border border-gray-300 px-4 py-2">Deckungsanteil Erzeuger (Tabelle 75)</th>
<th class="border border-gray-300 px-4 py-2">Endenergie (brennwertbezogen)</th>
<th class="border border-gray-300 px-4 py-2">Umrechnungsfaktor für die Endenergie</th>
<th class="border border-gray-300 px-4 py-2">Primärenergiefaktor</th>
<th class="border border-gray-300 px-4 py-2">Primärenergie (heizwertbezogen)</th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2">K<sub>EE</sub></th>
<th class="border border-gray-300 px-4 py-2">K<sub>g</sub></th>
<th class="border border-gray-300 px-4 py-2">
Q<sub>f</sub> = Q<sub>nutz</sub> · e<sub>ges</sub> · (1 - K<sub>EE</sub>) · K<sub>g</sub>
</th>
<th class="border border-gray-300 px-4 py-2">f<sub>HS/HI</sub></th>
<th class="border border-gray-300 px-4 py-2">f<sub>p</sub></th>
<th class="border border-gray-300 px-4 py-2">
Q<sub>p</sub> = (Q<sub>f</sub> / f<sub>HS/HI</sub>) · f<sub>p</sub>
</th>
</tr>
</thead>
<tbody>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr>
<th colspan="7" class="border border-gray-300 px-4 py-2"></th>
</tr>
</tbody>
<thead>
<tr class="bg-gray-200 text-left">
<tr class="text-center">
<tr class="bg-gray-300 text-left">
<th colspan="7" class="border border-gray-300 p-2 text-xl">
Berechnung der Hilfsenergie
</th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2">W<sub>ce</sub><br>[kWh/a]</th>
<th class="border border-gray-300 px-4 py-2">W<sub>d</sub><br>[kWh/a]</th>
<th class="border border-gray-300 px-4 py-2">W<sub>s</sub><br>[kWh/a]</th>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2">W<sub>g</sub><br>[kWh/a]</th>
<th class="border border-gray-300 px-4 py-2">
W<sub>ges</sub> = W<sub>ce</sub> + W<sub>d</sub> + W<sub>s</sub> + W<sub>g</sub><br>[kWh/a]
</th>
</tr>
</thead>
<tbody>
<tr class="h-10">
<th class="border border-gray-300 px-4 py-2"></th>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<th class="border border-gray-300 px-4 py-2"></th>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<th class="border border-gray-300 px-4 py-2"></th>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<th class="border border-gray-300 px-4 py-2"></th>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="7" class="border border-gray-300 px-4 py-2"></th>
</tr>
<tr>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2"></th>
<th class="border border-gray-300 px-4 py-2">W<sub>f</sub> = W<sub>ges</sub></th>
<th class="border border-gray-300 px-4 py-2">f<sub>HS/HI</sub></th>
<th class="border border-gray-300 px-4 py-2">f<sub>p</sub></th>
<th class="border border-gray-300 px-4 py-2">W<sub>p</sub> = (W<sub>f</sub> / f<sub>HS/HI</sub>) · f<sub>p</sub></th>
</tr>
</thead>
<tbody>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr class="h-10">
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
</tbody>
</table>
</div>
<div class="overflow-x-auto mt-2">
<table class="table-auto border-collapse border border-gray-300 w-full text-left text-sm">
<thead class="bg-gray-300">
<tr>
<th colspan="6" class="border border-gray-300 p-2 text-xl">Berechnung der Kühlung</th>
</tr>
</thead>
<tbody>
<tr>
<td class="border border-gray-300 px-4 py-2 w-1/12">Gekühlte<br>Nutzfläche</td>
<td class="border border-gray-300 px-4 py-2 w-1/12">A<sub>N,c</sub> [m²]</td>
<td class="border border-gray-300 px-4 py-2 w-1/12 bg-yellow-100"></td>
<td class="border border-gray-300 px-4 py-2 w-1/6">Flächenbezogener<br>Nutzenergiebedarf</td>
<td class="border border-gray-300 px-4 py-2 w-1/6">q<sub>rc,b</sub> [kWh/m²a]</td>
<td class="border border-gray-300 px-4 py-2 bg-yellow-100 w-1/6"></td>
</tr>
<tr>
<td class="border border-gray-300 px-4 py-2">Teilkühlfaktor</td>
<td class="border border-gray-300 px-4 py-2">
f<sub>c,part</sub> =<br>A<sub>N,c</sub> / A<sub>NGF</sub> [-]
</td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2">Flächenbezogener<br>Endenergiebedarf<br>mit Tabelle 144</td>
<td class="border border-gray-300 px-4 py-2">q<sub>rc,f</sub> =<br>q<sub>rc,0</sub> · q<sub>rc,b</sub> / 5 kWh/(m²·a)<br>[kWh/m²a]</td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr>
<td class="border border-gray-300 px-4 py-2">Ankühlfaktor<br>aus Tabelle 145</td>
<td class="border border-gray-300 px-4 py-2">f<sub>c,limit</sub> [-]</td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
<td class="border border-gray-300 px-4 py-2">Jährlicher<br>Endenergiebedarf</td>
<td class="border border-gray-300 px-4 py-2">Q<sub>rc,f</sub> =<br>q<sub>rc,f</sub> · A<sub>N,c</sub> · f<sub>c,limit</sub><br>[kWh/m²a]</td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
<tr>
<td colspan="3" class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2">Hilfsenergiebedarf<br>mit Tabelle 146</td>
<td class="border border-gray-300 px-4 py-2">W<sub>rc</sub> = W<sub>pu</sub> + W<sub>fan</sub><br>+ W<sub>rc,ce</sub> + W<sub>c</sub> [kWh/a]</td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr>
<td colspan="3" class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2">Primärenergiefaktor</td>
<td class="border border-gray-300 px-4 py-2">f<sub>p</sub> [-]</td>
<td class="border border-gray-300 px-4 py-2 bg-blue-100"></td>
</tr>
<tr>
<td colspan="3" class="border border-gray-300 px-4 py-2"></td>
<td class="border border-gray-300 px-4 py-2">Primärenergiebedarf</td>
<td class="border border-gray-300 px-4 py-2">Q<sub>P,rc</sub> =<br>(Q<sub>rc,f</sub> + W<sub>rc</sub>) · f<sub>p</sub> [kWh/a]</td>
<td class="border-2 border-gray-600 px-4 py-2"></td>
</tr>
</tbody>
</table>
</div>
</Layout>

View File

@@ -10,8 +10,8 @@ import TextboxCardTemplate from "#components/design/content/TextboxCardTemplate.
<Layout title="Energieausweis online erstellen - Online Energieausweis">
<h1>Ihr Partner für Energieausweise und GEG Nachweise</h1>
<p>Ob für <span>Vermietung, Verkauf, Modernisierung, Neubau</span> oder zur <span>Vorlage bei Ihrer Bank</span> -
wir erstellen den passenden <span>Energieausweis</span> oder <span>GEG-Nachweis</span> für Ihr Objekt.
<p>Ob für Vermietung, Verkauf, Modernisierung, Neubau oder zur Vorlage bei Ihrer Bank -
wir erstellen den passenden Energieausweis oder GEG-Nachweis für Ihr Objekt.
Mit <span>18 Jahren Erfahrung</span> sind wir der richtige Ansprechpartner
für Hauseigentümer, Bauherren, Makler und Verwalter.</p>
<br>

View File

@@ -0,0 +1,166 @@
---
import Layout from "#layouts/Layout.astro";
import WelcherAusweisWidget from "#widgets/WelcherAusweisWidget.svelte";
import TextboxCardTemplate from "#components/design/content/TextboxCardTemplate.svelte";
---
<Layout title="Energieausweis online erstellen - Welcher Energieausweis?">
<h1>Welcher Energieausweis ist der richtige?</h1>
<p>Falls Sie nicht wissen sollten welchen Energieausweis Sie benötigen, können Sie hier ganz einfach den Gebäudetyp
und Anlass bzw. Grund angeben. Als Ergebnis bekommen Sie den für Sie passenden Energieausweis angezeigt.</p>
<br>
<h2>Machen Sie hier den Online Check, welcher Energieausweis der richtige ist:</h2>
<WelcherAusweisWidget client:load/>
<br>
<h2>Verbrauchsausweis für Wohngebäude: Einfacher Energieausweis bei Vermietung und Verkauf</h2>
<p>
In den meisten Fällen können Sie bei der Vermietung oder dem Verkauf Ihrer Immobilie den
<span>verbrauchsorientierten Energieausweis</span> erstellen lassen. Dieser Ausweis basiert auf dem tatsächlichen Energieverbrauch des Gebäudes und erfordert als Berechnungsgrundlage die Heizenergieabrechnungen der letzten drei zusammenhängenden Jahre.
</p>
<div class="border-2 rounded-xl p-6">
<h3>Voraussetzungen für den Verbrauchsausweis</h3>
<ul class="list-disc list-inside mb-4">
<li>Es liegen die Heizenergieabrechnungen der letzten drei zusammenhängenden Jahre vor.</li>
<li>Es wurden in dieser Zeit keine grundlegenden Sanierungsmaßnahmen oder ein Heizungstausch durchgeführt.</li>
</ul>
<h3>Rechtliche Ausnahmen laut GEG</h3>
<p>
Das Gebäudeenergiegesetz (GEG, vormals EnEV) sieht jedoch eine wichtige Ausnahme vor:
<span>Ein Verbrauchsausweis ist nicht zulässig, wenn folgende Kriterien zutreffen:</span>
</p>
<ul class="list-disc list-inside mb-4">
<li>Das Gebäude wurde vor 1978 erbaut.</li>
<li>Es wurde seitdem nicht energetisch saniert.</li>
<li>Das Gebäude hat weniger als fünf Wohneinheiten.</li>
</ul>
<h3>Bedarfsausweis als Alternative</h3>
<p>
Falls Ihr Gebäude unter die oben genannten Ausnahmen fällt oder keine vollständigen Verbrauchsdaten vorliegen (z. B. bei Leerstand), ist ein
<span>Bedarfsausweis für Wohngebäude</span> erforderlich. Dieser Ausweis basiert auf einer detaillierten Berechnung des Energiebedarfs und berücksichtigt die energetischen Eigenschaften der Gebäudehülle sowie der Heizungsanlage.
</p>
</div>
<br>
<h2>
Bedarfsausweis für Wohngebäude bei Neubau, Modernisierung oder Erweiterung
</h2>
<p>
Das Gebäudeenergiegesetz (<span>GEG</span>) regelt die Anforderungen an Änderungen im Baubestand. In den §§46-51 des GEG sind die
Mindestanforderungen für <span>Änderungen, Erweiterungen und Ausbauten</span> festgelegt. Zusätzlich
wird beschrieben, wann ein Bedarfsausweis erstellt werden muss.
</p>
<div class="border-2 rounded-xl p-6">
<h3>Wann ist kein Bedarfsausweis erforderlich?</h3>
<ul class="list-disc list-inside mb-4">
<li>Nur einzelne Bauteile wie Dach, Außenwand oder Fenster werden erneuert.</li>
<li>Die Erweiterung der Wohnfläche beträgt weniger als 50 m².</li>
<li>Es reicht ein <span>Bauteilnachweis</span>, sofern die EnEV-Anforderungen erfüllt werden.</li>
</ul>
<h3>Wann ist ein Bedarfsausweis erforderlich?</h3>
<ul class="list-disc list-inside mb-4">
<li>Bei einem <span>Heizungstausch</span> muss immer ein Bedarfsausweis erstellt werden.</li>
<li>Wenn der Bauteilnachweis die EnEV-Anforderungen nicht erfüllt, ist eine komplette Bedarfsberechnung erforderlich.</li>
<li>Bei <span>genehmigungspflichtigen Neubaumaßnahmen</span> ist ein GEG-Nachweis (früher Wärmeschutznachweis) vor Baubeginn erforderlich.</li>
</ul>
<h3>GEG-Anforderungen bei Neubau</h3>
<p>
In den §§15-19 des GEG sind die Anforderungen für Wohngebäude festgelegt. Der GEG-Nachweis dient als Grundlage, aus der später nach der Fertigstellung der <span class="font-semibold">Bedarfsausweis</span> erstellt werden kann.
</p>
</div>
<br>
<TextboxCardTemplate
TitelName="Folgende Dokumente und Informationen werden für den Bedarfsausweis benötigt:"
BulletPoints={[
["Grundriss- und Ansichtspläne sowie Baubeschreibung.", true],
["Die wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,Kellerdecke bzw. Boden werden aus den Plänen ermittelt.", true],
["Auch das Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und die verschiedenen Nutzungszonen werden aus den Plänen erhoben.", false],
["Die verwendete Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper, Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der Baubeschreibung oder aus den Angaben des Bauherren herangezogen.", false],
]}
>
</TextboxCardTemplate>
<br>
<p>Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
können Sie den Ausweis bei uns auch online erstellen lassen. Die Eingabedaten
werden dann nach einem vereinfachten Verfahren erhoben. </p>
<br>
<h2>Verbrauchsausweis für Gewerbegebäude bei Vermietung oder Verkauf</h2>
<p>
Bei Vermietung oder Verkauf Ihrer Gewerbeimmobilie können Sie den einfacheren
<span>Energieausweis</span> erstellen lassen.
</p>
<div class="border-2 rounded-xl p-6">
<h3>Der Verbrauchsausweis für Nichtwohngebäude benötigt als Grundlage:</h3>
<ul class="list-disc list-inside mb-4">
<li>Stromverbrauch und Heizenergieverbrauch des Gebäudes</li>
<li>3 zusammenhängende Jahre der Heizenergie- und Stromabrechnung</li>
</ul>
<p class=" mb-4">
Voraussetzung ist, dass die Verbräuche eindeutig zuordenbar sind und während
dieses Zeitraums keine grundlegenden Sanierungsmaßnahmen oder ein
<span>Heizungsaustausch</span> durchgeführt wurden.
</p>
<h3>
Wann ist ein Bedarfsausweis erforderlich?
</h3>
<p>
Wenn die oben genannten Voraussetzungen nicht erfüllt sind, zum Beispiel bei:
</p>
<ul class="list-disc list-inside mb-4">
<li>unvollständigen Verbrauchsabrechnungen (z. B. bei Leerstand)</li>
<li>nicht eindeutig zuordenbaren Verbräuchen</li>
</ul>
<p>
Dann kann alternativ ein <span>Bedarfsausweis für Nichtwohngebäude (Gewerbe)</span>
erstellt werden.
</p>
</div>
<br>
<h2>Bedarfsausweis für Nichtwohngebäude bei Neubau, Modernisierung oder Erweiterung</h2>
<p>
In den §§46-51 des <span>GEG</span> sind die Mindestanforderungen für
<span>Änderungen, Erweiterungen und Ausbauten</span> festgelegt. Außerdem wird beschrieben, wann ein Bedarfsausweis erforderlich ist.
</p>
<div class="border-2 rounded-xl p-6">
<h3>Wann ist kein Bedarfsausweis erforderlich?</h3>
<ul class="list-disc list-inside mb-4">
<li>Nur einzelne Bauteile wie Dach, Außenwand oder Fenster werden erneuert.</li>
<li>Die Erweiterung der Fläche beträgt weniger als 50 m².</li>
<li>Es reicht ein <span>Bauteilnachweis</span>, sofern die EnEV-Anforderungen erfüllt werden.</li>
</ul>
<h3>Wann ist ein Bedarfsausweis erforderlich?</h3>
<ul class="list-disc list-inside mb-4">
<li>Bei einem <span>Heizungstausch</span> ist immer ein Bedarfsausweis erforderlich.</li>
<li>Wenn der Bauteilnachweis die GEG-Anforderungen nicht erfüllt.</li>
</ul>
<h3>GEG-Nachweis bei Neubauten</h3>
<p>
Bei Neubauten ist ein <span>GEG-Nachweis</span> (früher Wärmeschutznachweis) vor Baubeginn vorgeschrieben. Aus der GEG-Berechnung wird nach Fertigstellung der
<span>Bedarfsausweis für Nichtwohngebäude (Gewerbe)</span> erstellt.
</p>
<p>
In den §§18-19 des GEG sind die spezifischen Anforderungen für Nichtwohngebäude geregelt, die eingehalten werden müssen.
</p>
</div>
<br>
<TextboxCardTemplate
TitelName="Folgende Dokumente und Informationen werden für den Bedarfsausweis Gewerbe benötigt:"
BulletPoints={[
["Grundriss- und Ansichtspläne sowie Baubeschreibung.", true],
["Die wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,Kellerdecke bzw. Boden werden aus den Plänen ermittelt.", true],
["Auch das Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und die verschiedenen Nutzungszonen werden aus den Plänen erhoben.", false],
["Die verwendete Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper,Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der Baubeschreibung oder aus den Angaben des Bauherren herangezogen.", false],
["Anlagentechnik zu Kühlung und Lüftung der entsprechenden Nutzungszonen müssen definiert sein.", true],
["Die verwendete Beleuchtung der verschiedenen Nutzungszonen wird ebenfalls herangezogen", true],
]}
>
</TextboxCardTemplate>
<br>
<p>Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
können Sie den Ausweis bei uns auch online erstellen lassen. Die Eingabedaten
werden dann nach einem vereinfachten Verfahren erhoben.</p>
</Layout>