get main #496

Merged
IB-Cornelsen merged 2 commits from main into Jens 2025-04-07 02:11:57 +00:00
25 changed files with 691 additions and 426 deletions

View File

@@ -0,0 +1,106 @@
/*
Warnings:
- The primary key for the `Anteilshaber` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `ApiRequests` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Aufnahme` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `BedarfsausweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `BedarfsausweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Bild` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Event` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `GEGEinpreisung` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `GEGNachweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `GEGNachweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Objekt` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Rechnung` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Tickets` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `Unterlage` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `VerbrauchsausweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `VerbrauchsausweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- The primary key for the `benutzer` table will be changed. If it partially fails, the table could be left without primary key constraint.
*/
-- AlterTable
ALTER TABLE "Anteilshaber" DROP CONSTRAINT "Anteilshaber_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Anteilshaber_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "ApiRequests" DROP CONSTRAINT "ApiRequests_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "ApiRequests_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Aufnahme" DROP CONSTRAINT "Aufnahme_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Aufnahme_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "BedarfsausweisGewerbe_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "BedarfsausweisWohnen" DROP CONSTRAINT "BedarfsausweisWohnen_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "BedarfsausweisWohnen_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Bild" DROP CONSTRAINT "Bild_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Bild_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Event" DROP CONSTRAINT "Event_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Event_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "GEGEinpreisung" DROP CONSTRAINT "GEGEinpreisung_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "GEGEinpreisung_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "GEGNachweisGewerbe_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "GEGNachweisWohnen_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Objekt" DROP CONSTRAINT "Objekt_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Objekt_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Rechnung" DROP CONSTRAINT "Rechnung_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Rechnung_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Tickets" DROP CONSTRAINT "Tickets_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Tickets_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "Unterlage" DROP CONSTRAINT "Unterlage_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "Unterlage_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "VerbrauchsausweisGewerbe" DROP CONSTRAINT "VerbrauchsausweisGewerbe_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "VerbrauchsausweisGewerbe_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "VerbrauchsausweisWohnen" DROP CONSTRAINT "VerbrauchsausweisWohnen_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "VerbrauchsausweisWohnen_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "benutzer" DROP CONSTRAINT "benutzer_pkey",
ALTER COLUMN "id" SET DATA TYPE VARCHAR(10),
ADD CONSTRAINT "benutzer_pkey" PRIMARY KEY ("id");

View File

@@ -1,5 +1,5 @@
model Anteilshaber {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
rolle String? @db.VarChar
privilegien BigInt?

View File

@@ -1,6 +1,6 @@
model ApiRequests {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
date DateTime @default(now()) @db.Timestamp(6)
ip String @db.VarChar(50)
method String @db.VarChar(10)

View File

@@ -13,7 +13,7 @@ enum Lueftungskonzept {
}
model Aufnahme {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
/// @zod.describe("Art des Gebäudes und seiner primären Nutzungsart")

View File

@@ -1,5 +1,5 @@
model BedarfsausweisGewerbe {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund?

View File

@@ -1,6 +1,6 @@
model BedarfsausweisWohnen {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
benutzer_id String?
ausstellgrund Ausstellgrund?
registriernummer String? @db.VarChar

View File

@@ -5,7 +5,7 @@ enum BenutzerRolle {
}
model Benutzer {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
name String? @db.VarChar(50)
vorname String? @db.VarChar(50)
email String @unique(map: "benutzer_email_idx") @db.VarChar(255)

View File

@@ -8,7 +8,7 @@ enum BilderKategorie {
}
model Bild {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
kategorie BilderKategorie
name String

View File

@@ -3,7 +3,7 @@
// Hier werden beispielsweise Events wie "Nachricht Verschickt" gespeichert.
// Diese Events werden dann in der Admin-Oberfläche angezeigt.
model Event {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
date DateTime @default(now()) @db.Timestamp(6)
title String @db.VarChar(255)

View File

@@ -6,7 +6,7 @@ enum Einpreisungsstatus {
}
model GEGEinpreisung {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
empfaenger String? @db.VarChar
strasse String? @db.VarChar

View File

@@ -1,5 +1,5 @@
model GEGNachweisGewerbe {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund?

View File

@@ -1,5 +1,5 @@
model GEGNachweisWohnen {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund?

View File

@@ -1,5 +1,5 @@
model Objekt {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
latitude Float?
longitude Float?

View File

@@ -24,7 +24,7 @@ enum AusweisTyp {
}
model Rechnung {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
empfaenger String? @db.VarChar
strasse String? @db.VarChar

View File

@@ -8,7 +8,7 @@ enum TicketStatus {
}
model Tickets {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
created_at DateTime @default(now())
updated_at DateTime? @updatedAt
deleted_at DateTime?

View File

@@ -5,7 +5,7 @@ enum UnterlagenKategorie {
}
model Unterlage {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
name String?
kategorie String?
mime String

View File

@@ -1,6 +1,6 @@
model VerbrauchsausweisGewerbe {
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
ausstellgrund Ausstellgrund?
registriernummer String? @db.VarChar
zusaetzliche_heizquelle Boolean?

View File

@@ -1,7 +1,7 @@
model VerbrauchsausweisWohnen {
/// @zod.describe("ID des Ausweises")
id String @id @unique @db.VarChar(8)
id String @id @unique @db.VarChar(10)
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund?
/// @zod.describe("Die Registriernummer des Ausweises")

View File

@@ -12,8 +12,8 @@ export const createCaller = createCallerFactory({
"admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"),
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
@@ -31,10 +31,10 @@ export const createCaller = createCallerFactory({
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
"ticket": await import("../src/pages/api/ticket/index.ts"),
"user": await import("../src/pages/api/user/index.ts"),
"user/self": await import("../src/pages/api/user/self.ts"),
"verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
"user": await import("../src/pages/api/user/index.ts"),
"user/self": await import("../src/pages/api/user/self.ts"),
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),

View File

@@ -1,77 +1,106 @@
<script lang="ts">
let showPopup = true;
let popupContent = null;
function closePopup() {
showPopup = false;
popupContent = null;
}
</script>
{#if showPopup}
<div class="popup-overlay">
<div class="popup-content" on:keydown|stopPropagation on:keyup|stopPropagation on:keypress|stopPropagation>
<button class="close-button" on:click={closePopup}>X</button>
<div class="popup-title">Wichtige Info zur Neuentwicklung</div>
<div class="popup-body">
<p>
Wie seit längerem angekündigt ist es jetzt endlich soweit. Seit dem <b>07.04.2025</b> ist unser neues System online. Das <strong>Front- und Backend wurde komplett neu entwickelt</strong> und folgende Neuerungen wurden durchgeführt:
</p>
<ul class="popup-list">
<li>Intuitivere Benutzerführung durch dynamische Infoslides</li>
<li>Optimierung des Bestellprozesses</li>
<li>Neues Widget <a href="/welcher-energieausweis/">"Welcher Energieausweis?"</a> zur Benutzerführung. Es werden jetzt alle <b>Energieausweise und GEG-Berechnungen</b> für Wohnen und Gewerbe abgebildet.</li>
<li>Das <b>Widget wird in Ihrem Branding</b> (Farbe und Schriftart) wenn gewünscht zur Verfügung gestellt (entweder als Code oder iframe).</li>
<li>Implementierung der <b>DIN18599</b> für Wohngebäude inkl. Darstellung aller Rechenschritte gem. DIN18599 Formblättern.</li>
<li>Erweiterung der FAQ's und Arbeitsmaterialien</li>
<li>API Schnittstelle</li>
<li><b>Kundendashboard</b> mit Gebäudeübersicht und Ausweisübersicht pro Gebäude. Hier können aus früheren Ausweisen neue Ausweise per Klick erstellt werden. Oder weiterführende GEG-Berechnungen auf Grundlage der bestehenden Daten.</li>
</ul>
<p>
Wir freuen uns, Ihnen die neuen Funktionen ab sofort zur Verfügung zu stellen. Das neue System ist <strong>responsive</strong> und kann auf allen Endgeräten genutzt werden. Im Zuge der Neuentwicklung haben wir auch die <strong>Preise</strong> angepasst. Diese sind ab dem <b>06.04.2025</b> gültig.<br><br>
<b>Sprechen Sie uns doch gerne an falls Sie an einer Kooperation interessiert sind.</b> Wir freuen uns auf Ihr Feedback!
</p>
import Cookies from "js-cookie";
import moment from "moment";
<style>
</style>
</div>
</div>
{/if}
<style lang="scss">
.popup-body {
font-size: 1rem;
line-height: 1.5;
margin-bottom: 1rem;
let showPopup = Cookies.get("seen-info-popup") !== "1";
.popup-list {
list-style-type: disc;
margin-left: 1.5rem;
padding-left: 0.5rem;
function closePopup() {
showPopup = false;
Cookies.set("seen-info-popup", "1", {
domain: `.${window.location.hostname}`,
path: "/",
expires: moment().add(30, "days").toDate()
})
}
.popup-list li {
margin-bottom: 0.5rem;
}
.popup-overlay {
@apply fixed inset-0 bg-black bg-opacity-50 flex justify-center items-center;
}
.popup-content {
@apply w-3/4 bg-white p-4 rounded-lg shadow-lg relative;
}
.close-button {
@apply absolute top-3 right-3 bg-secondary text-white rounded-full p-2 cursor-pointer;
}
.popup-title {
@apply top-6 left-8 text-3xl font-bold mb-2;
}
$: {
if (showPopup) {
document.body.style.overflow = "hidden"
} else {
document.body.style.overflow = "auto"
}
}
</script>
{#if showPopup}
<div class="fixed w-full h-full inset-0 bg-black bg-opacity-50 flex justify-center items-center">
<div
class="w-3/4 bg-white p-4 rounded-lg shadow-lg relative"
on:keydown|stopPropagation
on:keyup|stopPropagation
on:keypress|stopPropagation
>
<button class="absolute top-3 right-3 bg-secondary text-white rounded-full p-2 cursor-pointer" on:click={closePopup}>X</button>
<div class="top-6 left-8 text-3xl font-bold mb-2">Wichtige Info zur Neuentwicklung</div>
<div class="popup-body">
<p>
Wie seit längerem angekündigt ist es jetzt endlich soweit. Seit
dem <b>07.04.2025</b> ist unser neues System online. Das
<strong>Front- und Backend wurde komplett neu entwickelt</strong
> und folgende Neuerungen wurden durchgeführt:
</p>
<ul class="popup-list">
<li>Intuitivere Benutzerführung durch dynamische Infoslides</li>
<li>Optimierung des Bestellprozesses</li>
<li>
Neues Widget <a href="/welcher-energieausweis/"
>"Welcher Energieausweis?"</a
>
zur Benutzerführung. Es werden jetzt alle
<b>Energieausweise und GEG-Berechnungen</b> für Wohnen und Gewerbe
abgebildet.
</li>
<li>
Das <b>Widget wird in Ihrem Branding</b> (Farbe und Schriftart)
wenn gewünscht zur Verfügung gestellt (entweder als Code oder
iframe).
</li>
<li>
Implementierung der <b>DIN18599</b> für Wohngebäude inkl. Darstellung
aller Rechenschritte gem. DIN18599 Formblättern.
</li>
<li>Erweiterung der FAQ's und Arbeitsmaterialien</li>
<li>API Schnittstelle</li>
<li>
<b>Kundendashboard</b> mit Gebäudeübersicht und Ausweisübersicht
pro Gebäude. Hier können aus früheren Ausweisen neue Ausweise
per Klick erstellt werden. Oder weiterführende GEG-Berechnungen
auf Grundlage der bestehenden Daten.
</li>
</ul>
<p>
Wir freuen uns, Ihnen die neuen Funktionen ab sofort zur
Verfügung zu stellen. Das neue System ist <strong
>responsive</strong
>
und kann auf allen Endgeräten genutzt werden. Im Zuge der Neuentwicklung
haben wir auch die <strong>Preise</strong>
angepasst. Diese sind ab dem <b>06.04.2025</b> gültig.<br /><br
/>
<b
>Sprechen Sie uns doch gerne an falls Sie an einer
Kooperation interessiert sind.</b
> Wir freuen uns auf Ihr Feedback!
</p>
</div>
</div>
</div>
{/if}
<style lang="scss">
.popup-body {
font-size: 1rem;
line-height: 1.5;
margin-bottom: 1rem;
}
.popup-list {
list-style-type: disc;
margin-left: 1.5rem;
padding-left: 0.5rem;
}
.popup-list li {
margin-bottom: 0.5rem;
}
</style>

View File

@@ -1,79 +1,108 @@
<script lang="ts">
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import Progressbar from "#components/Ausweis/Progressbar.svelte";
import Bereich from "#components/labels/Bereich.svelte";
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import GebaeudeVolumen from "#components/Ausweis/GebaeudeVolumen.svelte";
import Fensterflaechen from "#components/Ausweis/Fensterflaechen.svelte";
import LueftungKuehlung from "#components/Ausweis/LueftungKuehlung.svelte";
import Fensterflaechen from "#components/Ausweis/Fensterflaechen.svelte";
import LueftungKuehlung from "#components/Ausweis/LueftungKuehlung.svelte";
import SanierungszustandHeizungsanlage from "#components/Ausweis/SanierungszustandHeizungsanlage.svelte";
import SanierungszustandFensterTueren from "#components/Ausweis/SanierungszustandFensterTueren.svelte";
import SanierungszustandWaermedammung from "#components/Ausweis/SanierungszustandWaermedammung.svelte";
import AusweisPreviewContainer from "#components/Ausweis/AusweisPreviewContainer.svelte";
import moment from "moment";
import { Benutzer, Enums } from "#lib/client/prisma.js";
import {
BedarfsausweisWohnenClient,
ObjektClient,
BildClient,
AufnahmeClient
AufnahmeClient,
} from "#components/Ausweis/types.js";
export let ausweis: BedarfsausweisWohnenClient;
export let objekt: ObjektClient
export let aufnahme: AufnahmeClient
export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient;
export let user: Benutzer | null;
export let ausweistyp: Enums.AusweisTyp
export let bilder: BildClient[] = []
export let ausweistyp: Enums.AusweisTyp;
export let bilder: BildClient[] = [];
export let id: string | null;
export let loadFromDatabase: boolean = false
export let loadFromDatabase: boolean = false;
// Wir holen die daten aus dem LocalStorage falls
// Der Nutzer kein Admin ist
// Der Ausweis noch nicht gespeichert wurde
// oder der Ausweis bereits gespeichert wurde aber die Daten im localStorage neuer sind als die Daten aus der Datenbank.
if (((user && user.rolle !== Enums.BenutzerRolle.ADMIN) || !user) && !loadFromDatabase && (!ausweis.updated_at || moment(localStorage.getItem("bedarfsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) {
const localStorageAusweis = localStorage.getItem("bedarfsausweis-wohnen.ausweis");
if (
((user && user.rolle !== Enums.BenutzerRolle.ADMIN) || !user) &&
!loadFromDatabase &&
(!ausweis.updated_at ||
moment(
localStorage.getItem("bedarfsausweis-wohnen.updated_at") ||
new Date()
).isAfter(ausweis.updated_at))
) {
const localStorageAusweis = localStorage.getItem(
"bedarfsausweis-wohnen.ausweis"
);
if (localStorageAusweis) {
ausweis = JSON.parse(localStorageAusweis)
ausweis = JSON.parse(localStorageAusweis);
}
const localStorageAufnahme = localStorage.getItem("bedarfsausweis-wohnen.aufnahme");
const localStorageAufnahme = localStorage.getItem(
"bedarfsausweis-wohnen.aufnahme"
);
if (localStorageAufnahme) {
aufnahme = JSON.parse(localStorageAufnahme)
aufnahme = JSON.parse(localStorageAufnahme);
}
const localStorageObjekt = localStorage.getItem("bedarfsausweis-wohnen.objekt");
const localStorageObjekt = localStorage.getItem(
"bedarfsausweis-wohnen.objekt"
);
if (localStorageObjekt) {
objekt = JSON.parse(localStorageObjekt)
objekt = JSON.parse(localStorageObjekt);
}
const localStorageBilder = localStorage.getItem("bedarfsausweis-wohnen.bilder");
const localStorageBilder = localStorage.getItem(
"bedarfsausweis-wohnen.bilder"
);
if (localStorageBilder) {
bilder = JSON.parse(localStorageBilder)
bilder = JSON.parse(localStorageBilder);
}
}
$: {
if (!blockLocalStorageSync) {
localStorage.setItem("bedarfsausweis-wohnen.ausweis", JSON.stringify(ausweis))
localStorage.setItem("bedarfsausweis-wohnen.aufnahme", JSON.stringify(aufnahme))
localStorage.setItem("bedarfsausweis-wohnen.objekt", JSON.stringify(objekt))
localStorage.setItem("bedarfsausweis-wohnen.bilder", JSON.stringify(bilder))
localStorage.setItem("bedarfsausweis-wohnen.updated_at", moment().toString())
localStorage.setItem(
"bedarfsausweis-wohnen.ausweis",
JSON.stringify(ausweis)
);
localStorage.setItem(
"bedarfsausweis-wohnen.aufnahme",
JSON.stringify(aufnahme)
);
localStorage.setItem(
"bedarfsausweis-wohnen.objekt",
JSON.stringify(objekt)
);
localStorage.setItem(
"bedarfsausweis-wohnen.bilder",
JSON.stringify(bilder)
);
localStorage.setItem(
"bedarfsausweis-wohnen.updated_at",
moment().toString()
);
}
}
const ausweisart = Enums.Ausweisart.BedarfsausweisWohnen
const ausweisart = Enums.Ausweisart.BedarfsausweisWohnen;
const anliegen = "Energieausweis erstellen";
let form: HTMLFormElement;
@@ -81,89 +110,71 @@
let blockLocalStorageSync: boolean = false;
</script>
<div
id="skala"
class="bg-white grid grid-cols-1 px-0 sm:p-4 lg:grid-cols-2 lg:gap-x-6"
bind:this={skala}
>
<PerformanceScore bind:ausweis bind:aufnahme bind:objekt {ausweisart} />
<div id="skala" class="bg-white grid grid-cols-1 px-0 sm:p-4 lg:grid-cols-2 lg:gap-x-6" bind:this={skala}>
<PerformanceScore
bind:ausweis
bind:aufnahme={aufnahme}
bind:objekt={objekt}
{ausweisart}
/>
<Progressbar active={0} {ausweisart} {anliegen} {ausweistyp}/>
<Progressbar active={0} {ausweisart} {anliegen} {ausweistyp} />
</div>
<form id="formInput-1" bind:this={form} name="ausweis" data-cy="ausweis">
<div id="formular-box" class="formular-boxen ring-0">
<ButtonWeiterHilfe
bind:ausweis
bind:bilder
bind:user
bind:objekt
bind:aufnahme
bind:blockLocalStorageSync
{ausweisart}
showWeiter={false}
{form}
{skala}
>
</ButtonWeiterHilfe>
bind:ausweis
bind:bilder
bind:user
bind:objekt
bind:aufnahme
bind:blockLocalStorageSync
{ausweisart}
showWeiter={false}
{form}
{skala}
></ButtonWeiterHilfe>
<!-- A Prüfung der Ausweisart -->
<Bereich bereich="A" title="Prüfung der Ausweisart">
<Ausweisart
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
{ausweisart}
/>
<Ausweisart bind:objekt bind:aufnahme bind:ausweis {ausweisart} />
</Bereich>
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
>
<!-- C - Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen -->
<!-- C - Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen -->
<!-- <Bereich
bereich="C"
title="Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen"
><GebaeudeVolumen bind:ausweis /></Bereich
> -->
<Bereich
bereich="C"
title="Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen"
><GebaeudeVolumen bind:ausweis/></Bereich>
<!-- D - Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden -->
<!-- <Bereich
bereich="D"
title="Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden"
><Fensterflaechen bind:ausweis /></Bereich
> -->
<!-- D - Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden -->
<!-- E - Angabe zu Lüftung und Kühlung -->
<Bereich
bereich="D"
title="Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden"
><Fensterflaechen bind:ausweis/></Bereich>
<Bereich bereich="E" title="Angabe zu Lüftung und Kühlung"
><LueftungKuehlung bind:ausweis /></Bereich
>
<!-- E - Angabe zu Lüftung und Kühlung -->
<Bereich
bereich="E"
title="Angabe zu Lüftung und Kühlung"
><LueftungKuehlung bind:ausweis/></Bereich>
<!-- F Angaben zur Heizungsanlage -->
<Bereich bereich="F" title="Angaben zur Heizunganlage"
<!-- F Angaben zur Heizungsanlage -->
<!-- <Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images={bilder}
bind:objekt
@@ -171,44 +182,43 @@ title="Angabe zu Lüftung und Kühlung"
bind:ausweis
{ausweisart}
/></Bereich
>
<!-- G Angaben zur Fenster, Dachfenster und Türen -->
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
<!-- H Angaben zur Wärmedammung -->
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
<!-- I Gebäudebild und Energieausweis PDF Vorschau -->
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
><AusweisPreviewContainer
bind:images={bilder}
bind:ausweis
bind:objekt
bind:aufnahme
{ausweisart}
/></Bereich
>
> -->
</div>
<ButtonWeiterHilfe
<!-- G Angaben zur Fenster, Dachfenster und Türen -->
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
<!-- H Angaben zur Wärmedammung -->
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
<!-- I Gebäudebild und Energieausweis PDF Vorschau -->
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
><AusweisPreviewContainer
bind:images={bilder}
bind:ausweis
bind:objekt
bind:aufnahme
{ausweisart}
/></Bereich
>
</div>
<ButtonWeiterHilfe
bind:ausweis
bind:bilder
bind:user
@@ -219,8 +229,5 @@ title="Angabe zu Lüftung und Kühlung"
showWeiter={true}
{form}
{skala}
>
</ButtonWeiterHilfe>
></ButtonWeiterHilfe>
</form>

View File

@@ -5,201 +5,307 @@ import ProduktVergleichGewerbe from "#components/design/content/ProduktVergleich
import WelcherAusweisWidget from "#components/widgets/ibcornelsen/WelcherAusweisWidget_ibcornelsen.svelte";
import TextboxCardTemplate from "#components/design/content/TextboxCardTemplate.svelte";
import InfoPopup from "#components/design/content/InfoPopup.svelte";
---
<Layout title="Energieausweis online erstellen - Online Energieausweis">
<h1>Ihr Partner für Energieausweise und GEG Nachweise</h1>
<p>Ob für Vermietung, Verkauf, Modernisierung, Neubau oder zur Vorlage bei Ihrer Bank -
wir erstellen den passenden Energieausweis oder GEG-Nachweis für Ihr Objekt.
Mit <span>18 Jahren Erfahrung</span> sind wir der richtige Ansprechpartner
für Hauseigentümer, Bauherren, Makler und Verwalter.</p>
<h2>Machen Sie hier den <span>online Check</span> welcher Energieausweis der Richtige für Sie ist:</h2>
<div class="mt-4 mb-6">
<WelcherAusweisWidget client:load></WelcherAusweisWidget>
</div>
<h2>Erfüllen Sie die gesetzlichen Vorgaben des <span>GEG 2024</span>. Mit uns profitieren Sie von:</h2>
<p>
Rechtssicherer Bearbeitung <span class="text-green-700;">✔</span>&nbsp;&nbsp;&nbsp;
Langjähriger Erfahrung <span class="text-green-700;">✔</span>&nbsp;&nbsp;&nbsp;
Schneller <span>online Erstellung </span><span class="text-green-700;">✔</span>
Ob für Vermietung, Verkauf, Modernisierung, Neubau oder zur Vorlage bei
Ihrer Bank - wir erstellen den passenden Energieausweis oder
GEG-Nachweis für Ihr Objekt. Mit <span>18 Jahren Erfahrung</span> sind wir
der richtige Ansprechpartner für Hauseigentümer, Bauherren, Makler und Verwalter.
</p>
<h2>
Machen Sie hier den <span>online Check</span> welcher Energieausweis der
Richtige für Sie ist:
</h2>
<h2>GEG gilt ab 1. Mai 2021 und löst die EnEV ab</h2>
<TextboxCardTemplate
TitelName="Folgende Punkte ändern sich:"
BulletPoints={[
["Erhöhte Sorgfaltspflicht bei der Erstellung der Energieausweise. Zur Einschätzung von Modernisierungsempfehlungen sind jetzt Fotos relevanter Gebäudebereiche erforderlich. Dazu zählen Dach, Fenster, Heizung und Außenwand. Diese Maßnahmen sorgen für präzisere Bewertungen und Modernisierungsvorschläge.", true],
["Die Primärenergiefaktoren zur Ermittlung des Gebäudekennwerts werden jetzt direkt im GEG (§22 Primärenergiefaktoren) geregelt. Dadurch wird mehr Transparenz und Nachvollziehbarkeit geschaffen. Auch findet die Verwendung von Biogas aus dem Erdgasnetz jetzt angemessen Berücksichtigung.", true],
["Die lokal erzeugte Energie durch PV-Anlagen wird besser berücksichtigt. Bis zu 45 % des Jahres-Primärenergiebedarfs können durch selbst erzeugten Strom abgezogen werden. Das fördert die Nutzung erneuerbarer Energien und reduziert den Gesamtenergiebedarf.", false],
["Im Energieausweis müssen nun verpflichtend die CO2-Emissionen des Gebäudes angegeben werden. Diese neue Regelung erhöht die Transparenz hinsichtlich der Klimawirkung und unterstützt Eigentümer bei der Planung nachhaltiger Maßnahmen.", false],
]}
></TextboxCardTemplate>
<div class="mt-4 mb-6">
<WelcherAusweisWidget client:load />
</div>
<h2>
Erfüllen Sie die gesetzlichen Vorgaben des <span>GEG 2024</span>. Mit
uns profitieren Sie von:
</h2>
<p>
Rechtssicherer Bearbeitung <span class="text-green-700;">✔</span
>&nbsp;&nbsp;&nbsp; Langjähriger Erfahrung <span class="text-green-700;"
>✔</span
>&nbsp;&nbsp;&nbsp; Schneller <span>online Erstellung </span><span
class="text-green-700;">✔</span
>
</p>
<h2>
Energieausweis nach aktueller GEG (vormals EnEV) geprüft vom Diplom Ingenieur
</h2>
<div class="p-6">
<div class="flex flex-row">
<div class="w-3/4">
<p>
Sie möchten Ihren <strong>Energieausweis online erstellen</strong>? Auf dieser Seite finden Sie alle nötigen Informationen hierzu.
Sollten Sie sich nicht sicher sein, <a href="/welcher-energieausweis/">welchen Energieausweis</a>
Sie benötigen, können Sie sich bei uns umfassend informieren. Wir haben für Sie alle wichtigen Informationen rund um die GEG und zur
<a href="/energieausweis/energieausweis-pflicht/">Energieausweis Pflicht</a> zusammengetragen.
Zusätzlich haben wir die entscheidenden Informationen auf übersichtlichen Merkblättern im PDF-Format zum Download zusammengefasst.
Sollten Sie noch Fragen zum Thema Energieausweis online erstellen haben, stehen wir Ihnen gerne telefonisch unter folgender Nummer:
<span>040/209 339 850</span> zur Verfügung.
</p>
<hr class="mb-4">
<p>
Mit dem <strong>Energieausweis</strong> werden Wohngebäude und Nichtwohngebäude nach den Vorgaben des Gebäudeenergiegesetzes
<a href="/geg/">GEG</a> energetisch bewertet. Das <a href="https://www.dibt.de/" target="blank">DIBt</a>
(Deutsches Institut für Bautechnik) regelt die Grundsätze zur Ausstellung, Berechnung und der Qualitätssicherung.
Der Energieausweis beschreibt die entsprechenden Energiekennwerte auf einer Farbskala: grün (A+/Effizienzhaus), gelb (D), und rot (H / unsaniert).
Es wird grundsätzlich zwischen zwei Energieausweisarten unterschieden:
</p>
<h2>GEG gilt ab 1. Mai 2021 und löst die EnEV ab</h2>
<TextboxCardTemplate
TitelName="Folgende Punkte ändern sich:"
BulletPoints={[
[
"Erhöhte Sorgfaltspflicht bei der Erstellung der Energieausweise. Zur Einschätzung von Modernisierungsempfehlungen sind jetzt Fotos relevanter Gebäudebereiche erforderlich. Dazu zählen Dach, Fenster, Heizung und Außenwand. Diese Maßnahmen sorgen für präzisere Bewertungen und Modernisierungsvorschläge.",
true,
],
[
"Die Primärenergiefaktoren zur Ermittlung des Gebäudekennwerts werden jetzt direkt im GEG (§22 Primärenergiefaktoren) geregelt. Dadurch wird mehr Transparenz und Nachvollziehbarkeit geschaffen. Auch findet die Verwendung von Biogas aus dem Erdgasnetz jetzt angemessen Berücksichtigung.",
true,
],
[
"Die lokal erzeugte Energie durch PV-Anlagen wird besser berücksichtigt. Bis zu 45 % des Jahres-Primärenergiebedarfs können durch selbst erzeugten Strom abgezogen werden. Das fördert die Nutzung erneuerbarer Energien und reduziert den Gesamtenergiebedarf.",
false,
],
[
"Im Energieausweis müssen nun verpflichtend die CO2-Emissionen des Gebäudes angegeben werden. Diese neue Regelung erhöht die Transparenz hinsichtlich der Klimawirkung und unterstützt Eigentümer bei der Planung nachhaltiger Maßnahmen.",
false,
],
]}
/>
<h2>
Energieausweis nach aktueller GEG (vormals EnEV) geprüft vom Diplom
Ingenieur
</h2>
<div class="p-6">
<div class="flex flex-row">
<div class="w-3/4">
<p>
Sie möchten Ihren <strong
>Energieausweis online erstellen</strong
>? Auf dieser Seite finden Sie alle nötigen Informationen
hierzu. Sollten Sie sich nicht sicher sein, <a
href="/welcher-energieausweis/"
>welchen Energieausweis</a
>
Sie benötigen, können Sie sich bei uns umfassend informieren.
Wir haben für Sie alle wichtigen Informationen rund um die GEG
und zur
<a href="/energieausweis/energieausweis-pflicht/"
>Energieausweis Pflicht</a
> zusammengetragen. Zusätzlich haben wir die entscheidenden Informationen
auf übersichtlichen Merkblättern im PDF-Format zum Download zusammengefasst.
Sollten Sie noch Fragen zum Thema Energieausweis online erstellen
haben, stehen wir Ihnen gerne telefonisch unter folgender Nummer:
<span>040/209 339 850</span> zur Verfügung.
</p>
<hr class="mb-4" />
<p>
Mit dem <strong>Energieausweis</strong> werden Wohngebäude und
Nichtwohngebäude nach den Vorgaben des Gebäudeenergiegesetzes
<a href="/geg/">GEG</a> energetisch bewertet. Das <a
href="https://www.dibt.de/"
target="blank">DIBt</a
>
(Deutsches Institut für Bautechnik) regelt die Grundsätze zur
Ausstellung, Berechnung und der Qualitätssicherung. Der Energieausweis
beschreibt die entsprechenden Energiekennwerte auf einer Farbskala:
grün (A+/Effizienzhaus), gelb (D), und rot (H / unsaniert). Es
wird grundsätzlich zwischen zwei Energieausweisarten unterschieden:
</p>
</div>
<div class="mb-4 w-1/4 p-4">
<img
class="w-full max-w-md mx-auto rounded-md"
title="Energieausweis online erstellen"
src="images/Bedarfsausweis-Wohngebaeude-Beispiel.jpg"
alt="Energieausweis online erstellen"
/>
</div>
</div>
<div class="mb-4 w-1/4 p-4">
<img class="w-full max-w-md mx-auto rounded-md" title="Energieausweis online erstellen"
src="images/Bedarfsausweis-Wohngebaeude-Beispiel.jpg" alt="Energieausweis online erstellen">
<hr class="mb-4" />
<div class="border-l-4 border-r-4 border-orange-300 p-4">
<ul id="start_ul" class="list-disc list-inside">
<li class="mb-4">
Der verbrauchsbasierte Energieausweis wird als <a
href="/verbrauchsausweis/"
title="Verbrauchsausweis">Verbrauchsausweis</a
>
bezeichnet. Dies ist der „kleine“ Energieausweis und kann bei
Vermietung und Verkauf in den meisten Fällen verwendet werden.
Hier geht's direkt zum Eingabeformular:
<br />→ <a
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/"
title="Energieausweis online erstellen - Verbrauchsausweis"
>
Energieausweis online erstellen</a
>
<hr class="mt-4" />
</li>
<li>
Der bedarfsbasierte Energieausweis wird als <a
href="/bedarfsausweis/"
title="Bedarfsausweis">Bedarfsausweis</a
> bezeichnet. Dies ist der „große“ Energieausweis und kann immer
verwendet werden. Bei Neubau und Modernisierung ist er zwingend
vorgeschrieben. Hier geht's direkt zum Eingabeformular:
<br />→ <a
href="/energieausweis-erstellen/bedarfsausweis-wohngebaeude/"
title="Energieausweis online erstellen - Bedarfsausweis"
>
Energieausweis online erstellen</a
>
</li>
</ul>
</div>
</div>
<hr class="mb-4">
<div class="border-l-4 border-r-4 border-orange-300 p-4">
<ul id="start_ul" class="list-disc list-inside">
<li class="mb-4">
Der verbrauchsbasierte Energieausweis wird als <a href="/verbrauchsausweis/" title="Verbrauchsausweis">Verbrauchsausweis</a>
bezeichnet. Dies ist der „kleine“ Energieausweis und kann bei Vermietung und Verkauf in den meisten Fällen verwendet werden.
Hier geht's direkt zum Eingabeformular:
<br>→ <a href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" title="Energieausweis online erstellen - Verbrauchsausweis">
Energieausweis online erstellen</a>
<hr class="mt-4">
</li>
<li>
Der bedarfsbasierte Energieausweis wird als <a href="/bedarfsausweis/" title="Bedarfsausweis">Bedarfsausweis</a> bezeichnet.
Dies ist der „große“ Energieausweis und kann immer verwendet werden. Bei Neubau und Modernisierung ist er zwingend vorgeschrieben.
Hier geht's direkt zum Eingabeformular:
<br>→ <a href="/energieausweis-erstellen/bedarfsausweis-wohngebaeude/" title="Energieausweis online erstellen - Bedarfsausweis">
Energieausweis online erstellen</a>
</li>
</ul>
</div>
</div>
<h2>Übersicht <span class="font-bold">Verbrauchsausweis</span> und <span class="font-bold">Bedarfsausweis</span> für Wohngebäude:</h2>
<h2>
Übersicht <span class="font-bold">Verbrauchsausweis</span> und <span
class="font-bold">Bedarfsausweis</span
> für Wohngebäude:
</h2>
<ProduktVergleich />
<h2>Übersicht <span class="font-bold">Verbrauchsausweis</span> und <span class="font-bold">Bedarfsausweis</span> für Gewerbegebäude:</h2>
<h2>
Übersicht <span class="font-bold">Verbrauchsausweis</span> und <span
class="font-bold">Bedarfsausweis</span
> für Gewerbegebäude:
</h2>
<ProduktVergleichGewerbe />
<ProduktVergleichGewerbe />
<div class="p-6 border-2 mb-6">
<h2>Unterschied: Verbrauchsausweis und Bedarfsausweis</h2>
<p>
Grundsätzlich unterscheidet man beim Energieausweis zwischen <span>Verbrauchsausweis</span> und <span>Bedarfsausweis</span>.
</p>
<h3>Was ist ein Verbrauchsausweis?</h3>
<p>
Der Verbrauchsausweis gibt den Energieverbrauch der Gebäudebewohner in den vergangenen drei Jahren für Heizung und
Warmwasserbereitung an. Um den <a href="/geg/#p82">Energieverbrauchskennwert zu ermitteln</a>, wird
der tatsächliche Energieverbrauch mithilfe eines standortbezogenen Klimafaktors bereinigt. Der Durchschnittswert wird durch die sogenannte
<span>energetische Gebäudenutzfläche (An)</span> geteilt.
</p>
<p>
So führt beispielsweise ein hoher Verbrauch in einem einzelnen harten Winter nicht zu einer schlechteren Beurteilung des Gebäudes.
Der tatsächliche Energieverbrauch in einem Gebäude oder einer Wohnung kann aufgrund des Witterungseinflusses vom
Energieverbrauchskennwert abweichen. Das Ergebnis im Verbrauchsausweis ist stark vom individuellen Nutzungsverhalten der
Bewohner abhängig. Wird in einem energetisch schlechten Gebäude kaum geheizt, so kann der Energieausweis trotzdem sehr gut ausfallen.
</p>
<h3>Was ist ein Bedarfsausweis?</h3>
<p>
Der Bedarfsausweis entsteht auf Grundlage einer technischen
<a href="/geg/#p81">Analyse der Bausubstanz und der Heizungsanlage eines Gebäudes</a> und ist unabhängig vom
individuellen Nutzerverhalten.
</p>
<p>
Die Farbverlaufsskala im Bedarfsausweis weist zwei verschiedene Werte aus: einen Wert für den <span>Endenergiebedarf</span> und
einen für den <span>Primärenergiebedarf</span>. Zusätzlich wird noch ein Kennwert für die energetische Qualität der Gebäudehülle dargestellt.
</p>
<p>
Der Energiebedarf gibt die nach technischen Regeln berechnete, vom konkreten Gebäude jährlich benötigte Energiemenge für Heizung,
Lüftung und Warmwasserbereitung an. Dabei werden standardisierte Randbedingungen beispielsweise eine Innentemperatur von
19 Grad im beheizten Bereich des Gebäudes zugrunde gelegt.
</p>
<p>
Am <span>Endenergiebedarf</span> sollten sich Hausbewohner orientieren, wenn sie ihren künftigen Energieverbrauch und die
Energiekosten abschätzen wollen. Der <span>Primärenergiebedarf</span> bildet die Gesamtenergieeffizienz eines Gebäudes ab.
Er berücksichtigt neben der Endenergie auch die sogenannte „Vorkette“ (Erkundung, Gewinnung, Verteilung, Umwandlung) der
jeweils eingesetzten Energieträger (z. B. Heizöl, Gas, Strom, erneuerbare Energien).
</p>
<p>
Besonders niedrig fällt der Primärenergiebedarf aus, wenn erneuerbare Energien (solare Strahlungsenergie, Geothermie, Energie aus Biomasse)
für die Energieversorgung im Gebäude eingesetzt werden. Am Primärenergiebedarf können Verbraucher erkennen, wie umweltfreundlich
ihr Gebäude ist.
</p>
<h3>Fazit Verbrauchsausweis / Bedarfsausweis</h3>
<p>
Geht es um den tatsächlichen Verbrauch der Energie, der den Aufwand für Heizung und zentrale Warmwasserbereitung der vergangenen
drei Jahre berücksichtigt, wird der <span>Energieverbrauchskennwert</span> für den Verbrauchsausweis ermittelt. Bei gewerblichen
Objekten wird zusätzlich der Verbrauch für Beleuchtung und Klimatisierung mit eingerechnet.
</p>
<p>
Für das Ausstellen des Bedarfsausweises wird der rechnerische Energiebedarf unter standardisierten Randbedingungen benötigt.
Daten rund um Bausubstanz, Gebäudehülle und Heizanlage fließen in die Berechnung mit ein. Bedarfsausweise widerspiegeln die
tatsächliche energetische Qualität eines Gebäudes damit wesentlich besser als die Verbrauchsausweise.
</p>
</div>
<div class="p-6 border-2 mb-6">
<h2>Unterschied: Verbrauchsausweis und Bedarfsausweis</h2>
<p>
Grundsätzlich unterscheidet man beim Energieausweis zwischen <span
>Verbrauchsausweis</span
> und <span>Bedarfsausweis</span>.
</p>
<div class="p-6 border-2 mb-6">
<h2>Energieausweis online erstellen</h2>
<p>
Soll Wohneigentum veräußert oder bauliches Teileigentum zum Erwerb angeboten werden, muss dem möglichen Käufer oder Leasingnehmer auf
Verlangen unverzüglich ein <a href="/geg/#p87">Energieausweis vorgelegt werden</a>. In den meisten Fällen ist hier ein Verbrauchsausweis ausreichend.
</p>
<p>
Auch Mietern oder Pächtern soll der Energieausweis unmittelbaren Aufschluss über die energetischen Bedingungen des Gebäudes aufzeigen.Kommt der
Anbieter der offerierten Immobilie diesem Auftrag nach der Energieeinsparverordnung nicht nach, drohen Bußgelder bis zu 15 000 Euro. Als
<a href="/geg/#p79">Ausnahmen</a> (§ 79 GEG) gelten Gebäude mit nicht mehr als 50 m² Fläche sowie Baudenkmäler.
</p>
<p>
Die <a href="https://www.dena.de/">Deutsche Energie-Agentur GmbH (dena)</a> empfiehlt bei Wohngebäuden generell den Bedarfsausweis. Er erlaubt eine nutzerunabhängige Bewertung
des Gebäudes. Zusätzlich können bei der Erstellung eines Bedarfsausweises die Empfehlungen für Modernisierungen auf der Basis einer technischen
Analyse des Gebäudes ermittelt werden.
</p>
</div>
<h3>Was ist ein Verbrauchsausweis?</h3>
<p>
Der Verbrauchsausweis gibt den Energieverbrauch der Gebäudebewohner
in den vergangenen drei Jahren für Heizung und Warmwasserbereitung
an. Um den <a href="/geg/#p82"
>Energieverbrauchskennwert zu ermitteln</a
>, wird der tatsächliche Energieverbrauch mithilfe eines
standortbezogenen Klimafaktors bereinigt. Der Durchschnittswert wird
durch die sogenannte
<span>energetische Gebäudenutzfläche (An)</span> geteilt.
</p>
<p>
So führt beispielsweise ein hoher Verbrauch in einem einzelnen
harten Winter nicht zu einer schlechteren Beurteilung des Gebäudes.
Der tatsächliche Energieverbrauch in einem Gebäude oder einer
Wohnung kann aufgrund des Witterungseinflusses vom
Energieverbrauchskennwert abweichen. Das Ergebnis im
Verbrauchsausweis ist stark vom individuellen Nutzungsverhalten der
Bewohner abhängig. Wird in einem energetisch schlechten Gebäude kaum
geheizt, so kann der Energieausweis trotzdem sehr gut ausfallen.
</p>
<h3>Was ist ein Bedarfsausweis?</h3>
<p>
Der Bedarfsausweis entsteht auf Grundlage einer technischen
<a href="/geg/#p81"
>Analyse der Bausubstanz und der Heizungsanlage eines Gebäudes</a
> und ist unabhängig vom individuellen Nutzerverhalten.
</p>
<p>
Die Farbverlaufsskala im Bedarfsausweis weist zwei verschiedene
Werte aus: einen Wert für den <span>Endenergiebedarf</span> und einen
für den <span>Primärenergiebedarf</span>. Zusätzlich wird noch ein
Kennwert für die energetische Qualität der Gebäudehülle dargestellt.
</p>
<p>
Der Energiebedarf gibt die nach technischen Regeln berechnete, vom
konkreten Gebäude jährlich benötigte Energiemenge für Heizung,
Lüftung und Warmwasserbereitung an. Dabei werden standardisierte
Randbedingungen beispielsweise eine Innentemperatur von 19 Grad im
beheizten Bereich des Gebäudes zugrunde gelegt.
</p>
<p>
Am <span>Endenergiebedarf</span> sollten sich Hausbewohner orientieren,
wenn sie ihren künftigen Energieverbrauch und die Energiekosten abschätzen
wollen. Der <span>Primärenergiebedarf</span> bildet die Gesamtenergieeffizienz
eines Gebäudes ab. Er berücksichtigt neben der Endenergie auch die sogenannte
„Vorkette“ (Erkundung, Gewinnung, Verteilung, Umwandlung) der jeweils
eingesetzten Energieträger (z. B. Heizöl, Gas, Strom, erneuerbare Energien).
</p>
<p>
Besonders niedrig fällt der Primärenergiebedarf aus, wenn
erneuerbare Energien (solare Strahlungsenergie, Geothermie, Energie
aus Biomasse) für die Energieversorgung im Gebäude eingesetzt
werden. Am Primärenergiebedarf können Verbraucher erkennen, wie
umweltfreundlich ihr Gebäude ist.
</p>
<h2>Was ist ein Energieausweis?</h2>
<TextboxCardTemplate
TitelName="Zusammenfassung"
BulletPoints={[
["Der Gesetzgeber hat zwei Arten des Energieausweises bestimmt: Den Verbrauchsausweis und den Bedarfsausweis.", true],
["Je nach Gebäudeart, Baujahr, Nutzungsart gilt es verschiedene Kriterien für den Energieausweis zu beachten.", true],
["Der Energieausweis gibt Modernisierungsempfehlungen aus die auf mögliche Energiesparmaßnahmen hinweisen.", false],
["Der Energieausweises beinflusst den Marktwert einer Immobilie.", false],
["Der Energieausweis offenbart bauliche Mängel, die eine Energieverschwendung mit sich bringen.", true],
["Anhand des Bedarfsausweises lässt sich der energetische Zustand verschiedener Gebäude miteinander vergleichen.", false],
]}
></TextboxCardTemplate>
<h3>Fazit Verbrauchsausweis / Bedarfsausweis</h3>
<p>
Geht es um den tatsächlichen Verbrauch der Energie, der den Aufwand
für Heizung und zentrale Warmwasserbereitung der vergangenen drei
Jahre berücksichtigt, wird der <span>Energieverbrauchskennwert</span
> für den Verbrauchsausweis ermittelt. Bei gewerblichen Objekten wird
zusätzlich der Verbrauch für Beleuchtung und Klimatisierung mit eingerechnet.
</p>
<p>
Für das Ausstellen des Bedarfsausweises wird der rechnerische
Energiebedarf unter standardisierten Randbedingungen benötigt. Daten
rund um Bausubstanz, Gebäudehülle und Heizanlage fließen in die
Berechnung mit ein. Bedarfsausweise widerspiegeln die tatsächliche
energetische Qualität eines Gebäudes damit wesentlich besser als die
Verbrauchsausweise.
</p>
</div>
<InfoPopup></InfoPopup>
<div class="p-6 border-2 mb-6">
<h2>Energieausweis online erstellen</h2>
<p>
Soll Wohneigentum veräußert oder bauliches Teileigentum zum Erwerb
angeboten werden, muss dem möglichen Käufer oder Leasingnehmer auf
Verlangen unverzüglich ein <a href="/geg/#p87"
>Energieausweis vorgelegt werden</a
>. In den meisten Fällen ist hier ein Verbrauchsausweis ausreichend.
</p>
<p>
Auch Mietern oder Pächtern soll der Energieausweis unmittelbaren
Aufschluss über die energetischen Bedingungen des Gebäudes
aufzeigen.Kommt der Anbieter der offerierten Immobilie diesem
Auftrag nach der Energieeinsparverordnung nicht nach, drohen
Bußgelder bis zu 15 000 Euro. Als
<a href="/geg/#p79">Ausnahmen</a> (§ 79 GEG) gelten Gebäude mit nicht
mehr als 50 m² Fläche sowie Baudenkmäler.
</p>
<p>
Die <a href="https://www.dena.de/"
>Deutsche Energie-Agentur GmbH (dena)</a
> empfiehlt bei Wohngebäuden generell den Bedarfsausweis. Er erlaubt
eine nutzerunabhängige Bewertung des Gebäudes. Zusätzlich können bei
der Erstellung eines Bedarfsausweises die Empfehlungen für Modernisierungen
auf der Basis einer technischen Analyse des Gebäudes ermittelt werden.
</p>
</div>
<h2>Was ist ein Energieausweis?</h2>
<TextboxCardTemplate
TitelName="Zusammenfassung"
BulletPoints={[
[
"Der Gesetzgeber hat zwei Arten des Energieausweises bestimmt: Den Verbrauchsausweis und den Bedarfsausweis.",
true,
],
[
"Je nach Gebäudeart, Baujahr, Nutzungsart gilt es verschiedene Kriterien für den Energieausweis zu beachten.",
true,
],
[
"Der Energieausweis gibt Modernisierungsempfehlungen aus die auf mögliche Energiesparmaßnahmen hinweisen.",
false,
],
[
"Der Energieausweises beinflusst den Marktwert einer Immobilie.",
false,
],
[
"Der Energieausweis offenbart bauliche Mängel, die eine Energieverschwendung mit sich bringen.",
true,
],
[
"Anhand des Bedarfsausweises lässt sich der energetische Zustand verschiedener Gebäude miteinander vergleichen.",
false,
],
]}
/>
<InfoPopup client:only />
</Layout>

View File

@@ -6,6 +6,8 @@ import * as fs from "fs";
import { fileURLToPath } from "url";
import { hashPassword } from "#lib/password.js";
import Papa from "papaparse"
import { generatePrefixedId } from "#lib/db.js";
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
const saveUserMap = () => {
fs.writeFileSync(
@@ -24,7 +26,6 @@ const file = fs.createReadStream(path, "utf8");
Papa.parse(file, {
header: true,
step: async function(results) {
await prisma.$transaction(async (tx) => {
const dataset = results.data as any;
if (dataset.id in processed) {
@@ -37,7 +38,7 @@ Papa.parse(file, {
console.log(`Missing user ${user_id}`);
if (dataset.email) {
user = await tx.benutzer.findUnique({
user = await prisma.benutzer.findUnique({
where: {
email: dataset.email
}
@@ -45,8 +46,11 @@ Papa.parse(file, {
if (!user) {
user = await tx.benutzer.create({
const id = generatePrefixedId(6, VALID_UUID_PREFIXES.User)
user = await prisma.benutzer.create({
data: {
id,
email: dataset.email,
passwort: hashPassword(Math.random().toString(36).slice(-8)),
adresse: dataset.strasse,
@@ -60,13 +64,13 @@ Papa.parse(file, {
});
}
newUserIdMap[user_id] = user.uid;
newUserIdMap[user_id] = user.id;
saveUserMap();
}
} else {
user = await tx.benutzer.findUnique({
user = await prisma.benutzer.findUnique({
where: {
uid: newUserIdMap[user_id],
id: newUserIdMap[user_id],
},
});
}
@@ -77,22 +81,27 @@ Papa.parse(file, {
return
}
const objekt = await tx.objekt.create({
const objekt_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt)
const objekt = await prisma.objekt.create({
data: {
id: objekt_id,
adresse: dataset.objekt_strasse,
erstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
ort: dataset.objekt_ort,
plz: dataset.objekt_plz,
benutzer: {
connect: {
uid: user.uid,
id: user.id,
},
},
},
});
const aufnahme = await tx.aufnahme.create({
const aufnahme_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt)
const aufnahme = await prisma.aufnahme.create({
data: {
id: aufnahme_id,
alternative_heizung: dataset.alheizung == "1",
alternative_kuehlung: dataset.alkuehlung == "1",
alternative_lueftung: dataset.allueftung == "1",
@@ -100,13 +109,12 @@ Papa.parse(file, {
aussenwand_gedaemmt: dataset.aussenwand_gedaemmt == "1",
aussenwand_min_12cm_gedaemmt:
dataset.aussenwand_min_12cm_gedaemmt == "1",
ausstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
baujahr_gebaeude: parseInt(dataset.baujahr_gebaeude) ? [parseInt(dataset.baujahr_gebaeude)] : [],
baujahr_heizung: parseInt(dataset.baujahr_anlage) ? [parseInt(dataset.baujahr_anlage)] : [],
baujahr_klima: parseInt(dataset.baujahr_klimaanlage) ? [parseInt(dataset.baujahr_klimaanlage)] : [],
benutzer: {
connect: {
uid: user.uid,
id: user.id,
},
},
objekt: {
@@ -114,8 +122,6 @@ Papa.parse(file, {
id: objekt.id,
},
},
brennstoff_1: dataset.energietraeger_1,
brennstoff_2: dataset.energietraeger_2,
dachgeschoss:
dataset.dachgeschoss == "Beheizt"
? Enums.Heizungsstatus.BEHEIZT
@@ -183,7 +189,6 @@ Papa.parse(file, {
dataset.warmwasser_rohre_gedaemmt == "1",
zentralheizung: dataset.zentralheizung == "1",
zirkulation: dataset.zirkulation == "1",
boxpruefung: dataset.boxpruefung == "1",
},
});
@@ -199,12 +204,14 @@ Papa.parse(file, {
"heizung": Enums.BilderKategorie.Heizung
}
const img = await tx.bild.create({
const id = generatePrefixedId(6, VALID_UUID_PREFIXES.Bild)
const img = await prisma.bild.create({
data: {
id,
kategorie: categoryMap[kategorie as keyof typeof categoryMap],
aufnahme: {
connect: {
uid: aufnahme.uid
id: aufnahme.id
}
},
name: image
@@ -214,9 +221,9 @@ Papa.parse(file, {
}
if (dataset.ausweisart === "VA") {
const ausweis = await tx.verbrauchsausweisWohnen.create({
const ausweis = await prisma.verbrauchsausweisWohnen.create({
data: {
alte_ausweis_id: parseInt(dataset.id),
id: VALID_UUID_PREFIXES.VerbrauchsausweisWohnen + dataset.id,
alternative_heizung: dataset.alheizung == "1",
alternative_kuehlung: dataset.alkuehlung == "1",
alternative_lueftung: dataset.allueftung == "1",
@@ -249,7 +256,7 @@ Papa.parse(file, {
storniert: dataset.erledigt == "4",
benutzer: {
connect: {
uid: user.uid,
id: user.id,
},
},
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
@@ -279,12 +286,18 @@ Papa.parse(file, {
zurueckgestellt: dataset.zurueckGestellt == "1",
zusaetzliche_heizquelle:
dataset.zusaetzliche_heizquelle == "1",
ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(),
ausweistyp: Enums.AusweisTyp.Standard,
brennstoff_1: dataset.energietraeger_1,
brennstoff_2: dataset.energietraeger_2,
boxpruefung: dataset.boxpruefung == "1",
created_at: moment(dataset.erstellungsdatum).toDate(),
},
});
} else if (dataset.ausweisart === "VANW") {
const ausweis = await tx.verbrauchsausweisGewerbe.create({
const ausweis = await prisma.verbrauchsausweisGewerbe.create({
data: {
alte_ausweis_id: parseInt(dataset.id),
id: VALID_UUID_PREFIXES.VerbrauchsausweisGewerbe + dataset.id,
alternative_heizung: dataset.alheizung == "1",
alternative_kuehlung: dataset.alkuehlung == "1",
alternative_lueftung: dataset.allueftung == "1",
@@ -317,7 +330,7 @@ Papa.parse(file, {
storniert: dataset.erledigt == "4",
benutzer: {
connect: {
uid: user.uid,
id: user.id,
},
},
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
@@ -358,13 +371,17 @@ Papa.parse(file, {
warmwasser_enthalten: dataset.warmwasser_enthalten == "1",
zurueckgestellt: dataset.zurueckGestellt == "1",
zusaetzliche_heizquelle:
dataset.zusaetzliche_heizquelle == "1"
dataset.zusaetzliche_heizquelle == "1",
ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(),
ausweistyp: Enums.AusweisTyp.Standard,
boxpruefung: dataset.boxpruefung == "1",
created_at: moment(dataset.erstellungsdatum).toDate(),
},
});
} else if (dataset.ausweisart === "BA") {
const ausweis = await tx.bedarfsausweisWohnen.create({
const ausweis = await prisma.bedarfsausweisWohnen.create({
data: {
alte_ausweis_id: parseInt(dataset.id),
id: VALID_UUID_PREFIXES.BedarfsausweisWohnen + dataset.id,
alternative_heizung: dataset.alheizung == "1",
alternative_kuehlung: dataset.alkuehlung == "1",
alternative_lueftung: dataset.allueftung == "1",
@@ -389,7 +406,7 @@ Papa.parse(file, {
storniert: dataset.erledigt == "4",
benutzer: {
connect: {
uid: user.uid,
id: user.id,
},
},
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
@@ -443,17 +460,17 @@ Papa.parse(file, {
waerme_erzeugung_heizung: dataset.waerme_erzeugung_heizung,
warmwasser_erzeugung: dataset.warmwasser_erzeugung,
warmwasser_speicherung: dataset.warmwasser_speicherung,
warmwasser_verteilung: dataset.warmwasser_verteilung
warmwasser_verteilung: dataset.warmwasser_verteilung,
ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(),
ausweistyp: Enums.AusweisTyp.Standard,
boxpruefung: dataset.boxpruefung == "1",
created_at: moment(dataset.erstellungsdatum).toDate(),
},
});
}
processed[dataset.id as string] = true;
saveProcessed()
}, {
maxWait: 5000,
timeout: 10000
});
},
complete(results, file) {
saveProcessed()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long