Django-5.2-Projekt mit uv, django-environ und Docker-Compose-Setup (web + Postgres, WeasyPrint-Systembibliotheken im Image). Vollständiges Datenmodell (Firma, Therapeut, Auftraggeber, Teilnehmer, Leistungsart, Leistung, InvoiceLog, InvoiceCounter) mit Admin, Login-Flow und Platzhalter-Dashboard. Fortschritt in FORTSCHRITT.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yy3uodsai6Ytt3GJ7tBdz
62 lines
3.0 KiB
Markdown
62 lines
3.0 KiB
Markdown
# Umsetzungsfortschritt (Meilensteine)
|
|
|
|
> Ausführungsplan für das MVP aus [`SPEZIFIKATION.md`](./SPEZIFIKATION.md) /
|
|
> [`UMSETZUNGSPLAN.md`](./UMSETZUNGSPLAN.md). Diese Datei hält den Fortschritt fest,
|
|
> damit die Arbeit später fortgesetzt werden kann.
|
|
|
|
**Auslieferung:** in Meilenstein-Checkpoints (nach jedem Meilenstein Review).
|
|
**Kanonische Laufzeit:** Docker Compose (`web` + Postgres). WeasyPrint-Systembibliotheken
|
|
kommen aus dem Docker-Image, nicht vom Host.
|
|
|
|
## Status
|
|
|
|
| MS | Inhalt | Status |
|
|
|----|--------|--------|
|
|
| **M1** | Grundgerüst + Datenmodell + Admin | ✅ **fertig** |
|
|
| **M2** | Auth + Leistungserfassung (Monatsblatt-Grid) | ⬜ offen |
|
|
| **M3** | On-the-fly Rechnungslegung + ZUGFeRD | ⬜ offen |
|
|
| **M4** | Storno / Korrektur-Workflow | ⬜ offen |
|
|
| **M5** | Dashboard (Controlling) + Test-Suite | ⬜ offen |
|
|
|
|
## M1 — erledigt
|
|
- `uv`-Projekt (`pyproject.toml`, `uv.lock`, `.python-version`=3.13), Django 5.2, psycopg3,
|
|
WeasyPrint, drafthorse, factur-x, crispy-forms/bootstrap5, django-tables2, whitenoise, pytest-django.
|
|
- `config/` (Settings via `django-environ`, `DATABASE_URL`, deutsche Lokalisierung).
|
|
- Datenmodell `abrechnung/models.py`: `Firma` (Singleton), `Therapeut`, `Auftraggeber`,
|
|
`Teilnehmer` (fest 1 Therapeut), `Leistungsart`, `InvoiceLog` (Journal, keine Dokumente),
|
|
`Leistung` (ehem. `TherapySession`; `auftraggeber` über Teilnehmer abgeleitet; `betrag`),
|
|
`InvoiceCounter` (Zähler-Zeile für lückenlose Nummern in M3).
|
|
- Admin für alle Entitäten; `Firma` auf eine Instanz begrenzt.
|
|
- Auth (Login/Logout), `base.html`, Platzhalter-Dashboard.
|
|
- Docker: multi-stage `Dockerfile` (uv-Builder → schlanke Runtime mit pango/cairo/gdk-pixbuf +
|
|
Fonts), `entrypoint.sh` (wait-for-db → migrate → collectstatic → gunicorn),
|
|
`docker-compose.yml` (web + postgres:16) + Dev-Override, `.dockerignore`, `.env.example`.
|
|
|
|
**Verifiziert:** `manage.py check` sauber; Migrationen erzeugt+angewandt; HTTP-Smoketest
|
|
(Login 200, `/` anon→Login 302 / auth 200, Admin 200); `pytest` grün (3 Modelltests);
|
|
`docker compose config` valide.
|
|
**Offen (Umgebung ohne Docker-Daemon):** `docker compose up` (Image-Build + web+db live)
|
|
muss in einer Umgebung mit laufendem Docker-Daemon bestätigt werden.
|
|
|
|
## Als Nächstes: M2
|
|
Django-Login-Flow steht bereits. Zu bauen: gruppierte Erfassungs-View
|
|
**Therapeut + Monat** → je zugeordnetem Teilnehmer ein einklappbares Monatsblatt
|
|
(`modelformset_factory(Leistung)`: Datum · Leistungsart · Stunden · Satz · Beschreibung),
|
|
Stundensatz aus Leistungsart vorbelegt, Bestandseinträge vorgeladen, minimales JS
|
|
(`static/abrechnung/monatsblatt.js`: Zeilen klonen, Tab/Enter-Navigation, Live-Summen).
|
|
|
|
## Lokaler Start (Entwicklung)
|
|
```bash
|
|
uv sync
|
|
uv run python manage.py migrate # nutzt SQLite, wenn keine DATABASE_URL gesetzt
|
|
uv run python manage.py createsuperuser
|
|
uv run python manage.py runserver
|
|
```
|
|
|
|
## Start via Docker (kanonisch)
|
|
```bash
|
|
cp .env.example .env # Werte anpassen
|
|
docker compose up --build
|
|
docker compose exec web python manage.py createsuperuser
|
|
```
|