ADR-0062: Repräsentative Report-Sektionsparität und datenbasierte Alternativtexte im PDF/UA-Shadow
- Status: angenommen; lokaler Vertrag, geschützter Preview und Produktionstrennung verifiziert
- Datum: 28. August 2026
- Issue: #333 bleibt offen
- Vorgänger: ADR-0061
Kontext
Slice C bindet repository-fixierte Objekte des deployten Report-Typs an den
PDF/UA-Preview-Shadow. Der Mapper übernimmt dort absichtlich nur einen kleinen
Kern aus Fläche, Steckbrief, Szenarien, Förderungen und Solarwerten. Damit ist
der echte TypeScript-Vertrag angebunden, aber noch nicht belegt, dass der
Renderer die im Produkt vorhandenen Reportbereiche vollständig und in
verständlicher Lesereihenfolge darstellen kann. Die beiden bisherigen
Abbildungsalternativtexte sind außerdem fest formuliert und nicht aus den
jeweiligen Reportdaten abgeleitet.
Entscheidung
-
Slice D erweitert die vollständig synthetischen Vier-Tier-
Report-Fixtures um alle für einen repräsentativen vollständigen Report vorhandenen Top-Level-Bereiche. Der Mapper erzeugt daraus exakt 31 geordnete Sektionen: Grundstück, Widmung, ÖV, POI-Dichte, Erreichbarkeit, Breitband, Pendeln, Demografie, Bahn, Boden, Klima, Hitzebelastung, Solar, LCZ, Brachflächen-Potenzial, Altlasten, Radon, Hochwasser, Lärm, Schutzgebiete, Denkmal, Zweitwohnsitz, Erdbeben, WLV, Steckbrief, Standort-Bilanz, Szenarien, Förderungen, Regelwerk, Quellen und Haftungsgrenzen. -
Das Mapping schließt fail-closed. Sämtliche 31 IDs müssen genau einmal in der festgelegten Reihenfolge vorkommen. Für repräsentative Listen gelten feste Kardinalitäten. Fehlt ein benötigter Reportbereich oder weicht die Struktur ab, wird vor dem Renderer abgebrochen.
-
Die achtseitige Ausgabe gruppiert die Sektionen in Lage und Versorgung, Umwelt und Standortpotenziale, Risiken und Restriktionen sowie Governance. Drei informative Figures sind über ID und Alternativtext-Digest an den Roh-PDF-Output gebunden:
- eine schematische Parzellenansicht aus Fläche und künstlicher Fixture-ID,
- eine schematische Risikozonenansicht aus Hochwasser-, Schutzgebiets-, Altlasten- und WLV-Zusammenfassungen,
- ein Kostendiagramm aus den sechs Szenarien einschließlich der ausgeschlossenen Szenarien ohne Kostenwert.
Die Alternativtexte werden je Renderlauf aus der gemappten Fixture erzeugt; statische Ersatztexte oder reale Kartenkoordinaten sind nicht zulässig.
-
Die semantische Struktur bleibt PDF/UA-1: exakt acht strukturierte A4-Seiten, drei Figures, zwei Links und 16 als Pagination-Artefakte markierte Kopf-/Fußzeilen. veraPDF, physische Textschicht, Tabreihenfolge, Linkziele sowie beide Poppler-Backends bleiben harte Gates.
-
Der Zugang bleibt unverändert eng:
POST /api/internal/pdf-ua-shadow/[tier], nur in Vercel Preview, ohne Query oder Body und hinter Vercel Deployment Protection. Erfolgreiche Antworten tragenX-LandNutzen-PDF-UA-Shadow: slice-d-1. Produktion, Development, Nicht-POST-Methoden und unbekannte Tiers bleiben verborgen. -
Der Slice liest keine Datenbank, Session, gespeicherten Report, Adresse, Koordinate oder Provider und führt keinen Netzwerkzugriff aus. Sämtliche Werte, Quellennamen und räumlichen Aussagen sind repository-fixiert und als synthetisch bezeichnet. Die vorhandenen Tiergates für Narrative und den synthetischen Google-Solar-Block bleiben bestehen.
-
Der öffentliche Endpunkt
GET /api/v1/report/{id}/pdfbleibt unverändert bei React-PDF und ist weiterhin nicht als PDF/UA getaggt. Slice D ist keine Produktumschaltung und keine fachliche Abnahme der synthetischen Aussagen. -
Issue #333 bleibt offen. Noch fehlen die Anbindung echter gespeicherter Reports, reale Karten-/Viewerregressionen des neuen Renderers, ein kontrollierter Produktrollout mit PDF/UA-Live-Readback und die manuelle Screenreader-Abnahme.
Konsequenzen
- Der Shadow kann Layout, Lesereihenfolge und Alternativtexte nun gegen einen
repräsentativ vollständigen
Reportprüfen, ohne Produktionsdaten zu lesen. - „31 Sektionen vorhanden“ bedeutet strukturelle Contract-Parität der festen Fixture, nicht fachliche Vollständigkeit jedes realen Reports. Optionale oder degradierte Live-Daten benötigen im Produktpfad eigene Zustandsprüfungen.
- Ein grüner Slice-D-Lauf verkleinert die offene Produktintegration, ersetzt aber weder Viewer-, Live- noch assistive manuelle Abnahmen.
- Die historischen Slice-B- und Slice-C-Nachweise bleiben unverändert an ihre damaligen fünfseitigen Verträge gebunden.