Anzeige für den Eigentümer und Korrekturen (Verfahrensgebiet #56) dokumentiert

Testkonzept docs/tests/verfahrensgebiet-eigentuemer-anzeige.md,
Fallstricke (Korrektur-CSV mit Personendaten, Fenster auf bestimmtem
Bildschirm öffnen), Modulkarte und Testkatalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-06 13:27:15 +02:00
co-authored by Claude Opus 5.5
parent 9046f929f7
commit 5e87f2367e
6 changed files with 302 additions and 30 deletions
+6 -3
View File
@@ -86,8 +86,10 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
| `main.py` | 80 | `Verfahrensgebiet`: registriert Action (Priorität 10), erzeugt `DockWidget` mit `Pruefmanager` und `DataGrabber` |
| `ui/dockwidget.py` | 60 | Tabs `WorkingTab`, `EigentuemerTab`, `PrintTab`, `SettingsTab`; injiziert Services per `set_services()` |
| `ui/tabs/working_tab.py` ⚠ | 820 | Tab „Bearbeitung“: Buttons und Handler für ALKIS/Shape laden, Gemarkungen, Flurstücke, Grenzpunkte, Beteiligung, Statistik; hält viel Ablauflogik |
| `ui/tabs/eigentuemer_tab.py` | 211 | Tab „Eigentümer“ (#56): Flurstückssuche (Treffer auswählen und hinzoomen) und Eigentümersuche (Eigentümerdatei wählen, Trefferliste öffnen) |
| `ui/eigentuemer_treffer.py` | 67 | Nicht modale Trefferliste der Eigentümersuche mit Mehrfachauswahl (#56) |
| `ui/tabs/eigentuemer_tab.py` | 411 | Tab „Eigentümer“ (#56): Flurstückssuche, Eigentümersuche, Anzeige für den Eigentümer (Bildschirm, Sitzung, „Anzeige leeren“) und Korrekturen |
| `ui/eigentuemer_treffer.py` | 83 | Nicht modale Trefferliste der Eigentümersuche mit Mehrfachauswahl und „Daten anzeigen“ (#56) |
| `ui/eigentuemer_anzeige.py` | 178 | Anzeigefenster für den Eigentümer (nur Name, Anschrift, E-Mail; maskiertes HTML), Bildschirmwahl, Vollbild auf dem zweiten Bildschirm (#56) |
| `ui/eigentuemer_korrektur_dialog.py` | 79 | Korrekturdialog für den Bearbeiter (#56) |
| `functions/verfahrensgebiet_alkis.py` | 359 | WFS-Suche `BauRaumOderBodenordnungsrecht` per Verfahrensnummer/Landkreis, `LoadStatus` |
| `functions/verfahrensgebiet_alkis_komplett.py` ⚠ | 661 | Vollständiger Ladeablauf aus ALKIS: BROR → Gemarkungen → Flurstücke → Flächenvergleich → Detailprüfung |
| `functions/verfahrensgebiet_shape_komplett.py` ⚠ | 978 | Ladeablauf aus Shape/ZIP (Mehrfachauswahl, `FBSchl`-Klassifikation, Abgleich mit BROR) – siehe `docs/aus_shape_laden_technisch.md` im Repo |
@@ -96,13 +98,14 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
| `functions/gemarkung_alkis.py` | 229 | Gemarkungen aus vereinfachtem ALKIS-WFS |
| `functions/flurstueck_alkis.py` | 259 | Flurstücke je Gemarkung aus ALKIS-SF-WFS (BBOX, Batches) |
| `functions/flurstueck_suche.py` | 175 | Flurstückssuche im Layer „Flurstücke“ über das `flurstueckskennzeichen`; Gemarkungsname über Layer „Gemarkungen“ |
| `functions/eigentuemer_korrektur.py` | 128 | Korrekturen ermitteln und an `<Eigentümerdatei>_korrekturen.csv` anhängen; Pfad aus der Layerquelle; Qt-frei (#56) |
| `functions/eigentuemer_suche.py` | 225 | Eigentümersuche im CSV-Layer (Serienbriefexport): Layer erkennen, Name/Vorname suchen, gleiche Personen mit gleicher Anschrift zusammenfassen; Qt-frei |
| `functions/grenzpunkt_alkis.py` ⚠ | 1 674 | Grenzpunkte/`PunktortTA` gemarkungsweise, GML-Parsing, URL-sichere Batches |
| `functions/knickpunkt_pruefung.py` ⚠ | 810 | Knickpunktbasierte BROR-Prüfung, Ergebnislayer mit Kategorien |
| `functions/umringspruefung.py` | 312 | Umringsprüfung (Variante 1) |
| `functions/umringstatistik_grenzpunkte.py` | 374 | Statistik Grenzpunkte am Umring |
| `functions/beteiligung_pruefung.py` | 453 | Abgleich BI-Server-CSV mit ALKIS-Flurstücken |
| `tests/` | 16 Dateien | Mock-Modus, aktuell 157/201 grün (Baseline) |
| `tests/` | 18 Dateien | Mock-Modus, aktuell 157/201 grün (Baseline) |
| `docs/` | 3 Dateien | Ablaufdiagramme (Mermaid) für ALKIS- und Shape-Laden |
| `styles/` | 6 QML | BROR, Gemarkungen, Beteiligung, Verfahrensgebiet |
File diff suppressed because one or more lines are too long
+76 -9
View File
@@ -9,17 +9,17 @@ selbst (Docstrings) und aus der Testbaseline.
Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
Gesamt: 3 Pakete, 64 Testdateien, 783 Testfälle – 740 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 638 von 783 (81 %).
Gesamt: 3 Pakete, 66 Testdateien, 822 Testfälle – 779 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 677 von 822 (82 %).
## Zusammenfassung
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `sn_basis` | 43 | 490 | 490 | 0 | 0 | 490 von 490 (100 %) |
| `sn_verfahrensgebiet` | 16 | 249 | 207 | 34 | 8 | 147 von 249 (59 %) |
| `sn_verfahrensgebiet` | 18 | 288 | 246 | 34 | 8 | 186 von 288 (65 %) |
| `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) |
| **Summe** | **64** | **783** | **740** | **35** | **8** | **638 von 783 (81 %)** |
| **Summe** | **66** | **822** | **779** | **35** | **8** | **677 von 822 (82 %)** |
### Legende
@@ -1071,7 +1071,7 @@ Testgruppen:
## Paket `sn_verfahrensgebiet`
Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 16 Testdateien mit 249 Testfällen (207 grün, 34 rot, 8 übersprungen).
Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 18 Testdateien mit 288 Testfällen (246 grün, 34 rot, 8 übersprungen).
### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py`
@@ -1128,6 +1128,55 @@ Testgruppen:
| `TestDockWidget.test_init_tabs_with_services_injects_available_services` | — (Docstring fehlt) | grün |
| `TestDockWidget.test_init_tabs_with_services_reports_errors` | — (Docstring fehlt) | grün |
### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py`
Worum es in der Datei geht: Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56).
Testgruppen:
- `TestAnzeigetext` (6 Testfälle): — (Docstring fehlt)
- `TestBildschirme` (6 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status |
| --- | --- | --- |
| `TestAnzeigetext.test_name_anschrift_email` | Prüft, dass die Anzeige Name mit Anrede und Titel, die mehrzeilige Anschrift mit Ortsteil und die E-Mail zeigt. | grün |
| `TestAnzeigetext.test_keine_internen_angaben` | Prüft, dass der Eigentümer weder Konten, Personen-IDs, Rechtsperson-Wert noch das Kennzeichen „verstorben“ sieht. | grün |
| `TestAnzeigetext.test_fehlende_email_wird_genannt` | Prüft, dass eine fehlende E-Mail ausdrücklich als „keine angegeben“ erscheint. | grün |
| `TestAnzeigetext.test_werte_werden_maskiert` | Prüft, dass Sonderzeichen aus den Daten maskiert werden und kein HTML einschleusen. | grün |
| `TestAnzeigetext.test_mehrere_eintraege_getrennt` | Prüft, dass mehrere Einträge untereinander, durch eine Linie getrennt, erscheinen. | grün |
| `TestAnzeigetext.test_leer_nur_platzhalter` | Prüft, dass die leere Anzeige nur den neutralen Platzhalter zeigt. | grün |
| `TestBildschirme.test_vorgabe_ist_nicht_der_qgis_bildschirm` | Prüft, dass als Vorgabe der erste Bildschirm ohne QGIS gewählt wird, bei nur einem Bildschirm dieser. | grün |
| `TestBildschirme.test_bildschirm_text` | Prüft, dass ein Bildschirm mit Nummer und Auflösung beschriftet wird. | grün |
| `TestBildschirme.test_ohne_qt_anwendung_keine_bildschirme` | Prüft, dass ohne Qt-Anwendung (Mock-Modus) eine leere Bildschirmliste kommt statt eines Fehlers. | grün |
| `TestBildschirme.test_vollbild_auf_gewaehltem_bildschirm` | Prüft, dass das Fenster im Vollbild dem gewählten Bildschirm zugeordnet und auf dessen Fläche gelegt wird. | grün |
| `TestBildschirme.test_normales_fenster_mittig` | Prüft, dass auf dem QGIS-Bildschirm ein normales Fenster mittig im freien Bereich öffnet. | grün |
| `TestBildschirme.test_ohne_bildschirm_einfach_zeigen` | Prüft, dass ohne bekannten Bildschirm das Fenster einfach gezeigt wird. | grün |
### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_korrektur.py`
Worum es in der Datei geht: Tests für die Korrekturen beim Eigentümer-Datenabgleich (#56).
Testgruppen:
- `TestAenderungen` (4 Testfälle): — (Docstring fehlt)
- `TestKorrekturPfad` (3 Testfälle): — (Docstring fehlt)
- `TestSchreiben` (5 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status |
| --- | --- | --- |
| `TestAenderungen.test_feldwerte` | Prüft, dass alle korrigierbaren Felder vorbelegt werden, mehrere E-Mails durch Komma getrennt. | grün |
| `TestAenderungen.test_nur_echte_aenderungen` | Prüft, dass nur geänderte Felder zählen und Leerraum am Rand oder doppelte Leerzeichen keine Änderung sind. | grün |
| `TestAenderungen.test_feld_leeren_ist_aenderung` | Prüft, dass das Leeren eines Feldes als Änderung zählt. | grün |
| `TestAenderungen.test_wende_an` | Prüft, dass die Änderungen im angezeigten Eintrag landen und E-Mails wieder getrennt werden; Konten bleiben. | grün |
| `TestKorrekturPfad.test_textdatei_provider` | Prüft, dass aus der Quelle eines Textdatei-Layers (file-URI, Leerzeichen kodiert) der Pfad neben der CSV wird. | grün |
| `TestKorrekturPfad.test_ogr_provider` | Prüft, dass auch eine OGR-Quelle mit Layernamen den Pfad neben der CSV ergibt. | grün |
| `TestKorrekturPfad.test_keine_csv` | Prüft, dass für Quellen ohne CSV-Datei kein Pfad vorgeschlagen wird. | grün |
| `TestSchreiben.test_neue_datei_mit_kopfzeile_und_bom` | Prüft, dass eine neue Korrektur-CSV mit BOM, Kopfzeile und je Änderung einer Zeile mit Exportspaltennamen entsteht. | grün |
| `TestSchreiben.test_anhaengen_ohne_zweite_kopfzeile` | Prüft, dass weitere Korrekturen angehängt werden, ohne Kopfzeile oder BOM zu wiederholen. | grün |
| `TestSchreiben.test_ohne_aenderung_keine_datei` | Prüft, dass ohne Änderung keine Datei angelegt wird. | grün |
| `TestSchreiben.test_schreibfehler_wird_weitergereicht` | Prüft, dass ein nicht schreibbarer Pfad als OSError beim Aufrufer ankommt. | grün |
| `TestSchreiben.test_schreibt_nichts_auf_die_konsole` | Prüft, dass das Festhalten von Korrekturen keine Personendaten auf die Konsole schreibt (Datenschutz). | grün |
### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_suche.py`
Worum es in der Datei geht: Tests für die Eigentümersuche im Serienbriefexport (#56).
@@ -1156,13 +1205,16 @@ Testgruppen:
### `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_tab.py`
Worum es in der Datei geht: Tests für den Tab „Eigentümer“ – Flurstückssuche und Eigentümersuche (#56).
Worum es in der Datei geht: Tests für den Tab „Eigentümer“ – Flurstückssuche, Eigentümersuche, Anzeige und Korrektur (#56).
Testgruppen:
- `TestFlurstueckSuchen` (5 Testfälle): — (Docstring fehlt)
- `TestEigentuemerSuchen` (4 Testfälle): — (Docstring fehlt)
- `TestTrefferliste` (2 Testfälle): — (Docstring fehlt)
- `TestTrefferliste` (3 Testfälle): — (Docstring fehlt)
- `TestSitzung` (7 Testfälle): — (Docstring fehlt)
- `TestKorrektur` (5 Testfälle): — (Docstring fehlt)
- `TestKorrekturDatei` (2 Testfälle): — (Docstring fehlt)
- `TestDockWidgetTabs` (1 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status |
@@ -1175,9 +1227,24 @@ Testgruppen:
| `TestEigentuemerSuchen.test_ohne_eigentuemerdatei_warnung` | Prüft, dass ohne gewählte Eigentümerdatei die Liste aufgefrischt und dann auf das Laden der CSV hingewiesen wird. | grün |
| `TestEigentuemerSuchen.test_suchfehler_als_warnung` | Prüft, dass ein Fehler der Suche (z. B. leere Eingabe) als Warnung erscheint. | grün |
| `TestEigentuemerSuchen.test_kein_treffer_ohne_namen_in_meldung` | Prüft, dass ohne Treffer ein Hinweis erscheint, der den gesuchten Namen nicht wiederholt (Datenschutz). | grün |
| `TestEigentuemerSuchen.test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte` | Prüft, dass Treffer in einer neuen Trefferliste erscheinen, eine offene alte Liste geschlossen wird und die Eingaben an die Suche gehen. | grün |
| `TestEigentuemerSuchen.test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte` | Prüft, dass Treffer in einer neuen Trefferliste mit Anzeige-Rückruf erscheinen, eine offene alte Liste geschlossen wird und die Eingaben an die Suche gehen. | grün |
| `TestTrefferliste.test_trefferzeile_mit_hinweis` | Prüft, dass die Trefferliste Name, Anschrift, E-Mail, den Rohwert von PER_RECHTSPERSON und das Kennzeichen „verstorben“ zeigt. | grün |
| `TestTrefferliste.test_ausgewaehlte_eigentuemer` | Prüft, dass das Trefferfenster die in der Tabelle gewählten Einträge zurückgibt. | grün |
| `TestTrefferliste.test_daten_anzeigen_gibt_auswahl_weiter` | Prüft, dass „Daten anzeigen“ die Auswahl der Trefferliste an den Tab übergibt. | grün |
| `TestSitzung.test_sitzung_beginnen_im_vollbild_auf_zweitem_bildschirm` | Prüft, dass „Sitzung beginnen“ ein leeres Anzeigefenster auf dem gewählten Bildschirm öffnet, im Vollbild, wenn QGIS woanders liegt. | grün |
| `TestSitzung.test_auf_qgis_bildschirm_kein_vollbild` | Prüft, dass das Anzeigefenster auf dem QGIS-Bildschirm als normales Fenster öffnet. | grün |
| `TestSitzung.test_daten_anzeigen_beginnt_sitzung_bei_bedarf` | Prüft, dass „Daten anzeigen“ ohne laufende Sitzung diese beginnt und die Einträge zeigt; die Statuszeile nennt nur die Anzahl. | grün |
| `TestSitzung.test_daten_anzeigen_ohne_auswahl` | Prüft, dass „Daten anzeigen“ ohne Auswahl nur einen Hinweis gibt und keine Sitzung beginnt. | grün |
| `TestSitzung.test_anzeige_leeren_laesst_fenster_offen` | Prüft, dass „Anzeige leeren“ die Daten entfernt, das Fenster aber nicht schließt. | grün |
| `TestSitzung.test_sitzung_beenden_schliesst_fenster` | Prüft, dass „Sitzung beenden“ das Anzeigefenster schließt und die angezeigten Daten vergisst. | grün |
| `TestSitzung.test_von_aussen_geschlossen_beendet_sitzung` | Prüft, dass ein von außen geschlossenes Anzeigefenster (z. B. Alt+F4) die Sitzung im Tab beendet. | grün |
| `TestKorrektur.test_korrektur_wird_festgehalten_und_angezeigt` | Prüft, dass eine Korrektur in die Korrektur-CSV geschrieben, sofort angezeigt und ohne Namen gemeldet wird. | grün |
| `TestKorrektur.test_ohne_aenderung_nichts_schreiben` | Prüft, dass ein unverändert gespeicherter Dialog nichts schreibt. | grün |
| `TestKorrektur.test_abbruch_nichts_schreiben` | Prüft, dass ein abgebrochener Korrekturdialog nichts schreibt. | grün |
| `TestKorrektur.test_schreibfehler_warnung_und_anzeige_unveraendert` | Prüft, dass bei einem Schreibfehler gewarnt, die Anzeige nicht geändert und der Pfad beim nächsten Mal neu bestimmt wird. | grün |
| `TestKorrektur.test_ohne_anzeige_keine_korrektur` | Prüft, dass ohne angezeigte Daten kein Korrekturdialog erscheint. | grün |
| `TestKorrekturDatei.test_vorschlag_neben_der_eigentuemerdatei` | Prüft, dass die Korrektur-CSV ohne Rückfrage neben der Eigentümerdatei liegt, wenn der Ordner beschreibbar ist, und gemerkt wird. | grün |
| `TestKorrekturDatei.test_ohne_csv_quelle_wird_gefragt` | Prüft, dass ohne verwertbare CSV-Quelle nach dem Speicherort gefragt wird; Abbrechen liefert keinen Pfad. | grün |
| `TestDockWidgetTabs.test_tab_ist_im_dockwidget_eingetragen` | Prüft, dass der Tab „Eigentümer“ im DockWidget direkt nach dem Bearbeitungs-Tab steht. | grün |
### `Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_alkis.py`
@@ -1652,7 +1719,7 @@ dann verschwindet er hier von selbst.
Keine Lücken.
### `sn_verfahrensgebiet` – 102 von 249 Testfällen ohne Beschreibung
### `sn_verfahrensgebiet` – 102 von 288 Testfällen ohne Beschreibung
#### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py` (25 von 25)
@@ -0,0 +1,93 @@
# Testkonzept: Anzeige für den Eigentümer und Korrekturen
Plugin: `sn_verfahrensgebiet` · Stand: 06.10.2026 · Pflege: bei jeder Änderung an diesem Ablauf
## Worum es fachlich geht
Im Termin sitzt der Eigentümer vor einem zweiten Bildschirm. Dort sieht er nur seine eigenen gespeicherten Daten:
Name, Anschrift und E-Mail. Den QGIS-Bildschirm mit Trefferliste, Konten und anderen Personen sieht er nicht.
Die Sachbearbeitung beginnt zu Beginn der Termine eine Sitzung. Für jeden Eigentümer wählt sie in der Trefferliste
die passenden Einträge und zeigt sie an. Stimmt etwas nicht, korrigiert sie es im Plugin. Der Eigentümer sieht die
Korrektur sofort. Vor dem nächsten Eigentümer leert sie die Anzeige, ohne das Fenster zu schließen. Am Ende beendet
sie die Sitzung.
Die Eigentümerdatei selbst wird nie verändert. Jede Korrektur landet als eigene Zeile in einer Korrektur-CSV neben
der Eigentümerdatei und kann später in das Fachverfahren übernommen werden.
Die Suche bis zur Trefferliste beschreibt [`verfahrensgebiet-eigentuemersuche.md`](verfahrensgebiet-eigentuemersuche.md).
## Der Ablauf
```mermaid
flowchart TD
A["1 Bildschirm wählen,<br/>Sitzung beginnen"] --> B["2 Anzeigefenster öffnet leer<br/>(zweiter Bildschirm: Vollbild)"]
T["Trefferliste: Einträge wählen,<br/>„Daten anzeigen“"] --> C{"Sitzung läuft?"}
C -->|nein| A
C -->|ja| D["3 Eigentümer sieht Name,<br/>Anschrift, E-Mail"]
B --> D
D --> E{"4 Daten richtig?"}
E -->|nein| F["5 Korrigieren: Änderung<br/>in Korrektur-CSV, sofort angezeigt"]
F --> E
E -->|ja| G["6 Anzeige leeren<br/>(Fenster bleibt offen)"]
G --> T
G --> H["7 Sitzung beenden:<br/>Fenster schließt"]
style G fill:#e9f5e9,stroke:#2b8a3e
```
## Was geprüft wird
Die Tests liegen in `Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py` (Anzeigetext, Bildschirme),
`tests/test_eigentuemer_korrektur.py` (Korrekturlogik, Korrektur-CSV) und `tests/test_eigentuemer_tab.py`
(Sitzung, Korrektur im Tab).
| # | Schritt | Wird geprüft durch | Ebene |
|---|---|---|---|
| 1 | Vorgabe: erster Bildschirm ohne QGIS | `test_vorgabe_ist_nicht_der_qgis_bildschirm`, `test_bildschirm_text` | Mock |
| 1 | Ohne Qt-Anwendung keine Bildschirme | `test_ohne_qt_anwendung_keine_bildschirme` | Mock |
| 2 | Sitzung beginnen: leer, Vollbild auf zweitem Bildschirm | `test_sitzung_beginnen_im_vollbild_auf_zweitem_bildschirm`, `test_vollbild_auf_gewaehltem_bildschirm` | Mock |
| 2 | Auf dem QGIS-Bildschirm normales Fenster | `test_auf_qgis_bildschirm_kein_vollbild`, `test_normales_fenster_mittig`, `test_ohne_bildschirm_einfach_zeigen` | Mock |
| 3 | „Daten anzeigen“ beginnt bei Bedarf die Sitzung | `test_daten_anzeigen_beginnt_sitzung_bei_bedarf`, `test_daten_anzeigen_gibt_auswahl_weiter` | Mock |
| 3 | Ohne Auswahl nur ein Hinweis | `test_daten_anzeigen_ohne_auswahl` | Mock |
| 3 | Inhalt: Name, Anschrift, E-Mail; mehrere Einträge | `test_name_anschrift_email`, `test_mehrere_eintraege_getrennt` | Mock |
| 3 | Keine internen Angaben für den Eigentümer | `test_keine_internen_angaben` | Mock |
| 3 | Fehlende E-Mail ausdrücklich nennen | `test_fehlende_email_wird_genannt` | Mock |
| 5 | Nur echte Änderungen, Leeren zählt | `test_nur_echte_aenderungen`, `test_feld_leeren_ist_aenderung`, `test_feldwerte` | Mock |
| 5 | Korrektur festhalten und sofort anzeigen | `test_korrektur_wird_festgehalten_und_angezeigt`, `test_wende_an` | Mock |
| 5 | Unverändert oder abgebrochen: nichts schreiben | `test_ohne_aenderung_nichts_schreiben`, `test_abbruch_nichts_schreiben` | Mock |
| 5 | Korrektur-CSV: Kopfzeile, BOM, anhängen | `test_neue_datei_mit_kopfzeile_und_bom`, `test_anhaengen_ohne_zweite_kopfzeile`, `test_ohne_aenderung_keine_datei` | Mock |
| 5 | Pfad neben der Eigentümerdatei, sonst Rückfrage | `test_textdatei_provider`, `test_ogr_provider`, `test_keine_csv`, `test_vorschlag_neben_der_eigentuemerdatei`, `test_ohne_csv_quelle_wird_gefragt` | Mock |
| 5 | Schreibfehler | `test_schreibfehler_wird_weitergereicht`, `test_schreibfehler_warnung_und_anzeige_unveraendert` | Mock |
| 5 | Ohne Anzeige keine Korrektur | `test_ohne_anzeige_keine_korrektur` | Mock |
| 6 | Anzeige leeren, Fenster bleibt offen | `test_anzeige_leeren_laesst_fenster_offen`, `test_leer_nur_platzhalter` | Mock |
| 7 | Sitzung beenden bzw. Fenster von außen geschlossen | `test_sitzung_beenden_schliesst_fenster`, `test_von_aussen_geschlossen_beendet_sitzung` | Mock |
| — | Keine Personendaten auf der Konsole | `test_schreibt_nichts_auf_die_konsole` | Mock |
| — | Sieht das in QGIS richtig aus, auf zwei Bildschirmen? | manueller Test | manuell |
Ebene: `Mock` (ohne QGIS, Sekunden) · `QGIS` (gegen echtes QGIS) · `manuell` (Mensch in QGIS).
## Fachliche Sonderfälle
| Sonderfall | Kommt vor bei | Wird geprüft durch |
|---|---|---|
| Nur ein Bildschirm (Notebook) | Termin ohne zweiten Monitor, Ausprobieren | `test_auf_qgis_bildschirm_kein_vollbild` |
| Eheleute oder Miteigentümer erscheinen gemeinsam | mehrere Einträge auf einmal anzeigen und einzeln korrigieren | `test_mehrere_eintraege_getrennt`, `test_korrektur_wird_festgehalten_und_angezeigt` |
| Eigentümer hat keine E-Mail hinterlegt | häufig; soll beim Termin ergänzt werden | `test_fehlende_email_wird_genannt` |
| Neue Anschrift mit Komma („Am Anger 3, Haus B“) | Zusatz zur Hausnummer | `test_neue_datei_mit_kopfzeile_und_bom` |
| Eigentümerdatei liegt in einem schreibgeschützten Ordner | Export auf einem Netzlaufwerk ohne Schreibrecht | `test_ohne_csv_quelle_wird_gefragt` (Rückfrage), `test_schreibfehler_warnung_und_anzeige_unveraendert` |
| Sonderzeichen oder spitze Klammern in den Daten | Firmennamen | `test_werte_werden_maskiert` |
## Bewusst nicht getestet
| Was | Warum | Wie stattdessen abgesichert |
|---|---|---|
| Fenster tatsächlich auf dem zweiten Bildschirm im Vollbild | braucht echte Bildschirme; im Mock-Modus gibt es keine | Aufrufreihenfolge mit Attrappe geprüft, manueller Test mit zwei Bildschirmen |
| Korrekturdialog mit echten Eingabefeldern | im Mock-Modus gibt es keine Widgets; die Vorbelegung (`feldwerte`) und die Auswertung sind als reine Funktionen getestet | manueller Test |
| Schriftgröße und Lesbarkeit der Anzeige | Geschmack und Bildschirmgröße | manueller Test im Termin |
## Bekannte Lücken
| Lücke | Auswirkung | Issue |
|---|---|---|
| Der manuelle Test mit zwei Bildschirmen steht aus, auch mit unterschiedlicher Skalierung (z. B. Notebook 150 %, Monitor 100 %) | Das Fenster könnte auf dem falschen Bildschirm oder nicht ganz im Vollbild erscheinen | Verfahrensgebiet #56 |
| Eine neue Suche leert die Anzeige nicht von selbst | Wer „Anzeige leeren“ vergisst, zeigt dem nächsten Eigentümer noch die vorherigen Daten | bewusst so (Bearbeiter entscheidet); bei Bedarf eigenes Issue |
@@ -13,8 +13,8 @@ Rechtspersonen sind in der Liste gekennzeichnet:
verstorben als Hinweis (`PER_VERSTORBEN` = 1), die Art der Person als Rohwert von `PER_RECHTSPERSON`
(0, 1, 5 oder 9; die Bedeutung der Werte wird später entschlüsselt).
Die Trefferliste sieht nur die Sachbearbeitung. Das Anzeigefenster für den Eigentümer auf dem zweiten Bildschirm
und die Korrekturen folgen im nächsten Schritt von Issue Verfahrensgebiet #56.
Die Trefferliste sieht nur die Sachbearbeitung. Wie die gewählten Einträge dem Eigentümer angezeigt und korrigiert
werden, beschreibt [`verfahrensgebiet-eigentuemer-anzeige.md`](verfahrensgebiet-eigentuemer-anzeige.md).
## Der Ablauf
+2 -1
View File
@@ -102,7 +102,8 @@ Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik
- **ArcGIS-REST-Layer nicht nach Nummer deuten.** Gleiche Layer-URLs werden in der Linkliste und im Alternativansatz unterschiedlich benannt; Bedeutung und Geometrie immer gegen die Dienstmetadaten prüfen. (Vergleich Alternativansatz 09/2026)
- **CRS:** Plan41 und VLN-API arbeiten in EPSG:25833. Der Alternativansatz erzeugt EPSG:25832. Für neue Layer 25833 verwenden, bis eine Entscheidung dokumentiert ist.
- **Shape-Import erwartet Feld `FBSchl`** mit `901/10110F` (Neuordnungsgebiet) oder `901/10120F` (Neuvermessungsgebiet). Exporte mit abweichendem Feldnamen (`FBSchl.`) wurden bis 26.8.3 abgewiesen; seit PR Verfahrensgebiet #45 (02.09.2026, 26.8.4-unstable) ist die Feldsuche tolerant. Neue Exportvarianten trotzdem gegen die Erkennung testen.
- **Eigentümerdaten sind personenbezogen (Verfahrensgebiet #56).** Der Serienbriefexport wird vom Anwender von Hand als CSV-Layer geladen; das Plugin liest ihn nur. Namen und Anschriften gehören nicht in `print`, Meldungsleiste, Projektvariablen oder Testdaten (Tests nutzen erfundene Namen, `test_suche_gibt_nichts_aus` prüft die Konsole). Ein gespeichertes Projekt enthält nur den Pfad zur CSV, nicht die Daten. (06.10.2026)
- **Eigentümerdaten sind personenbezogen (Verfahrensgebiet #56).** Der Serienbriefexport wird vom Anwender von Hand als CSV-Layer geladen; das Plugin liest ihn nur. Namen und Anschriften gehören nicht in `print`, Meldungsleiste, Projektvariablen oder Testdaten (Tests nutzen erfundene Namen, `test_suche_gibt_nichts_aus` prüft die Konsole). Ein gespeichertes Projekt enthält nur den Pfad zur CSV, nicht die Daten. Die Korrektur-CSV (`<Eigentümerdatei>_korrekturen.csv`) enthält ebenfalls Personendaten und liegt deshalb neben dem Export, nicht im Projekt- oder Plugin-Ordner. Das Anzeigefenster für den Eigentümer zeigt nur Name, Anschrift und E-Mail; Konten, Personen-IDs und Kennzeichen bleiben im Tab. (06.10.2026)
- **Fenster auf einem bestimmten Bildschirm öffnen (Qt):** Erst `winId()` aufrufen, damit es ein natives Fenster gibt, dann `windowHandle().setScreen(bildschirm)`, `setGeometry(bildschirm.geometry())` und `showFullScreen()`. Nur `move()` auf die Koordinaten reicht unter Windows nicht zuverlässig, wenn die Bildschirme unterschiedlich skaliert sind. Die Liste der Bildschirme liefert `QCoreApplication.instance().screens()` (die QGIS-Anwendung ist eine `QApplication`); im Mock-Modus gibt es sie nicht. Umgesetzt in `sn_verfahrensgebiet/ui/eigentuemer_anzeige.py` (Verfahrensgebiet #56), in QGIS noch zu bestätigen. (06.10.2026)
- **QGIS liest Zahlen-Spalten einer CSV als Zahl.** Beim Laden als Textdatei-Layer erkennt QGIS Feldtypen; eine PLZ `01067` wird dabei zur Ganzzahl `1067` – in Sachsen beginnt fast jede PLZ mit 0. `eigentuemer_suche._plz` stellt die Null wieder her. Kennungen wie `EIG_KONTO` oder `PER_ID` deshalb als Text vergleichen, nie als Zahl. (06.10.2026)
- **VLN-Upload ersetzt den Serverbestand der VKZ vollständig** (`PUT`). Vor dem Upload sicherstellen, dass alle Teillayer geladen sind.
- **API-Key liegt in `QSettings`** (Registry/Konfigurationsdatei), kein sicherer Schlüsselspeicher. Niemals in Logs oder Tests ausgeben.