wiki/c-work/1-plan/2026-04-trustee-cleanup-positions-documents.md
ValueOn AG 19f28e85d9 upd
2026-04-23 13:32:45 +02:00

106 lines
8.3 KiB
Markdown

<!-- status: plan -->
<!-- planned: 2026-04-21 -->
<!-- component: gateway | frontend-nyla -->
# Trustee: Aufraeumen `Positionen` / `Dokumente` Top-Level-Seiten
## Beschreibung und Kontext
Mit `2026-04-trustee-data-tables-page.md` (status: done) sind alle 13 Trustee-Tabellen in der konsolidierten Seite `Daten-Tabellen` (`/mandates/{m}/trustee/{i}/data-tables[?tab=<key>]`) verfuegbar. Die alten Top-Level-Seiten `Positionen` und `Dokumente` sind dort als Tabs eingebettet (`TrusteePositionsView`, `TrusteeDocumentsView` werden im neuen `TrusteeDataTablesView` direkt importiert und unter Tabs gemountet).
Top-Level-Routen / Mappings fuer diese beiden Seiten wurden in der Vorgaenger-Iteration entfernt:
- `frontend_nyla/src/pages/FeatureView.tsx`: kein direktes `'positions' / 'documents'`-Mapping mehr (`VIEW_COMPONENTS.trustee`).
- `frontend_nyla/src/App.tsx`: keine `Route path="positions"` / `path="documents"` mehr.
- `gateway/modules/features/trustee/mainTrustee.py`: `ui.feature.trustee.positions` und `ui.feature.trustee.documents` entfernt; einziger neuer UI-Eintrag ist `ui.feature.trustee.data-tables`.
Was noch lebt: die beiden Standalone-Komponenten als Datei + Index-Export. Sie werden ausschliesslich vom `TrusteeDataTablesView` als Tab-Body referenziert.
Diese Iteration raeumt die noch existierenden, aber nicht mehr als eigenstaendige Seiten verwendeten Reste auf -- ohne Funktionalitaet zu verlieren.
## Fokus und kritische Details
- Die Spezialdarstellungen (Beleg-Download in Positionen-Tabelle, Dokument-Download in Dokumente-Tabelle, Inline-Sync-Status) leben in `TrusteePositionsView` / `TrusteeDocumentsView`. Sie sind weiterhin **als Tab-Body** im neuen `TrusteeDataTablesView` produktiv -- darf nicht versehentlich entfernt werden.
- Falls ein simpler `TrusteeDataTab` (generischer Wrapper) die Spezialfeatures nicht abdeckt, bleiben die beiden Komponenten erhalten und werden nur in der `index.ts` und im Code-Layout sauber als "Tab-Body, nicht Top-Level-View" gekennzeichnet.
- `position-documents` (Zuordnungen) bleibt als eigene Top-Level-View unangetastet (anderer Use-Case: Position-Document-Zuordnung).
- `FEATURE_REGISTRY.trustee.views` in `frontend_nyla/src/types/mandate.ts` ist laut Header (`TODO: Remove after all references are migrated to use backend navigation.`) ohnehin geplant zu entsorgen -- in dieser Iteration nur sicherstellen, dass keine `'positions'`/`'documents'`-Eintraege mehr drin sind.
## Ziel und Nicht-Ziele
- **Ziel**: Code-Klarheit -- Standalone-Files `TrusteePositionsView.tsx` / `TrusteeDocumentsView.tsx` werden entweder (a) im Ordner `dataTables/` als Tab-Body umbenannt (`TrusteePositionsTab.tsx`, `TrusteeDocumentsTab.tsx`) oder (b) bleiben dort, aber bekommen einen Header-Kommentar "Mounted only as a tab inside `TrusteeDataTablesView`".
- **Ziel**: `index.ts` exportiert die Komponenten nur noch wenn sie tatsaechlich extern referenziert werden; sonst entfernen.
- **Ziel**: Stichprobe pruefen, dass keine externe Quick-Action / Notification / Mail-Template / Workflow-Definition mehr auf `/trustee/{instanceId}/positions` oder `/documents` verlinkt.
- **Ziel**: `mainTrustee.py` -- letzter Sweep: keine Restrolle/Permission referenziert `ui.feature.trustee.positions` / `.documents`.
- **Ziel**: `pageRegistry.tsx` und ggf. `MandateNavigation`-Defaults / `quickActions` (Backend) -- alle Verweise raus.
- **Explizit NICHT**: Loeschen der `TrusteePositionsView` / `TrusteeDocumentsView` Logik. Sie bleiben funktional erhalten -- nur die "Top-Level-Page"-Doppelung wird beseitigt.
- **Explizit NICHT**: Aenderungen am Backend-Datenmodell oder den REST-Endpoints von Position/Document.
## Betroffene Module
- **Frontend**:
- `frontend_nyla/src/pages/views/trustee/TrusteePositionsView.tsx`, `TrusteeDocumentsView.tsx`: Header-Kommentar / Renaming.
- `frontend_nyla/src/pages/views/trustee/index.ts`: Exporte pruefen (nur was extern noch noetig ist, bleibt).
- `frontend_nyla/src/pages/FeatureView.tsx`: Sicherstellen, dass `VIEW_COMPONENTS.trustee` keine `'positions'/'documents'`-Eintraege hat.
- `frontend_nyla/src/App.tsx`: Suche nach Restrouten mit `positions` / `documents`.
- `frontend_nyla/src/types/mandate.ts`: `FEATURE_REGISTRY.trustee.views` (legacy) -- Eintraege sauber halten, ggf. ganzen Block deprecaten.
- `frontend_nyla/src/components/Navigation/*`: Pruefen, ob noch Icons / Default-Routes auf `positions` / `documents` zeigen.
- **Gateway**:
- `gateway/modules/features/trustee/mainTrustee.py`: Sweep `UI_OBJECTS`, `TEMPLATE_ROLES`, `QUICK_ACTIONS` -- keine `ui.feature.trustee.positions` / `.documents` mehr.
- `gateway/modules/features/trustee/routeFeatureTrustee.py`: kein Code-Change geplant (REST-Endpunkte fuer Position/Document bleiben).
- **Wiki**:
- `wiki/b-reference/frontend-nyla/architecture.md` und `gateway/architecture.md`: pruefen, ob in den `trustee`-Mentions noch `positions`/`documents` als Top-Level-Pages stehen.
- **DB-Migration**: nein.
## Entscheidungen
| Datum | Entscheidung | Begruendung |
|-------|-------------|-------------|
| 2026-04-21 | `TrusteePositionsView` / `TrusteeDocumentsView` werden NICHT geloescht | Sie liefern weiterhin die Spezialdarstellung im neuen `TrusteeDataTablesView`-Tab. |
| 2026-04-21 | Keine sofortige Umbennenung in `*Tab.tsx` | Reduziert Diff-Risiko fuer eine reine Aufraeum-Iteration; Header-Kommentar reicht. |
## Umsetzungs-Checkliste
### Sweep / Cleanup
- [ ] `TrusteePositionsView.tsx` Header-Kommentar `Mounted only as a tab inside TrusteeDataTablesView` ergaenzen.
- [ ] `TrusteeDocumentsView.tsx` analog.
- [ ] `frontend_nyla/src/pages/views/trustee/index.ts`: Exporte pruefen und ueberfluessige entfernen.
- [ ] `grep -r "ui.feature.trustee.positions\|ui.feature.trustee.documents"` durch gateway + frontend laufen lassen -- alle Treffer adressieren.
- [ ] `grep -r "/trustee/.*positions\|/trustee/.*documents"` (Mail-Templates, Workflows, QuickActions) -- ggf. auf `data-tables?tab=positions` umbiegen.
- [ ] `mainTrustee.py.QUICK_ACTIONS`: pruefen, ob "Neuer Beleg" / "Neue Position"-Quick-Action auf `data-tables?tab=positions` (oder `tab=documents`) zeigen sollte statt ggf. veraltete Routen.
- [ ] Navigation-Defaults pruefen: nach Login / nach Feature-Aktivierung sollte die Standard-Trustee-Page weiterhin `dashboard` sein, nicht `positions`/`documents`.
### Verifikation
- [ ] Manueller Smoke-Test: Trustee-Instanz oeffnen -> `Daten-Tabellen` -> Tab `Positionen` -> Edit + Beleg-Download funktionieren wie vorher.
- [ ] Manueller Smoke-Test: Trustee-Instanz oeffnen -> `Daten-Tabellen` -> Tab `Dokumente` -> Edit + Download funktionieren wie vorher.
- [ ] `npm run build` im Frontend -- kein TypeScript-Fehler durch verschobene/entfernte Exporte.
- [ ] Gateway-Tests `gateway/tests/test_routeFeatureTrustee_*` laufen gruen.
## Akzeptanzkriterien
| # | Kriterium (Given-When-Then) | Prio |
|---|----------------------------|------|
| 1 | Given die konsolidierte Seite `Daten-Tabellen`, When der User Tab `Positionen` oeffnet, Then funktioniert Edit / Delete / Beleg-Download / Sync wie in der alten Top-Level-Seite. | must |
| 2 | Given Code-Suche `ui.feature.trustee.positions` und `ui.feature.trustee.documents`, When grep durchlaeuft, Then liefert sie keinen Treffer (ausser Migrations-/Doku-Notizen). | must |
| 3 | Given eine Quick-Action / ein Mail-Template, When es auf eine Trustee-Tabelle verlinkt, Then zeigt der Link auf `/data-tables?tab=positions` (oder `tab=documents`), nicht auf eine Top-Level-Route. | should |
| 4 | Given das Frontend-Build, When `npm run build` laeuft, Then schlaegt nichts wegen entfernter Exporte fehl. | must |
## Testplan
| ID | AC | Art | Automatisiert | Repo-Pfad | Status |
|----|----|-----|--------------|-----------|--------|
| T1 | 1 | manual UI | nein | -- | pending |
| T2 | 2 | grep | manuell | gateway/, frontend_nyla/ | pending |
| T3 | 3 | grep + manual | manuell | mainTrustee.py, mail-templates | pending |
| T4 | 4 | build | ja | frontend_nyla `npm run build` | pending |
## Links
- Vorgaenger-Plan: `wiki/c-work/4-done/2026-04-trustee-data-tables-page.md`
- Konsolidierte Seite: `frontend_nyla/src/pages/views/trustee/TrusteeDataTablesView.tsx`
- Eingebettete Tab-Bodies: `frontend_nyla/src/pages/views/trustee/TrusteePositionsView.tsx`, `TrusteeDocumentsView.tsx`
## Abschluss
- [ ] Dieses Dokument -> `c-work/2-build/` (bei Umsetzungsbeginn) -> `c-work/3-validate/` -> `c-work/4-done/`.