# 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
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_` 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-`
`-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.