/noten — Noten

Hinweis: Rahmen: 00-rahmen.md. Code: packages/plugins/src/noten/ · Nachweis npm run verify:noten.

Wofür

Drei Fragen, die über einer Tabelle keinen Platz haben, ohne sie zu erdrücken: wie hat es sich entwickelt, wo landet es, und reicht es noch.

Der Notenspiegel über der Modultabelle im Studium beantwortet „wie steht es" — Schnitt, Kreditpunkte und Zielschnitt zum gerade sichtbaren Ausschnitt. Dieser Schirm beantwortet den Rest: den Verlauf über die Semester, eine Prognose mit einer angenommenen Note für alles Offene, und ein Urteil darüber, ob ein Wunschschnitt noch erreichbar ist.

Dieser Bereich besitzt keine einzige eigene Zeile. Note, Gewicht, Stand und Semester liegen in study; hierher kommen sie über den Anschluss ANSCHLUESSE.studium?.module(). Das ist der Einwand, den NB03 selbst gegen seinen Entwurf B erhebt, und er stimmt: Abschaltbarkeit, die davon lebt, dass ein anderer Bereich an ist, ist keine. Der Schirm beantwortet die Frage nicht, er stellt sie höflich — mit einem Leerzustand, der sagt, woran es liegt, und einem Knopf dorthin, wo man es ändert.

Eingetragen wird im Notenfenster des Studiums — seit dem 14.10.2026 auch von hier (KN-261014-noten-eintragen): Der Knopf „Note eintragen“ öffnet dasselbe Fenster wie am Modul, mit einer Modulwahl davor. Es kommt über den Anschluss ANSCHLUESSE.studium?.Noteneintrag; der Schirm selbst schreibt weiter nichts, und ein zweites Formular für dasselbe Feld, vor dem NB03 warnt, gibt es nicht. Teilleistungen stehen im selben Fenster (study.md, Das Notenfenster) und hier nur als Tabelle.

Weg und Rahmen

Route/noten
MerkmalSTUDY — dasselbe wie das Studium, aus dem die Daten kommen
Knoten im Rechtebaumgold.noten, aus dem Studium abgeleitet (N149)
ZimmerLesesaal · Lautstärke 2 · Zeichen zielkreuz · Form ring
Farbegeerbt vom Studium (farbe: null, elternteil: 'study')

Kein eigenes Merkmal, und das ist Absicht. Ein zweiter Schalter für eine Sache hieße: Man könnte die Noten anschalten und das Studium aus — und sähe einen Bereich, der garantiert nichts anzeigen kann. Der Nachweis hält fest, dass beide Deklarationen dasselbe feature tragen.

Einen eigenen Knoten gibt es trotzdem (N149, 23.09.2026): gold.noten. Der Baum leitet ihn aus dem Studium ab, mit dessen Herkunft und mit ueber: 'gold.study' im Entscheid, und der Schirm fragt ihn selbst — bereichslage(access, plugin) statt isGranted(STUDY) —, dieselbe Rechnung, mit der die Leiste den Eintrag unter „Mehr" zeigt und rechte_baum die Zeile nennt. Bis zum 23.09.2026 sagte rechte_baum hier „nicht gewährt", während der Schirm lud. Eigene Wege hat Noten nicht; die Zahlen kommen über die Wege des Studiums, und die fragen gold.study (00-rahmen.md, Was fehlt, Punkt 44).

Kein Navigationseintrag in der Leiste, wie bei Tutor und Material: Ein Unterbereich steht hinter „Mehr" am Ende der Bereichszeile, in der Schublade und als Kachel auf der Übersicht.

Kein Suchfeld, keine Abschnitte, kein Anlegefach. Der Rahmen bietet alle drei an; dieser Schirm nimmt keinen davon. Es gibt nichts zu suchen (drei oder vier Blöcke, keine Liste) und nichts zu trennen (die Blöcke gehören zusammen und lesen sich von oben nach unten). Die Note ist kein Anlegefach, weil sie ein Fenster mit Liste und Teilleistungen braucht; ihr Knopf steht rechts über dem Verlauf.

Was man sieht

Oben rechts der Knopf „Note eintragen“, sobald die Module geladen sind. Er öffnet das Notenfenster des Studiums mit dem Feld „Modul“ vorn; vorgewählt ist das zuletzt gewählte Modul (im Browser gemerkt unter denotato.noten.zuletzt, eine Kontospur, die beim Abmelden geht), sonst das erste — bei einem einzigen also dieses. Danach Note, Tag, Versuch, Prüfung (die einzige des Moduls ist vorbelegt) und „Eintragen“; nach dem Eintragen lädt der Schirm die Module neu, und Verlauf und Prognose ziehen mit, ohne dass man den Schirm verlässt.

Drei Blöcke untereinander, in der Reihenfolge der Fragen; hat ein Modul Teilleistungen, steht nach dem Verlauf ein vierter.

1 · Verlauf — eine Tabelle mit einer Zeile je Semester:

SpalteWas darin steht
Semester3. Semester, oder ohne Semester für Module, die keinem zugeordnet sind
Modulewie viele davon in diesem Semester benotet sind
Schnittder Schnitt dieses Semesters, gewichtet mit Kreditpunkten
Gesamtder laufende Gesamtschnitt bis einschließlich dieses Semesters
Punktedie bis dahin gesammelten Kreditpunkte

Die Notenskala des Kontos gilt für alles auf dem Schirm (VA-261008-notenskala, 08.10.2026). Sie kommt mit den Modulen (account_scale, aus der Hochschule des Kontos, später auch aus deren Standort) und ist ohne Hochschule deutsch: 1,0 bis 5,0, kleiner ist besser. Auf der Skala bis 20 steht jede Note mit „/20" dahinter („14,5/20"), die Prognose ist mit 15 vorbelegt statt mit 2,5, der Platzhalter des Ziels heißt 14 statt 2,0, „knapp" beginnt bei 16 statt bei 1,5 — und jeder Vergleich läuft in der Richtung der Skala. Noten, die auf einer anderen Skala stehen als der des Kontos, rechnet der Schnitt nicht mit (Christian am 08.10.2026: gezählt, nicht umgerechnet); der Notenspiegel im Studium nennt sie. Seit dem 11.10.2026 (VA-261010-schulnoten-1-bis-6-0) gibt es auch Schulnoten 1 bis 6 (bestanden bis 4, eine Nachkommastelle, gezeigt als „2“ oder „2,3“) und 0 bis 15 Punkte (bestanden ab 5, ganze Punkte); keine von beiden trägt einen Nachsatz.

Module ohne Semester stehen unten, nicht oben: Sie sind der Rest, kein Anfang. Wo keine Note ist, steht ein Strich und keine Null — „0,0" wäre eine Behauptung über einen Stand, den niemand gemeldet hat.

Teilleistungen (VA-261010-teilleistungen, 11.10.2026) — nur, wenn mindestens ein Modul Teile hat, und nur diese Module, in der Reihenfolge der Modulliste. Darüber der Satz „Gewichtet und auf die Stellen der Skala abgeschnitten, nicht gerundet. Eine eingetragene Gesamtnote geht vor."

SpalteWas darin steht
Modulder Name
Teileje Teil Name, Anteil und Note („Klausur 60 %: 2,3"), „offen", solange die Note fehlt; getrennt mit „·"
Aus den Teilendie gewichtete Note, auf die Stellen der Skala abgeschnitten — 60 % 2,3 und 40 % 1,7 ergeben 2,06, also 2,0; ein Strich, solange ein Teil offen ist
Es zählt„die eingetragene", wenn ein Noteneintrag vorgeht, sonst „die berechnete" oder ein Strich

Abgeschnitten, nicht gerundet, und zwar zur kleineren Zahl. Auf den Skalen, auf denen kleiner besser ist, fällt das zur besseren Seite, wie es die Prüfungsordnungen vorschreiben; auf 0 bis 20 und 0 bis 15 fällt es zur schlechteren, und das Bestehen ändert sich dort nie. Gerechnet hat schon der Server; die Zahl in der Spalte ist dieselbe, die in die Modulnote und damit in Verlauf, Prognose und Ziel eingeht.

2 · Prognose — ein Eingabefeld und drei Zahlen:

FeldWas darin steht
Ist-Schnittder heutige Stand, mit der Zahl der benoteten Module darunter
Angenommen am Endederselbe Schnitt, wenn jedes offene Modul die eingetragene Note bekäme
Abstanddie Differenz, mit einem Satz daneben

Ist und Annahme stehen nebeneinander und tragen verschiedene Marken. BE20 verlangt das ausdrücklich: getrennt angezeigt, damit niemand eine Simulation für einen Stand hält. Der Abstand dazwischen ist die eigentliche Auskunft — er ist das, was man noch in der Hand hat.

Der Satz unter dem Abstand, weil die Zahl allein irreführt. Deutsche Noten sind kleiner, wenn sie besser sind; ein +0,3 sieht trotzdem nach Gewinn aus. Deshalb steht daneben „So viel schlechter als jetzt" oder „So viel besser als jetzt" und nicht nur ein Vorzeichen. Auf der Skala bis 20 ist ein Plus ein Gewinn; welcher Satz dasteht, entscheidet die Skala.

Seit dem 23.09.2026 steht vor diesem Satz ein Zeichen (N134): vor „schlechter" ein Pfeil nach unten (runter), vor „besser" ein Pfeil nach oben (hoch) — beide in der Statusfarbe (Warn- bzw. Erfolgsfarbe), das Wort selbst bleibt neutral. Die Zuordnung steht als ABSTANDSZEICHEN in Notenschirm.tsx, geprüft in client/zeichen.test.ts.

3 · Ziel — ein Eingabefeld, eine Zahl und ein Satz. Die Zahl ist der Schnitt, den die offenen Module zusammen noch bringen müssten; der Satz ordnet sie ein. Es gibt sechs davon, und jeder hat einen Grund:

UrteilWannWas dasteht
leernichts zu rechnen„Noch nichts zu rechnen — keine Note, kein Gewicht."
sicherBestehen genügt„Das reicht schon — bestehen genügt für dieses Ziel."
machbarder nötige Schnitt liegt im gewöhnlichen Bereichdie Zahl mit „brauchen die offenen Module im Schnitt"
knappnötig wäre 1,5 (bis 20: 16) oder besser„Das wird knapp — so gut müsste ab jetzt alles laufen."
unmoeglichselbst die beste Note in allem Offenen reicht nicht„Nicht mehr erreichbar — selbst mit 1,0 (20/20) in allen offenen Modulen." — statt der Zahl steht ein Strich
verfehltnichts mehr offen, Schnitt verfehlt das Ziel„Nichts mehr offen, und der Schnitt verfehlt das Ziel."

Vier der sechs Urteile tragen seit dem 23.09.2026 ein Zeichen davor (Guide-Festlegung B): sicher einen Haken in Erfolgsfarbe; knapp eine Warnung in Warnfarbe; unmoeglich und verfehlt dieselbe Warnung in Gefahrfarbe. leer und machbar bleiben ohne Zeichen — beide sind kein Urteil über gut oder schlecht, sondern ein Zwischenstand. Die Farbe geht ausdrücklich an das Zeichen (farbe={theme.colors.status.…}), weil der Bereich selbst farbe: null trägt und sonst die allgemeine App-Farbe griffe statt der Statusfarbe. Die Zuordnung steht als URTEILSZEICHEN in Notenschirm.tsx, geprüft in client/zeichen.test.ts.

Bei unmoeglich verschwindet die Zahl. „Du bräuchtest 0,7" ist rechnerisch richtig und nutzlos, solange nicht danebensteht, dass es diese Note nicht gibt — und wer die Zahl daneben stehen lässt, lädt zum Nachrechnen ein, ob 0,7 nicht doch irgendwie ginge.

Vier Leerzustände, vier Ursachen, vier Sätze — und einer davon hat keinen nächsten Schritt:

LageWannKnopf
ohneNotenModule ja, keine einzige Note — „Noch kein Modul trägt eine Note.“„Note eintragen“ — öffnet das Notenfenster hier
ohneModulegar keine Module — „Noch kein Modul angelegt.“, gleich nach dem Laden„Modul anlegen" — führt mit offenem Anlegefach hin; „Note eintragen“ fehlt, weil es kein Modul gäbe
ausgeschaltetder Baum erlaubt gold.noten, aber das Studium ist abgeschaltet„Studium einschalten"
nichtGewaehrtder Baum erlaubt gold.noten nicht — heute: kein Studiumkeiner — der Satz nennt die Verwaltung
nichtGebautdas Verzeichnis study ist nicht im Baukeiner

ohneNoten und ohneModule sind nicht dasselbe, obwohl beide eine leere Rechnung ergeben. „Trag eine Note ein" schickt jemanden mit null Modulen auf eine Seite, auf der er nichts findet, wovon er eine Note eintragen könnte.

Was man tun kann

Mehr nicht. Der Schirm selbst schreibt nichts, löscht nichts und speichert nichts — das tut das Notenfenster des Studiums; beide Eingabefelder leben im Browser und sind nach einem Neuladen wieder leer.

Scheitert das Laden der Module, hängt der Schirm nicht in der Ladeanzeige fest (F28b, 23.09.2026): Der Ladezustand kommt aus useMenuScreen und nicht aus der Komponente selbst; ein try/finally setzt ihn zurück, auch wenn die Anfrage wirft — useBusyLock passt hier nicht.

Woher die Daten kommen

Kein eigener Endpunkt. Gelesen wird mit einem Aufruf, ANSCHLUESSE.studium?.module(), eingelöst in packages/plugins/src/anschluesse.client.ts durch fetchModules — dahinter der Endpunkt STUDY_MODULES des Studiums.

Das Fragezeichen ist der Zweck. Wer importiert, kann nicht abschalten; wer fragt, muss das Fehlen beantworten. Ist study nicht gebaut, ist ANSCHLUESSE.studium schlicht undefined, und der Schirm sagt das, statt beim Übersetzen zu scheitern.

Der Anschluss liefert readonly Record<string, unknown>[] — mit Absicht ungetippt („wer die Liste nur zeigt, soll sich nicht an die Spalten binden"). Verengt wird sie auf dieser Seite der Naht, in shared/modulzeile.ts: alsModulzeilen() nimmt, was es versteht, und lässt den Rest fallen. Zeilen ohne id oder name fliegen heraus; grade kommt als Zeichenkette an (eine numeric-Spalte gibt pg so zurück) und wird gelesen; eine 0 gilt als keine Note. Die Teilleistungen kommen in derselben Zeile (parts, parts_grade, grade_origin) und werden in shared/teilleistungsmodul.ts verengt: alsTeilleistungsmodule() lässt Teile ohne Namen oder Anteil fallen und Module ohne lesbaren Teil auch.

Gerechnet wird in shared/, ohne React und ohne Datenbank (Grundsatz 59): semesterverlauf(), prognose() und zielstand() in shared/notenverlauf.ts, aufgesetzt auf notenstand() und noetigerSchnitt() aus @shared/handlers/study/notenschnitt.ts — dieselbe Rechnung, die auch der Notenspiegel im Studium benutzt. 42 Proben (modulzeile.test.ts, notenverlauf.test.ts, teilleistungsmodul.test.ts), dazu zwölf zur Lage (client/lage.test.ts). Die Teilleistungsnote selbst rechnet @shared/handlers/study/teilleistungen.ts. Der jsdom-Test client/Notenschirm.test.tsx hält den Block fest: 2,06 wird 2,0, ein Eintrag geht vor, ohne Teile kein Block — und seit dem 14.10.2026 den Knopf „Note eintragen“: im Leerzustand mit dem einzigen Modul vorgewählt, mit Noten mit dem zuletzt benutzten, ohne Modul gar nicht, dafür „Modul anlegen“. Das Fenster selbst prüft study/client/Noteneintrag.test.tsx.

Kein useListenstand. Daten, die durch einen Anschluss kommen, gehören nicht in den gemeinsamen Listenstand (00-rahmen.md §7) — er gehört dem Bereich, dem die Daten gehören, und das ist hier ein anderer.

Was fehlt

  1. Keine Prüfungsordnung. Gerechnet wird gewichtet nach Kreditpunkten, sonst nichts — keine Freiversuche, keine Wiederholungen, kein Best-of-3, keine ungewichteten Module. Über dem Verlauf steht „ohne Prüfungsordnung", damit die Zahl nicht mehr behauptet, als sie kann. Die Regeln als Daten je Studiengang sind BE20 und Christians Entscheidung; NB03 hat dazu den Befund beigesteuert, dass module_progress.grade mit Primärschlüssel (user_id, module_id) zwei der vier Beispielregeln gar nicht tragen kann. Das ist seit dem 24.09.2026 behoben: Noten sind Einträge mit Tag, Versuch und Herkunft (study.grade_entries, Wanderung 139), und grade in der Modulzeile ist die daraus gerechnete Note des Moduls. Die Regeln selbst fehlen weiter — sie warten auf den Wortlaut der Ordnung.
  2. Keine Semesterziele. study.semesters.credit_goal gibt es; der Verlauf zeigt die erreichten Punkte, aber nicht, was geplant war. Eine Spalte „Ziel" und ein Ring daneben wären der ganze Bau — S-study 20 sagt dasselbe aus der anderen Richtung.
  3. Die Prognose kennt nur eine Note für alles. „Jedes offene Modul mit 2,5" ist eine grobe Annahme. Je Modul eine eigene Simulationsnote wäre die ehrlichere Rechnung, braucht aber eine Liste statt einer Zahl — und damit die Frage, ob die Annahmen gespeichert werden.
  4. Nichts wird gespeichert. Angenommene Note und Zielschnitt stehen nach einem Neuladen wieder auf der Vorgabe. Ein Zielschnitt ist aber eine Absicht und keine Suchanfrage; er gehört an das Konto, nicht in ein Eingabefeld.
  5. Keine Notenverteilung. Wie oft eine 1,x, wie oft eine 4,0 — das ist eine andere Frage als der Schnitt und in einem Balkenbild sofort zu sehen. Der Schnitt allein verdeckt, ob er aus lauter 2,3 oder aus 1,0 und 3,7 entsteht.
  6. Kein Weg von hier zu einem einzelnen Modul — außer über die Modulwahl im Notenfenster. Die Verlaufstabelle nennt Semester, nicht Module; wer wissen will, welches Modul den Schnitt zieht, muss ins Studium und dort suchen. Eine ausklappbare Zeile mit den Modulen des Semesters wäre der kurze Weg.
  7. Keine Noten außerhalb des Studiums. Ein Sprachkurs, eine Fahrprüfung, ein Schulzeugnis, eine Weiterbildung — dafür gibt es in Denotato keinen Ort, und dieser Bereich ändert daran nichts, weil er nur Module liest. Das war in NB03 einer der Gründe für einen eigenen Bereich und ist mit dem Bau nicht eingelöst.
  8. Zwei Schirme für dieselbe Zahl. Der Notenspiegel über der Modultabelle rechnet über die sichtbaren Zeilen, dieser Schirm über alle. Beide benutzen notenschnitt.ts, also driften sie heute nicht auseinander — aber jede künftige Regel muss an beide gedacht werden. Ob der Notenspiegel bleibt, ist offen.
  9. Kein Bild, nur Zahlen. Ein Verlauf ist eine Kurve, und eine Tabelle mit fünf Spalten ist die umständlichste Art, eine Kurve zu lesen. Eine Tafel wie auf /flashcards wäre hier richtiger — der Bereich trägt nicht umsonst die Form ring.
  10. Der Leerzustand nichtGebaut ist ungetestet gegen die Wirklichkeit. Er greift, wenn ANSCHLUESSE.studium fehlt; ausgebaut wurde study noch nie, also hat diesen Satz noch niemand gesehen.
  11. Keine Ansicht, kein Reiter, keine Sortierung. Der Verlauf steht in der Reihenfolge der Semester und sonst gar nicht. Nach Schnitt zu sortieren wäre für die Frage „welches Semester war das schlechteste" der direkte Weg.
  12. Kein MCP-Werkzeug. Was der Schirm rechnet, kann ein Modell nicht abfragen — studium_module liefert die Zeilen, den Verlauf und die Prognose müsste es selbst nachbauen. Solange es keinen eigenen Endpunkt gibt, wäre das Werkzeug allerdings eine Rechnung im MCP-Server, und die gehört dort nicht hin.