Skip to content

Krisenmanagement — Betrieb & Wartung

Deployment

Erstinstallation

bash
# 1. Backend: Migration ausfuehren
cd /var/www/backend-api
cat prisma/migrations/11_crisis_management_v1/migration.sql | npx prisma db execute --stdin
cat prisma/migrations/12_school_trip_child_protection/migration.sql | npx prisma db execute --stdin

# 2. Prisma Client neu generieren
npx prisma generate

# 3. Modul in Registry registrieren
npx tsx prisma/seed-module-registry.ts

# 4. Standard-Szenarien seeden
npx tsx prisma/seed-crisis-scenarios.ts

# 5. Backend bauen und neustarten
npm run build
pm2 restart backend-api

Updates

bash
# Backend
cd /var/www/backend-api
git pull
npm run build
pm2 restart backend-api

# Portal
cd /var/www/prilog-portal
git pull
npm run build
pm2 restart portal

Neue Tenants

Wenn ein neuer Tenant provisioniert wird, muessen die Standard-Szenarien erneut geseeded werden:

bash
cd /var/www/backend-api
npx tsx prisma/seed-crisis-scenarios.ts

Das Seed-Script ist idempotent — bereits existierende Szenarien werden uebersprungen.

n8n Deployment

n8n laeuft als Docker-Container auf dem Kunden-Server:

bash
# n8n starten (im Kunden-Server Docker-Compose)
docker compose up -d n8n

# n8n Status pruefen
docker compose ps n8n

# n8n Logs anzeigen
docker compose logs -f n8n --tail 50

Die n8n-Workflows werden beim Deployment automatisch importiert. Die n8n-UI ist unter http://localhost:5678 erreichbar (nur intern, nicht oeffentlich exponiert).

Monitoring

n8n Workflow-Ausfuehrungen

Eskalation und Workflow-Steuerung laufen in n8n. Monitoring erfolgt ueber:

  1. n8n UI — Unter Executions alle Ausfuehrungen einsehen (Erfolg, Fehler, laufend)
  2. Docker Logsdocker compose logs n8n --tail 100
  3. Backend-Logs — Callback-Aufrufe werden im Backend geloggt

Log-Muster fuer Fehlersuche

Log-NachrichtBedeutung
Krise aktiviert { eventId, scenario }Erfolgreiche Aktivierung
n8n workflow triggered { workflowId, eventId }n8n-Workflow erfolgreich gestartet
n8n callback: tasks created { eventId, count }Aufgaben via n8n-Callback erstellt
MatrixCrisis: Raumerstellung fehlgeschlagenSynapse nicht erreichbar
MatrixCrisis: kein aktiver ServerOrderTenant hat keinen aktiven Server
n8n callback errorFehler bei n8n-Callback-Verarbeitung
Crisis Management data cleaned upModul-Daten nach 30-Tage-Retention geloescht

Gesundheitspruefung

bash
# Pruefen ob der Backend-Server laeuft
pm2 status backend-api

# Pruefen ob n8n laeuft
docker compose ps n8n

# n8n Workflow-Ausfuehrungen pruefen
docker compose logs n8n --tail 20 | grep -i execution

# Pruefen ob aktive Krisen existieren
curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.prilog.chat/api/platform/v1/crisis/active | jq '.total'

Datenbank

Tabellen

TabelleBeschreibungGroesse (geschaetzt)
crisis_scenariosSzenario-KonfigurationenHunderte Zeilen pro Tenant
crisis_eventsAktive + archivierte KrisenDutzende pro Jahr
crisis_tasksChecklisten-Aufgaben5-10 pro Event
crisis_reportsNachberichte (JSON)1 pro Event
crisis_audit_entriesAudit-LogHunderte pro Event
school_trip_eventsSchulreisenDutzende pro Jahr
child_protection_casesKinderschutzfaelleEinzelne pro Jahr

Backup-Hinweise

  • Kinderschutzfaelle enthalten sensible Daten — Backups verschluesseln
  • retainUntil beachten: Daten duerfen nicht vor Ablauf geloescht werden
  • Audit-Logs sind beweissichernd — Integritaet gewaehrleisten

Index-Uebersicht

sql
-- Haeufigste Queries
crisis_scenarios(tenant_id)
crisis_scenarios(tenant_id, is_active)
crisis_events(tenant_id, status)
crisis_events(scenario_id)
crisis_tasks(event_id)
crisis_tasks(event_id, status)
crisis_audit_entries(tenant_id, created_at)
crisis_audit_entries(event_id)
school_trip_events(tenant_id, status)
child_protection_cases(tenant_id, status)
child_protection_cases(retain_until)

Aufbewahrungsfristen

DatentypFristRechtsgrundlage
Krisenberichte5 JahreOrganisatorische Dokumentationspflicht
Audit-Logs5 JahreNachweispflicht
Kinderschutzfaelle10 Jahre nach Schliessung§8a SGB VIII, Jugendamt-Empfehlung
Schulreise-DatenBis manueller LoeschungKeine gesetzliche Vorgabe

Automatische Loeschung

  • Modul-Deaktivierung: 30 Tage Karenzzeit, dann cleanup() loescht Szenarien, Events, Tasks, Reports, Audit
  • Kinderschutzfaelle: Werden bei Modul-Deaktivierung NICHT geloescht — retainUntil muss beachtet werden
  • Cron-Job Empfehlung: Regelmaessig retainUntil < NOW() pruefen und abgelaufene Faelle archivieren

Troubleshooting

Krise kann nicht aktiviert werden

SymptomUrsacheLoesung
Kein Szenario sichtbarNicht freigegebenIm Szenario-Manager freigeben
"CRISIS_ALREADY_ACTIVE"Laufende KriseBestehende Krise zuerst beenden
Kein Matrix-Raum erstelltSynapse nicht erreichbarSynapse-Status pruefen, Token-Refresh
403 ForbiddenFehlende RolleBenutzer-Rolle im Portal pruefen

Eskalation funktioniert nicht

SymptomUrsacheLoesung
Tasks werden nicht eskaliertn8n-Container gestopptdocker compose up -d n8n
Tasks werden nicht eskaliertn8n-Workflow deaktiviertIn n8n-UI Workflow aktivieren
Eskalation verzoegertn8n-Workflow-IntervallWorkflow-Timer in n8n pruefen
Keine Matrix-NachrichtenSynapse-Token abgelaufenWird automatisch erneuert
n8n-Callback schlaegt fehlBackend nicht erreichbarpm2 status backend-api pruefen

PDF-Export schlaegt fehl

SymptomUrsacheLoesung
500 PDF_GENERATION_FAILEDpdfkit nicht installiertnpm install pdfkit auf dem Server
Leeres PDFReport-Content fehltKrise muss zuerst beendet werden

Kinderschutz: Vier-Augen blockiert

SymptomUrsacheLoesung
"FOUR_EYES_SAME_PERSON"Gleicher User zweimalZweiter User muss bestaetigen
"Erste Zustimmung erhalten"Normal — wartet auf zweite PersonZweite Person einloggen

Kapazitaetsplanung

Das Krisenmanagement-Modul hat minimale Ressourcenanforderungen:

  • CPU: Vernachlaessigbar (n8n uebernimmt Workflow-Ausfuehrung)
  • RAM: ~256 MB fuer n8n Docker-Container
  • Datenbank: <1 MB pro Tenant pro Jahr
  • Netzwerk: Minimaler Matrix-Traffic (Textnachrichten)

Der einzige ressourcenintensive Vorgang ist die PDF-Generierung (pdfkit), die aber nur bei Nachberichten/Exporten aufgerufen wird.