Skip to content

ADR-0056: Layer system fields and feature status enum

Kontext

QGIS-Views legen feste Systemspalten auf geo_objects (object_id, project_id, label, status, geom, created_at, updated_at). Im Schema-CMS sah man nur Katalogfelder — Geometrie und Status wirkten „unsichtbar“, obwohl jedes Feature sie braucht. geo_objects.status war Freitext (Default draft).

Entscheidung

  1. Jeder Layer zeigt die QGIS-Systemspalten als synthetische Schemazeilen (origin=system) vor den Katalogfeldern. Keine field_definitions-Zeilen — sonst doppelte Attrs-/View-Spalten.
  2. Die Zeilen sind ausgegraut, ohne ✎/×; API lehnt Create/Update/Delete und reservierte Codes ab. In der Felder-Tabelle gehören sie zur Formulargruppe system (synthetisch in list_form_groups, nicht anleg-/löschbar; Katalogfelder dürfen form_group_code=system nicht setzen).
  3. geom zeigt die Layer-geom_kind (Punkt/Linie/Fläche) nur als Anzeige; Geometrie bleibt Kind-Metadatum.
  4. geo_objects.status ist ein festes Enum: draft | published | approved (Default draft). Unbekannte Werte migrieren nach draft. QGIS INSTEAD OF und Imports normalisieren ebenso.
  5. Datensätze und Gruppen bekommen keine Layer-Systemfelder. Projekt-Systemfelder bleiben ADR-0040.
Gate Recommendation Why it fits here Rejected alternative and why
Darstellung synthetisch in list_fields Keine Attrs-Kollision; Views unverändert aus echten Spalten Geseedete field_definitions — View/attrs-Doppel
Status CHECK + drei Werte Klare Feature-Lebenszyklus-Anzeige im Schema Freitext — Schema zeigte Status ohne Vertrag
Scope nur Layer Systemspalten existieren nur auf geo_objects Auch Datensätze — falsche Analogie

Begründung

Das Schema-CMS ist SSOT für sichtbare Attribute (ADR-0033). Was QGIS zwingend hat, muss im Web-Schema lesbar sein, ohne editierbar zu werden. Das Enum hält Status, Import und Views deckungsgleich.

Folgen

  • Alembic public 0037_feature_status_enum / Tenant 0022_feature_status_enum.
  • API: FieldDefinitionOut.origin; GET …/fields auf Layern prependet Systemzeilen mit form_group_code=system.
  • UI: muted Systemzeilen; Formulargruppe „System“; reservierte Codes beim Anlegen abgelehnt.
  • Verfahren-FSM (procedures.status) bleibt getrennt von Feature-status.