Schulungsmanagement (LMS / QM-Modul)
1. Anforderung
Alexium soll ein vollstaendiges Schulungs- und Lernmanagement-System (LMS) abbilden: Kataloge mit Pflicht- und Weiterbildungsschulungen, Mitarbeiter-Zuweisung, Terminplanung (Live + Self-Paced), Praesentationsinhalte (Folien, Video, Text, Bilder), Quizzes zur Lernkontrolle, Pruefungen mit Bestehensgrenze, Zertifikatsausstellung, Audit-Log und Auffrischungszyklen — alles tenantfaehig und QM-konform. Auftrag-Trigger sind Provios Hebammen-Franchise-Compliance sowie interne Mitarbeiterschulung und QM-Audits.
2. Anwendungsfaelle
- Provio (Hebammen-Franchise): Pflichtfortbildungen mit Nachweis (Hygiene, Notfall, Datenschutz). QM-Audit muss zeigen koennen: “Hebamme X hat am Datum Y Schulung Z bestanden, Auffrischung faellig am …“.
- Interne Mitarbeiterschulung (Alexium / Tenants): Onboarding neuer Mitarbeiter, jaehrliche DSGVO/Arbeitsschutz-Auffrischungen, Tool-Trainings.
- QM-Audit (allgemein): Auditor-Sicht auf Compliance-Status — wer hat was wann bestanden, wer ist ueberfaellig, vollstaendige Beweiskette.
- B2B-Verkauf an Tenants: Schulungsmodul als kostenpflichtiges Add-On (
module.training), eigene Lizenzklasse.
3. Was wir schon haben — wiederverwendbare Bausteine
| Baustein | Existiert | Eignung fuer LMS | Bemerkung |
|---|---|---|---|
| CMS-Engine (Pages, Sections, Templates) | ja | sehr hoch | Praesentations-Inhalte (Folien, Texte, Bilder, Embeds) bauen wir als Pages mit Section-Types |
Section-Type industry.course_curriculum | dokumentiert | direkt einsetzbar | Curriculum-Outline mit Modulen + Lessons + Lock/Unlock; bisher ohne Implementation, “future” |
Section-Types media.video_embed, media.audio_player, media.image_full, content.long_form, media.code_block | ja (77er-Liste) | hoch | komplette Praesentations-Bausteine ohne Neuentwicklung |
Section-Type interactive.tabs, interactive.faq_accordion | ja | mittel | fuer interaktive Lerninhalte |
Form-Engine (form, formfield, formsubmission) | ja | mittel | Formfeld-Typen text, email, tel, textarea, select, radio, checkbox, date, number, file, consent, dropdown — KEIN Quiz/Bewertung/Punkte/Loesungsschluessel; muss erweitert werden |
Workflow-Engine (workflow_template, workflow_step) | ja | hoch | Step-Typen form, document, notification, appointment, authorization, timer, branch, fork, join. Perfekt fuer “Schulung zugewiesen → Reminder T-7 → Quiz → Pruefung → Zertifikat-Signatur”. Recurrence-Config bereits in workflow_template.recurrence_config_json → Auffrischungszyklen abdeckbar |
Step Form / workflow_step_form | ja | mittel | trifft auf Form-Engine-Limit (kein Scoring) |
Step Authorization mit Signature-Methods (ees, fes, pdf, paper) | ja | hoch | Zertifikat unterzeichnen lassen |
Step Appointment / workflow_step_appointment | ja | hoch | Live-Schulungstermine ueber CalDAV; tenant_caldav_config existiert |
Step Timer | ja | hoch | Auffrischungs-Reminder, Deadlines |
Document-Engine (workflow_document_template mit html_template + WeasyPrint) | ja | sehr hoch | Zertifikate als HTML-Templates, PDF via WeasyPrintService und PdfGenerator. Placeholder-Parser fuer Variablen vorhanden |
SignatureService, OTP-Signatur, FES/EES | ja | hoch | rechtssichere Zertifikate (falls erforderlich) |
Event-Modul (event, event_registration) | ja | mittel/hoch | hat workflow_template_id, videocall_*, RRULE-Recurrence, Status, Registrations, all_day, timezone — gut fuer Live-Schulungstermine. Aktuell Public-Site-orientiert (Frontend-Listings), aber Datenmodell trifft Schulung |
User/Rollen (account, accountrole, role, permission, rolepermission) | ja | hoch | Wer-darf-was, Tenant- und Unit-Skopierung vorhanden |
| Mediaasset/-variant/-folder | ja | hoch | Folien-PDFs, Videos, Bilder als Lerninhalt |
SMTP-Mailer (SmtpMailer) + Notification-Step | ja | hoch | Einladungen + Reminder out-of-the-box |
auditlog Tabelle | ja | hoch | bestehende Audit-Infrastruktur fuer QM-Beweisfuehrung |
License-Unit-Modell (license_unit, tenant_license, unit_type=module) | ja | hoch | analog zu module.event/module.flows → module.training einfuehren |
Videocall-Service (tenant_videocall_config) | ja | mittel | Live-Online-Schulung |
Kernerkenntnis: Etwa 70 Prozent der Bausteine sind vorhanden. CMS + Workflow + Document + Event tragen das Geruest; nur die LMS-spezifischen Konzepte (Quiz-Scoring, Kurs-Zuweisung, Zertifikat-Lifecycle, Auffrischungszyklus) fehlen.
4. Was fehlt / muss neu gebaut werden
| Anforderung | Status | Aufwand |
|---|---|---|
| Schulungs-Katalog (Liste verfuegbarer Schulungen pro Tenant) | NEU | M — neue Tabelle training_course + UI |
| Schulungs-Inhalte (Folien/Videos/Text) | KONFIG | XS — bestehende CMS-Pages + Section-Types reichen, ggf. industry.course_curriculum ausimplementieren |
| Strukturierung Kurs → Modul → Lektion | NEU | S — neue Tabellen training_module, training_lesson (oder Page-Hierarchie nutzen) |
| Mitarbeiter-Zuweisung (welcher Account muss welche Schulung machen) | NEU | S — training_assignment |
| Live-Termine | KONFIG/ERWEIT | S — event wiederverwenden, Verknuepfung event.training_course_id ergaenzen |
| Self-Paced (kein Termin) | KONFIG | XS — assignment.mode='self_paced' Flag |
| Quiz mit Single/Multi-Choice + automatischer Auswertung | NEU/ERWEIT | M-L — Form-Engine erweitern: Feldtypen quiz_single, quiz_multi; pro Field correct_answers_json, points; pro Form passing_score, time_limit_seconds, randomize_order. Alternativ eigene Tabelle training_quiz |
| Freitext-Quizfragen (manuell bewertet) | NEU | S — wenn Quiz-Engine da, klein |
| Pruefungen mit Bestehensgrenze | NEU | M — training_attempt mit score, passed, plus Pruefungs-Sicht (Anti-Cheat siehe unten) |
| Mehrfache Versuche / Attempt-Limit | NEU | S — Teil von training_attempt |
| Zertifikate ausstellen | KONFIG/NEU | S — workflow_document_template mit HTML + WeasyPrint vorhanden, neuer Trigger “Bei bestanden → Dokument generieren → ggf. signieren”. Zertifikatsnummer + Hash-Verifizierung als kleine Zusatzlogik |
| Audit-Log (wer hat wann was bestanden) | KONFIG | XS — bestehende auditlog + training_attempt reichen |
| Auffrischungszyklen (jaehrliche Pflichtschulungen) | KONFIG/ERWEIT | S — workflow_template.recurrence_config_json vorhanden + Timer-Step. Plus training_course.recertify_after_months |
| QM-Reports / Compliance-Dashboard | NEU | M — neue Auswertungs-Views (“Wer ist ueberfaellig?”, “Bestehensquote pro Kurs”, “Audit-Export PDF/CSV”) |
| Tenant-Skopierung | KONFIG | XS — analog Forms/Workflows (scope, tenant_id schon Standard) |
Lizenz-Unit module.training | KONFIG | XS — Eintrag in license_unit, gated im Code |
| Anti-Cheat (Random-Reihenfolge, Zeitlimit, kein Zurueck) | NEU | S — Quiz-Render-Optionen |
| LMS-Standard-Export (SCORM/xAPI) | NEU | L — nur falls Anforderung |
| Sidebar-Eintrag + UI-Bereich “Schulungen” | NEU | M — Studio-Section analog Events |
5. Architektur-Vorschlag
5.1 Grundprinzip — Mischmodell, kein Insel-Modul
Wir bauen kein monolithisches LMS-Modul. Wir komponieren:
- CMS-Engine → Lerninhalt (Pages mit
course.*-Section-Types) - Workflow-Engine → Orchestrierung (Zuweisung, Reminder, Quiz, Pruefung, Zertifikat als Step-Sequenz)
- Form-Engine erweitert → Quiz und Pruefung (neue Field-Typen + Scoring-Layer)
- Document-Engine → Zertifikat-PDFs
- Event-Modul → Live-Termine
- Neue Schulungs-Tabellen → Katalog, Zuweisung, Versuche, Zertifikate (das LMS-Glue)
So bleibt die Engine-Investition produktiv, Theme-Marketplace und Lizenzmodell skalieren mit.
5.2 Datenmodell-Skizze (8 neue Tabellen)
training_course
id, course_key (uuid), scope, tenant_id
title, slug, description, image_media_id
type ('mandatory' | 'optional' | 'certification')
page_id (verlinkt auf CMS-Page mit Lerninhalt)
workflow_template_id (orchestriert den Ablauf)
recertify_after_months (int, NULL = einmalig)
passing_score (numeric), max_attempts (int)
status ('draft' | 'published' | 'archived')
required_license_unit_id -> license_unit
createdat, updatedat
training_module -- optional, wenn course_curriculum-Hierarchie gewuenscht
id, course_id, title, sort_order, page_id (Lektions-Page)
training_assignment -- wer muss was machen
id, course_id, account_id (oder unit_id fuer Gruppenzuweisung)
assigned_at, due_date, mode ('live' | 'self_paced')
event_id (NULL bei self-paced) -> event
status ('assigned' | 'in_progress' | 'completed' | 'overdue')
workflow_instance_id -> workflow_instance
training_quiz -- optional eigenstaendig, alternativ Form mit Scoring
id, course_id, title, type ('quiz' | 'exam')
form_key -> form (Wiederverwendung Form-Engine)
passing_score, time_limit_seconds, max_attempts
randomize_questions, randomize_options
show_correct_after (bool)
training_quiz_question_meta -- Erweiterung zu formfield (Scoring)
formfield_id PK -> formfield
correct_answers_json, points, explanation
training_attempt
id, assignment_id, quiz_id, account_id
started_at, completed_at, score, max_score, passed (bool)
formsubmission_id -> formsubmission
attempt_number, time_spent_seconds
training_certificate
id, assignment_id, account_id, course_id
issued_at, valid_until (recertify-Datum)
certificate_number (eindeutig, druckbar)
workflow_document_id -> workflow_document (das PDF)
hash (SHA-256 fuer Echtheitspruefung)
revoked_at, revoke_reason
training_completion_log -- Audit-Trail QM
id, assignment_id, account_id, course_id
event_type ('assigned' | 'started' | 'completed' | 'failed' | 'recertified' | 'certificate_issued' | 'certificate_revoked')
occurred_at, actor_account_id, payload_json
5.3 License-Unit-Anbindung
Neuer Eintrag in license_unit:
license_unit_key: module.training
license_unit_label: Schulungs-Modul
unit_type: module
module_namespace: training
has_cms_sections: true (fuer course.*-Section-Types)
pricing_model: subscription | one_time
Section-Types die nur mit Modul aktiv sind: industry.course_curriculum, ggf. neue course.lesson_player, course.quiz_inline, course.progress.
5.4 Studio-UI
- Sidebar-Eintrag “Schulungen” (gated by
module.training) - Listenansicht Kurse → Detail: Tabs “Inhalt | Termine | Teilnehmer | Auswertung”
- Quiz-Editor (Erweiterung Form-Editor um Scoring-Spalte)
- Zertifikats-Vorlagen-Editor (bestehender
workflow_document_template-Editor) - Compliance-Dashboard (Tenant-Admin-Sicht)
- Mitarbeiter-Selbstsicht: “Meine Schulungen” mit Status + naechster Faelligkeit
5.5 Workflow-Beispiel “Pflichtschulung Datenschutz”
[Start]
-> [Notification: Einladung per Mail]
-> [Timer: T-7 Reminder]
-> [Form: Lerninhalt-Bestaetigung "habe gelesen"]
-> [Form (Quiz-erweitert): Quiz, 10 Fragen, 70% Bestehen]
-> [Branch: passed?]
Ja -> [Document: Zertifikat generieren]
-> [Authorization: optional Selbstsignatur]
-> [Timer: 12 Monate -> reassign]
-> [End: completed]
Nein -> [Notification: nicht bestanden, Versuch x von 3]
-> [zurueck zu Form Quiz, falls Versuche uebrig]
6. Sprint-Aufteilung
MVP — Phase 1 (Sprint A, ~1 Woche)
Ziel: Tenant-Admin kann Pflichtschulung zuweisen, Mitarbeiter klickt durch Inhalt, beantwortet Quiz, sieht Bestanden-Status. Kein Zertifikat, kein Termin.
training_course,training_assignment,training_attempt(XS)- Quiz-Erweiterung Form-Engine (M): neuer Field-Typ
quiz_single/quiz_multi,correct_answers_json,points,passing_scoreauf Form - Studio-UI Listen + Detail (M)
- License-Unit
module.training(XS) - Mitarbeiter-Selbstsicht “Meine Schulungen” (S)
Schaetzung gesamt: M-L (5-8 Personentage)
Phase 2 (Sprint B, ~1 Woche)
Ziel: Zertifikate + Audit + Auffrischung.
training_certificatemit PDF viaworkflow_document_template(S)training_completion_log+ QM-Report (S)- Recertify-Zyklus (Timer-Step +
recertify_after_months) (S) - Zertifikatsnummer/Hash + oeffentliche Verifizierungsseite (S)
Schaetzung gesamt: M (4-6 Personentage)
Phase 3 (Sprint C, ~1 Woche)
Ziel: Live-Termine + Anti-Cheat + Compliance-Dashboard.
- Event-Verknuepfung
event.training_course_id+ Buchungs-Flow (S) - Anti-Cheat (Random-Order, Time-Limit, no-back) (S)
- Compliance-Dashboard mit Filtern + CSV-Export (M)
- Bulk-Zuweisung an Unit/Rolle (S)
Schaetzung gesamt: M (4-6 Personentage)
Phase 4 (optional)
- Zertifikatssignatur via FES/EES (S)
- SCORM/xAPI-Export (L)
- Coursemarketplace / Tenant-uebergreifender Kurs-Katalog (L)
- KI-gestuetzte Quizfragen-Generierung (L)
Gesamt-MVP-bis-produktiv: ca. 3 Wochen (Sprint A + B + C).
7. Risiken / offene Fragen
- Rechtliche Anerkennung von Zertifikaten: Hebammen-Pflichtfortbildung — sind hier akkreditierte Anbieter erforderlich? Pruefen mit Provio. Falls ja, faellt das nicht in unseren Scope, wir liefern nur den internen Nachweis.
- Datenschutz: Schulungsergebnisse sind Personaldaten. Sichtbarkeitsregeln definieren: Mitarbeiter sieht eigene Ergebnisse, Tenant-Admin sieht Tenant-weit, Unit-Admin nur Unit-Mitarbeiter. Sysadmin niemals ohne Begruendung. Loeschkonzept noetig (DSGVO Art 17 vs. QM-Aufbewahrungspflicht — Konflikt!).
- Mehrsprachigkeit: aktuell deutsch-only. Falls Tenants mit anderen Sprachen kommen, Kurse + Quizfragen i18n-faehig machen (
title_i18n_json). - Anti-Cheat: Ohne Proctoring (Webcam-Ueberwachung) bleibt jede Online-Pruefung umgehbar. Klar kommunizieren: “interner Lernnachweis”, nicht “pruefungsaequivalent zu Praesenz”.
- Performance bei grossen Kursen: Video-Hosting? Externe CDN? Selbst-Hosting auf MediaAssets-Storage?
- SCORM-Kompatibilitaet: Wenn Tenants existierende Lerninhalte aus Moodle/TalentLMS importieren wollen — grosser Bauklotz. Bewusste Entscheidung: erstmal nicht.
- Abrechnungsmodell
module.training: Pro Tenant, pro Kurs, pro Mitarbeiter, pro Pruefung? Klaeren mit Pricing. - Konflikt Quiz vs. Form-Engine: Erweitern wir die Form-Engine (sauber, aber tangiert generischen Kontaktformular-Code) oder bauen wir eine zweite Repository-Schiene
quiz_*? Empfehlung: erweitern, weil Submission/Validation/Anti-Spam wiederverwendet werden.
8. Vergleich Wettbewerb
Moodle (OSS) ist der Standard fuer akademisches LMS — extrem maechtig, aber schwergewichtig, eigene Installation, Setup-Aufwand hoch, UI veraltet. Deckt SCORM, Forenbasis, Gradebook, viele Quiz-Typen. Fuer KMU-QM-Compliance Overkill.
TalentLMS / iSpring / Trakstar Learn sind moderne SaaS-LMS — schoene UI, Mitarbeiterzuweisung, Reminders, Zertifikate, sehr aehnlich zu unserem MVP. Preis ab ca. 89-200 EUR/Monat fuer 40-100 User.
Was wir abdecken muessen, um konkurrenzfaehig zu sein: Kurse mit Multimedia-Inhalt, Quizzes mit Auswertung, Zertifikate, Auffrischungszyklen, Compliance-Reports, Mitarbeiter-Selbstsicht. All das ist im 3-Wochen-Plan.
Was wir bewusst weglassen koennen: SCORM-Import (typisch ungenutzt bei KMU-QM-Use-Case), Foren/Diskussionen, Gamification/Badges, KI-Tutoring, Webcam-Proctoring. Falls ein Tenant das braucht, kann ein bestehendes LMS via SSO-Verlinkung daneben laufen.
Unser USP gegenueber dedizierten LMS:
- Voll integriert in CRM, Workflow, Tenant-Verwaltung — kein doppeltes User-Management.
- Zertifikate als signierbare Dokumente mit unserer Signature-Engine (FES/EES).
- QM-Audit-Sicht auf Compliance ohne Export-Reimport in dritte Tools.
- Multi-Tenant ab Tag 1 — Hebammen-Franchise mit 50 Standorten ist ein Mandant, nicht 50 Lizenzen.
Empfehlung: Build, nicht Buy. MVP ist klein genug (3 Wochen), Wiederverwendung der Engines ist hoch, USP gegenueber Standalone-LMS ist klar.
9. Zusammenhaenge
- Workflow-Engine — Step-Typen, die wir orchestrieren
- Lizenzmodell — neue License-Unit
module.training, Pricing-Anbindung - Vier-Schichten-Modell — System/Global/Tenant/Unit-Skopierung der Kurse
- Signaturen — Zertifikatssignatur via SignatureService
- Event-Modul — Wiederverwendung fuer Live-Schulungstermine
- Theme-Marketplace — perspektivisch Kurs-Marketplace analog
- Sub-Workflows — Pflichtschulung als wiederverwendbarer Sub-Workflow
- Benutzerverwaltung — Mitarbeiterzuweisung haengt an User/Rollen
- Pricing — Abrechnungsmodell
module.trainingfestlegen - Alexium CMS — Page-Engine als Praesentationsschicht