Dokumentation: Seiten auswählen

PDF & teilbarer Link

PDF-Layout: Entscheidungsüberblick und Altlastenhinweis (#558)

Der öffentliche React-PDF-Renderer setzt Kennzahl und vollständige Erklärung in getrennte Textblöcke. Der Altlastenhinweis beginnt bei seiner Ergebniszeile; lange Hinweise dürfen vollständig weiterfließen. Acht synthetische Geometrie-/Paginierungsfälle ergänzen beide Poppler-Backends und die bisherigen Mehrseitenregressionen. Fachliche Ampeln und Reportdaten bleiben erhalten. Vertrag und Abnahmestand unterscheiden lokale Prüfung, finalen PR/Preview und den anschließenden Produktions-Readback. PDF/UA #333 und der mobile Slice #557 bleiben getrennt.

Status: Live · Report als PDF herunterladen oder per Link teilen.

Jeder erfolgreich gespeicherte Report kann als PDF heruntergeladen und über einen stabilen Permalink weitergegeben werden — an Gemeinde, Planer oder Bank.

Optionaler Quellenanhang

Neben „PDF herunterladen“ steht für gespeicherte Reports „Quellenanhang (PDF)“ bereit. Die Nummern der kurzen Quellenhinweise im Report führen zu den vollständigen Belegen im separaten Anhang. Beide Downloads gehören zur gleichen Report-ID und zum gleichen gespeicherten Datenstand; es wird dafür kein neuer Report erstellt. Quellen, Lizenzen, bekannte Abrufstände und ausführliche Herkunftsangaben bleiben nachvollziehbar. Wichtige Einschränkungen, Datenlücken und der Status unbestätigter Entwürfe stehen weiterhin direkt im Report.

Ohne erfolgreich gespeicherten Report sind beide Downloads nicht verfügbar. Für abgelaufene oder unbekannte Reports gibt es keinen Quellenanhang. Der Quellenanhang ist wie das Haupt-PDF noch nicht als PDF/UA-konform abgenommen.

Datenquellen

Datenbasis ist primär der bereits erzeugte, serverseitig persistierte Report. Das PDF enthält zusätzlich einen statischen Risiko-Zonen-Kartenausschnitt, der eine basemap.at-Graukarte (CC BY 4.0) und halbtransparente WMS-Overlays (Wildbach/Lawine, Schutzgebiete, Lärm) deckungsgleich stapelt — nur verifizierte Bild-Quellen landen im PDF (Timeout-Vorabprüfung); ohne Koordinate oder bei Quellen-Ausfall rendert das PDF unverändert ohne Karte.

  • Persistierung in der Tabelle reports. Scheitert das Speichern, bleibt das Report-Ergebnis verfügbar, aber ohne Permalink und PDF-Download.
  • PDF-Erzeugung serverseitig mit @react-pdf/renderer (kein Headless-Browser).

Was hinter den Zahlen steht

Webreport und Haupt-PDF erklären die vier Lageindikatoren gemeinsam:

  • Breitband: Ein Kartenfeld von 100 × 100 m beschreibt die gemeldete Festnetzversorgung der Umgebung. Die Downloadangabe belegt keinen Glasfaseranschluss am Haus. Förderhinweise bleiben davon getrennt; ihr Fehlen ist kein Beleg gegen Ausbaupläne.
  • Nahversorgung: Bei der bekannten 900-m-Methode zählt jede der fünf Kategorien mit mindestens einem OSM-Eintrag 20 Punkte. Die vorhandenen Kategorien und die Gesamtzahl erfasster Einträge stehen dabei. Luftlinie ist keine berechnete Gehstrecke oder Gehzeit; fehlende Einträge können Erfassungslücken sein. Historische oder unbekannte Methoden behalten ihre gespeicherten Kategorien, Radiusangaben, Bewertungen und Hinweise.
  • Pendeln: Gemeindestatistik ordnet das Verhältnis von Wohnen und Arbeiten ein. Arbeitsstätten und Beschäftigte am Arbeitsort sind keine offenen Stellen und kein Nachweis der Qualität des Arbeitsangebots.
  • Umgebungsstruktur: LCZ (Local Climate Zones) beschreibt Bebauung und Bodenbedeckung anhand der häufigsten Klasse in 5 × 5 Rasterzellen (rund 500 m Nord-Süd × 335 m Ost-West). Anteil und Modell-Konfidenz bleiben sichtbar. Die Beschreibung ersetzt weder Flächenwidmungs- noch Bebauungsplan und enthält keine Baufreigabe.

Fehlende Indikatoren erhalten durch diese Erklärungen keine erfundenen Befunde. Datenstände, Warnungen, Quellenverweise und Quellenanhang bleiben maßgeblich; die Erklärungen ändern keine Reportdaten oder API-Felder.

Die ersten beiden Szenarienkarten stehen im Haupt-PDF untereinander in voller Breite. Ihre Inhalte können weiterfließen, damit geänderte Umbrüche keine leeren Folgeseiten oder abgeschnittenen Langtexte erzeugen. Die weiteren Szenarienkarten behalten die kompakte Spaltendarstellung.

PDF und Permalink basieren auf dem gespeicherten Report; sie starten keine neue Standortabfrage oder Szenarioberechnung. Die Ansicht kann jedoch vom historischen JSON-Snapshot abweichen: Alte PV-Gesamt- und Kostenhochrechnungen werden unterdrückt (PV-Vertrag); bekannte POI-Alttexte werden als Luftlinien-Näherung dargestellt, ohne Score, Kategorien oder Ampel zu verändern (POI-Vertrag). Beim Lesen werden außerdem historische Herkunftsbezeichnungen auf Rollenbezeichnungen normalisiert und die Breitbandklasse aus dem gespeicherten Downloadwert abgeleitet (auch in der gespeicherten Report-API). Diese Korrekturen schreiben den gespeicherten Snapshot nicht um. Das nicht persistierte Google-Solar-Overlay eines ursprünglichen Reports ist im Permalink und PDF nicht enthalten.

Sicherheits-/Aufbewahrungslogik:

  • Permalink-ID: zufällig, ≥ 128 Bit (nicht erratbar/zählbar).
  • Aufbewahrung: Anonyme Reports laufen nach 90 Tagen ab; in einem Konto gespeicherte Reports bleiben dauerhaft erhalten (abrufbar unter „Meine Reports“).
  • Datensparsamkeit: statt IP wird nur ein pseudonymer Hash gespeichert.

Viewer-Kompatibilität

Mehrseitige Free- und Premium-PDFs werden im lokalen Job pdf_poppler von npm run check:local vollständig mit beiden Poppler-Backends gerendert. Dafür muss Poppler lokal installiert sein; fehlt es, meldet der Lauf den Job als übersprungen. Die GitHub-CI ist seit 5. Oktober 2026 absichtlich ausgeschaltet; datierte CI-Nachweise unten dokumentieren frühere Läufe. Jede physische Seite muss einen weißen Hintergrund behalten; schwarze oder unerwartet leere Seiten lassen die Prüfung scheitern. Dafür muss jede erwartete Seite mehrere seitenspezifische Body-Marker enthalten und im um Kopf, Fuß und Rand beschnittenen Seitenkörper sichtbar bedruckt sein; wiederholte Kopf- und Fußzeilen oder unsichtbare Textobjekte reichen nicht. Textauswahl, Links, Metadaten, Dokumentensprache und die Folge „Seite X / Y“ werden gemeinsam geprüft.

Der produktive Stand ist zusätzlich über alle Seiten in Chromium/PDFium und Apple Vorschau verifiziert. Der Produktionsnachweis nennt Viewer-Versionen, Seitenzahlen, Hashes, CI- und Deployment-Bindung. Diese Viewer-Härtung ist noch keine vollständige PDF/UA-Zertifizierung; der semantische Barrierefreiheitsausbau bleibt in #333 getrennt offen.

Barrierefreiheit: aktueller Stand

Die Textschicht ist auswählbar, das Dokument trägt de-AT, Metadaten und eine Outline, und Links bleiben als Linkobjekte erhalten. Das verbessert Zugang und Navigation, ist aber keine PDF/UA-Zusage: Der aktuelle React-PDF-Output besitzt noch keinen nachgewiesenen vollständigen Tag-Baum für Überschriften, Absätze, Listen und Tabellen. Karten-Alternativtexte, Artefaktmarkierung des wiederkehrenden Seiten-Chrome und die Lesereihenfolge mit Screenreader sind ebenfalls noch nicht vollständig abgenommen.

ADR-0059 bereitet deshalb zunächst einen synthetischen PDF/UA-1-Machbarkeitstest mit unabhängiger Validatorprüfung und einer negativen React-PDF-Gegenprobe vor. Dieser Slice verwendet nur erfundene Daten und verändert den Produktionsrenderer nicht. Der lokale Validatorlauf ist auf Commit dbd46f3c3a94 bestanden; Linux-CI-Lauf 32951907614 bestätigte den Vertrag mit 106/106 Regeln und 4.645/4.645 Checks, trennscharfer React-PDF-Gegenprobe und ohne veröffentlichte PDF-Datei. Slice A ist damit abgeschlossen. Der Evidenzstand ist im Machbarkeitsnachweis dokumentiert.

ADR-0060 setzt Slice B als ausschließlich internen Vercel-Preview-Shadow um. Er verwendet pdfkit@0.20.1 in reinem Node.js; Stock @sparticuz/chromium wurde wegen des fehlenden belastbaren Tagged-PDF-Buildpfads verworfen. POST /api/internal/pdf-ua-shadow/[tier] akzeptiert nur free, standard, premium und planer, nur bei VERCEL_ENV=preview und ohne Query oder Body. Produktion, Development, die unterstützten Nicht-POST-Methoden und ungültige Tiers erhalten absichtlich 404; andere framework- oder proxyseitig behandelte Methoden können schon vor dem Handler einen abweichenden 4xx liefern. Vercel Deployment Protection bildet die äußere Schranke; ein neuer Shadow-Token ist nicht vorgesehen. Die Route liegt außerhalb der Auth.js-Hülle, liest keine App-Sitzung und setzt auf den PDFs keine Auth.js-CSRF-/Callback-Cookies.

Alle Inhalte sind fest und erfunden. Der Pfad liest weder Reportdaten noch Datenbank, Session oder Provider, verarbeitet keine PII und führt keinen Netzwerkaufruf aus. Jeder Tier-Output besitzt exakt fünf Seiten, zwei informative Figuren mit Alternativtext und zwei Links. Standard/Premium enthalten feste Szenario-Narrative, Premium/Planer einen festen synthetischen Google-Solar-Block. Der veraPDF-/Poppler-Lauf ist für alle vier Tiers lokal, in CI und im geschützten Preview grün. Commit, CI- und Preview-IDs sind im Slice-B-Nachweis gebunden; der absichtliche Produktions-404 ist für alle vier Tier-POSTs und einen GET auf dem exakten Merge-SHA belegt. Der öffentliche React-PDF-Pfad blieb auf demselben Stand unverändert und ist weiterhin nicht als PDF/UA getaggt.

ADR-0061 führt darauf aufbauend Slice C ein. Der Preview-Shadow erhält jetzt vier repository-fixierte, erfundene Objekte des tatsächlich deployten Report-Typs. Ein fail-closed Mapper übernimmt nur die freigegebenen Tier-, Zeit-, Flächen-, Risiko-, Szenario-, Förder- und Solarfelder. Adresse, Koordinate, Kataster-, Quellen-, Disclaimer- und Provider-Rohfelder erscheinen nicht in der PDF-View. Der Slice-C-Nachweis besteht für alle vier Tiers lokal und im geschützten Preview mit veraPDF und beiden Poppler-Backends; Commit, Deployment, Header, Request-IDs und negative Pfade sind gebunden. Route und Produktionstrennung bleiben unverändert; die Preview-Antwort ist als slice-c-1 gekennzeichnet.

PR #537 wurde als 59036df7aca8a70025efcbf8f0d8dd467700cb9c gemergt. Produktionsdeployment dpl_FbKhtfArLz6wnDTAaRn3aq1bVJh9 bestätigte für alle vier Tier-POSTs und einen GET leere private 404-Antworten; der Shadow ist damit weiterhin keine öffentliche Produktfunktion.

Auch dieser bestandene Shadow ist erst die Grundlage für die weiterhin offene vollständige Realreport-, Viewer-, Rollout-, Live- und Screenreader-Abnahme, nicht deren Ersatz. Der öffentliche React-PDF-Pfad bleibt unverändert und Issue #333 bleibt offen.

ADR-0062 führt Slice D als repräsentativ vollständigen synthetischen Reportvertrag ein. Exakt 31 geordnete Sektionen decken Lage, Umwelt, Restriktionen und Governance ab. Drei informative Figures beziehen ihre Alternativtexte aus Fixture-ID und Fläche, vier gemappten Risikobereichen sowie allen sechs Szenariokosten. Der achtseitige Vertrag mit zwei Links und 16 Pagination-Artefakten besteht lokal für alle vier Tiers mit veraPDF und beiden Poppler-Backends.

Der Slice-D-Nachweis bindet die lokale Prüfung, den geschützten Preview dpl_Ew4nDGJZYUX9fRyiNSuqSz8FFutU, CI, Merge-Commit 056eafb0eddd0ec6369f71db65862f37b788b152 und Produktionsdeployment dpl_2bsKrqhys1CuRFQV6QUV6HiSJghg. Die Route bleibt Preview-only und ohne DB-, Session-, Provider-, Adress-, Koordinaten- oder Netzwerkzugriff; erfolgreiche Preview-Antworten sind als slice-d-1 gekennzeichnet, während alle vier Tier-POSTs und ein GET in Produktion leer 404 antworten. Der öffentliche React-PDF-Pfad bleibt unverändert. Echte gespeicherte Reports, Viewerregression, kontrollierter Produktrollout, Live-Readback und manuelle Screenreader-Abnahme bleiben offen.

ADR-0063 bindet Slice E an den tatsächlichen Store-Vertrag: Alle vier synthetischen Tiers werden mit den exakten saveReport()- und getReport()-SQL-Abfragen als PostgreSQL-jsonb gespeichert, wieder gelesen und erst danach gerendert. Das isolierte Testschema wird nach dem Lauf entfernt. Die Prüfung belegt zugleich, dass Google-Solar- Rohdaten nicht persistiert werden und Report-ID, Adresse, Eigentümer-ID sowie exakter Opt-in-Zeitpunkt die Renderer-View nicht erreichen.

Der Slice-E-Nachweis bindet lokale Tests, PostgreSQL-Roundtrip, veraPDF, Poppler und den visuellen Achtseiten-Readback. Der Preview-Shadow selbst liest keine Datenbank, sondern eine repository-fixierte persistenznormalisierte Kopie; erfolgreiche Antworten tragen slice-e-1. Der öffentliche React-PDF-Pfad bleibt unverändert. Karten-/Viewerregression, kontrollierter Produktrollout, PDF/UA-Live-Readback und manuelle Screenreader-Abnahme bleiben offen.

PR #541, CI-Lauf 33163812578 und der geschützte Preview dpl_AejPoE9E4Joeh9J1ireiHZdKz7k7 belegen den Vier-Tier-Vertrag. Merge-SHA f5d57d9ac0b4c57a576fa64b9fbddbff49ef8726 und Produktionsdeployment dpl_GqMcWA5uHvML97ZrciT4dkzPKoQD halten die interne Route für alle vier Tier-POSTs und einen GET leer 404; dies aktiviert keinen öffentlichen PDF/UA-Pfad.

ADR-0064 ergänzt Slice F als automatisierten lokalen Apple-Viewercheck. Apple PDFKit liest alle vier synthetischen slice-e-1-Dateien mit je acht Seiten, zwei Linkannotationen und seitenspezifischer Textschicht. Quartz rendert alle 32 Seiten in Graustufen und wendet dieselben Grenzen für helle Ränder, Helligkeit, Schwarzflächen und sichtbaren Body-Ink wie der Poppler-Vertrag an.

Der Slice-F-Nachweis belegt lokal 32/32 Seiten auf macOS 26.6.2 mit Swift 6.3.3. PR #543, CI-Lauf 33166935667 und Preview dpl_5NCcXGThbbpocRGCsfhS2VsZMg5H belegen auch den Apple-Readback aller vier deployten Tiers. Merge-SHA e998d3e42886adef491eb489f5c8a874aca652a3 und Produktionsdeployment dpl_D4fhMzmmwCDvhGrTcAN3Mm3TMcEL halten die interne Route für vier Tier-POSTs und einen GET leer 404.

Die nachgelagerte manuelle Abnahme vom 4. September 2026 prüfte die exakt SHA-256-gebundene synthetische Premium-Preview-Datei mit Apple Vorschau 11.0 und aktivem VoiceOver. Alle acht Seiten waren vollständig sichtbar und per Tastatur erreichbar; Überschriften, Tabellen, Listen, drei beschriebene Abbildungen und zwei benannte Links wurden nativ exponiert. VoiceOver wurde danach wieder ausgeschaltet.

Der öffentliche React-PDF-Pfad bleibt unverändert. Chrome/PDFium-Tag-Semantik, echte Karten, kontrollierter Rollout und PDF/UA-Live-Readback eines echten Nutzerreports bleiben offen.

Der Implementierungsstand wurde mit PR #532 als Merge-Commit e39272c56134bfbe4c9f3b7789e872baa88706e8 übernommen. Main-CI-Lauf 32954309960 und Vercel-Produktionsdeployment dpl_27B3QDZtKAyT7kEi3xe1rFWk1qWB sind daran gebunden; Entscheidung, Machbarkeitsnachweis, Report-Output-Vertrag und diese Feature-Seite wurden auf www.landnutzen.at mit HTTP 200 und der weiterhin offenen Produktgrenze rückgelesen.

Grenzen & Ehrlichkeit

  • Ein Permalink ist eine Momentaufnahme der Datenlage zum Erstellungszeitpunkt — Quellen können sich später ändern.
  • Nach Ablauf der 90 Tage ist der Link anonymer Reports nicht mehr abrufbar; konto-gebundene Reports bleiben erreichbar.

Chrome/PDFium-Viewerregression (#333, Slice G)

Slice G ergänzt den echten Chrome/PDFium-Viewer für vier synthetische Tiers mit je acht Seiten. Der gepinnte Chrome for Testing 148.0.7778.96 prüft vollständige A4-Seiten, seitenspezifischen Text und benannte Links. Darstellung und Tag-Semantik sind getrennte Gates: Im Standardviewer fehlen Tabellen-, Listen- und Bildrollen. Ein grüner Darstellungscheck ist deshalb keine vollständige Chrome-Barrierefreiheitsabnahme.

Der öffentliche React-PDF-Pfad bleibt unverändert, der Shadow bleibt slice-e-1 und Preview-only. Chrome-Tag-Semantik, echte Karteninhalte, kontrollierter Produktrollout und PDF/UA-Live-Readback eines echten Nutzerreports bleiben offen; Issue #333 bleibt offen. Vertrag und verifizierter Release-Stand: Slice-G-Entscheidung und Slice-G-Nachweis.

Slice G wurde über PR #548 produktiv ausgeliefert: Merge 8ccc9fe28236c894bee69de5502ff11b98c592c0, Deployment dpl_Y8GsNSbTzn5swXMfVsxU7Zt5QRiw, Main-CI 33914599076. Lokal, im Linux-CI und mit den deployten Preview-Dateien bestanden 32/32 Chrome/PDFium-Seiten; sechs Dokuportalseiten und die geschlossene Shadow-Produktionsgrenze wurden live rückgelesen. Die Chrome-Tag-Semantik bleibt ausdrücklich nicht abgenommen. Der Slice-G-Nachweis enthält die commitgebundenen Prüfergebnisse.

PDF/UA-Parzellengeometrie (#550, Slice H)

Slice H ersetzt die feste Grundstücksskizze im geschützten synthetischen Shadow durch validierte Polygon-/MultiPolygon-Vektoren. Der optionale interne Eingang bindet den bestehenden pdf_parcel_outline-Export an den Reporthash und Public-/Export-Release. Rechte, Coverage, Frische und Consumerbindung bleiben Voraussetzung. Fehlende oder abgelehnte Geometrie erzeugt einen Absatz statt einer Figure; Innenringe werden sichtbar als nicht unterstützt abgelehnt. Alt-Text, hervorgehobener Treffer, Nachbarn, Nordrichtung sowie Herkunft und Lizenz folgen dem tatsächlichen Eingang.

Der positive Slice-H-Previewbeleg bleibt ausdrücklich synthetisch. Der damalige fehlende echte Geometriebeleg wird im getrennten Slice I weitergeführt; dessen aktueller Abnahmestand steht im verlinkten Slice-I-Nachweis. Chrome-Tag-Semantik, weitere Karten, Produktrollout und echter PDF/UA- Nutzerreport bleiben offen; #333 bleibt offen. Der öffentliche Renderer bleibt React-PDF. Slice-H-Vertrag und Slice-H-Nachweis trennen lokale Implementierung, CI/Preview, Produktion und Live-Readback.

PDF/UA: echte interne Parzellenreferenz (#553, Slice I)

Slice I ergänzt einen festen internen QA-Einstieg für den vorhandenen anonymen Schul-Referenzreport aus dem DXF-Produktionsnachweis. Ein enger lesender Selektor, getReport, die atomaren pdf_parcel_outline-Gates und wiederholte Report-/ Quellenprüfung binden genau eine Zielparzelle an die finalisierte PDF/UA-Figure. Es gibt keine neue HTTP-Route und keine frei wählbaren Report- oder Geometrieeingaben.

Der eigene QA-Mapper bewahrt die echte Reportidentität. Zielparzelle, Schuladresse, gespeicherte DKM-Fläche und BEV-Herkunft sind real; alle übrigen Prüfbestandteile bleiben sichtbar synthetisch. Die vorhandene Kartenadapter-Vereinfachung von 23 Originalstützpunkten auf neun Koordinaten ist von der unveränderten Auswahl und metrischen Projektion getrennt mit Hashes belegt. Innenringe der Zielparzelle, Mehrdeutigkeit sowie negative Rechte-/Release-/Coverage-/Quality-/Freshness-/ Quarantänegates bleiben gesperrt. Das H-Chrome-Profil 20/7/6/3/2 bleibt erhalten; I hat ein eigenes semantisches 20/7/6/3/4-Profil.

Die echte interne Referenz ist auf Merge 5609b182db810983e0240eacbab5cfce2eb9ac5a mit aktueller Produktionsquelle lesend geprüft. PR #554, der gebaute Preview und zwölf schreibfreie Produktionschecks sind bestanden. Die vollständige Main-CI 33953550809 ist grün. READY-Deployment dpl_FDEorR7WyuagkPvSw281WnREWSXB und getrennte CLI-/HTTP-Belege stehen im Slice-I-Nachweis. Die reale I-PDF wurde intern erzeugt; die HTTP-Prüfung bestätigt Dokumentation und Produktionssperre des synthetischen H-Shadows. ADR-0067 dokumentiert Vertrag und Abnahmetests. Chrome-Tag-Semantik, weitere echte Karten, öffentlicher PDF/UA-Rollout und echter PDF/UA-Nutzerreport bleiben offen; #333 bleibt offen. Öffentlicher React-PDF-Pfad und synthetischer Preview bleiben erhalten. Es wurde kein neuer Report angelegt.

Nachtrag 30. September 2026: Nach der BEV-Erneuerung vom 29. September 2026 liefert der Adapter für den ursprünglichen Referenzreport keine Geometrie mehr, weil Exporte releasegebunden sind. Die Referenz-QA wurde deshalb auf einen neuen anonymen Referenzreport derselben Adresse neu gebunden (ADR-0067, Nachtrag vom 30. September 2026); der anschließende lesende Produktionslauf bestand vollständig. Die Chrome-Tag-Semantik bleibt offen. Der anonyme Referenzreport läuft nach 90 Tagen ab (29. Dezember 2026); danach und nach jeder Neuqualifizierung des BEV-Public- oder -Exportkanals ist neu zu binden.