//// ------------------------------------------------------
//// THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
//// ------------------------------------------------------

Project "IBCornelsen Database" {
  database_type: 'PostgreSQL'
  Note: ''
}

Table Anteilshaber {
  id Int [pk, increment]
  benutzer_id Int [not null]
  rolle String
  privilegien BigInt
  uid String [unique, not null]
  benutzer benutzer [not null]
  objekt_id Int [not null]
  objekt Objekt [not null]
}

Table ApiRequests {
  id Int [pk, increment]
  date DateTime [default: `now()`, not null]
  ip String [not null]
  method String [not null]
  path String [not null]
  status Int [not null]
  responseTime Float [not null]
  responseSize Int [not null]
  userAgent String [not null]
  user_id Int
  user benutzer
}

Table Aufnahme {
  id Int [pk, increment]
  uid String [unique, not null, note: '@zod.describe("UID der Gebäude Aufnahme")']
  benutzer_id Int
  benutzer benutzer
  ausweisart Ausweisart [note: '@zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen")']
  gebaeudetyp String [note: '@zod.describe("Art des Gebäudes und seiner primären Nutzungsart")']
  gebaeudeteil String [note: '@zod.describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil")']
  baujahr_gebaeude Int[] [not null, note: '@zod.describe("Alle Jahre in denen das Gebäude konstruiert oder grundlegend verändert wurde")']
  baujahr_heizung Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Heizung eingebaut oder grundlegend verändert wurde")']
  baujahr_klima Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Klimaanlage eingebaut oder grundlegend verändert wurde")']
  einheiten Int [note: '@zod.describe("Anzahl der (Wohn)Einheiten im Gebäude")']
  flaeche Int [note: '@zod.describe("Wohnfläche bei Wohngebäuden, Nutzfläche bei Gewerbegebäuden")']
  nutzflaeche Int [note: '@zod.describe("(energetische) Nutzfläche des Gebäudes. Bei Gewerbegebäuden entspricht Sie der Nutzfläche")']
  saniert Boolean [note: '@zod.describe("Falls das Gebäude energetisch saniert ist, sollte dieser Wert auf true stehen")']
  keller Heizungsstatus [note: '@zod.describe("Ob ein Keller vorhanden, beheizt oder unbeheizt ist")']
  dachgeschoss Heizungsstatus [note: '@zod.describe("Ob ein Dachgeschoss vorhanden, beheizt oder unbeheizt ist")']
  lueftung Lueftungskonzept [note: '@zod.describe("Art der Gebäudelüftung")']
  kuehlung String [note: '@zod.describe("Art der Gebäudekühlung")']
  leerstand Int [note: '@zod.describe("Prozentualer Leerstand des Gebäudes in einem durchschnittlichen Jahr")']
  alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
  alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
  alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
  alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
  brennstoff_1 String [note: '@zod.describe("Genutzer Brennstoff der primären Energiequelle")']
  brennstoff_2 String [note: '@zod.describe("Genutzer Brennstoff der sekundären Energiequelle")']
  boxpruefung Boolean [default: false]
  energieeffizienzklasse String [note: '@zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")']
  erstellungsdatum DateTime [default: `now()`, note: '@zod.describe("Datum an dem der Kunde den Ausweis erstellt hat")']
  ausstellungsdatum DateTime [note: '@zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")']
  zentralheizung Boolean [note: '@zod.describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen")']
  solarsystem_warmwasser Boolean [note: '@zod.describe("Falls das Gebäude über ein Solarsystem für Warmwasser verfügt, sollte dieser Wert auf true stehen")']
  warmwasser_rohre_gedaemmt Boolean [note: '@zod.describe("Falls die Warmwasserrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
  niedertemperatur_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Niedertemperaturkessel verfügt, sollte dieser Wert auf true stehen")']
  brennwert_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Brennwertkessel verfügt, sollte dieser Wert auf true stehen")']
  heizungsrohre_gedaemmt Boolean [note: '@zod.describe("Falls die Heizungsrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
  standard_kessel Boolean
  waermepumpe Boolean [note: '@zod.describe("Falls das Gebäude über eine Wärmepumpe verfügt, sollte dieser Wert auf true stehen")']
  raum_temperatur_regler Boolean [note: '@zod.describe("Falls das Gebäude über einen Raumtemperaturregler verfügt, sollte dieser Wert auf true stehen")']
  photovoltaik Boolean [note: '@zod.describe("Falls das Gebäude über eine Photovoltaikanlage verfügt, sollte dieser Wert auf true stehen")']
  durchlauf_erhitzer Boolean [note: '@zod.describe("Falls das Gebäude über einen Durchlauferhitzer verfügt, sollte dieser Wert auf true stehen")']
  einzelofen Boolean
  zirkulation Boolean [note: '@zod.describe("Falls das Gebäude über eine Zirkulationspumpe verfügt, sollte dieser Wert auf true stehen")']
  einfach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes einfach gedämmt sind, sollte dieser Wert auf true stehen")']
  dreifach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dreifach gedämmt sind, sollte dieser Wert auf true stehen")']
  fenster_teilweise_undicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes teilweise undicht sind, sollte dieser Wert auf true stehen")']
  doppel_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes doppelt gedämmt sind, sollte dieser Wert auf true stehen")']
  fenster_dicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dicht sind, sollte dieser Wert auf true stehen")']
  rolllaeden_kaesten_gedaemmt Boolean [note: '@zod.describe("Falls das Gebäude über gedämmte Rolllädenkästen verfügt, sollte dieser Wert auf true stehen")']
  isolier_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes isolier Verglasung haben, sollte dieser Wert auf true stehen")']
  tueren_undicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes undicht sind, sollte dieser Wert auf true stehen")']
  tueren_dicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes dicht sind, sollte dieser Wert auf true stehen")']
  dachgeschoss_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
  keller_decke_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
  keller_wand_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
  aussenwand_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
  oberste_geschossdecke_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
  aussenwand_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen")']
  dachgeschoss_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")']
  oberste_geschossdecke_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")']
  events Event [not null]
  bilder Bild [not null]
  unterlagen Unterlage [not null]
  bedarfsausweise_wohnen BedarfsausweisWohnen [not null]
  verbrauchsausweise_gewerbe VerbrauchsausweisGewerbe [not null]
  verbrauchsausweise_wohnen VerbrauchsausweisWohnen [not null]
  geg_nachweise_wohnen GEGNachweisWohnen [not null]
  geg_nachweise_gewerbe GEGNachweisGewerbe [not null]
  bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null]
  objekt_id Int [not null]
  objekt Objekt [not null]
}

Table BedarfsausweisGewerbe {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
  benutzer benutzer
  aufnahme_id Int [unique, not null]
  aufnahme Aufnahme [not null]
  rechnung_id Int [unique]
  rechnung Rechnung
  geg_einpreisung_id Int [unique]
  geg_einpreisung GEGEinpreisung
}

Table BedarfsausweisWohnen {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int
  ausstellgrund Ausstellgrund
  registriernummer String
  alternative_heizung Boolean
  alternative_warmwasser Boolean
  alternative_lueftung Boolean
  alternative_kuehlung Boolean
  anzahl_vollgeschosse Int
  geschosshoehe Float
  anzahl_gauben Int
  breite_gauben Float
  masse_a Float
  masse_b Float
  masse_c Float
  masse_d Float
  masse_e Float
  masse_f Float
  fensterflaeche_so_sw Float
  fensterflaeche_nw_no Float
  aussenwandflaeche_unbeheizt Float
  dachflaeche Float
  deckenflaeche Float
  dach_u_wert Float
  decke_u_wert Float
  aussenwand_flaeche Float
  aussenwand_u_wert Float
  fussboden_flaeche Float
  fussboden_u_wert Float
  volumen Float
  dicht Boolean
  fenster_flaeche_1 Float
  fenster_art_1 Float
  fenster_flaeche_2 Float
  fenster_art_2 Float
  dachfenster_flaeche Float
  dachfenster_art Float
  haustuer_flaeche Float
  haustuer_art Float
  dach_bauart String
  decke_bauart String
  dach_daemmung Float
  decke_daemmung Float
  aussenwand_daemmung Float
  boden_daemmung Float
  aussenwand_bauart String
  boden_bauart String
  warmwasser_verteilung String
  warmwasser_speicherung String
  warmwasser_erzeugung String
  heizung_zentral Boolean
  heizung_verteilung String
  heizung_speicherung String
  waerme_erzeugung_heizung String
  anteil_zusatzheizung Float
  kollektor_flaeche Float
  ausgestellt Boolean [default: false]
  storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
  bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
  zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
  prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
  beschreibung String
  kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
  benutzer benutzer
  rechnung_id Int [unique]
  rechnung Rechnung
  aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
  aufnahme Aufnahme [not null]
}

Table benutzer {
  id Int [pk, increment]
  uid String [unique, not null]
  name String
  vorname String
  email String [unique, not null]
  passwort String [not null]
  profilbild String
  plz String
  ort String
  adresse String
  telefon String
  anrede String
  rolle BenutzerRolle [not null, default: 'USER']
  firma String
  lex_office_id String
  BedarfsausweisWohnen BedarfsausweisWohnen [not null]
  documenttemplates documenttemplates [not null]
  objekte Objekt [not null]
  rechnungen Rechnung [not null]
  tokens tokens [not null]
  VerbrauchsausweisGewerbe VerbrauchsausweisGewerbe [not null]
  VerbrauchsausweisWohnen VerbrauchsausweisWohnen [not null]
  ApiRequests ApiRequests [not null]
  RefreshTokens RefreshTokens [not null]
  aufnahmen Aufnahme [not null]
  geg_einpreisungen GEGEinpreisung [not null]
  geg_nachweise_gewerbe GEGNachweisGewerbe [not null]
  geg_nachweise_wohnen GEGNachweisWohnen [not null]
  bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null]
  ErstellteTickets Tickets [not null]
  BearbeiteteTickets Tickets [not null]
  events Event [not null]
}

Table Bild {
  id Int [pk, increment]
  kategorie BilderKategorie [not null]
  uid String [unique, not null]
  aufnahme_id Int
  aufnahme Aufnahme
}

Table Event {
  id Int [pk, increment]
  uid String [unique, not null]
  date DateTime [default: `now()`, not null]
  title String [not null]
  description String
  aufnahme_id Int [not null]
  aufnahme Aufnahme [not null]
  benutzer_id Int
  benutzer benutzer
}

Table GEGEinpreisung {
  id Int [pk, increment]
  uid String [unique, not null]
  empfaenger String
  strasse String
  plz String
  ort String
  zusatzzeile String
  telefon String
  email String
  abweichende_versand_adresse Boolean [default: false]
  versand_empfaenger String
  versand_strasse String
  versand_plz String
  versand_ort String
  versand_zusatzzeile String
  status Einpreisungsstatus [not null]
  geg_nachweis_wohnen GEGNachweisWohnen
  geg_nachweis_gewerbe GEGNachweisGewerbe
  bedarfsausweis_gewerbe BedarfsausweisGewerbe
  benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.")']
  benutzer benutzer
}

Table GEGNachweisGewerbe {
  id Int [pk, increment]
  uid String [unique, not null]
  ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
  keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
  storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")']
  bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")']
  zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
  beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")']
  benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
  benutzer benutzer
  aufnahme_id Int [unique, not null]
  aufnahme Aufnahme [not null]
  rechnung_id Int [unique]
  rechnung Rechnung
  geg_einpreisung_id Int [unique]
  geg_einpreisung GEGEinpreisung
}

Table GEGNachweisWohnen {
  id Int [pk, increment]
  uid String [unique, not null]
  ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
  keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
  storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")']
  bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")']
  zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
  beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")']
  benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
  benutzer benutzer
  aufnahme_id Int [unique, not null]
  aufnahme Aufnahme [not null]
  rechnung_id Int [unique]
  rechnung Rechnung
  geg_einpreisung_id Int [unique]
  geg_einpreisung GEGEinpreisung
}

Table Klimafaktoren {
  id Int [pk, increment]
  plz String [not null]
  month Int [not null]
  year Int [not null]
  klimafaktor Float [not null, default: 1]

  indexes {
    (plz, month, year) [unique]
  }
}

Table Objekt {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int
  latitude Float
  longitude Float
  plz String [note: '@zod.describe("Postleitzahl des Gebäudes")']
  ort String [note: '@zod.describe("Ort des Gebäudes")']
  adresse String [note: '@zod.describe("Adresse (Straße und Hausnummer) des Gebäudes")']
  erstellungsdatum DateTime [default: `now()`]
  benutzer benutzer
  aufnahmen Aufnahme [not null]
  anteilshaber Anteilshaber [not null]
}

Table Postleitzahlen {
  id Int [pk, increment]
  plz String [not null]
  stadt String [not null]
  bundesland String [not null]
  landkreis String [not null]
  lat Float [not null]
  lon Float [not null]
}

Table Rechnung {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int [not null]
  empfaenger String
  strasse String
  plz String
  ort String
  zusatzzeile String
  telefon String
  email String
  abweichende_versand_adresse Boolean [default: false]
  versand_empfaenger String
  versand_strasse String
  versand_plz String
  versand_ort String
  versand_zusatzzeile String
  bezahlmethode Bezahlmethoden [not null]
  status Rechnungsstatus [not null]
  services Service[] [not null]
  ausweistyp AusweisTyp [not null, default: 'Standard']
  betrag Float [not null]
  erstellt_am DateTime [default: `now()`, not null]
  bezahlt_am DateTime
  storniert_am DateTime
  transaktions_referenz String [unique]
  benutzer benutzer [not null]
  verbrauchsausweis_wohnen VerbrauchsausweisWohnen
  verbrauchsausweis_gewerbe VerbrauchsausweisGewerbe
  bedarfsausweis_wohnen BedarfsausweisWohnen
  bedarfsausweis_gewerbe BedarfsausweisGewerbe
  geg_nachweis_gewerbe GEGNachweisGewerbe
  geg_nachweis_wohnen GEGNachweisWohnen
}

Table RefreshTokens {
  id Int [pk, increment]
  benutzer_id Int [not null]
  token String [unique, not null]
  ip String [not null]
  expiry DateTime [not null]
  user benutzer [not null]
}

Table Tickets {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int
  created_at DateTime [default: `now()`, not null]
  updated_at DateTime
  deleted_at DateTime
  status TicketStatus [not null, default: 'OFFEN']
  titel String [not null]
  beschreibung String [not null]
  metadata Json
  email String [not null]
  bearbeiter_id Int
  prioritaet Int [default: 0]
  benutzer benutzer
  bearbeiter benutzer
}

Table Unterlage {
  id Int [pk, increment]
  uid String [unique, not null]
  name String
  kategorie String
  mime String
  aufnahme_id Int
  aufnahme Aufnahme
}

Table VerbrauchsausweisGewerbe {
  id Int [pk, increment]
  uid String [unique, not null]
  benutzer_id Int
  ausstellgrund Ausstellgrund
  registriernummer String
  zusaetzliche_heizquelle Boolean
  brennstoff_1 String
  einheit_1 String
  brennstoff_2 String
  einheit_2 String
  startdatum DateTime
  verbrauch_1 Int
  verbrauch_2 Int
  verbrauch_3 Int
  verbrauch_4 Int
  verbrauch_5 Int
  verbrauch_6 Int
  strom_1 Int
  strom_2 Int
  strom_3 Int
  stromverbrauch_enthaelt_heizung Boolean
  stromverbrauch_enthaelt_warmwasser Boolean
  stromverbrauch_enthaelt_lueftung Boolean
  stromverbrauch_enthaelt_beleuchtung Boolean
  stromverbrauch_enthaelt_kuehlung Boolean
  stromverbrauch_enthaelt_sonstige String
  kuehlung_enthalten Boolean
  anteil_kuehlung_1 Float
  anteil_kuehlung_2 Float
  keller_beheizt Boolean
  alternative_heizung Boolean
  alternative_warmwasser Boolean
  alternative_lueftung Boolean
  alternative_kuehlung Boolean
  warmwasser_enthalten Boolean
  anteil_warmwasser_1 Float
  anteil_warmwasser_2 Float
  ausgestellt Boolean [default: false]
  storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
  bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
  zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
  prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
  beschreibung String
  kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
  benutzer benutzer
  rechnung_id Int [unique]
  rechnung Rechnung
  aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
  aufnahme Aufnahme [not null]
}

Table VerbrauchsausweisWohnen {
  id Int [pk, increment]
  uid String [unique, not null, note: '@zod.describe("UID des Ausweises")']
  benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
  ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
  registriernummer String [note: '@zod.describe("Die Registriernummer des Ausweises")']
  zusaetzliche_heizquelle Boolean [note: '@zod.describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen")']
  einheit_1 String [note: '@zod.describe("Einheit des Energieträgers der primären Heizquelle")']
  einheit_2 String [note: '@zod.describe("Einheit des Energieträgers der sekundären Heizquelle")']
  startdatum DateTime
  verbrauch_1 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre")']
  verbrauch_2 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im zweiten der drei Verbrauchsjahre")']
  verbrauch_3 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im letzten der drei Verbrauchsjahre")']
  verbrauch_4 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im ersten der drei Verbrauchsjahre")']
  verbrauch_5 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im zweiten der drei Verbrauchsjahre")']
  verbrauch_6 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im letzten der drei Verbrauchsjahre")']
  warmwasser_enthalten Boolean [note: '@zod.describe("Falls Warmwasser im Verbrauchswert enthalten ist, sollte dieser Wert auf true stehen")']
  warmwasser_anteil_bekannt Boolean [note: '@zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")']
  keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
  faktorKeller Float [note: '@zod.describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.")']
  alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet, sollte dieser Wert auf true stehen.")']
  alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme (z.B. Solarsystem, Wärmepumpe, etc.) beinhaltet, sollte dieser Wert auf true stehen.")']
  alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")']
  alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")']
  anteil_warmwasser_1 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der primären Energiequelle in Prozent")']
  anteil_warmwasser_2 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der sekundären Energiequelle in Prozent")']
  ausgestellt Boolean [default: false]
  storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
  bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
  zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
  prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
  beschreibung String
  kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
  benutzer benutzer
  rechnung_id Int [unique]
  rechnung Rechnung
  aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
  aufnahme Aufnahme [not null]
}

Table documenttemplates {
  id Int [pk, increment]
  name String [not null]
  shortdescription String [not null]
  longdescription String [not null]
  user_id Int [not null]
  is_private Boolean [not null, default: true]
  documenttype Int [not null]
  filename String [not null]
  created_at DateTime [default: `now()`, not null]
  updated_at DateTime [default: `now()`, not null]
  benutzer benutzer [not null]
  documenttypes documenttypes [not null]
}

Table documenttypes {
  id Int [pk, increment]
  name String [not null]
  shortdescription String [not null]
  longdescription String [not null]
  documenttemplates documenttemplates [not null]
}

Table tokens {
  id Int [pk, increment]
  token String [not null]
  user_id Int [not null]
  date_created DateTime [default: `now()`, not null]
  last_used DateTime [default: `now()`, not null]
  times_used Int [not null, default: 0]
  permissions Int [not null, default: 0]
  benutzer benutzer [not null]
}

Enum Heizungsstatus {
  BEHEIZT
  UNBEHEIZT
  NICHT_VORHANDEN
}

Enum Lueftungskonzept {
  Fensterlueftung
  Schachtlueftung
  LueftungsanlageMitWaermerueckgewinnung
  LueftungsanlageOhneWaermerueckgewinnung
}

Enum BenutzerRolle {
  USER
  ADMIN
}

Enum BilderKategorie {
  Heizung
  Fenster
  Gebaeude
  Daemmung
}

Enum Einpreisungsstatus {
  open
  canceled
  pending
  expired
}

Enum Bezahlmethoden {
  paypal
  giropay
  sofort
  creditcard
  rechnung
}

Enum Rechnungsstatus {
  open
  canceled
  pending
  authorized
  expired
  failed
  paid
}

Enum AusweisTyp {
  Standard
  Beratung
  Offline
}

Enum TicketStatus {
  OFFEN
  IN_BEARBEITUNG
  IN_WARTESCHLEIFE
  GESCHLOSSEN
  GELOEST
}

Enum UnterlagenKategorie {
  Grundriss
  Sonstiges
}

Enum Ausstellgrund {
  Neubau
  Vermietung
  Verkauf
  Modernisierung
  Sonstiges
}

Enum Ausweisart {
  VerbrauchsausweisWohnen
  VerbrauchsausweisGewerbe
  BedarfsausweisWohnen
  BedarfsausweisGewerbe
  GEGNachweisWohnen
  GEGNachweisBedarfsausweis
  GEGNachweisGewerbe
}

Enum Service {
  Telefonberatung
  Aushang
  Qualitaetsdruck
  SameDay
}

Ref: Anteilshaber.benutzer_id - benutzer.id [delete: No Action]

Ref: Anteilshaber.objekt_id > Objekt.id [delete: No Action]

Ref: ApiRequests.user_id > benutzer.id [delete: No Action]

Ref: Aufnahme.benutzer_id > benutzer.id [delete: No Action]

Ref: Aufnahme.objekt_id > Objekt.id [delete: No Action]

Ref: BedarfsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action]

Ref: BedarfsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: BedarfsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]

Ref: BedarfsausweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]

Ref: BedarfsausweisWohnen.benutzer_id > benutzer.id [delete: No Action]

Ref: BedarfsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action]

Ref: BedarfsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: Bild.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: Event.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: Event.benutzer_id > benutzer.id [delete: No Action]

Ref: GEGEinpreisung.benutzer_id > benutzer.id [delete: No Action]

Ref: GEGNachweisGewerbe.benutzer_id > benutzer.id [delete: No Action]

Ref: GEGNachweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: GEGNachweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]

Ref: GEGNachweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]

Ref: GEGNachweisWohnen.benutzer_id > benutzer.id [delete: No Action]

Ref: GEGNachweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: GEGNachweisWohnen.rechnung_id - Rechnung.id [delete: No Action]

Ref: GEGNachweisWohnen.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]

Ref: Objekt.benutzer_id > benutzer.id

Ref: Rechnung.benutzer_id > benutzer.id [delete: No Action]

Ref: RefreshTokens.benutzer_id > benutzer.id [delete: Cascade]

Ref: Tickets.benutzer_id > benutzer.id

Ref: Tickets.bearbeiter_id > benutzer.id

Ref: Unterlage.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: VerbrauchsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action]

Ref: VerbrauchsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]

Ref: VerbrauchsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: VerbrauchsausweisWohnen.benutzer_id > benutzer.id [delete: No Action]

Ref: VerbrauchsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action]

Ref: VerbrauchsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]

Ref: documenttemplates.user_id > benutzer.id [delete: Cascade]

Ref: documenttemplates.documenttype > documenttypes.id [delete: Cascade]

Ref: tokens.user_id > benutzer.id [delete: No Action]