score

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.