Regel-Engine-API
Die JSON-Schnittstelle von score-rules und ihre WebAssembly-Grenze.
score-rules hat eine einzige Schnittstelle: JSON rein, JSON raus. Sie ist versioniert
(API_VERSION 3) und über HTTP (POST /v1/rules/evaluate), im Browser und auf der
Kommandozeile dieselbe.
Anfrage
{ "op": "<operation>", "paket": "<kennung>", "...": "..." }
Über HTTP und im Browser ist paket die Kennung, etwa mv.regionale-schule; score setzt das
aufgelöste Paket aus dem Regelbündel ein. Direkt an der WebAssembly-Grenze wird das aufgelöste
Paket selbst übergeben.
| Operation | Eingaben | Ergebnis |
|---|---|---|
note_aus_prozent |
schluessel, prozent |
Notenstufe |
zeugnisnote |
leistungen (je art, note), optional fach |
vorschlag, durchschnitt, ggf. ermessen mit Alternative, warnungen |
gefaehrdung |
Noten eines Schülers | Gefährdung mit Begründung |
versetzung |
jahrgang, noten (je fach, note, optional ebene BR oder MR) |
vorschlag, regel, defizite, ausgleiche (je defizit und durch als Liste), beschluss_erforderlich, hinweise |
abschluss |
faecher (je fach, jahresnote, optional schriftlich, muendlich, endnote) |
Endnoten, offen, bestanden, gesamt, praedikat, berechtigungen |
berufsabschluss |
faecher (je fach, bereich, art, stunden, jahresnoten, optional endnote), optional ausbildungsdauer_jahre, vorbildung, kammerpruefung, fremdsprache_nachweis |
Vorschläge, offen, ziel_erreicht, ausgleiche, gesamtnoten, abschlussnote, praedikat, vermerke, mittlere_reife |
abitur |
leistungen (je fach, halbjahr, kursart, punkte), pruefungen, optional einbringung |
belegung, block1 (mit Einbringungsvorschlag), zulassung, block2, gesamt, durchschnittsnote, bestanden |
aufbewahrung |
stichtag, akten (je objekt, geschlossen) |
fristen (je datenart, jahre, loeschbar_ab, faellig), nach_ablauf, unbefristet |
formel |
name und werte |
ergebnis |
Antwort
Entweder {"ok": …} mit dem Ergebnis und einem trace – der Liste der angewandten Regeln mit
Text, bis zur Fundstelle – oder {"error": "…"}.
{ "ok": {
"vorschlag": { "wert": "2", "text": "gut", "zahl": "2" },
"durchschnitt": "2.15",
"trace": [
{ "regel": "zeugnisnote.durchschnitt", "text": "gewichteter Durchschnitt 2.15" },
{ "regel": "rundung", "text": "2.1 ab ,5 aufgerundet auf 0 Stellen: 2" }
],
"warnungen": []
} }
WebAssembly-Grenze
Das Modul braucht keine Importe und kein wasm-bindgen. Es exportiert vier Funktionen:
| Export | Zweck |
|---|---|
score_api_version() |
Version der JSON-Schnittstelle; Aufrufer prüfen sie beim Laden |
score_alloc(len) |
Speicher für die Anfrage reservieren |
score_evaluate(ptr, len) |
Anfrage auswerten; Rückgabe: Zeiger und Länge der Antwort in einem 64-Bit-Wert |
score_free(ptr, len) |
Speicher freigeben |
So lässt sich das Modul aus jeder Laufzeit mit WebAssembly-Unterstützung aufrufen; score nutzt wazero in Go und die WebAssembly-API des Browsers.
Regelbündel
score-rules build regeln -o regeln.json löst alle Pakete samt Vererbung auf und schreibt sie
als ein JSON-Bündel mit SHA-256. Dieser Hash wird mit jeder Halbjahresnote gespeichert.
score-rules schema gibt das JSON-Schema des Paketformats aus.