Brainversum · tuxametrics Graph Admin

adr vertraulich owner: matus

ADR-0004: Die vier „unbequemen" Elemente sind Zustände im Datenmodell, keine Darstellungsdetails — und GM-7 verbietet die harte Sperre

ADR-0004: Die vier „unbequemen" Elemente sind Zustände im Datenmodell, keine Darstellungsdetails — und GM-7 verbietet die harte Sperre

Status

Angenommen (2026-08-09)

Kontext

tuxamed Bearbeitet/00-bericht.md §9 schließt den Schnittvorschlag mit einem Absatz, der als Bauanweisung gelesen werden muss:

Der Schnitt behält bewusst alle vier ‚unbequemen' Elemente, weil ohne sie die Demo das Produkt falsch darstellt: die gesperrte Empfehlung mit Grund, die Stufenkappung (GM-1.1), die Konfundierung (GM-1.3) und die informierte Übersteuerung (GM-7.2). Das Material sagt das selbst über den Demofall: eine Konstellation, in der das System bewusst keine Empfehlung erzeugt, ist ‚der fachlich überzeugendste Teil der Demo und darf nicht fehlen.'"

Alle vier haben eine gemeinsame Eigenschaft: Es sind Nicht-Ergebnisse, die trotzdem Ergebnisse sind. Die naheliegende Implementierung — eine Empfehlung, die nicht entsteht, entsteht eben nicht — löscht genau die Information, um die es geht.

Dazu kommt die schärfste Modellregel des Materials, GM-7:

Art Bedeutung Wirkung
Erzeugungsgrenze Grenze dessen, was das System von sich aus vorschlägt Hart. Jenseits davon keine Empfehlung
Entscheidungsgrenze Grenze dessen, was der Therapeut entscheiden darf Existiert nicht. Er kann jederzeit abweichend entscheiden

Und die daraus abgeleitete Modellkonsequenz, wörtlich aus Bearbeitet/domaenen/06-…: „Es darf keine technische Sperre geben, die eine Therapeutenentscheidung verhindert — außer in den zwei Fällen von GM-7.5. Alles andere ist Hinweis + Pflichtbestätigung. Ein Entwurf, der Sicherheitsregeln als harte Validierung implementiert, widerspricht GM-7 frontal."

Entscheidung

1. Gesperrte Empfehlung: eine Zeile mit Status und Grund

Empfehlung.status = GESPERRT + sperrgrund (Enum) + sperrbegruendung (Freitext). Keine fehlende Zeile, kein null, kein Filter.

Der Freitext ist Pflicht, weil die Ansicht „Therapieplan-Entwurf" „jeweils mit Grund" verlangt und ein Enum-Wert kein Grund ist. Die REST-Antwort liefert vorgeschlagen, gesperrt und zurueckgestellt nebeneinander — eine API, die nur vorgeschlagen liefert, wäre fachlich falsch, nicht nur unvollständig.

Der Sperrgrund-Enum trägt drei Werte, die nicht in der Liste von Zeile 1534 stehen (KONFUNDIERUNG_ZURUECKGEHALTEN, STUFENKAPPUNG_KEINE_THERAPIEABLEITUNG, MINDESTINFORMATION_FEHLT). Das ist keine Erfindung: die Liste ist nachweislich nicht abschließend — FACH-070 ergänzt „kritischer Befund", FACH-008 „Verfügbarkeitsklasse" —, und alle drei Werte tragen belegte Nicht-Erzeugungsgründe (GM-1.3 Z. 106, GM-1.1 Z. 102, FACH-067 Z. 1384) in denselben, im Bericht pflichtigen Block „Nicht erzeugte Empfehlungen".

2. Stufenkappung und Konfundierung: zwei Felder, nicht eines

Finding.gekappt + kappungFehlenderParameter (GM-1.1) und Finding.konfundierungsstatus (GM-1.3) sind getrennt, weil das Material sie ausdrücklich unterscheidet:

Beide werden im begruendung-Text ausdrücklich benannt und nicht nur als Flag geführt — FACH-048 verlangt, dass sie „ausdrücklich benannt und nicht nur als Symbol angezeigt" werden. Deshalb ist begruendung NOT NULL und enthält die Wörter STUFENKAPPUNG bzw. KONFUNDIERUNG im Klartext.

Die Dosisobergrenze (FACH-072) ist der zweite Weg, auf dem eine Kappung sichtbar wird: Empfehlung.obergrenzeUeberschritten + zufuhrbilanzText. Geprüft wird die Summe aus bestehender Supplementierung und Empfehlung — „der kritische Fall ist nicht die einzelne hohe Dosis, sondern die Summe […], die auf keinem der drei Etiketten sichtbar ist."

3. Informierte Übersteuerung: eigene Entität, Regel vom System

Uebersteuerung mit beruehrteRegel und regelGrund — beide aus der gesperrten Empfehlung, nie aus dem Request. UebersteuerungCreate trägt genau ein Feld: die Begründung. Ein Therapeut, der die berührte Regel selbst formuliert, wäre nicht informiert worden.

begruendung ist Pflicht bei Ebene E1, optional sonst. Die Ebene ergibt sich aus dem Sperrgrund (TherapieplanService#ebeneVon) und nicht aus dem Request. Die Prüfung liegt im Service und nicht in der Bean-Validation, weil sie vom Kontext abhängt.

regelkandidatErzeugt wird gesetzt, obwohl der Lernprozess (FACH-107, Epic F10) nicht im Schnitt ist — GM-7.4 sagt, eine Übersteuerung verändert das Regelwerk nicht, sondern geht als Kandidat weiter. Die Aussage später zu rekonstruieren wäre teurer als sie jetzt festzuhalten.

4. GM-7 als Verhalten: der Service verweigert nicht, er verlangt

Eine gesperrte Empfehlung kann angenommen werden — nach dokumentierter Übersteuerung. Der Ablehnungsgrund im Fehlerfall lautet nicht „nicht erlaubt", sondern nennt den nächsten Schritt und zitiert GM-7.1 („Kein Vorschlag ist kein Verbot"). Der Ton folgt Zeile 1642: sachlich, warnt ohne zu bevormunden, stellt die Entscheidung nicht als Fehler dar.

Was sehr wohl blockiert, weil es Dokumentations- und keine Therapieentscheidungen sind:

Bewusst implausibler Platzhalter A6: Welcher Freigabepunkt blockiert und welcher nur Hinweis ist, legt das Material nicht fest (OF-04b / E-14). Hier blockieren alle. Das fällt beim ersten Durchspielen auf — genau dafür ist der Platzhalter da (GG-META-0005 §9), und die Fehlermeldung sagt es dazu.

⚠ Dieser Absatz ist seit Backlog v1.2 überholtE-14 ist entschieden, das Material legt es sehr wohl fest. Der Absatz bleibt als alter Stand stehen; die Auflösung steht im Nachtrag v1.2 am Ende dieses ADR.

5. Die MCP-Tools sind ausschließlich lesend

Eine Empfehlung annehmen, eine Regel übersteuern oder einen Fall freigeben sind Handlungen einer Person mit benannter Qualifikation. Eine Übersteuerung ist ausdrücklich die Absicherung des Therapeuten (GM-7.3) — sie kann nicht in seinem Namen von einem Werkzeug erfolgen. Ein schreibendes MCP-Tool wäre technisch trivial und fachlich der eine Fehler, den dieses Produkt sich nicht leisten kann.

Konsequenzen

Nachtrag v1.2 (2026-08-09)

Status bleibt Angenommen. Alle Entscheidungen dieses ADR bleiben gültig. Geändert hat sich genau eine Begründung.

Abschnitt 4 ist an einer Stelle überholt

Dort steht: „Welcher Freigabepunkt blockiert und welcher nur Hinweis ist, legt das Material nicht fest (OF-04b / E-14)." Das ist seit v1.2 falsch. Die Kundenfassung quelle-01-v1.2.md hat E-14 entschieden (FACH-079 Z. 1741–1757): 6 blockierende und 4 nicht blockierende Kategorien, mit Leitgedanke — „Blockiert wird, wo ein Versäumnis zu Patientenrisiko führt oder die Nachvollziehbarkeit einer risikobehafteten Entscheidung fehlt" (Z. 1753) — und mit der Anzeigeregel, blockierende und nicht blockierende Punkte in getrennten Blöcken darzustellen, nicht in einer gemischten Liste mit unterschiedlichen Symbolen (Z. 1755). OF-04b ist damit behoben.

Der Platzhalter A6 ist hinfällig.

Was das für den Code heißt — und was ausdrücklich nicht

Der Code blockiert weiterhin überall. Nachgezogen wurde ausschließlich die Einordnung:

A6 ist ab jetzt kein implausibler Platzhalter mehr, sondern eine bewusst aufgeschobene Änderung.

Der Unterschied ist nicht kosmetisch. Ein implausibler Platzhalter nach GG-META-0005 §9 steht dort, weil niemand die Zahl kennt, und er soll beim ersten Durchspielen auffallen. Eine aufgeschobene Änderung steht dort, weil die Zahl bekannt ist und der Einbau eine eigene Entscheidung braucht. Wer A6 weiterhin als Platzhalter liest, wartet auf eine Antwort, die längst vorliegt.

Die Aufnahme in den Schnitt ist deshalb eine Scope-Erweiterung und steht als Backlog-Eintrag mit der besten Aufwand-Wirkungs-Bilanz aus dem ganzen v1.2-Nachzug: ../../agentic-engineering/backlog/v12-nachzug-scope.md, Punkt 1. Die Leitregel des Nachzugs lautet: korrigiert wird, was v1.2 widerlegt; nicht gebaut wird, was v1.2 neu ermöglicht.

Die Blockade hängt an einer zweiten Entscheidung

Eine der sechs blockierenden Kategorien ist „unsichere Extraktion bei hoher klinischer Tragweite" (FACH-031, Stufen „Hoch" und „Hoch wegen Hebelwirkung"). Bei mittlerer und niedriger Tragweite ist dieselbe unsichere Extraktion nur Hinweis.

Damit gilt: E-14 ist ohne E-5 nicht umsetzbar. Die Blockade braucht die Tragweite-Einstufung je Analyt, die v1.2 in FACH-031 Z. 851–863 ebenfalls erst entschieden hat (vier Stufen, OF-05 behoben).

Konkret an diesem Repo:

Das ist fachlich konsequent, weil CRP das Zink verfälscht und nicht umgekehrt — und es ist genau die Art von Detail, an der in der Demo sichtbar wird, ob das Modell verstanden wurde. Es ist zugleich der Grund, warum A6 nicht „mal eben" abgelöst werden kann: die Umstellung bringt einen zweiten Katalog mit, kein Boolean.

Achtung beim Bauen: Der Werteraum der Tragweite steht in v1.2 zweimal verschieden im Dokument — vier Stufen in FACH-031, drei im Widget „Prüfliste Extraktion" (Z. 1000). Die vierstufige Fassung ist die richtige; die dreistufige verliert ausgerechnet die Stufe, die die CRP-Blockade trägt (OF-76).

Unverändert gültig

Abschnitte 1, 2, 3 und 5 sind von v1.2 nicht berührt. Insbesondere bleibt die Liste „was sehr wohl blockiert, weil es Dokumentations- und keine Therapieentscheidungen sind" unverändert richtig — sie deckt sich mit dem Leitgedanken aus Z. 1753 und war nie Teil des Platzhalters. Und GM-7 bleibt die schärfste Regel: auch die entschiedene Fassung von E-14 blockiert keine Therapieentscheidung, sondern nur fehlende Dokumentation und unbearbeitete Sicherheitspunkte.