Web-App zur automatisierten Erstellung von Nebenkostenabrechnungen für zwei Immobilien:
- Objekt 1 – verbrauchsbasierte Wasserabrechnung über Zählerstände
- Objekt 2 – flächenbasierte Abrechnung + Techem-Datenaufbereitung (Heizkosten separat)
- Backend: Python 3.12+, FastAPI, SQLAlchemy 2.0, Alembic, Pydantic v2
- Datenbank: PostgreSQL 16 (Docker Compose)
- Frontend: React + Vite + TypeScript
- PDF: WeasyPrint (Phase 5)
docker-compose.yml # PostgreSQL
backend/ # FastAPI-App (Models, Services, API, Alembic, Tests)
frontend/ # React-SPA (Phase 4)
# 1. Datenbank starten
docker compose up -d db
# 2. Umgebung vorbereiten (im Ordner backend/)
cd backend
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
# 3. Konfiguration
Copy-Item ..\.env.example .env # ggf. DSN anpassen
# 4. Migrationen anwenden
alembic upgrade head
# 5. Seed-Daten laden (Objekte, Kostenarten, Umlageschlüssel, Mieter)
python -m seed
# 6. API starten
uvicorn app.main:app --reloadAPI-Doku: http://localhost:8000/docs
Das Backend liest die Datenbank über die Umgebungsvariable DATABASE_URL
(Startzeit). Es gibt zwei lokale SQLite-Datenbanken im Ordner backend/:
| Datei | Zweck | Bearbeitung |
|---|---|---|
real.db |
Echte Nutzerdaten (Objekte, Mieter, Rechnungen, Zähler) | ❌ Wird nicht von Entwicklung/Tests geändert |
dev.db |
Test-/Seed-Daten für Feature-Entwicklung | ✅ Frei veränderbar, wird vom Assistenten für Tests genutzt |
Beide
.db-Dateien sind in.gitignoreausgenommen (vertrauliche Daten).
# Echte Daten (real.db) – zum Pflegen der echten Daten
.\backend\run-real.ps1
# Testdaten (dev.db) – für Entwicklung/Tests
.\backend\run-dev.ps1Manuell äquivalent:
$env:DATABASE_URL = "sqlite:///c:/Users/tfran/Projects/Abrechnung/backend/real.db" # oder dev.db
python -m uvicorn app.main:app --app-dir .\backend --port 8000Die echte Datenbank real.db enthält nur das Schema (Migrationen bis head),
noch keine Daten – diese trägst du über die UI ein.
cd backend
pytestDie Tests laufen ohne PostgreSQL (SQLite in-memory für Modell-/Engine-Tests).