diff --git a/src/components/Tabellen/A12NutzenergiebedarfHeizung.svelte b/src/components/Tabellen/A12NutzenergiebedarfHeizung.svelte
new file mode 100644
index 00000000..619ee702
--- /dev/null
+++ b/src/components/Tabellen/A12NutzenergiebedarfHeizung.svelte
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+ Tabelle A.12 — Heizung – Berechnung des Nutzenergiebedarfs
+
+
+
+
+
+ Heizbedarf des Wohngebäudes
+
+
+
+
+ min. Außen- temperatur θe,min [°C]
+ Innen- temperatur θi,h,soll [°C]
+ maximaler Wärmestrom Q̇ges [W] aus Tabelle A.6 (1)
+
+
+
+
+ -12
+ 20
+
+
+
+
+
+ Tage im Monat dmth [d]
+ Bilanzinnen- temperatur θi,h [°C] aus Tabelle 8 (EFH) bzw. 10 (MFH)
+ mittlere Außen- temp. θe,m [°C]
+ Mittlere Belastung βe,m aus Tabelle 9 bzw. 11 (2)
+ Ph,sink = Q̇ges · (θi,h - θe,min ) / (θi,h,soll - θe,min ) · βe,m [W] (3)
+ Ph,source = Pi,ges aus Tabelle A.11 (4)
+ γm = Ph,source / Ph,sink (5) = (4) / (3)
+ ηm = f(γ) aus Tabelle 18 (6)
+ (7) = max[1 - (5) · (6);0]
+ βm (8) = (2) · (7)
+ th,m [h] (9)
+ Qh,b [kWh] (10)
+
+
+
+
+ 31
+
+ 1,0
+
+ {Math.round(interpolatedValuesZeitkonstante90[0].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 28
+
+ 1,9
+
+ {Math.round(interpolatedValuesZeitkonstante90[1].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 4,7
+
+ {Math.round(interpolatedValuesZeitkonstante90[2].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+ 9,2
+
+ {Math.round(interpolatedValuesZeitkonstante90[3].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 14,1
+
+ {Math.round(interpolatedValuesZeitkonstante90[4].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+ 16,7
+
+ {Math.round(interpolatedValuesZeitkonstante90[5].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 19,0
+
+ {Math.round(interpolatedValuesZeitkonstante90[6].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 18,6
+
+ {Math.round(interpolatedValuesZeitkonstante90[7].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+ 14,3
+
+ {Math.round(interpolatedValuesZeitkonstante90[8].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 9,4
+
+ {Math.round(interpolatedValuesZeitkonstante90[9].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+ 4,1
+
+ {Math.round(interpolatedValuesZeitkonstante90[10].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ 31
+
+ 0,9
+
+ {Math.round(interpolatedValuesZeitkonstante90[11].interpolatedValue*1000)/1000}
+
+
+
+
+
+
+
+
+
+
+
+ Spalte 9: (8) > 0,05 → (9) = dmth · 24
+ (8) ≤ 0,05 → (9) = (8) / 0,05 · dmth · 24
+ Summe
+
+
+
+
+ Spalte 10: (10) = (3) · (7) · (9) / 1000
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Tabellen/A9Trinkwassererwaermung.svelte b/src/components/Tabellen/A9Trinkwassererwaermung.svelte
index 17a2e90a..57696a0b 100644
--- a/src/components/Tabellen/A9Trinkwassererwaermung.svelte
+++ b/src/components/Tabellen/A9Trinkwassererwaermung.svelte
@@ -32,7 +32,7 @@
-
+
{flaechenBezogenerWaermebedarf}
@@ -48,62 +48,62 @@
Januar
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
Februar
28
- {trinkwasserWaermebedarf / 365 * 28}
+ {Math.round(trinkwasserWaermebedarf / 365 * 28)}
März
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
April
30
- {trinkwasserWaermebedarf / 365 * 30}
+ {Math.round(trinkwasserWaermebedarf / 365 * 30)}
Mai
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
Juni
30
- {trinkwasserWaermebedarf / 365 * 30}
+ {Math.round(trinkwasserWaermebedarf / 365 * 30)}
Juli
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
August
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
September
30
- {trinkwasserWaermebedarf / 365 * 30}
+ {Math.round(trinkwasserWaermebedarf / 365 * 30)}
Oktober
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
November
30
- {trinkwasserWaermebedarf / 365 * 30}
+ {Math.round(trinkwasserWaermebedarf / 365 * 30)}
Dezember
31
- {trinkwasserWaermebedarf / 365 * 31}
+ {Math.round(trinkwasserWaermebedarf / 365 * 31)}
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungMonatlicherBelastungsgradT9.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungMonatlicherBelastungsgradT9.ts
new file mode 100644
index 00000000..ad48a9e4
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungMonatlicherBelastungsgradT9.ts
@@ -0,0 +1,101 @@
+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[];
+};
+
+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] }
+];
+
+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.");
+}
+
+// Example: Interpolate for Zeitkonstante zwischen 90-130
+
+const interpolatedValuesZeitkonstante90 = datasetZeitkonstante90.map(data => ({
+ month: data.month,
+ interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLastTabelle)
+}));
+
+// Example: Interpolate for Zeitkonstante >= 130
+
+// const interpolatedValuesZeitkonstante130 = datasetZeitkonstante130.map(data => ({
+// month: data.month,
+// interpolatedValue: interpolate(heizlastGebaeude, data.values, HeizLast)
+// }));
+
+// console.log(interpolatedValuesZeitkonstante90);
+// console.log(interpolatedValuesZeitkonstante130);
+
+return {
+ interpolatedValuesZeitkonstante90
+}
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungTrinkwarmwasser.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungTrinkwarmwasser.ts
index ee600461..e007ded1 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungTrinkwarmwasser.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/BerechnungTrinkwarmwasser.ts
@@ -10,9 +10,10 @@ import { linearInterpolation } from "js-interpolate"
* @param {BedarfsausweisWohnenClient} ausweis
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
*/
+
export function berechnungTrinkwarmwasserWaermebedarf(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
// A_NGF
- const bezugsflaeche = gebaeude_aufnahme.flaeche ?? 0;
+ const bezugsflaeche = gebaeude_aufnahme.nutzflaeche ?? 0;
const einheiten = gebaeude_aufnahme.einheiten ?? 1;
@@ -24,9 +25,7 @@ export function berechnungTrinkwarmwasserWaermebedarf(ausweis: BedarfsausweisWoh
if (flaecheProEinheit < 10) {
flaechenBezogenerWaermebedarf = 16.5
- } else if (flaecheProEinheit >= 160) {
- flaechenBezogenerWaermebedarf = 8.5
- } else {
+ } else if (flaecheProEinheit < 160) {
flaechenBezogenerWaermebedarf = linearInterpolation([{
x: 10,
y: 16
@@ -34,6 +33,9 @@ export function berechnungTrinkwarmwasserWaermebedarf(ausweis: BedarfsausweisWoh
x: 150,
y: 9
}], flaecheProEinheit)
+
+ } else {
+ flaechenBezogenerWaermebedarf = 8.5
}
// Q_w,b
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts
deleted file mode 100644
index 986647d8..00000000
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts
+++ /dev/null
@@ -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);
\ No newline at end of file
diff --git a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
index 8b9bc038..69081082 100644
--- a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
+++ b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
@@ -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";
@@ -170,6 +171,15 @@
/>
+
+
+
+
+
+
-
-
-
-
-
- Tabelle A.12 — Heizung – Berechnung des Nutzenergiebedarfs
-
-
-
-
- Heizbedarf des Wohngebäudes
-
-
- min. Außen- temperatur θe,min [°C]
- Innen- temperatur θi,h,soll [°C]
- maximaler Wärmestrom Q̇ges [W] aus Tabelle A.6 (1)
-
-
- -12
- 20
-
-
-
-
-
- Tage im Monat dmth [d]
- Bilanzinnen- temperatur θi,h [°C] aus Tabelle 8 (EFH) bzw. 10 (MFH)
- mittlere Außen- temp. θe,m [°C]
- Mittlere Belastung βe,m aus Tabelle 9 bzw. 11 (2)
- Ph,sink = Q̇ges · (θi,h - θe,min ) / (θi,h,soll - θe,min ) · βe,m [W] (3)
- Ph,source = Pi,ges aus Tabelle A.11 (4)
- γm = Ph,source / Ph,sink (5) = (4) / (3)
- ηm = f(γ) aus Tabelle 18 (6)
- (7) = max[1 - (5) · (6);0]
- βm (8) = (2) · (7)
- th,m [h] (9)
- Qh,b [kWh] (10)
-
-
-
-
- 31
-
- 1,0
-
-
-
-
-
-
-
-
-
-
-
- 28
-
- 1,9
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 4,7
-
-
-
-
-
-
-
-
-
-
-
- 30
-
- 9,2
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 14,1
-
-
-
-
-
-
-
-
-
-
-
- 30
-
- 16,7
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 19,0
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 18,6
-
-
-
-
-
-
-
-
-
-
-
- 30
-
- 14,3
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 9,4
-
-
-
-
-
-
-
-
-
-
-
- 30
-
- 4,1
-
-
-
-
-
-
-
-
-
-
-
- 31
-
- 0,9
-
-
-
-
-
-
-
-
-
-
-
- Spalte 9: (8) > 0,05 → (9) = dmth · 24
- (8) ≤ 0,05 → (9) = (8) / 0,05 · dmth · 24
- Summe
-
-
-
-
- Spalte 10: (10) = (3) · (7) · (9) / 1000
-
-
-
-
-
-
-