kfe-viewer-py/README.md
Julian Appel a19558fc6c KFE-Viewer: Web-Viewer für die ZVEH-Kalkulationshilfe
Python-Server ohne Abhängigkeiten, der die dBase/FoxPro-Dateien des
originalen KFE-Viewers (KFE.DBF, VORTEXT, GRUPPEN, Parameter, Muster-LVs)
direkt einliest, plus Single-Page-Frontend mit Live-Suche, Facettenfiltern,
einstellbarer Kalkulation (Lohnsätze, Materialzuschlag, DEL-Notiz),
Detailansicht und Merkliste mit CSV-Export.

Docker-Image enthält nur die App; die lizenzpflichtigen KFE-Daten werden
zur Laufzeit nach /data gemountet und sind nicht Teil des Repos.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 14:00:55 +02:00

76 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# KFE Viewer
Leichtgewichtiger Web-Viewer für die ZVEH-Kalkulationshilfe (KFE). Liest die
dBase/FoxPro-Dateien des originalen KFE-Viewers direkt ein – keine Konvertierung,
keine Abhängigkeiten außer Python ≥ 3.8.
## Daten
Die KFE-Daten sind **nicht** in diesem Repository enthalten. Sie sind lizenzpflichtig
(Herausgeber ZVEH, Vertrieb META Handelsgesellschaft). Benötigt wird das Datenverzeichnis des
originalen KFE-Viewers, auf der KFE-CD unter `0_software/KFE_ViewerCD3/Daten`. Darin liegen
u. a. `KFE.DBF`/`.FPT`, `VORTEXT.DBF`/`.FPT`, `GRUPPEN.DBF`, `STDPARAM.DAT`, `LOHNSTD.DBF` und `Projekt/*.prj`.
Am einfachsten kopierst du den Inhalt nach `./data` (per `.gitignore` ausgeschlossen) oder gibst den Pfad mit `--data` an.
## Start
```bash
python server.py
```
Öffnet automatisch http://127.0.0.1:8765. Unter Windows geht auch ein Doppelklick auf `start.bat`.
| Option | Bedeutung |
|---|---|
| `--data PFAD` | Verzeichnis mit `KFE.DBF`. Standard: `./data`, alternativ `../2020-05-12-NEU/0_software/KFE_ViewerCD3/Daten` |
| `--port 8765` | Port |
| `--host 0.0.0.0` | im LAN erreichbar machen |
| `--no-browser` | Browser nicht automatisch öffnen |
| `--static kfe.html` | eine einzelne HTML-Datei mit eingebetteten Daten erzeugen (ohne Server nutzbar, ca. 5 MB) |
Alle Optionen lassen sich auch per Umgebungsvariable setzen: `KFE_DATA`, `KFE_HOST`, `KFE_PORT`, `KFE_NO_BROWSER=1`.
## Docker
Das Image enthält nur die App (ca. 80 MB, Basis `python:3.13-alpine`, läuft als Nicht-root-Benutzer).
Die Daten werden schreibgeschützt nach `/data` gemountet.
```bash
cp .env.example .env # KFE_DATA_DIR auf das Datenverzeichnis setzen (Standard: ./data)
docker compose up -d --build
```
Danach erreichbar unter http://127.0.0.1:8765. Weitere Befehle: `docker compose logs`, `docker compose down`.
Für Zugriff aus dem LAN in `compose.yaml` den Port auf `"8765:8765"` ändern.
Ohne Compose:
```bash
docker build -t kfe-viewer .
docker run -d -p 127.0.0.1:8765:8765 -v /pfad/zu/Daten:/data:ro --name kfe-viewer kfe-viewer
```
## Funktionen
- **Live-Suche** über Positionsnummer, Matchcode, Kurztext, Zusatztext und optional den Langtext (Vortext)
- mehrere Begriffe = UND, `-wort` schließt aus, `"genaue phrase"`
- `04.03` sucht nach Positionsnummer-Präfix
- Umlaute/Komma egal: `schutzkontakt` findet „Schutzkontakt“, `3x1.5` findet „3x1,5“
- **Filter** mit Trefferzahlen: Kapitel → Gruppe, Einheit, Lohngruppe, Rohstoff (Cu/Al), Änderungsjahr, Bauzeit- und Preisbereich
- **Kalkulation live**: Stundensätze je Lohngruppe (Satz 1/2 oder eigene), Materialzuschlag, Bauzeitfaktor,
aktuelle DEL-Notiz für Kupfer/Aluminium (Rohstoff-Mehr-/Minderpreis), netto/brutto
- **Detailansicht** mit Langtext, Kalkulationsaufschlüsselung, den vier KFE-Kalkulationssätzen, Rohstoffdaten
- **Merkliste** mit Mengen, Summen (Lohn/Material/netto/brutto/Bauzeit) und CSV-Export; die 60 Muster-LVs
(`Daten/Projekt/*.prj`) lassen sich direkt übernehmen
- URL enthält Suche und Filter (Lesezeichen/teilen), Tastatur: `/` Suche, `↑`/`↓` Auswahl, `Enter` Details, `+` merken, `Esc` schließen
- Hell/Dunkel-Modus, mobil nutzbar
## Preisformel
```
EP = Bauzeit[min] × Bauzeitfaktor × Stundensatz(LG) / 60 + (Material + Rohstoffzuschlag) × (1 + Zuschlag %)
Rohstoffzuschlag = (DEL − Basis) / 100 × Cu-Zahl[kg/km] / 1000
```
Mit den Standardwerten (43,75 €/h, 20 %, Cu 550) stimmen die Preise mit dem GAEB-Export der KFE überein.