Brainversum · tuxametrics Graph Admin

know-how vertraulich owner: matus

TuxAmetrics

TuxAmetrics

Ablauf-Prototyp einer klinischen Entscheidungsunterstützung für die orthomolekulare Medizin: Patient → Befund → Prüfung → Empfehlung → Freigabe → Report.

⛔ Was dieses Repo nicht ist

Keine klinisch validierten Regeln. Die Regelwerksversion heißt R-Global-SYNTH-0 und nicht 1.0, und sie ist von niemandem freigegeben worden.

Geändert nach Backlog v1.2 (2026-08-09) — hier stand bis v1.1: „Keine einzige der 41 Fachtabellen des zugrundeliegenden Materials ist fachlich freigegeben — alle sind als ‚Entwurf', ‚P0-Startbestand' oder ‚vom klinischen Fachexperten zu validieren' gekennzeichnet." Das trifft so nicht mehr zu. Die Kundenfassung quelle-01-v1.2.md hat die sicherheitsrelevanten Kataloge ausdrücklich freigegeben: kritische Schwellen (E-8), Sicherheitswerte der Zufuhr (E-12), Supplement-Interaktionen und Reevaluationsintervalle (E-13), Umrechnungsfaktoren (E-6), Interaktions-/Red-Flag-/Umrechnungskatalog (E-4), Warnzeichenkatalog (E-16). Die drei Sicherheitskataloge sind laut FACH-045 Z. 1165 sogar gemeinsam und aufeinander abgestimmt festgelegt worden. Ohne Freigabe bleiben die Parametertabelle mit den Interpretationsstufen (FACH-003, weiterhin „P0-Startbestand"), die Verhältnistabelle (FACH-040, E-7 offen) und die Referenzfälle (FACH-109, E-18 offen).

Freigegeben heißt trotzdem nicht klinisch validiert, und es heißt nicht gebaut. Was v1.2 neu ermöglicht, ist eine Scope-Erweiterung und steht im Backlog: agentic-engineering/backlog/v12-nachzug-scope.md.

Keine Aussage zur regulatorischen Zulässigkeit. Ob TuxAmetrics für den Laborpfad unter die IVDR und für einen künftigen In-vivo-Pfad unter die MDR fällt, ist ungeklärt und extern zu klären (ADR-0002). Ob der Pilot überhaupt mit echten Fällen arbeiten darf, ebenfalls (ADR-0003). Der Service verweigert den Start, wenn jemand eine der beiden Fragen per Konfiguration beantwortet.

Keine echten Daten. Der einzige Datensatz, den dieses Produkt mitbringt, ist ein synthetischer Referenzfall. Jede Auswertung trägt synthetisch = true.


Der Prüfstein — wörtlich aus der Fachquelle

Die folgende Tabelle steht unverändert in tuxamed, Bearbeitet/00-bericht.md §10. Sie ist die präziseste Beschreibung dessen, wofür dieser Prototyp taugt:

Was der Prototyp beantworten kann Was er nicht beantworten kann
Ist der Ablauf Patient → Befund → Prüfung → Empfehlung → Freigabe → Report richtig geschnitten? Sind die klinischen Regeln richtig?
Sind die richtigen Dinge Pflicht und die richtigen optional? Stimmen die nationalen Höchstmengen und die Eisen-Zielwerte? (OF-10, OF-67)
Ist die Trennung „System schlägt vor / Therapeut entscheidet" (GM-7) in der Oberfläche erkennbar? Ist die Verhältnislogik tragfähig? (E-7 — gar nicht enthalten, auch nach v1.2 nicht)
Versteht ein Therapeut, warum eine Empfehlung nicht erzeugt wurde? Ist die Dosisempfehlung fachlich korrekt?
Ist der Bericht in der Praxis verwendbar? Ist der Pilot rechtlich zulässig? (E-1, E-20 — extern vergeben, nicht beantwortet)

Geändert nach Backlog v1.2 (2026-08-09): Rechts in Zeile 2 stand bis v1.1 „Stimmen die kritischen Schwellen? (E-8)". E-8 ist entschieden (FACH-045 Z. 1137–1165) — die Schwellen sind freigegeben und damit prüfbar statt bloß illustrativ; die Frage wandert nach links. Übrig bleibt als echte Zahlenlücke, dass die nationalen Höchstmengenempfehlungen im Material selbst leer sind (OF-10, Z. 1599) und die Eisen-Zielwerte unbeziffert (OF-67). E-1 und E-20 tragen in v1.2 den neuen Status „→ extern vergeben" (Z. 59 und 78) — das ist ein Statuswechsel, keine Klärung: beide UNGEKLAERT-Platzhalter bleiben unverändert stehen.

Und die ehrliche Gesamtantwort derselben Quelle: „Es liegt sehr viel vor — aber es ist Konzept, nicht Material. […] Ein Prototyp aus diesem Stand allein würde die Struktur des Denkens abbilden, nicht die Realität der Praxis."

Dieselbe Tabelle liefert der Service unter GET /api/txm/v1/tenants/{tenantKey}/systemsteckbrief und das UI als Banner — damit sie nicht nur in dieser Datei steht.


Herkunft und Scope

Die fachliche Quelle liegt in einem anderen Repo: tuxamed, Verzeichnis Bearbeitet/ (anonymisiertes, verifiziertes Extraktionsergebnis nach GG-META-0005). Der Umfang dieses Prototyps ist nicht selbst gewählt, sondern der dort in §9 vorgeschlagene Schnitt „Gold Path E1/E3" — 34 von 108 Stories. Details und Begründung: ADR-0001 und guidelines/project/gold-path-scope.md.

Die Arbeitszone raw/ des Quell-Repos wurde nie geöffnet.

Die vier „unbequemen" Elemente — bewusst behalten

Der Schnitt behält sie, „weil ohne sie die Demo das Produkt falsch darstellt". Wo sie im Code sitzen:

Element Wo es im Modell steht
Gesperrte Empfehlung mit Grund Empfehlung.status = GESPERRT + sperrgrund + sperrbegruendung — eine Zeile mit Grund, kein fehlender Datensatz
Stufenkappung (GM-1.1) Finding.gekappt + kappungFehlenderParameter, Interpretationsstufe 3; daraus Sperrgrund.STUFENKAPPUNG_KEINE_THERAPIEABLEITUNG. Zusätzlich die Dosisobergrenze: Empfehlung.obergrenzeUeberschritten + zufuhrbilanzText (FACH-072)
Konfundierung (GM-1.3) Finding.konfundierungsstatus ∈ {nicht-konfundiert, konfundiert, zurueckgehalten} — ausdrücklich nicht dasselbe wie Kappung
Informierte Übersteuerung (GM-7.2) Eigene Entität Uebersteuerung mit beruehrteRegel + regelGrund (beides vom System, nicht vom Formular) und Pflichtbegründung auf Ebene E1

Was ausdrücklich fehlt

Ebene E2 (Störungsebenen aus Mineralstoff-Verhältnissen) kommt in diesem Repo nirgends vor — kein Enum-Wert, kein Feld, keine Referenz. Zu keinem der sieben Verhältnisse liegt ein Auffälligkeitsbereich vor (OF-01 / E-7). Das Ebene-Enum hat deshalb die Werte E1 und E3; die Lücke ist Absicht und unübersehbar.

Backlog v1.2 hat daran nichts geändert. E-7 blieb offen — einer von zwei Punkten, die v1.2 nicht abgeräumt hat (der andere ist E-18); FACH-040, FACH-050 und FACH-051 sind in v1.2 wörtlich unverändert und werden dort (Z. 28) nicht mehr als Entscheidung, sondern als Ausarbeitung geführt. Der Gold-Path-Schnitt E1/E3 gilt unverändert.

Medikamenten-Interaktionsprüfung findet nicht statt: die Auflösung Handelsname → Wirkstoff hat im Material keine Quelle (OF-07). Die Medikation wird erfasst und angezeigt und trägt dauerhaft interaktionspruefung = nicht-automatisiert-geprueft — sichtbar gemacht, nicht kaschiert.

Keine Dosierungsregel. Das Material enthält Obergrenzen, Reevaluationsintervalle und Kontrollparameter, aber keine einzige Dosierungsregel. Jede erzeugte Empfehlung trägt deshalb dosisstatus = ohne-konkrete-dosis — ein vom Material ausdrücklich vorgesehener, zulässiger Zustand (FACH-067). Eine erfundene Dosis wäre die gefährlichste Zahl in diesem Repo.

Vollständige Liste: guidelines/project/implementation-gaps.md.


Der synthetische Referenzfall

tuxametrics-laborauswertung-service/src/main/resources/init-bundle/praxis01-referenzfall-02.json

Konstellation 2 aus dem Material — CRP erhöht bei erniedrigtem Zink und Selen — mit Positiv- und Negativerwartung, erweitert um Magnesium, 25-OH-Vitamin D, Ferritin und Vitamin B12, damit alle vier unbequemen Elemente in einem Durchlauf sichtbar werden. Jede Zahl darin ist erfunden und als solche gekennzeichnet; das Bundle trägt seine eigenen Erwartungen und Warnungen im Klartext.

Laden: POST /api/txm/v1/tenants/{tenantKey}/demo/referenzfall


Module

Modul Was
tuxametrics-platform-service Capability-Authority (GG-ARCH-SERVICES-0005, Form „eigen"): Tenant, Capability-Katalog, CapabilityGrant, Check-Endpunkt. Port 8125
tuxametrics-virtual-identity-service Identity je Praxis: Personen, Funktionspostfächer, agentische Identitäten. Port 8126
tuxametrics-laborauswertung-service Quarkus Data Service (txm), REST /api/txm/v1, MCP /mcp (nur lesend). Port 8120
tuxametrics-process-hub-cockpit Spring/Flowable-Wrapper, kein Fachcode. Eine Definition (Dokumentationsmodell des Gold Path), keine Instanz. Port 8124
tuxametrics-ui React/TS Domain-Slices (patient, auswertung, therapieplan, bericht, systemsteckbrief), tsc --noEmit

Wer was darf, entscheidet seit 2026-08-10 der tuxametrics-platform-service; wer wer ist, ein eigener Keycloak (Realm digital-labs) — siehe ADR-0005.

Bauen

mvn -f pom.xml test                     # Reactor: 4 Module + ArchUnit-Regeln
cd tuxametrics-ui && npm ci && npm run typecheck

Voraussetzung: Zwirn als Geschwister-Checkout unter ../zwirn, lokal installiert (mvn -f ../zwirn/pom.xml install).

Docker

cp .env.example .env      # ZWIRN_M2 setzen
docker compose build && docker compose up

Der Stack enthält seit 2026-08-10 Keycloak (Realm digital-labs, Port 8180) und die Autorisierungs-Authority tuxametrics-platform-service (Port 8125) — aus 10 Containern sind 15 geworden, aus 4 Postgres 7.

Der Stack ist bewusst fail-closed. Keycloak bringt keinen Nutzer mit, die Authority keinen Grant für einen Menschen: nach docker compose up kann sich niemand anmelden und niemand etwas schreiben. Das ist die richtige Ausgangslage für ein Produkt mit Gesundheitsdaten, nicht ein Defekt. Der Weg zum ersten bedienbaren Login steht in keycloak/README.md und tuxametrics-platform-service/README.md („Erste Grants"). Für den rein synthetischen Referenzfall gibt es TXM_DEMO_GRANTS=true — Default false, und das aus gutem Grund (siehe .env.example).

Noch nicht ausgeführt/verifiziert: docker compose build und ein Vollstart sind weiterhin nicht gelaufen — bei der Erstanlage fehlten .env und OPA-Bundle, am 2026-08-10 hielten 59 Container dreier anderer Produkte rund 10 GB des 15-GB-Docker-Budgets. Verifikationslücke, keine bekannte Fehlfunktion.

Native Image — Pflicht für alles außer diesem Rechner

Zwirns GG-DEVOPS-0003 (Zwirn-ADR-0026) gilt auch hier: jeder nicht-lokale Einsatz — Staging, Produktion und ausdrücklich auch jede Pilotpraxis-Instanz — läuft als natives Image. Ein JVM-Image dort ist ein Regelverstoß. Umgekehrt bleibt lokal JVM der Standard: der docker compose-Aufruf oben ändert sich nicht, weil ein nativer Build Minuten statt Sekunden und zweistellige GB RAM kostet.

Native ist deshalb ein Opt-in-Overlay, kein Ersatz:

# 1. Binary auf dem Host bauen (Minuten, viel RAM — EIN Modul zur Zeit, nicht nebenbei)
mvn -f tuxametrics-platform-service/pom.xml package -DskipTests -Pnative \
  -Dquarkus.native.container-build=true \
  -Dquarkus.native.builder-image=quay.io/quarkus/ubi9-quarkus-mandrel-builder-image:jdk-25

# 2. Nur diesen einen Container tauschen (DB/Keycloak laufen weiter)
docker compose -f docker-compose.yml -f docker-compose.native.yml build tuxametrics-platform-service
docker compose -f docker-compose.yml -f docker-compose.native.yml up -d --no-deps tuxametrics-platform-service

Das Overlay deckt alle drei Quarkus-Module ab. tuxametrics-process-hub-cockpit fehlt dort bewusst und bleibt JVM: Flowable/Spring stützt sich stark auf Reflection und dynamische Proxies — eine benannte Ausnahme, kein Versehen.

„Ein Modul zur Zeit" ist keine Höflichkeitsfloskel. Der Heap-Deckel native-image-xmx=6g steht in allen drei native-Profilen, weil native-image seinen Heap sonst an der sichtbaren Maschine statt am freien Speicher bemisst.

Bei Exit 137 den Deckel SENKEN, nicht erhöhen. 137 ist SIGKILL von außen — der Builder-Container nimmt sich mehr, als frei ist; ein größerer -Xmx macht es schlimmer. Quarkus' eigene Meldung („consider increasing the Xmx value") führt hier in die falsche Richtung. Am 2026-08-10 scheiterten zwei Module mit -Xmx6g und liefen mit -Dquarkus.native.native-image-xmx=4g durch, weil auf der Maschine nur ~4,9 GB frei waren. Vorher docker stats prüfen.

Ein Stack-Neustart über docker-compose.yml allein fällt bewusst auf JVM zurück. Was offen bleibt — insbesondere: kein natives Binary wurde je gestartet, „baut nativ" und „läuft nativ" sind zwei Aussagen — steht in agentic-engineering/backlog/native-image-tooling.md.

Regeln

Globale Regeln (GG-*) liegen im Zwirn-Repo, lokal unter ../zwirn/guidelines/ — dort zuerst lesen. Dieses Repo hält nur produktspezifische PG-*-Regeln unter guidelines/.