# Votian NG Migration Backlog

## Ziel

Die PHP-Anwendung wird schrittweise in `services` und `vaadin` ueberfuehrt. Dieser Backlog bildet die noch fehlenden Fachbereiche als umsetzbare Vertikalschnitte ab.

## Bereits vorhanden

- Authentifizierung inkl. TOTP
- Dashboard
- Stammdaten fuer Kunden, Kuriere, Mitarbeiter, Niederlassungen, Kostenstellen
- Basis-Auftragsverwaltung
- Preisverwaltung fuer Leistungen und Leistungstypen
- Statistik- und Rechnungskennzahlen
- Parameter-Fallback-Logik als Java-Backend

## In diesem Schritt umgesetzt

- Mitarbeiterrechte als HQ-bezogene Rechtevergabe
- Kurierfahrzeuge in der Vaadin-Maske
- Kurieradressdaten in Create/Update-Payload und Backend-Persistenz
- Rechnungsarbeitsbereich mit Kundenliste, Kostenstellenfilter und Auftragsdetails
- Auftragsdetail mit Rechnungstext, Dokumentenupload, Dokumentenloeschung und Fotoanzeige
- Artikelpflege fuer bestehende Auftraege jetzt auch persistent ueber das Detail-Update
- Kundenservice-Konfiguration mit Leistungszuordnung sowie Pflege von Zonen, PLZ-Zuordnungen und Radiusbereichen
- Kostenstellenrechte fuer Mitarbeiter ueber `employeecostcenter` inkl. Vaadin-Pflege im Mitarbeiterdetail
- Kundenbenutzer als eigener Mitarbeitertyp mit Haupt-Kostenstelle und zusaetzlichen Kostenstellenfreigaben
- Rollenabhaengige Navigation und Routenguards fuer HQ-, Kunden- und Kurier-Benutzer
- Kunden-Scopes fuer Joblisten, Rechnungen, Statistik und Kostenstellen ueber die Sessionrechte
- Kurierhistorie als eigener Arbeitsbereich fuer Kurier-Benutzer mit Laufend/Erledigt-Filter und Detailansicht
- PDF-/CSV-Ausgabe fuer Rechnungsdetails und Kurierhistorie inkl. Markierung exportierter Auftraege
- HQ-Dispositionsarbeitsbereich mit Tagesboard, Fahrzeugliste und Auftragszuordnung
- Locating-Sicht fuer Tourstationen eines Tages mit Stationsdetails und Karten-/Routenlinks
- Erweiterte Auftragsliste mit fachlichen Filtern fuer Status, Kostenstelle, Kurier und Exportstatus
- Listenerfassung als Mehrfachanlage fuer abgeschlossene Listenbuchungen mit Kunden-/Kostenstellenbezug
- Kundenservice-Pflege fuer Abliefergruende mit vier mobilen Listen inklusive Legacy-kompatibler GDC-Ablage
- Kundenservice-Pflege fuer servicebezogene Abnahmeprotokolle mit Fragen, Mail-Status und Textbausteinen
- Jobcalculator-Arbeitsbereich im Auftragsdetail mit `jobprice`-Positionen, Kategorieauflösung, Bemerkung und Referenz
- Legacy-Preisberechnung im Jobcalculator fuer Fixpreis-, Servicepreis-, Kundenrabatt- und Selbsterfasser-Schnitt inkl. Vorschau-Endpunkt
- Ableitung und Synchronisierung der Legacy-`jobprice`-Positionen fuer Auftragsmarkup, Kurier-Zwischensumme, Provisionssatz und Selbsterfasser-Rabatt
- Persistente Job-Felder fuer `jb_subtotalprice`, `jb_serviceprice` und `jb_cr_subprice` jetzt in Backend und Vaadin-Detailmaske nutzbar
- Globale Rollen- und Rechteauswertung aus `employee.emp_rights` jetzt durchgaengig in Login-Session, Backend-Guards und Vaadin-Navigation
- Zentrale Access-Control fuer Kunden-, Kurier-, Mitarbeiter-, Auftrags-, Rechnungs-, Dispositions- und Preisendpunkte
- Feinere Rechtepruefungen auf Menue-, Route- und Button-Ebene fuer die migrierten Vaadin-Arbeitsbereiche
- Mitarbeiterdetail jetzt mit Pflege der globalen Legacy-Rechte fuer HQ- und Kundenbenutzer sowie Lagertyp `usr_type = 4`
- Kundenbenutzer koennen Mitarbeiterlisten jetzt rollenabhaengig wieder sehen und in ihrem Scope pflegen
- Lagernutzer ist im Java-System jetzt als eigener Benutzertyp mit eigenem Arbeitsbereich und Routenschutz verankert
- Neuer Lagerarbeitsbereich mit Hauptlagerauswahl, Lagerbaum, Bestandsliste, Seriennummernansicht und Lagerjournal
- Lagerbuchungen aktualisieren jetzt `stockarticle`, `articleitem` und `stockmove` fachlich konsistent im Java-Backend
- Lagerzugriffe nutzen bestehende Legacy-Parameter fuer Hauptlager, Unterlager, Readonly-Modus und Artikelzugriff
- HQ-Benutzer mit Legacy-Lagerrecht `emp_rights[14]` sehen das Lagermodul jetzt ebenfalls in Navigation und Routenschutz
- HQ-Globalrechte nutzen im Mitarbeiterdetail jetzt den vollstaendigen Legacy-Rechtekatalog aus `rights` statt nur eines Teilmengen-Mappings
- Kunden-Globalrechte decken jetzt alle 16 PHP-Bits inklusive Adressen, Intervall, Termine und Scan-Objektmanagement ab
- Kundenbenutzer ohne Mitarbeiterverwaltungsrecht sehen Mitarbeiter weiter im Legacy-Sinne, aber nur den eigenen Datensatz editierbar gemaess `Benutzerkonten aendern` und `GLOBAL_CUSTOMER_READONLY_DISABLED`
- Longhaul-Arbeitsbereich fuer HQ-Benutzer mit Legacy-Recht `emp_rights[10]`, Kennzahlen und drei Boards fuer zu vermittelnde, angenommene und laufende Ruecktouren
- Longhaul-Backend mit `jb_longhaul`-/`jb_taketime`-Persistenz, parametergetriebener Vermittlungslogik ueber `LONGHAUL_ACTIVE` und Distanz-Sichtmodus ueber `LONGHAUL_KM`
- Rueckgabe automatisch markierter Ferntouren an die Niederlassung jetzt als eigener Java-Endpunkt und Vaadin-Aktion verfuegbar
- CSV-Export fuer die gefilterte Auftragsliste inkl. Legacy-Rechtepruefung (`emp_rights[42]` bzw. Kunden-Exportbit) und Vaadin-Downloadlink umgesetzt
- Mitarbeiterdetail jetzt mit Lager-Reiter fuer Lagernutzer inkl. Hauptlagerfreigaben, Standardlager, Readonly-/Artikelverwaltung und Unterlager-Matrix
- Auftragsdetail jetzt mit `jb_service`-Pflege, Protokoll-Reiter, Signaturanzeige und PDF-Ausgabe fuer die servicebezogenen Abnahmeprotokolldaten
- Draft-Jobcalculator nutzt jetzt die Tourkette fuer `cs_invmode > 0` und berechnet Grundpreis, PLZ-/Area-Matrix, `COSTCENTER_INV_MODE_*`, Fahrzeugtyp-Mapping und globalen `getCr_price_global()`-Fallback direkt im NG-Backend
- Exact-Address-Area-Aufloesung aus `getAreaIdFromAddress()` sowie negative kundenbezogene Preis-/Rabattkorrekturen aus den Servicehistorien sind im NG-Jobcalculator angekommen
- Treibstoffzuschlaege aus `getFuelMarkup()`/`getFuelMarkupCr()` inkl. `cs_markup_prov`-Historie und `MASK_NO_MARKUP_ON_VEHICLE_PRICE`-Ausnahme fuer den Grundpreis sind jetzt im NG-Jobcalculator verdrahtet
- Routenbasierte `JB_CR_PROV`-Ableitung zieht jetzt optional den Legacy-Service `Globaler<br>Fuhrlohnabschlag [%]`, statt nur aus Kunden-/Kurier-Zwischensummen rueckzurechnen
- Kunden-Kurier-Agio aus `servicepricehistory` (`cscr_prov`) greift jetzt im aktiven `MASK_CR_PRICE_MODE` ab `MASK_CR_PRICE_MODE_DATE`, schreibt `JB_CR_AGIO`/`JB_CR_SERVICE_PROV` und justiert Kurier-Zwischen-/Servicepreise im NG-Jobcalculator nach
- `MASK_CR_PRICE_MODE_DATE` steuert im NG-Jobcalculator jetzt auch, ob `jb_cr_serviceprice` bereits in Kurier-Endpreis und abgeleitetes `JB_CR_SUBTOTAL` einfliesst oder noch als separater Legacy-Posten stehen bleibt
- Manuelle Legacy-`jb_cr_serviceprice`-Werte laufen im NG-Jobcalculator jetzt kompatibel ueber `jobprice.mt_sort = 3` samt `genericdatacontainer`-Roundtrip, statt nur `mt_sort = 4` zu beruecksichtigen
- Manuelle Legacy-Kurierfixpreise aus `jobprice.mt_sort = 2` uebersteuern im NG-Jobcalculator jetzt die automatische Fixpreis-/Routen-Ableitung inkl. Selbsterfasser-Abschlag, ohne dabei kuenstlich `JB_CR_PROV` zurueckzurechnen
- Manuell geaenderte Kurier-Endpreise aus der NG-Maske koennen den Draft-Jobcalculator jetzt explizit uebersteuern; die Rueckrechnung in Kurier-Zwischensumme respektiert dabei `MASK_CR_PRICE_MODE_DATE` fuer den Serviceanteil und vermeidet ebenfalls eine kuenstliche `JB_CR_PROV`-Ableitung
- Manuelle Kurier-Fixpreise und explizite Kurier-Servicepreise bleiben im Draft-Jobcalculator jetzt auch gegen alte `JB_CR_PROV`-/`JB_CR_AGIO`-/`JB_CR_SERVICE_PROV`-Altlasten stabil, statt durch spaetere Agio-Nachrechnung wieder ueberschrieben zu werden
- Gespeicherte Auftraege synchronisieren nach Preis-Aenderungen jetzt auch im Backend die Kurierseite erneut ueber den portierten Java-Jobcalculator; damit greifen die portierten Preisregeln nicht nur im Draft, sondern auch im Persistenz-Nachlauf fuer `save`/`replace`/`delete` von `jobprice`
- Abgeleitete Kurier-Servicepreise aus `jobprice.mt_sort = 4` bleiben im NG-Jobcalculator jetzt auch im Agio-/Rate-Nachlauf neu berechenbar, waehrend nur manuelle Legacy-Werte aus `mt_sort = 3` eingefroren bleiben
- Der Persistenz-Nachlauf fuer gespeicherte Kurierpreise zieht jetzt auch eingebettete `Frachtverguetung: ... EUR`-Texte in `tour.tr_remark` fuer die erste Tour mit dem neu berechneten Kurier-Endpreis nach, analog zu `recalc_jb_cr_price()`
- Der Persistenz-Nachlauf schreibt jetzt auch kundenrelevante Preisfelder (`jb_markup`, `jb_subtotalprice`, `jb_totalprice`) aus dem portierten Java-Jobcalculator zurueck und markiert bei echten Abweichungen `jb_invtext_dirty`, analog zum Legacy-`recalc_jb_price()`
- Der Persistenz-Nachlauf zieht jetzt auch bestehende `tourservice.trs_price`-Zeilen nach Markup-Aenderungen weiter, ausser bei `Servicepreis` und der Legacy-Ausnahme `MASK_NO_MARKUP_ON_VEHICLE_PRICE` fuer `Grundpreis`, analog zum letzten offenen Teil von `recalc_jb_price()`
- Das Auftragsdetail zeigt persistierte `tourservice`-Zeilen jetzt read-only im Jobcalculator-Reiter inklusive Kostenstelle, Station, Rabatt und effektivem Betrag, damit die bereits gespeicherten Legacy-Servicekosten im NG sichtbar sind
- Die NG-Rechnungsuebersicht und Rechnungsexporte ziehen den Kundenumsatz jetzt bevorzugt aus persistierten `tourservice`-Betragswerten pro Job/Kostenstelle und fallen nur ohne passende Persistenzdaten auf `job.jb_totalprice` zurueck
- Die NG-Auftragsliste und ihr CSV-Export respektieren jetzt ebenfalls `MASK_JOBLIST_TOTALPRICE` und summieren bei aktivem Legacy-Schalter persistierte `tourservice`-Betraege pro Auftrag statt blind `job.jb_totalprice` zu zeigen
- Neu angelegte NG-Auftraege und Listenbuchungen erzeugen jetzt auch persistente `tourservice`-Grundzeilen fuer `Fixpreis` und optional `Servicepreis`, damit neue Datensaetze in den portierten Umsatz-/Detailpfaden nicht mehr auf Fallbacks angewiesen sind
- Der Persistenz-Nachlauf des NG-Jobcalculators synchronisiert diese verwalteten `tourservice`-Grundzeilen jetzt auch bei spaeteren Preis-/Rabattaenderungen auf Fixpreis, Servicepreis und `trs_discount`, ohne importierte oder detailreiche Legacy-`tourservice`-Saetze zu verbiegen
- Die Kunden-Rechnungsdetails und Rechnungsexporte zeigen persistierte `tourservice`-Leistungen jetzt bei aktivem Legacy-Schalter `MASK_INVOICE_SHOW_SERVICES_<customerId>` pro Auftrag an und nutzen dafuer die zur Kostenstelle passenden bzw. globalen Zeilen
- Die Rechnungs-Leistungsanzeige fuer persistierte `tourservice`-Zeilen respektiert jetzt auch die Legacy-Druckparameter `INV_PRINT_METATYPE_SERVICE`, `INV_PRINT_DISCOUNT` und `INV_PRINT_SRVPRICE` fuer Typ-, Rabatt- und Preiszusatz in Detailansicht und Export
- Neue Auftraege koennen ihren initialen `jobprice`-Satz jetzt direkt im Create-Call mitsenden; damit laeuft der portierte Jobcalculator schon beim Anlegen atomar durch und die erste Persistenz landet ohne separaten Nachlauf-Request in konsistenten Job-/`tourservice`-Feldern
- Neu angelegte NG-Auftraege ohne initiale `jobprice`-Zeilen initialisieren persistierte `tourservice`-Grundzeilen fuer explizite `Fixpreis`-/`Servicepreis`-Eingaben jetzt ebenfalls ueber den portierten Jobcalculator; damit greifen Legacy-Semantiken aus `job_options.php` fuer `trs_discount` und den manuellen Fixpreis-Pfad nicht mehr nur im spaeteren Recalc, sondern schon im ersten Create-Write
- Routenbasierte NG-Preise schreiben ihre NG-verwalteten persistierten `tourservice`-Zeilen jetzt ebenfalls detailliert als `Grundpreis` plus PLZ-/Area-Etappen statt nur als pauschalen `Fixpreis`; der Persistenz-Sync aktualisiert solche NG-Routezeilen auch weiter, solange keine importierten oder sonstigen Fremdsaetze im Weg stehen
- Die NG-Readmodelle fuer persistierte `tourservice`-Daten blenden jetzt auch Legacy-Platzhalterzeilen `trs_srvt_name = 'z'` mit `trs_price = 0` aus, damit Detailansicht und Rechnungs-Leistungsanzeige keine internen `saveServiceCosts()`-Marker als echte Leistung darstellen
- Persistierte NG-`tourservice`-Zeilen bevorzugen jetzt auch im Write-/Sync-Pfad `csc_id_payer_cash`, sobald dieser gesetzt ist; damit folgt die Kostenstellenwahl fuer Barzahler wieder der Legacy-Semantik aus `saveServiceCosts()` statt versehentlich am regulaeren Zahler haengen zu bleiben
- Katalogbasierte NG-`tourservice`-Zeilen persistieren jetzt auch wieder ihre Legacy-`srv_id`-/`srvt_id`-Referenzen, soweit sich Service und Servicetyp ueber HQ- bzw. Global-Katalog eindeutig aufloesen lassen; damit bleiben `Grundpreis`-Zeilen nicht mehr pauschal auf `0/0`, waehrend freie Spezial-/Routezeilen weiter bewusst offen bleiben
- Persistierte NG-`tourservice`-Bezeichnungen normalisieren jetzt auch das Legacy-`<br>`-Markup beim Lesen, damit Jobdetails und Rechnungs-Leistungsanzeige dieselben Klartextlabels wie `getJobCosts()` statt roher HTML-Fragmente zeigen
- Die letzte offene Legacy-Servicepreis-Sonderregel `MASK_SERVICE_PRICE_STREET` aus `check_jb_serviceprice()` ist jetzt ebenfalls portiert: NG berechnet den automatischen Strassenaufschlag im Draft fuer neue Auftraege, persistiert ihn einmalig beim Create ueber `genericdatacontainer`, haelt ihn bei spaeteren Recalcs kundenseitig stabil aus dem Kurier-Servicepreis heraus und schreibt die resultierende `Servicepreis`-Zeile netto in persistierte `tourservice`
- Persistierte `tourservice`-Import-/Spezial-Splits sind jetzt auch im Rechnungsfluss modelliert: Invoice-Summary, Kunden-Rechnungssummen und Rechnungsdetails summieren mehrfache `csc_id`-Anteile eines Auftrags sauber ueber alle relevanten Split-Kostenstellen, waehrend eine explizit gewaehlte Unterkostenstelle gezielt nur ihren Anteil samt passender Leistungszeilen zieht; kundenweite Rechnungsdetails gruppieren solche Split-Leistungen jetzt sichtbar je Kostenstelle statt sie weiter in eine einzelne Default-KST zu druecken
- Der Longhaul-Arbeitsbereich zeigt jetzt auch eine NG-Kartenansicht auf Basis der PLZ-Geokoordinaten: Backend und Dashboard-DTO liefern Luftlinie sowie Start-/Zielkoordinaten fuer geocodierte Touren, die Vaadin-Maske rendert daraus eine statusfarbige schematische Deutschland-Karte und haelt manuelle FT-Auftraege ohne Geocodes weiter nur in Liste und Detail sichtbar
- Manuelle FT ist jetzt auch im Auftragsdetail modelliert: HQ-Benutzer mit Longhaul-Recht koennen `jb_longhaul = 3` direkt am Auftrag setzen oder wieder entfernen, die Detailmaske zeigt dabei den aktuellen FT-Status samt Speicherwirkung an, und das Backend akzeptiert in Create-/Update-Pfaden nur noch die manuell legitimen Werte `0` und `3`, waehrend automatische Longhaul-Zustaende weiter systemgefuehrt bleiben
- Der Longhaul-Remote-DB-Sonderfall ist jetzt im NG-Dashboard portiert: berechtigte HQ-Benutzer koennen zwischen lokaler DB und der per `LONGHAUL_REMOTE_DB_ACCESSDATA` konfigurierten Fremdinstanz umschalten, das Backend liest dabei Jobs, Touren, Adressen, PLZ-Geodaten, Kostenstellen, Kunden, Fahrzeugdispositionen und das Remote-`LONGHAUL_ACTIVE_REMOTE_DB` direkt aus der zweiten MariaDB, und Rueckgabe an HQ funktioniert in diesem Modus ebenfalls gegen die Fremddatenbank; der normale NG-Auftragsdialog wird fuer Remote-Datensaetze bewusst gesperrt, damit keine lokalen Fehl-Drilldowns entstehen
- Der Longhaul-Remote-DB-Detail-/Locatingfluss ist jetzt ebenfalls portiert: ein neuer NG-Detail-Readpfad liefert fuer lokale wie Remote-Ferntouren read-only Auftragsdetails inklusive kompletter Start-/Zielkontaktangaben und letztem Kurierstandort aus `courier.cr_gps_*`; in Vaadin schaltet der Aktionsbutton fuer Fremddaten oder Benutzer ohne allgemeines Jobrecht jetzt auf einen eigenen Detaildialog statt auf den lokalen Jobeditor, sodass Remote-Datensaetze samt letzter Ortung direkt im Ferntouren-Workspace einsehbar bleiben
- Feiertage sind jetzt als eigener HQ-Stammdatenschnitt portiert: NG verwaltet die Legacy-Tabelle `publicholiday` jahresbezogen ueber Backend, API und Vaadin-Maske inklusive Jahresauswahl, Vorjahresuebernahme, Editierschutz fuer vergangene Tage und Legacy-kompatibler Persistenz pro Niederlassung
- Gruppen- und Filteradministration ist jetzt als eigener HQ-Stammdatenarbeitsbereich portiert: NG verwaltet die Legacy-Kataloge `groups` und `courierfilter` inklusive CRUD, Readonly-/Mandantenlogik, Legacy-Cleanup beim Loeschen und Nutzungsauswertung; zusaetzlich nutzen Kunden-, Kurier- und Mitarbeiterdetail die Kataloge jetzt wieder ueber echte Mehrfachauswahlfelder statt rohe Kommastrings
- Die Legacy-Service-XMLs laufen jetzt als geschlossener nativer NG-Integrationsblock im Java-Backend: `/service/costcenter_request.php`, `/service/zone_request.php`, `/service/price_request.php`, `customer_request.php`, `metaobject_request.php`, `order_request.php`, `station_request.php` sowie `order_data_request.php` inklusive Read-, Status-`SET`- und breiteren selektiven Job-/Stations-Write-Pfaden sind portiert; zusaetzlich deckt die XML-Authentifizierung jetzt auch die verbleibenden Contractor-/Kunden-Spezialpfade fuer diese Service-Endpunkte ab
- Tracking ist jetzt als geschlossener Bewegungs-/Statusblock portiert: ein neuer NG-Trackingarbeitsbereich zeigt fuer HQ- und freigeschaltete Kundenbenutzer Tagestracking, Kartenansicht, Job-/Kurierlisten und die letzten Kurierpositionen auf Basis von `courier.cr_gps_*` bzw. `cr_locationzipcode`, das Backend liefert dafuer einen eigenen `/tracking/dashboard`-Readpfad mit Kunden-/Rechtescope und geocodierten Stopps, und Kunden-/Kurierdetail pflegen bzw. zeigen die relevanten Legacy-Felder `cs_tracking` sowie `cr_mobile_pda` plus Live-Ortungsmetadaten jetzt ebenfalls in Vaadin
- Importprozesse sind jetzt als eigener NG-Arbeitsbereich portiert: HQ-Benutzer mit Legacy-Import-/Transferrechten sehen eine zentrale Importmaske mit Prozesskatalog, Dateistaging, Download/Loeschung und nativer Ausfuehrung fuer standardisierte `ZONE`- und `RADIUSZONE`-CSV-Uebernahmen; die uebrigen Legacy-Sonderimporte aus `html/import/*` laufen darin bewusst als strukturierte Datenuebernahme-/Spezialfall-Koerbe statt ueber verstreute PHP-Einzelseiten
- Der Importarbeitsbereich ist jetzt auch fuer die restlichen Legacy-Pfade fachlich abgeschlossen: `ZONEAGIO` und `ZIPCODE_NEIGHBOURS` laufen natuerlich im NG, die verbliebenen Formate aus `html/import/*` sind mit Prioritaet, Legacy-Quellen, NG-Nachfolger und bewusster Archivierungsentscheidung im Workspace dokumentiert statt weiter implizit in Sammelkoerben zu verschwinden
- Der Vertriebs-/Groupware-Block ist jetzt als zusammenhaengender NG-Workspace portiert: ein neuer Vaadin-Bereich deckt Tages-, Wochen-, Monats- und Aufgabenansicht fuer Legacy-Termine aus `groupware/appointment.php`, `groupware/calendar.php` und `groupware/task.php` ab, das Backend liefert dafuer Optionen, Kalenderabfragen und CRUD-/Aktionsendpunkte fuer Terminverwaltung, Wiedervorlagen, Teilnehmerbestaetigung, Abschlusslogik mit Berichtszwang desselben Tages sowie optionalen Mailversand, und Rechte/Navigation folgen dem Legacy-HQ-Rechtebit `11`
- Die Formular-/Metafeld-Administration ist jetzt als eigener HQ-Stammdatenarbeitsbereich portiert: NG verwaltet `metafieldcategory`, `metafieldkey`, `metafieldtemplate` und `metafieldcategorykey` inklusive Kategorien, Template-Zuordnung, globaler Felddefinitionen, Template-Inhalt, Formularfeld-Zuordnungen und Sortierung direkt legacy-kompatibel ueber REST und Vaadin
- Der generische Berichtsarbeitsbereich ist jetzt als eigener HQ-Workspace portiert: NG deckt Kunden-, Transporteur- und Interessentenberichte aus `groupware/report.php` mit Objekt-Suche, Berichtstypen, Historie, Vertraulichkeit, Statistik, CSV-Export sowie Legacy-kompatiblem CRUD auf `phoenix_group.report_process` ab; Rechte und Sichtbarkeit folgen dabei wieder dem Legacy-Reportbit `16` plus vertraulicher Sonderfreigabe
- Der generische Datenexport ist jetzt als eigener NG-Workspace portiert: NG konsolidiert `export/export.php` fuer HQ- und Kundenbenutzer ueber einen zentralen Exportbereich mit Legacy-Kategorien aus `exportcategory`, Profilpflege auf `exportparameters`, nativer Dateigenerierung mit Profil-Metadaten, Dateiarchiv auf `exportfiles` sowie Download-/Loeschpfaden fuer die ueblichen Stamm- und Bewegungsdatenexporte
- Der Kommunikationsblock ist jetzt als eigener HQ-Workspace portiert: NG konsolidiert `admin/newsticker.php`, `admin/courier_msggrp.php`, `admin/mf_history.php` und die zugehoerigen Legacy-Nebenpfade in einem Bereich fuer Mitteilungen auf `phoenix_group.tickerforum`, Nachrichtengruppen und Kurierzuordnungen auf `messagegroup`/`courier.cr_msggrp` sowie Endgeraetehistorie und Versand-/Antwortlogik auf `phoenix_log.messageforum`
- Die verbliebenen Newsletter-/Legacy-Nebenpfade sind jetzt fachlich abgeschlossen: NG pflegt Newsletter-Opt-in und DSGVO-Status fuer Kunden- und Kurierfirmen direkt im Kommunikationsworkspace auf `company.cmp_newsletter`/`company.cmp_dsgvo`, waehrend nicht mehr belastbar referenzierte Sonderpfade wie `sysadmin/newsletter/*.php`, `tools/auto_response*.php` und generische `admin/metafield_special_cron.php`-Einmalpfade bewusst als Legacy-Archiv dokumentiert statt weiter stillschweigend als offene NG-Workspaces mitzulaufen; die Bewertungsbasis steht in `LEGACY_SIDEPATH_AUDIT.md`
- Der HQ-Operationsblock fuer Karten, Adressen und Suche ist jetzt als eigener NG-Workspace portiert: NG konsolidiert `locating/map.php`, `admin/ad_admin.php`, `admin/nearBySearch.php` und `admin/traveltime.php` in einer Route fuer globale Kartenuebersicht mit HQ-/Kurierpunkten, direkte Pflege von `address` und `phoenix_special.street`, fuzzy Aehnlichkeitssuche fuer Kunden und Kuriere sowie Legacy-kompatible Pflege der `serviceplz`-/`serviceplztraveltime`-Anfahrtszeiten; Rechte und Sichtbarkeit folgen dabei wieder den Legacy-Bits `19`, `2`, `0` und `1`

## Noch offen

- Keine weiteren grossen fachlichen Legacy-Arbeitsbereiche mehr offen; verbleibend sind nur technische Betriebsentscheidungen fuer Alt-Crons, Einmalintegrationen und Archivpfade ausserhalb der produktiven NG-UI.

## Nächste empfohlene Vertikalschnitte

1. Verbleibende technische Alt-Crons und Einmalintegrationen ausserhalb der NG-UI betrieblich entscheiden: separat weiterfuehren, in dedizierte Integrationsservices ueberfuehren oder final abschalten.
2. Danach Legacy-PHP-Seiten ohne produktiven Zugriffspfad sichtbar als Archiv kennzeichnen und aus Support-/Betriebsdokumentation bereinigen.
