17 KiB
Datenmodell Architektur-Planungs-App
Übersicht
Dieses Datenmodell bildet die Grundlage für eine Schweizer Architektur-Planungs-App zur Verwaltung von Bauprojekten, Parzellen, Dokumenten und regulatorischen Kontextinformationen.
Wichtige Hinweise zum Datenmodell
Objektmodell vs. Datenbank-Repräsentation:
Dieses Dokument beschreibt ein Objektmodell für die Arbeit im Code. Es handelt sich NICHT um ein relationales Datenbankmodell mit Junction Tables.
- Im Code-Modell: Alle Beziehungen werden als Objektreferenzen oder Listen von Objekten dargestellt (z.B.
dokumente: list[Dokument],parzellen: list[Parzelle]). - Für die Datenbank-Serialisierung: Bei der Persistierung können Junction Tables verwendet werden, um n:m-Beziehungen in der Datenbank abzubilden. Dies ist jedoch ein Implementierungsdetail der Datenbank-Schicht und gehört nicht zum Hauptmodell.
Systemattribute:
Alle Datenobjekte haben automatisch die folgenden Systemattribute:
_createdAt: Float (Timestamp UTC)_createdBy: String (User-ID)_modifiedAt: Float (Timestamp UTC)_modifiedBy: String (User-ID)
Timestamps:
- Alle Timestamps sind im Float-Format UTC im Datenmodell gespeichert.
- Die Darstellung im UI erfolgt mit der lokalen Zeitzone des Benutzers.
Datenfluss-Diagramm
---
title: Hauptflüsse - Architektur-Planungs-App
---
flowchart LR
subgraph Admin[Administrative Ebene]
Land[Land<br/>Schweiz]
Kanton[Kanton<br/>z.B. Zürich]
Gemeinde[Gemeinde<br/>z.B. Zürich Stadt]
Land --> Kanton
Kanton --> Gemeinde
end
subgraph Geo[Geografische Daten]
GeoPolylinie[GeoPolylinie<br/>Linie/Polygon]
GeoPunkt[GeoPunkt<br/>Koordinaten]
GeoPolylinie --> GeoPunkt
end
subgraph Core[Kern-Business-Logik]
Projekt[Projekt<br/>Bauprojekt]
Parzelle[Parzelle<br/>Grundstück mit<br/>Bauparametern]
Gemeinde --> Parzelle
Projekt --> Parzelle
Projekt --> GeoPolylinie
Parzelle --> GeoPolylinie
end
subgraph Support[Unterstützende Daten]
Dokument[Dokument<br/>Dateien & URLs]
Kontext[Kontext<br/>Zusatzinfos]
end
style Land fill:#50C878,stroke:#2D7A4A,stroke-width:2px,color:#fff
style Kanton fill:#50C878,stroke:#2D7A4A,stroke-width:2px,color:#fff
style Gemeinde fill:#50C878,stroke:#2D7A4A,stroke-width:2px,color:#fff
style Parzelle fill:#FF6B6B,stroke:#C92A2A,stroke-width:4px,color:#fff
style Projekt fill:#FF6B6B,stroke:#C92A2A,stroke-width:4px,color:#fff
style Dokument fill:#F5A623,stroke:#C17D11,stroke-width:2px,color:#fff
style GeoPolylinie fill:#F5A623,stroke:#C17D11,stroke-width:2px,color:#fff
style GeoPunkt fill:#F5A623,stroke:#C17D11,stroke-width:2px,color:#fff
style Kontext fill:#F5A623,stroke:#C17D11,stroke-width:2px,color:#fff
Alle Datenobjekte als Tabellen
Übersichtstabelle
| Objekt | Typ | Beschreibung | Hauptfelder |
|---|---|---|---|
| Projekt | Kernentität | Bauprojekt mit Status und Perimeter | id, label, statusProzess, perimeter, baulinie, parzellen |
| Parzelle | Hauptentität | Grundstück mit Bauparametern | id, label, plz, bauzone, AZ, BZ, perimeter, baulinie, laermschutzzone, hochwasserschutzzone, grundwasserschutzzone |
| Dokument | Unterstützend | Dateien und URLs mit Versionierung | id, label, dokumentTyp, quelle, mimeType, kategorienTags |
| Kontext | Unterstützend | Flexible Zusatzinformationen | id, thema, inhalt |
| GeoPolylinie | Hilfsobjekt | Geometrische Linie/Polygon | id, closed, punkte |
| Land | Admin | Nationale Ebene | id, label, abk |
| Kanton | Admin | Kantonale Ebene mit Baurecht | id, label, abk, Baureglement |
| Gemeinde | Admin | Gemeinde-Ebene mit BZO | id, label, plz, BZO |
| GeoPunkt | Hilfsobjekt | 3D-Koordinate | koordinatensystem, x, y, z, referenz |
| GeoTag | Enum | Geopunkt-Kategorien | - |
| JaNein | Enum | Drei-wertiger Status | "", "Ja", "Nein" |
| StatusProzess | Enum | Projektstatus | 7 Werte |
| DokumentTyp | Enum | Dokumenttyp | 6 Werte |
Zentrale Entitäten
1. Projekt
Das Kernobjekt, das ein Bauprojekt repräsentiert.
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Projektbezeichnung |
statusProzess |
Enum[StatusProzess] | - | Projektstatus: Eingang, Analyse, Studie, Planung, Baurechtsverfahren, Umsetzung, Archiv |
perimeter |
GeoPolylinie | - | Umhüllende aller Parzellen des Projektes |
baulinie |
GeoPolylinie | - | Baulinie des Projektes |
parzellen |
list[Parzelle] | - | Alle Parzellen des Projektes |
dokumente |
list[Dokument] | - | Projektspezifische Dokumente |
kontextInformationen |
list[Kontext] | - | Projektspezifische Kontextinfos |
2. Parzelle
Repräsentiert ein Grundstück mit allen baurechtlichen Eigenschaften als ein einheitliches Objekt.
Grunddaten
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Parzellenbezeichnung |
parzellenAliasTags |
list[String] | - | Weitere Parzellennamen oder Flurnamen |
eigentuemerschaft |
String | - | Eigentümer der Parzelle |
strasseNr |
String | - | Straße und Hausnummer |
plz |
String | - | Postleitzahl der Parzelle (insbesondere bei Gemeinden mit mehreren PLZ) |
Geografischer Kontext
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
perimeter |
GeoPolylinie | - | Parzellengrenze als geschlossene GeoPolylinie |
baulinie |
GeoPolylinie | - | Baulinie der Parzelle |
kontextGemeinde |
Gemeinde | - | Gemeinde der Parzelle |
Bebauungsparameter
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
bauzone |
String | - | Bauzonenbezeichnung (z.B. W3, WG2, etc.) |
az |
Float | - | Ausnützungsziffer |
bz |
Float | - | Bebauungsziffer |
vollgeschossZahl |
Integer | - | Anzahl zulässiger Vollgeschosse |
anrechenbarDachgeschoss |
Float | - | Anrechenbarer Anteil Dachgeschoss (0.0 - 1.0) |
anrechenbarUntergeschoss |
Float | - | Anrechenbarer Anteil Untergeschoss (0.0 - 1.0) |
gebaeudehoeheMax |
Float | - | Maximale Gebäudehöhe in Metern |
Abstandsregelungen
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
regelnGrenzabstand |
list[String] | - | Regelungen zum Grenzabstand |
regelnMehrlaengenzuschlag |
list[String] | - | Regelungen zum Mehrlängenzuschlag |
regelnMehrhoehenzuschlag |
list[String] | - | Regelungen zum Mehrhöhenzuschlag |
Eigenschaften (Ja/Nein)
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
parzelleBebaut |
JaNein | - | Ist die Parzelle bebaut? ("", "Ja", "Nein") |
parzelleErschlossen |
JaNein | - | Ist die Parzelle erschlossen? ("", "Ja", "Nein") |
parzelleHanglage |
JaNein | - | Liegt die Parzelle in Hanglage? ("", "Ja", "Nein") |
Schutzzonen
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
laermschutzzone |
String | - | Lärmschutzzone (z.B. "II") |
hochwasserschutzzone |
String | - | Hochwasserschutzzone (z.B. "tief") |
grundwasserschutzzone |
String | - | Grundwasserschutzzone |
Beziehungen
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
parzellenNachbarschaft |
list[Parzelle] | - | Nachbarparzellen |
dokumente |
list[Dokument] | - | Parzellenspezifische Dokumente |
kontextInformationen |
list[Kontext] | - | Parzellenspezifische Kontextinfos |
3. Dokument
Unterstützendes Datenobjekt zur Verwaltung von Dateien und URLs mit Versionierung.
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Dokumentbezeichnung |
versionsbezeichnung |
String | - | Versionsnummer oder -bezeichnung (z.B. "v1.0", "Rev. A") |
dokumentTyp |
Enum[DokumentTyp] | - | Typ des Dokuments (siehe DokumentTyp-Enum) |
dokumentReferenz |
String | ✓ | Dateipfad oder URL |
quelle |
String | - | Quelle des Dokuments |
mimeType |
String | - | MIME-Type des Dokuments (z.B. "application/pdf", "image/png") |
kategorienTags |
list[String] | - | Kategorisierung des Dokuments |
Hinweis:
Aktuelle Dokumente (z.B. aktuelle Baureglemente, BZO) können anhand des dokumentTyp-Attributs identifiziert werden. Die entsprechenden Dokumente finden sich in der dokumente-Liste der jeweiligen Entität (Kanton, Gemeinde).
Beispiel-Kategorien (nicht abschliessend)
| Kategorie | Beschreibung |
|---|---|
Kataster Objekte |
Amtliche Vermessung |
Kataster Werkeleitungen |
Leitungskataster |
Kataster Belastete Standorte |
Altlasten |
Kataster Bäume |
Baumkataster |
Zonenplan |
Zonenpläne |
Planungs- und Baugesetz (PGB) |
Kantonale Baugesetze |
Bau- und Zonenordnung (BZO) |
Gemeinde BZO |
Parkplatzverordnung |
Parkplatzregelungen |
Eigentümerauskunft |
Grundbuch-Auszüge Eigentümer |
Grundbuchauszug |
Vollständige Grundbuch-Auszüge |
Bauherrschaft |
Dokumente von der Bauherrschaft |
Planung |
Planungsdokumente |
4. Geografische Entitäten
GeoPolylinie
Repräsentiert eine Linie oder ein Polygon aus mehreren GeoPunkten.
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
closed |
Boolean | ✓ | Ist die GeoPolylinie geschlossen (Polygon)? |
punkte |
list[GeoPunkt] | ✓ | Liste der GeoPunkte, die die GeoPolylinie bilden |
Verwendung:
- Parzellenperimeter (geschlossene GeoPolylinie)
- Baulinie (offene oder geschlossene GeoPolylinie)
- Projektperimeter (geschlossene GeoPolylinie)
GeoPunkt
Repräsentiert einen 3D-Punkt mit Referenzangabe.
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
koordinatensystem |
String | ✓ | Koordinatensystem (z.B. "LV95", "EPSG:2056") |
x |
Float | ✓ | Ostwert (E) [m], typisch 2'480'000 - 2'840'000 |
y |
Float | ✓ | Nordwert (N) [m], typisch 1'070'000 - 1'300'000 |
z |
Float | - | Höhe über Meer [m] |
referenz |
Enum[GeoTag] | - | Kategorisierung des Punktes |
Verwendung:
- Als Teil einer GeoPolylinie (Parzellenperimeter, Baulinie)
- Einzelne Referenzpunkte
GeoTag (Enum)
| Kategorie | Beschreibung |
|---|---|
K1 |
Fixpunkt höchster Genauigkeit |
K2 |
Fixpunkt mittlerer Genauigkeit |
K3 |
Fixpunkt niedriger Genauigkeit |
Geometer |
Vom Geometer vermessener Punkt |
Beispiel (Zürich Hauptbahnhof):
koordinatensystem: "LV95" oder "EPSG:2056"x: 2'683'140 [m]y: 1'247'850 [m]z: 408 [m]referenz: "K1" (oder ein anderer GeoTag-Wert)
5. Administrative Hierarchie
Land
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Landesname (z.B. "Schweiz") |
abk |
String | - | Abkürzung (z.B. "CH") |
dokumente |
list[Dokument] | - | Nationale Gesetze |
kontextInformationen |
list[Kontext] | - | Nationale Kontextinformationen |
Kanton
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Kantonsname (z.B. "Zürich") |
id_land |
[land] | eindeutiger Link zum land, also in welchem land kanton liegt | |
abk |
String | - | Abkürzung (z.B. "ZH") |
dokumente |
list[Dokument] | - | Kantonale Dokumente |
kontextInformationen |
list[Kontext] | - | Kantonsspezifische Kontextinfos |
Gemeinde
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
label |
String | ✓ | Gemeindename (z.B. "Zürich") |
id_kanton |
[kanton] | eindeutiger Link zur gemeinde, also im welchem kanton gemeinde liegt | |
plz |
String | - | Postleitzahl (bei Gemeinden mit mehreren PLZ kann dies eine Haupt-PLZ sein) |
dokumente |
list[Dokument] | - | Gemeindedokumente |
kontextInformationen |
list[Kontext] | - | Gemeindespezifische Kontextinfos |
Hinweis:
Bei Gemeinden mit mehreren Postleitzahlen (z.B. Zürich, Bern) wird die konkrete PLZ der Parzelle im Attribut plz der Parzelle erfasst.
6. Kontext
Unterstützendes Datenobjekt für flexible Zusatzinformationen und Hinweise.
| Feld | Datentyp | Pflicht | Beschreibung |
|---|---|---|---|
id |
UUID | ✓ | Eindeutiger Identifier |
thema |
String | ✓ | Bezeichnung des Themas |
inhalt |
String | ✓ | Detaillierte Information (Text) |
Verwendung: Kontext-Objekte werden als Listen in den jeweiligen Entitäten gespeichert:
projekt.kontextInformationen: list[Kontext]parzelle.kontextInformationen: list[Kontext]land.kontextInformationen: list[Kontext]kanton.kontextInformationen: list[Kontext]gemeinde.kontextInformationen: list[Kontext]
Beispielthemen (nicht abschliessend)
| Themenbereich | Beispiele |
|---|---|
| Nutzung | Vorgaben zur Erdgeschossnutzung (Wohnen erlaubt oder Pflicht für Gewerbe) |
| Rechte | Dienstbarkeiten (Wegrechte, Nähebaurechte, etc.) |
| Parkierung | Anforderung Parkplätze (Berechnung / Reduktionsfaktoren) |
| Ausnützung | Ausnützungsübertragungen |
| Umwelt | Schadstoffbelastungen auf Parzellen |
| Planung | Aktive Gestaltungspläne |
| Lärm | Lärmempfindlichkeitsstufen |
| Energie | Mögliche Wärmenutzung (Wärmeverbundnetze; Fernwärme, Anergie) |
| Natur | Baumbestand auf privaten Grundstücken |
| Schutz | Isos (Ortsbild, Schutzstatus, Denkmalschutz, Weilergebiet, etc.) |
| Gefahren | Naturgefahren (z.B. Objektschutzmassnahmen (Hochwasser)) |
| Revision | Verweis auf aktuell in oder zukünftig in Revision befindlichen Normen/Gesetze (z.B. Revision PBG mit aktuell negativer Vorwirkung) |
Design-Rationale:
Das Kontext-Objekt ermöglicht flexibles Hinzufügen von projektspezifischen, parzellen-spezifischen oder regionalen Informationen ohne Schemaänderungen.
7. Hilfsentitäten & Enumerationen
JaNein (Enum)
Drei-wertiger Zustand für optionale Ja/Nein-Fragen.
| Wert | Bedeutung |
|---|---|
"" (leer) |
Unbekannt / Nicht erfasst |
"Ja" |
Ja / Zutreffend |
"Nein" |
Nein / Nicht zutreffend |
Verwendung:
parzelleBebaut: Ist die Parzelle bebaut?parzelleErschlossen: Ist die Parzelle erschlossen?parzelleHanglage: Liegt die Parzelle in Hanglage?
StatusProzess (Enum)
Projektstatus zur Nachverfolgung des Projektfortschritts.
| Wert | Beschreibung |
|---|---|
Eingang |
Projekt wurde eingereicht |
Analyse |
Projekt wird analysiert |
Studie |
Machbarkeitsstudie läuft |
Planung |
Planungsphase |
Baurechtsverfahren |
Baubewilligung läuft |
Umsetzung |
Bauprojekt in Umsetzung |
Archiv |
Projekt abgeschlossen |
DokumentTyp (Enum)
Dokumenttyp zur Kategorisierung von Dokumenten, insbesondere für kantonale und kommunale Dokumente.
| Wert | Beschreibung |
|---|---|
kantonBaureglementAktuell |
Aktuelles Baureglement (Kanton) |
kantonBaureglementRevision |
Baureglement in Revision (Kanton) |
kantonBauverordnungAktuell |
Aktuelle Bauverordnung (Kanton) |
kantonBauverordnungRevision |
Bauverordnung in Revision (Kanton) |
gemeindeBzoAktuell |
Aktuelle Bau- und Zonenordnung (BZO) (Gemeinde) |
gemeindeBzoRevision |
BZO in Revision (Gemeinde) |
Verwendung:
- Dokumente in der
dokumente-Liste von Kanton oder Gemeinde können überdokumentTypidentifiziert werden - Ermöglicht die Suche nach aktuellen oder in Revision befindlichen Dokumenten
Q & A
- Versionierung: Sollen Änderungen an Parzellen historisiert werden? --> Vorerst nicht
- Mehrsprachigkeit: Labels in DE/FR/IT? --> Wir im Pydantic Model später umgesetzt
- Benutzer & Rollen: Wer darf was bearbeiten? --> In der App über Roles und Permissions gesteuert
- Workflow-Engine: Für Statusübergänge und Genehmigungen? --> In der App über Workflow-Engine gesteuert
- Integration: Anbindung an amtliche Geodaten (z.B. Swisstopo API)? --> In der App über Integrationen gesteuert
- Berechnungen: Sollen Ausnützungsberechnungen automatisiert werden? --> In der App über Berechnungen gesteuert
Nächste Schritte
- Validierung: Review mit PEK
- Prototyp: Implementierung der Datenmodell-Klassen
- GIS-Integration: PostGIS aufsetzen, Test-Geodaten importieren
- API-Design: RESTful API (FastAPI) mit OpenAPI-Dokumentation