From ad595ff9b329ffd3831f7976d31ff2938ce40f4b Mon Sep 17 00:00:00 2001 From: Daniel Helbig Date: Tue, 18 Aug 2026 21:23:01 +0200 Subject: [PATCH] Wissensdateien mit claude code als Projekt-kontext ausgewertet Signed-off-by: Daniel Helbig --- wissensdateien/sn_basis.md | 64 +++++++++++++++++++++++++++ wissensdateien/sn_plan41.md | 57 ++++++++++++++++++++++++ wissensdateien/sn_verfahrensgebiet.md | 62 ++++++++++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100644 wissensdateien/sn_basis.md create mode 100644 wissensdateien/sn_plan41.md create mode 100644 wissensdateien/sn_verfahrensgebiet.md diff --git a/wissensdateien/sn_basis.md b/wissensdateien/sn_basis.md new file mode 100644 index 0000000..fe9c400 --- /dev/null +++ b/wissensdateien/sn_basis.md @@ -0,0 +1,64 @@ +# Wissensdatei: sn_basis + +## 1. Zweck + +`sn_basis` ("LNO Sachsen | Plugin Basisfunktionen") ist die **gemeinsame Infrastruktur- und Orchestrierungs-Plugin** der drei Plugins `sn_basis` / `sn_verfahrensgebiet` / `sn_plan41`, die zusammen die Bearbeitung sächsischer Flurbereinigungsverfahren mit offenen Geodaten unterstützen. sn_basis stellt Qt/QGIS-Wrapper, eine generische Prüf-/Datenabruf-Pipeline (Excel-Linkliste → WFS/WMS/REST/OGR → GeoPackage), zentrales Tracking der "Verfahrensgebiet"-Layer, das gemeinsame Menü/Toolbar sowie die Druck-/Layout-Logik für §38-, §41- und Baufreigabe-Karten bereit. Die anderen beiden Plugins sind ohne sn_basis nicht lauffähig. +Durch Anpassung des Präfixes (sn_) und der ALKIS-WFS-AAA-Dienstadresse kann das Plugin auf andere Bundesländer angepasst werden. (ggf. Optimierung erforderlich) +## 2. Architektur + +- Entry-Point: `__init__.py → classFactory(iface) → main.py: BasisPlugin`. +- `BasisPlugin.initGui()` baut das gemeinsame Menü/Toolbar `"LNO Sachsen"`, startet den Verfahrensgebiet-Listener und ruft anschließend **`initGui()` auf allen anderen geladenen `sn_*`-Plugins erneut auf** (Iteration über `qgis.utils.plugins`). Ladereihenfolge und Toleranz gegenüber Doppel-Init sind daher wichtig. +- Verzeichnisse: + - `functions/` — Wrapper-/Abstraktionsschicht (Qt, QGIS-Core, QGIS-UI, OS, Variablen, Dialoge, Messages, Layer-Helfer). + - `modules/` — Fachlogik (Prüfer-Pipeline, Datenabruf/-schreiber, Print-Logik). + - `ui/` — `Navigation`, `DockManager`, `BaseDockWidget`, `ui/tabs/` (PrintTab, SettingsTab). + - `styles/` — gemeinsame `.qml`-Stildateien. + - `tests/` — 12 unittest-Dateien, lauffähig ohne QGIS. +- **Zentrales Pattern 1 — Mock-fähige Wrapper:** Jede `functions/*_wrapper.py` versucht `qgis.core`/`qgis.PyQt` zu importieren und fällt bei Fehler auf eine im selben File definierte Mock-Implementierung zurück (`QGIS_AVAILABLE`-Flag). Dadurch ist fast die gesamte Fachlogik ohne laufendes QGIS testbar. **Neue QGIS/Qt-API-Nutzung muss immer hinter diesen Wrappern erfolgen, inkl. Mock-Zweig.** +- **Zentrales Pattern 2 — Prüfer/Pruefmanager-Pipeline:** `pruef_ergebnis` (Ergebnis-Objekt: `ok`, `meldung`, `aktion`, `kontext`) wird von reinen, UI-freien `*pruefer`-Klassen (`Dateipruefer`, `Linkpruefer`, `Layerpruefer`, `Stilpruefer`, `Datenbankpruefer` [Stub]) erzeugt. `Pruefmanager` ist die einzige Stelle, die daraus ggf. einen Dialog macht (`ui_modus="qgis"` vs. Testmodus). `DataGrabber` (Quelle klassifizieren) → Prüfer → `Datenabruf` (Netzwerk-Fetch inkl. Raumfilter) → `Datenschreiber` (GeoPackage schreiben, Stile in `layer_styles`-Tabelle). Neue Datenimport-Features sollten diesem "klassifizieren → validieren (rein) → zentrale Entscheidung → ausführen"-Muster folgen. + +## 3. Domänen-Glossar + +- **Verfahrensgebiet (VG)** — die Verfahrensflächen-Layer, zentral über Projektvariable getrackt. +- **Pruefer/Prüfer, pruef_ergebnis, Pruefmanager** — Validierungspipeline und deren zentrale UI-Entscheidungsstelle. +- **Dateipruefer / Datenbankpruefer / Linkpruefer / Layerpruefer / Stilpruefer** — Datei-/DB-/Link-/Layer-/Stil-Prüfungen. +- **DataGrabber / Datenabruf / Datenschreiber / LayerLoader** — Quellklassifizierung / Netzwerk-Fetch / GeoPackage-Schreiber / Layer-Erzeugung inkl. Stil. +- **Kartenname, Massstab, Druckbereich, Druckpuffer, Zielgroesse, Endlosrolle** — Print-Tab-Konzepte (Kartentyp §38/§41/Baufreigabe, Maßstab, Druckbereich-Modus, Randpuffer, Zielgröße, Endlospapier). +- **Raumfilter** — `"ohne" | "Verfahrensgebiet" | "Pufferlayer"` — Filtermodus beim Datenabruf. +- **ALKIS, FlurbG, §38/§41** — amtliches Liegenschaftskatasterinformationssystem; Flurbereinigungsgesetz; die beiden zentralen gesetzlichen Kartentypen. + +## 4. Datenquellen / Formate + +- WFS, WMS, ArcGIS REST/FeatureServer, OGR (GPKG/SHP/GeoJSON) — provider-gesteuert über die Linkliste. +- **Excel-Linkliste (.xlsx)**, Pflichtspalten: `ident, gruppe, kartenebene, inhalt, link, provider, stildatei` (gelesen via `openpyxl`, `excel_importer.py`). +- **GeoPackage (.gpkg)** als primäres Persistenzziel, inkl. Ablage der `.qml`-Stile in der `layer_styles`-Tabelle (SQLite). +- QGIS-Projektvariablen (Präfix `sn_`) als de-facto Konfigurations-/Zustandsspeicher, kein separates Config-File. +- Standard-CRS für ad-hoc erzeugte Layer: **EPSG:25833**. + +## 5. Abhängigkeiten zu den Geschwister-Plugins + +- **Hart-Import aus sn_plan41:** `modules/DataGrabber.py` importiert `sn_plan41.modules.listenauswerter.Listenauswerter` — ohne installiertes sn_plan41 wirft sn_basis einen `ImportError`, obwohl `metadata.txt` diese Abhängigkeit nicht deklariert. +- **Pfad-Kopplung:** Default-Stilpfade zeigen hart auf `/sn_plan41/assets/` bzw. `/sn_verfahrensgebiet/styles/