Erster Stand des Repositories AG_QGIS/Projektwissen (bisher Arbeitstitel "Workspace", ADR 0006). Der lokale Ordner heisst weiter AG_QGIS, weil darin auch die Plugin-Klone liegen. Git verbindlich (ADR 0007), aus dem bisherigen Wiki-Konzept entwickelt: - docs/leitfaden/05_git_arbeitsweise.md mit Kanal-Kette, Branch-Namen und Gitea-Branch-Schutz. - Der Einstiegspunkt eines Fixes richtet sich nach dem Kanal, in dem der Fehler sitzt; ein Fix an testing oder stable ist erst mit der Rueckfuehrung nach unten abgeschlossen. Das fehlte bisher. - Der stabile Kanal heisst stable, nicht main: der Release-Workflow in Repository:hidden/workflows fuehrt git checkout "$CHANNEL" aus, der Branchname muss also dem Kanalnamen entsprechen. Er existiert in keinem Plugin-Repo und ist vom Maintainer anzulegen. - Der Mensch drueckt ab: .claude/settings.json sperrt push, merge, tag. - scripts/hallo.py und /hallo holen den Stand aller Klone, per Fast-Forward wo gefahrlos; nie mergen, stashen oder verwerfen. Ticketzugriff: - scripts/gitea.py liest Issues, Kommentare und PRs ueber die oeffentliche API, ohne Token, nur GET. Schreibendes nur als Entwurf in entwuerfe/. - Skill sn-ticket. Tests (ADR 0009): - docs/leitfaden/06_tests.md: Testebenen, Testpflicht, und wie eine Fachperson beurteilt, ob Tests fachlich sinnvoll sind. - scripts/testkatalog.py erzeugt docs/tests/testkatalog.md per ast-Parsing, ohne Import und ohne QGIS. Befund: nur 100 von 332 Tests haben einen Docstring, sn_basis keinen einzigen von 87. - Vorlage und erste Testkonzept-Seite mit Mermaid. Dabei gefunden und gegen origin geprueft: _ermittle_gebietstyp_aus_fbschl hat keinen Test, obwohl PR #44/#45 genau diese Funktion tolerant gemacht hat. - docs/konzept/07_qgis_tests_plan.md: Stufenplan fuer Tests gegen echtes QGIS. Dabei aufgefallen: QGIS 3.40 ist seit Januar 2026 End of Life, qgis_min steht aber noch darauf. Werkzeuge (ADR 0008): - 04_werkzeuge_einrichten.md nur noch Claude Code als CLI und in VS Code. - .vscode/ entfernt, brauchbare Einstellungen als persoenliche Vorlage. Ausserdem: README als Einstieg neu aufgebaut, Mermaid-Diagramm in schnittstellen.md repariert (unmaskierte Klammern, rendert seither nicht). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6.8 KiB
Testkonzept: Verfahrensgebiet aus Shape laden
Plugin: sn_verfahrensgebiet · Stand: 04.09.2026 · Pflege: bei jeder Änderung an diesem Ablauf
Beispielseite nach ../vorlagen/testkonzept.md. Sie zeigt, wie eine Fachperson
ohne Blick in den Quelltext beurteilen kann, ob die Tests das Richtige prüfen —
siehe ../leitfaden/06_tests.md Abschnitt 7.
Worum es fachlich geht
Ein Verfahrensgebiet liegt als Shape-Export aus NoBIS bzw. DAVID vor, meist als ZIP-Datei. Der Anwender wählt
diese Datei aus; das Plugin liest daraus das Neuordnungs- und/oder Neuvermessungsgebiet ein, gleicht die Fläche
mit den ALKIS-Flurstücken ab und meldet Abweichungen. Eine ZIP-Datei kann mehrere Shapefile-Sätze enthalten —
je einen für Neuordnungs- und Neuvermessungsgebiet. Welcher Satz was ist, entscheidet der Wert im Feld FBSchl.
Wenn dieser Schritt schiefgeht, arbeitet das gesamte weitere Verfahren auf einem falschen Gebiet.
Der Ablauf
flowchart TD
A["1 Anwender wählt ZIP oder SHP"] --> B["2 ZIP entpacken,<br/>alle .shp darin finden"]
B --> C["3 Jede Datei als Layer laden<br/>und auf Gültigkeit prüfen"]
C --> D{"4 Feld FBSchl<br/>vorhanden und bekannt?"}
D -->|"901/10110F"| E["Neuordnungsgebiet"]
D -->|"901/10120F"| F["Neuvermessungsgebiet"]
D -->|"fehlt / unbekannt"| G["Datei überspringen,<br/>Fehler sammeln"]
E --> H["5 Flächen desselben Typs<br/>zu einem Layer verschmelzen"]
F --> H
G --> H
H --> I["6 ALKIS-Flurstücke laden,<br/>Flächen vergleichen"]
I --> J{"7 Flächen gleich?"}
J -->|ja| K["Hinweis: stimmt überein"]
J -->|nein| L["Nachfrage:<br/>Detailprüfung oder abbrechen"]
L --> M["8 Knickpunktprüfung"]
K --> N["9 Layer bleibt im Projekt"]
M --> N
style D fill:#fff4e6,stroke:#d9822b
style G fill:#ffe9e9,stroke:#d94b2b
Was geprüft wird
Alle Tests liegen in Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_shape_komplett.py.
| # | Schritt | Wird geprüft durch | Ebene |
|---|---|---|---|
| 1 | Auswahl abgebrochen | test_dialog_abgebrochen_gibt_none_zurueck |
Mock |
| 2 | ZIP nicht entpackbar | test_zip_fehler_gibt_none_und_warning |
Mock |
| 2 | Kein .shp im ZIP |
test_kein_shp_in_zip_gibt_none_und_warning |
Mock |
| 2 | .shp im Wurzel- bzw. Unterordner finden |
test_findet_shp_in_root, test_findet_shp_in_unterordner |
Mock |
| 2 | Groß-/Kleinschreibung der Dateiendung | test_case_insensitive_erkennung |
Mock |
| 3 | Layer ungültig | test_invalider_qgslayer_gibt_none_und_warning |
Mock |
| 3 | Keine Features / leere Geometrien | test_keine_features_gibt_none, test_leere_geometrien_geben_none |
Mock |
| 4 | Feld FBSchl auswerten |
— keiner | — |
| 5 | Verschmelzen zum Einzel-Feature, Attribute übernehmen | test_attribute_von_erstem_feature_werden_gesetzt, test_erfolg_gibt_memory_layer_zurueck |
Mock |
| 6 | ALKIS liefert nichts / keine Auswahl | test_flst_none_aborts, test_keine_flurstuecke_selektiert_gibt_warning |
Mock |
| 7 | Flächen stimmen überein | test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog |
Mock |
| 7 | Abweichung, Anwender bricht ab | test_abweichung_abbrechen_gibt_shape_vg_zurueck |
Mock |
| 8 | Abweichung, Detailprüfung | test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf |
Mock |
| 8 | PunktortTA nicht verfügbar | test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler |
Mock |
| 9 | Layer bleibt bei Erfolg, verschwindet bei Abbruch | test_shape_vg_bleibt_im_projekt_bei_erfolg, test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt |
Mock |
| 9 | Temporärer Layer wird immer entfernt | test_temp_layer_wird_stets_entfernt |
Mock |
| — | Sieht das Ergebnis in QGIS richtig aus? | manueller Test | manuell |
Ebene: Mock (ohne QGIS, Sekunden) · QGIS (gegen echtes QGIS) · manuell (Mensch in QGIS).
Zusätzlich ist das Zusammenspiel mit dem BROR-Layer (Bau-, Raum- oder Bodenordnungsrecht) abgedeckt, wenn eine
VKZ gesetzt ist: test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt,
test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt, test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer,
test_fallback_auf_temp_enriched_wenn_bror_ladeversagen.
Fachliche Sonderfälle
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|---|---|---|
| ZIP enthält mehrere Shapefile-Sätze | Export mit Neuordnungs- und Neuvermessungsgebiet | — |
| Eine von mehreren Dateien im ZIP ist fehlerhaft | gemischte Exporte; die übrigen sollen trotzdem verarbeitet werden | — |
Feldname FBSchl. mit Punkt |
manche DAVID-Exporte | — |
| Feldname in abweichender Groß-/Kleinschreibung | ältere Exporte | — |
Feld FBSchl fehlt ganz |
Shape ist gar kein Verfahrensgebiet | — |
Unbekannter Wert in FBSchl |
neuer Schlüssel, den wir noch nicht kennen | — |
ZIP nicht entpackbar, kein .shp enthalten |
beschädigter oder falscher Export | ja (siehe Tabelle oben) |
| Fläche weicht von ALKIS ab | Regelfall bei Grenzänderungen | ja |
Bewusst nicht getestet
| Was | Warum | Wie stattdessen abgesichert |
|---|---|---|
Geometrisches Verschmelzen (unaryUnion) |
QGIS-Funktion, nicht unser Code; im Mock-Modus gibt es keine echte Geometrie | manueller Test in QGIS; künftig QGIS-Test (Stufe 1, ../konzept/07_qgis_tests_plan.md) |
| Aussehen und Beschriftung der Dialoge | nicht sinnvoll automatisiert prüfbar | manueller Test |
| Echte ALKIS-WFS-Antworten | kein Netzwerk in Tests; Dienstgrenzen siehe ../wissen/fallstricke.md |
nachgestellte Antworten im Test, plus manueller Test bei Dienständerungen |
Bekannte Lücken
| Lücke | Auswirkung | Issue |
|---|---|---|
Schritt 4 (_ermittle_gebietstyp_aus_fbschl) hat keinen einzigen Test — weder für die gültigen Werte 901/10110F und 901/10120F, noch für fehlendes Feld, unbekannten Wert, FBSchl. mit Punkt oder abweichende Groß-/Kleinschreibung |
Ein Shape wird stillschweigend dem falschen Gebietstyp zugeordnet oder grundlos abgewiesen. Genau dieser Fall war Gegenstand von PR #44/#45 — die tolerante Feldsuche wurde eingebaut, aber nie durch einen Test abgesichert. | anzulegen |
| Mehrere Shapefile-Sätze in einer ZIP-Datei werden nicht als Fall getestet | Der dokumentierte Hauptzweck der Mehrfachverarbeitung ist ungeprüft; ein Regressionsfehler bliebe unbemerkt | anzulegen |
| Fehlersammlung über mehrere Dateien (eine fehlerhafte Datei bricht die übrigen nicht ab) ist nicht getestet | Ein Export mit einer defekten Datei könnte komplett abgewiesen werden, statt die guten Dateien zu verarbeiten | anzulegen |
Diese drei Lücken wurden am 04.09.2026 beim Erstellen dieser Seite gefunden — durch den bloßen Abgleich des fachlichen Ablaufs mit der Testliste. Sie sind gegen
origin/unstablegeprüft, nicht nur gegen den lokalen Klon. Das ist der Zweck dieser Seite.