# 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=]`) 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 - [x] `TrusteePositionsView.tsx` Header-Kommentar `Mounted only as a tab inside TrusteeDataTablesView` ergaenzt (inkl. Hinweis, dass kein Re-Export mehr ueber `index.ts` existiert). - [x] `TrusteeDocumentsView.tsx` analog ergaenzt. - [x] `frontend_nyla/src/pages/views/trustee/index.ts`: `TrusteePositionsView` + `TrusteeDocumentsView` aus dem Re-Export entfernt; Header-Kommentar erklaert die Aenderung. Direkte Imports (`./TrusteePositionsView`) durch `TrusteeDataTablesView` funktionieren weiter -- Build verifiziert. - [x] `grep "ui.feature.trustee.positions\|ui.feature.trustee.documents"` durch Gateway + Frontend: keine Live-Code-Treffer mehr (nur Plan-/Doku-/Changelog-Eintraege + 1 erklaerender Kommentar in `mainTrustee.py:28`). - [x] `grep "/trustee/.*positions\|/trustee/.*documents"` (Mail-Templates, Workflows, QuickActions): die verbleibenden Treffer sind ausschliesslich **REST-API**-Endpunkte (`/api/trustee/{instanceId}/positions`, `/api/trustee/{instanceId}/documents` -- POST/PUT/DELETE), keine UI-Routen. Diese sind weiterhin gueltig (sie werden von den Tab-Bodies in `data-tables` aufgerufen). - [x] `mainTrustee.py.QUICK_ACTIONS`: alle URLs sind API-Endpunkte (POST/PUT/DELETE) -- keine UI-Navigation, keine Aenderung noetig. „Neuer Beleg" / „Neue Position" oeffnen das Modal in der `data-tables`-Tab-Body-Komponente. - [x] Navigation-Defaults: `FEATURE_REGISTRY.trustee.views` in `frontend_nyla/src/types/mandate.ts` enthaelt nur noch `dashboard`, `data-tables`, `position-documents`, `import-process`, `instance-roles`, `settings` -- kein `positions`/`documents` mehr; `App.tsx` hat ebenfalls keine entsprechenden Routen. ### Verifikation - [x] Manueller Smoke-Test (`Daten-Tabellen` -> Tab `Positionen`): Edit + Beleg-Download via `TrusteePositionsView`-Tab-Body funktional unveraendert. - [x] Manueller Smoke-Test (`Daten-Tabellen` -> Tab `Dokumente`): Edit + Download via `TrusteeDocumentsView`-Tab-Body funktional unveraendert. - [x] `npm run build` im Frontend: keine neuen TypeScript-Fehler durch entfernte `index.ts`-Exporte. Die zwei verbleibenden Build-Errors (`PeriodPickerLogic.ts` unused param, `RedmineStatsView.tsx` `'allTime'`-Period-Mismatch) sind **pre-existing**, gehoeren nicht in diesen Plan. - [x] Gateway-Tests `gateway/tests/test_routeFeatureTrustee_*` -- nicht beruehrt (kein Backend-Change in dieser Iteration). ## 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 | -- | done (smoke ok) | | T2 | 2 | grep | manuell | gateway/, frontend_nyla/ | done (keine Live-Treffer) | | T3 | 3 | grep + manual | manuell | mainTrustee.py, mail-templates | done (nur API-URLs verbleiben) | | T4 | 4 | build | ja | frontend_nyla `npm run build` | done (keine neuen Fehler) | ## 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 - [x] Dieses Dokument -> `c-work/4-done/` (Cleanup war eine reine Aufraeum-Iteration ohne Backend-Migration; keine separate Build-/Validate-Phase noetig). - [x] Code-Aenderungen: - `frontend_nyla/src/pages/views/trustee/TrusteePositionsView.tsx` -- Header-Kommentar (Mounted only as a tab inside `TrusteeDataTablesView`). - `frontend_nyla/src/pages/views/trustee/TrusteeDocumentsView.tsx` -- analog. - `frontend_nyla/src/pages/views/trustee/index.ts` -- die beiden Komponenten aus dem Re-Export entfernt; Header-Kommentar erklaert die Aenderung. Niemand importiert sie ueber `index.ts`. - [x] Audit ohne Code-Aenderung: - Backend (`mainTrustee.py`): keine UI-Object-Keys `ui.feature.trustee.positions/.documents` mehr; `QUICK_ACTIONS` zielen auf REST-API. - Frontend (`App.tsx`, `FeatureView.tsx`, `pageRegistry.tsx`, `mandate.ts`): keine Top-Level-Routen / Default-Views fuer `positions`/`documents` mehr. - Verbleibende `/trustee/.../positions|documents`-Treffer sind ausschliesslich `/api/`-Endpunkte fuer die Datentabellen -- weiterhin korrekt.