318 lines
8.1 KiB
Markdown
318 lines
8.1 KiB
Markdown
# CSV zu DBF Konverter für Hausverwaltung
|
|
|
|
Ein Python-Tool zur Konvertierung von CSV-Bankauszügen in DBF-Dateien für Hausverwaltungssoftware.
|
|
|
|
## 📋 Beschreibung
|
|
|
|
Dieses Programm konvertiert CSV-Exporte von Bankauszügen in das DBF-Format (dBase III), das von vielen älteren Hausverwaltungsprogrammen benötigt wird. Es analysiert automatisch Buchungstexte und ordnet diese den entsprechenden Konten, Gegenkonten und Kostenstellen zu.
|
|
|
|
### Hauptfunktionen
|
|
|
|
- **Automatische Kontenzuordnung**: Erkennt Mieter und Kostenkonten anhand konfigurierbarer Suchbegriffe
|
|
- **Mehrmandantenfähig**: Unterstützt beliebig viele Mandanten mit eigenen Konfigurationen
|
|
- **Projektzuordnung**: Automatische Zuordnung zu Kostenstellen/Projekten
|
|
- **Monatliche Trennung**: Erstellt separate DBF-Dateien pro Monat
|
|
- **Flexible Filterung**: Auswahl von Monaten und Jahren für die Konvertierung
|
|
- **GUI und CLI**: Verfügbar als grafische Oberfläche und Kommandozeilenversion
|
|
|
|
## 🖥️ Systemanforderungen
|
|
|
|
### Python-Version
|
|
- Python 3.8 oder höher
|
|
|
|
### Betriebssysteme
|
|
- **Linux**: Ubuntu, Debian, Fedora, etc.
|
|
- **Windows**: Windows 10/11
|
|
|
|
### Abhängigkeiten
|
|
- `tkinter` (für GUI-Version, meist vorinstalliert)
|
|
- Alle anderen verwendeten Module sind Teil der Python-Standardbibliothek
|
|
|
|
## 📦 Installation
|
|
|
|
### Linux (Ubuntu/Debian)
|
|
|
|
```bash
|
|
# Python und tkinter installieren
|
|
sudo apt update
|
|
sudo apt install python3 python3-tk
|
|
|
|
# Repository klonen
|
|
git clone https://github.com/IHR-BENUTZERNAME/csv-dbf-converter.git
|
|
cd csv-dbf-converter
|
|
|
|
# Optional: Für Build als Standalone-Executable
|
|
pip3 install pyinstaller
|
|
```
|
|
|
|
### Windows
|
|
|
|
1. Python von [python.org](https://www.python.org/downloads/) herunterladen und installieren
|
|
- Bei der Installation "Add Python to PATH" aktivieren
|
|
2. Repository herunterladen oder klonen
|
|
3. Optional: Für Build als Executable
|
|
```cmd
|
|
pip install pyinstaller
|
|
```
|
|
|
|
## 🚀 Nutzung
|
|
|
|
### GUI-Version (Empfohlen)
|
|
|
|
```bash
|
|
# Linux
|
|
python3 csv_dbf_converter_gui.py
|
|
|
|
# Windows
|
|
python csv_dbf_converter_gui.py
|
|
```
|
|
|
|
Die grafische Oberfläche führt Sie durch folgende Schritte:
|
|
1. Mandant auswählen
|
|
2. CSV-Datei auswählen
|
|
3. Zeitraum (Monate/Jahre) festlegen
|
|
4. Konvertierung starten
|
|
|
|
### CLI-Version (Kommandozeile)
|
|
|
|
```bash
|
|
# Linux
|
|
python3 csv_dbf_converter.py
|
|
|
|
# Windows
|
|
python csv_dbf_converter.py
|
|
```
|
|
|
|
Die Kommandozeilenversion führt interaktiv durch den Prozess und zeigt detaillierte Informationen zur Verarbeitung an.
|
|
|
|
## ⚙️ Konfiguration
|
|
|
|
Das Programm verwendet JSON-Konfigurationsdateien. Beim ersten Start werden Beispieldateien erstellt.
|
|
|
|
### Verzeichnisstruktur der Konfigurationsdateien
|
|
|
|
```
|
|
./
|
|
├── mandanten_config.json # Mandanten-Übersicht
|
|
├── identitaeten_mieter_XXX.json # Mieter pro Mandant (XXX = Mandantennummer)
|
|
├── identitaeten_kosten_XXX.json # Kostenkonten pro Mandant
|
|
└── projekte_XXX.json # Projekte/Kostenstellen pro Mandant
|
|
```
|
|
|
|
### mandanten_config.json
|
|
|
|
Definiert die verfügbaren Mandanten:
|
|
|
|
```json
|
|
{
|
|
"mandanten": [
|
|
{
|
|
"name": "Mein Mandant",
|
|
"nummer": "001",
|
|
"konto": "1200",
|
|
"standard_gegenkonto": "1300",
|
|
"standard_bank_kto": "1200",
|
|
"beleg_index": 1
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
| Feld | Beschreibung |
|
|
|------|--------------|
|
|
| `name` | Name des Mandanten |
|
|
| `nummer` | Eindeutige Mandantennummer (3-stellig) |
|
|
| `konto` | Standard-Bankkonto |
|
|
| `standard_gegenkonto` | Gegenkonto für nicht zugeordnete Buchungen |
|
|
| `standard_bank_kto` | Bankkonto für Buchungen |
|
|
| `beleg_index` | Fortlaufende Belegnummer (wird automatisch erhöht) |
|
|
|
|
### identitaeten_mieter_XXX.json
|
|
|
|
Definiert Mieter mit Suchbegriffen für automatische Erkennung:
|
|
|
|
```json
|
|
{
|
|
"mandant": "Mein Mandant",
|
|
"mandantennummer": "001",
|
|
"mieter": [
|
|
{
|
|
"suchbegriffe": ["Müller", "Thomas Müller", "MUELLER"],
|
|
"konto": "10010",
|
|
"beschreibung": "Thomas Müller"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### identitaeten_kosten_XXX.json
|
|
|
|
Definiert Kostenkonten für Ausgaben:
|
|
|
|
```json
|
|
{
|
|
"kostenkonten": [
|
|
{
|
|
"gegenkonto": 4002,
|
|
"bezeichnung": "Be- und Entwässerung",
|
|
"suchbegriffe": ["Berliner Wasser", "WASSERBETRIEBE"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### projekte_XXX.json
|
|
|
|
Definiert Projekte/Kostenstellen:
|
|
|
|
```json
|
|
{
|
|
"mandant": "Mein Mandant",
|
|
"mandantennummer": "001",
|
|
"default_projekt": "001",
|
|
"projekte": [
|
|
{
|
|
"suchbegriffe": ["Hauptstraße", "Hauptstr"],
|
|
"kst": "001",
|
|
"beschreibung": "Objekt Hauptstraße"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 📄 CSV-Format
|
|
|
|
Das Programm erwartet CSV-Dateien mit Semikolon als Trennzeichen und folgenden Spalten:
|
|
|
|
| Erwartete Spalte | Alternative Namen |
|
|
|------------------|-------------------|
|
|
| Buchungstag | Datum |
|
|
| Buchungstext | Verwendungszweck, Text |
|
|
| Betrag | Amount |
|
|
|
|
### Beispiel CSV-Datei
|
|
|
|
```csv
|
|
Buchungstag;Buchungstext;Betrag
|
|
01.01.2024;Miete Thomas Müller Januar;750,00
|
|
02.01.2024;Berliner Wasserbetriebe Abschlag;-125,50
|
|
```
|
|
|
|
## 🔨 Build (Standalone Executable)
|
|
|
|
### Linux
|
|
|
|
```bash
|
|
cd scripts
|
|
chmod +x build_linux.sh
|
|
./build_linux.sh
|
|
```
|
|
|
|
Die ausführbare Datei befindet sich dann in `dist/csv_dbf_converter_gui`.
|
|
|
|
### Windows
|
|
|
|
```cmd
|
|
cd scripts
|
|
build_windows.bat
|
|
```
|
|
|
|
Die EXE-Datei befindet sich dann in `dist\CSV_DBF_Konverter.exe`.
|
|
|
|
## 📁 Projektstruktur
|
|
|
|
```
|
|
csv-dbf-converter/
|
|
├── csv_dbf_converter.py # CLI-Version (Hauptprogramm)
|
|
├── csv_dbf_converter_gui.py # GUI-Version mit tkinter
|
|
├── config/
|
|
│ └── examples/ # Beispiel-Konfigurationsdateien
|
|
│ ├── mandanten_config.json
|
|
│ ├── identitaeten_mieter_*.json
|
|
│ ├── identitaeten_kosten_*.json
|
|
│ └── projekte_*.json
|
|
├── scripts/
|
|
│ ├── build_linux.sh # Linux Build-Script
|
|
│ └── build_windows.bat # Windows Build-Script
|
|
├── requirements.txt # Python-Abhängigkeiten
|
|
├── LICENSE # MIT-Lizenz
|
|
└── README.md # Diese Datei
|
|
```
|
|
|
|
## 🔍 Funktionsweise
|
|
|
|
### Zuordnungslogik
|
|
|
|
1. **Mieternummer-Parsing**: Das Programm sucht zunächst nach 5-stelligen Zahlen beginnend mit "1" im Buchungstext, die auf ein Mieterkonto verweisen könnten.
|
|
|
|
2. **Suchbegriff-Matching**: Falls keine Mieternummer gefunden wird, werden die konfigurierten Suchbegriffe geprüft:
|
|
- Zuerst Mieter-Suchbegriffe
|
|
- Dann Kostenkonten-Suchbegriffe
|
|
|
|
3. **Projekt-Zuordnung**: Bei Kostenkonten wird zusätzlich nach Projekt-Suchbegriffen gesucht. Falls kein Projekt gefunden wird, wird das Default-Projekt verwendet.
|
|
|
|
### Text-Normalisierung
|
|
|
|
Für den Vergleich werden Texte normalisiert:
|
|
- Kleinschreibung
|
|
- Umlaute: ü→ue, ö→oe, ä→ae, ß→ss
|
|
|
|
## 📝 Beispiele
|
|
|
|
### Beispiel-Workflow
|
|
|
|
1. **Mandanten konfigurieren** in `mandanten_config.json`
|
|
2. **Mieter anlegen** in `identitaeten_mieter_001.json`
|
|
3. **Kostenkonten anlegen** in `identitaeten_kosten_001.json`
|
|
4. **CSV-Datei von Bank exportieren**
|
|
5. **Konverter starten** und CSV-Datei auswählen
|
|
6. **Monate/Jahre auswählen** für die Konvertierung
|
|
7. **DBF-Dateien** werden pro Monat erstellt
|
|
|
|
### Ausgabe-Dateien
|
|
|
|
Die generierten DBF-Dateien folgen dem Namensschema:
|
|
```
|
|
buchungen_[MANDANTENNR]_[MONAT][JAHR_KURZ].dbf
|
|
```
|
|
|
|
Beispiel: `buchungen_001_0124.dbf` (Mandant 001, Januar 2024)
|
|
|
|
## 🐛 Fehlerbehebung
|
|
|
|
### Häufige Probleme
|
|
|
|
**"tkinter nicht gefunden"**
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt install python3-tk
|
|
|
|
# Fedora
|
|
sudo dnf install python3-tkinter
|
|
```
|
|
|
|
**"CSV-Spalte nicht gefunden"**
|
|
- Prüfen Sie, ob die CSV-Datei Semikolon als Trennzeichen verwendet
|
|
- Prüfen Sie die Spaltennamen (Buchungstag, Buchungstext, Betrag)
|
|
|
|
**"Keine Buchungen für den gewählten Zeitraum"**
|
|
- Prüfen Sie das Datumsformat in der CSV (DD.MM.YYYY)
|
|
- Prüfen Sie die gewählten Monate und Jahre
|
|
|
|
## 📜 Lizenz
|
|
|
|
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe [LICENSE](LICENSE) für Details.
|
|
|
|
## 👤 Autor
|
|
|
|
**Sebastian Zell**
|
|
- E-Mail: sebastian.zell@zell-aufmass.de
|
|
|
|
## 🤝 Beitragen
|
|
|
|
Beiträge sind willkommen! Bitte erstellen Sie einen Pull Request oder öffnen Sie ein Issue für Verbesserungsvorschläge.
|
|
|
|
---
|
|
|
|
*Erstellt für die Hausverwaltung mit ❤️ und Python*
|