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-0und nicht1.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.mdhat 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 lautFACH-045Z. 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-7offen) und die Referenzfälle (FACH-109,E-18offen).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/.