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:
- Kappung: Pflicht-Kontextparameter fehlt → Interpretation auf maximal Stufe 3, keine Therapieableitung. Kein Wegfall der Interpretation — das ist der fachliche Kern und wird häufig falsch verkürzt.
- Konfundierung: Kontextparameter liegt vor, ist aber selbst pathologisch → nicht die Kappung, sondern Kennzeichnung und ggf. vollständiges Zurückhalten.
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:
- ein durchgeführter Gesamtplan-Check als Freigabevoraussetzung (ohne Treffer ist keine),
- unbearbeitete Pflichtpunkte („bearbeitet" = entschieden, nicht ausgeräumt),
- die Sammelfreigabe bei Risikoklasse
R2/R3, - eine Änderung an einem bereits freigegebenen Fall (
409, Versionskette statt Update), - ein unvollständiger Bericht wird nicht als final ausgegeben.
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 überholt —
E-14ist 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
- + Die Demo zeigt, was das Produkt tatsächlich auszeichnet: nachvollziehbare Nicht-Empfehlungen. Der synthetische Referenzfall erzeugt vier verschiedene Sperrgründe und genau eine vorgeschlagene Empfehlung.
- + Ein Therapeut sieht in jedem Fall, warum etwas nicht vorgeschlagen wurde — die Frage, die §10 als eine von fünf beantwortbaren nennt.
- +
GM-7ist maschinell prüfbar geworden:ReferenzfallGoldPathTestbeweist, dass eine gesperrte Empfehlung nach Übersteuerung annehmbar ist und ohne sie nicht. - − Das Datenmodell ist teurer als die naive Variante: fünf gesperrte Empfehlungen sind fünf Zeilen mit Begründungstexten, die niemand „braucht", bis jemand fragt, warum nichts empfohlen wurde.
- − Der
Sperrgrund-Enum wächst über die im Material genannte Liste hinaus. Wer die Liste als abschließend liest, hält das für eine Abweichung. Deshalb steht die Begründung im Enum-Javadoc und hier — und die drei Ergänzungen sind einzeln mit Fundstelle belegt. - − „Alle Freigabepunkte blockieren" (A6) macht den Gold Path in der Demo länger, als er sein
müsste: jede der sechs Empfehlungen muss entschieden werden, bevor freigegeben werden kann. Das ist
der Preis eines implausiblen Platzhalters und verschwindet mit der Antwort auf
OF-04b.
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:
- Zink steht auf „Mittel" (Z. 857) — der Leitanalyt des synthetischen Referenzfalls. Eine unsicher erkannte Zink-Zeile hält die Freigabe damit nicht auf.
- CRP steht auf „Hoch wegen Hebelwirkung" (Z. 858) — eine unsicher erkannte CRP-Zeile schon.
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.