ADR-0040: Project standard fields
- Status: accepted
- Datum: 2026-09-01
- Phase: Web Schema-CMS / Stammdaten
- Bezug: ADR-0025, ADR-0033, ADR-0039
Kontext
Jedes Projekt braucht dieselben Basisangaben, unabhängig vom benutzerdefinierten Schema. Der bisherige Seed mixte Name, Akteursliste, Zeitraum und Notizen mit einem Phase-Enum (Planung/Genehmigung) und ließ Status und flache Zeitraum-Spalten auf projects weg. Die Web-Maske zeigte Code, Organisation, einzelnen Projektleiter und englisches „Description“. Dateien (Cloud-Anbindung) sind gewünscht, aber nicht in diesem Slice.
Entscheidung
- Die Entität
projecterhält Systemfelder, die jeder Nutzer standardmäßig hat und nicht löschen kann:name,actor_assignments,notes,status(Defaultactive),period_from,period_to. - Dateien (
files) sind reserviert und werden später angebunden (einfaches Drive / Nextcloud / Google). Kein Feld, keine API in diesem Slice. phasebleibt, falls vorhanden, ein optionales Katalogfeld (is_seeded=false) — kein Systemfeld.- Die Daten-Maske zeigt Name, Akteurszuweisung (Akteur + Rolle,
+/×), Notizen, Status, Zeitraum. Organisation und schreibgeschützter Code bleiben Betriebsfelder (FK / Identifier), nicht CMS-Systemfelder. project_managerbleibt die QGIS-Value-Relation: Person mit Rolle Leiter/Manager/PL, sonst erste Person, sonst Platzhalter. Zuweisungen liegen inmetadata_json.actor_assignments.- Zeitraum liegt zusätzlich als
DATEaufprojects(QGIS-flach), Status weiter inproject_status.
| Gate | Recommendation | Why it fits here | Rejected alternative and why |
|---|---|---|---|
| Systemfelder | feste Codes, Löschen 403 | Jedes Projekt hat dieselbe Basis; Anpassen nur für Extra-Felder | Nur UI-Default — Katalog könnte Name entfernen |
| Status | Lookup ref_project_status, Default active |
QGIS und Web lesen dieselbe Spalte | Freitext oder CMS-only Enum ohne Flat-Spalte |
| Zeitraum | zwei DATE-Spalten |
Value Relations und Export ohne JSON-Pfad | Nur attrs — bricht flache QGIS-Tabelle |
| Dateien | später | Cloud-Anbieter und Speicher noch offen | Jetzt entity_files oder Nextcloud-Stub ohne Produktentscheidung |
| Phase | nicht schützen | Nutzer wollte Status aktiv, nicht Planungsphase | Phase als Systemfeld — zweites Statuskonzept |
Begründung (für dieses Setup)
Hybrid-CMS (ADR-0025) braucht flache Spalten für QGIS. Eine kurze, geschützte Feldliste hält die Stammdaten-Maske und den Katalog deckungsgleich, ohne Datei-Storage vorzuziehen.
Verworfene Alternativen
| Alternative | Warum verworfen |
|---|---|
| Einzelner Pflicht-Projektleiter statt Zuweisungsliste | Nutzer will Akteurszuweisung (mehrere Akteure + Rolle) |
Status nur im CMS-attrs |
projects.project_status und Lookup existieren bereits |
| Dateien als leeres Systemfeld | Würde × blockieren, ohne Speicher — später als eigenes ADR |
product als Fallback-Kind |
Migration stellt project sicher; Fallback verdeckt fehlenden Seed |
Folgen
- Alembic
0017_project_standard_fields(Tenant0005). - API:
period_from/period_to; Manager aus Zuweisungen ableitbar. - Anpassen auf der Projektseite pflegt optionale Felder am Standard-Schema (Organisationskonto). Systemfelder haben kein ×; Backend lehnt Löschen mit 403 ab. Werte der Extra-Felder liegen in
projects.metadata_json.attrs. - Das übrig gebliebene Katalogfeld
project.phase(Planung/Genehmigung) wurde später entfernt (0030/ Tenant0017). Die Projektmaske nimmt Organisation und Akteur als Text und legt fehlende Stammdaten beim Speichern an.