Files
Projektwissen/docs/tests/verfahrensgebiet-shape-import.md
T
AndreasTharangandClaude Sonnet 5 ab416fb34c Projektwissen: Git-Vorgaben, Ticketzugriff, Tests und Einstieg
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>
2026-09-04 11:57:26 +02:00

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/unstable geprüft, nicht nur gegen den lokalen Klon. Das ist der Zweck dieser Seite.