Package ch.tocco.nice2.optional.qualification.api


package ch.tocco.nice2.optional.qualification.api

Übersicht über Entitys im Notenmodul

Grundsätzlich kann das Notenmodul in 2 Bereiche gegliedert werden:

Notenstrukturen

Die Notenstrukturen können als Abbild der Reglemente einer Schule gesehen werden. Sie beschreiben, nach welchen Mustern z.B. ein Lehrgang oder Modul durchgeführt wird. Dies beinhaltet:
 * Definition einer Notenskala
 * Fächer und deren Benotungstypen
 * Bildung von Modul- oder Semesternoten als gewichtete Durchschnitte
 * Definition von Promotions-Regeln
 

Notendurchführungen

Der Teil "Notendurchführung" beinhaltet alle Entitys, die im Zusammenhang stehen mit einer effektiven Durchführung einer Struktur (wie oben beschrieben). Dabei wird die gewünschte Struktur mit der betroffenen Veranstaltung (Event) verknüpft. Die Entitys bilden die Basis für folgende Aktionen im Notenmodul:
 * Ermittlung von Teilnehmern
 * Erfassung von Noten für Teilnehmer
 * Automatische Berechnung von Modul- oder Semsternoten
 * Automatische Auswertung von Promotions-Regeln
 

Details zur Notenberechnung

An verschiedenen Punkten des Notenmodul-Workflows finden Berechnungen mithilfe von Drools statt. In diesem Abschnitt werden die einzelnen Berechnungen erklärt.

Allgemeines

Die Berechnung verwendet die Regel-Engine Drools. Im Notenmodul wird jeweils pro Teilnehmer eine unabhängige Drools- Session für die Berechnung der Note dieses Teilnehmers verwendet.

Berechnung bei der Noteneingabe

Beim Eingeben der Bewertungen (Noten, Punkte, etc.) bei einem Fach, wird eine Berechnung ausgelöst. Es befinden sich immer (unabhängig vom Eingabe-Typ) dieselben Regeln in der Knowledge-Base der Drools Session (aus dem File input-calculate.drl). Die Regeln sind so erfasst, dass sie jeweils die "ComputedGrade" für die dahinterliegende Noteneingabe berechnen.

Mittels Drools-Query wird nach Beeindigung der Berechnung das Ergebnis aus dem Working Memory extrahiert und auf die Datenbank geschrieben.

Notenberechnung

Bei der Notenberechnung werden Durchschnitte im Notenstruktur-Baum berechnet. Ausserdem wird der Promotionsstatus für den Teilnehmer geschrieben.

Es befinden sich dieselben Regeln in der Knowledge-Base, wie bei der Berechnung der Noteneingabe (aus dem File input-calculate.drl). Zusätzlich fliessen die Promotionsregeln vom selektierten Entity "Notenberechnung" in die Knowledge-Base.

Bei der Durchschnitts-Berechnung werden auch die Noten der Noteneingaben nochmals berechnet, da bloss die Einzelnoten (vom Entity Rating) ins Working Memory gegeben werden.

Mittels Drools-Query wird nach Beeindigung der Berechnung das Ergebnis aus dem Working Memory extrahiert und auf die Datenbank geschrieben.

Details zu den Promotionsregeln

Die Menge der möglichen Promotions-Stati ist grundsätzlich offen. So können die Promotionsregeln dazu verwendet werden, ein einfaches "bestanden" / "nicht bestanden" zu ermitteln oder auch komplexere Prädikate wie "sehr gut", "gut", "genügend", "ungenügend" zu erteilen.

Beim Erfassen der Promotionsregeln muss darauf geachtet werden, dass ein Set von Regeln, das auf einer Notenstruktur verknüpft wird, denn Ergebnis-Raum (Raum aller möglicher Ergebnisse) sauber auf die möglichen Stati aufteilt. Es muss insbesondere verhindert werden, dass für ein bestimmtes Ergebnis 2 verschiedene Stati resultieren können. In der Auswertung können mehrere Regeln für ein und denselben Status sprechen, jedoch dürfen nicht 2 Regeln für unterschiedliche Stati sprechen. Das System speichert den Promotions-Status nur dann auf die Datenbank, wenn die Berechnung genau einen Status resultierte.

Werden nicht für alle möglichen Ergebnisse passende Promotionsregeln erfasst (d.h. es greift während der Auswertung keine der vorhandenen Promotionsregeln), dann bleibt der Status des Teilnehmers "leer". Dies kann, falls gewünscht ebenfalls als ein bestimmtes Ergebnis betrachtet werden und muss daher nicht unbedingt als Fehler in den Regeln betrachtet werden.

Erstellen eines neuen Noteneingabe-Typs

Folgende Schritte sind notwendig um einen neuen Eingabetypen zu implementieren:

 * Bevor der neue InputType implementiert wird, sollten die bestehenden Typen betrachtet werden, um herauszufinden, ob
   ein bestehender Typ erweitert werden kann oder ob der Typ von Grund auf neu erstellt werden muss. Ein bestehender
   Typ kann insbesondere dann verwendet werden, wenn die Eingabe identisch zu einem bestehenden Typ erfolgt, aber die
   Berechnung anders abläuft (dies ist z.B. bei den beiden Typen "Noteneingabe" und "Wiederholungsprüfung" der Fall).
 * Einen InputType in @see ch.tocco.nice2.optional.qualification.impl.util.entities.inputtypes implementieren oder
   einen bestehenden verwenden. Falls eine neue Klasse erstellt wird, muss sie die abstrakte Klasse
   ch.tocco.nice2.optional.qualification.impl.util.entities.inputtypes.AbstractInputType erweitern und die
   folgenden Unterpunkte müssen ebenfalls bearbeitet werden:
   * Es muss ein TypeBuilder für die clientseitige Datenerfassung erstellt werden (im Paket
     js.nice2.optional.qualification.inputtypes Die Klasse sollte den AbstractTypeBuilder erweitern. Folgende
     Methoden sollten definiert/überschrieben werden (diese Methoden sind auch als "ABSTRACT METHODS" im
     AbstractTypeBuilder kommentiert):
     * getStatisticsFieldModel
     * getGridFieldModel
     * cellAfterEdit
     * bindGridData
     * getCustomGridConfig (optional)
     * getMasterDataFieldModel (optional)
 Enum ch.tocco.nice2.optional.qualification.impl.util.entities.InputNode$InputType um den neuen InputType erweitern.
 * Enum ch.tocco.nice2.optional.qualification.impl.drools.facts.qs.RatingType um den neuen InputType erweitern.
 * Die Mappings in /js/nice2/optional/qualification/GenericInputEdit.js um den neuen Typ und den entsprechenden
   TypeBuilder erweitern.
 * Die Drools-Regeln zur Berechnung des neuen Typs in nice2/optional/qualification/module/drools/input-calculate.drl
   erfassen.
 * Eintrag für den "Eingabetyp" auf der DB machen. Das Kürzel muss identisch sein, wie die gewählte Bezeichnung des
   Enums (siehe oben)
 

Extension-Points

Das Interface QualificationServiceExtension ist ein Extension-Point für verschiedene Funktionen des Notenmoduls. Für eine Übersicht über die verfügbaren Erweiterungsmöglichkeiten kann die Dokumentation des Interfaces und deren Methoden in Betracht gezogen werden. Momentan stehen vorallem Erweiterungen zur Anpassung der Darstellung von Excel-Exporten zur Verfügung.