1fedd683e0
Stand: agent-06 (Audit-Log), agent-05 (Krankmeldung), agent-07 Phase 1 (Personalnummer), Busylight-Pull-Integration, TOTP/2FA, Abwesenheiten, Zeiterfassung, Kiosk-Grundgerüst. Migrations 0001–0023 deployed auf 192.168.1.137 + .164. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
TimeMaster – Architektur
Stack
| Schicht | Technologie |
|---|---|
| Backend | Python 3.12 · FastAPI · SQLAlchemy (async) |
| Datenbank | PostgreSQL 16 |
| Cache / Sessions | Redis 7 |
| Frontend | React 18 · TypeScript · Tailwind CSS |
| Prozess-Manager | systemd |
| Reverse Proxy | Nginx + Let's Encrypt |
| Resend.com | |
| Datei-Storage | Lokales Filesystem / S3-kompatibel |
Verzeichnisstruktur
/opt/timemaster/
├── backend/
│ ├── app/
│ │ ├── core/ # Config, DB, Security, Dependencies
│ │ ├── models/ # SQLAlchemy ORM Models
│ │ ├── schemas/ # Pydantic v2 Schemas
│ │ ├── routers/ # FastAPI Router (je Modul)
│ │ └── services/ # Business-Logik (je Modul)
│ ├── migrations/ # Alembic
│ └── tests/ # pytest
└── frontend/
├── src/
│ ├── features/ # Auth, Zeit, Urlaub, Dashboard, Kiosk
│ └── shared/ # Komponenten, Hooks, Utils
└── dist/ # Build-Output (von Nginx ausgeliefert)
Rollen & Berechtigungen
SUPER_ADMIN → Plattform-Betreiber, alle Firmen
COMPANY_ADMIN → Vollzugriff eigene Firma
HR → Personalakten lesen, Berichte
MANAGER → Genehmigungen für eigenes Team
EMPLOYEE → Eigene Daten, eigene Anträge
Authentifizierung
- Access Token: JWT, 30 Minuten gültig
- Refresh Token: Opaque, 30 Tage, rotation bei jedem Refresh
- Kiosk: Eigener Token-Flow, PIN/NFC/QR/Liste
Datenbankschema (Übersicht)
companies ──< departments
companies ──< users ──< sessions
users ──< time_entries
users ──< absences ──> absence_types
users ──< vacation_balances
companies ──< kiosk_devices
companies ──< audit_logs
API-Versionierung
Alle Endpunkte unter /api/v1/. Zukünftige Breaking Changes → /api/v2/.
Deployment (nativ)
systemd → uvicorn (4 worker) → FastAPI
nginx → :443 → :8000 (API) + /opt/timemaster/frontend/dist (React)