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
- Jeder Layer zeigt die QGIS-Systemspalten als synthetische Schemazeilen (
origin=system) vor den Katalogfeldern. Keinefield_definitions-Zeilen — sonst doppelte Attrs-/View-Spalten. - 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 inlist_form_groups, nicht anleg-/löschbar; Katalogfelder dürfenform_group_code=systemnicht setzen). geomzeigt die Layer-geom_kind(Punkt/Linie/Fläche) nur als Anzeige; Geometrie bleibt Kind-Metadatum.geo_objects.statusist ein festes Enum:draft | published | approved(Defaultdraft). Unbekannte Werte migrieren nachdraft. QGIS INSTEAD OF und Imports normalisieren ebenso.- 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/ Tenant0022_feature_status_enum. - API:
FieldDefinitionOut.origin;GET …/fieldsauf Layern prependet Systemzeilen mitform_group_code=system. - UI: muted Systemzeilen; Formulargruppe „System“; reservierte Codes beim Anlegen abgelehnt.
- Verfahren-FSM (
procedures.status) bleibt getrennt von Feature-status.