No description
  • Python 72.4%
  • HTML 20.7%
  • CSS 6.5%
  • Dockerfile 0.4%
Find a file
2026-08-10 14:49:41 +02:00
certificates Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
data Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
fonts Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
static Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
templates Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
.dockerignore Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
.env.example Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
.gitignore Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
app.py Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
certificate.py Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
content_data.py Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
db.py Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
docker-compose.yml Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
Dockerfile Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
load_real_content.py Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
README.md Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00
requirements.txt Initial commit: EU AI Act Schulung wallPen 2026-08-10 14:49:41 +02:00

EU AI Act Schulung wallPen GmbH

Interne Web-App zur Nachweis-Schulung der KI-Kompetenz (Art. 4 EU AI Act) für ca. 35 Mitarbeiter. Läuft als einzelner Docker-Container, keine externen Abhängigkeiten (SQLite-Datei, kein separater DB-Server).

Ablauf für Mitarbeiter

  1. Sprache wählen (DE/EN), persönlichen Zugangscode eingeben (6-stellig, von dir erhalten).
  2. Module nacheinander durchklicken (Text-Inhalte, Button "Weiter").
  3. Abschlusstest: zufällig ausgewählte Multiple-Choice-Fragen aus dem Fragenpool (Standard: 10 Fragen, 80 % zum Bestehen — beides im Admin-Bereich änderbar).
  4. Bei Bestehen: PDF-Zertifikat mit Name, Datum, Punktzahl direkt downloadbar.
  5. Bei Nichtbestehen: Test kann beliebig oft wiederholt werden (neue zufällige Fragenauswahl) — der Zugangscode wird dafür nicht erneut benötigt, er gilt nur für den allerersten Einstieg.

Zugangscodes (Zugriffskontrolle)

Damit nicht beliebige Namen eingetragen werden können und jeder Teilnahme-Datensatz einer echten Person zugeordnet ist, ist der Einstieg in die Schulung an einen einmaligen Zugangscode gekoppelt:

  • Im Admin-Bereich unter Zugangscodes legst du pro Mitarbeiter einen Namen an (einzeln oder als Liste "Vorname Nachname", eine Zeile pro Person) — dabei wird automatisch ein kurzer Code (6 Zeichen, keine verwechselbaren Zeichen wie 0/O oder 1/I) erzeugt.
  • Die Liste lässt sich als CSV exportieren, um die Codes zu verteilen (z. B. per E-Mail oder Chat, eine Zeile pro Person).
  • Ein Code funktioniert genau einmal: Sobald ein Mitarbeiter ihn auf der Startseite eingibt, wird der zugehörige Name automatisch übernommen und der Code sofort als "verwendet" markiert. Ein zweiter Versuch mit demselben Code wird abgelehnt.
  • Bricht jemand die Schulung ab oder hat technische Probleme, kannst du den Code im Admin-Bereich mit einem Klick auf Zurücksetzen wieder freigeben.
  • Die Übersicht der Teilnahmen zeigt zusätzlich den verwendeten Code an, sodass sich jede Teilnahme eindeutig zurückverfolgen lässt.

Admin-Bereich

Erreichbar unter /admin (Login mit dem Passwort aus der Umgebungsvariable ADMIN_PASSWORD).

  • Übersicht: alle Teilnahmen mit Name, Code, Datum, Ergebnis, Status, CSV-Export, Zertifikat-Download.
  • Zugangscodes: Codes einzeln oder per Liste anlegen, Status (offen/verwendet) einsehen, zurücksetzen, löschen, CSV-Export zur Verteilung.
  • Module: Inhalte anlegen/bearbeiten/löschen (Titel + Text, jeweils DE/EN, Reihenfolge einstellbar).
  • Fragen: Fragenpool verwalten (Frage + 4 Antwortoptionen DE/EN, richtige Antwort).
  • Einstellungen: Bestehensgrenze (%), Anzahl der Testfragen pro Versuch, Firmenname und Schulungstitel (erscheinen auf dem Zertifikat).

Jedes Modul zeigt zusätzlich eine selbst erstellte Grafik (Rollenmodell, Risikopyramide, Praxis-Regeln, Bußgeldstufen — siehe Abschnitt „Modul-Grafiken" unten). Es gibt aktuell keine echten Videos — Wunsch war zunächst eine reine Text-/Inhalte-Version. Falls später Videos ergänzt werden sollen, ist das der naheliegende nächste Ausbaupunkt (z. B. Video-URL-Feld pro Modul).

Schulungsinhalte (Module & Fragen)

Die App ist mit 4 Modulen und 13 Testfragen zum EU AI Act vorbefüllt (Datei content_data.py):

  1. Der EU AI Act und die Pflicht zur KI-Kompetenz (Art. 4)
  2. Risikoklassen des AI Acts (Art. 5 verbotene Praktiken, Hochrisiko, Art. 50 Transparenzpflichten, aktueller Zeitplan inkl. Digital-Omnibus-Verschiebung Juni 2026)
  3. KI im Arbeitsalltag bei wallPen — praktische Regeln (Kundendaten, menschliche Aufsicht, Transparenz, Verantwortung)
  4. Verantwortung, Bußgelder (Art. 99) und Ansprechpartner

Inhalte basieren auf öffentlich zugänglichen Quellen (Verordnung (EU) 2024/1689, EU-Kommission, Fachportale) — Quellenliste am Ende von content_data.py (Variable SOURCES). Das ist Awareness-Schulungsmaterial, keine Rechtsberatung. Fristen rund um den "Digital Omnibus on AI" können sich noch ändern.

Bitte vor dem Livegang ausfüllen: In Modul 4 steht als Platzhalter [Bitte internen Ansprechpartner/Datenschutzbeauftragten eintragen] (DE + EN) — im Admin-Bereich unter „Module“ mit dem tatsächlichen Ansprechpartner bei wallPen ersetzen.

Inhalte aktualisieren

Bei einer neuen/leeren Datenbank werden Module und Fragen aus content_data.py automatisch beim ersten Start geladen.

Läuft der Container bereits (z. B. mit alten Platzhaltern aus einem früheren Test), müssen Aenderungen an content_data.py per Skript nachgeladen werden — die Datenbank wird beim Neustart NICHT automatisch überschrieben, damit im Admin-Bereich vorgenommene Aenderungen nicht verloren gehen:

docker compose exec eu-ai-act-schulung python load_real_content.py

Das Skript fragt vor dem Ausführen nochmal nach Bestätigung, ersetzt nur Module und Fragen und lässt bestehende Teilnahmen/Zertifikate unangetastet.

Modul-Grafiken

Jedes Modul hat eine passende, selbst erstellte Grafik (SVG, static/img/module1_de.svgmodule4_en.svg) statt eines aus dem Internet gesuchten Bildes — damit gibt es keine Unsicherheit bei Bildrechten/Lizenzen, und die Grafiken passen inhaltlich exakt zum Text (Rollenmodell Anbieter/Betreiber/Mitarbeiter, Risikopyramide der 4 Stufen, 6 Praxis-Regeln als Kachel-Übersicht, Bußgeldstufen als Balkendiagramm) sowie farblich zur wallPen CI.

  • Bild pro Modul und Sprache separat hinterlegbar (image_de / image_en in content_data.py bzw. im Admin-Bereich unter „Module" → Feld „Bild-Dateiname").
  • Eigene/neue Bilder: Datei nach static/img/ legen (Emma per Dateizugriff auf den Server/Container) und den Dateinamen im Admin-Bereich beim jeweiligen Modul eintragen. Kein Bild eingetragen = es wird keine Grafik angezeigt.
  • Es gibt aktuell kein Upload-Feld im Admin-Bereich, nur die Angabe des Dateinamens einer bereits vorhandenen Datei.

wallPen Corporate Identity

Design (Logo, Farben, Schrift) folgt dem wallPen Styleguide (Stand August 2026):

  • Logo: offizielle Wortmarke aus dem Styleguide (static/img/wallpen_logo.png, wallpen_logo_small.png)
  • Farben: Yellowish-green #CEDC00 (Pantone 381 C) als Akzent, Anthracite #323E48 (RAL 7016) für Text/Buttons
  • Typografie: Headlines "Barlow Condensed", Fließtext "Barlow" (per Google Fonts eingebunden; im PDF-Zertifikat aktuell Helvetica als Fallback — siehe fonts/README.txt für die exakte CI-Schrift im Zertifikat)

Setup / Betrieb (für Emma)

1. Vor dem ersten Start

Die Zugangsdaten stehen NICHT direkt in docker-compose.yml, sondern kommen aus einer lokalen .env-Datei (wird nicht ins Git committet, siehe .gitignore):

cp .env.example .env

Danach in .env die echten Werte eintragen:

ADMIN_PASSWORD=<sicheres Passwort setzen>
SECRET_KEY=<zufälligen langen String setzen, z. B. via `openssl rand -hex 32`>

Ohne gültige .env startet der Container bewusst nicht (Fehlermeldung "ADMIN_PASSWORD fehlt").

2. Bauen und starten

docker compose up -d --build

Die App ist danach unter http://<server-ip>:8080 erreichbar (Port links in docker-compose.yml anpassbar).

3. Daten-Persistenz

Zwei Volumes werden auf den Host gemountet:

  • ./data — SQLite-Datenbank (schulung.db): Module, Fragen, Einstellungen, alle Teilnahme-Ergebnisse.
  • ./certificates — erzeugte PDF-Zertifikate.

Beide Ordner regelmäßig sichern (Backup), da sie den kompletten Stand der Schulung inkl. Nachweisen enthalten.

4. Logs / Neustart

docker compose logs -f
docker compose restart

5. Update der Inhalte

Alle Inhalte (Module, Fragen, Einstellungen) werden ausschließlich über den Admin-Bereich im Browser gepflegt — kein Codezugriff nötig. Ein Neustart des Containers ist dafür nicht erforderlich.

Technischer Aufbau

  • Backend: Python / Flask, WSGI-Server: gunicorn
  • Datenhaltung: SQLite (Datei-basiert, keine separate DB nötig)
  • PDF-Erzeugung: reportlab
  • Kein Frontend-Framework: serverseitig gerenderte HTML-Templates (Jinja2), reines CSS, kein JavaScript-Build nötig

Dateiübersicht:

app.py                     Flask-Routen (Mitarbeiter-Flow + Admin)
db.py                      SQLite-Zugriff, Schema, Seed-Logik (nutzt content_data.py)
content_data.py            Modul- und Fragentexte (einzige Quelle der Wahrheit für Inhalte)
load_real_content.py       Skript zum Nachladen von content_data.py in eine bestehende DB
certificate.py             PDF-Zertifikat-Erzeugung
templates/                 Jinja2-HTML-Templates
static/css/style.css       Styling (wallPen CI-Farben)
static/img/                wallPen-Logo (aus dem Styleguide) + Modul-Grafiken (moduleN_de/en.svg)
fonts/                     Optionale CI-Schriftarten für das PDF-Zertifikat (siehe fonts/README.txt)
Dockerfile
docker-compose.yml
.env.example               Vorlage für .env (echte Zugangsdaten, nicht im Git)
.gitignore
data/                      (Volume) SQLite-DB
certificates/              (Volume) erzeugte PDFs

Bekannte Einschränkungen / offene Punkte

  • Admin-Login ist ein einzelnes, gemeinsames Passwort (kein Benutzer-Management) — für 35 Mitarbeiter ausreichend, aber bewusst einfach gehalten.
  • PDF-Zertifikat nutzt aktuell Helvetica statt der wallPen-CI-Schrift (Barlow/Barlow Condensed), da keine Schriftdatei mitgeliefert werden konnte. Siehe fonts/README.txt, um die exakte CI-Schrift zu ergänzen (wird automatisch erkannt, kein Codeänderung nötig).
  • Ansprechpartner-Platzhalter in Modul 4 muss vor dem Livegang im Admin-Bereich mit echtem Namen/Kontakt ersetzt werden.
  • Keine automatische Erinnerung/E-Mail-Versand bei Nichtabschluss — Nachverfolgung erfolgt aktuell manuell über die Admin-Übersicht.