Changeset 3c5605e in flexograder


Ignore:
Timestamp:
02/23/26 11:01:31 (7 days ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
main
Children:
4d2dd3a
Parents:
d00fc86
Message:

README updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • README.md

    rd00fc86 r3c5605e  
    99Alle Komponenten sind leichtgewichtig, transparent und portabel.
    1010
     11# Projektrichtlinien
     12
     13- Minimale, auditierbare JavaScript-Logik
     14- Vollständig portable und selbstenthaltende Prüfungen
     15- Keine Framework-Abhängigkeiten
     16
    1117# Komponenten
    1218
    13 Das System besteht aus drei unabhängig nutzbaren Werkzeugen:
     19Das System besteht aus drei unabhängig nutzbaren Komponenten:
    1420
    15 | Werkzeug    | Zweck                                                                                                       | Technologie               |
    16 |-------------|-------------------------------------------------------------------------------------------------------------|---------------------------|
    17 | `builder`   | Erstellen und Exportieren von Prüfungsfragen                                                                | Python (Tkinter)          |
    18 | `generator` | Generierte statisches HTML anhand einer json/Beschreibung zur Durchführung der Prüfung im Browser (offline) | PYTHON/HTML/CSS/JS |
    19 | `evaluator` | Auswertung der Antworten & Statistiken                                                                      | Python (CLI/GUI)          |
     21| Komponente        | Zweck                                        | Technologie     |
     22|-------------------|----------------------------------------------|-----------------|
     23| `Exam builder`    | Erstellen und Exportieren von Prüfungsfragen | Python(Tkinter) |
     24| `isolierter Test` | isolierte Testdurchführung                   | HTML/JS/CSS    |
     25| `Evaluator`       | Auswertung der Antworten & Statistiken       | Python          |
    2026
    2127Alle Werkzeuge arbeiten lokal, ohne Netzwerkanbindung oder zentrale
    2228Server.
    2329
    24 # builder: Frageneditor & Export
     30# Exam builder: Manager für Fragenkataloge und Examen
    2531
    26 Das Python-GUI-Tool erlaubt Prüfern:
     32Das Tool erlaubt Prüfern:
    2733
    2834- Aufbau eines Fragenkatalogs zur Wiederverwendung
    2935- Zuweisung von Metadaten pro Frage:
    30   - `domain` (z. B. „Elektronik“)
    31   - `topic` (z. B. „Spannungsteiler“)
    32   - `difficulty` (1 = leicht, 5 = schwer)
     36  - `domain` (z. B. "ELINT")
     37  - `topic` (z. B. "Grundlagen Elektrotechnik")
     38  - `subtopic` ("Spannungsteiler")
    3339- Einbindung von Bildern, Video- oder Audiodateien
    34 - Export ausgewählter Fragen als Archiv mit:
    35   - `exam.json`
    36   - zugehörigen Medien (`/media/images/`, `/media/audio/`,
    37     `/media/video/`)
     40- Export ausgewählter Fragen:
     41  - als json-Katalog
     42  - mit Verweis auf zugehörige Medien (`/media/images/`,
     43    `/media/audio/`, `/media/video/`)
     44- Erzeugung eines statischen HTML-/JavaScript-Prüfungsclients, lauffähig
     45  ohne Server:
     46  - Startbar direkt im Browser (USB-Stick, CD, Airgap-Systeme)
     47  - Keine Internetverbindung oder Anmeldung erforderlich
    3848
    39 # generator: Generiert offline-Prüfungsumgebung im Browser
    40 
    41 Erzeugt statischen HTML-/JavaScript-Prüfungsclient, lauffähig ohne
    42 Server:
    43 
    44 - Startbar direkt im Browser (USB-Stick, CD, Airgap-Systeme)
    45 - Keine Internetverbindung oder Anmeldung erforderlich
     49# Isolierter Test
    4650
    4751****Funktionen:****
     
    5054- Unterstützte Fragetypen:
    5155  - Einfachauswahl (Radio)
    52   - Mehrfachauswahl (Multiple_Choice)
    53   - Freitextantwort
     56  - Mehrfachauswahl (Checkbox)
    5457  - optional Bild-, Video- oder Audiowiedergabe pro Frage
    5558- Eingabe von PersDat
    5659- Antworten werden am Ende des Tests im json-Format heruntergeladen
    5760
    58 # Beispiel: Antwortdatei
    59 
    60 ``` json
    61 {
    62   "meta": {
    63     "test_id": "ET-2025-09-001",
    64     "test_name": "Elektrotechnik",
    65     "created_on": "2025-09-17T08:30:00Z",
    66     "candidate_name": "Enrico Schwass",
    67     "candidate_id": "12345678",
    68     "submitted_at": "2025-09-23T15:55:51.158Z"
    69   },
    70   "answers": [
    71     {
    72       "id": "candidate_id",
    73       "fields": [
    74         {
    75           "name": "last_name",
    76           "value": "Schwass"
    77         },
    78         {
    79           "name": "first_name",
    80           "value": "Enrico"
    81         },
    82         {
    83           "name": "personal_id",
    84           "value": "12345678"
    85         }
    86       ]
    87     },
    88     {
    89       "id": "TB801",
    90       "value": "A"
    91     },
    92     {
    93       "id": "TB802",
    94       "value": "D"
    95     },
    96     {
    97       "id": "TB803",
    98       "value": "D"
    99     },
    100     {
    101       "id": "TB804",
    102       "value": [
    103         "C",
    104         "B"
    105       ]
    106     },
    107     {
    108       "id": "TB805",
    109       "value": "A"
    110     },
    111     {
    112       "id": "TB806",
    113       "value": "B"
    114     },
    115     {
    116       "id": "TB807",
    117       "value": "B"
    118     }
    119   ]
    120 }
    121 ```
    122 
    123 # evaluator: Auswertung & Statistik
     61# Evaluator: Auswertung & Statistik
    12462
    12563Ein Python-Tool zur Auswertung eingereichter Antworten.
     
    14078  - PDF als Zertifikat
    14179
    142 # Datenstruktur: Examen (`exam.json`)
     80# Beispiel für Examen
    14381
    144 ``` json
    145 {
    146   "meta": {
    147       "title": "Elektrotechnik",
    148       "duration": "30 Minuten",
    149       "allowed_aids": "keine",
    150       "headline": "DATAV Schutzbereich 2, 10039691S",
    151       "intro_note": "Bitte lesen Sie jede Frage sorgfältig und beachten Sie die Hinweise.",
    152       "submit_note": "Sie können Ihre Antworten jetzt einreichen. Eine spätere Änderung ist nicht mehr möglich.",
    153       "exam_id": "ET-2025-09-001",
    154       "created_on": "2025-09-17T08:30:00Z",
    155       "created_by": "OSF Schwass"
    156   },
    157     "pages": [
    158     {
    159         "title": "Personaldaten",
    160         "questions": [
    161         {
    162             "id": "candidate_id",
    163             "type": "candidate_id",
    164             "domain": "management",
    165             "topic": "identification",
    166             "text": "Bitte geben Sie Ihre Personaldaten ein:",
    167             "fields": [
    168             {
    169                 "id": "last_name",
    170                 "label": "Nachname",
    171                 "validation": {
    172                 "required": true,
    173                 "maxlength": 30
    174                 }
    175             },
    176             {
    177                 "id": "first_name",
    178                 "label": "Vorname",
    179                 "validation": {
    180                 "required": true,
    181                 "maxlength": 30
    182                 }
    183             },
    184             {
    185                 "id": "personal_id",
    186                 "label": "Personalnummer",
    187                 "validation": {
    188                 "required": true,
    189                 "pattern": "^\\d{8}",
    190                 "maxlength": 8
    191                 }
    192             }
    193             ]
    194         }
    195         ]
    196     },
    197     {
    198         "title": "Seitenband",
    199         "questions": [
    200         {
    201             "id": "TB801",
    202             "type": "radio",
    203             "domain": "signals",
    204             "topic": "forms",
    205             "text": "Was ist der Unterschied zwischen AM und SSB?",
    206             "options": [
    207             {"id": "A", "points": 1, "text": "AM hat einen Träger und zwei Seitenbänder, SSB arbeitet mit Trägerunterdrückung und einem Seitenband."},
    208             {"id": "B", "points": 0, "text": "AM hat einen Träger und ein Seitenband, SSB arbeitet mit Trägerunterdrückung und hat zwei Seitenbänder."},
    209             {"id": "C", "points": 0, "text": "AM hat keinen Träger und zwei Seitenbänder, SSB arbeitet mit Trägerunterdrückung und einem Seitenband."},
    210             {"id": "D", "points": 0, "text": "AM hat keinen Träger und zwei Seitenbänder, SSB arbeitet mit Träger und einem Seitenband."}
    211             ]
    212         },
    213         {
    214             "id": "TB802",
    215             "type": "radio",
    216             "domain": "signals",
    217             "topic": "forms",
    218             "text": "Was ist der Unterschied zwischen LSB und USB?",
    219             "options": [
    220             {"id": "A", "points": 1, "text": "LSB arbeitet mit Trägerunterdrückung und dem unteren Seitenband, USB arbeitet mit Trägerunterdrückung und dem oberen Seitenband."},
    221             {"id": "B", "points": 0, "text": "LSB arbeitet mit Träger und zwei Seitenbändern, USB arbeitet mit Trägerunterdrückung und einem Seitenband."},
    222             {"id": "C", "points": 0, "text": "LSB arbeitet mit Träger und einem Seitenband, USB arbeitet mit Trägerunterdrückung und beiden Seitenbändern."},
    223             {"id": "D", "points": 0, "text": "LSB arbeitet mit Trägerunterdrückung und dem oberen Seitenband, USB arbeitet mit Trägerunterdrückung und dem unteren Seitenband."}
    224             ]
    225         }
    226         ]
    227     },
    228     {
    229         "title": "Modulation",
    230         "questions": [
    231         {
    232             "id": "TB803",
    233             "type": "radio",
    234             "domain": "signals",
    235             "topic": "forms",
    236             "text": "Welche Aussage über modulierte Signale ist richtig?",
    237             "options": [
    238             {"id": "A", "points": 1, "text": "Bei FM ändert sich die Amplitude des Sendesignals bei Modulation nicht."},
    239             {"id": "B", "points": 0, "text": "Bei SSB ändert sich die Amplitude des Sendesignals bei Modulation nicht."},
    240             {"id": "C", "points": 0, "text": "Bei FM ändert sich die Amplitude des Sendesignals bei Modulation im Rhythmus der Sprache."},
    241             {"id": "D", "points": 0, "text": "Bei AM ändert sich die Amplitude des Sendesignals bei Modulation nicht."}
    242             ]
    243         },
    244         {
    245             "id": "TB804",
    246             "type": "multiple_choice",
    247             "domain": "signals",
    248             "topic": "forms",
    249             "text": "Welche der folgenden Antworten beschreiben Modulationsverfahren?",
    250             "options": [
    251             {"id": "A", "points": 1, "text": "FM"},
    252             {"id": "B", "points": 1, "text": "AM"},
    253             {"id": "C", "points": 1, "text": "QAM"},
    254             {"id": "D", "points": 0, "text": "PSK"}
    255             ]
    256         }
    257         ]
    258     },
    259     {
    260         "title": "Strassenverkehr",
    261         "questions": [
    262         {
    263             "id": "TB805",
    264             "type": "radio",
    265             "domain": "traffic",
    266             "topic": "right of way",
    267             "text": "Welches Fahrzeug verhaelt sich falsch??",
    268             "options": [
    269             {"id": "A", "points": 1, "text": "Das rote"},
    270             {"id": "B", "points": 0, "text": "Das blaue"}
    271             ],
    272             "media": [{"type": "image", "src": "media/Vorfahrt.png"}]
    273         }
    274         ]
    275     },
    276     {
    277         "title": "Signale",
    278         "questions": [
    279         {
    280             "id": "TB806",
    281             "type": "radio",
    282             "domain": "signals",
    283             "topic": "sound",
    284             "text": "Was hoeren Sie?",
    285             "options": [
    286             {"id": "A", "points": 0, "text": "Fernschreiber"},
    287             {"id": "B", "points": 1, "text": "Tastfunk"}
    288             ],
    289             "media": [{"type": "audio", "src": "media/Code_40.mp3"}]
    290         },
    291         {
    292             "id": "TB807",
    293             "type": "radio",
    294             "domain": "signals",
    295             "topic": "visual",
    296             "text": "Was sehen Sie?",
    297             "options": [
    298             {"id": "A", "points": 0, "text": "Fernschreiber"},
    299             {"id": "B", "points": 1, "text": "Stoerungen"}
    300             ],
    301             "media": [{"type": "video", "src": "media/spectrum.mp4"}]
    302         }
    303         ] 
    304     }
    305     ]
    306 }
    307 ```
     82[file:../examples/exams/KIZG_EXAM.json](../examples/exams/KIZG_EXAM.json)
    30883
    309 # Projektziele
     84# Beispiel für Antwortdatei
    31085
    311 - Minimale, auditierbare JavaScript-Logik
    312 - Vollständig portable und selbstenthaltende Prüfungen
    313 - Keine Framework-Abhängigkeiten
     86[file:../examples/exams/GENERAL-C251110-B854C645BF40@001D-12345678-2026-02-20T09-20-46.452Z.json](../examples/exams/GENERAL-C251110-B854C645BF40@001D-12345678-2026-02-20T09-20-46.452Z.json)
    31487
    315 # Optionale Erweiterungen
     88# Beispiel für Fragenkatalog
    31689
    317 - Git-Versionierung von Fragen
    318 - Feedback-Auswertung pro Thema
    319 - Anpassbares Layout/CSS
     90[file:../catalogs/radio.json](../catalogs/radio.json)
    32091
    32192# Lizenz
Note: See TracChangeset for help on using the changeset viewer.