// Generated by ts-to-zod
import { z } from "zod";

export const gesetzesgrundlageEnumSchema = z.literal("GEG-2023");

export const rechtsstandGrundEnumSchema = z.union([
	z.literal(
		"Bauantrag bei genehmigungspflichtigen Vorhaben (Ausstellungsanlässe Neubau und Modernisierung)"
	),
	z.literal(
		"Bauanzeige bei anzeigepflichtigen Vorhaben (Ausstellungsanlässe Neubau und Modernisierung)"
	),
	z.literal("Baubeginn (Ausstellungsanlass Modernisierung)"),
	z.literal(
		"Wunsch des Bauherrn neues Recht anzuwenden (gemäß GEG § 111 Absatz 3)"
	),
	z.literal(
		"Ausweisausstellung (bei Verbrauchsausweisen und alle anderen Fälle)"
	),
]);

export const bundeslandEnumSchema = z.union([
	z.literal("Baden-Württemberg"),
	z.literal("Bayern"),
	z.literal("Berlin"),
	z.literal("Brandenburg"),
	z.literal("Bremen"),
	z.literal("Hamburg"),
	z.literal("Hessen"),
	z.literal("Mecklenburg-Vorpommern"),
	z.literal("Niedersachsen"),
	z.literal("Nordrhein-Westfalen"),
	z.literal("Rheinland-Pfalz"),
	z.literal("Saarland"),
	z.literal("Sachsen"),
	z.literal("Sachsen-Anhalt"),
	z.literal("Schleswig-Holstein"),
	z.literal("Thüringen"),
]);

export const gebaeudeteilEnumSchema = z.union([
	z.literal("Ganzes Gebäude"),
	z.literal("Teil des Wohngebäudes"),
	z.literal("Teil des Nichtwohngebäudes"),
]);

export const altersklasseEnumSchema = z.union([
	z.literal("bis 1918"),
	z.literal("1919...1948"),
	z.literal("1949...1957"),
	z.literal("1958...1968"),
	z.literal("1969...1978"),
	z.literal("1979...1983"),
	z.literal("1984...1994"),
	z.literal("1995...2002"),
	z.literal("2003...2009"),
	z.literal("2010...2016"),
	z.literal("ab 2017"),
]);

export const anlassEnumSchema = z.union([
	z.literal("Neubau"),
	z.literal("Modernisierung-Erweiterung"),
	z.literal("Vermietung-Verkauf"),
	z.literal("Aushangpflicht"),
	z.literal("Sonstiges"),
]);

export const gebaeudetypEnumSchema = z.union([
	z.literal("Einfamilienhaus"),
	z.literal("Zweifamilienhaus"),
	z.literal("Mehrfamilienhaus"),
	z.literal("Wohnteil gemischt genutztes Gebäude"),
	z.literal("Beidseitig angebautes Gebäude"),
	z.literal("Einseitig angebautes Gebäude"),
	z.literal("Sonstiges"),
]);

export const energietraegerVerbrauchEnumSchema = z.union([
	z.literal("Heizöl in Liter"),
	z.literal("Heizöl in kWh Heizwert"),
	z.literal("Heizöl in kWh Brennwert"),
	z.literal("Erdgas in m3"),
	z.literal("Erdgas in kWh Heizwert"),
	z.literal("Erdgas in kWh Brennwert"),
	z.literal("Flüssiggas in m3 gasförmig"),
	z.literal("Flüssiggas in Liter flüssig"),
	z.literal("Flüssiggas in kg"),
	z.literal("Flüssiggas in kWh Heizwert"),
	z.literal("Steinkohle in kg"),
	z.literal("Steinkohle in kWh Heizwert"),
	z.literal("Braunkohle in kg"),
	z.literal("Braunkohle in kWh Heizwert"),
	z.literal("Biogas in m3"),
	z.literal("Biogas in kWh Heizwert"),
	z.literal("Biogas in kWh Brennwert"),
	z.literal("Biogas, gebäudenah erzeugt in m3"),
	z.literal("Biogas, gebäudenah erzeugt in kWh Heizwert"),
	z.literal("Biogas, gebäudenah erzeugt in kWh Brennwert"),
	z.literal("biogenes Flüssiggas in m3 gasförmig"),
	z.literal("biogenes Flüssiggas in Liter flüssig"),
	z.literal("biogenes Flüssiggas in kg"),
	z.literal("biogenes Flüssiggas in kWh Heizwert"),
	z.literal("Bioöl in Liter"),
	z.literal("Bioöl in kWh Heizwert"),
	z.literal("Bioöl in kWh Brennwert"),
	z.literal("Bioöl, gebäudenah erzeugt in Liter"),
	z.literal("Bioöl, gebäudenah erzeugt in kWh Heizwert"),
	z.literal("Bioöl, gebäudenah erzeugt in kWh Brennwert"),
	z.literal("Holz in Raummeter"),
	z.literal("Holz in kg"),
	z.literal("Holz in kWh Heizwert"),
	z.literal("Holz in kWh Brennwert"),
	z.literal("Holz in Schüttraummeter"),
	z.literal("Strom netzbezogen in kWh"),
	z.literal("Strom gebäudenah erzeugt (aus Photovoltaik, Windkraft) in kWh"),
	z.literal("Verdrängungsstrommix für KWK in kWh"),
	z.literal(
		"Wärme (Erdwärme, Geothermie, Solarthermie, Umgebungswärme) in kWh"
	),
	z.literal("Kälte (Erdkälte, Umgebungskälte) in kWh"),
	z.literal("Abwärme aus Prozessen (prod) in kWh"),
	z.literal("Abwärme aus Prozessen (out) in kWh"),
	z.literal("Wärme aus KWK, gebäudeintegriert oder gebäudenah in kWh"),
	z.literal("Wärme aus Verbrennung von Siedlungsabfällen in kWh"),
	z.literal(
		"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger in kWh"
	),
	z.literal(
		"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger in kWh"
	),
	z.literal(
		"Nah-/Fernwärme aus KWK, erneuerbarer Brennstoff bzw. Energieträger in kWh"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger in kWh"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger in kWh"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, erneuerbarer Brennstoff bzw. Energieträger in kWh"
	),
]);

export const zeitraumDatenSchema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		"Verbrauchte-Menge": z.number(),
		Energieverbrauch: z.number(),
		"Energieverbrauchsanteil-Warmwasser-zentral": z.number(),
		Warmwasserwertermittlung: z.union([
			z.literal("direkter Messwert Wärmemenge"),
			z.literal(
				"Pauschale für dezentrale Warmwasserbereitung (Wohngebäude)"
			),
			z.literal("Rechenwert nach Heizkostenverordnung (Wohngebäude)"),
			z.literal("Rechenwert nach GEG / DIN V 18599 (Nichtwohngebäude)"),
			z.literal(
				"Rechenwert nach Heizkostenverordnung (Nichtwohngebäude)"
			),
			z.literal("Pauschale 5 % Warmwasserbereitung (Nichtwohngebäude)"),
			z.literal("Pauschale 50 % Warmwasserbereitung (Nichtwohngebäude)"),
			z.literal(
				"monatsweise Erfassung Wärmeverbrauch Sommer (Nichtwohngebäude)"
			),
			z.literal(
				"sonstige Ermittlung des Verbrauchsanteils der Warmwasserbereitung"
			),
			z.literal("keine Warmwasserbereitung enthalten"),
		]),
		"Energieverbrauchsanteil-thermisch-erzeugte-Kaelte": z
			.number()
			.optional(),
		"Energieverbrauchsanteil-Heizung": z.number(),
		Klimafaktor: z.number(),
		"Verbrauchswert-kWh-Strom": z.number().optional(),
	})
);

export const warmwasserzuschlagDaten1Schema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		Primaerenergiefaktor: z.number(),
		"Warmwasserzuschlag-kWh": z.number(),
	})
);

export const kuehlzuschlagDaten1Schema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		"Gebaeudenutzflaeche-gekuehlt": z.number(),
		Primaerenergiefaktor: z.number(),
		"Kuehlzuschlag-kWh": z.number(),
	})
);

export const leerstandszuschlagBekanntmachungDaten4Schema = z
	.record(z.unknown())
	.and(
		z.object({
			Leerstandsfaktor: z.number(),
			Startdatum: z.string(),
			Enddatum: z.string(),
			"Leerstandszuschlag-kWh": z.number(),
			Primaerenergiefaktor: z.number(),
		})
	);

export const warmwasserwertermittlungEnumSchema = z.union([
	z.literal("direkter Messwert Wärmemenge"),
	z.literal("Pauschale für dezentrale Warmwasserbereitung (Wohngebäude)"),
	z.literal("Rechenwert nach Heizkostenverordnung (Wohngebäude)"),
	z.literal("Rechenwert nach GEG / DIN V 18599 (Nichtwohngebäude)"),
	z.literal("Rechenwert nach Heizkostenverordnung (Nichtwohngebäude)"),
	z.literal("Pauschale 5 % Warmwasserbereitung (Nichtwohngebäude)"),
	z.literal("Pauschale 50 % Warmwasserbereitung (Nichtwohngebäude)"),
	z.literal("monatsweise Erfassung Wärmeverbrauch Sommer (Nichtwohngebäude)"),
	z.literal(
		"sonstige Ermittlung des Verbrauchsanteils der Warmwasserbereitung"
	),
	z.literal("keine Warmwasserbereitung enthalten"),
]);

export const wohngebaeudeBedarfsDatenEasySchema = z.record(z.unknown()).and(
	z.object({
		"Wohngebaeude-Anbaugrad": z.union([
			z.literal("freistehend"),
			z.literal("einseitig angebaut"),
			z.literal("zweiseitig angebaut"),
		]),
		"Anzahl-Geschosse": z.number(),
		"Geschoss-Bruttogeschossflaechenumfang": z.number(),
		"Geschoss-Bruttogeschossflaeche": z.number(),
		"Dach-Bruttogeschossflaechenumfang": z.number(),
		"Dach-Bruttogeschossflaeche": z.number(),
		"Aufsummierte-Bruttogeschossflaeche": z.number(),
		"Mittlere-Geschosshoehe": z.number(),
		Kompaktheit: z.union([z.boolean(), z.number()]),
		Deckungsgleichheit: z.union([z.boolean(), z.number()]),
		"Fensterflaechenanteil-Nordost-Nord-Nordwest": z.number(),
		"Fensterflaechenanteil-Gesamt": z.number(),
		"Dach-transparente-Bauteile-Fensterflaechenanteil": z.number(),
		"Spezielle-Fenstertueren-Flaechenanteil": z.number(),
		"Außentueren-Flaechenanteil": z.number(),
		"Keine-Anlage-zur-Kuehlung": z.union([z.boolean(), z.number()]),
		"Anforderung-Waermebruecken-erfuellt": z.union([
			z.boolean(),
			z.number(),
		]),
		Gebaeudedichtheit: z.union([z.boolean(), z.number()]),
		"Heiz-Warmwassersystem": z.union([
			z.literal(
				"Zentrale Biomasse-Heizungsanlage auf Basis von Holzpellets, Hackschnitzeln oder Scheitholz, zentrale Abluftanlage, solarthermische Anlage zur Trinkwarmwasser-Bereitung"
			),
			z.literal(
				"Zentrale Biomasse-Heizungsanlage auf Basis von Holzpellets, Hackschnitzeln oder Scheitholz, Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlage zur Trinkwarmwasser-Bereitung"
			),
			z.literal(
				"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
			),
			z.literal(
				"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), solarthermische Anlagen"
			),
			z.literal(
				"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), Photovoltaik-Anlagen"
			),
			z.literal(
				"Luft-Wasser-Wärmepumpe, dezentrale Trinkwassererwärmung, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
			),
			z.literal(
				"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
			),
			z.literal(
				"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), solarthermische Anlagen"
			),
			z.literal(
				"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), Photovoltaik-Anlagen"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, solarthermische Anlagen"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, Photovoltaik-Anlagen"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlagen"
			),
			z.literal(
				"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung, Photovoltaik-Anlagen"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, solarthermische Anlagen"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, Photovoltaik-Anlagen"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlagen"
			),
			z.literal(
				"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung, Photovoltaik-Anlagen"
			),
		]),
		Lueftungsanlagenanforderungen: z.union([z.boolean(), z.number()]),
		"Waermeschutz-Variante": z.union([
			z.literal("Wärmeschutz-Variante A"),
			z.literal("Wärmeschutz-Variante B"),
			z.literal("Wärmeschutz-Variante C"),
			z.literal("Wärmeschutz-Variante D"),
		]),
		Endenergiebedarf: z.number(),
		Energieeffizienzklasse: z.union([
			z.literal("A+"),
			z.literal("A"),
			z.literal("B"),
			z.literal("C"),
			z.literal("D"),
			z.literal("E"),
			z.literal("F"),
			z.literal("G"),
			z.literal("H"),
		]),
		"Primaerenergiebedarf-Ist-Wert": z.number(),
		"Primaerenergiebedarf-Anforderungswert": z.number(),
		"Energetische-Qualitaet-Ist-Wert": z.number(),
		"Energetische-Qualitaet-Anforderungs-Wert": z.number(),
		"Sommerlicher-Waermeschutz": z.union([z.boolean(), z.number()]),
		"Abminderung-Sonnenschutz": z.number(),
		"Art-der-Nutzung-erneuerbaren-Energie-1": z
			.union([
				z.literal("solarthermische Anlagen"),
				z.literal("Strom aus erneuerbaren Energien"),
				z.literal("Geothermie oder Umweltwärme"),
				z.literal("feste Biomasse"),
				z.literal("flüssige Biomasse"),
				z.literal("gasförmige Biomasse"),
				z.literal("Kälte aus erneuerbaren Energien"),
				z.literal("Abwärme"),
				z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
				z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
				z.literal("Fernwärme oder Fernkälte"),
			])
			.optional(),
		"Deckungsanteil-1": z.number().optional(),
		"Anteil-der-Pflichterfuellung-1": z.number().optional(),
		"Art-der-Nutzung-erneuerbaren-Energie-2": z
			.union([
				z.literal("solarthermische Anlagen"),
				z.literal("Strom aus erneuerbaren Energien"),
				z.literal("Geothermie oder Umweltwärme"),
				z.literal("feste Biomasse"),
				z.literal("flüssige Biomasse"),
				z.literal("gasförmige Biomasse"),
				z.literal("Kälte aus erneuerbaren Energien"),
				z.literal("Abwärme"),
				z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
				z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
				z.literal("Fernwärme oder Fernkälte"),
			])
			.optional(),
		"Deckungsanteil-2": z.number().optional(),
		"Anteil-der-Pflichterfuellung-2": z.number().optional(),
	})
);

export const heizwaermeerzeugerTypEasyEnumSchema = z.union([
	z.literal(
		"Zentrale Biomasse-Heizungsanlage auf Basis von Holzpellets, Hackschnitzeln oder Scheitholz, zentrale Abluftanlage, solarthermische Anlage zur Trinkwarmwasser-Bereitung"
	),
	z.literal(
		"Zentrale Biomasse-Heizungsanlage auf Basis von Holzpellets, Hackschnitzeln oder Scheitholz, Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlage zur Trinkwarmwasser-Bereitung"
	),
	z.literal(
		"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
	),
	z.literal(
		"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), solarthermische Anlagen"
	),
	z.literal(
		"Fernwärme mit zertifiziertem Primärenergiefaktor fp \u2264 0,7, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), Photovoltaik-Anlagen"
	),
	z.literal(
		"Luft-Wasser-Wärmepumpe, dezentrale Trinkwassererwärmung, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
	),
	z.literal(
		"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %)"
	),
	z.literal(
		"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), solarthermische Anlagen"
	),
	z.literal(
		"Luft-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung (Wärmebereitstellungsgrad \u2265 80 %), Photovoltaik-Anlagen"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, solarthermische Anlagen"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, Photovoltaik-Anlagen"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlagen"
	),
	z.literal(
		"Wasser-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe,  Lüftungsanlage mit Wärmerückgewinnung, Photovoltaik-Anlagen"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, solarthermische Anlagen"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, zentrale Abluftanlage, Photovoltaik-Anlagen"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung, solarthermische Anlagen"
	),
	z.literal(
		"Sole-Wasser-Wärmepumpe mit Flächenheizsystem zur Wärmeübergabe, Lüftungsanlage mit Wärmerückgewinnung, Photovoltaik-Anlagen"
	),
]);

export const waermeschutzVarianteEnumSchema = z.union([
	z.literal("Wärmeschutz-Variante A"),
	z.literal("Wärmeschutz-Variante B"),
	z.literal("Wärmeschutz-Variante C"),
	z.literal("Wärmeschutz-Variante D"),
]);

export const wohngebaeudeAnbaugradEnumSchema = z.union([
	z.literal("freistehend"),
	z.literal("einseitig angebaut"),
	z.literal("zweiseitig angebaut"),
]);

export const luftdichtheit4701EnumSchema = z.union([
	z.literal("undicht"),
	z.literal("normal"),
	z.literal("geprüft"),
]);

export const luftdichtheit18599EnumSchema = z.union([
	z.literal("Gebäudekategorie I"),
	z.literal("Gebäudekategorie II"),
	z.literal("Gebäudekategorie III"),
	z.literal("Gebäudekategorie IV"),
]);

export const heizwaermeerzeugerTyp18599EnumSchema = z.union([
	z.literal("Standard-Heizkessel als Umstell-/Wechselbrandkessel"),
	z.literal(
		"Standard-Heizkessel als Feststoffkessel (fossiler und biogener Brennstoff)"
	),
	z.literal("Standard-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal(
		"Standard-Heizkessel als Gebläsekessel (fossiler und biogener Brennstoff)"
	),
	z.literal("Standard-Heizkessel als Gebläsekessel mit Brennertausch"),
	z.literal("Standard-Heizkessel als Pelletkessel"),
	z.literal("Standard-Heizkessel als Hackschnitzelkessel"),
	z.literal("Niedertemperatur-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal("Niedertemperatur-Heizkessel als Umlaufwasserheizer"),
	z.literal("Niedertemperatur-Heizkessel als Kombikessel KSp"),
	z.literal("Niedertemperatur-Heizkessel als Kombikessel DL"),
	z.literal("Niedertemperatur-Heizkessel als Gebläsekessel"),
	z.literal(
		"Niedertemperatur-Heizkessel als Gebläsekessel mit Brennertausch"
	),
	z.literal("Brennwertkessel (Pellet)"),
	z.literal("Brennwertkessel (Öl/Gas)"),
	z.literal("Brennwertkessel (Öl, Gas), verbessert"),
	z.literal("Fern-/Nahwärme"),
	z.literal("Dezentrale KWK-Systeme, motorische Systeme"),
	z.literal("Dezentrale KWK-Systeme, Systeme mit Brennstoffzellen"),
	z.literal("Elektrisch angetriebene Luft/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch angetriebene Wasser/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch angetriebene Sole/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch angetriebene Abluft/Wasser-Heizungswärmepumpe"),
	z.literal("Gasmotorisch angetriebene Luft/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch angetriebene Außenluft/Raumluft-Heizungswärmepumpe"),
	z.literal("Sorptions-Gaswärmepumpe"),
	z.literal("Gasraumheizer, schornsteingebunden"),
	z.literal("Gasraumheizer, Außenwand-Gerät"),
	z.literal("Dezentrale Einzelfeuerstätten"),
	z.literal("Dezentrale Einzelfeuerstätten, hydraulisch eingebunden"),
	z.literal("Ölbefeuerter Einzelofen mit Verdampfungsbrenner"),
	z.literal("Kachelofen"),
	z.literal("Kohlebefeuerter eisener Ofen"),
	z.literal(
		"Dezentrale Hallenheizung - indirekte Abgasabfuhr - Hellstrahler"
	),
	z.literal("Dezentrale Hallenheizung - direkte Abgasabfuhr - Hellstrahler"),
	z.literal(
		"Dezentrale Hallenheizung - direkte Abgasabfuhr - Dunkelstrahler"
	),
	z.literal(
		"Dezentrale Hallenheizung - direkte Abgasabfuhr - Warmlufterzeuger"
	),
	z.literal("Dezentral elektrisch beheizte Speicherheizung"),
	z.literal("Dezentrale elektrische Direktheizung"),
	z.literal("Zentral elektrisch beheizte Wärmeerzeuger"),
	z.literal(
		"Solaranlagen zur Trinkwassererwärmung und Heizungsunterstützung (Solare Kombianlagen)"
	),
]);

export const heizwaermeerzeugerTyp4701EnumSchema = z.union([
	z.literal("Umstell-/Wechselbrandkessel"),
	z.literal("Feststoffkessel"),
	z.literal("Standard-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal("Standard-Heizkessel als Gebläsekessel"),
	z.literal("Standard-Heizkessel als Gebläsekessel mit Brennertausch"),
	z.literal("Standard-Heizkessel (ab 1995)"),
	z.literal("Niedertemperatur-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal("Niedertemperatur-Heizkessel als Umlaufwasserheizer"),
	z.literal("Niedertemperatur-Heizkessel als Gebläsekessel"),
	z.literal(
		"Niedertemperatur-Heizkessel als Gebläsekessel mit Brennertausch"
	),
	z.literal("Niedertemperatur-Heizkessel (ab 1995)"),
	z.literal("Brennwertkessel (bis 1994)"),
	z.literal("Brennwertkessel (ab 1995)"),
	z.literal("Brennwertkessel-verbessert"),
	z.literal("Biomasse-Wärmeerzeuger"),
	z.literal("Fern-/Nahwärme"),
	z.literal("Dezentrale Kraft-Wärme-Kopplung"),
	z.literal("Elektrisch betriebene Luft/Wasser-Heizungswärmepumpe"),
	z.literal("easy_Elektro-Wärmepumpe-Luft-TWW-dezentral"),
	z.literal("Elektrisch betriebene Wasser/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch betriebene Sole/Wasser-Heizungswärmepumpe"),
	z.literal("Elektrisch betriebene Abluft/Wasser-Heizungswärmepumpe"),
	z.literal("Gasraumheizer, schornsteingebunden"),
	z.literal("Gasraumheizer, Außenwand-Gerät"),
	z.literal("Ölbefeuerter Einzelofen"),
	z.literal("Kachelofen"),
	z.literal("Kohlebefeuerter eisener Ofen"),
	z.literal("Dezentrale Elektro-Speicherheizung"),
	z.literal("Dezentrales elektrisches Direktheizgerät"),
	z.literal("Zentral elektrisch beheizte Wärmeerzeuger"),
	z.literal("Solare Heizungsunterstützung"),
	z.literal("Sonstiges"),
]);

export const energietraegerEnumSchema = z.union([
	z.literal("Heizöl"),
	z.literal("Erdgas"),
	z.literal("Flüssiggas"),
	z.literal("Steinkohle"),
	z.literal("Braunkohle"),
	z.literal("Biogas"),
	z.literal("Biogas, gebäudenah erzeugt"),
	z.literal("biogenes Flüssiggas"),
	z.literal("Bioöl"),
	z.literal("Bioöl, gebäudenah erzeugt"),
	z.literal("Holz"),
	z.literal("Strom netzbezogen"),
	z.literal("Strom gebäudenah erzeugt (aus Photovoltaik, Windkraft)"),
	z.literal("Verdrängungsstrommix für KWK"),
	z.literal("Wärme (Erdwärme, Geothermie, Solarthermie, Umgebungswärme)"),
	z.literal("Kälte (Erdkälte, Umgebungskälte)"),
	z.literal("Abwärme aus Prozessen (prod)"),
	z.literal("Abwärme aus Prozessen (out)"),
	z.literal("Wärme aus KWK, gebäudeintegriert oder gebäudenah"),
	z.literal("Wärme aus Verbrennung von Siedlungsabfällen"),
	z.literal(
		"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
	),
	z.literal(
		"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
	),
	z.literal(
		"Nah-/Fernwärme aus KWK, erneuerbarer Brennstoff bzw. Energieträger"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
	),
	z.literal(
		"Nah-/Fernwärme aus Heizwerken, erneuerbarer Brennstoff bzw. Energieträger"
	),
]);

export const heizkreisauslegungstemperaturEnumSchema = z.union([
	z.literal("90/70"),
	z.literal("70/55"),
	z.literal("55/45"),
	z.literal("45/35"),
	z.literal("35/28"),
	z.literal("Warmluftheizung"),
	z.literal("nur Einzelraum-Heizgeräte"),
]);

export const trinkwarmwassererzeugerTyp18599EnumSchema = z.union([
	z.literal("Standard-Heizkessel als Umstell-/Wechselbrandkessel"),
	z.literal(
		"Standard-Heizkessel als Feststoffkessel (fossiler und biogener Brennstoff)"
	),
	z.literal("Standard-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal(
		"Standard-Heizkessel als Gebläsekessel (fossiler und biogener Brennstoff)"
	),
	z.literal("Standard-Heizkessel als Gebläsekessel mit Brennertausch"),
	z.literal("Standard-Heizkessel als Pelletkessel"),
	z.literal("Standard-Heizkessel als Hackschnitzelkessel"),
	z.literal("Niedertemperatur-Heizkessel als Gas-Spezial-Heizkessel"),
	z.literal("Niedertemperatur-Heizkessel als Umlaufwasserheizer"),
	z.literal("Niedertemperatur-Heizkessel als Kombikessel KSp"),
	z.literal("Niedertemperatur-Heizkessel als Kombikessel DL"),
	z.literal("Niedertemperatur-Heizkessel als Gebläsekessel"),
	z.literal(
		"Niedertemperatur-Heizkessel als Gebläsekessel mit Brennertausch"
	),
	z.literal("Brennwertkessel (Pellet)"),
	z.literal("Brennwertkessel (Öl/Gas)"),
	z.literal("Brennwertkessel (Öl, Gas), verbessert"),
	z.literal("Gas-Durchlauferhitzer"),
	z.literal("Fern-/Nahwärme"),
	z.literal("Dezentrale Kraft-Wärme-Kopplung, motorische Systeme"),
	z.literal("Dezentrale Kraft-Wärme-Kopplung, Systeme mit Brennstoffzellen"),
	z.literal("Dezentrale Einzelfeuerstätten, hydraulisch eingebunden"),
	z.literal("Elektrisch angetriebene Kellerluft/Wasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Luft/Wasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Abluft/Trinkwasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Abluft/Zuluft-Trinkwasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Kellerluft/Trinkwasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Wasser/Wasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Sole/Wasser-Wärmepumpe"),
	z.literal("Elektrisch angetriebene Abluft/Wasser-Wärmepumpe"),
	z.literal("Gasmotorisch angetriebene Luft/Wasser-Wärmepumpe"),
	z.literal("Sorptions-Gaswärmepumpe"),
	z.literal("Direkt beheizter Trinkwarmwasserspeicher (Gas)"),
	z.literal("Elektro-Durchlauferhitzer"),
	z.literal("Elektrisch beheizter Trinkwarmwasserspeicher"),
	z.literal("Solaranlagen zur Trinkwassererwärmung"),
]);

export const trinkwarmwassererzeugerTyp4701EnumSchema = z.union([
	z.literal("über Heizungsanlage beheizter Speicher"),
	z.literal("Elektro-Speicher"),
	z.literal("Direkt beheizter Trinkwarmwasserspeicher (Gas)"),
	z.literal("Elektro-Durchlauferhitzer"),
	z.literal("Solare Trinkwarmwasserbereitung"),
	z.literal("Sonstiges"),
]);

export const energieeffizienzklasseEnumSchema = z.union([
	z.literal("A+"),
	z.literal("A"),
	z.literal("B"),
	z.literal("C"),
	z.literal("D"),
	z.literal("E"),
	z.literal("F"),
	z.literal("G"),
	z.literal("H"),
]);

export const zeitraumStromDatenSchema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		"Energieverbrauch-Strom": z.number(),
		"Energieverbrauchsanteil-elektrisch-erzeugte-Kaelte": z
			.number()
			.optional(),
	})
);

export const nutzungGebaeudekategorieDatenSchema = z.record(z.unknown()).and(
	z.object({
		Gebaeudekategorie: z.union([
			z.literal("1:Verwaltungsgebäude (allgemein)"),
			z.literal("2:Parlaments- und Gerichtsgebäude"),
			z.literal("3:Ministerien u. Ämter u. Behörden"),
			z.literal("4:Polizeidienstgebäude"),
			z.literal("5:Gebäude für öffentliche Bereitschaftsdienste"),
			z.literal("6:Feuerwehrdienstgebäude"),
			z.literal("7:Bürogebäude"),
			z.literal("8:Bürogebäude - überwiegend Großraumbüros"),
			z.literal("9:Bankgebäude"),
			z.literal("10:Hochschule und Forschung (allgemein)"),
			z.literal("11:Gebäude für Lehre"),
			z.literal("12:Institute für Lehre und Forschung"),
			z.literal("13:Gebäude für Forschung ohne Lehre"),
			z.literal("14:Laborgebäude"),
			z.literal("15:Gesundheitswesen (allgemein)"),
			z.literal("16:Krankenhäuser (ohne Forschung und Lehre)"),
			z.literal(
				"17:Krankenhäuser (ohne Forschung und Lehre) und teilstationäre Versorgung"
			),
			z.literal(
				"18:Medizinische Einrichtungen für nicht stationäre Versorgung"
			),
			z.literal("19:Gebäude für Reha, Kur und Genesung"),
			z.literal("20:Bildungseinrichtungen (allgemein)"),
			z.literal("21:Schulen"),
			z.literal("22:Kinderbetreuungseinrichtungen"),
			z.literal("23:Kultureinrichtungen (allgemein)"),
			z.literal("24:Bibliotheken / Archive"),
			z.literal("25:Ausstellungsgebäude"),
			z.literal("26:Veranstaltungsgebäude"),
			z.literal("27:Gemeinschafts- / Gemeindehäuser"),
			z.literal("28:Opern / Theater"),
			z.literal("29:Sporteinrichtungen (allgemein)"),
			z.literal("30:Sporthallen"),
			z.literal("31:Fitnessstudios"),
			z.literal("32:Schwimmhallen"),
			z.literal("33:Gebäude für Sportaußenanlagen"),
			z.literal("34:Verpflegungseinrichtungen (allgemein)"),
			z.literal("35:Beherbergungsstätten (allgemein)"),
			z.literal("36:Hotels / Pensionen"),
			z.literal("37:Jugendherbergen u. Ferienhäuser"),
			z.literal("38:Gaststätten"),
			z.literal("39:Mensen u. Kantinen"),
			z.literal("40:Gewerbliche und industrielle Gebäude (allgemein)"),
			z.literal(
				"41:Gewerbliche und industrielle Gebäude - schwere Arbeit, stehende Tätigkeit"
			),
			z.literal(
				"42:Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit"
			),
			z.literal(
				"43:Gewerbliche und industrielle Gebäude - leichte Arbeit, überwiegend sitzende Tätigkeit"
			),
			z.literal("44:Gebäude für Lagerung"),
			z.literal("45:Verkaufsstätten (allgemein)"),
			z.literal("46:Kaufhäuser"),
			z.literal("47:Kaufhauszentren / Einkaufszentren"),
			z.literal("48:Märkte"),
			z.literal(
				"49:Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel"
			),
			z.literal("50:Läden"),
			z.literal(
				"51:Läden mit sehr hohem Anteil von Kühlung für Lebensmittel"
			),
			z.literal("52:Fernmeldetechnik"),
			z.literal("53:Sonstiges"),
		]),
		"Flaechenanteil-Nutzung": z.number(),
		"Vergleichswert-Waerme": z.number(),
		"Vergleichswert-Strom": z.number(),
	})
);

export const nutzungGebaeudekategorieEnumSchema = z.union([
	z.literal("1:Verwaltungsgebäude (allgemein)"),
	z.literal("2:Parlaments- und Gerichtsgebäude"),
	z.literal("3:Ministerien u. Ämter u. Behörden"),
	z.literal("4:Polizeidienstgebäude"),
	z.literal("5:Gebäude für öffentliche Bereitschaftsdienste"),
	z.literal("6:Feuerwehrdienstgebäude"),
	z.literal("7:Bürogebäude"),
	z.literal("8:Bürogebäude - überwiegend Großraumbüros"),
	z.literal("9:Bankgebäude"),
	z.literal("10:Hochschule und Forschung (allgemein)"),
	z.literal("11:Gebäude für Lehre"),
	z.literal("12:Institute für Lehre und Forschung"),
	z.literal("13:Gebäude für Forschung ohne Lehre"),
	z.literal("14:Laborgebäude"),
	z.literal("15:Gesundheitswesen (allgemein)"),
	z.literal("16:Krankenhäuser (ohne Forschung und Lehre)"),
	z.literal(
		"17:Krankenhäuser (ohne Forschung und Lehre) und teilstationäre Versorgung"
	),
	z.literal("18:Medizinische Einrichtungen für nicht stationäre Versorgung"),
	z.literal("19:Gebäude für Reha, Kur und Genesung"),
	z.literal("20:Bildungseinrichtungen (allgemein)"),
	z.literal("21:Schulen"),
	z.literal("22:Kinderbetreuungseinrichtungen"),
	z.literal("23:Kultureinrichtungen (allgemein)"),
	z.literal("24:Bibliotheken / Archive"),
	z.literal("25:Ausstellungsgebäude"),
	z.literal("26:Veranstaltungsgebäude"),
	z.literal("27:Gemeinschafts- / Gemeindehäuser"),
	z.literal("28:Opern / Theater"),
	z.literal("29:Sporteinrichtungen (allgemein)"),
	z.literal("30:Sporthallen"),
	z.literal("31:Fitnessstudios"),
	z.literal("32:Schwimmhallen"),
	z.literal("33:Gebäude für Sportaußenanlagen"),
	z.literal("34:Verpflegungseinrichtungen (allgemein)"),
	z.literal("35:Beherbergungsstätten (allgemein)"),
	z.literal("36:Hotels / Pensionen"),
	z.literal("37:Jugendherbergen u. Ferienhäuser"),
	z.literal("38:Gaststätten"),
	z.literal("39:Mensen u. Kantinen"),
	z.literal("40:Gewerbliche und industrielle Gebäude (allgemein)"),
	z.literal(
		"41:Gewerbliche und industrielle Gebäude - schwere Arbeit, stehende Tätigkeit"
	),
	z.literal(
		"42:Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit"
	),
	z.literal(
		"43:Gewerbliche und industrielle Gebäude - leichte Arbeit, überwiegend sitzende Tätigkeit"
	),
	z.literal("44:Gebäude für Lagerung"),
	z.literal("45:Verkaufsstätten (allgemein)"),
	z.literal("46:Kaufhäuser"),
	z.literal("47:Kaufhauszentren / Einkaufszentren"),
	z.literal("48:Märkte"),
	z.literal("49:Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel"),
	z.literal("50:Läden"),
	z.literal("51:Läden mit sehr hohem Anteil von Kühlung für Lebensmittel"),
	z.literal("52:Fernmeldetechnik"),
	z.literal("53:Sonstiges"),
]);

export const automatisierungsgradEnumSchema = z.union([
	z.literal("A"),
	z.literal("B"),
	z.literal("C"),
	z.literal("D"),
]);

export const artDerNutzungErneuerbarenEnergieEnumSchema = z.union([
	z.literal("solarthermische Anlagen"),
	z.literal("Strom aus erneuerbaren Energien"),
	z.literal("Geothermie oder Umweltwärme"),
	z.literal("feste Biomasse"),
	z.literal("flüssige Biomasse"),
	z.literal("gasförmige Biomasse"),
	z.literal("Kälte aus erneuerbaren Energien"),
	z.literal("Abwärme"),
	z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
	z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
	z.literal("Fernwärme oder Fernkälte"),
]);

export const automatisierungsgradTechnischesGebaeudemanagementEnumSchema =
	z.union([z.literal("A"), z.literal("B"), z.literal("C"), z.literal("D")]);

export const bauteilDachDatenSchema = z.record(z.unknown()).and(
	z.object({
		Flaechenbezeichnung: z.string(),
		Flaeche: z.number(),
		"U-Wert": z.number(),
	})
);

export const ausrichtungEnumSchema = z.union([
	z.literal("N"),
	z.literal("S"),
	z.literal("O"),
	z.literal("W"),
	z.literal("NO"),
	z.literal("NW"),
	z.literal("SO"),
	z.literal("SW"),
	z.literal("HOR"),
]);

export const mediumEnumSchema = z.union([
	z.literal("Aussenluft"),
	z.literal("Raumluft"),
	z.literal("Erdreich"),
]);

export const kaelteerzeugerTypEnumSchema = z.union([
	z.literal("Kolben- und Scrollverdichteranlagen"),
	z.literal("Schraubenverdichteranlagen"),
	z.literal("Turboverdichteranlagen"),
	z.literal("Sorptionskältemaschine"),
	z.literal("Sonstiges"),
]);

export const kaelteerzeugerRegelungEnumSchema = z.union([
	z.literal("ein-aus"),
	z.literal("Heißgasbypass oder ähnliches"),
	z.literal("mehrstufig schaltend"),
	z.literal("invertergeregelt"),
]);

export const rueckkuehlungEnumSchema = z.union([
	z.literal("Luftgekühlt-Kompaktbauweise"),
	z.literal("Luftgekühlt-Splitbauweise"),
	z.literal("Wassergekühlt-Verdunstungskühler"),
	z.literal("Wassergekühlt-Trockenkühler"),
	z.literal("Sonstiges"),
]);

export const kaelteTemperaturniveauEnumSchema = z.union([
	z.literal("direktverdampfend"),
	z.literal("6/12 oder kälter"),
	z.literal("über 6/12"),
]);

export const rLTAnlagenDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Funktion-Zuluft": z.union([z.boolean(), z.number()]),
		"Funktion-Abluft": z.union([z.boolean(), z.number()]),
		"WRG-Rueckwaermzahl": z.number().optional(),
		"Funktion-Heizregister": z.union([z.boolean(), z.number()]),
		"Funktion-Kuehlregister": z.union([z.boolean(), z.number()]),
		"Funktion-Dampfbefeuchter": z.union([z.boolean(), z.number()]),
		"Funktion-Wasserbefeuchter": z.union([z.boolean(), z.number()]),
		"Energietraeger-Befeuchtung": z.record(z.unknown()).optional(),
		"Anzahl-baugleiche": z.number(),
	})
);

export const nutzungEnumSchema = z.union([
	z.literal("1:Einzelbüro"),
	z.literal("2:Gruppenbüro (zwei bis sechs Arbeitsplätze)"),
	z.literal("3:Großraumbüro (ab sieben Arbeitsplätze)"),
	z.literal("4:Besprechung, Sitzung, Seminar"),
	z.literal("5:Schalterhalle"),
	z.literal("6:Einzelhandel / Kaufhaus"),
	z.literal("7:Einzelhandel / Kaufhaus (Leb.-Abteilung mit Kühlprodukten)"),
	z.literal("8:Klassenzimmer (Schule), Gruppenraum (Kindergarten)"),
	z.literal("9:Hörsaal, Auditorium"),
	z.literal("10:Bettenzimmer"),
	z.literal("11:Hotelzimmer"),
	z.literal("12:Kantine"),
	z.literal("13:Restaurant"),
	z.literal("14:Küchen in Nichtwohngebäuden"),
	z.literal("15:Küche - Vorbereitung, Lager"),
	z.literal("16:WC und Sanitärräume in Nichtwohngebäuden"),
	z.literal("17:sonstige Aufenthaltsräume"),
	z.literal("18:Nebenflächen ohne Aufenthaltsräume"),
	z.literal("19:Verkehrsflächen"),
	z.literal("20:Lager, Technik, Archiv"),
	z.literal("21:Rechenzentrum"),
	z.literal("22.1:Gewerbliche und industrielle Hallen - schwere Arbeit"),
	z.literal(
		"22.2:Gewerbliche und industrielle Hallen - mittelschwere Arbeit"
	),
	z.literal("22.3:Gewerbliche und industrielle Hallen - leichte Arbeit"),
	z.literal("23:Zuschauerbereich"),
	z.literal("24:Theater - Foyer"),
	z.literal("25:Bühne"),
	z.literal("26:Messe / Kongress"),
	z.literal("27:Ausstellungsräume und Museum"),
	z.literal("28:Bibliothek - Lesesaal"),
	z.literal("29:Bibliothek - Freihandbereich"),
	z.literal("30:Bibliothek - Magazin und Depot"),
	z.literal("31:Turnhalle"),
	z.literal("32:Parkhäuser (Büro- und Privatnutzung)"),
	z.literal("33:Parkhäuser (öffentliche Nutzung)"),
	z.literal("34:Saunabereich"),
	z.literal("35:Fitnessraum"),
	z.literal("36:Labor"),
	z.literal("37:Untersuchungs- und Behandlungsräume"),
	z.literal("38:Spezialpflegebereiche"),
	z.literal("39:Flure des allgemeinen Pflegebereichs"),
	z.literal("40:Arztpraxen und Therapeutische Praxen"),
	z.literal("41:Lagerhallen, Logistikhallen"),
	z.literal("42:Wohnen (EFH)"),
	z.literal("43:Wohnen (MFH)"),
	z.literal("44:Anwenderspezifische Nutzung"),
]);

export const sonnenschutzEnumSchema = z.union([
	z.literal("keine Bewertung des Sonnenschutzes (Zone: Wohnen)"),
	z.literal("Kein Sonnen- und/oder Blendschutz"),
	z.literal("Nur Blendschutz"),
	z.literal("Sonnen- und/oder Blendschutz, automatisch betrieben"),
	z.literal("Nur Blendschutz, lichtlenkend"),
]);

export const lampenartEnumSchema = z.union([
	z.literal("Glühlampen und Halogenglühlampe"),
	z.literal("Leuchtstofflampen-stabförmig-KVG/VVG"),
	z.literal("Leuchtstofflampen-stabförmig-EVG"),
	z.literal("Leuchtstofflampen-T5-stabförmig-EVG-effiziente Reflektoren"),
	z.literal("Leuchtstofflampen-kompakt-externes VG-alle VG"),
	z.literal("Leuchtstofflampen-kompakt-integriertes EVG"),
	z.literal("Hochdruckentladungslampen-alle VG"),
	z.literal("LED-Leuchten"),
	z.literal("LED-Ersatzlampen (stab- und kolbenförmig)"),
	z.literal("keine Bewertung der Beleuchtung (Zone: Wohnen)"),
	z.literal("Fachplanung"),
]);

export const beleuchtungsartEnumSchema = z.union([
	z.literal("direkt"),
	z.literal("indirekt"),
	z.literal("direkt-indirekt"),
	z.literal("keine Bewertung der Beleuchtung vorhanden (Zone:Wohnen)"),
	z.literal("Fachplanung"),
]);

export const endenergieEnergietraegerDatenSchema = z.record(z.unknown()).and(
	z.object({
		Energietraegerbezeichnung: energietraegerEnumSchema,
		Primaerenergiefaktor: z.number(),
		"Endenergiebedarf-Heizung-spezifisch": z.number(),
		"Endenergiebedarf-Kuehlung-Befeuchtung-spezifisch": z.number(),
		"Endenergiebedarf-Trinkwarmwasser-spezifisch": z.number(),
		"Endenergiebedarf-Beleuchtung-spezifisch": z.number(),
		"Endenergiebedarf-Lueftung-spezifisch": z.number(),
		"Endenergiebedarf-Energietraeger-Gesamtgebaeude-spezifisch": z.number(),
	})
);

export const nWGAushangDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Nutzenergiebedarf-Heizung-Diagramm": z.number(),
		"Nutzenergiebedarf-Trinkwarmwasser-Diagramm": z.number(),
		"Nutzenergiebedarf-Beleuchtung-Diagramm": z.number(),
		"Nutzenergiebedarf-Lueftung-Diagramm": z.number(),
		"Nutzenergiebedarf-Kuehlung-Befeuchtung-Diagramm": z.number(),
		"Endenergiebedarf-Heizung-Diagramm": z.number(),
		"Endenergiebedarf-Trinkwarmwasser-Diagramm": z.number(),
		"Endenergiebedarf-Beleuchtung-Diagramm": z.number(),
		"Endenergiebedarf-Lueftung-Diagramm": z.number(),
		"Endenergiebedarf-Kuehlung-Befeuchtung-Diagramm": z.number(),
		"Primaerenergiebedarf-Heizung-Diagramm": z.number(),
		"Primaerenergiebedarf-Trinkwarmwasser-Diagramm": z.number(),
		"Primaerenergiebedarf-Beleuchtung-Diagramm": z.number(),
		"Primaerenergiebedarf-Lueftung-Diagramm": z.number(),
		"Primaerenergiebedarf-Kuehlung-Befeuchtung-Diagramm": z.number(),
	})
);

export const modernisierungszeileSchema = z.record(z.unknown()).and(
	z.object({
		Nummer: z.number(),
		"Bauteil-Anlagenteil": z.union([
			z.literal("Dach"),
			z.literal("oberste Geschossdecke"),
			z.literal("Abseiten"),
			z.literal("Gauben"),
			z.literal("Dachfenster"),
			z.literal("Außenwand gg. Außenluft"),
			z.literal("Fenster"),
			z.literal("Rollläden und -kästen"),
			z.literal("Eingangstür"),
			z.literal("Nebentür"),
			z.literal("Kellerdecke"),
			z.literal("Boden gg. Außenluft"),
			z.literal("Außenwand gg. Erdreich"),
			z.literal("Boden gegen Erdreich"),
			z.literal("Luftundichtigkeiten"),
			z.literal("Heizung"),
			z.literal("Wärmeerzeuger"),
			z.literal("Wärmeverteilung / -abgabe"),
			z.literal("Warmwasserbereitung"),
			z.literal("Lüftung"),
			z.literal("Lüftungskonzept"),
			z.literal("Lüftungsanlage"),
			z.literal("Luftverteilung / -abgabe"),
			z.literal("Kühlung"),
			z.literal("Kälteerzeugung"),
			z.literal("Kälteverteilung / -abgabe"),
			z.literal("Be-/Entfeuchtung"),
			z.literal("Beleuchtung"),
			z.literal("Anlagenregelung"),
			z.literal("Gebäudeautomation"),
			z.literal("Sonstiges"),
		]),
		Massnahmenbeschreibung: z.string(),
		Modernisierungskombination: z.union([
			z.literal("in Zusammenhang mit größerer Modernisierung"),
			z.literal("als Einzelmaßnahme"),
		]),
		Amortisation: z.string().optional(),
		"spezifische-Kosten": z.string().optional(),
	})
);

export const modernisierungTeilEnumSchema = z.union([
	z.literal("Dach"),
	z.literal("oberste Geschossdecke"),
	z.literal("Abseiten"),
	z.literal("Gauben"),
	z.literal("Dachfenster"),
	z.literal("Außenwand gg. Außenluft"),
	z.literal("Fenster"),
	z.literal("Rollläden und -kästen"),
	z.literal("Eingangstür"),
	z.literal("Nebentür"),
	z.literal("Kellerdecke"),
	z.literal("Boden gg. Außenluft"),
	z.literal("Außenwand gg. Erdreich"),
	z.literal("Boden gegen Erdreich"),
	z.literal("Luftundichtigkeiten"),
	z.literal("Heizung"),
	z.literal("Wärmeerzeuger"),
	z.literal("Wärmeverteilung / -abgabe"),
	z.literal("Warmwasserbereitung"),
	z.literal("Lüftung"),
	z.literal("Lüftungskonzept"),
	z.literal("Lüftungsanlage"),
	z.literal("Luftverteilung / -abgabe"),
	z.literal("Kühlung"),
	z.literal("Kälteerzeugung"),
	z.literal("Kälteverteilung / -abgabe"),
	z.literal("Be-/Entfeuchtung"),
	z.literal("Beleuchtung"),
	z.literal("Anlagenregelung"),
	z.literal("Gebäudeautomation"),
	z.literal("Sonstiges"),
]);

export const modernisierungKombiEnumSchema = z.union([
	z.literal("in Zusammenhang mit größerer Modernisierung"),
	z.literal("als Einzelmaßnahme"),
]);

export const energietraegerDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"Energietraeger-Verbrauch": z.union([
				z.literal("Heizöl in Liter"),
				z.literal("Heizöl in kWh Heizwert"),
				z.literal("Heizöl in kWh Brennwert"),
				z.literal("Erdgas in m3"),
				z.literal("Erdgas in kWh Heizwert"),
				z.literal("Erdgas in kWh Brennwert"),
				z.literal("Flüssiggas in m3 gasförmig"),
				z.literal("Flüssiggas in Liter flüssig"),
				z.literal("Flüssiggas in kg"),
				z.literal("Flüssiggas in kWh Heizwert"),
				z.literal("Steinkohle in kg"),
				z.literal("Steinkohle in kWh Heizwert"),
				z.literal("Braunkohle in kg"),
				z.literal("Braunkohle in kWh Heizwert"),
				z.literal("Biogas in m3"),
				z.literal("Biogas in kWh Heizwert"),
				z.literal("Biogas in kWh Brennwert"),
				z.literal("Biogas, gebäudenah erzeugt in m3"),
				z.literal("Biogas, gebäudenah erzeugt in kWh Heizwert"),
				z.literal("Biogas, gebäudenah erzeugt in kWh Brennwert"),
				z.literal("biogenes Flüssiggas in m3 gasförmig"),
				z.literal("biogenes Flüssiggas in Liter flüssig"),
				z.literal("biogenes Flüssiggas in kg"),
				z.literal("biogenes Flüssiggas in kWh Heizwert"),
				z.literal("Bioöl in Liter"),
				z.literal("Bioöl in kWh Heizwert"),
				z.literal("Bioöl in kWh Brennwert"),
				z.literal("Bioöl, gebäudenah erzeugt in Liter"),
				z.literal("Bioöl, gebäudenah erzeugt in kWh Heizwert"),
				z.literal("Bioöl, gebäudenah erzeugt in kWh Brennwert"),
				z.literal("Holz in Raummeter"),
				z.literal("Holz in kg"),
				z.literal("Holz in kWh Heizwert"),
				z.literal("Holz in kWh Brennwert"),
				z.literal("Holz in Schüttraummeter"),
				z.literal("Strom netzbezogen in kWh"),
				z.literal(
					"Strom gebäudenah erzeugt (aus Photovoltaik, Windkraft) in kWh"
				),
				z.literal("Verdrängungsstrommix für KWK in kWh"),
				z.literal(
					"Wärme (Erdwärme, Geothermie, Solarthermie, Umgebungswärme) in kWh"
				),
				z.literal("Kälte (Erdkälte, Umgebungskälte) in kWh"),
				z.literal("Abwärme aus Prozessen (prod) in kWh"),
				z.literal("Abwärme aus Prozessen (out) in kWh"),
				z.literal(
					"Wärme aus KWK, gebäudeintegriert oder gebäudenah in kWh"
				),
				z.literal("Wärme aus Verbrennung von Siedlungsabfällen in kWh"),
				z.literal(
					"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger in kWh"
				),
				z.literal(
					"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger in kWh"
				),
				z.literal(
					"Nah-/Fernwärme aus KWK, erneuerbarer Brennstoff bzw. Energieträger in kWh"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger in kWh"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger in kWh"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, erneuerbarer Brennstoff bzw. Energieträger in kWh"
				),
			]),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Sonstiger-Energietraeger-Verbrauch": z.string(),
		})
	),
]);

export const leerstandszuschlagBekanntmachungDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			Leerstandsfaktor: z.number(),
			Startdatum: z.string(),
			Enddatum: z.string(),
			"Leerstandszuschlag-kWh": z.number(),
			Primaerenergiefaktor: z.number(),
		})
	);

export const leerstandszuschlagBekanntmachungDaten1Schema = z
	.record(z.unknown())
	.and(
		z.object({
			Leerstandsfaktor: z.number(),
			Startdatum: z.string(),
			Enddatum: z.string(),
			"Leerstandszuschlag-kWh": z.number(),
			Primaerenergiefaktor: z.number(),
		})
	);

export const bauteilOpakDatenSchema = z.record(z.unknown()).and(
	z.object({
		Flaechenbezeichnung: z.string(),
		Flaeche: z.number(),
		"U-Wert": z.number(),
		Ausrichtung: ausrichtungEnumSchema,
		grenztAn: mediumEnumSchema,
		"Glasdach-Lichtband-Lichtkuppel": z.union([z.boolean(), z.number()]),
		Vorhangfassade: z.union([z.boolean(), z.number()]),
	})
);

export const bauteilTransparentDatenSchema = z.record(z.unknown()).and(
	z.object({
		Flaechenbezeichnung: z.string(),
		Flaeche: z.number(),
		"U-Wert": z.number(),
		"g-Wert": z.number(),
		Ausrichtung: ausrichtungEnumSchema,
		"Glasdach-Lichtband-Lichtkuppel": z.union([z.boolean(), z.number()]),
		Vorhangfassade: z.union([z.boolean(), z.number()]),
	})
);

export const heizungsanlageDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"Waermeerzeuger-Bauweise-18599":
				heizwaermeerzeugerTyp18599EnumSchema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Waermeerzeuger-Bauweise-4701": heizwaermeerzeugerTyp4701EnumSchema,
		})
	),
]);

export const trinkwarmwasseranlageDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"Trinkwarmwassererzeuger-Bauweise-18599":
				trinkwarmwassererzeugerTyp18599EnumSchema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Trinkwarmwassererzeuger-Bauweise-4701":
				trinkwarmwassererzeugerTyp4701EnumSchema,
		})
	),
]);

export const heizungsanlageDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			Nennleistung: z.number(),
			"Waermeerzeuger-Baujahr": z.string(),
			"Anzahl-baugleiche": z.number(),
			Energietraeger: z.union([
				z.literal("Heizöl"),
				z.literal("Erdgas"),
				z.literal("Flüssiggas"),
				z.literal("Steinkohle"),
				z.literal("Braunkohle"),
				z.literal("Biogas"),
				z.literal("Biogas, gebäudenah erzeugt"),
				z.literal("biogenes Flüssiggas"),
				z.literal("Bioöl"),
				z.literal("Bioöl, gebäudenah erzeugt"),
				z.literal("Holz"),
				z.literal("Strom netzbezogen"),
				z.literal(
					"Strom gebäudenah erzeugt (aus Photovoltaik, Windkraft)"
				),
				z.literal("Verdrängungsstrommix für KWK"),
				z.literal(
					"Wärme (Erdwärme, Geothermie, Solarthermie, Umgebungswärme)"
				),
				z.literal("Kälte (Erdkälte, Umgebungskälte)"),
				z.literal("Abwärme aus Prozessen (prod)"),
				z.literal("Abwärme aus Prozessen (out)"),
				z.literal("Wärme aus KWK, gebäudeintegriert oder gebäudenah"),
				z.literal("Wärme aus Verbrennung von Siedlungsabfällen"),
				z.literal(
					"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
				),
				z.literal(
					"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
				),
				z.literal(
					"Nah-/Fernwärme aus KWK, erneuerbarer Brennstoff bzw. Energieträger"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
				),
				z.literal(
					"Nah-/Fernwärme aus Heizwerken, erneuerbarer Brennstoff bzw. Energieträger"
				),
			]),
			Primaerenergiefaktor: z.number(),
			Emissionsfaktor: z.number(),
		})
	)
	.and(heizungsanlageDaten1Schema);

export const trinkwarmwasseranlageDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			"Trinkwarmwassererzeuger-Baujahr": z.string(),
			"Anzahl-baugleiche": z.number(),
		})
	)
	.and(trinkwarmwasseranlageDaten1Schema);

export const leerstandszuschlagHeizungDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDatenSchema,
			Zuschlagsfaktor: z.number(),
			"witterungsbereinigter-Endenergieverbrauchsanteil-fuer-Heizung":
				z.number(),
		})
	),
]);

export const leerstandszuschlagWarmwasserDaten1Schema = z
	.record(z.unknown())
	.and(
		z.object({
			"keine-Nutzung-von-WW": z.union([z.boolean(), z.number()]),
		})
	)
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"kein-Leerstand": z.string(),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"Leerstandszuschlag-nach-Bekanntmachung":
						leerstandszuschlagBekanntmachungDaten1Schema,
				})
			),
		])
	);

export const leerstandszuschlagBekanntmachungDaten2Schema = z
	.record(z.unknown())
	.and(
		z.object({
			Leerstandsfaktor: z.number(),
			Startdatum: z.string(),
			Enddatum: z.string(),
			"Leerstandszuschlag-kWh": z.number(),
			Primaerenergiefaktor: z.number(),
		})
	);

export const leerstandszuschlagBekanntmachungDaten3Schema = z
	.record(z.unknown())
	.and(
		z.object({
			Leerstandsfaktor: z.number(),
			Startdatum: z.string(),
			Enddatum: z.string(),
			"Leerstandszuschlag-kWh": z.number(),
			Primaerenergiefaktor: z.number(),
		})
	);

export const zonenDatenSchema = z.record(z.unknown()).and(
	z.object({
		Zonenbezeichnung: z.string(),
		Nutzung: z.union([
			z.literal("1:Einzelbüro"),
			z.literal("2:Gruppenbüro (zwei bis sechs Arbeitsplätze)"),
			z.literal("3:Großraumbüro (ab sieben Arbeitsplätze)"),
			z.literal("4:Besprechung, Sitzung, Seminar"),
			z.literal("5:Schalterhalle"),
			z.literal("6:Einzelhandel / Kaufhaus"),
			z.literal(
				"7:Einzelhandel / Kaufhaus (Leb.-Abteilung mit Kühlprodukten)"
			),
			z.literal("8:Klassenzimmer (Schule), Gruppenraum (Kindergarten)"),
			z.literal("9:Hörsaal, Auditorium"),
			z.literal("10:Bettenzimmer"),
			z.literal("11:Hotelzimmer"),
			z.literal("12:Kantine"),
			z.literal("13:Restaurant"),
			z.literal("14:Küchen in Nichtwohngebäuden"),
			z.literal("15:Küche - Vorbereitung, Lager"),
			z.literal("16:WC und Sanitärräume in Nichtwohngebäuden"),
			z.literal("17:sonstige Aufenthaltsräume"),
			z.literal("18:Nebenflächen ohne Aufenthaltsräume"),
			z.literal("19:Verkehrsflächen"),
			z.literal("20:Lager, Technik, Archiv"),
			z.literal("21:Rechenzentrum"),
			z.literal(
				"22.1:Gewerbliche und industrielle Hallen - schwere Arbeit"
			),
			z.literal(
				"22.2:Gewerbliche und industrielle Hallen - mittelschwere Arbeit"
			),
			z.literal(
				"22.3:Gewerbliche und industrielle Hallen - leichte Arbeit"
			),
			z.literal("23:Zuschauerbereich"),
			z.literal("24:Theater - Foyer"),
			z.literal("25:Bühne"),
			z.literal("26:Messe / Kongress"),
			z.literal("27:Ausstellungsräume und Museum"),
			z.literal("28:Bibliothek - Lesesaal"),
			z.literal("29:Bibliothek - Freihandbereich"),
			z.literal("30:Bibliothek - Magazin und Depot"),
			z.literal("31:Turnhalle"),
			z.literal("32:Parkhäuser (Büro- und Privatnutzung)"),
			z.literal("33:Parkhäuser (öffentliche Nutzung)"),
			z.literal("34:Saunabereich"),
			z.literal("35:Fitnessraum"),
			z.literal("36:Labor"),
			z.literal("37:Untersuchungs- und Behandlungsräume"),
			z.literal("38:Spezialpflegebereiche"),
			z.literal("39:Flure des allgemeinen Pflegebereichs"),
			z.literal("40:Arztpraxen und Therapeutische Praxen"),
			z.literal("41:Lagerhallen, Logistikhallen"),
			z.literal("42:Wohnen (EFH)"),
			z.literal("43:Wohnen (MFH)"),
			z.literal("44:Anwenderspezifische Nutzung"),
		]),
		Anwenderspezifische_Nutzung_Bezeichnung: z.string().optional(),
		Zonenbesonderheiten: z.string().optional(),
		"Nettogrundflaeche-Zone": z.number(),
		"mittlere-lichte-Raumhoehe": z.number(),
		"Sonnenschutz-System": z.union([
			sonnenschutzEnumSchema,
			z.tuple([sonnenschutzEnumSchema]).rest(sonnenschutzEnumSchema),
		]),
		"Beleuchtungs-System": z.union([
			lampenartEnumSchema,
			z.tuple([lampenartEnumSchema]).rest(lampenartEnumSchema),
		]),
		"Beleuchtungs-Verteilung": z.union([
			z.literal("direkt"),
			z.literal("indirekt"),
			z.literal("direkt-indirekt"),
			z.literal(
				"keine Bewertung der Beleuchtung vorhanden (Zone:Wohnen)"
			),
			z.literal("Fachplanung"),
		]),
		"Praesenzkontrolle-Kunstlicht": z.union([z.boolean(), z.number()]),
		"Tageslichtabhaengige-Kontrollsysteme": z.union([
			z.boolean(),
			z.number(),
		]),
		"Endenergiebedarf-Heizung": z.number(),
		"Endenergiebedarf-Kuehlung": z.number(),
		"Endenergiebedarf-Befeuchtung": z.number(),
		"Endenergiebedarf-Trinkwarmwasser": z.number(),
		"Endenergiebedarf-Beleuchtung": z.number(),
		"Endenergiebedarf-Lufttransport": z.number(),
		"Endenergiebedarf-Hilfsenergie": z.number(),
	})
);

export const kaelteanlageDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Kaelteerzeuger-Bauweise": kaelteerzeugerTypEnumSchema,
		"Kaelteerzeuger-Regelung": z.union([
			z.literal("ein-aus"),
			z.literal("Heißgasbypass oder ähnliches"),
			z.literal("mehrstufig schaltend"),
			z.literal("invertergeregelt"),
		]),
		"Rueckkuehlung-Bauweise": rueckkuehlungEnumSchema,
		"Kaelteverteilung-Primaerkreis-Temperatur": z.union([
			z.literal("direktverdampfend"),
			z.literal("6/12 oder kälter"),
			z.literal("über 6/12"),
		]),
		Nennkaelteleistung: z.number(),
		"Kaelteerzeuger-Baujahr": z.string(),
		"Anzahl-baugleiche": z.number(),
		Energietraeger: z.union([
			z.literal("Heizöl"),
			z.literal("Erdgas"),
			z.literal("Flüssiggas"),
			z.literal("Steinkohle"),
			z.literal("Braunkohle"),
			z.literal("Biogas"),
			z.literal("Biogas, gebäudenah erzeugt"),
			z.literal("biogenes Flüssiggas"),
			z.literal("Bioöl"),
			z.literal("Bioöl, gebäudenah erzeugt"),
			z.literal("Holz"),
			z.literal("Strom netzbezogen"),
			z.literal("Strom gebäudenah erzeugt (aus Photovoltaik, Windkraft)"),
			z.literal("Verdrängungsstrommix für KWK"),
			z.literal(
				"Wärme (Erdwärme, Geothermie, Solarthermie, Umgebungswärme)"
			),
			z.literal("Kälte (Erdkälte, Umgebungskälte)"),
			z.literal("Abwärme aus Prozessen (prod)"),
			z.literal("Abwärme aus Prozessen (out)"),
			z.literal("Wärme aus KWK, gebäudeintegriert oder gebäudenah"),
			z.literal("Wärme aus Verbrennung von Siedlungsabfällen"),
			z.literal(
				"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
			),
			z.literal(
				"Nah-/Fernwärme aus KWK, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
			),
			z.literal(
				"Nah-/Fernwärme aus KWK, erneuerbarer Brennstoff bzw. Energieträger"
			),
			z.literal(
				"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Stein-/Braunkohle) bzw. Energieträger"
			),
			z.literal(
				"Nah-/Fernwärme aus Heizwerken, fossiler Brennstoff (Gasförmige und flüssige Brennstoffe) bzw. Energieträger"
			),
			z.literal(
				"Nah-/Fernwärme aus Heizwerken, erneuerbarer Brennstoff bzw. Energieträger"
			),
		]),
		Primaerenergiefaktor: z.number(),
	})
);

export const leerstandszuschlagHeizungDaten2Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDatenSchema,
			Zuschlagsfaktor: z.number(),
			"witterungsbereinigter-Endenergieverbrauchsanteil-fuer-Heizung":
				z.number(),
		})
	),
]);

export const leerstandszuschlagWarmwasserDaten3Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDaten1Schema,
		})
	),
]);

export const leerstandszuschlagThermischErzeugteKaelteDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDaten2Schema,
		})
	),
]);

export const leerstandszuschlagStromDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDaten3Schema,
		})
	),
]);

export const gebaeudebezDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Projektbezeichnung-Aussteller": z.string().optional(),
		"Gebaeudeadresse-Strasse-Nr": z.string(),
		"Gebaeudeadresse-Postleitzahl": z.string(),
		"Gebaeudeadresse-Ort": z.string(),
		Ausstellervorname: z.string().optional(),
		Ausstellername: z.string().optional(),
		"Aussteller-Bezeichnung": z.string().optional(),
		"Aussteller-Strasse-Nr": z.string().optional(),
		"Aussteller-PLZ": z.string().optional(),
		"Aussteller-Ort": z.string().optional(),
		"Zusatzinfos-beigefuegt": z.union([z.boolean(), z.number()]),
		"Angaben-erhaeltlich": z.string(),
		"Ergaenzdende-Erlaeuterungen": z.string().optional(),
		"NWG-Diagramm-Daten": nWGAushangDatenSchema.optional(),
	})
);

export const energietraegerDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			"Unterer-Heizwert": z.number(),
			Primaerenergiefaktor: z.number(),
			Emissionsfaktor: z.number(),
			Zeitraum: z.union([
				zeitraumDatenSchema,
				z.tuple([zeitraumDatenSchema]).rest(zeitraumDatenSchema),
			]),
		})
	)
	.and(energietraegerDaten1Schema);

export const leerstandszuschlagHeizungDatenSchema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDatenSchema,
			Zuschlagsfaktor: z.number(),
			"witterungsbereinigter-Endenergieverbrauchsanteil-fuer-Heizung":
				z.number(),
		})
	),
]);

export const leerstandszuschlagWarmwasserDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			"keine-Nutzung-von-WW": z.union([z.boolean(), z.number()]),
		})
	)
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"kein-Leerstand": z.string(),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"Leerstandszuschlag-nach-Bekanntmachung":
						leerstandszuschlagBekanntmachungDaten1Schema,
				})
			),
		])
	);

export const warmwasserzuschlagDatenSchema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		Primaerenergiefaktor: z.number(),
		"Warmwasserzuschlag-kWh": z.number(),
	})
);

export const kuehlzuschlagDatenSchema = z.record(z.unknown()).and(
	z.object({
		Startdatum: z.string(),
		Enddatum: z.string(),
		"Gebaeudenutzflaeche-gekuehlt": z.number(),
		Primaerenergiefaktor: z.number(),
		"Kuehlzuschlag-kWh": z.number(),
	})
);

export const wohngebaeudeVerbrauchsDaten1Schema = z.record(z.unknown()).and(
	z.object({
		"Flaechenermittlung-AN-aus-Wohnflaeche": z.union([
			z.boolean(),
			z.number(),
		]),
		Wohnflaeche: z.number().optional(),
		"Keller-beheizt": z.union([z.boolean(), z.number()]).optional(),
		Energietraeger: z.union([
			energietraegerDatenSchema,
			z.tuple([energietraegerDatenSchema]),
			z.tuple([energietraegerDatenSchema, energietraegerDatenSchema]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
		]),
		"Leerstandszuschlag-Heizung": leerstandszuschlagHeizungDatenSchema,
		"Leerstandszuschlag-Warmwasser":
			leerstandszuschlagWarmwasserDatenSchema,
		Warmwasserzuschlag: warmwasserzuschlagDatenSchema.optional(),
		Kuehlzuschlag: kuehlzuschlagDatenSchema.optional(),
		"Mittlerer-Endenergieverbrauch": z.number(),
		"Mittlerer-Primaerenergieverbrauch": z.number(),
		Energieeffizienzklasse: z.union([
			z.literal("A+"),
			z.literal("A"),
			z.literal("B"),
			z.literal("C"),
			z.literal("D"),
			z.literal("E"),
			z.literal("F"),
			z.literal("G"),
			z.literal("H"),
		]),
	})
);

export const wohngebaeudeVerbrauchsDaten2Schema = z.record(z.unknown()).and(
	z.object({
		"Flaechenermittlung-AN-aus-Wohnflaeche": z.union([
			z.boolean(),
			z.number(),
		]),
		Wohnflaeche: z.number().optional(),
		"Keller-beheizt": z.union([z.boolean(), z.number()]).optional(),
		Energietraeger: z.union([
			energietraegerDatenSchema,
			z.tuple([energietraegerDatenSchema]),
			z.tuple([energietraegerDatenSchema, energietraegerDatenSchema]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
		]),
		"Leerstandszuschlag-Heizung": leerstandszuschlagHeizungDatenSchema,
		"Leerstandszuschlag-Warmwasser":
			leerstandszuschlagWarmwasserDatenSchema,
		Warmwasserzuschlag: warmwasserzuschlagDatenSchema.optional(),
		Kuehlzuschlag: kuehlzuschlagDatenSchema.optional(),
		"Mittlerer-Endenergieverbrauch": z.number(),
		"Mittlerer-Primaerenergieverbrauch": z.number(),
		Energieeffizienzklasse: z.union([
			z.literal("A+"),
			z.literal("A"),
			z.literal("B"),
			z.literal("C"),
			z.literal("D"),
			z.literal("E"),
			z.literal("F"),
			z.literal("G"),
			z.literal("H"),
		]),
	})
);

export const leerstandszuschlagThermischErzeugteKaelteDatenSchema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDaten2Schema,
		})
	),
]);

export const leerstandszuschlagStromDatenSchema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"kein-Leerstand": z.string(),
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Leerstandszuschlag-nach-Bekanntmachung":
				leerstandszuschlagBekanntmachungDaten3Schema,
		})
	),
]);

export const nichtwohngebaeudeVerbrauchsDaten1Schema = z
	.record(z.unknown())
	.and(
		z.object({
			Energietraeger: z.union([
				energietraegerDatenSchema,
				z.tuple([energietraegerDatenSchema]),
				z.tuple([energietraegerDatenSchema, energietraegerDatenSchema]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
				z.tuple([
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
					energietraegerDatenSchema,
				]),
			]),
			"Warmwasser-enthalten": z.union([z.boolean(), z.number()]),
			"Kuehlung-enthalten": z.union([z.boolean(), z.number()]),
			"Strom-Daten": z.record(z.unknown()).and(
				z.object({
					"Stromverbrauch-enthaelt-Zusatzheizung": z.union([
						z.boolean(),
						z.number(),
					]),
					"Stromverbrauch-enthaelt-Warmwasser": z.union([
						z.boolean(),
						z.number(),
					]),
					"Stromverbrauch-enthaelt-Lueftung": z.union([
						z.boolean(),
						z.number(),
					]),
					"Stromverbrauch-enthaelt-Beleuchtung": z.union([
						z.boolean(),
						z.number(),
					]),
					"Stromverbrauch-enthaelt-Kuehlung": z.union([
						z.boolean(),
						z.number(),
					]),
					"Stromverbrauch-enthaelt-Sonstiges": z.union([
						z.boolean(),
						z.number(),
					]),
					"Zeitraum-Strom": z.union([
						zeitraumStromDatenSchema,
						z
							.tuple([zeitraumStromDatenSchema])
							.rest(zeitraumStromDatenSchema),
					]),
				})
			),
			"Leerstandszuschlag-Heizung": leerstandszuschlagHeizungDaten1Schema,
			"Leerstandszuschlag-Warmwasser":
				leerstandszuschlagWarmwasserDaten1Schema,
			"Leerstandszuschlag-thermisch-erzeugte-Kaelte":
				leerstandszuschlagThermischErzeugteKaelteDatenSchema,
			"Leerstandszuschlag-Strom": leerstandszuschlagStromDatenSchema,
			"Nutzung-Gebaeudekategorie": z.union([
				nutzungGebaeudekategorieDatenSchema,
				z.tuple([nutzungGebaeudekategorieDatenSchema]),
				z.tuple([
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
				]),
				z.tuple([
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
				]),
				z.tuple([
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
				]),
				z.tuple([
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
					nutzungGebaeudekategorieDatenSchema,
				]),
			]),
			"Endenergieverbrauch-Waerme": z.number(),
			"Endenergieverbrauch-Strom": z.number(),
			"Endenergieverbrauch-Waerme-Vergleichswert": z.number(),
			"Endenergieverbrauch-Strom-Vergleichswert": z.number(),
			Primaerenergieverbrauch: z.number(),
		})
	);

export const wohngebaeudeVerbrauchsDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Flaechenermittlung-AN-aus-Wohnflaeche": z.union([
			z.boolean(),
			z.number(),
		]),
		Wohnflaeche: z.number().optional(),
		"Keller-beheizt": z.union([z.boolean(), z.number()]).optional(),
		Energietraeger: z.union([
			energietraegerDatenSchema,
			z.tuple([energietraegerDatenSchema]),
			z.tuple([energietraegerDatenSchema, energietraegerDatenSchema]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
		]),
		"Leerstandszuschlag-Heizung": leerstandszuschlagHeizungDatenSchema,
		"Leerstandszuschlag-Warmwasser":
			leerstandszuschlagWarmwasserDatenSchema,
		Warmwasserzuschlag: warmwasserzuschlagDatenSchema.optional(),
		Kuehlzuschlag: kuehlzuschlagDatenSchema.optional(),
		"Mittlerer-Endenergieverbrauch": z.number(),
		"Mittlerer-Primaerenergieverbrauch": z.number(),
		Energieeffizienzklasse: z.union([
			z.literal("A+"),
			z.literal("A"),
			z.literal("B"),
			z.literal("C"),
			z.literal("D"),
			z.literal("E"),
			z.literal("F"),
			z.literal("G"),
			z.literal("H"),
		]),
	})
);

export const leerstandszuschlagWarmwasserDaten2Schema = z
	.record(z.unknown())
	.and(
		z.object({
			"keine-Nutzung-von-WW": z.union([z.boolean(), z.number()]),
		})
	)
	.and(leerstandszuschlagWarmwasserDaten3Schema);

export const wohngebaeudeBedarfsDaten41084701Schema = z
	.union([
		z.record(z.unknown()).and(
			z.object({
				"Endenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Bestand": z.number(),
			})
		),
		z.record(z.unknown()).and(
			z.object({
				"Primaerenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Endenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Neubau": z.number(),
			})
		),
	])
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"nicht-verschaerft-nach-GEG-34": z.union([
						z.boolean(),
						z.number(),
					]),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"verschaerft-nach-GEG-34": z.number(),
					"Anforderung-nach-GEG-16-unterschritten": z.number(),
				})
			),
		])
	)
	.and(
		z.record(z.unknown()).and(
			z.object({
				"Wohngebaeude-Anbaugrad": z.union([
					z.literal("freistehend"),
					z.literal("einseitig angebaut"),
					z.literal("zweiseitig angebaut"),
				]),
				Bruttovolumen: z.number(),
				"durchschnittliche-Geschosshoehe": z.number(),
				"Bauteil-Opak": z.union([
					bauteilOpakDatenSchema,
					z
						.tuple([bauteilOpakDatenSchema])
						.rest(bauteilOpakDatenSchema),
				]),
				"Bauteil-Transparent": z
					.union([
						bauteilTransparentDatenSchema,
						z.array(bauteilTransparentDatenSchema),
					])
					.optional(),
				"Bauteil-Dach": z
					.union([
						bauteilDachDatenSchema,
						z.array(bauteilDachDatenSchema),
					])
					.optional(),
				Waermebrueckenzuschlag: z.number(),
				Transmissionswaermeverlust: z.number(),
				Luftdichtheit: z.union([
					z.literal("undicht"),
					z.literal("normal"),
					z.literal("geprüft"),
				]),
				Lueftungswaermeverlust: z.number(),
				"Solare-Waermegewinne": z.number(),
				"Interne-Waermegewinne": z.number(),
				Heizungsanlage: z.union([
					heizungsanlageDatenSchema,
					z
						.tuple([heizungsanlageDatenSchema])
						.rest(heizungsanlageDatenSchema),
				]),
				"Pufferspeicher-Nenninhalt": z.number(),
				Heizkreisauslegungstemperatur: z.union([
					z.literal("90/70"),
					z.literal("70/55"),
					z.literal("55/45"),
					z.literal("45/35"),
					z.literal("35/28"),
					z.literal("Warmluftheizung"),
					z.literal("nur Einzelraum-Heizgeräte"),
				]),
				"Heizungsanlage-innerhalb-Huelle": z.union([
					z.boolean(),
					z.number(),
				]),
				Trinkwarmwasseranlage: z.union([
					trinkwarmwasseranlageDatenSchema,
					z
						.tuple([trinkwarmwasseranlageDatenSchema])
						.rest(trinkwarmwasseranlageDatenSchema),
				]),
				"Trinkwarmwasserspeicher-Nenninhalt": z.number(),
				"Trinkwarmwasserverteilung-Zirkulation": z.union([
					z.boolean(),
					z.number(),
				]),
				"Vereinfachte-Datenaufnahme": z.union([
					z.boolean(),
					z.number(),
				]),
				"spezifischer-Transmissionswaermeverlust-Ist": z.number(),
				"spezifischer-Transmissionswaermeverlust-Hoechstwert": z
					.number()
					.optional(),
				"angerechneter-lokaler-erneuerbarer-Strom": z
					.number()
					.optional(),
				Innovationsklausel: z.union([z.boolean(), z.number()]),
				Quartiersregelung: z.union([z.boolean(), z.number()]),
				"Primaerenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Energietraeger-Liste": z.union([
					endenergieEnergietraegerDatenSchema,
					z.tuple([endenergieEnergietraegerDatenSchema]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
				]),
				"Endenergiebedarf-Waerme-AN": z.number(),
				"Endenergiebedarf-Hilfsenergie-AN": z.number(),
				"Endenergiebedarf-Gesamt": z.number(),
				Primaerenergiebedarf: z.number(),
				Energieeffizienzklasse: z.union([
					z.literal("A+"),
					z.literal("A"),
					z.literal("B"),
					z.literal("C"),
					z.literal("D"),
					z.literal("E"),
					z.literal("F"),
					z.literal("G"),
					z.literal("H"),
				]),
				"Art-der-Nutzung-erneuerbaren-Energie-1": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-1": z.number().optional(),
				"Anteil-der-Pflichterfuellung-1": z.number().optional(),
				"Art-der-Nutzung-erneuerbaren-Energie-2": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-2": z.number().optional(),
				"Anteil-der-Pflichterfuellung-2": z.number().optional(),
				"verschaerft-nach-GEG-45-eingehalten": z
					.union([z.boolean(), z.number()])
					.optional(),
				"spezifischer-Transmissionswaermeverlust-verschaerft": z
					.number()
					.optional(),
				"Sommerlicher-Waermeschutz": z
					.union([z.boolean(), z.number()])
					.optional(),
				"Treibhausgasemissionen-Zusaetzliche-Verbrauchsdaten": z
					.number()
					.optional(),
				"Zusaetzliche-Verbrauchsdaten":
					wohngebaeudeVerbrauchsDaten1Schema.optional(),
			})
		)
	);

export const wohngebaeudeBedarfsDaten18599Schema = z
	.union([
		z.record(z.unknown()).and(
			z.object({
				"Endenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Bestand": z.number(),
			})
		),
		z.record(z.unknown()).and(
			z.object({
				"Primaerenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Endenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Neubau": z.number(),
			})
		),
	])
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"nicht-verschaerft-nach-GEG-34": z.union([
						z.boolean(),
						z.number(),
					]),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"verschaerft-nach-GEG-34": z.number(),
					"Anforderung-nach-GEG-16-unterschritten": z.number(),
				})
			),
		])
	)
	.and(
		z.record(z.unknown()).and(
			z.object({
				"Wohngebaeude-Anbaugrad": z.union([
					z.literal("freistehend"),
					z.literal("einseitig angebaut"),
					z.literal("zweiseitig angebaut"),
				]),
				Bruttovolumen: z.number(),
				"durchschnittliche-Geschosshoehe": z.number(),
				"Bauteil-Opak": z.union([
					bauteilOpakDatenSchema,
					z
						.tuple([bauteilOpakDatenSchema])
						.rest(bauteilOpakDatenSchema),
				]),
				"Bauteil-Transparent": z
					.union([
						bauteilTransparentDatenSchema,
						z.array(bauteilTransparentDatenSchema),
					])
					.optional(),
				"Bauteil-Dach": z
					.union([
						bauteilDachDatenSchema,
						z.array(bauteilDachDatenSchema),
					])
					.optional(),
				Waermebrueckenzuschlag: z.number(),
				Transmissionswaermesenken: z.number(),
				Luftdichtheit: z.union([
					z.literal("Gebäudekategorie I"),
					z.literal("Gebäudekategorie II"),
					z.literal("Gebäudekategorie III"),
					z.literal("Gebäudekategorie IV"),
				]),
				Lueftungswaermesenken: z.number(),
				"Waermequellen-durch-solare-Einstrahlung": z.number(),
				"Interne-Waermequellen": z.number(),
				Heizsystem: z.union([
					heizungsanlageDatenSchema,
					z
						.tuple([heizungsanlageDatenSchema])
						.rest(heizungsanlageDatenSchema),
				]),
				"Pufferspeicher-Nenninhalt": z.number(),
				Auslegungstemperatur: z.union([
					z.literal("90/70"),
					z.literal("70/55"),
					z.literal("55/45"),
					z.literal("45/35"),
					z.literal("35/28"),
					z.literal("Warmluftheizung"),
					z.literal("nur Einzelraum-Heizgeräte"),
				]),
				"Heizsystem-innerhalb-Huelle": z.union([
					z.boolean(),
					z.number(),
				]),
				Warmwasserbereitungssystem: z.union([
					trinkwarmwasseranlageDatenSchema,
					z
						.tuple([trinkwarmwasseranlageDatenSchema])
						.rest(trinkwarmwasseranlageDatenSchema),
				]),
				"Trinkwarmwasserspeicher-Nenninhalt": z.number(),
				"Trinkwarmwasserverteilung-Zirkulation": z.union([
					z.boolean(),
					z.number(),
				]),
				"Vereinfachte-Datenaufnahme": z.union([
					z.boolean(),
					z.number(),
				]),
				"spezifischer-Transmissionswaermetransferkoeffizient-Ist":
					z.number(),
				"spezifischer-Transmissionswaermetransferkoeffizient-Hoechstwert":
					z.number().optional(),
				"angerechneter-lokaler-erneuerbarer-Strom": z
					.number()
					.optional(),
				Innovationsklausel: z.union([z.boolean(), z.number()]),
				Quartiersregelung: z.union([z.boolean(), z.number()]),
				"Primaerenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Energietraeger-Liste": z.union([
					endenergieEnergietraegerDatenSchema,
					z.tuple([endenergieEnergietraegerDatenSchema]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
				]),
				"Endenergiebedarf-Waerme-AN": z.number(),
				"Endenergiebedarf-Hilfsenergie-AN": z.number(),
				"Endenergiebedarf-Gesamt": z.number(),
				"Primaerenergiebedarf-AN": z.number(),
				Energieeffizienzklasse: z.union([
					z.literal("A+"),
					z.literal("A"),
					z.literal("B"),
					z.literal("C"),
					z.literal("D"),
					z.literal("E"),
					z.literal("F"),
					z.literal("G"),
					z.literal("H"),
				]),
				"Art-der-Nutzung-erneuerbaren-Energie-1": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-1": z.number().optional(),
				"Anteil-der-Pflichterfuellung-1": z.number().optional(),
				"Art-der-Nutzung-erneuerbaren-Energie-2": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-2": z.number().optional(),
				"Anteil-der-Pflichterfuellung-2": z.number().optional(),
				"verschaerft-nach-GEG-45-eingehalten": z
					.union([z.boolean(), z.number()])
					.optional(),
				"spezifischer-Transmissionswaermetransferkoeffizient-verschaerft":
					z.number().optional(),
				"Sommerlicher-Waermeschutz": z
					.union([z.boolean(), z.number()])
					.optional(),
				"Treibhausgasemissionen-Zusaetzliche-Verbrauchsdaten": z
					.number()
					.optional(),
				"Zusaetzliche-Verbrauchsdaten":
					wohngebaeudeVerbrauchsDaten2Schema.optional(),
			})
		)
	);

export const nichtwohngebaeudeVerbrauchsDatenSchema = z.record(z.unknown()).and(
	z.object({
		Energietraeger: z.union([
			energietraegerDatenSchema,
			z.tuple([energietraegerDatenSchema]),
			z.tuple([energietraegerDatenSchema, energietraegerDatenSchema]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
			z.tuple([
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
				energietraegerDatenSchema,
			]),
		]),
		"Warmwasser-enthalten": z.union([z.boolean(), z.number()]),
		"Kuehlung-enthalten": z.union([z.boolean(), z.number()]),
		"Strom-Daten": z.record(z.unknown()).and(
			z.object({
				"Stromverbrauch-enthaelt-Zusatzheizung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Stromverbrauch-enthaelt-Warmwasser": z.union([
					z.boolean(),
					z.number(),
				]),
				"Stromverbrauch-enthaelt-Lueftung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Stromverbrauch-enthaelt-Beleuchtung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Stromverbrauch-enthaelt-Kuehlung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Stromverbrauch-enthaelt-Sonstiges": z.union([
					z.boolean(),
					z.number(),
				]),
				"Zeitraum-Strom": z.union([
					zeitraumStromDatenSchema,
					z
						.tuple([zeitraumStromDatenSchema])
						.rest(zeitraumStromDatenSchema),
				]),
			})
		),
		"Leerstandszuschlag-Heizung": leerstandszuschlagHeizungDaten1Schema,
		"Leerstandszuschlag-Warmwasser":
			leerstandszuschlagWarmwasserDaten1Schema,
		"Leerstandszuschlag-thermisch-erzeugte-Kaelte":
			leerstandszuschlagThermischErzeugteKaelteDatenSchema,
		"Leerstandszuschlag-Strom": leerstandszuschlagStromDatenSchema,
		"Nutzung-Gebaeudekategorie": z.union([
			nutzungGebaeudekategorieDatenSchema,
			z.tuple([nutzungGebaeudekategorieDatenSchema]),
			z.tuple([
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
			]),
			z.tuple([
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
			]),
			z.tuple([
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
			]),
			z.tuple([
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
				nutzungGebaeudekategorieDatenSchema,
			]),
		]),
		"Endenergieverbrauch-Waerme": z.number(),
		"Endenergieverbrauch-Strom": z.number(),
		"Endenergieverbrauch-Waerme-Vergleichswert": z.number(),
		"Endenergieverbrauch-Strom-Vergleichswert": z.number(),
		Primaerenergieverbrauch: z.number(),
	})
);

export const nichtwohngebaeudeBedarfsDatenSchema = z
	.union([
		z.record(z.unknown()).and(
			z.object({
				"Endenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Bestand": z.number(),
			})
		),
		z.record(z.unknown()).and(
			z.object({
				"Primaerenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Endenergiebedarf-Hoechstwert-Neubau": z.number(),
				"Treibhausgasemissionen-Hoechstwert-Neubau": z.number(),
			})
		),
	])
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"nicht-verschaerft-nach-GEG-34": z.union([
						z.boolean(),
						z.number(),
					]),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"verschaerft-nach-GEG-34": z.number(),
					"Anforderung-nach-GEG-19-unterschritten": z.number(),
				})
			),
		])
	)
	.and(
		z.record(z.unknown()).and(
			z.object({
				Bruttovolumen: z.number(),
				"Bauteil-Opak": z.union([
					bauteilOpakDatenSchema,
					z
						.tuple([bauteilOpakDatenSchema])
						.rest(bauteilOpakDatenSchema),
				]),
				"Bauteil-Transparent": z
					.union([
						bauteilTransparentDatenSchema,
						z.array(bauteilTransparentDatenSchema),
					])
					.optional(),
				"Bauteil-Dach": z
					.union([
						bauteilDachDatenSchema,
						z.array(bauteilDachDatenSchema),
					])
					.optional(),
				Waermebrueckenzuschlag: z.number(),
				"mittlere-Waermedurchgangskoeffizienten": z
					.union([z.boolean(), z.number()])
					.optional(),
				Transmissionswaermesenken: z.number(),
				Luftdichtheit: z.union([
					z.literal("Gebäudekategorie I"),
					z.literal("Gebäudekategorie II"),
					z.literal("Gebäudekategorie III"),
					z.literal("Gebäudekategorie IV"),
				]),
				Zone: z.union([
					zonenDatenSchema,
					z.tuple([zonenDatenSchema]).rest(zonenDatenSchema),
				]),
				Heizsystem: z.union([
					heizungsanlageDatenSchema,
					z
						.tuple([heizungsanlageDatenSchema])
						.rest(heizungsanlageDatenSchema),
				]),
				"Pufferspeicher-Nenninhalt": z.number(),
				Auslegungstemperatur: z.union([
					z.literal("90/70"),
					z.literal("70/55"),
					z.literal("55/45"),
					z.literal("45/35"),
					z.literal("35/28"),
					z.literal("Warmluftheizung"),
					z.literal("nur Einzelraum-Heizgeräte"),
				]),
				"Heizsystem-innerhalb-Huelle": z.union([
					z.boolean(),
					z.number(),
				]),
				Warmwasserbereitungssystem: z
					.union([
						trinkwarmwasseranlageDatenSchema,
						z.array(trinkwarmwasseranlageDatenSchema),
					])
					.optional(),
				"Trinkwarmwasserspeicher-Nenninhalt": z.number(),
				"Trinkwarmwasserverteilung-Zirkulation": z.union([
					z.boolean(),
					z.number(),
				]),
				Kaelteanlage: z
					.union([
						kaelteanlageDatenSchema,
						z.array(kaelteanlageDatenSchema),
					])
					.optional(),
				"Deckungsanteil-RLT-Kuehlung": z.number(),
				"Deckungsanteil-Direkte-Raumkuehlung": z.number(),
				"RLT-System": z
					.union([
						rLTAnlagenDatenSchema,
						z.array(rLTAnlagenDatenSchema),
					])
					.optional(),
				Automatisierungsgrad: z.union([
					z.literal("A"),
					z.literal("B"),
					z.literal("C"),
					z.literal("D"),
				]),
				"Automatisierungsgrad-Technisches-Gebaeudemanagement": z.union([
					z.literal("A"),
					z.literal("B"),
					z.literal("C"),
					z.literal("D"),
				]),
				"angerechneter-lokaler-erneuerbarer-Strom": z
					.number()
					.optional(),
				Innovationsklausel: z.union([z.boolean(), z.number()]),
				Quartiersregelung: z.union([z.boolean(), z.number()]),
				"Primaerenergiebedarf-Hoechstwert-Bestand": z.number(),
				"Energietraeger-Liste": z.union([
					endenergieEnergietraegerDatenSchema,
					z.tuple([endenergieEnergietraegerDatenSchema]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
					z.tuple([
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
						endenergieEnergietraegerDatenSchema,
					]),
				]),
				"Endenergiebedarf-Waerme-NGF": z.number(),
				"Endenergiebedarf-Strom-NGF": z.number(),
				"Endenergiebedarf-Gesamt-NGF": z.number(),
				"Primaerenergiebedarf-NGF": z.number(),
				"Ein-Zonen-Modell": z.union([z.boolean(), z.number()]),
				"Vereinfachte-Datenaufnahme": z.union([
					z.boolean(),
					z.number(),
				]),
				"Vereinfachungen-18599-1-D": z.union([z.boolean(), z.number()]),
				"Art-der-Nutzung-erneuerbaren-Energie-1": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-1": z.number().optional(),
				"Anteil-der-Pflichterfuellung-1": z.number().optional(),
				"Art-der-Nutzung-erneuerbaren-Energie-2": z
					.union([
						z.literal("solarthermische Anlagen"),
						z.literal("Strom aus erneuerbaren Energien"),
						z.literal("Geothermie oder Umweltwärme"),
						z.literal("feste Biomasse"),
						z.literal("flüssige Biomasse"),
						z.literal("gasförmige Biomasse"),
						z.literal("Kälte aus erneuerbaren Energien"),
						z.literal("Abwärme"),
						z.literal("Kraft-Wärme-Kopplung hocheff. KWK-Anlage"),
						z.literal("Kraft-Wärme-Kopplung Brennstoffzellenh."),
						z.literal("Fernwärme oder Fernkälte"),
					])
					.optional(),
				"Deckungsanteil-2": z.number().optional(),
				"Anteil-der-Pflichterfuellung-2": z.number().optional(),
				"verschaerft-nach-GEG-45-eingehalten": z
					.union([z.boolean(), z.number()])
					.optional(),
				"Anforderung-nach-GEG-52-Renovierung-eingehalten": z
					.union([z.boolean(), z.number()])
					.optional(),
				"Sommerlicher-Waermeschutz": z
					.union([z.boolean(), z.number()])
					.optional(),
				"Treibhausgasemissionen-Zusaetzliche-Verbrauchsdaten": z
					.number()
					.optional(),
				"Zusaetzliche-Verbrauchsdaten":
					nichtwohngebaeudeVerbrauchsDaten1Schema.optional(),
			})
		)
	);

export const wohngebaeudeDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			Verbrauchswerte: wohngebaeudeVerbrauchsDatenSchema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Bedarfswerte-easy": wohngebaeudeBedarfsDatenEasySchema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Bedarfswerte-4108-4701": wohngebaeudeBedarfsDaten41084701Schema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Bedarfswerte-18599": wohngebaeudeBedarfsDaten18599Schema,
		})
	),
]);

export const nichtwohngebaeudeDaten1Schema = z.union([
	z.record(z.unknown()).and(
		z.object({
			"Verbrauchswerte-NWG": nichtwohngebaeudeVerbrauchsDatenSchema,
		})
	),
	z.record(z.unknown()).and(
		z.object({
			"Bedarfswerte-NWG": nichtwohngebaeudeBedarfsDatenSchema,
		})
	),
]);

export const wohngebaeudeDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			Gebaeudetyp: z.union([
				z.literal("Einfamilienhaus"),
				z.literal("Zweifamilienhaus"),
				z.literal("Mehrfamilienhaus"),
				z.literal("Wohnteil gemischt genutztes Gebäude"),
				z.literal("Beidseitig angebautes Gebäude"),
				z.literal("Einseitig angebautes Gebäude"),
				z.literal("Sonstiges"),
			]),
			"Anzahl-Wohneinheiten": z.number(),
			Gebaeudenutzflaeche: z.number(),
		})
	)
	.and(wohngebaeudeDaten1Schema);

export const nichtwohngebaeudeDatenSchema = z
	.record(z.unknown())
	.and(
		z.object({
			"Hauptnutzung-Gebaeudekategorie": z.union([
				z.literal("1:Verwaltungsgebäude (allgemein)"),
				z.literal("2:Parlaments- und Gerichtsgebäude"),
				z.literal("3:Ministerien u. Ämter u. Behörden"),
				z.literal("4:Polizeidienstgebäude"),
				z.literal("5:Gebäude für öffentliche Bereitschaftsdienste"),
				z.literal("6:Feuerwehrdienstgebäude"),
				z.literal("7:Bürogebäude"),
				z.literal("8:Bürogebäude - überwiegend Großraumbüros"),
				z.literal("9:Bankgebäude"),
				z.literal("10:Hochschule und Forschung (allgemein)"),
				z.literal("11:Gebäude für Lehre"),
				z.literal("12:Institute für Lehre und Forschung"),
				z.literal("13:Gebäude für Forschung ohne Lehre"),
				z.literal("14:Laborgebäude"),
				z.literal("15:Gesundheitswesen (allgemein)"),
				z.literal("16:Krankenhäuser (ohne Forschung und Lehre)"),
				z.literal(
					"17:Krankenhäuser (ohne Forschung und Lehre) und teilstationäre Versorgung"
				),
				z.literal(
					"18:Medizinische Einrichtungen für nicht stationäre Versorgung"
				),
				z.literal("19:Gebäude für Reha, Kur und Genesung"),
				z.literal("20:Bildungseinrichtungen (allgemein)"),
				z.literal("21:Schulen"),
				z.literal("22:Kinderbetreuungseinrichtungen"),
				z.literal("23:Kultureinrichtungen (allgemein)"),
				z.literal("24:Bibliotheken / Archive"),
				z.literal("25:Ausstellungsgebäude"),
				z.literal("26:Veranstaltungsgebäude"),
				z.literal("27:Gemeinschafts- / Gemeindehäuser"),
				z.literal("28:Opern / Theater"),
				z.literal("29:Sporteinrichtungen (allgemein)"),
				z.literal("30:Sporthallen"),
				z.literal("31:Fitnessstudios"),
				z.literal("32:Schwimmhallen"),
				z.literal("33:Gebäude für Sportaußenanlagen"),
				z.literal("34:Verpflegungseinrichtungen (allgemein)"),
				z.literal("35:Beherbergungsstätten (allgemein)"),
				z.literal("36:Hotels / Pensionen"),
				z.literal("37:Jugendherbergen u. Ferienhäuser"),
				z.literal("38:Gaststätten"),
				z.literal("39:Mensen u. Kantinen"),
				z.literal(
					"40:Gewerbliche und industrielle Gebäude (allgemein)"
				),
				z.literal(
					"41:Gewerbliche und industrielle Gebäude - schwere Arbeit, stehende Tätigkeit"
				),
				z.literal(
					"42:Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit"
				),
				z.literal(
					"43:Gewerbliche und industrielle Gebäude - leichte Arbeit, überwiegend sitzende Tätigkeit"
				),
				z.literal("44:Gebäude für Lagerung"),
				z.literal("45:Verkaufsstätten (allgemein)"),
				z.literal("46:Kaufhäuser"),
				z.literal("47:Kaufhauszentren / Einkaufszentren"),
				z.literal("48:Märkte"),
				z.literal(
					"49:Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel"
				),
				z.literal("50:Läden"),
				z.literal(
					"51:Läden mit sehr hohem Anteil von Kühlung für Lebensmittel"
				),
				z.literal("52:Fernmeldetechnik"),
				z.literal("53:Sonstiges"),
			]),
			"Hauptnutzung-Gebaeudekategorie-Sonstiges-Beschreibung": z
				.string()
				.optional(),
			Nettogrundflaeche: z.number(),
		})
	)
	.and(nichtwohngebaeudeDaten1Schema);

export const anonymeGEGDatenSchema = z
	.union([
		z.record(z.unknown()).and(
			z.object({
				"Keine-inspektionspflichtige-Anlage": z.union([
					z.boolean(),
					z.number(),
				]),
			})
		),
		z.record(z.unknown()).and(
			z.object({
				"Anzahl-Klimanlagen": z.number(),
				"Anlage-groesser-12kW-ohneGA": z.union([
					z.boolean(),
					z.number(),
				]),
				"Anlage-groesser-12kW-mitGA": z.union([
					z.boolean(),
					z.number(),
				]),
				"Anlage-groesser-70kW": z.union([z.boolean(), z.number()]),
				"Faelligkeitsdatum-Inspektion": z.string(),
			})
		),
	])
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					Wohngebaeude: wohngebaeudeDatenSchema,
				})
			),
			z.record(z.unknown()).and(
				z.object({
					Nichtwohngebaeude: nichtwohngebaeudeDatenSchema,
				})
			),
		])
	)
	.and(
		z.union([
			z.record(z.unknown()).and(
				z.object({
					"Keine-Modernisierung-Erweiterung-Vorhaben": z.union([
						z.boolean(),
						z.number(),
					]),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"Modernisierung-Erweiterung-anzeigepflichtiges-Vorhaben":
						z.union([z.boolean(), z.number()]),
				})
			),
			z.record(z.unknown()).and(
				z.object({
					"Modernisierung-Erweiterung-genehmigungspflichtiges-Vorhaben":
						z.union([z.boolean(), z.number()]),
				})
			),
		])
	)
	.and(
		z.record(z.unknown()).and(
			z.object({
				Registriernummer: z.string(),
				Ausstellungsdatum: z.string(),
				Bundesland: z.union([
					z.literal("Baden-Württemberg"),
					z.literal("Bayern"),
					z.literal("Berlin"),
					z.literal("Brandenburg"),
					z.literal("Bremen"),
					z.literal("Hamburg"),
					z.literal("Hessen"),
					z.literal("Mecklenburg-Vorpommern"),
					z.literal("Niedersachsen"),
					z.literal("Nordrhein-Westfalen"),
					z.literal("Rheinland-Pfalz"),
					z.literal("Saarland"),
					z.literal("Sachsen"),
					z.literal("Sachsen-Anhalt"),
					z.literal("Schleswig-Holstein"),
					z.literal("Thüringen"),
				]),
				Postleitzahl: z.string(),
				Gebaeudeteil: z.union([
					z.literal("Ganzes Gebäude"),
					z.literal("Teil des Wohngebäudes"),
					z.literal("Teil des Nichtwohngebäudes"),
				]),
				"Baujahr-Gebaeude": z.string(),
				"Altersklasse-Gebaeude": z.union([
					z.literal("bis 1918"),
					z.literal("1919...1948"),
					z.literal("1949...1957"),
					z.literal("1958...1968"),
					z.literal("1969...1978"),
					z.literal("1979...1983"),
					z.literal("1984...1994"),
					z.literal("1995...2002"),
					z.literal("2003...2009"),
					z.literal("2010...2016"),
					z.literal("ab 2017"),
				]),
				"Baujahr-Waermeerzeuger": z.string(),
				"Altersklasse-Waermeerzeuger": z.union([
					z.literal("bis 1918"),
					z.literal("1919...1948"),
					z.literal("1949...1957"),
					z.literal("1958...1968"),
					z.literal("1969...1978"),
					z.literal("1979...1983"),
					z.literal("1984...1994"),
					z.literal("1995...2002"),
					z.literal("2003...2009"),
					z.literal("2010...2016"),
					z.literal("ab 2017"),
				]),
				"wesentliche-Energietraeger-Heizung": z.string(),
				"wesentliche-Energietraeger-Warmwasser": z.string(),
				"Erneuerbare-Art": z.string(),
				"Erneuerbare-Verwendung": z.string(),
				"Lueftungsart-Fensterlueftung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Lueftungsart-Schachtlueftung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Lueftungsart-Anlage-o-WRG": z.union([z.boolean(), z.number()]),
				"Lueftungsart-Anlage-m-WRG": z.union([z.boolean(), z.number()]),
				"Kuehlungsart-passive-Kuehlung": z.union([
					z.boolean(),
					z.number(),
				]),
				"Kuehlungsart-Strom": z.union([z.boolean(), z.number()]),
				"Kuehlungsart-Waerme": z.union([z.boolean(), z.number()]),
				"Kuehlungsart-gelieferte-Kaelte": z.union([
					z.boolean(),
					z.number(),
				]),
				Treibhausgasemissionen: z.number(),
				Ausstellungsanlass: z.union([
					z.literal("Neubau"),
					z.literal("Modernisierung-Erweiterung"),
					z.literal("Vermietung-Verkauf"),
					z.literal("Aushangpflicht"),
					z.literal("Sonstiges"),
				]),
				"Datenerhebung-Aussteller": z.union([z.boolean(), z.number()]),
				"Datenerhebung-Eigentuemer": z.union([z.boolean(), z.number()]),
				"Empfehlungen-moeglich": z.union([z.boolean(), z.number()]),
				Modernisierungsempfehlungen: z
					.union([
						modernisierungszeileSchema,
						z.array(modernisierungszeileSchema),
					])
					.optional(),
				"Softwarehersteller-Programm-Version": z.string().optional(),
				"@Gesetzesgrundlage": gesetzesgrundlageEnumSchema,
				"@Rechtsstand": z.string(),
				"@Rechtsstand-Grund": rechtsstandGrundEnumSchema,
			})
		)
	);

export const gEGDatenSchema = z.record(z.unknown()).and(
	z.object({
		"Gebaeudebezogene-Daten": gebaeudebezDatenSchema.optional(),
		"Energieausweis-Daten": anonymeGEGDatenSchema,
	})
);

export const kontrollsystemGEG2023V10Schema = z.record(z.unknown()).and(
	z.record(z.unknown()).and(
		z.object({
			"GEG-Energieausweis": gEGDatenSchema.optional(),
			"GEG-Daten": gEGDatenSchema.optional(),
			"Gebaeudebez-Daten": gebaeudebezDatenSchema.optional(),
			"anonyme-GEG-Daten": anonymeGEGDatenSchema.optional(),
			"Gesetzesgrundlage-enum": gesetzesgrundlageEnumSchema.optional(),
			"Rechtsstand-Grund-enum": rechtsstandGrundEnumSchema.optional(),
			"Bundesland-enum": bundeslandEnumSchema.optional(),
			"Gebaeudeteil-enum": gebaeudeteilEnumSchema.optional(),
			"Altersklasse-enum": altersklasseEnumSchema.optional(),
			"Anlass-enum": anlassEnumSchema.optional(),
			"Wohngebaeude-Daten": wohngebaeudeDatenSchema.optional(),
			"Gebaeudetyp-enum": gebaeudetypEnumSchema.optional(),
			"Wohngebaeude-Verbrauchs-Daten":
				wohngebaeudeVerbrauchsDatenSchema.optional(),
			"Energietraeger-Daten": energietraegerDatenSchema.optional(),
			"Energietraeger-Verbrauch-enum":
				energietraegerVerbrauchEnumSchema.optional(),
			"Zeitraum-Daten": zeitraumDatenSchema.optional(),
			"Warmwasserzuschlag-Daten":
				warmwasserzuschlagDaten1Schema.optional(),
			"Kuehlzuschlag-Daten": kuehlzuschlagDaten1Schema.optional(),
			"Leerstandszuschlag-Heizung-Daten":
				leerstandszuschlagHeizungDaten2Schema.optional(),
			"Leerstandszuschlag-Warmwasser-Daten":
				leerstandszuschlagWarmwasserDaten2Schema.optional(),
			"Leerstandszuschlag-thermisch-erzeugte-Kaelte-Daten":
				leerstandszuschlagThermischErzeugteKaelteDaten1Schema.optional(),
			"Leerstandszuschlag-Strom-Daten":
				leerstandszuschlagStromDaten1Schema.optional(),
			"Leerstandszuschlag-Bekanntmachung-Daten":
				leerstandszuschlagBekanntmachungDaten4Schema.optional(),
			"Warmwasserwertermittlung-enum":
				warmwasserwertermittlungEnumSchema.optional(),
			"Wohngebaeude-Bedarfs-Daten-easy":
				wohngebaeudeBedarfsDatenEasySchema.optional(),
			"Heizwaermeerzeuger-Typ-easy-enum":
				heizwaermeerzeugerTypEasyEnumSchema.optional(),
			"Waermeschutz-Variante-enum":
				waermeschutzVarianteEnumSchema.optional(),
			"Wohngebaeude-Bedarfs-Daten-4108-4701":
				wohngebaeudeBedarfsDaten41084701Schema.optional(),
			"Wohngebaeude-Anbaugrad-enum":
				wohngebaeudeAnbaugradEnumSchema.optional(),
			"Luftdichtheit-4701-enum": luftdichtheit4701EnumSchema.optional(),
			"Luftdichtheit-18599-enum": luftdichtheit18599EnumSchema.optional(),
			"Heizungsanlage-Daten": heizungsanlageDatenSchema.optional(),
			"Heizwaermeerzeuger-Typ-18599-enum":
				heizwaermeerzeugerTyp18599EnumSchema.optional(),
			"Heizwaermeerzeuger-Typ-4701-enum":
				heizwaermeerzeugerTyp4701EnumSchema.optional(),
			"Energietraeger-enum": energietraegerEnumSchema.optional(),
			"Heizkreisauslegungstemperatur-enum":
				heizkreisauslegungstemperaturEnumSchema.optional(),
			"Trinkwarmwasseranlage-Daten":
				trinkwarmwasseranlageDatenSchema.optional(),
			"Trinkwarmwassererzeuger-Typ-18599-enum":
				trinkwarmwassererzeugerTyp18599EnumSchema.optional(),
			"Trinkwarmwassererzeuger-Typ-4701-enum":
				trinkwarmwassererzeugerTyp4701EnumSchema.optional(),
			"Wohngebaeude-Bedarfs-Daten-18599":
				wohngebaeudeBedarfsDaten18599Schema.optional(),
			"Nichtwohngebaeude-Daten": nichtwohngebaeudeDatenSchema.optional(),
			"Energieeffizienzklasse-enum":
				energieeffizienzklasseEnumSchema.optional(),
			"Nichtwohngebaeude-Verbrauchs-Daten":
				nichtwohngebaeudeVerbrauchsDatenSchema.optional(),
			"Zeitraum-Strom-Daten": zeitraumStromDatenSchema.optional(),
			"Nutzung-Gebaeudekategorie-Daten":
				nutzungGebaeudekategorieDatenSchema.optional(),
			"Nutzung-Gebaeudekategorie-enum":
				nutzungGebaeudekategorieEnumSchema.optional(),
			"Nichtwohngebaeude-Bedarfs-Daten":
				nichtwohngebaeudeBedarfsDatenSchema.optional(),
			"Automatisierungsgrad-enum":
				automatisierungsgradEnumSchema.optional(),
			"Art-der-Nutzung-erneuerbaren-Energie-enum":
				artDerNutzungErneuerbarenEnergieEnumSchema.optional(),
			"Automatisierungsgrad-Technisches-Gebaeudemanagement-enum":
				automatisierungsgradTechnischesGebaeudemanagementEnumSchema.optional(),
			"Bauteil-Opak-Daten": bauteilOpakDatenSchema.optional(),
			"Bauteil-Transparent-Daten":
				bauteilTransparentDatenSchema.optional(),
			"Bauteil-Dach-Daten": bauteilDachDatenSchema.optional(),
			"Ausrichtung-enum": ausrichtungEnumSchema.optional(),
			"Medium-enum": mediumEnumSchema.optional(),
			"Kaelteanlage-Daten": kaelteanlageDatenSchema.optional(),
			"Kaelteerzeuger-Typ-enum": kaelteerzeugerTypEnumSchema.optional(),
			"Kaelteerzeuger-Regelung-enum":
				kaelteerzeugerRegelungEnumSchema.optional(),
			"Rueckkuehlung-enum": rueckkuehlungEnumSchema.optional(),
			"Kaelte-Temperaturniveau-enum":
				kaelteTemperaturniveauEnumSchema.optional(),
			"RLT-Anlagen-Daten": rLTAnlagenDatenSchema.optional(),
			"Zonen-Daten": zonenDatenSchema.optional(),
			"Nutzung-enum": nutzungEnumSchema.optional(),
			"Sonnenschutz-enum": sonnenschutzEnumSchema.optional(),
			"Lampenart-enum": lampenartEnumSchema.optional(),
			"Beleuchtungsart-enum": beleuchtungsartEnumSchema.optional(),
			"Endenergie-Energietraeger-Daten":
				endenergieEnergietraegerDatenSchema.optional(),
			"NWG-Aushang-Daten": nWGAushangDatenSchema.optional(),
			Modernisierungszeile: modernisierungszeileSchema.optional(),
			"Modernisierung-Teil-enum": modernisierungTeilEnumSchema.optional(),
			"Modernisierung-Kombi-enum":
				modernisierungKombiEnumSchema.optional(),
		})
	)
);
