Skip to content

ADR-0020: Genehmigungsverfahren und Audit-Sidecar

  • Status: accepted
  • Datum: 2026-08-26
  • Phase: P8
  • Lastenheft: DASH-05–DASH-08; Plattformvision Verfahren

Kontext

geo_objects.status ist Freitext (draft). section_orders.status ist der interne Auftrag. Behörden brauchen eine Statuskette, Auflagen, Fristen und ein rechtssicheres Protokoll. Geom-Historie (geo_object_revisions) ist die falsche Tabelle dafür.

Abschnitte hingen nur an fiber_route plus Stationierung (route_sections). Schilder und Flächen brauchen einen generischen Abschnitt.

Entscheidung

  • work_sections: Abschnitt mit eigener geom (EPSG:25832). Optionale Linearreferenz (ref_object_id, from_m, to_m). route_sections bleibt Kompat-VIEW.
  • approval_procedures: ein Antrag pro Abschnitt. Status lebt hier, nicht auf jeder Geometriezeile. Produkt-Objekte (stage=produkt) hängen über section_id / Auftrag am Abschnitt.
  • procedure_events: append-only Audit (Wer, Wann, von→nach, Auflage, Kommentar). Tiles und Listen lesen diese Tabelle nicht.
  • jurisdictions: Behörden-Gebiet als Polygon 25832 an der Authority-Organisation. Behörden sehen Anträge nur per ST_Intersects(section.geom, jurisdiction.geom).
  • Isolationseinheit für Verfahren in v1 war organizations in einer Shared-DB. Superseded für Cluster-Isolation: Mandant = Control-Zeile tenants + eigene DB (ADR-0031). organizations bleiben Stammdaten in der Mandanten-DB.

Begründung

Hot-Pfad (MVT, Verfahrenliste) bleibt schmal. Audit ist Sidecar wie Revisions. Räumlicher Filter skaliert mit GIST, nicht mit „alles laden dann filtern“.

Verworfene Alternativen

Alternative Warum verworfen
Statuskette auf geo_objects.status Mehrere Produkte pro Antrag; Behörden-Status ≠ GIS-Entwurf
route_sections als einziges Modell Stationierung gilt nicht für Punkt/Fläche
Freitext-Gemeinde als SSOT Kein räumlicher Filter; Tippfehler
Extra-tenants-Tabelle (Shared-DB v1) Stammdaten-Organisationen existierten; Cluster-Isolation braucht tenants (ADR-0031)

Folgen

API unter /api/v1/procedures. GIS-Write bleibt Editor. Dashboard und Feld-App schreiben nur Verfahren bzw. Ausführung.