1. Intention & Zielbild
Ziel: Schlanke, schema-getriebene Erhebung von Antworten (Renderer), sichere Speicherung (DB), auswertende Berichte (Viewer/Reports) und Exporte (CSV) mit klarer Rechte-Steuerung (Gate/HMAC).
- A-Serie Psychologie-/Likert-Fokus, z. B. A12.
- KVI-Serie Kennzahlen-Fokus inkl. Zeitverlauf & Single-Choice, z. B. KVI10/KVI11.
Arbeitsmodus: konservativ, minimalinvasiv, upload-fertige Dateien (UTF-8 ohne BOM), keine riskanten Änderungen ohne explizites OK.
2. Leistungsbausteine
2.1 Erheben (Renderer)
- Schema-gesteuertes Rendern (JSON
questionnaires.schema_json). - Validieren & Absenden (
POST→/api/post_result.php). - Signatur-/Gate-Checks (Render/Post).
2.2 Anzeigen (Reports/Viewer)
- Item-Benchmarks (P10/P50/P90) & Interpretationen.
- Timeseries (day/week/month) + Moving-Average (7/14/30).
- Gesamt-Scores (Scale-Ø, SC-Quote) & Positionierung.
2.3 Export (CSV)
- Ergebnis-CSV pro PID/Slug (
/admin/report_timeseries_csv_v3.php). - Scoring-CSV (KVI SC) & Overview-CSV (optional).
2.4 Sicherheit
- Gate v2 (
app_settings.k='permissions',by_slug-Knoten). - Viewer-Scope, Report-Level, Signaturpflicht (HMAC-Links).
3. Nutzer- vs. Admin-Perspektive
| Rolle | Zweck | Wichtige Seiten |
|---|---|---|
| Nutzer | Fragebogen ausfüllen, Ergebnis ansehen. |
Renderer-Guard: /admin/q_render_enforced_guard.php?slug=<SLUG>&pid=<PID>Viewer-Guard: /result_view_pretty_guard.php?id=<RESULT_ID>&pid=<PID>
|
| Admin | Schema pflegen, Klonen, Rechte setzen, Berichte prüfen. |
Übersicht: /admin/q_list.php · Klonen: /admin/q_clone.phpGate v2: /admin/gate_simple_reports_v2.php?slug=<SLUG>Timeseries: /admin/report_timeseries.php?slug=<SLUG>&pid=<PID>
|
4. Prozesse
4.1 Klonen & Versionieren
- Quelle prüfen (Preview/Schema), Ziel-Slug festlegen (z. B. KVI11).
- Klonen:
/admin/q_clone.php(Benchmarks/Permissions meist aus). - Gate v2 setzen:
by_slug.<SLUG>.report_access/report. - Smoke-Links nutzen (Renderer, Reports, Timeseries, CSV).
Hinweis: KVI10 ist eingefroren (Archiv), aktive Arbeit über KVI11.
4.2 Benchmarks & Scale-Map
- Katalog:
benchmarks_catalog(Slug, Label, aktiv). - Items:
benchmarks_item(percentile_json, bounds_json). - Interpretation:
benchmarks_interpretation_map(Ranges, Label, Text). - Skalen:
scale_map(scale_overall, method=sum/avg/custom, weights optional).
4.3 Rechte (Gate v2)
Report-Level
by_slug.SLUG.report_access.levels = ["basic","interp","bench"]Report-Zugriff
by_slug.SLUG.report.allowed_pids / allowed_groupsViewer
by_slug.SLUG.viewer.scope/signature_requiredClassic Gate
Nur wo Legacy-Seiten es noch erfordern (Übergangsphase).
5. API-Endpunkte
| Pfad | Zweck | Hinweis |
|---|---|---|
/api/get_questionnaire.php | Schema lesen | slug-basiert |
/api/post_result.php | Ergebnis schreiben | Renderer-Flow |
/api/get_results.php | Liste Ergebnisse | Paginierung |
/api/get_result.php | Ein Ergebnis | jüngere Datei |
6. Smoke-Tests (Beispiele)
- Renderer (Guard):
/admin/q_render_enforced_guard.php?slug=A12&pid=9003 - Item-Bench A12:
/admin/report_a12_itembench_demo.php?id=990012 - KVI Scoring:
/admin/reports/kvi/report_kvi_scoring.php?id=995006 - Timeseries (day):
/admin/report_timeseries.php?slug=KVI11&bucket=day&pid=9103 - CSV:
/admin/report_timeseries_csv_v3.php?slug=KVI11&bucket=day&pid=9103
OPcache danach ggf. aktualisieren:
/admin/zz_opcache_invalidate.php?touch=17. Migration & Daten
Collation: utf8mb4_0900_ai_ci (Session ggf. per SET collation_connection angleichen).
Seeds (Beispiele, idempotent):
- A12 Benchmarks:
/db/seeds/benchmarks_A12_default_de_2025.sql - A12 Scale-Map:
/db/seeds/scale_map_A12.sql - KVI11 Demo-Ergebnisse:
/db/seeds/demo_results_KVI11.sql
8. Qualität & Checklisten
8.1 Vor Upload
- Datei-Encoding: UTF-8 (ohne BOM).
- Kein Framework, minimale Seiteneffekte.
- Pfadnamen eindeutig (z. B.
/admin/reports/kvi/report_kvi_total_v1.php).
8.2 Nach Upload
- OPcache: aktualisieren.
- Smoke-Links prüfen (Renderer/Reports/CSV).
- Gate v2: Slug-Knoten & Rechte kontrollieren.
8.3 Sicherheit
- Least Privilege (default deny).
- Signaturen nur wo nötig, Viewer-Scope „own“ by default.
9. Glossar (Kurz)
slug
Fragebogenkennung (z. B. A12, KVI10…)
pid
Teilnehmer-ID (
participants.id)id
Ergebnis-ID (
results.id)Gate
Rechtematrix (render/post/report/viewer)
Level
Report-Tiefe: basic, interp, bench
Scale-Map
Aggregation (sum/avg/custom) pro Skala
10. Serien-Spezifika
A-Serie (Likert)
- Likert 1–5, Fokus Interpretationen.
- Benchmarks pro Item & Scale-Overall.
KVI-Serie (Kennzahlen)
- Single-Choice + Zeitreihen zentriert.
- Overview/Timeseries/SC-Score/Scale-Ø.