# Testkonzept: Verfahrensgebiet aus Shape laden Plugin: `sn_verfahrensgebiet` · Stand: 04.09.2026 · Pflege: bei jeder Änderung an diesem Ablauf Beispielseite nach [`../vorlagen/testkonzept.md`](../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`](../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 ```mermaid flowchart TD A["1 Anwender wählt ZIP oder SHP"] --> B["2 ZIP entpacken,
alle .shp darin finden"] B --> C["3 Jede Datei als Layer laden
und auf Gültigkeit prüfen"] C --> D{"4 Feld FBSchl
vorhanden und bekannt?"} D -->|"901/10110F"| E["Neuordnungsgebiet"] D -->|"901/10120F"| F["Neuvermessungsgebiet"] D -->|"fehlt / unbekannt"| G["Datei überspringen,
Fehler sammeln"] E --> H["5 Flächen desselben Typs
zu einem Layer verschmelzen"] F --> H G --> H H --> I["6 ALKIS-Flurstücke laden,
Flächen vergleichen"] I --> J{"7 Flächen gleich?"} J -->|ja| K["Hinweis: stimmt überein"] J -->|nein| L["Nachfrage:
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.