# Deutsche PLZ-/Ortsvorschläge

Diese abgeleitete Datenbank steht unter der Open Database License (ODbL) 1.0.
© OpenStreetMap contributors; Quelle: OpenPLZ / OpenPotato.

- Datenbank zum Herunterladen: [places.json](./places.json)
- Vollständige Lizenz: [LICENSE.txt](./LICENSE.txt)
- OpenStreetMap: https://www.openstreetmap.org/copyright
- Quelle und Verfahren: https://www.openplzapi.org/de/sources/
- Gepinnte Quelldatei: https://raw.githubusercontent.com/openpotato/openplzapi.data/c26389b30573ab2738d0b14fd350f143aa0a1251/src/de/osm/streets.updated.csv
- Quellcommit: c26389b30573ab2738d0b14fd350f143aa0a1251 (22.11.2025).
- OpenPLZ nennt für das Straßenverzeichnis den Stand 10.11.2025 und für das Gemeindeverzeichnis 28.10.2025: https://www.openplzapi.org/de/change-log-data/
- Importiert/geprüft: 25.09.2026. Kein laufender API-Abruf.
- Am Prüftag wurden der aktuelle `main`-Tree und die Commit-Historie dieser CSV über die GitHub-API abgefragt. Diese Quelle enthielt keinen neueren Snapshot; der oben genannte Stand ist etwa zehn Monate alt.
- SHA-256 der Quelldatei: 1066a96a6b3a16629a94c834fca49fe58a2bb01558e17242c53a12d68b290088

## Inhalt und Grenzen

Aus 1.201.689 Straßenzeilen wurden Straße und Geometrie vollständig entfernt.
12.819 Datensätze enthalten jeweils `[PLZ, Gemeindename, Gemeindeschlüssel, Ortsteil-Suchnamen]`.
Enthalten sind 8.159 unterschiedliche PLZ, 10.712 Gemeindeschlüssel und 14.784 zugeordnete Suchnamen
(mehrfach vorkommende Namen über verschiedene PLZ werden mehrfach gezählt).
PLZ bleiben Zeichenketten mit führenden Nullen. Mehrere PLZ pro Gemeinde und mehrere Gemeinden
pro PLZ bleiben separate Datensätze. Ortsteile stammen ausschließlich aus derselben PLZ-Gemeinde-Gruppe.
Bei Auswahl eines Ortsteiltreffers wird PLZ + Gemeinde gespeichert; der Ortsteil ist eine Suchhilfe.

Dies ist keine amtliche oder vollständige postalische Zustellprüfung. OpenPLZ leitet die Zuordnungen
geografisch aus OSM-Straßen und Verwaltungsgebieten ab; Grenzen, Namen und Aktualität können abweichen.
Postfach-/Großempfänger-PLZ werden nicht zugesichert. Nichtdeutsche Orte werden nicht vorgeschlagen.
Freie Eingabe, auch für abweichende oder ausländische Angaben, und ein leeres Feld bleiben möglich.

## Reproduzierbarkeit und Aktualisierung

Das Repository-Skript `scripts/import-postal-de.py` verarbeitet die heruntergeladene CSV mit der
Python-Standardbibliothek. `python3 scripts/import-postal-de.py /path/to/streets.updated.csv`
prüft zuerst die Quellprüfsumme, validiert jede Zeile und erzeugt deterministisch `places.json`.
Die Quelldatei muss nicht mit der Anwendung ausgeliefert werden: die vollständige abgeleitete
Datenbank und ihre Lizenz sind öffentlich unter `/data/postal-de/` verfügbar.

Vor jeder neuen Kursfreigabe, ansonsten halbjährlich, sollte die Wartung den OpenPLZ-Datenstand
prüfen. Es ist kein automatischer Aktualisierungsjob eingerichtet. Bei einem neuen Snapshot zuerst
Commit, Lizenz und Änderungshistorie prüfen; danach Prüfsumme im Importskript bewusst aktualisieren,
neu importieren, Änderungen an Anzahl/Zuordnungen (insbesondere weggefallene PLZ) vergleichen,
Lookup-Tests und Browserprüfung durchführen und Datenstand/Prüfsummen hier aktualisieren.
Ein Anwendungsbuild oder Neustart verändert die Daten nicht.
