M1: Grundgerüst, Datenmodell und Admin
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
This commit is contained in:
61
FORTSCHRITT.md
Normal file
61
FORTSCHRITT.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user