diff --git a/src/components/PlzSuche.svelte b/src/components/PlzSuche.svelte
index c719f579..bbead795 100644
--- a/src/components/PlzSuche.svelte
+++ b/src/components/PlzSuche.svelte
@@ -16,7 +16,7 @@
}
try {
- const result = await api.postleitzahlen.GET.fetch({ plz: zip });
+ const result = await api.postleitzahlen.GET.fetch({ plz: zip, limit: 10 });
if (result.length > 0) {
zipCodes = result;
@@ -45,7 +45,7 @@
-
{
+
{
hideZipDropdown = true;
}}>
@@ -65,13 +65,19 @@
maxlength="5"
/>
-
+
{#each zipCodes as zipCode}
-
{
+ {
zip = zipCode.plz;
city = zipCode.stadt;
hideZipDropdown = true;
- }}>{zipCode.plz}, {zipCode.stadt}
+ }}>{zipCode.plz}, {zipCode.stadt}
{/each}
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/src/components/Tabellen/A14AufwandszahlenMittlereBelastung.svelte b/src/components/Tabellen/A14AufwandszahlenMittlereBelastung.svelte
index ad8ac837..aa980041 100644
--- a/src/components/Tabellen/A14AufwandszahlenMittlereBelastung.svelte
+++ b/src/components/Tabellen/A14AufwandszahlenMittlereBelastung.svelte
@@ -1,5 +1,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {title || 'Energieausweis online erstellen - Online Energieausweis'}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layouts/AusweisLayoutDatenImmowelt2.astro b/src/layouts/AusweisLayoutDatenImmowelt2.astro
new file mode 100644
index 00000000..f0ff2f32
--- /dev/null
+++ b/src/layouts/AusweisLayoutDatenImmowelt2.astro
@@ -0,0 +1,156 @@
+---
+import "../style/global.css";
+import "../style/formular.css";
+import "../../svelte-dialogs.config"
+import Header from "#components/design/header/AusweisHeaderImmowelt2.astro";
+import Footer from "#components/design/footer/Footer.astro";
+import { NotificationWrapper } from "@ibcornelsen/ui";
+
+export interface Props {
+ title: string;
+}
+
+const { title } = Astro.props;
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {title || 'Energieausweis online erstellen - Online Energieausweis'}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layouts/UserLayout.astro b/src/layouts/UserLayout.astro
index f030e361..f4eb6b98 100644
--- a/src/layouts/UserLayout.astro
+++ b/src/layouts/UserLayout.astro
@@ -5,7 +5,9 @@ import "../../svelte-dialogs.config"
import "svelte-ripple-action/ripple.css"
import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"
import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
-import { createCaller } from "#lib/caller";
+import { createCaller } from "src/astro-typesafe-api-caller";
+import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
+import { BenutzerClient } from "#components/Ausweis/types";
const valid = validateAccessTokenServer(Astro)
@@ -16,7 +18,11 @@ if (!valid) {
const caller = createCaller(Astro)
-const benutzer = await caller.v1.benutzer.self()
+const benutzer = (await caller.user.self.GET.fetch(undefined, {
+ headers: {
+ Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
+ }
+})) || {} as BenutzerClient;
export interface Props {
title: string;
@@ -101,7 +107,7 @@ let lightTheme = Astro.cookies.get("theme")?.value === "light";
-
+
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.ts
index 589df8eb..e5499f0a 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.ts
@@ -1,10 +1,10 @@
-import { funktionAusnutzungsgrad } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgrad.js";
-import { funktionWaermesenken } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenken.js";
+import { funktionAusnutzungsgradT18 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgradT18.js";
+import { funktionWaermesenkenA8A12 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.js";
import { A11BerechnungWaermequellenZusammenstellung } from "#lib/Berechnungen/BedarfsausweisWohnen/A11BerechnungWaermequellenZusammenstellung.js";
export function A12BerechnungNutzenergiebedarfHeizung() {
-const result = funktionWaermesenken();
+const result = funktionWaermesenkenA8A12();
const belastungsgrade = result.belastungsgrade;
const bilanzInnenTemperaturen = result.bilanzInnenTemperaturen;
const waermeSenken = result.waermeSenken;
@@ -107,18 +107,18 @@ let monatlicheBelastungDezember = 0;
waermequellensenkenverhaeltnisNovember = waermeQuellen.November / waermeSenken.November;
waermequellensenkenverhaeltnisDezember = waermeQuellen.Dezember / waermeSenken.Dezember;
- ausnutzungsgradJanuar = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisJanuar, ZeitKonstante, "alleMonate");
- ausnutzungsgradFebruar = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisFebruar, ZeitKonstante, "alleMonate");
- ausnutzungsgradMärz = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisMärz, ZeitKonstante, "alleMonate");
- ausnutzungsgradApril = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisApril, ZeitKonstante, "alleMonate");
- ausnutzungsgradMai = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisMai, ZeitKonstante, "alleMonate");
- ausnutzungsgradJuni = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisJuni, ZeitKonstante, "alleMonate");
- ausnutzungsgradJuli = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisJuli, ZeitKonstante, "alleMonate");
- ausnutzungsgradAugust = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisAugust, ZeitKonstante, "alleMonate");
- ausnutzungsgradSeptember = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisSeptember, ZeitKonstante, "alleMonate");
- ausnutzungsgradOktober = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisOktober, ZeitKonstante, "alleMonate");
- ausnutzungsgradNovember = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisNovember, ZeitKonstante, "alleMonate");
- ausnutzungsgradDezember = funktionAusnutzungsgrad(waermequellensenkenverhaeltnisDezember, ZeitKonstante, "alleMonate");
+ ausnutzungsgradJanuar = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJanuar);
+ ausnutzungsgradFebruar = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisFebruar);
+ ausnutzungsgradMärz = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisMärz);
+ ausnutzungsgradApril = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisApril);
+ ausnutzungsgradMai = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisMai);
+ ausnutzungsgradJuni = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJuni);
+ ausnutzungsgradJuli = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJuli);
+ ausnutzungsgradAugust = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisAugust);
+ ausnutzungsgradSeptember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisSeptember);
+ ausnutzungsgradOktober = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisOktober);
+ ausnutzungsgradNovember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisNovember);
+ ausnutzungsgradDezember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisDezember);
faktorBelastungJanuar = Math.max(1 - (waermequellensenkenverhaeltnisJanuar * ausnutzungsgradJanuar), 0);
faktorBelastungFebruar = Math.max(1 - (waermequellensenkenverhaeltnisFebruar * ausnutzungsgradFebruar), 0);
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/A14BerechnungAufwandszahlenMittlereBelastung.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/A14BerechnungAufwandszahlenMittlereBelastung.ts
index b724be19..729c7a2b 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/A14BerechnungAufwandszahlenMittlereBelastung.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/A14BerechnungAufwandszahlenMittlereBelastung.ts
@@ -1,101 +1,162 @@
import { A6BerechnungWaermeTransferMaxStroemeLueftungGesamt } from "#lib/Berechnungen/BedarfsausweisWohnen/A6BerechnungWaermeTransferMaxStroemeLueftungGesamt.js";
+import { A9BerechnungNutzenergiebedarfTrinkwarmwasser } from "#lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.js";
import { A12BerechnungNutzenergiebedarfHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.js";
+import { A13BerechnungRechnerischeLaufzeitHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A13BerechnungRechnerischeLaufzeitHeizung.js";
+import { funktionKorrekturfaktorMittlereBelastungT32 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorMittlereBelastungT32.js";
+import { funktionNennleistungWaermeerzeugerWarmwasserA14 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionNennleistungWaermeerzeugerWarmwasserA14.js";
+import { funktionAufwandszahlErzeugungHeizungT77 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungT77.js";
+
export function A14BerechnungAufwandszahlenMittlereBelastung() {
const result = A12BerechnungNutzenergiebedarfHeizung();
- const heizstunden = {
- Januar: result.heizstundenJanuar,
- Februar: result.heizstundenFebruar,
- Maerz: result.heizstundenMärz,
- April: result.heizstundenApril,
- Mai: result.heizstundenMai,
- Juni: result.heizstundenJuni,
- Juli: result.heizstundenJuli,
- August: result.heizstundenAugust,
- September: result.heizstundenSeptember,
- Oktober: result.heizstundenOktober,
- November: result.heizstundenNovember,
- Dezember: result.heizstundenDezember
- };
- const heizstundenGesamt = Object.values(heizstunden).reduce((acc, value) => acc + value, 0);
+ const gesamtHeizstunden = result.gesamtHeizstunden;
const gesamtNutzenergieHeizung = result.gesamtNutzenergieHeizung;
const resultMaximaleHeizlast = A6BerechnungWaermeTransferMaxStroemeLueftungGesamt();
const maximaleHeizlast = resultMaximaleHeizlast.maximaleHeizlast;
- // Planungswerte aus Eingabe
+ const resultRechnerischeLaufzeitHeizung = A13BerechnungRechnerischeLaufzeitHeizung();
+ const rechnerischeLaufzeitGesamt = resultRechnerischeLaufzeitHeizung.rechnerischeLaufzeitGesamt;
+
+ const resultNutzenergiebedarfTrinkwarmwasser = A9BerechnungNutzenergiebedarfTrinkwarmwasser();
+ const flaechenBezogenerWaermebedarf = resultNutzenergiebedarfTrinkwarmwasser.flaechenBezogenerWaermebedarf;
+
+ // Planungswerte aus Eingabe, Tabellen 20, 21, 22, C12, 30, 31, 41, 49, 50, 51, 52, 53
+
+ let NettoGrundflaeche = 154.2;
+ let anlass = "Neubau";
+ let ZuschlagsFaktorErzeugung = 0;
+
const PlanungswerteUebergabeVerteilungHeizung = [
{
- Bezeichnung: "Übergabe Verteilung 1 - Heizung",
- VersorgteFlaeche: 0.5,
+ Anlage: "Erzeuger 1 - zentral",
+ VersorgteFlaeche: 0.7,
UebergabeSystem: "Heizkörper",
rohrsystem: "Zwei-Rohr-System",
rohrnetztyp: "I (Etagenringtyp)",
anzahlHeizflaechen: "bis 10",
hydraulischerAbgleich: "Abgleich statisch je Heizkörper/Heizfläche und Gruppenabgleich statisch (z.B. mit Strangregulierventil)",
raumtemperaturRegelung: "P-Regler",
- ueberTemperatur: "30 K (55°C/45°C)",
+ ueberTemperatur: "55°C/45°C",
waermeverlustAußenbauteile: "Radiatorposition Außenwand",
intermittierenderBetrieb: "-",
einzelraumregelSysteme: "-",
+ verteilung: "Verteilleitungen im beheizten Bereich",
+ PufferSpeicherHeizung: 0,
+ ehs0: 1,
ehce0: 1.042,
Δehce1: 0.015,
Δehce2: 0.009,
Δehce3: 0,
Δehce5: 0,
Δehcehydr: 0.018,
- fhydr: 1.02
+ fhydr: 1.02,
+ ehd0: 1.049
},
{
- Bezeichnung: "Übergabe Verteilung 2 - Heizung",
- VersorgteFlaeche: 0.5,
- UebergabeSystem: "Heizkörper",
- rohrsystem: "Zwei-Rohr-System",
- rohrnetztyp: "I (Etagenringtyp)",
- anzahlHeizflaechen: "bis 10",
- hydraulischerAbgleich: "Abgleich statisch je Heizkörper/Heizfläche und Gruppenabgleich statisch (z.B. mit Strangregulierventil)",
- raumtemperaturRegelung: "P-Regler",
- ueberTemperatur: "30 K (55°C/45°C)",
- waermeverlustAußenbauteile: "Radiatorposition Außenwand",
+ Anlage: "Erzeuger 1 - zentral",
+ VersorgteFlaeche: 0.2,
+ UebergabeSystem: "Fußbodenheizung Nasssystem",
+ rohrnetztyp: "IIb (Etagenverteilertyp Fußbodenheizung)",
+ raumtemperaturRegelung: "ungeregelt, mit zentraler Vorlauftemperaturregelung",
+ ueberTemperatur: "35°C/28°C",
+ waermeverlustAngrenzendeBauteile: "integrierte Heizfläche mit Mindestdämmung nach DIN EN 1264 (alle Teile)",
intermittierenderBetrieb: "-",
einzelraumregelSysteme: "-",
+ verteilung: "Verteilleitungen im beheizten Bereich",
+ PufferSpeicherHeizung: 0,
+ ehs0: 1,
+ ehce0: 1.149,
+ Δehce1: 0.021,
+ Δehce2: 0.015,
+ Δehce3: 0,
+ Δehce5: 0,
+ Δehcehydr: 0,
+ fhydr: 1,
+ ehd0: 1.004
+
+ },
+ {
+ Anlage: "Erzeuger 2 - dezentral",
+ VersorgteFlaeche: 0.1,
+ Heizungsart: "Elektro-Direktheizung, PI-Regler (mit Optimierung)",
+ Bereich: "Außenwandbereich",
+ intermittierenderBetrieb: "Nein",
+ ehs0: 1,
ehce0: 1.042,
- Δehce1: 0.015,
- Δehce2: 0.009,
- Δehce3: 0,
- Δehce5: 0,
- Δehcehydr: 0.018,
- fhydr: 1.02
+ Δehce1: 0,
+ Δehce2: 0,
+ Δehce3: 0,
+ Δehce5: 0,
+ Δehcehydr: 0,
+ fhydr: 1,
+ ehd0: 1
}
];
-const ErgebnisseAufwandsZahlenBelastungHeizung = PlanungswerteUebergabeVerteilungHeizung.map(system => {
-const mittlereBelastungUebergabeHeizung = (gesamtNutzenergieHeizung / (heizstundenGesamt * maximaleHeizlast)) * 1000 * system.VersorgteFlaeche;
+ const resultfunktionNennleistungWaermeerzeugerWarmwasserA14 = funktionNennleistungWaermeerzeugerWarmwasserA14(NettoGrundflaeche, flaechenBezogenerWaermebedarf);
+ const NennleistungWaermeerzeugerWarmwasser = resultfunktionNennleistungWaermeerzeugerWarmwasserA14;
+
+
+ if (anlass === "Neubau") {
+ ZuschlagsFaktorErzeugung = 1.1;
+ }
+ else {
+ ZuschlagsFaktorErzeugung = 1.5;
+ }
+
+ const NennleistungWaermeerzeugerHeizung = resultMaximaleHeizlast.maximaleHeizlast / 1000;
+ const NennleistungWaermeerzeuger = ZuschlagsFaktorErzeugung * Math.max(NennleistungWaermeerzeugerWarmwasser, NennleistungWaermeerzeugerHeizung);
+
+const ErgebnisseAufwandsZahlenBelastungHeizung = PlanungswerteUebergabeVerteilungHeizung.map((system: any) => {
+const mittlereBelastungUebergabeHeizung = (gesamtNutzenergieHeizung / (gesamtHeizstunden * maximaleHeizlast)) * 1000 * system.VersorgteFlaeche;
const AufwandsZahlUebergabeHeizung = system.ehce0 + system.Δehce1 + system.Δehce2 + system.Δehce3 + system.Δehce5 + system.Δehcehydr;
const mittlereBelastungVerteilungHeizung = mittlereBelastungUebergabeHeizung * AufwandsZahlUebergabeHeizung * system.fhydr;
-
+const flaechenbezogeneLeistungUebergabeHeizung = (maximaleHeizlast / NettoGrundflaeche) * AufwandsZahlUebergabeHeizung;
+
+const KorrekturfaktorMittlereBelastung = funktionKorrekturfaktorMittlereBelastungT32(system.verteilung, system.rohrnetztyp, system.ueberTemperatur, mittlereBelastungVerteilungHeizung) || 0;
+const AufwandsZahlVerteilungHeizungKorrektur = system.ehd0 * KorrekturfaktorMittlereBelastung;
+const AufwandsZahlVerteilungHeizungKorrekturZwei = 1 + (AufwandsZahlVerteilungHeizungKorrektur - 1) * (50/flaechenbezogeneLeistungUebergabeHeizung);
+const AufwandsZahlVerteilungHeizung = (AufwandsZahlVerteilungHeizungKorrekturZwei - 1) * (8760/rechnerischeLaufzeitGesamt) + 1;
+const flaechenbezogeneLeistungVerteilungHeizung = flaechenbezogeneLeistungUebergabeHeizung * AufwandsZahlVerteilungHeizung;
+
+const mittlereBelastungSpeicherungHeizung = mittlereBelastungVerteilungHeizung * AufwandsZahlVerteilungHeizung;
+const AufwandsZahlSpeicherungHeizung = system.ehs0;
+const flaechenbezogeneLeistungSpeicherungHeizung = flaechenbezogeneLeistungVerteilungHeizung * AufwandsZahlSpeicherungHeizung;
+
+const mittlereBelastungErzaegungHeizung = mittlereBelastungSpeicherungHeizung * AufwandsZahlSpeicherungHeizung;
+
+const AufwandsZahlErzeugungHeizung = funktionAufwandszahlErzeugungHeizungT77(NennleistungWaermeerzeuger, mittlereBelastungErzaegungHeizung);
+
return {
- Bezeichnung: system.Bezeichnung,
+ Bezeichnung: system.Anlage + " - " + system.VersorgteFlaeche * 100 + " % versorgte Fläche - " + (system.UebergabeSystem ? system.UebergabeSystem : system.Heizungsart),
mittlereBelastungUebergabeHeizung: mittlereBelastungUebergabeHeizung,
VersorgteFlaeche: system.VersorgteFlaeche,
AufwandsZahlUebergabeHeizung: AufwandsZahlUebergabeHeizung,
- mittlereBelastungVerteilungHeizung: mittlereBelastungVerteilungHeizung
-
-
-
+ mittlereBelastungVerteilungHeizung: mittlereBelastungVerteilungHeizung,
+ flaechenbezogeneLeistungUebergabeHeizung: flaechenbezogeneLeistungUebergabeHeizung,
+ AufwandsZahlVerteilungHeizung: AufwandsZahlVerteilungHeizung,
+ flaechenbezogeneLeistungVerteilungHeizung: flaechenbezogeneLeistungVerteilungHeizung,
+ mittlereBelastungSpeicherungHeizung: mittlereBelastungSpeicherungHeizung,
+ AufwandsZahlSpeicherungHeizung: AufwandsZahlSpeicherungHeizung,
+ flaechenbezogeneLeistungSpeicherungHeizung: flaechenbezogeneLeistungSpeicherungHeizung,
+ mittlereBelastungErzaegungHeizung: mittlereBelastungErzaegungHeizung,
+ AufwandsZahlErzeugungHeizung: AufwandsZahlErzeugungHeizung
};
});
+
return {
- heizstundenGesamt,
+ gesamtHeizstunden,
maximaleHeizlast,
gesamtNutzenergieHeizung,
- ErgebnisseAufwandsZahlenBelastungHeizung
+ ErgebnisseAufwandsZahlenBelastungHeizung,
+ NennleistungWaermeerzeuger
}
}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.ts
index b4fc4b88..233a98bd 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.ts
@@ -1,5 +1,5 @@
import FensterImage from "#components/Ausweis/FensterImage.svelte";
-import { funktionSolareBestrahlungsEnergie } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergie.js";
+import { funktionSolareBestrahlungsEnergieT17 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergieT17.js";
export function A7A2BerechnungWaermequellenSolareEinstrahlung() {
@@ -85,7 +85,7 @@ export function A7A2BerechnungWaermequellenSolareEinstrahlung() {
// Berechnung der solaren Wärmequellen pro Fenster und Monat
PlanungswerteBauteil.forEach(item => {
- const MonatsWerte = funktionSolareBestrahlungsEnergie(item.Neigung, item.Orientierung);
+ const MonatsWerte = funktionSolareBestrahlungsEnergieT17(item.Neigung, item.Orientierung);
if (MonatsWerte) {
const SolareWaermequelleJanuar = MonatsWerte.jan * item.Flaeche * item.RahmenAnteil * item.GesamtEnergieDurchlassGrad * item.StrahlungsEinfluss * item.Verschattung;
const MonatsWerteJanuar = MonatsWerte.jan;
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/A8BerechnungWaermequellenAusAnlagentechnikHeizung.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/A8BerechnungWaermequellenAusAnlagentechnikHeizung.ts
index 74fe218d..8bb40e28 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/A8BerechnungWaermequellenAusAnlagentechnikHeizung.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/A8BerechnungWaermequellenAusAnlagentechnikHeizung.ts
@@ -1,10 +1,10 @@
-import { funktionWaermesenken } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenken.js";
+import { funktionWaermesenkenA8A12 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.js";
import { A7A2BerechnungWaermequellenSolareEinstrahlung } from "#lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.js";
-import { funktionInterneWaermequellen } from "./funktionInterneWaermequellen.js";
+import { funktionInterneWaermequellenA8 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellenA8.js";
export function A8BerechnungWaermequellenAusAnlagentechnikHeizung() {
-const result = funktionWaermesenken();
+const result = funktionWaermesenkenA8A12();
const waermeSenken = result.waermeSenken;
const belastungsgrade = result.belastungsgrade;
@@ -22,7 +22,7 @@ const einstrahlung = A7A2BerechnungWaermequellenSolareEinstrahlung();
const summeErgebnisseNovember = einstrahlung.summeErgebnisseNovember;
const summeErgebnisseDezember = einstrahlung.summeErgebnisseDezember;
-const resultInterneWaermeQuellen = funktionInterneWaermequellen();
+const resultInterneWaermeQuellen = funktionInterneWaermequellenA8();
const interneWaermeQuellenProMonat = resultInterneWaermeQuellen.interneWaermeQuellenProMonat;
let TageMonat = {
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.ts
index 6c14971e..dbea1f6e 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.ts
@@ -1,16 +1,10 @@
-import { BedarfsausweisWohnenClient, AufnahmeClient } 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 {AufnahmeClient} gebaeude_aufnahme
*/
-export function A9BerechnungNutzenergiebedarfTrinkwarmwasser(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: AufnahmeClient) {
+export function A9BerechnungNutzenergiebedarfTrinkwarmwasser() {
// A_NGF aus Eingabe
const bezugsflaeche = 154.2;
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/datasetKorrekturfaktorVerteilungT32.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/datasetKorrekturfaktorVerteilungT32.ts
new file mode 100644
index 00000000..607542fc
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/datasetKorrekturfaktorVerteilungT32.ts
@@ -0,0 +1,1682 @@
+export const datasetKorrekturfaktorVerteilungT32 = [
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.973
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 1.003
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.952
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.966
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.974
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.985
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.989
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.992
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.995
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.998
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.960
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.980
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.992
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.975
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.982
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.987
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.995
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 1.000
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.973
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.987
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.986
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.990
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.993
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.997
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.955
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.968
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 1.036
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.998
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0,
+ "fßd": 0.980
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0,
+ "fßd": 0.986
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0,
+ "fßd": 0.922
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.973
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 1.003
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.952
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.966
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.974
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.985
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.989
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.992
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.995
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.998
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.960
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.980
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.992
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.975
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.982
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.987
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.995
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 1.000
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.948
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.963
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.973
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.987
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.986
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.990
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.993
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.997
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.955
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.968
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 1.036
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.998
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.1,
+ "fßd": 0.972
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.1,
+ "fßd": 0.980
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.1,
+ "fßd": 0.986
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.1,
+ "fßd": 0.922
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.3,
+ "fßd": 1
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.043
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.032
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.009
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.030
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.021
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.015
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.009
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.021
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.015
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.010
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.004
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.077
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.054
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.039
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.015
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.047
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.033
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.024
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.062
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.043
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.032
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.006
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.031
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.022
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.016
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.006
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.012
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.008
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.006
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.002
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.037
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.027
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.020
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 1.008
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 0.5,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 0.5,
+ "fßd": 1.016
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 0.5,
+ "fßd": 1.013
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 0.5,
+ "fßd": 0.931
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.031
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.130
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.094
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.068
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.030
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.030
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.022
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.015
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.007
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.106
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.077
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.055
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.067
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.047
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.034
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.014
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.000
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.031
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.037
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.019
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.008
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.118
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.086
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.062
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 1.027
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 1,
+ "fßd": 1.073
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 1,
+ "fßd": 1.053
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 1,
+ "fßd": 1.038
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 1,
+ "fßd": 0.945
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.031
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.130
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.094
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.068
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.030
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.030
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.022
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.015
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.007
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.106
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.077
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.055
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.067
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.047
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.034
+ },
+ {
+ "verteilung": "Verteilleitungen im unbeheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.014
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "I (Etagenringtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.000
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.137
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.100
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.072
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIa (Etagenverteilertyp Heizkörper)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.031
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.037
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.023
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.019
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IIb (Etagenverteilertyp Fußbodenheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.008
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.118
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.086
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.062
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "III (Steigestrangtyp)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 1.027
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "90°C/70°C",
+ "ßhd": 2,
+ "fßd": 1.073
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "70°C/55°C",
+ "ßhd": 2,
+ "fßd": 1.053
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "55°C/45°C",
+ "ßhd": 2,
+ "fßd": 1.038
+ },
+ {
+ "verteilung": "Verteilleitungen im beheizten Bereich",
+ "rohrnetztyp": "IV (Strahlungs- und Luftheizung)",
+ "auslegungsTemp": "35°C/28°C",
+ "ßhd": 2,
+ "fßd": 0.945
+ }
+];
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungFernwaermeT102.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungFernwaermeT102.ts
new file mode 100644
index 00000000..cecd8842
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungFernwaermeT102.ts
@@ -0,0 +1,29 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionAufwandszahlErzeugungHeizungFernwaermeT102(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [1.008, 1.009, 1.009, 1.009, 1.009, 1.009, 1.010, 1.010, 1.010, 1.010] },
+ { SuchSpalte: [10], DatenSpalte: [1.005, 1.005, 1.006, 1.006, 1.006, 1.006, 1.006, 1.006, 1.006, 1.006] },
+ { SuchSpalte: [20], DatenSpalte: [1.003, 1.003, 1.004, 1.004, 1.004, 1.004, 1.004, 1.004, 1.004, 1.004] },
+ { SuchSpalte: [30], DatenSpalte: [1.003, 1.003, 1.003, 1.003, 1.003, 1.003, 1.003, 1.003, 1.003, 1.003] },
+ { SuchSpalte: [40], DatenSpalte: [1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.003, 1.003] },
+ { SuchSpalte: [50], DatenSpalte: [1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002] },
+ { SuchSpalte: [60], DatenSpalte: [1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002] },
+ { SuchSpalte: [70], DatenSpalte: [1.001, 1.001, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002, 1.002] },
+ { SuchSpalte: [80], DatenSpalte: [1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.002, 1.002, 1.002, 1.002] },
+ { SuchSpalte: [90], DatenSpalte: [1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001] },
+ { SuchSpalte: [100], DatenSpalte: [1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001] },
+ { SuchSpalte: [200], DatenSpalte: [1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001] },
+ { SuchSpalte: [300], DatenSpalte: [1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001] },
+ { SuchSpalte: [400], DatenSpalte: [1.000, 1.000, 1.000, 1.000, 1.001, 1.001, 1.001, 1.001, 1.001, 1.001] }
+];
+
+ const dataZeile = [ { DatenZeile: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] } ];
+
+
+ const AufwandszahlErzeugungHeizungFernwaerme = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return AufwandszahlErzeugungHeizungFernwaerme;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungT77.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungT77.ts
new file mode 100644
index 00000000..3fcc6c94
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungT77.ts
@@ -0,0 +1,34 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionAufwandszahlErzeugungHeizungT77(suchSpalte: number, datenZeile: number) {
+
+ const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [1.013, 1.019, 1.024, 1.042, 1.061, 1.079, 1.098, 1.117, 1.135, 1.154] },
+ { SuchSpalte: [10], DatenSpalte: [1.011, 1.017, 1.023, 1.041, 1.059, 1.077, 1.096, 1.114, 1.132, 1.150] },
+ { SuchSpalte: [20], DatenSpalte: [1.010, 1.016, 1.022, 1.040, 1.057, 1.075, 1.093, 1.111, 1.129, 1.147] },
+ { SuchSpalte: [30], DatenSpalte: [1.009, 1.016, 1.021, 1.039, 1.056, 1.074, 1.092, 1.109, 1.127, 1.145] },
+ { SuchSpalte: [40], DatenSpalte: [1.009, 1.015, 1.021, 1.038, 1.056, 1.073, 1.091, 1.108, 1.126, 1.143] },
+ { SuchSpalte: [50], DatenSpalte: [1.009, 1.015, 1.020, 1.038, 1.055, 1.073, 1.090, 1.107, 1.125, 1.142] },
+ { SuchSpalte: [60], DatenSpalte: [1.008, 1.015, 1.020, 1.037, 1.055, 1.072, 1.089, 1.107, 1.124, 1.141] },
+ { SuchSpalte: [70], DatenSpalte: [1.008, 1.014, 1.020, 1.037, 1.054, 1.072, 1.089, 1.106, 1.123, 1.140] },
+ { SuchSpalte: [80], DatenSpalte: [1.008, 1.014, 1.020, 1.037, 1.054, 1.071, 1.088, 1.105, 1.122, 1.140] },
+ { SuchSpalte: [90], DatenSpalte: [1.008, 1.014, 1.020, 1.037, 1.054, 1.071, 1.088, 1.105, 1.122, 1.139] },
+ { SuchSpalte: [100], DatenSpalte: [1.008, 1.014, 1.019, 1.036, 1.053, 1.070, 1.087, 1.104, 1.121, 1.138] },
+ { SuchSpalte: [120], DatenSpalte: [1.008, 1.014, 1.019, 1.036, 1.053, 1.070, 1.087, 1.104, 1.121, 1.138] },
+ { SuchSpalte: [140], DatenSpalte: [1.008, 1.014, 1.019, 1.036, 1.053, 1.069, 1.086, 1.103, 1.120, 1.137] },
+ { SuchSpalte: [160], DatenSpalte: [1.007, 1.013, 1.019, 1.036, 1.052, 1.069, 1.086, 1.103, 1.119, 1.136] },
+ { SuchSpalte: [180], DatenSpalte: [1.007, 1.013, 1.019, 1.035, 1.052, 1.069, 1.085, 1.102, 1.119, 1.135] },
+ { SuchSpalte: [200], DatenSpalte: [1.007, 1.013, 1.019, 1.035, 1.052, 1.068, 1.085, 1.102, 1.118, 1.135] },
+ { SuchSpalte: [250], DatenSpalte: [1.007, 1.013, 1.018, 1.035, 1.051, 1.068, 1.084, 1.101, 1.117, 1.134] },
+ { SuchSpalte: [300], DatenSpalte: [1.007, 1.013, 1.018, 1.034, 1.051, 1.067, 1.084, 1.100, 1.117, 1.133] },
+ { SuchSpalte: [350], DatenSpalte: [1.007, 1.012, 1.018, 1.034, 1.050, 1.067, 1.083, 1.099, 1.116, 1.132] }
+ ];
+
+ const dataZeile = [ { DatenZeile: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] } ];
+
+
+ const AufwandsZahlErzeugungHeizung = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return AufwandsZahlErzeugungHeizung;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungUmlaufWasserheizerT82.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungUmlaufWasserheizerT82.ts
new file mode 100644
index 00000000..e4ba3db7
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungUmlaufWasserheizerT82.ts
@@ -0,0 +1,18 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionAufwandszahlErzeugungHeizungUmlaufWasserheizerT82(suchSpalte: number, datenZeile: number) {
+
+ const dataBox = [
+ { SuchSpalte: [11], DatenSpalte: [1.038,1.069,1.098,1.122,1.145,1.169,1.192,1.216,1.240,1.263] },
+ { SuchSpalte: [18], DatenSpalte: [1.037,1.068,1.096,1.120,1.143,1.166,1.189,1.212,1.236,1.259] },
+ { SuchSpalte: [24], DatenSpalte: [1.037,1.067,1.096,1.118,1.141,1.164,1.187,1.210,1.233,1.256] }
+ ];
+
+ const dataZeile = [ { DatenZeile: [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1] } ];
+
+
+ const AufwandszahlErzeugungHeizungUmlaufWasserheizer = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return AufwandszahlErzeugungHeizungUmlaufWasserheizer;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgrad.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgrad.ts
deleted file mode 100644
index 6ed17a0a..00000000
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgrad.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-// Funktion zur Berechnung des Ausnutzungsgrades aus Tabelle 18
-
-import { cubicSplineInterpolation, nevillePolynomialInterpolation } from "js-interpolate";
-
-const dataset = {
- alleMonate: {
- 30: [
- 0.999, 0.992, 0.978, 0.956, 0.927, 0.893, 0.856, 0.818, 0.78, 0.742,
- 0.706, 0.671, 0.638, 0.608, 0.579, 0.553, 0.528, 0.505, 0.483,
- 0.463, 0.445, 0.428, 0.411, 0.396, 0.382, 0.369, 0.357, 0.345,
- 0.334, 0.324, 0.314, 0.305, 0.296, 0.288, 0.28, 0.273, 0.266, 0.259,
- 0.253, 0.246, 0.22, 0.198, 0.181, 0.166, 0.153, 0.142, 0.133, 0.125,
- 0.117, 0.111, 0.105, 0.1,
- ],
- 40: [
- 1.0, 0.997, 0.99, 0.975, 0.954, 0.926, 0.892, 0.855, 0.817, 0.778,
- 0.739, 0.702, 0.667, 0.634, 0.603, 0.574, 0.547, 0.522, 0.498,
- 0.477, 0.457, 0.438, 0.421, 0.405, 0.39, 0.376, 0.363, 0.351, 0.339,
- 0.329, 0.318, 0.309, 0.3, 0.291, 0.283, 0.276, 0.268, 0.261, 0.255,
- 0.249, 0.221, 0.199, 0.181, 0.166, 0.154, 0.143, 0.133, 0.125,
- 0.118, 0.111, 0.105, 0.1,
- ],
- 50: [
- 1.0, 0.999, 0.995, 0.986, 0.97, 0.948, 0.918, 0.883, 0.845, 0.805,
- 0.765, 0.726, 0.688, 0.652, 0.619, 0.588, 0.559, 0.533, 0.508,
- 0.485, 0.464, 0.445, 0.427, 0.41, 0.394, 0.38, 0.366, 0.354, 0.342,
- 0.331, 0.321, 0.311, 0.301, 0.293, 0.285, 0.277, 0.269, 0.262,
- 0.256, 0.249, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125,
- 0.118, 0.111, 0.105, 0.1,
- ],
- 60: [
- 1.0, 1.0, 0.998, 0.992, 0.981, 0.963, 0.937, 0.904, 0.867, 0.826,
- 0.785, 0.743, 0.704, 0.666, 0.631, 0.598, 0.568, 0.54, 0.514, 0.491,
- 0.469, 0.449, 0.43, 0.413, 0.397, 0.382, 0.368, 0.355, 0.343, 0.332,
- 0.322, 0.312, 0.302, 0.293, 0.285, 0.277, 0.27, 0.263, 0.256, 0.25,
- 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111,
- 0.105, 0.1,
- ],
- 70: [
- 1.0, 1.0, 0.999, 0.996, 0.988, 0.973, 0.951, 0.921, 0.884, 0.843,
- 0.8, 0.757, 0.716, 0.676, 0.639, 0.605, 0.574, 0.545, 0.518, 0.494,
- 0.472, 0.451, 0.432, 0.414, 0.398, 0.383, 0.369, 0.356, 0.344,
- 0.333, 0.322, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256,
- 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118,
- 0.111, 0.105, 0.1,
- ],
- 80: [
- 1.0, 1.0, 0.999, 0.998, 0.992, 0.981, 0.962, 0.934, 0.898, 0.857,
- 0.813, 0.769, 0.725, 0.684, 0.646, 0.61, 0.578, 0.548, 0.521, 0.496,
- 0.473, 0.452, 0.433, 0.415, 0.399, 0.384, 0.37, 0.357, 0.344, 0.333,
- 0.322, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25,
- 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111,
- 0.105, 0.1,
- ],
- 90: [
- 1.0, 1.0, 1.0, 0.999, 0.995, 0.986, 0.97, 0.944, 0.91, 0.869, 0.824,
- 0.778, 0.733, 0.69, 0.651, 0.614, 0.581, 0.55, 0.523, 0.497, 0.474,
- 0.453, 0.434, 0.416, 0.4, 0.384, 0.37, 0.357, 0.345, 0.333, 0.322,
- 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222,
- 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105,
- 0.1,
- ],
- 100: [
- 1.0, 1.0, 1.0, 0.999, 0.997, 0.99, 0.976, 0.953, 0.92, 0.879, 0.833,
- 0.786, 0.739, 0.695, 0.654, 0.617, 0.583, 0.552, 0.524, 0.498,
- 0.475, 0.454, 0.434, 0.416, 0.4, 0.384, 0.37, 0.357, 0.345, 0.333,
- 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25,
- 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111,
- 0.105, 0.1,
- ],
- 110: [
- 1.0, 1.0, 1.0, 0.999, 0.998, 0.993, 0.981, 0.96, 0.928, 0.887,
- 0.841, 0.792, 0.744, 0.699, 0.657, 0.619, 0.584, 0.553, 0.525,
- 0.499, 0.475, 0.454, 0.435, 0.417, 0.4, 0.384, 0.37, 0.357, 0.345,
- 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256,
- 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118,
- 0.111, 0.105, 0.1,
- ],
- 120: [
- 1.0, 1.0, 1.0, 1.0, 0.999, 0.995, 0.985, 0.966, 0.935, 0.895, 0.847,
- 0.798, 0.748, 0.702, 0.659, 0.621, 0.586, 0.554, 0.525, 0.5, 0.476,
- 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323,
- 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222,
- 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105,
- 0.1,
- ],
- 130: [
- 1.0, 1.0, 1.0, 1.0, 0.999, 0.996, 0.988, 0.971, 0.942, 0.901, 0.853,
- 0.802, 0.752, 0.704, 0.661, 0.622, 0.587, 0.554, 0.526, 0.5, 0.476,
- 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323,
- 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222,
- 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105,
- 0.1,
- ],
- 140: [
- 1.0, 1.0, 1.0, 1.0, 0.999, 0.997, 0.991, 0.975, 0.947, 0.907, 0.858,
- 0.806, 0.755, 0.706, 0.662, 0.623, 0.587, 0.555, 0.526, 0.5, 0.476,
- 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323,
- 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222,
- 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105,
- 0.1,
- ],
- 150: [
- 1.0, 1.0, 1.0, 1.0, 0.999, 0.998, 0.992, 0.979, 0.952, 0.912, 0.863,
- 0.809, 0.757, 0.708, 0.663, 0.623, 0.588, 0.555, 0.526, 0.5, 0.476,
- 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323,
- 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222,
- 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105,
- 0.1,
- ],
- },
-};
-
-const waermeQuellenSenkenVerhaeltnis = [
- 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5,
- 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1,
- 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8,
- 8.5, 9, 9.5, 10,
-];
-
-export function funktionAusnutzungsgrad(
- waermequellensenkenverhaeltnis: number,
- zeitkonstane: number,
- monat: keyof typeof dataset
-) {
- const data = dataset[monat];
-
- const interpolations: number[] = [];
-
- for (const key in data) {
- const values = data[key as unknown as keyof typeof data];
-
- const interpolated = cubicSplineInterpolation(
- values.map((value, i) => ({
- x: waermeQuellenSenkenVerhaeltnis[i],
- y: value,
- })),
- waermequellensenkenverhaeltnis
- );
-
-
- interpolations.push(interpolated);
- }
-
- const interpolated = cubicSplineInterpolation(
- interpolations.map((interpolation, i) => {
- return {
- x: Object.keys(data)[i],
- y: interpolation,
- };
- }),
- zeitkonstane
- );
-
- return interpolated;
-}
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgradT18.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgradT18.ts
new file mode 100644
index 00000000..2369fc8e
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgradT18.ts
@@ -0,0 +1,29 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionAusnutzungsgradT18(suchSpalte: number, datenZeile: number) {
+
+ const dataBox = [
+ { SuchSpalte: [30], DatenSpalte: [0.999, 0.992, 0.978, 0.956, 0.927, 0.893, 0.856, 0.818, 0.78, 0.742, 0.706, 0.671, 0.638, 0.608, 0.579, 0.553, 0.528, 0.505, 0.483, 0.463, 0.445, 0.428, 0.411, 0.396, 0.382, 0.369, 0.357, 0.345, 0.334, 0.324, 0.314, 0.305, 0.296, 0.288, 0.28, 0.273, 0.266, 0.259, 0.253, 0.246, 0.22, 0.198, 0.181, 0.166, 0.153, 0.142, 0.133, 0.125, 0.117, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [40], DatenSpalte: [1.0, 0.997, 0.99, 0.975, 0.954, 0.926, 0.892, 0.855, 0.817, 0.778, 0.739, 0.702, 0.667, 0.634, 0.603, 0.574, 0.547, 0.522, 0.498, 0.477, 0.457, 0.438, 0.421, 0.405, 0.39, 0.376, 0.363, 0.351, 0.339, 0.329, 0.318, 0.309, 0.3, 0.291, 0.283, 0.276, 0.268, 0.261, 0.255, 0.249, 0.221, 0.199, 0.181, 0.166, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [50], DatenSpalte: [1.0, 0.999, 0.995, 0.986, 0.97, 0.948, 0.918, 0.883, 0.845, 0.805, 0.765, 0.726, 0.688, 0.652, 0.619, 0.588, 0.559, 0.533, 0.508, 0.485, 0.464, 0.445, 0.427, 0.41, 0.394, 0.38, 0.366, 0.354, 0.342, 0.331, 0.321, 0.311, 0.301, 0.293, 0.285, 0.277, 0.269, 0.262, 0.256, 0.249, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [60], DatenSpalte: [1.0, 1.0, 0.998, 0.992, 0.981, 0.963, 0.937, 0.904, 0.867, 0.826, 0.785, 0.743, 0.704, 0.666, 0.631, 0.598, 0.568, 0.54, 0.514, 0.491, 0.469, 0.449, 0.43, 0.413, 0.397, 0.382, 0.368, 0.355, 0.343, 0.332, 0.322, 0.312, 0.302, 0.293, 0.285, 0.277, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [70], DatenSpalte: [1.0, 1.0, 0.999, 0.996, 0.988, 0.973, 0.951, 0.921, 0.884, 0.843, 0.8, 0.757, 0.716, 0.676, 0.639, 0.605, 0.574, 0.545, 0.518, 0.494, 0.472, 0.451, 0.432, 0.414, 0.398, 0.383, 0.369, 0.356, 0.344, 0.333, 0.322, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [80], DatenSpalte: [1.0, 1.0, 0.999, 0.998, 0.992, 0.981, 0.962, 0.934, 0.898, 0.857, 0.813, 0.769, 0.725, 0.684, 0.646, 0.61, 0.578, 0.548, 0.521, 0.496, 0.473, 0.452, 0.433, 0.415, 0.399, 0.384, 0.37, 0.357, 0.344, 0.333, 0.322, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [90], DatenSpalte: [1.0, 1.0, 1.0, 0.999, 0.995, 0.986, 0.97, 0.944, 0.91, 0.869, 0.824, 0.778, 0.733, 0.69, 0.651, 0.614, 0.581, 0.55, 0.523, 0.497, 0.474, 0.453, 0.434, 0.416, 0.4, 0.384, 0.37, 0.357, 0.345, 0.333, 0.322, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [100], DatenSpalte: [1.0, 1.0, 1.0, 0.999, 0.997, 0.99, 0.976, 0.953, 0.92, 0.879, 0.833, 0.786, 0.739, 0.695, 0.654, 0.617, 0.583, 0.552, 0.524, 0.498, 0.475, 0.454, 0.434, 0.416, 0.4, 0.384, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [110], DatenSpalte: [1.0, 1.0, 1.0, 0.999, 0.998, 0.993, 0.981, 0.96, 0.928, 0.887, 0.841, 0.792, 0.744, 0.699, 0.657, 0.619, 0.584, 0.553, 0.525, 0.499, 0.475, 0.454, 0.435, 0.417, 0.4, 0.384, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [120], DatenSpalte: [1.0, 1.0, 1.0, 1.0, 0.999, 0.995, 0.985, 0.966, 0.935, 0.895, 0.847, 0.798, 0.748, 0.702, 0.659, 0.621, 0.586, 0.554, 0.525, 0.5, 0.476, 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [130], DatenSpalte: [1.0, 1.0, 1.0, 1.0, 0.999, 0.996, 0.988, 0.971, 0.942, 0.901, 0.853, 0.802, 0.752, 0.704, 0.661, 0.622, 0.587, 0.554, 0.526, 0.5, 0.476, 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [140], DatenSpalte: [1.0, 1.0, 1.0, 1.0, 0.999, 0.997, 0.991, 0.975, 0.947, 0.907, 0.858, 0.806, 0.755, 0.706, 0.662, 0.623, 0.587, 0.555, 0.526, 0.5, 0.476, 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] },
+ { SuchSpalte: [150], DatenSpalte: [1.0, 1.0, 1.0, 1.0, 0.999, 0.998, 0.992, 0.979, 0.952, 0.912, 0.863, 0.809, 0.757, 0.708, 0.663, 0.623, 0.588, 0.555, 0.526, 0.5, 0.476, 0.454, 0.435, 0.417, 0.4, 0.385, 0.37, 0.357, 0.345, 0.333, 0.323, 0.312, 0.303, 0.294, 0.286, 0.278, 0.27, 0.263, 0.256, 0.25, 0.222, 0.2, 0.182, 0.167, 0.154, 0.143, 0.133, 0.125, 0.118, 0.111, 0.105, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] }
+ ];
+
+ const dataZeile = [{ DatenZeile: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15] }];
+
+
+
+ const Ausnutzungsgrad = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return Ausnutzungsgrad;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperatur.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperaturT8T10.ts
similarity index 98%
rename from src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperatur.ts
rename to src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperaturT8T10.ts
index 56be9e3a..9e3e0b06 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperatur.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperaturT8T10.ts
@@ -148,7 +148,7 @@ const HeizLast = [0, 5, 10, 25, 50, 75, 100, 125, 150];
// jede einzeln interpolieren und dann zwischen den Tabellen interpolieren.
// Falls wir also den Wert an Stelle Heizlast: 120, Zeitkonstante 100, Monat:
// Januar haben wollen:
-export function funktionBilanzInnentemperatur(heizlast: number, zeitkonstane: number, monat: keyof typeof dataset): number {
+export function funktionBilanzInnentemperaturT8T10(heizlast: number, zeitkonstane: number, monat: keyof typeof dataset): number {
const data = dataset[monat]
const interpolations: number[] = []
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.ts
new file mode 100644
index 00000000..feba2148
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.ts
@@ -0,0 +1,35 @@
+
+export function funktionDoppelteInterpolation(SuchSpalte: number, DatenZeile: number, dataZeile: any, dataBox: any): number {
+
+ function interpolate(x: number, x0: number, y0: number, x1: number, y1: number): number {
+ return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0);
+ }
+
+ function findNearestPoints(data: any[], value: number, key: string): any[] {
+ let lower = data[0];
+ let upper = data[data.length - 1];
+
+ for (let i = 0; i < data.length - 1; i++) {
+ if (data[i][key][0] <= value && data[i + 1][key][0] >= value) {
+ lower = data[i];
+ upper = data[i + 1];
+ break;
+ }
+ }
+
+ return [lower, upper];
+ }
+
+
+ const [lowerSuchSpalte, upperSuchSpalte] = findNearestPoints(dataBox, SuchSpalte, 'SuchSpalte');
+ const lowerIndex = dataZeile[0].DatenZeile.findIndex((val: number) => val >= DatenZeile) - 1;
+ const upperIndex = lowerIndex + 1;
+
+ const lowerDatenZeile = dataZeile[0].DatenZeile[lowerIndex];
+ const upperDatenZeile = dataZeile[0].DatenZeile[upperIndex];
+
+ const lowerDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, lowerSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, lowerSuchSpalte.DatenSpalte[upperIndex]);
+ const upperDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, upperSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, upperSuchSpalte.DatenSpalte[upperIndex]);
+
+ return interpolate(SuchSpalte, lowerSuchSpalte.SuchSpalte[0], lowerDatenSpalte, upperSuchSpalte.SuchSpalte[0], upperDatenSpalte);
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungHeizungT83.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungHeizungT83.ts
new file mode 100644
index 00000000..0a086623
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungHeizungT83.ts
@@ -0,0 +1,35 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionHilfsenergieErzeugungHeizungT83(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [0.0208, 0.0267, 0.0325, 0.0418, 0.0510, 0.0603, 0.0696, 0.0789, 0.0882, 0.0974] },
+ { SuchSpalte: [10], DatenSpalte: [0.0251, 0.0352, 0.0453, 0.0582, 0.0712, 0.0841, 0.0971, 0.1100, 0.1230, 0.1359] },
+ { SuchSpalte: [20], DatenSpalte: [0.0311, 0.0471, 0.0632, 0.0812, 0.0993, 0.1173, 0.1354, 0.1534, 0.1715, 0.1895] },
+ { SuchSpalte: [30], DatenSpalte: [0.0356, 0.0562, 0.0768, 0.0987, 0.1206, 0.1425, 0.1645, 0.1864, 0.2083, 0.2303] },
+ { SuchSpalte: [40], DatenSpalte: [0.0394, 0.0637, 0.0881, 0.1133, 0.1385, 0.1637, 0.1888, 0.2140, 0.2392, 0.2644] },
+ { SuchSpalte: [50], DatenSpalte: [0.0427, 0.0704, 0.0981, 0.1261, 0.1541, 0.1822, 0.2102, 0.2382, 0.2662, 0.2943] },
+ { SuchSpalte: [60], DatenSpalte: [0.0457, 0.0764, 0.1071, 0.1376, 0.1682, 0.1988, 0.2294, 0.2600, 0.2906, 0.3212] },
+ { SuchSpalte: [70], DatenSpalte: [0.0484, 0.0819, 0.1153, 0.1482, 0.1811, 0.2141, 0.2470, 0.2800, 0.3129, 0.3458] },
+ { SuchSpalte: [80], DatenSpalte: [0.0510, 0.0869, 0.1229, 0.1580, 0.1931, 0.2283, 0.2634, 0.2985, 0.3336, 0.3687] },
+ { SuchSpalte: [90], DatenSpalte: [0.0534, 0.0917, 0.1301, 0.1672, 0.2044, 0.2415, 0.2787, 0.3158, 0.3530, 0.3902] },
+ { SuchSpalte: [100], DatenSpalte: [0.0556, 0.0962, 0.1368, 0.1759, 0.2150, 0.2541, 0.2931, 0.3322, 0.3713, 0.4104] },
+ { SuchSpalte: [120], DatenSpalte: [0.0598, 0.1045, 0.1493, 0.1920, 0.2346, 0.2773, 0.3200, 0.3626, 0.4053, 0.4479] },
+ { SuchSpalte: [140], DatenSpalte: [0.0636, 0.1122, 0.1608, 0.2067, 0.2527, 0.2986, 0.3445, 0.3905, 0.4364, 0.4823] },
+ { SuchSpalte: [160], DatenSpalte: [0.0671, 0.1193, 0.1714, 0.2204, 0.2694, 0.3184, 0.3673, 0.4163, 0.4653, 0.5143] },
+ { SuchSpalte: [180], DatenSpalte: [0.0705, 0.1259, 0.1814, 0.2332, 0.2850, 0.3369, 0.3887, 0.4405, 0.4924, 0.5442] },
+ { SuchSpalte: [200], DatenSpalte: [0.0736, 0.1322, 0.1908, 0.2453, 0.2998, 0.3543, 0.4089, 0.4634, 0.5179, 0.5724] },
+ { SuchSpalte: [250], DatenSpalte: [0.0808, 0.1466, 0.2124, 0.2731, 0.3337, 0.3944, 0.4551, 0.5158, 0.5764, 0.6371] },
+ { SuchSpalte: [300], DatenSpalte: [0.0873, 0.1595, 0.2318, 0.2980, 0.3643, 0.4305, 0.4967, 0.5629, 0.6292, 0.6954] },
+ { SuchSpalte: [350], DatenSpalte: [0.0932, 0.1714, 0.2496, 0.3209, 0.3922, 0.4635, 0.5349, 0.6062, 0.6775, 0.7488] },
+ { SuchSpalte: [400], DatenSpalte: [0.0987, 0.1824, 0.2661, 0.3422, 0.4182, 0.4942, 0.5703, 0.6463, 0.7223, 0.7984] }
+];
+
+const dataZeile = [ { DatenZeile: [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] } ];
+
+
+ const HilfsenergieErzeugungHeizung = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return HilfsenergieErzeugungHeizung;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungPelletKesselT85.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungPelletKesselT85.ts
new file mode 100644
index 00000000..7d4c15ab
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungPelletKesselT85.ts
@@ -0,0 +1,35 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionHilfsenergieErzeugungPelletKesselT85(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [0.0070, 0.0080, 0.0090, 0.0149, 0.0207, 0.0266, 0.0324, 0.0383, 0.0441, 0.0500] },
+ { SuchSpalte: [10], DatenSpalte: [0.0107, 0.0143, 0.0180, 0.0240, 0.0300, 0.0360, 0.0420, 0.0480, 0.0540, 0.0600] },
+ { SuchSpalte: [20], DatenSpalte: [0.0180, 0.0270, 0.0360, 0.0423, 0.0486, 0.0549, 0.0611, 0.0674, 0.0737, 0.0800] },
+ { SuchSpalte: [30], DatenSpalte: [0.0253, 0.0397, 0.0540, 0.0606, 0.0671, 0.0737, 0.0803, 0.0869, 0.0934, 0.1000] },
+ { SuchSpalte: [40], DatenSpalte: [0.0327, 0.0523, 0.0720, 0.0789, 0.0857, 0.0926, 0.0994, 0.1063, 0.1131, 0.1200] },
+ { SuchSpalte: [50], DatenSpalte: [0.0400, 0.0650, 0.0900, 0.0971, 0.1043, 0.1114, 0.1186, 0.1257, 0.1329, 0.1400] },
+ { SuchSpalte: [60], DatenSpalte: [0.0473, 0.0777, 0.1080, 0.1154, 0.1229, 0.1303, 0.1377, 0.1451, 0.1526, 0.1600] },
+ { SuchSpalte: [70], DatenSpalte: [0.0547, 0.0903, 0.1260, 0.1337, 0.1414, 0.1491, 0.1569, 0.1646, 0.1723, 0.1800] },
+ { SuchSpalte: [80], DatenSpalte: [0.0620, 0.1030, 0.1440, 0.1520, 0.1600, 0.1680, 0.1760, 0.1840, 0.1920, 0.2000] },
+ { SuchSpalte: [90], DatenSpalte: [0.0693, 0.1157, 0.1620, 0.1703, 0.1786, 0.1869, 0.1951, 0.2034, 0.2117, 0.2200] },
+ { SuchSpalte: [100], DatenSpalte: [0.0767, 0.1283, 0.1800, 0.1886, 0.1971, 0.2057, 0.2143, 0.2229, 0.2314, 0.2400] },
+ { SuchSpalte: [120], DatenSpalte: [0.0913, 0.1537, 0.2160, 0.2251, 0.2343, 0.2434, 0.2526, 0.2617, 0.2709, 0.2800] },
+ { SuchSpalte: [140], DatenSpalte: [0.1060, 0.1790, 0.2520, 0.2617, 0.2714, 0.2811, 0.2909, 0.3006, 0.3103, 0.3200] },
+ { SuchSpalte: [160], DatenSpalte: [0.1207, 0.2043, 0.2880, 0.2983, 0.3086, 0.3189, 0.3291, 0.3394, 0.3497, 0.3600] },
+ { SuchSpalte: [180], DatenSpalte: [0.1353, 0.2297, 0.3240, 0.3349, 0.3457, 0.3566, 0.3674, 0.3783, 0.3891, 0.4000] },
+ { SuchSpalte: [200], DatenSpalte: [0.1500, 0.2550, 0.3600, 0.3714, 0.3829, 0.3943, 0.4057, 0.4171, 0.4286, 0.4400] },
+ { SuchSpalte: [250], DatenSpalte: [0.1867, 0.3183, 0.4500, 0.4629, 0.4757, 0.4886, 0.5014, 0.5143, 0.5271, 0.5400] },
+ { SuchSpalte: [300], DatenSpalte: [0.2233, 0.3817, 0.5400, 0.5543, 0.5686, 0.5829, 0.5971, 0.6114, 0.6257, 0.6400] },
+ { SuchSpalte: [350], DatenSpalte: [0.2600, 0.4450, 0.6300, 0.6457, 0.6614, 0.6771, 0.6929, 0.7086, 0.7243, 0.7400] },
+ { SuchSpalte: [400], DatenSpalte: [0.2967, 0.5083, 0.7200, 0.7371, 0.7543, 0.7714, 0.7886, 0.8057, 0.8229, 0.8400] }
+];
+
+const dataZeile = [ { DatenZeile: [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] } ];
+
+
+ const HilfsenergieErzeugungPelletKessel = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return HilfsenergieErzeugungPelletKessel;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungUmlaufWasserheizerT88.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungUmlaufWasserheizerT88.ts
new file mode 100644
index 00000000..2b7864e8
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionHilfsenergieErzeugungUmlaufWasserheizerT88.ts
@@ -0,0 +1,18 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionHilfsenergieErzeugungUmlaufWasserheizerT88(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [11], DatenSpalte: [0.0258, 0.0366, 0.0474, 0.0610, 0.0745, 0.0881, 0.1016, 0.1152, 0.1287, 0.1423] },
+ { SuchSpalte: [18], DatenSpalte: [0.0300, 0.0450, 0.0601, 0.0772, 0.0944, 0.1115, 0.1287, 0.1459, 0.1630, 0.1802] },
+ { SuchSpalte: [24], DatenSpalte: [0.0330, 0.0510, 0.0690, 0.0887, 0.1084, 0.1281, 0.1478, 0.1675, 0.1872, 0.2069] }
+];
+
+const dataZeile = [ { DatenZeile: [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] } ];
+
+
+ const HilfsenergieErzeugungUmlaufWasserheizer = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return HilfsenergieErzeugungUmlaufWasserheizer;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellen.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellenA8.ts
similarity index 96%
rename from src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellen.ts
rename to src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellenA8.ts
index 55b0dc24..7957ef88 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellen.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionInterneWaermequellenA8.ts
@@ -1,4 +1,4 @@
- export function funktionInterneWaermequellen() {
+ export function funktionInterneWaermequellenA8() {
// Beispielwerte Planung werden aus Eingabe geholt
let NettoGrundflaeche = 154.2;
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorErzeugungHolzhackSchnitzelHilfsenergieT86.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorErzeugungHolzhackSchnitzelHilfsenergieT86.ts
new file mode 100644
index 00000000..997e21ae
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorErzeugungHolzhackSchnitzelHilfsenergieT86.ts
@@ -0,0 +1,21 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionKorrekturfaktorHilfsenergieErzeugungHolzhackSchnitzelT86(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [2.9, 3.1, 3.3, 2.3, 1.8, 1.5, 1.4, 1.3, 1.2, 1.1] },
+ { SuchSpalte: [10], DatenSpalte: [2.3, 2.2, 2.2, 1.8, 1.6, 1.5, 1.4, 1.3, 1.2, 1.2] },
+ { SuchSpalte: [20], DatenSpalte: [1.7, 1.7, 1.7, 1.6, 1.5, 1.4, 1.4, 1.3, 1.3, 1.3] },
+ { SuchSpalte: [40], DatenSpalte: [1.4, 1.4, 1.4, 1.4, 1.4, 1.4, 1.4, 1.3, 1.3, 1.3] },
+ { SuchSpalte: [95], DatenSpalte: [1.2, 1.2, 1.2, 1.3, 1.3, 1.3, 1.3, 1.4, 1.4, 1.4] },
+ { SuchSpalte: [270], DatenSpalte: [1.1, 1.1, 1.2, 1.2, 1.3, 1.3, 1.3, 1.4, 1.4, 1.5] },
+ { SuchSpalte: [400], DatenSpalte: [1, 1.1, 1.1, 1.2, 1.2, 1.3, 1.3, 1.4, 1.4, 1.5] }
+];
+
+ const dataZeile = [ { DatenZeile: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] } ];
+
+ const KorrekturfaktorHilfsenergieErzeugungHolzhackSchnitzel = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return KorrekturfaktorHilfsenergieErzeugungHolzhackSchnitzel;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkesselT84.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkesselT84.ts
new file mode 100644
index 00000000..ee593de9
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkesselT84.ts
@@ -0,0 +1,22 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionKorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkesselT84(suchSpalte: number, datenZeile: number) {
+
+ const dataBox = [
+ { SuchSpalte: [5], DatenSpalte: [0.808, 0.700, 0.631, 0.564, 0.521, 0.491, 0.469, 0.452, 0.439, 0.428] },
+ { SuchSpalte: [15], DatenSpalte: [0.665, 0.526, 0.450, 0.405, 0.375, 0.355, 0.340, 0.329, 0.320, 0.313] },
+ { SuchSpalte: [25], DatenSpalte: [0.525, 0.387, 0.322, 0.292, 0.273, 0.260, 0.250, 0.243, 0.237, 0.232] },
+ { SuchSpalte: [40], DatenSpalte: [0.459, 0.331, 0.274, 0.251, 0.236, 0.226, 0.219, 0.213, 0.209, 0.205] },
+ { SuchSpalte: [75], DatenSpalte: [0.388, 0.278, 0.232, 0.217, 0.207, 0.201, 0.196, 0.192, 0.189, 0.187] },
+ { SuchSpalte: [175], DatenSpalte: [0.329, 0.245, 0.212, 0.204, 0.200, 0.196, 0.194, 0.192, 0.190, 0.189] },
+ { SuchSpalte: [325], DatenSpalte: [0.519, 0.475, 0.458, 0.456, 0.455, 0.454, 0.453, 0.452, 0.452, 0.451] },
+ { SuchSpalte: [400], DatenSpalte: [0.541, 0.510, 0.498, 0.505, 0.510, 0.513, 0.515, 0.517, 0.518, 0.519] }
+ ];
+
+ const dataZeile = [ { DatenZeile: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] } ];
+
+ const KorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkessel = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return KorrekturfaktorHilfsenergieErzeugungGasSpezialHeizkessel;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorMittlereBelastungT32.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorMittlereBelastungT32.ts
new file mode 100644
index 00000000..d602ec7e
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorMittlereBelastungT32.ts
@@ -0,0 +1,35 @@
+import { datasetKorrekturfaktorVerteilungT32 } from "#lib/Berechnungen/BedarfsausweisWohnen/datasetKorrekturfaktorVerteilungT32.js";
+
+export function funktionKorrekturfaktorMittlereBelastungT32(verteilung: string, rohrnetztyp: string, auslegungsTemp: string, ßhd: number): number | null {
+ const filteredData = datasetKorrekturfaktorVerteilungT32.filter(item =>
+ item.verteilung === verteilung &&
+ item.rohrnetztyp === rohrnetztyp &&
+ item.auslegungsTemp === auslegungsTemp
+ );
+
+ if (filteredData.length === 0) {
+ const KorrekturfaktorMittlereBelastung = 1;
+ return KorrekturfaktorMittlereBelastung;
+ }
+
+
+ const sortedData = filteredData.sort((a, b) => a.ßhd - b.ßhd);
+
+ for (let i = 0; i < sortedData.length - 1; i++) {
+ const current = sortedData[i];
+ const next = sortedData[i + 1];
+
+ if (ßhd >= current.ßhd && ßhd <= next.ßhd) {
+ const t = (ßhd - current.ßhd) / (next.ßhd - current.ßhd);
+ const KorrekturfaktorMittlereBelastung = current.fßd + t * (next.fßd - current.fßd);
+
+ return KorrekturfaktorMittlereBelastung;
+ }
+ }
+
+ const KorrekturfaktorMittlereBelastung = 1;
+ return KorrekturfaktorMittlereBelastung;
+}
+
+const result = funktionKorrekturfaktorMittlereBelastungT32("Verteilleitungen im beheizten Bereich", "IV (Strahlungs- und Luftheizung)", "35°C/28°C", 0.1);
+console.log(result);
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorTemperaturDifferenzWaermePumpeT90.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorTemperaturDifferenzWaermePumpeT90.ts
new file mode 100644
index 00000000..13ad1122
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorTemperaturDifferenzWaermePumpeT90.ts
@@ -0,0 +1,22 @@
+import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js";
+
+export function funktionKorrekturfaktorTemperaturDifferenzWaermePumpeT90(suchSpalte: number, datenZeile: number) {
+
+const dataBox = [
+ { SuchSpalte: [3], DatenSpalte: [1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928, 0.918, 0.908, 0.898, 0.887, 0.877] },
+ { SuchSpalte: [4], DatenSpalte: [1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928, 0.918, 0.908, 0.898, 0.887] },
+ { SuchSpalte: [5], DatenSpalte: [1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928, 0.918, 0.908, 0.898] },
+ { SuchSpalte: [6], DatenSpalte: [1.031, 1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928, 0.918, 0.908] },
+ { SuchSpalte: [7], DatenSpalte: [1.041, 1.031, 1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928, 0.918] },
+ { SuchSpalte: [8], DatenSpalte: [1.051, 1.041, 1.031, 1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939, 0.928] },
+ { SuchSpalte: [9], DatenSpalte: [1.061, 1.051, 1.041, 1.031, 1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949, 0.939] },
+ { SuchSpalte: [10], DatenSpalte: [1.072, 1.061, 1.051, 1.041, 1.031, 1.020, 1.010, 1.000, 0.990, 0.980, 0.969, 0.959, 0.949] }
+];
+
+ const dataZeile = [ { DatenZeile: [3,4,5,6,7,8,9,10,11,12,13,14,15] } ];
+
+ const KorrekturfaktorTemperaturDifferenzWaermePumpe = funktionDoppelteInterpolation(suchSpalte, datenZeile, dataZeile, dataBox);
+
+ return KorrekturfaktorTemperaturDifferenzWaermePumpe;
+
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgradT9T11.ts
similarity index 97%
rename from src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts
rename to src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgradT9T11.ts
index 2f7294ee..2fa71be1 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgradT9T11.ts
@@ -2,7 +2,7 @@
import { cubicSplineInterpolation } from "js-interpolate";
-let wohneinheiten = 3;
+let WohnEinheiten = 3;
const datasetEinfamilienHausMittlereBelastung = {
Januar: {
@@ -15,7 +15,7 @@ const datasetEinfamilienHausMittlereBelastung = {
90: [ 0.536, 0.532, 0.529, 0.522, 0.515, 0.512, 0.51, 0.51, 0.509 ],
130: [ 0.54, 0.537, 0.533, 0.526, 0.52, 0.516, 0.515, 0.514, 0.513 ],
},
- "März": {
+ März: {
50: [ 0.448, 0.445, 0.443, 0.437, 0.431, 0.427, 0.427, 0.426, 0.426 ],
90: [ 0.453, 0.45, 0.447, 0.441, 0.436, 0.433, 0.431, 0.431, 0.43 ],
130: [ 0.457, 0.454, 0.451, 0.445, 0.439, 0.435, 0.435, 0.434, 0.434 ],
@@ -147,7 +147,7 @@ const HeizLast = [0, 5, 10, 25, 50, 75, 100, 125, 150];
// jede einzeln interpolieren und dann zwischen den Tabellen interpolieren.
// Falls wir also den Wert an Stelle Heizlast: 120, Zeitkonstante 100, Monat:
// Januar haben wollen:
-export function funktionMonatlicherBelastungsgrad(heizlast: number, zeitkonstane: number, monat: keyof typeof dataset) {
+export function funktionMonatlicherBelastungsgradT9T11 (heizlast: number, zeitkonstane: number, monat: keyof typeof dataset) {
const data = dataset[monat]
const interpolations: number[] = []
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionNennleistungWaermeerzeugerWarmwasserA14.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionNennleistungWaermeerzeugerWarmwasserA14.ts
new file mode 100644
index 00000000..4d778bb6
--- /dev/null
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionNennleistungWaermeerzeugerWarmwasserA14.ts
@@ -0,0 +1,74 @@
+
+// Interpolationsfunktion für Nennleistung des Wärmeerzeugers
+
+interface DatasetNennleistung {
+ flaeche: number[];
+ Nennleistung: number[];
+}
+
+interface DatasetNutzwaermeBedarf {
+ NutzwaermeBedarf: number[];
+}
+
+const datasetNennleistung: DatasetNennleistung[] = [
+ { flaeche: [50], Nennleistung: [7.5, 7.3, 7.1, 7, 6.8, 6.6, 6.4, 6.3, 6.1, 5.9, 5.7, 5.6, 5.4, 5.2, 5, 4.8] },
+ { flaeche: [100], Nennleistung: [12.1, 11.8, 11.6, 11.3, 11, 10.8, 10.5, 10.2, 9.9, 9.6, 9.3, 9, 8.7, 8.4, 8.1, 7.8] },
+ { flaeche: [150], Nennleistung: [16.1, 15.7, 15.4, 15, 14.6, 14.3, 13.9, 13.5, 13.1, 12.8, 12.4, 12, 11.6, 11.2, 10.8, 10.3] },
+ { flaeche: [200], Nennleistung: [19.7, 19.2, 18.8, 18.4, 17.9, 17.5, 17, 16.5, 16.1, 15.6, 15.1, 14.6, 14.2, 13.7, 13.1, 12.6] },
+ { flaeche: [300], Nennleistung: [26.1, 25.6, 25, 24.4, 23.8, 23.2, 22.6, 22, 21.4, 20.7, 20.1, 19.5, 18.8, 18.1, 17.5, 16.8] },
+ { flaeche: [400], Nennleistung: [32, 31.3, 30.5, 29.8, 29.1, 28.4, 27.6, 26.9, 26.1, 25.4, 24.6, 23.8, 23, 22.2, 21.4, 20.5] },
+ { flaeche: [500], Nennleistung: [37.4, 36.5, 35.7, 34.9, 34, 33.2, 32.3, 31.4, 30.5, 29.6, 28.7, 27.8, 26.9, 25.9, 25, 24] },
+ { flaeche: [600], Nennleistung: [42.4, 41.5, 40.6, 39.6, 38.7, 37.7, 36.7, 35.7, 34.7, 33.7, 32.7, 31.6, 30.5, 29.5, 28.4, 27.3] },
+ { flaeche: [700], Nennleistung: [47.3, 46.2, 45.2, 44.1, 43.1, 42, 40.9, 39.8, 38.7, 37.5, 36.4, 35.2, 34, 32.8, 31.6, 30.4] },
+ { flaeche: [800], Nennleistung: [51.9, 50.8, 49.6, 48.5, 47.3, 46.1, 44.9, 43.7, 42.4, 41.2, 39.9, 38.7, 37.4, 36, 34.7, 33.3] },
+ { flaeche: [900], Nennleistung: [56.4, 55.1, 53.9, 52.6, 51.3, 50.1, 48.7, 47.4, 46.1, 44.7, 43.4, 42, 40.6, 39.1, 37.7, 36.2] },
+ { flaeche: [1000], Nennleistung: [60.7, 59.4, 58, 56.6, 55.3, 53.9, 52.5, 51.1, 49.6, 48.2, 46.7, 45.2, 43.7, 42.1, 40.6, 39] },
+ { flaeche: [2000], Nennleistung: [98.6, 96.4, 94.2, 92, 89.8, 87.5, 85.3, 82.9, 80.6, 78.2, 75.8, 73.4, 71, 68.4, 65.9, 63.3] },
+ { flaeche: [3000], Nennleistung: [130.9, 128.1, 125.2, 122.2, 119.3, 116.3, 113.2, 110.2, 107.1, 103.9, 100.7, 97.5, 94.2, 90.9, 87.5, 84.1] },
+ { flaeche: [4000], Nennleistung: [160.2, 156.6, 153.1, 149.5, 145.9, 142.2, 138.5, 134.7, 130.9, 127.1, 123.2, 119.3, 115.3, 111.2, 107.1, 102.9] },
+ { flaeche: [5000], Nennleistung: [187.2, 183.1, 179, 174.8, 170.5, 166.2, 161.9, 157.5, 153.1, 148.6, 144, 139.4, 134.7, 130, 125.2, 120.3] }
+];
+
+const datasetNutzwaermeBedarf: DatasetNutzwaermeBedarf[] = [
+ { NutzwaermeBedarf: [16, 15.5, 15, 14.5, 14, 13.5, 13, 12.5, 12, 11.5, 11, 10.5, 10, 9.5, 9, 8.5] }
+];
+
+
+export function funktionNennleistungWaermeerzeugerWarmwasserA14(flaeche: number, nutzwaermeBedarf: number): number {
+ const findClosestDatasets = (flaeche: number) => {
+ let lower = datasetNennleistung[0];
+ let upper = datasetNennleistung[datasetNennleistung.length - 1];
+
+ for (let i = 0; i < datasetNennleistung.length - 1; i++) {
+ if (datasetNennleistung[i].flaeche[0] <= flaeche && datasetNennleistung[i + 1].flaeche[0] >= flaeche) {
+ lower = datasetNennleistung[i];
+ upper = datasetNennleistung[i + 1];
+ break;
+ }
+ }
+ return { lower, upper };
+ };
+
+ const interpolate = (x: number, x0: number, y0: number, x1: number, y1: number) => {
+ return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0);
+ };
+
+ const { lower, upper } = findClosestDatasets(flaeche);
+ const indexLower = datasetNutzwaermeBedarf[0].NutzwaermeBedarf.findIndex((value) => value <= nutzwaermeBedarf);
+ const indexUpper = indexLower > 0 ? indexLower - 1 : indexLower;
+
+ const nennleistungLowerLower = lower.Nennleistung[indexLower];
+ const nennleistungLowerUpper = lower.Nennleistung[indexUpper];
+ const nennleistungUpperLower = upper.Nennleistung[indexLower];
+ const nennleistungUpperUpper = upper.Nennleistung[indexUpper];
+
+ const interpolatedLower = interpolate(nutzwaermeBedarf, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexUpper], nennleistungLowerUpper, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexLower], nennleistungLowerLower);
+ const interpolatedUpper = interpolate(nutzwaermeBedarf, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexUpper], nennleistungUpperUpper, datasetNutzwaermeBedarf[0].NutzwaermeBedarf[indexLower], nennleistungUpperLower);
+
+ const NennleistungWaermeerzeugerWarmwasser = interpolate(flaeche, lower.flaeche[0], interpolatedLower, upper.flaeche[0], interpolatedUpper);
+
+ return NennleistungWaermeerzeugerWarmwasser;
+}
+
+const result = funktionNennleistungWaermeerzeugerWarmwasserA14(154.2, 8.79);
+console.log(result);
\ No newline at end of file
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergie.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergieT17.ts
similarity index 98%
rename from src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergie.ts
rename to src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergieT17.ts
index 73fc4b68..6cbfac9f 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergie.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionSolareBestrahlungsEnergieT17.ts
@@ -580,7 +580,7 @@ const dataset: DatasetEntry[] = [
}
];
-export function funktionSolareBestrahlungsEnergie(neigung: number, orientierung: string): { [key: string]: number } | undefined {
+export function funktionSolareBestrahlungsEnergieT17(neigung: number, orientierung: string): { [key: string]: number } | undefined {
const entry = dataset.find(item => item.neigung === neigung && item.orientierung.toLowerCase() === orientierung.toLowerCase());
if (!entry) {
return undefined;
@@ -593,6 +593,6 @@ export function funktionSolareBestrahlungsEnergie(neigung: number, orientierung:
// Beispielaufruf
-// const MonatsWerte = funktionSolareBestrahlungsEnergie(90, "West");
+// const MonatsWerte = funktionSolareBestrahlungsEnergieT17(90, "West");
// console.log(MonatsWerte); // should return the monthly values for neigung=30 and orientierung="Süd"
diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenken.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.ts
similarity index 74%
rename from src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenken.ts
rename to src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.ts
index 0b67fdaa..150ac3a1 100644
--- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenken.ts
+++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.ts
@@ -1,9 +1,9 @@
-import { funktionMonatlicherBelastungsgrad } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgrad.js";
-import { funktionBilanzInnentemperatur } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperatur.js";
+import { funktionMonatlicherBelastungsgradT9T11 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionMonatlicherBelastungsgradT9T11.js";
+import { funktionBilanzInnentemperaturT8T10 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionBilanzInnentemperaturT8T10.js";
import { A5BerechnungWaermeTransferMaxStroemeBauteile } from "#lib/Berechnungen/BedarfsausweisWohnen/A5BerechnungWaermeTransferMaxStroemeBauteile.js";
import { A6BerechnungWaermeTransferMaxStroemeLueftungGesamt } from "#lib/Berechnungen/BedarfsausweisWohnen/A6BerechnungWaermeTransferMaxStroemeLueftungGesamt.js";
-export function funktionWaermesenken() {
+export function funktionWaermesenkenA8A12() {
const resultBauteile = A5BerechnungWaermeTransferMaxStroemeBauteile();
const minimaleAussentemperatur = resultBauteile.minimaleAussentemperatur;
@@ -61,31 +61,31 @@ export function funktionWaermesenken() {
};
- belastungsgrade.Januar = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Januar");
- belastungsgrade.Februar = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Februar");
- belastungsgrade.März = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "März");
- belastungsgrade.April = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "April");
- belastungsgrade.Mai = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Mai");
- belastungsgrade.Juni = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juni");
- belastungsgrade.Juli = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juli");
- belastungsgrade.August = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "August");
- belastungsgrade.September = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "September");
- belastungsgrade.Oktober = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Oktober");
- belastungsgrade.November = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "November");
- belastungsgrade.Dezember = funktionMonatlicherBelastungsgrad(FlaechgenbezogeneHeizlast, ZeitKonstante, "Dezember");
+ belastungsgrade.Januar = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Januar");
+ belastungsgrade.Februar = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Februar");
+ belastungsgrade.März = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "März");
+ belastungsgrade.April = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "April");
+ belastungsgrade.Mai = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Mai");
+ belastungsgrade.Juni = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juni");
+ belastungsgrade.Juli = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juli");
+ belastungsgrade.August = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "August");
+ belastungsgrade.September = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "September");
+ belastungsgrade.Oktober = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Oktober");
+ belastungsgrade.November = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "November");
+ belastungsgrade.Dezember = funktionMonatlicherBelastungsgradT9T11(FlaechgenbezogeneHeizlast, ZeitKonstante, "Dezember");
- bilanzInnenTemperaturen.Januar = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Januar");
- bilanzInnenTemperaturen.Februar = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Februar");
- bilanzInnenTemperaturen.März = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "März");
- bilanzInnenTemperaturen.April = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "April");
- bilanzInnenTemperaturen.Mai = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Mai");
- bilanzInnenTemperaturen.Juni = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juni");
- bilanzInnenTemperaturen.Juli = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juli");
- bilanzInnenTemperaturen.August = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "August");
- bilanzInnenTemperaturen.September = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "September");
- bilanzInnenTemperaturen.Oktober = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Oktober");
- bilanzInnenTemperaturen.November = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "November");
- bilanzInnenTemperaturen.Dezember = funktionBilanzInnentemperatur(FlaechgenbezogeneHeizlast, ZeitKonstante, "Dezember");
+ bilanzInnenTemperaturen.Januar = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Januar");
+ bilanzInnenTemperaturen.Februar = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Februar");
+ bilanzInnenTemperaturen.März = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "März");
+ bilanzInnenTemperaturen.April = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "April");
+ bilanzInnenTemperaturen.Mai = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Mai");
+ bilanzInnenTemperaturen.Juni = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juni");
+ bilanzInnenTemperaturen.Juli = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Juli");
+ bilanzInnenTemperaturen.August = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "August");
+ bilanzInnenTemperaturen.September = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "September");
+ bilanzInnenTemperaturen.Oktober = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Oktober");
+ bilanzInnenTemperaturen.November = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "November");
+ bilanzInnenTemperaturen.Dezember = funktionBilanzInnentemperaturT8T10(FlaechgenbezogeneHeizlast, ZeitKonstante, "Dezember");
waermeSenken.Januar = maximalerWaermestromGesamt * (bilanzInnenTemperaturen.Januar - minimaleAussentemperatur) / (innenTemperatur - minimaleAussentemperatur) * belastungsgrade.Januar;
waermeSenken.Februar = maximalerWaermestromGesamt * (bilanzInnenTemperaturen.Februar - minimaleAussentemperatur) / (innenTemperatur - minimaleAussentemperatur) * belastungsgrade.Februar;
diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts
new file mode 100644
index 00000000..2e97880f
--- /dev/null
+++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts
@@ -0,0 +1,281 @@
+import { AufnahmeClient, ObjektClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
+import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
+import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
+import moment from "moment";
+import bauwerkskatalog from "./bauwerkskatalog.json" assert { type: "json" }
+
+function vergleichsWertNichtWohngebaeude(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient) {
+ let tekWerte = new Array(8).fill(0);
+
+ if (aufnahme.gebaeudetyp && aufnahme.gebaeudetyp in bauwerkskatalog){
+ tekWerte = bauwerkskatalog[aufnahme.gebaeudetyp as keyof typeof bauwerkskatalog];
+ }
+
+ if (!tekWerte) {
+ return [0,0];
+ }
+
+ let faktorWarmwasser = 1;
+ if (ausweis.stromverbrauch_enthaelt_warmwasser) {
+ faktorWarmwasser = 0.9;
+ }
+
+ let faktorHeizung = 0;
+ if (aufnahme.nutzflaeche && aufnahme.nutzflaeche <= 500) {
+ faktorHeizung = 1.46;
+ } else if (aufnahme.nutzflaeche && aufnahme.nutzflaeche > 500 && aufnahme.nutzflaeche <= 50000) {
+ faktorHeizung = 4.53 * (aufnahme.nutzflaeche ** -0.215) + 0.27;
+ } else {
+ faktorHeizung = 0.71;
+ }
+
+ let tekHeizung = tekWerte[0] * faktorHeizung;
+ let tekWarmwasser = tekWerte[1] * faktorWarmwasser;
+ let tekLueftung = ausweis.stromverbrauch_enthaelt_lueftung ? tekWerte[2] : 0;
+
+ let tekEingebauteBeleuchtung = ausweis.stromverbrauch_enthaelt_beleuchtung ? tekWerte[3] : 0;
+ let tekKaelte = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[4] : 0;
+
+ let tekHilfsenergieKuehlung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[5] : 0;
+ let tekBeEntfeuchtung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[6] : 0;
+
+ // TODO: let tekAufzug = ausweis.nwaufzug ? 2 : 0;
+ let tekAufzug = 0;
+
+ let tekSonstiges = (ausweis.stromverbrauch_enthaelt_sonstige != null && ausweis.stromverbrauch_enthaelt_sonstige.length > 0) ? tekWerte[7] : 0;
+
+ let vergleichsWertWaerme = tekHeizung + tekKaelte + tekBeEntfeuchtung;
+ let vergleichsWertStrom = tekWarmwasser + tekLueftung + tekEingebauteBeleuchtung + tekHilfsenergieKuehlung + tekAufzug + tekSonstiges;
+
+ return [vergleichsWertWaerme, vergleichsWertStrom];
+}
+
+/**
+ * Gibt einen array bestehend aus
+ * [0]: Endenergieverbrauch
+ * [1]: Primärenergiebedarf
+ * zurück.
+ *
+ * @param Ausweis ausweis Ein Ausweis dessen Energiebedarf berechnet werden soll
+ * @return VerbrauchsausweisGewerbeCalculationResult
+ */
+export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient) {
+ if (!aufnahme || !objekt || !ausweis) {
+ return null;
+ }
+
+ const nutzflaeche = aufnahme.nutzflaeche || 0;
+
+ let startdatum = moment(ausweis.startdatum);
+
+ let klimafaktoren: Awaited
> = [{
+ month: startdatum.month(),
+ year: startdatum.year(),
+ klimafaktor: 1
+ },
+ {
+ month: startdatum.month(),
+ year: startdatum.year() + 1,
+ klimafaktor: 1
+ },
+ {
+ month: startdatum.month(),
+ year: startdatum.year() + 2,
+ klimafaktor: 1
+ }];
+
+ try {
+ const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz)
+
+ if (response) {
+ klimafaktoren = response
+ }
+ } catch (e) {
+ // TODO: Entweder setzen wir hier mit falschen Klimafaktoren fort, oder wir geben null zurück.
+ // Im Moment setzen wir einfach fort, aber das ist nicht unbedingt die beste Lösung.
+ // return null
+ }
+
+ // Endenergieverbrauch
+ // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
+ let umrechnungsfaktor = 1, primaerfaktor = 1, coe = 1;
+ let umrechnungsfaktor_1 = 1, primaerfaktor_1 = 1, coe_1 = 1;
+ if (ausweis.brennstoff_1 && ausweis.einheit_1) {
+ let result = getHeizwertfaktor(ausweis.brennstoff_1, ausweis.einheit_1);
+ umrechnungsfaktor = result.umrechnungsfaktor
+ primaerfaktor = result.primaerenergiefaktor
+ coe = result.coe
+ }
+
+ if (ausweis.brennstoff_2 && ausweis.einheit_2) {
+ let result = getHeizwertfaktor(ausweis.brennstoff_2, ausweis.einheit_2);
+ umrechnungsfaktor_1 = result.umrechnungsfaktor
+ primaerfaktor_1 = result.primaerenergiefaktor
+ coe_1 = result.coe
+ }
+
+ let energieVerbrauchGesamt_1 = ((ausweis.verbrauch_1 || 0) + (ausweis.verbrauch_2 || 0) + (ausweis.verbrauch_3 || 0)) * umrechnungsfaktor;
+ let energieVerbrauchGesamt_2 = ((ausweis.verbrauch_4 || 0) + (ausweis.verbrauch_5 || 0) + (ausweis.verbrauch_6 || 0)) * umrechnungsfaktor_1;
+
+ let energieVerbrauchWarmwasser_1 = 0;
+ let energieVerbrauchWarmwasser_2 = 0;
+
+ if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 != 0) {
+
+ // Wenn Warmwasser enthalten und Anteil bekannt
+ energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_warmwasser_1 || 0) / 100);
+ energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
+
+ } else if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 == 0){
+ if (aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre)" || aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung" || aufnahme.gebaeudetyp == "Schwimmhallen") {
+ energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.5;
+ energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
+
+ } else {
+ energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.05;
+ energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
+
+ }
+ } else
+ {
+ energieVerbrauchWarmwasser_1 = 0;
+ energieVerbrauchWarmwasser_2 = 0;
+ }
+
+ let kuehlungsZuschlag_1: number;
+ let kuehlungsZuschlag_2: number;
+ if (ausweis.wird_gekuehlt) {
+ kuehlungsZuschlag_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_kuehlung_1 || 0) / 100);
+ kuehlungsZuschlag_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_kuehlung_2 || 0) / 100);
+ } else {
+ kuehlungsZuschlag_1 = kuehlungsZuschlag_2 = 0;
+ }
+
+ // Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
+ let leerstand = (aufnahme.leerstand || 0) / 100;
+
+ let energieVerbrauchHeizung_1 = energieVerbrauchGesamt_1 - energieVerbrauchWarmwasser_1 - kuehlungsZuschlag_1;
+ let energieVerbrauchHeizung_2 = energieVerbrauchGesamt_2 - energieVerbrauchWarmwasser_2 - kuehlungsZuschlag_2;
+
+ let durchschnittsKlimafaktor = klimafaktoren.reduce((acc, c) => acc + c.klimafaktor, 0) / klimafaktoren.length;
+
+ let energieVerbrauchHeizungBereinigt_1 = energieVerbrauchHeizung_1 * durchschnittsKlimafaktor;
+ let energieVerbrauchHeizungBereinigt_2 = energieVerbrauchHeizung_2 * durchschnittsKlimafaktor;
+
+ let durchschnittsEnergieVerbrauchHeizungBereingt = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2) / (3 * nutzflaeche);
+
+ let faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = -0.0028 * durchschnittsEnergieVerbrauchHeizungBereingt + 0.9147;
+
+ if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt <= 0.25) {
+ faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 0.25;
+ } else if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt >= 1.0) {
+ faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 1.0;
+ }
+
+ let leerstandsZuschlagHeizung = faktorDurchschnittsEnergieVerbrauchHeizungBereinigt * leerstand * (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2);
+ let leerstandsZuschlagWarmwasser = leerstand * (energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
+ let leerstandsZuschlagKuehlung = leerstand * (kuehlungsZuschlag_1 + kuehlungsZuschlag_2);
+
+
+ let endEnergieVerbrauch_1 = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchWarmwasser_1 + kuehlungsZuschlag_1) / (3 * nutzflaeche);
+ let endEnergieVerbrauch_2 = (energieVerbrauchHeizungBereinigt_2 + energieVerbrauchWarmwasser_2 + kuehlungsZuschlag_2) / (3 * nutzflaeche);
+
+ let energieVerbrauchStrom = ausweis.strom_1 + ausweis.strom_2 + ausweis.strom_3;
+ let leerstandsZuschlagStrom = leerstand * energieVerbrauchStrom;
+
+ let endEnergieVerbrauchStrom = (energieVerbrauchStrom + leerstandsZuschlagStrom) / (3 * nutzflaeche);
+ let primaerEnergieVerbrauchStrom = endEnergieVerbrauchStrom * 1.8;
+
+ let co2EmissionenStrom = endEnergieVerbrauchStrom * 0.560;
+
+ let endEnergieVerbrauchLeerstandsZuschlag = (leerstandsZuschlagHeizung + leerstandsZuschlagWarmwasser + leerstandsZuschlagKuehlung) / (3 * nutzflaeche);
+ let endEnergieVerbrauchKuehlungsZuschlag_1 = kuehlungsZuschlag_1 / (3 * nutzflaeche);
+ let endEnergieVerbrauchKuehlungsZuschlag_2 = kuehlungsZuschlag_2 / (3 * nutzflaeche);
+
+ let primaerEnergieVerbrauch_1 = endEnergieVerbrauch_1 * primaerfaktor;
+ let primaerEnergieVerbrauch_2 = endEnergieVerbrauch_2 * primaerfaktor_1;
+
+ let primaerEnergieVerbrauchLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * primaerfaktor;
+ let primaerEnergieVerbrauchKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * primaerfaktor;
+ let primaerEnergieVerbrauchKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * primaerfaktor_1;
+
+ let co2Emissionen_1 = endEnergieVerbrauch_1 * coe;
+ let co2Emissionen_2 = endEnergieVerbrauch_2 * coe_1;
+
+ let co2EmissionenLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * coe;
+ let co2EmissionenKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * coe;
+ let co2EmissionenKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * coe_1;
+
+ let endEnergieVerbrauchGesamt = endEnergieVerbrauch_1 + endEnergieVerbrauch_2 + endEnergieVerbrauchLeerstandsZuschlag;
+ let primaerEnergieVerbrauchGesamt = primaerEnergieVerbrauch_1 + primaerEnergieVerbrauch_2 + primaerEnergieVerbrauchLeerstandsZuschlag + primaerEnergieVerbrauchStrom;
+ let co2EmissionenGesamt = co2Emissionen_1 + co2Emissionen_2 + co2EmissionenLeerstandsZuschlag + co2EmissionenStrom;
+
+ let [vergleichsWertWaerme, vergleichsWertStrom] = vergleichsWertNichtWohngebaeude(ausweis, aufnahme);
+
+ // Return all the steps that this function includes for debugging as a json object
+ return {
+ umrechnungsfaktor : umrechnungsfaktor,
+ primaerfaktor : primaerfaktor,
+ coe : coe,
+ umrechnungsfaktor_1 : umrechnungsfaktor_1,
+ primaerfaktor_1 : primaerfaktor_1,
+ coe_1 : coe_1,
+ kuehlungsZuschlag_1 : Math.round(kuehlungsZuschlag_1),
+ kuehlungsZuschlag_2: Math.round(kuehlungsZuschlag_2),
+ durchschnittsKlimafaktor : Math.round(durchschnittsKlimafaktor,2),
+ Klimafaktor_1 : klimafaktoren[0],
+ Klimafaktor_2 : klimafaktoren[1],
+ Klimafaktor_3 : klimafaktoren[2],
+ anteil_heizung_1: 1 - ((ausweis.anteil_warmwasser_1 || 0) / 100),
+ anteil_heizung_2: 1 - ((ausweis.anteil_warmwasser_2 || 0) / 100),
+ verbrauch_1_kwh: ausweis.verbrauch_1 * umrechnungsfaktor,
+ verbrauch_2_kwh: ausweis.verbrauch_2 * umrechnungsfaktor,
+ verbrauch_3_kwh: ausweis.verbrauch_3 * umrechnungsfaktor,
+ verbrauch_4_kwh: ausweis.verbrauch_4 * umrechnungsfaktor_1,
+ verbrauch_5_kwh: ausweis.verbrauch_5 * umrechnungsfaktor_1,
+ verbrauch_6_kwh: ausweis.verbrauch_6 * umrechnungsfaktor_1,
+ klimafaktoren : klimafaktoren,
+ nutzflaeche : Math.round(nutzflaeche),
+ leerstand : leerstand,
+ leerstandsZuschlagHeizung: Math.round(leerstandsZuschlagHeizung),
+ leerstandsZuschlagWarmwasser: Math.round(leerstandsZuschlagWarmwasser),
+ leerstandsZuschlagKuehlung: Math.round(leerstandsZuschlagKuehlung),
+ endEnergieVerbrauchLeerstandsZuschlag: Math.round(endEnergieVerbrauchLeerstandsZuschlag),
+ endEnergieVerbrauchKuehlungsZuschlag_1: Math.round(endEnergieVerbrauchKuehlungsZuschlag_1),
+ endEnergieVerbrauchKuehlungsZuschlag_2: Math.round(endEnergieVerbrauchKuehlungsZuschlag_2),
+ coeeffkg : co2EmissionenGesamt,
+ energieVerbrauchGesamt_1: Math.round(energieVerbrauchGesamt_1),
+ energieVerbrauchGesamt_2: Math.round(energieVerbrauchGesamt_2),
+ energieVerbrauchWarmwasser_1: Math.round(energieVerbrauchWarmwasser_1),
+ energieVerbrauchWarmwasser_2: Math.round(energieVerbrauchWarmwasser_2),
+ energieVerbrauchHeizung_1: energieVerbrauchHeizung_1,
+ energieVerbrauchHeizung_2: energieVerbrauchHeizung_2,
+ anteil_warmwasser_1: ausweis.anteil_warmwasser_1 / 100,
+ anteil_warmwasser_2: ausweis.anteil_warmwasser_2 / 100,
+ energieVerbrauchHeizungBereinigt_1: Math.round(energieVerbrauchHeizungBereinigt_1),
+ energieVerbrauchHeizungBereinigt_2: Math.round(energieVerbrauchHeizungBereinigt_2),
+ durchschnittsEnergieVerbrauchHeizungBereingt: Math.round(durchschnittsEnergieVerbrauchHeizungBereingt),
+ faktorDurchschnittsEnergieVerbrauchHeizungBereinigt: Math.round(faktorDurchschnittsEnergieVerbrauchHeizungBereinigt,3),
+ endEnergieVerbrauch_1: Math.round(endEnergieVerbrauch_1),
+ endEnergieVerbrauch_2: Math.round(endEnergieVerbrauch_2),
+ energieVerbrauchStrom: energieVerbrauchStrom,
+ leerstandsZuschlagStrom: leerstandsZuschlagStrom,
+ endEnergieVerbrauchStrom: Math.round(endEnergieVerbrauchStrom),
+ primaerEnergieVerbrauchStrom: Math.round(primaerEnergieVerbrauchStrom),
+ primaerEnergieVerbrauch_1: Math.round(primaerEnergieVerbrauch_1),
+ primaerEnergieVerbrauch_2: Math.round(primaerEnergieVerbrauch_2),
+ primaerEnergieVerbrauchLeerstandsZuschlag: Math.round(primaerEnergieVerbrauchLeerstandsZuschlag),
+ primaerEnergieVerbrauchKuehlungsZuschlag_1: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_1),
+ primaerEnergieVerbrauchKuehlungsZuschlag_2: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_2),
+ co2Emissionen_1: co2Emissionen_1,
+ co2Emissionen_2: co2Emissionen_2,
+ co2EmissionenLeerstandsZuschlag: co2EmissionenLeerstandsZuschlag,
+ co2EmissionenKuehlungsZuschlag_1: co2EmissionenKuehlungsZuschlag_1,
+ co2EmissionenKuehlungsZuschlag_2: co2EmissionenKuehlungsZuschlag_2,
+ co2EmissionenGesamt: Math.round(co2EmissionenGesamt),
+ endEnergieVerbrauchGesamt: Math.round(endEnergieVerbrauchGesamt),
+ primaerEnergieVerbrauchGesamt: Math.round(primaerEnergieVerbrauchGesamt),
+ vergleichsWertWaerme: vergleichsWertWaerme,
+ vergleichsWertStrom: vergleichsWertStrom,
+ }
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json
new file mode 100644
index 00000000..18fff39d
--- /dev/null
+++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json
@@ -0,0 +1,54 @@
+{
+ "Verwaltungsgebäude (allgemein)": [48.5, 6.9, 3.2, 10.7, 2.6, 3.1, 0.1, 2.8],
+ "Parlaments- und Gerichtsgebäude": [49.9, 6.8, 3, 9.5, 1.2, 0.9, 1.7, 0.6],
+ "Ministerien u. Ämter u. Behörden": [48.3, 7.4, 3.7, 10.8, 1.5, 1.2, 1, 0.7],
+ "Polizeidienstgebäude": [52.4, 7.4, 2.5, 10.4, 0.5, 0.4, 0, 0.7],
+ "Gebäude für öffentliche Bereitschaftsdienste": [51.6, 10.2, 3, 7.8, 0.3, 0.2, 0, 4],
+ "Feuerwehrdienstgebäude": [50.8, 7.1, 3.2, 6.7, 0.3, 0.2, 0, 3.7],
+ "Bürogebäude": [49, 8.1, 4.7, 12.9, 2.9, 2.2, 0, 2.8],
+ "Bürogebäude - überwiegend Großraumbüros": [47.4, 12.8, 7.3, 16.6, 6, 4.3, 0, 0.9],
+ "Bankgebäude": [48, 6.4, 1.6, 10.7, 1.5, 1.1, 0, 0.6],
+ "Hochschule und Forschung (allgemein)": [66.5, 6.7, 13.3, 11, 3.4, 2.2, 3.8, 1.2],
+ "Gebäude für Lehre": [57.2, 5.6, 8.7, 8.5, 2.5, 1.5, 0.4, 1.1],
+ "Institute für Lehre und Forschung": [65, 7.6, 13.8, 11.7, 3.5, 2.4, 14.7, 2.1],
+ "Gebäude für Forschung ohne Lehre": [87.8, 7.4, 14.9, 14.8, 3.5, 2.4, 0, 1.2],
+ "Laborgebäude": [82.8, 8, 20.3, 13.5, 4.2, 2.9, 1.7, 1.3],
+ "Gesundheitswesen (allgemein)": [55.7, 15.3, 4.9, 17.4, 1.6, 1.3, 0, 1.1],
+ "Krankenhäuser (ohne Forschung und Lehre)": [64.1, 40.8, 10.4, 15.8, 1.7, 1.6, 0, 1.2],
+ "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung": [61.7, 33.6, 9.2, 15.9, 1.7, 1.6, 0, 0.9],
+ "Medizinische Einrichtungen für nicht stationäre Versorgung": [51.2, 8.6, 2.2, 18.3, 1.4, 1, 0, 1.3],
+ "Gebäude für Reha": [null, 59.4, 22.1, 6, 14.6, 0.9, 0.7, 0, 3.5],
+ "Bildungseinrichtungen (allgemein)": [49.7, 19.5, 4.1, 5.5, 0.2, 0.2, 0, 0.6],
+ "Schulen": [49.3, 22.4, 3.9, 5.5, 0.3, 0.2, 0, 0.6],
+ "Kinderbetreuungseinrichtungen": [50.4, 17.3, 4.2, 5.5, 0.1, 0.1, 0, 0.6],
+ "Kultureinrichtungen (allgemein)": [55.9, 7.5, 6.7, 9, 1.6, 1.2, 0.1, 0.3],
+ "Bibliotheken/Archive": [49, 5, 2.1, 14.3, 0.5, 0.4, 0, 0.3],
+ "Ausstellungsgebäude": [57.6, 7.7, 6.3, 7.8, 1.7, 1.3, 0.3, 0.2],
+ "Veranstaltungsgebäude": [58.4, 9.1, 7, 8.9, 1.3, 0.9, 0.1, 0.3],
+ "Gemeinschafts-/Gemeindehäuser": [63.6, 10, 5.6, 10.8, 0.8, 0.6, 0.1, 6],
+ "Opern/Theater": [58.8, 7.6, 9.1, 8.6, 2, 1.3, 0, 0.9],
+ "Sporteinrichtungen (allgemein)": [65.5, 27.3, 6.4, 14.5, 0.6, 0.6, 0, 1.9],
+ "Sporthallen": [68.6, 22, 4.6, 14.3, 0.2, 0.2, 0, 0.1],
+ "Fitnessstudios": [60.6, 62.2, 11.9, 24.5, 4, 4.2, 0, 8.9],
+ "Schwimmhallen": [63.8, 24.7, 8.3, 13.4, 1.1, 1.1, 30, 7.3],
+ "Gebäude für Sportaußenanlagen": [75.2, 22.5, 5.7, 10.2, 0, 0, 0, 5.5],
+ "Verpflegungseinrichtungen (allgemein)": [75.9, 77.7, 16.6, 18.1, 3.5, 3, 0, 24.8],
+ "Beherbergungsstätten (allgemein)": [52.1, 86, 9.1, 9.1, 3.3, 2.7, 0, 7],
+ "Hotels/Pensionen": [51.2, 89.1, 9.1, 8.6, 3.5, 2.9, 0, 6.8],
+ "Jugendherbergen u. Ferienhäuser": [63.4, 50.9, 1.9, 12.6, 0, 0, 0, 8.8],
+ "Gaststätten": [77.8, 79, 13.7, 19.7, 3.8, 3.3, 0, 25.2],
+ "Mensen u. Kantinen": [67, 67.3, 21, 11.4, 0.7, 0.5, 0, 22.7],
+ "Gewerbliche und industrielle Gebäude (allgemein)": [38.7, 12.6, 2.1, 9.6, 0.8, 0.5, 0, 12.2],
+ "Gewerbliche und industrielle Gebäude - schwere Arbeit": [null, 37.8, 20, 3.1, 11.8, 1, 0.6, 0, 22.6],
+ "Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit": [36, 24.2, 3.8, 13, 2.1, 1.2, 0, 24.9],
+ "Gewerbliche und industrielle Gebäude - leichte Arbeit": [null, 38.1, 19.8, 3.3, 15.2, 1.9, 1.1, 0, 22.3],
+ "Gebäude für Lagerung": [38.1, 19.3, 3.3, 13.2, 1.7, 1, 0, 21.6],
+ "Verkaufsstätten (allgemein)": [47.9, 7.6, 5.6, 16.3, 2.6, 2, 0, 6.9],
+ "Kaufhäuser": [45.9, 6.4, 6, 16.6, 1.1, 0.9, 0, 2.7],
+ "Kaufhauszentren/Einkaufszentren": [47.3, 11.1, 7.4, 16.6, 4.6, 3.5, 0.1, 5.5],
+ "Märkte": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 10.5],
+ "Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 72.5],
+ "Läden": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 2.1],
+ "Läden mit sehr hohem Anteil von Kühlung für Lebensmittel": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 54.1],
+ "Fernmeldetechnik": [38.4, 4, 3.4, 16, 0, 0, 0, 53.7]
+}
\ No newline at end of file
diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts
index 1e7b3e77..c0df7134 100644
--- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts
+++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts
@@ -1,33 +1,32 @@
-import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
+import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
import { Enums } from "@ibcornelsen/database/client";
import moment from "moment";
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
- ausweis: VerbrauchsausweisWohnenClient
+ ausweis: VerbrauchsausweisWohnenClient,
+ aufnahme: AufnahmeClient
): number {
- if (!ausweis.aufnahme.objekt) {
- return 0
- }
-
let faktorKeller = 1.2;
// Falls das Gebäude einen Keller besitzt der Beheizt ist erhöhen wir die Nutzfläche um 15%
- if (ausweis.aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (ausweis.aufnahme.einheiten || 1) <= 2) {
+ if (aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (aufnahme.einheiten || 1) <= 2) {
faktorKeller = 1.35;
}
- if ((ausweis.aufnahme.nutzflaeche || 0) > 0) {
- return ausweis.aufnahme.nutzflaeche || 0;
+ if ((aufnahme.nutzflaeche || 0) > 0) {
+ return aufnahme.nutzflaeche || 0;
} else {
- return (ausweis.aufnahme.flaeche || 0) * faktorKeller;
+ return (aufnahme.flaeche || 0) * faktorKeller;
}
}
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
- ausweis: VerbrauchsausweisWohnenClient
+ ausweis: VerbrauchsausweisWohnenClient,
+ aufnahme: AufnahmeClient,
+ objekt: ObjektClient
) {
- if (!ausweis.aufnahme || !ausweis.aufnahme.objekt) {
+ if (!aufnahme || !objekt || !ausweis) {
return null;
}
@@ -50,7 +49,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
}];
try {
- const response = await getKlimafaktoren(ausweis.startdatum, ausweis.aufnahme.objekt.plz)
+ const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz)
if (response) {
klimafaktoren = response
@@ -65,16 +64,16 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktor(
- ausweis.aufnahme.brennstoff_1 as string,
+ aufnahme.brennstoff_1 as string,
ausweis.einheit_1 as string
);
let brennstoff_2 = getHeizwertfaktor(
- ausweis.aufnahme.brennstoff_2 as string,
+ aufnahme.brennstoff_2 as string,
ausweis.einheit_2 as string
);
const energetischeNutzflaeche =
- energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis);
+ energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis, aufnahme);
let energieVerbrauchGesamt_1 =
((ausweis.verbrauch_1 || 0) +
@@ -91,10 +90,10 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
let energieVerbrauchWarmwasser_2 = 0;
let leerstandsZuschlagWarmwasser = 0;
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
- let leerstand = (ausweis.aufnahme.leerstand || 0) / 100;
+ let leerstand = (aufnahme.leerstand || 0) / 100;
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
- if (ausweis.aufnahme.solarsystem_warmwasser) {
+ if (aufnahme.solarsystem_warmwasser) {
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
energieVerbrauchWarmwasser_1 =
energieVerbrauchGesamt_1 *
@@ -117,7 +116,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
leerstand *
(energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
} else {
- if (ausweis.aufnahme.solarsystem_warmwasser) {
+ if (aufnahme.solarsystem_warmwasser) {
// Wenn Warmwasser Anteil unbekannt und Solarsystem
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3;
energieVerbrauchWarmwasser_2 = 0;
@@ -189,7 +188,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
let primaerfaktorww = 0;
let primaerfaktorww_1 = 0;
- if (!ausweis.warmwasser_enthalten && ausweis.aufnahme.durchlauf_erhitzer) {
+ if (!ausweis.warmwasser_enthalten && aufnahme.durchlauf_erhitzer) {
primaerfaktorww = 1.8;
primaerfaktorww_1 = 1.8;
} else {
diff --git a/src/lib/Berechnungen/endEnergieVerbrauch.ts b/src/lib/Berechnungen/endEnergieVerbrauch.ts
index 94b3dd7d..86da72c7 100644
--- a/src/lib/Berechnungen/endEnergieVerbrauch.ts
+++ b/src/lib/Berechnungen/endEnergieVerbrauch.ts
@@ -1,8 +1,9 @@
-import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
+import type { VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
+import { AufnahmeClient, ObjektClient } from "#components/Ausweis/types.js";
-export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise {
- const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
+export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen, aufnahme: AufnahmeClient, objekt: ObjektClient): Promise {
+ const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
if (!result) {
return 0;
diff --git a/src/lib/XML/getEmpfehlungen.ts b/src/lib/XML/getEmpfehlungen.ts
index 658b2f91..5bb3e34b 100644
--- a/src/lib/XML/getEmpfehlungen.ts
+++ b/src/lib/XML/getEmpfehlungen.ts
@@ -1,34 +1,36 @@
-import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
+import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { Enums } from "@ibcornelsen/database/client";
import moment from "moment";
-export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
+export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient): {
title: string,
description: string,
- anlagenteil: string
+ anlagenteil: string,
+ amortisationszeit: string,
+ kosten: string
}[] {
- let Warmwasserrohre_gedaemmt = ausweis.aufnahme.warmwasser_rohre_gedaemmt;
- let Heizungsrohre_gedaemmt = ausweis.aufnahme.heizungsrohre_gedaemmt;
- let Waermepumpe = ausweis.aufnahme.waermepumpe;
- let Kellerwand_gedaemmt = ausweis.aufnahme.keller_wand_gedaemmt;
- let Keller = ausweis.aufnahme.keller;
- let Kellerdecke_Kalraeume_gedaemmt = ausweis.aufnahme.keller_decke_gedaemmt;
- let Brennwertkessel = ausweis.aufnahme.brennwert_kessel;
- let baujahr_anlagesanlage = ausweis.aufnahme.baujahr_heizung[0];
- let Zentralheizung = ausweis.aufnahme.zentralheizung;
- let photovoltaik = ausweis.aufnahme.photovoltaik;
- let Brennstoff = ausweis.aufnahme.brennstoff_1;
- let Aussenwand_gedaemmt = ausweis.aufnahme.aussenwand_gedaemmt;
- let Dachgeschoss = ausweis.aufnahme.dachgeschoss;
- let Dachgeschoss_gedaemmt = ausweis.aufnahme.dachgeschoss_gedaemmt;
- let Oberste_Geschossdecke_gedaemmt = ausweis.aufnahme.oberste_geschossdecke_gedaemmt;
- let Einfachglas = ausweis.aufnahme.einfach_verglasung;
- let Doppelfenster = ausweis.aufnahme.doppel_verglasung;
- let Fenster_teilw_undicht = ausweis.aufnahme.fenster_teilweise_undicht;
+ let Warmwasserrohre_gedaemmt = aufnahme.warmwasser_rohre_gedaemmt;
+ let Heizungsrohre_gedaemmt = aufnahme.heizungsrohre_gedaemmt;
+ let Waermepumpe = aufnahme.waermepumpe;
+ let Kellerwand_gedaemmt = aufnahme.keller_wand_gedaemmt;
+ let Keller = aufnahme.keller;
+ let Kellerdecke_Kalraeume_gedaemmt = aufnahme.keller_decke_gedaemmt;
+ let Brennwertkessel = aufnahme.brennwert_kessel;
+ let baujahr_anlagesanlage = aufnahme.baujahr_heizung[0];
+ let Zentralheizung = aufnahme.zentralheizung;
+ let photovoltaik = aufnahme.photovoltaik;
+ let Brennstoff = aufnahme.brennstoff_1;
+ let Aussenwand_gedaemmt = aufnahme.aussenwand_gedaemmt;
+ let Dachgeschoss = aufnahme.dachgeschoss;
+ let Dachgeschoss_gedaemmt = aufnahme.dachgeschoss_gedaemmt;
+ let Oberste_Geschossdecke_gedaemmt = aufnahme.oberste_geschossdecke_gedaemmt;
+ let Einfachglas = aufnahme.einfach_verglasung;
+ let Doppelfenster = aufnahme.doppel_verglasung;
+ let Fenster_teilw_undicht = aufnahme.fenster_teilweise_undicht;
let empfehlungen = [];
- if (ausweis.aufnahme.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
+ if (aufnahme.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
empfehlungen.push({
"title" : "Erneuerung der Fenster",
"description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.",
@@ -38,7 +40,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
});
}
- if (ausweis.aufnahme.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
+ if (aufnahme.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
empfehlungen.push({
"title" : "Zusätzliche Dämmung des Fußbodens des kalten Dachraumes",
"description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.",
diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts
index 0740427d..9a7d259c 100644
--- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts
+++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts
@@ -1,4 +1,4 @@
-import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
+import { AufnahmeClient, BenutzerClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
import * as fs from "fs"
import { PDFDocument, rgb, StandardFonts, TextAlignment } from "pdf-lib";
@@ -9,14 +9,14 @@ import { Heizungsstatus } from "@ibcornelsen/database/server";
/* -------------------------------- Pdf Tools ------------------------------- */
-export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient) {
+export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient) {
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
const pages = pdf.getPages()
// const template = VerbrauchsausweisWohnen2016Template as Template;
- const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
+ const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
const height = pages[0].getHeight()
const width = pages[0].getWidth()
@@ -30,7 +30,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
const marginX = 60;
const marginY = 150;
- const benutzer: typeof ausweis.benutzer = ausweis.benutzer || {
+ benutzer = benutzer || {
vorname: "Max",
name: "Mustermann",
adresse: "Musterstraße 123",
@@ -55,7 +55,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
Ausweis ID: ${ausweis.uid}
Gebäudedaten
- Adresse: ${ausweis.aufnahme.objekt.adresse}, ${ausweis.aufnahme.objekt.plz} ${ausweis.aufnahme.objekt.ort}
+ Adresse: ${objekt.adresse}, ${objekt.plz} ${objekt.ort}
@@ -80,29 +80,29 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
Gebäudetyp:
- ${ausweis.aufnahme.gebaeudetyp}
+ ${aufnahme.gebaeudetyp}
Wohnfläche:
- DIN Wohnfläche innen ${ausweis.aufnahme.flaeche} m²
+ DIN Wohnfläche innen ${aufnahme.flaeche} m²
Leerstand:
- ${ausweis.aufnahme.leerstand || 0}%
+ ${aufnahme.leerstand || 0}%
Wohnungen:
- ${ausweis.aufnahme.einheiten}
+ ${aufnahme.einheiten}
Dachgeschoss:
- ${translateHeizungsstatus[ausweis.aufnahme.dachgeschoss || "NICHT_VORHANDEN"]}
+ ${translateHeizungsstatus[aufnahme.dachgeschoss || "NICHT_VORHANDEN"]}
Keller:
- ${translateHeizungsstatus[ausweis.aufnahme.keller || "NICHT_VORHANDEN"]}
+ ${translateHeizungsstatus[aufnahme.keller || "NICHT_VORHANDEN"]}
@@ -126,14 +126,14 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
- ${ausweis.aufnahme.brennstoff_1}
+ ${aufnahme.brennstoff_1}
${ausweis.verbrauch_1} ${ausweis.einheit_1}
${ausweis.verbrauch_2} ${ausweis.einheit_1}
${ausweis.verbrauch_3} ${ausweis.einheit_1}
zusätzliche Heizquelle
- ${ausweis.aufnahme.brennstoff_2 || ""}
+ ${aufnahme.brennstoff_2 || ""}
${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""}
${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""}
${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""}
@@ -152,55 +152,55 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
-
+
Zentralheizung
-
+
Einzelöfen
-
+
Durchlauferhitzer
-
+
Standardkessel
-
+
Solarsystem für Warmwasser
-
+
Wärmepumpe
-
+
Niedertemperaturkessel
-
+
Brennwertkessel
-
+
Warmwasserrohre gedämmt
-
+
Heizungsrohre gedämmt
-
+
Zirkulation
-
+
Raumtemperaturregelung
@@ -209,15 +209,15 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
-
+
Einfachglas
-
+
Doppelverglasung
-
+
Isolierverglasung
@@ -227,25 +227,25 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
Passivhausfenster
-
+
Alle Fenster dicht
-
+
Fenster teilweise undicht
-
+
Türen teilweise undicht
-
+
Alle Türen dicht
-
+
Rollladenkästen gedämmt
@@ -254,33 +254,33 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
-
+
Kelleraußenwand gedämmt
-
+
Kellerdecke gedämmt
-
+
Außenwand gedämmt
-
+
Dachgeschoss min. 12cm gedämmt
-
+
Dachgeschoss gedämmt
-
+
Oberste Geschossdecke gedämmt
-
+
Oberste Geschossdecke min. 12cm gedämmt
diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
index 241733c9..bd8f6f6a 100644
--- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
+++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
@@ -1,5 +1,375 @@
-import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
+import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
+import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
+import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
+import { Enums } from "@ibcornelsen/database/server";
+import * as fs from "fs"
+import moment from "moment";
+import { PDFDocument, PDFFont, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
-export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
+export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
+ const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64");
+ const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
+ const pages = pdf.getPages()
+
+ // const template = VerbrauchsausweisWohnen2016Template as Template;
+
+ const berechnungen = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt);
+ console.log(berechnungen);
+
+ const empfehlungen = getEmpfehlungen(ausweis, aufnahme, objekt)
+
+ const height = pages[0].getHeight()
+
+ const font = await pdf.embedFont(StandardFonts.Helvetica)
+ const bold = await pdf.embedFont(StandardFonts.HelveticaBold)
+
+ const form = pdf.getForm()
+ form.updateFieldAppearances(font)
+
+ const fillFormField = (name: string, value: string, fontSize: number = 8, alignment: TextAlignment = TextAlignment.Left) => {
+ const field = form.getTextField(name)
+ field.setFontSize(fontSize)
+ field.setText(value)
+ field.setAlignment(alignment)
+ }
+
+ const toggleCheck = (name: string, checked: boolean = true) => {
+ const field = form.getCheckBox(name)
+
+ if (checked) {
+ field.check()
+ } else {
+ field.uncheck()
+ }
+ }
+
+ // const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
+
+ // const adresse = fillFormField("adresse", objekt.adresse)
+
+
+ // const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
+
+ // const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
+
+ // const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
+
+ // const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
+
+ // const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
+
+ // fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
+
+ // if (ausweis.warmwasser_enthalten) {
+ // fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
+ // }
+
+ // toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
+ // toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
+ // toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
+ // toggleCheck("lueftungsanlage_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung)
+
+ // toggleCheck("anlass_neubau", ausweis.ausstellgrund == "Neubau")
+ // toggleCheck("anlass_vermietung", ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Verkauf")
+ // toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
+ // toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
+
+
+ // const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude");
+
+
+ // /* -------------------------------- Seite 2 -------------------------------- */
+
+ // const co2Emissionen = fillFormField("co2emissionen", berechnungen?.co2EmissionenGesamt.toString(), 8, TextAlignment.Center)
+
+ const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => {
+ const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64"))
+ const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
+
+ // Wir müssen den berechneten Wert zwischen 0 und 1000 als Wert zwischen 0 und 1 festlegen
+ const endenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 1000
+ const primaerenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 1000
+
+ const minTranslation = 120
+ const maxTranslation = 457
+ const endenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * endenergieverbrauchTranslationPercentage;
+ const primaerenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * primaerenergieverbrauchTranslationPercentage;
+
+ const pfeilWidth = 20
+ const margin = 5;
+
+ page.drawImage(pfeilNachUnten, {
+ x: endenergieverbrauchTranslationX,
+ y: height - 215,
+ width: pfeilWidth,
+ height: 30
+ })
+
+ const endEnergieVerbrauchGesamtText = `${berechnungen?.endEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
+ const primaerEnergieVerbrauchGesamtText = `${berechnungen?.primaerEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
+
+ if (endenergieverbrauchTranslationPercentage > 0.5) {
+ page.drawText("Endenergieverbrauch", {
+ x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch", 10),
+ y: height - 193,
+ size: 10
+ })
+
+ page.drawText(endEnergieVerbrauchGesamtText, {
+ x: endenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(endEnergieVerbrauchGesamtText, 10),
+ y: height - 207,
+ size: 10,
+ font: bold
+ })
+ } else {
+ page.drawText("Endenergieverbrauch", {
+ x: endenergieverbrauchTranslationX + pfeilWidth + margin,
+ y: height - 193,
+ size: 10
+ })
+ page.drawText(endEnergieVerbrauchGesamtText, {
+ x: endenergieverbrauchTranslationX + pfeilWidth + margin,
+ y: height - 207,
+ size: 10,
+ font: bold
+ })
+ }
+
+ page.drawImage(pfeilNachOben, {
+ x: primaerenergieverbrauchTranslationX,
+ y: height - 298,
+ width: pfeilWidth,
+ height: 30
+ })
+
+ if (endenergieverbrauchTranslationPercentage > 0.5) {
+ page.drawText("Primärenergieverbrauch", {
+ x: primaerenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Primärenergieverbrauch", 10),
+ y: height - 280,
+ size: 10
+ })
+
+ page.drawText(primaerEnergieVerbrauchGesamtText, {
+ x: primaerenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(primaerEnergieVerbrauchGesamtText, 10),
+ y: height - 294,
+ size: 10,
+ font: bold
+ })
+ } else {
+ page.drawText("Primärenergieverbrauch", {
+ x: primaerenergieverbrauchTranslationX + pfeilWidth + margin,
+ y: height - 280,
+ size: 10
+ })
+ page.drawText(primaerEnergieVerbrauchGesamtText, {
+ x: primaerenergieverbrauchTranslationX + pfeilWidth + margin,
+ y: height - 294,
+ size: 10,
+ font: bold
+ })
+ }
+ }
+
+ addEnergieverbrauchSkalaPfeile(pages[1])
+ addEnergieverbrauchSkalaPfeile(pages[2])
+
+ // const primaerenergiebedarfIst = fillFormField("primaerenergiebedarf_ist", berechnungen?.primaerEnergieVerbrauchGesamt.toString())
+
+
+ /* -------------------------------- Seite 3 -------------------------------- */
+
+ // Verbräuche
+
+ const addVerbrauchGenerator = () => {
+ let i = 0;
+ let yOffset = 14.6;
+ const initialHeight = 435
+ const initialXOffset = 36;
+ return (zeitraum_von?: string, zeitraum_bis?: string, energietraeger?: string, primaerfaktor?: string, energieverbrauch?: string, anteil_warmwasser?: string, anteil_heizung?: string, klimafaktor?: string) => {
+ pages[2].drawText(zeitraum_von || "", {
+ x: initialXOffset,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(zeitraum_bis || "", {
+ x: initialXOffset + 47,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(energietraeger || "", {
+ x: initialXOffset + 94,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(primaerfaktor || "", {
+ x: initialXOffset + 317,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(energieverbrauch || "", {
+ x: initialXOffset + 351,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(anteil_warmwasser || "", {
+ x: initialXOffset + 402,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(anteil_heizung || "", {
+ x: initialXOffset + 453,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[2].drawText(klimafaktor || "", {
+ x: initialXOffset + 504,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+ i++;
+ }
+ }
+
+ const addVerbrauch = addVerbrauchGenerator();
+
+ addVerbrauch(
+ moment(ausweis.startdatum).format("MM.YYYY"),
+ moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
+ aufnahme.brennstoff_1,
+ berechnungen?.primaerfaktor.toString(),
+ Math.round(berechnungen?.verbrauch_1_kwh).toString(),
+ Math.round(
+ berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_1_kwh
+ ).toString(),
+ Math.round(
+ berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_1_kwh
+ ).toString(),
+ berechnungen?.klimafaktoren[0].klimafaktor.toString()
+ );
+
+ addVerbrauch(
+ moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
+ moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
+ aufnahme.brennstoff_1,
+ berechnungen?.primaerfaktor.toString(),
+ Math.round(berechnungen?.verbrauch_2_kwh).toString(),
+ Math.round(
+ berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_2_kwh
+ ).toString(),
+ Math.round(
+ berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_2_kwh
+ ).toString(),
+ berechnungen?.klimafaktoren[0].klimafaktor.toString()
+ );
+
+ addVerbrauch(
+ moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
+ moment(ausweis.startdatum).add(3, "year").format("MM.YYYY"),
+ aufnahme.brennstoff_1,
+ berechnungen?.primaerfaktor.toString(),
+ Math.round(berechnungen?.verbrauch_3_kwh).toString(),
+ Math.round(
+ berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_3_kwh
+ ).toString(),
+ Math.round(
+ berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_3_kwh
+ ).toString(),
+ berechnungen?.klimafaktoren[0].klimafaktor.toString()
+ );
+
+ /* -------------------------------- Seite 4 -------------------------------- */
+
+ const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => {
+ const lines = []
+
+ let currentLine = ""
+ for (const char of text) {
+ if (font.widthOfTextAtSize(currentLine + char, fontSize) <= size) {
+ currentLine += char;
+ } else {
+ lines.push(currentLine)
+ currentLine = char;
+ }
+ }
+
+ lines.push(currentLine)
+
+ return lines.join("\n")
+ }
+
+ const addEmpfehlungenGenerator = () => {
+ let i = 0;
+ let yOffset = 43;
+ const initialHeight = 568
+ const initialXOffset = 36;
+ return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => {
+ pages[3].drawText((i + 1).toString(), {
+ x: initialXOffset,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[3].drawText(splitToSize(bauteil || "", 70, font, 8), {
+ x: initialXOffset + 25,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font,
+ lineHeight: 10
+ })
+
+ pages[3].drawText(splitToSize(beschreibung || "", 230, font, 8), {
+ x: initialXOffset + 98,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font,
+ lineHeight: 10
+ })
+
+
+
+ pages[3].drawText(amortisationszeit || "", {
+ x: initialXOffset + 403,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[3].drawText(kosten || "", {
+ x: initialXOffset + 451,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+ i++;
+ }
+ }
+
+ const addEmpfehlung = addEmpfehlungenGenerator()
+
+ for (const empfehlung of empfehlungen) {
+ addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten)
+ }
+
+
+
+ // pdf.getForm().flatten()
+
+ return pdf.save();
}
\ No newline at end of file
diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
index 02f95640..0f3f2bd0 100644
--- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
+++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
@@ -1,9 +1,10 @@
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
+import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
import { Enums } from "@ibcornelsen/database/server";
import * as fs from "fs"
import moment from "moment";
-import { PDFDocument, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
+import { PDFDocument, PDFFont, PDFPage, RotationTypes, StandardFonts, TextAlignment } from "pdf-lib";
/* -------------------------------- Pdf Tools ------------------------------- */
@@ -14,7 +15,8 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
// const template = VerbrauchsausweisWohnen2016Template as Template;
- const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
+ const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
+ const empfehlungen = getEmpfehlungen(ausweis, aufnahme, objekt)
const height = pages[0].getHeight()
@@ -41,20 +43,20 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
}
}
- const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp)
+ const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
const adresse = fillFormField("adresse", objekt.adresse)
- const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil)
+ const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
- const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude.toString())
+ const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
- const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung.toString())
+ const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
- const einheiten = fillFormField("einheiten", aufnahme.einheiten.toString())
+ const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
- const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche.toString()}m²`)
+ const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
@@ -72,20 +74,22 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
+ console.log(bilder);
+
+
const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude");
/* -------------------------------- Seite 2 -------------------------------- */
- const co2Emissionen = fillFormField("co2emissionen", berechnungen.co2EmissionenGesamt.toString(), 8, TextAlignment.Center)
const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => {
const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64"))
const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
// Wir müssen den berechneten Wert zwischen 0 und 250 als Wert zwischen 0 und 1 festlegen
- const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt)) / 250
- const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt)) / 250
+ const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 250
+ const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 250
const minTranslation = 68
const maxTranslation = 504
@@ -167,11 +171,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
}
}
- addEnergieverbrauchSkalaPfeile(pages[1])
- addEnergieverbrauchSkalaPfeile(pages[2])
-
- const primaerenergiebedarfIst = fillFormField("primaerenergiebedarf_ist", berechnungen?.primaerEnergieVerbrauchGesamt.toString())
-
+ addEnergieverbrauchSkalaPfeile(pages[2])
/* -------------------------------- Seite 3 -------------------------------- */
@@ -182,57 +182,57 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
let yOffset = 14.6;
const initialHeight = 435
const initialXOffset = 36;
- return (zeitraum_von: string, zeitraum_bis: string, energietraeger: string, primaerfaktor: string, energieverbrauch: string, anteil_warmwasser: string, anteil_heizung: string, klimafaktor: string) => {
- pages[2].drawText(zeitraum_von, {
+ return (zeitraum_von?: string, zeitraum_bis?: string, energietraeger?: string, primaerfaktor?: string, energieverbrauch?: string, anteil_warmwasser?: string, anteil_heizung?: string, klimafaktor?: string) => {
+ pages[2].drawText(zeitraum_von || "", {
x: initialXOffset,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(zeitraum_bis, {
+ pages[2].drawText(zeitraum_bis || "", {
x: initialXOffset + 47,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(energietraeger, {
+ pages[2].drawText(energietraeger || "", {
x: initialXOffset + 94,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(primaerfaktor, {
+ pages[2].drawText(primaerfaktor || "", {
x: initialXOffset + 317,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(energieverbrauch, {
+ pages[2].drawText(energieverbrauch || "", {
x: initialXOffset + 351,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(anteil_warmwasser, {
+ pages[2].drawText(anteil_warmwasser || "", {
x: initialXOffset + 402,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(anteil_heizung, {
+ pages[2].drawText(anteil_heizung || "", {
x: initialXOffset + 453,
y: initialHeight - (i * yOffset),
size: 8,
font
})
- pages[2].drawText(klimafaktor, {
+ pages[2].drawText(klimafaktor || "", {
x: initialXOffset + 504,
y: initialHeight - (i * yOffset),
size: 8,
@@ -288,6 +288,98 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
).toString(),
berechnungen?.klimafaktoren[0].klimafaktor.toString()
);
+
+ /* -------------------------------- Seite 4 -------------------------------- */
+
+ const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => {
+ const lines = []
+
+ let currentLine = ""
+ for (const char of text) {
+ if (font.widthOfTextAtSize(currentLine + char, fontSize) <= size) {
+ currentLine += char;
+ } else {
+ lines.push(currentLine)
+ currentLine = char;
+ }
+ }
+
+ lines.push(currentLine)
+
+ return lines.join("\n")
+ }
+
+ const addEmpfehlungenGenerator = () => {
+ let i = 0;
+ let yOffset = 43;
+ const initialHeight = 568
+ const initialXOffset = 36;
+ return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => {
+ pages[3].drawText((i + 1).toString(), {
+ x: initialXOffset,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[3].drawText(splitToSize(bauteil || "", 70, font, 8), {
+ x: initialXOffset + 25,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font,
+ lineHeight: 10
+ })
+
+ pages[3].drawText(splitToSize(beschreibung || "", 230, font, 8), {
+ x: initialXOffset + 98,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font,
+ lineHeight: 10
+ })
+
+
+
+ pages[3].drawText(amortisationszeit || "", {
+ x: initialXOffset + 403,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+
+ pages[3].drawText(kosten || "", {
+ x: initialXOffset + 451,
+ y: initialHeight - (i * yOffset),
+ size: 8,
+ font
+ })
+ i++;
+ }
+ }
+
+ const addEmpfehlung = addEmpfehlungenGenerator()
+
+ for (const empfehlung of empfehlungen) {
+ addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten)
+ }
+
+
+ function addAnsichtsausweisLabel(page: PDFPage, font: PDFFont) {
+ page.drawText("Ansichtsausweis", {
+ x: page.getWidth() / 2 - font.heightAtSize(112) * 2.2, y: page.getHeight() - font.heightAtSize(112) / 2,
+ size: 112,
+ font,
+ rotate: {
+ type: RotationTypes.Degrees,
+ angle: -60
+ },
+ opacity: 0.3
+ })
+ }
+
+ for (const page of pages) {
+ addAnsichtsausweisLabel(page, font)
+ }
// pdf.getForm().flatten()
diff --git a/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf
new file mode 100644
index 00000000..a1ed6ed7
Binary files /dev/null and b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf differ
diff --git a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
index 3a0b7036..4bf65e0c 100644
--- a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
+++ b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte
@@ -2,11 +2,10 @@
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import ProgressBar from "#components/Ausweis/Progressbar.svelte";
//import Hilfe from "#components/Ausweis/Hilfe.svelte";
- import { PRICES } from "#lib/constants";
+ import { PRICES } from "#lib/constants.js";
import Bereich from "#components/labels/Bereich.svelte";
- import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
@@ -29,20 +28,19 @@
import {
BedarfsausweisWohnenClient,
BenutzerClient,
+ ObjektClient,
UploadedGebaeudeBild,
+ AufnahmeClient
} from "#components/Ausweis/types.js";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
+ let ausweisart = Enums.Ausweisart.BedarfsausweisWohnen
export let ausweis: BedarfsausweisWohnenClient;
+ export let objekt: ObjektClient
+ export let aufnahme: AufnahmeClient
export let user: BenutzerClient = {} as BenutzerClient;
-
- let aufnahme = ausweis.aufnahme || {};
- let gebaeude =
- ausweis.aufnahme?.objekt || {};
- let images: (UploadedGebaeudeBild & { base64?: string })[] =
- ausweis.aufnahme?.objekt
- ?.gebaeude_bilder || [];
+ export let images: UploadedGebaeudeBild[] = []
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
@@ -159,13 +157,15 @@
}
-
@@ -173,12 +173,10 @@
Energiesausweis erstellen
-
{Energieausweis} {PRICES.BedarfsausweisWohnen[0]} €
+
{ausweisart} {PRICES.BedarfsausweisWohnen[0]} €
-
diff --git a/src/modules/Dashboard/DashboardModule.svelte b/src/modules/Dashboard/DashboardModule.svelte
index eb46bf5e..33ee0fb1 100644
--- a/src/modules/Dashboard/DashboardModule.svelte
+++ b/src/modules/Dashboard/DashboardModule.svelte
@@ -1,8 +1,11 @@
\ No newline at end of file
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte
index 8159c063..4177c481 100644
--- a/src/modules/KundendatenModule.svelte
+++ b/src/modules/KundendatenModule.svelte
@@ -1,6 +1,6 @@