100 lines
4.3 KiB
Markdown
100 lines
4.3 KiB
Markdown
|
|
# 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)
|