Files
awo-hamburg-intranet/module/tasks/README.md

100 lines
4.3 KiB
Markdown
Raw Normal View History

# Task-Cert Modul
Aufgabenverwaltung mit Zielgruppen-Zuweisung, Erledigungsmethoden, Freigabeprozess, Zertifikaten und Eskalationen.
## Schnellstart
```bash
# 1. Schema initialisieren (Erstinstallation)
mysql -u root -p intranet < sql/init.sql
# 2. Migrationen anwenden (bestehende Installation)
mysql -u root -p intranet < sql/migrations/2026-03-17_add_task_responsible.sql
mysql -u root -p intranet < sql/migrations/2026-03-18_add_grace_period.sql
mysql -u root -p intranet < sql/migrations/2026-03-18_add_form_field_prefill.sql
# 3. Cronjobs einrichten (siehe docs/cronjobs.md)
```
## Verzeichnisstruktur
```
tasks/
bootstrap.php DI-Container, URL-Mapping, Asset-Helper
pages/
admin/ Admin-Views (task_list, task_form, task_detail, ...)
user/ User-Views (my_tasks, task_detail, Widgets)
actions/ View-Controller (Datenaufbereitung pro Seite)
endpoints/
admin/ Schreibende Admin-Endpunkte (POST/CLI)
user/ Schreibende User-Endpunkte (POST)
service/ Business-Logik (10 Services)
repo/ DB-Zugriff (Repository-Pattern)
lib/ Utility-Klassen (Auth, DB, Request, View, ...)
sql/
init.sql Vollständiges Schema (15 Tabellen)
migrations/ Inkrementelle Migrationen
assets/
css/ task_cert.css, task_cert_admin.css, task_cert_user.css
js/ task_cert_admin_form_wizard.js
vendor/ MultiSelect-Komponente
cli/ Cron-CLI-Skripte
logs/ Cron-Logs, Lockfiles, Heartbeat-Dateien
doc/ Architektur- und Lifecycle-Dokumentation
docs/ Betriebsdokumentation (Cronjobs)
```
## Dokumentation
| Dokument | Inhalt |
|---|---|
| [Architektur & Lifecycle](doc/task-cert-module-lifecycle.md) | Services, Datenmodell, Status-Flows, Troubleshooting |
| [Cronjobs](docs/cronjobs.md) | Einrichtung, Intervalle, CLI-Befehle |
| [Testfälle](doc/task-cert-test-cases.md) | 17 Szenarien mit erwarteten Ergebnissen |
## Services
| Service | Verantwortung |
|---|---|
| `TaskDefinitionService` | Aufgaben CRUD, Zyklen-Reset, Audit-Log |
| `AssignmentResolverService` | Zuweisungen materialisieren & synchronisieren |
| `CycleCalculatorService` | Zyklusberechnung (Kalender- & Erledigungsbasis) |
| `CompletionService` | User-Einreichungen, Methodenabschluss, Completion-Guard |
| `ApprovalService` | Manuelle Freigabe/Ablehnung |
| `CertificateService` | Zertifikate ausstellen/widerrufen |
| `EscalationService` | Eskalationsstufen, Grace-Period-Logik |
| `TaskMonitoringService` | Admin-Dashboard KPIs |
| `TaskCategoryService` | Kategorienverwaltung |
| `TaskLookupService` | Stammdaten-Lookups (Kontakte, Mandanten, ...) |
## Wichtige Konzepte
### Rhythmus-Basis
- **Kalenderbasiert** (`calendar`): Feste Zyklen ab Startdatum (z.B. jeden Monat)
- **Erledigungsbasiert** (`completion`): Nächster Zyklus individuell nach Erledigung
### Karenzzeit (Grace Period)
Neue Zuweisungen erhalten eine `grace_until`-Frist. Die Eskalation greift erst nach `max(due_at, grace_until)`. Konfigurierbar pro Aufgabe in der Erinnerungsrichtlinie (`grace_days`, Default: 7).
### Formular-Vorbefüllung (Prefill)
Textfelder in Formularen können mit Kontaktdaten des Nutzers vorbefüllt werden. Konfigurierbar pro Feld via `prefill_column`. Erlaubte Spalten definiert in `lib/ContactPrefillColumns.php`.
### Completion-Guard
Abgeschlossene Assignments sind gesperrt — erneutes Einreichen wird sowohl im Backend (Exception) als auch im Frontend (disabled Buttons) verhindert.
### Sofortige Folgezyklus-Erstellung
Bei erledigungsbasierten Aufgaben wird der nächste Zyklus direkt nach Completion erstellt (nicht erst beim nächsten Cron-Lauf). Deduplizierung über `createIfNotExists` + Unique-Key.
### Cron-Heartbeat
Erfolgreiche Cron-Läufe schreiben Timestamps nach `logs/heartbeat/*.json`. Status sichtbar am Ende der Admin-Aufgabenliste. Klasse: `lib/CronHeartbeat.php`.
## Cronjobs (Kurzfassung)
```crontab
*/15 * * * * php /path/to/tasks/endpoints/admin/materialize_assignments.php
*/30 * * * * php /path/to/tasks/endpoints/admin/recalculate_escalations.php --apply
0 2 * * * php /path/to/tasks/endpoints/admin/sync_assignments.php --apply
```
Details: [docs/cronjobs.md](docs/cronjobs.md)