clean / centralize

This commit is contained in:
marcus hinz
2026-06-20 12:15:26 +02:00
parent 0b159bcefc
commit 4fde597f62
20 changed files with 1469 additions and 27 deletions
+1
View File
@@ -3,6 +3,7 @@
- Sachlicher Ton, normales ruhiges Deutsch. Kein Motivieren, Loben oder Bedauern, keine Werbe-/Selbst-Slogans.
- So knapp wie möglich: nur Fakten, keine Füllabsätze, keine Wiederholung meiner Aussagen, keine Annahmen über den Kontext.
- Nur handeln, wenn ich es ausdrücklich sage. Sonst nur antworten/erklären.
- Eine konkrete Frage NUR beantworten — exakt das Gefragte, nicht mehr. Ja/Nein-Frage = Ja/Nein. Kein Entwerfen, keine Optionen, keine Lösung, kein Vorschlag, keine ungefragte Recherche/Investigation — auch nicht, wenn etwas falsch, gefährlich oder verbesserungswürdig aussieht. Ein auffälliger Punkt wird höchstens in einem Halbsatz benannt, nicht ausgearbeitet.
- Keine Vorschläge für weiteres Vorgehen oder was man sonst noch machen könnte.
- Positiv formulieren: beschreiben, was der Code tut / was getan wurde — nicht, was man nicht tut. Negationsketten vermeiden.
- Bei Unsicherheit „weiß ich nicht" / „unklar" sagen, statt mit generischem Text aufzufüllen.
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# git-sync — add/commit/pull --rebase/push a single repo.
# Safe: rebases onto remote, never merges, never force-pushes; conflicts are
# reported (rebase aborted), not auto-resolved.
# Usage: git-sync <dir> [commit-message]
# Invoked by the /git-sync slash command, once per configured project repo.
set -uo pipefail
dir=${1:?usage: git-sync <dir> [message]}
msg=${2:-}
# expand leading ~ (not expanded inside variables) so $HOME-based paths work
case "$dir" in
"~") dir="$HOME" ;;
"~/"*) dir="$HOME/${dir#"~/"}" ;;
esac
ok() { printf '\033[1;32m✓ %s\033[0m\n' "$*"; } # green
note() { printf '\033[1;36m· %s\033[0m\n' "$*"; } # cyan
warn() { printf '\033[1;33m⚠ %s\033[0m\n' "$*"; } # yellow
g() { git -C "$dir" "$@"; }
label=$(basename "$dir")
if ! g rev-parse --is-inside-work-tree >/dev/null 2>&1; then
warn "$label: kein Git-Repo — übersprungen."
exit 0
fi
branch=$(g rev-parse --abbrev-ref HEAD)
# --- commit working-tree changes -------------------------------------------
if [[ -n "$(g status --porcelain)" ]]; then
g add -A
[[ -z "$msg" ]] && msg="git-sync: $(date '+%Y-%m-%d %H:%M')"
if g commit --quiet -m "$msg"; then
note "$label: committed — $msg"
else
warn "$label: commit fehlgeschlagen."
exit 0
fi
else
note "$label: keine Änderungen."
fi
# --- pull --rebase, then push (no force, no merge) -------------------------
if ! g remote get-url origin >/dev/null 2>&1; then
note "$label: kein origin-Remote — push übersprungen."
exit 0
fi
if g rev-parse --abbrev-ref --symbolic-full-name '@{u}' >/dev/null 2>&1; then
# integrate remote first: rebase keeps history linear, no merge commits
g fetch --quiet 2>/dev/null || true
behind=$(g rev-list --count 'HEAD..@{u}' 2>/dev/null || echo 0)
if [[ "$behind" -gt 0 ]]; then
if g pull --rebase --quiet 2>/dev/null; then
note "$label: $behind Commit(s) per Rebase integriert."
else
g rebase --abort >/dev/null 2>&1 || true
warn "$label: Pull/Rebase-Konflikt — bitte manuell lösen. Push übersprungen."
exit 0
fi
fi
ahead=$(g rev-list --count '@{u}..HEAD' 2>/dev/null || echo 0)
if [[ "$ahead" -eq 0 ]]; then
note "$label: nichts zu pushen."
elif g push --quiet 2>/dev/null; then
ok "$label: $ahead Commit(s) gepusht ($branch)."
else
warn "$label: push abgelehnt — Remote voraus. Manuell prüfen."
fi
else
if g push --quiet -u origin "$branch" 2>/dev/null; then
ok "$label: Upstream gesetzt und gepusht ($branch)."
else
warn "$label: kein Upstream, push fehlgeschlagen — einmal manuell pushen."
fi
fi
+24
View File
@@ -0,0 +1,24 @@
---
description: Commit + Push aller persistent konfigurierten Projekt-Repos
---
Du committest und pushst die persistent hinterlegten Projekt-Verzeichnisse
(`permissions.additionalDirectories` aus den Settings) — nicht das CWD.
1. Verzeichnisse sammeln (Projekt-, lokale, User-Settings, dedupliziert):
```bash
for f in .claude/settings.json .claude/settings.local.json "$HOME/.claude/settings.json"; do
[ -f "$f" ] && jq -r '.permissions.additionalDirectories[]?' "$f" 2>/dev/null
done | sort -u | sed "s|^~/|$HOME/|"
```
2. Für jedes Verzeichnis, das ein Git-Repo ist: aus `git -C <dir> status` und
`git -C <dir> diff --staged --stat` plus `git -C <dir> diff --stat` eine knappe,
sachliche einzeilige Commit-Message auf Deutsch erzeugen (beschreibt, was geändert wurde).
3. Pro Verzeichnis aufrufen:
```bash
"$HOME/claude-projects/global/bin/git-sync" "<dir>" "<message>"
```
4. Ergebnisse pro Repo zusammenfassen: committed / gepusht / nichts zu tun / abgelehnt.
Verändere nichts außerhalb dieser Verzeichnisse. Kein force, kein merge — das Skript
ist darauf ausgelegt und meldet Konflikte nur, statt sie aufzulösen.
+21
View File
@@ -0,0 +1,21 @@
{
"enabledPlugins": {
"frontend-design@claude-plugins-official": true
},
"promptSuggestionEnabled": false,
"awaySummaryEnabled": false,
"theme": "dark",
"permissions": {
"allow": [
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push:*)",
"Bash(git pull:*)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git -C:*)",
"Bash(git mv:*)",
"Bash(git check-ignore:*)"
]
}
}
+362
View File
@@ -0,0 +1,362 @@
<mxfile host="Electron" pages="3">
<diagram id="as-is" name="AS-IS (heute)">
<mxGraphModel dx="1171" dy="929" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="AS-IS — heutige Landschaft (MVZ Ludwigsburg)" vertex="1">
<mxGeometry height="26" width="700" x="60" y="20" as="geometry" />
</mxCell>
<mxCell id="abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="AB+M&#xa;Order Entry&#xa;30% Musterschein / 70% digital" vertex="1">
<mxGeometry height="72" width="190" x="80" y="70" as="geometry" />
</mxCell>
<mxCell id="laccess" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="72" width="160" x="300" y="70" as="geometry" />
</mxCell>
<mxCell id="mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="72" width="160" x="500" y="70" as="geometry" />
</mxCell>
<mxCell id="bottleneck" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;fontStyle=2;" value="Nur 1 LDT an CLAB · AB+M muss zuerst abgeschlossen sein → Engpass" vertex="1">
<mxGeometry height="34" width="580" x="80" y="180" as="geometry" />
</mxCell>
<mxCell id="clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontStyle=1;fontSize=14;" value="CLAB&#xa;(LIS)" vertex="1">
<mxGeometry height="90" width="240" x="300" y="320" as="geometry" />
</mxCell>
<mxCell id="ipu" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Sysmex&#xa;Extended IPU" vertex="1">
<mxGeometry height="60" width="150" x="60" y="520" as="geometry" />
</mxCell>
<mxCell id="myla" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Myla → Maestria" vertex="1">
<mxGeometry height="60" width="150" x="230" y="520" as="geometry" />
</mxCell>
<mxCell id="labops" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="LabOps" vertex="1">
<mxGeometry height="60" width="120" x="400" y="520" as="geometry" />
</mxCell>
<mxCell id="mwrest" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Desuri (bidir.) · Biomerieux&#xa;Liason · Firetransfer&#xa;(je eigene P2P-Anbindung)" vertex="1">
<mxGeometry height="60" width="240" x="540" y="520" as="geometry" />
</mxCell>
<mxCell id="devs" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Geräte: Sysmex-Straße · Atras SL (1)/(2) Schüttgutsortierer · Analyzer" vertex="1">
<mxGeometry height="50" width="720" x="60" y="650" as="geometry" />
</mxCell>
<mxCell id="sdgroup" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#B85450;dashed=1;verticalAlign=top;fontStyle=1;fontColor=#B85450;" value="Stammdaten-Inseln — Doppelpflege" vertex="1">
<mxGeometry height="210" width="380" x="820" y="300" as="geometry" />
</mxCell>
<mxCell id="sd1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="CLAB-Stammdaten&#xa;(selbst generiert)" vertex="1">
<mxGeometry height="55" width="160" x="840" y="340" as="geometry" />
</mxCell>
<mxCell id="sd2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="SinaCRM&#xa;(separate Pflege z. LIS)" vertex="1">
<mxGeometry height="55" width="160" x="1020" y="340" as="geometry" />
</mxCell>
<mxCell id="sd3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="MySQL&#xa;(Support-Requests)" vertex="1">
<mxGeometry height="55" width="160" x="840" y="430" as="geometry" />
</mxCell>
<mxCell id="sd4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="OTS / Znooni&#xa;(Leistungsverzeichnis)" vertex="1">
<mxGeometry height="55" width="160" x="1020" y="430" as="geometry" />
</mxCell>
<mxCell id="rgroup" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#82B366;dashed=1;verticalAlign=top;fontStyle=1;fontColor=#82B366;" value="Roche / Analytics" vertex="1">
<mxGeometry height="260" width="380" x="820" y="650" as="geometry" />
</mxCell>
<mxCell id="ccm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="2 × CCM" vertex="1">
<mxGeometry height="50" width="120" x="840" y="690" as="geometry" />
</mxCell>
<mxCell id="navify" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="Roche Navify LabOps&#xa;(auch Archivierung)" vertex="1">
<mxGeometry height="50" width="200" x="980" y="690" as="geometry" />
</mxCell>
<mxCell id="ranalytics" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="Monitoring von Roche · Analytics (CCM-Daten)&#xa;Roche Integrater · Average of normals" vertex="1">
<mxGeometry height="60" width="340" x="840" y="760" as="geometry" />
</mxCell>
<mxCell id="sinabi" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="SinaBI (PowerBI)" vertex="1">
<mxGeometry height="45" width="160" x="840" y="840" as="geometry" />
</mxCell>
<mxCell id="e1" edge="1" parent="1" source="abm" style="endArrow=classic;html=1;fontStyle=2;" target="clab" value="LDT">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e2" edge="1" parent="1" source="laccess" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e3" edge="1" parent="1" source="mdn" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e4" edge="1" parent="1" source="ipu" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" edge="1" parent="1" source="myla" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e6" edge="1" parent="1" source="labops" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e7" edge="1" parent="1" source="mwrest" style="endArrow=classic;startArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e8" edge="1" parent="1" source="devs" style="endArrow=classic;html=1;dashed=1;" target="ipu">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e9" edge="1" parent="1" source="devs" style="endArrow=classic;html=1;dashed=1;" target="mwrest">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r1" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd2" value="separate Pflege">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r2" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;" target="sd1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r3" edge="1" parent="1" source="sd2" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd4" value="manuelles Mapping (Links)">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r4" edge="1" parent="1" source="sd1" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd3" value="Doppelpflege">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="g1" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;" target="navify">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="g2" edge="1" parent="1" source="ccm" style="endArrow=classic;html=1;" target="ranalytics">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="to-be" name="TO-BE (Ziel)">
<mxGraphModel dx="1240" dy="1964" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="980" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="t_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE — Integration Server mit Single Point of Truth" vertex="1">
<mxGeometry height="26" width="700" x="60" y="-30" as="geometry" />
</mxCell>
<mxCell id="leg_t" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="70" x="60" y="18" as="geometry" />
</mxCell>
<mxCell id="leg_e" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="125" y="16" as="geometry" />
</mxCell>
<mxCell id="leg_f" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="215" y="16" as="geometry" />
</mxCell>
<mxCell id="gC0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="64" width="170" x="120" y="90" as="geometry" />
</mxCell>
<mxCell id="gB0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="64" width="170" x="400" y="90" as="geometry" />
</mxCell>
<mxCell id="gA0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="64" width="170" x="700" y="90" as="geometry" />
</mxCell>
<mxCell id="srv" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8F8F8;strokeColor=#999999;verticalAlign=top;fontStyle=1;fontSize=14;" value="Integration Server" vertex="1">
<mxGeometry height="420" width="850" x="60" y="250" as="geometry" />
</mxCell>
<mxCell id="absC" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="120" y="300" as="geometry" />
</mxCell>
<mxCell id="absB" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="400" y="300" as="geometry" />
</mxCell>
<mxCell id="absA" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Order Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="700" y="300" as="geometry" />
</mxCell>
<mxCell id="db" parent="1" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;boundedLbl=1;backgroundOutline=1;size=14;verticalAlign=middle;" value="&lt;b&gt;Single Point of Truth&lt;/b&gt;&lt;br&gt;canonical store&lt;br&gt;konsolidiert: Stammdaten · SinaCRM · Leistungsverzeichnis (OTS/Znooni)" vertex="1">
<mxGeometry height="115" width="350" x="320" y="390" as="geometry" />
</mxCell>
<mxCell id="zd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;verticalAlign=top;fontStyle=1;" value="Central Services" vertex="1">
<mxGeometry height="105" width="560" x="210" y="545" as="geometry" />
</mxCell>
<mxCell id="zd1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="50" width="160" x="230" y="580" as="geometry" />
</mxCell>
<mxCell id="zd2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="50" width="180" x="405" y="580" as="geometry" />
</mxCell>
<mxCell id="zd3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Monitoring&#xa;(Roche Analytics)" vertex="1">
<mxGeometry height="50" width="150" x="600" y="580" as="geometry" />
</mxCell>
<mxCell id="lis" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LIS (CLAB)" vertex="1">
<mxGeometry height="60" width="170" x="120" y="730" as="geometry" />
</mxCell>
<mxCell id="ga" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device Abstraction&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="70" width="210" x="680" y="725" as="geometry" />
</mxCell>
<mxCell id="ger" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="60" width="210" x="680" y="850" as="geometry" />
</mxCell>
<mxCell id="eC" edge="1" parent="1" source="gC0" style="endArrow=classic;html=1;rounded=0;" target="absC">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="eB" edge="1" parent="1" source="gB0" style="endArrow=classic;html=1;rounded=0;" target="absB">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="eA" edge="1" parent="1" source="gA0" style="endArrow=classic;html=1;rounded=0;" target="absA">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nC" edge="1" parent="1" source="absC" style="endArrow=classic;html=1;rounded=0;" target="db">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nB" edge="1" parent="1" source="absB" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="db" value="normalize">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nA" edge="1" parent="1" source="absA" style="endArrow=classic;html=1;rounded=0;" target="db">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uni" edge="1" parent="1" source="db" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="zd" value="canonical">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bLis" edge="1" parent="1" source="lis" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.15;entryY=1;entryDx=0;entryDy=0;" target="db" value="direct DB access">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bGa" edge="1" parent="1" source="ga" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.85;entryY=1;entryDx=0;entryDy=0;" target="db" value="direct DB access">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bGaGer" edge="1" parent="1" source="ga" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="ger">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bLisGer" edge="1" parent="1" source="lis" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="ger">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="event-sourcing" name="TO-BE (Event Sourcing)">
<mxGraphModel dx="1240" dy="984" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1320" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="es_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE (Variante) — Event-Sourcing-Integration" vertex="1">
<mxGeometry height="26" width="700" x="60" y="10" as="geometry" />
</mxCell>
<mxCell id="es_leg" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="60" x="60" y="46" as="geometry" />
</mxCell>
<mxCell id="es_leg_own" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="120" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_tp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="210" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_ev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;" value="Event-Store" vertex="1">
<mxGeometry height="24" width="110" x="310" y="44" as="geometry" />
</mxCell>
<mxCell id="es_abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="56" width="160" x="70" y="90" as="geometry" />
</mxCell>
<mxCell id="es_lac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="56" width="160" x="260" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="56" width="160" x="450" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Stammdaten-Quellen&#xa;SinaCRM · OTS/Znooni" vertex="1">
<mxGeometry height="56" width="230" x="650" y="90" as="geometry" />
</mxCell>
<mxCell id="es_adabm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="70" y="190" as="geometry" />
</mxCell>
<mxCell id="es_adlac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="260" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="450" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(MasterData → Event)" vertex="1">
<mxGeometry height="44" width="230" x="650" y="190" as="geometry" />
</mxCell>
<mxCell id="es_store" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontStyle=1;fontSize=13;" value="Event Store — append-only Event-Log&#xa;kanonische Wahrheit · Projektionen abgeleitet · Replay-fähig" vertex="1">
<mxGeometry height="70" width="940" x="70" y="290" as="geometry" />
</mxCell>
<mxCell id="es_pgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;verticalAlign=top;fontStyle=1;" value="Event-Prozessoren" vertex="1">
<mxGeometry height="170" width="200" x="1050" y="270" as="geometry" />
</mxCell>
<mxCell id="es_pmap" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="305" as="geometry" />
</mxCell>
<mxCell id="es_proute" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="370" as="geometry" />
</mxCell>
<mxCell id="es_jgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#6C8EBF;dashed=1;verticalAlign=top;fontStyle=1;" value="Projektionen / Read-Models" vertex="1">
<mxGeometry height="125" width="470" x="620" y="420" as="geometry" />
</mxCell>
<mxCell id="es_jorder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Auftrags-Status" vertex="1">
<mxGeometry height="58" width="130" x="640" y="458" as="geometry" />
</mxCell>
<mxCell id="es_jmd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Konsolidierte Stammdaten&#xa;(Single Point of Truth)" vertex="1">
<mxGeometry height="58" width="170" x="785" y="458" as="geometry" />
</mxCell>
<mxCell id="es_jcat" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Leistungs-&#xa;verzeichnis" vertex="1">
<mxGeometry height="58" width="110" x="965" y="458" as="geometry" />
</mxCell>
<mxCell id="es_mon" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Monitoring (Roche Analytics)" vertex="1">
<mxGeometry height="50" width="250" x="640" y="575" as="geometry" />
</mxCell>
<mxCell id="es_adclab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="CLAB-Adapter" vertex="1">
<mxGeometry height="50" width="160" x="90" y="430" as="geometry" />
</mxCell>
<mxCell id="es_addev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device-Adapter&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="50" width="280" x="290" y="430" as="geometry" />
</mxCell>
<mxCell id="es_clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="CLAB (LIS)" vertex="1">
<mxGeometry height="56" width="160" x="90" y="560" as="geometry" />
</mxCell>
<mxCell id="es_dev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="56" width="280" x="290" y="560" as="geometry" />
</mxCell>
<mxCell id="es_e_abm" edge="1" parent="1" source="es_abm" style="endArrow=classic;html=1;rounded=0;" target="es_adabm">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_lac" edge="1" parent="1" source="es_lac" style="endArrow=classic;html=1;rounded=0;" target="es_adlac">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mdn" edge="1" parent="1" source="es_mdn" style="endArrow=classic;html=1;rounded=0;" target="es_admdn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mds" edge="1" parent="1" source="es_mds" style="endArrow=classic;html=1;rounded=0;" target="es_admds">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_abm" edge="1" parent="1" source="es_adabm" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_lac" edge="1" parent="1" source="es_adlac" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mdn" edge="1" parent="1" source="es_admdn" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mds" edge="1" parent="1" source="es_admds" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_map" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;fontStyle=2;" target="es_pmap" value="consume / publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_route" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;" target="es_proute">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_order" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_jorder" value="subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_md" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jmd">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_cat" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jcat">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_mon" edge="1" parent="1" source="es_store" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_mon" value="subscribe">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="600" y="468" />
<mxPoint x="610" y="468" />
<mxPoint x="610" y="600" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="es_x_clab" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_adclab" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_dev" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="es_addev">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_clab" edge="1" parent="1" source="es_adclab" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_clab" value="LDT / natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_dev" edge="1" parent="1" source="es_addev" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_dev" value="natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -0,0 +1,181 @@
<mxfile host="Electron">
<diagram id="event-sourcing" name="TO-BE (Event Sourcing)">
<mxGraphModel dx="1240" dy="984" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1320" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="rWyWgaAAbOhaxAdMFHOU-9" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="" vertex="1">
<mxGeometry height="93" width="500" x="80" y="403" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="" vertex="1">
<mxGeometry height="60" width="1110" x="54" y="180" as="geometry" />
</mxCell>
<mxCell id="es_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE (Variante) — Event-Sourcing-Integration" vertex="1">
<mxGeometry height="26" width="700" x="60" y="10" as="geometry" />
</mxCell>
<mxCell id="es_leg" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="60" x="60" y="46" as="geometry" />
</mxCell>
<mxCell id="es_leg_own" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="120" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_tp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="210" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_ev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;" value="Event-Store" vertex="1">
<mxGeometry height="24" width="110" x="310" y="44" as="geometry" />
</mxCell>
<mxCell id="es_abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="56" width="160" x="70" y="90" as="geometry" />
</mxCell>
<mxCell id="es_lac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="56" width="160" x="260" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="56" width="160" x="450" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Stammdaten-Quellen&#xa;SinaCRM · OTS/Znooni" vertex="1">
<mxGeometry height="56" width="230" x="650" y="90" as="geometry" />
</mxCell>
<mxCell id="es_adabm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="70" y="190" as="geometry" />
</mxCell>
<mxCell id="es_adlac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="260" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="450" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(MasterData → Event)" vertex="1">
<mxGeometry height="44" width="230" x="650" y="190" as="geometry" />
</mxCell>
<mxCell id="es_store" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontStyle=1;fontSize=13;" value="Event Store — append-only Event-Log&#xa;kanonische Wahrheit · Projektionen abgeleitet · Replay-fähig" vertex="1">
<mxGeometry height="70" width="940" x="70" y="290" as="geometry" />
</mxCell>
<mxCell id="es_pgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;verticalAlign=top;fontStyle=1;" value="Event-Prozessoren" vertex="1">
<mxGeometry height="170" width="200" x="1050" y="270" as="geometry" />
</mxCell>
<mxCell id="es_pmap" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="305" as="geometry" />
</mxCell>
<mxCell id="es_proute" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="370" as="geometry" />
</mxCell>
<mxCell id="es_jgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;dashed=1;verticalAlign=top;fontStyle=1;" value="Projektionen / Read-Models" vertex="1">
<mxGeometry height="107" width="470" x="751" y="457" as="geometry" />
</mxCell>
<mxCell id="es_jorder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Auftrags-Status" vertex="1">
<mxGeometry height="58" width="130" x="771" y="489" as="geometry" />
</mxCell>
<mxCell id="es_jmd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Konsolidierte Stammdaten&#xa;(Single Point of Truth)" vertex="1">
<mxGeometry height="58" width="170" x="916" y="489" as="geometry" />
</mxCell>
<mxCell id="es_jcat" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Leistungs-&#xa;verzeichnis" vertex="1">
<mxGeometry height="58" width="110" x="1096" y="489" as="geometry" />
</mxCell>
<mxCell id="es_mon" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Monitoring (Roche Analytics)" vertex="1">
<mxGeometry height="50" width="250" x="603" y="583" as="geometry" />
</mxCell>
<mxCell id="es_adclab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="CLAB-Adapter" vertex="1">
<mxGeometry height="50" width="160" x="90" y="430" as="geometry" />
</mxCell>
<mxCell id="es_addev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device-Adapter&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="50" width="280" x="290" y="430" as="geometry" />
</mxCell>
<mxCell id="es_clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="CLAB (LIS)" vertex="1">
<mxGeometry height="56" width="160" x="90" y="577" as="geometry" />
</mxCell>
<mxCell id="es_dev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="56" width="280" x="290" y="577" as="geometry" />
</mxCell>
<mxCell id="es_e_abm" edge="1" parent="1" source="es_abm" style="endArrow=classic;html=1;rounded=0;" target="es_adabm">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_lac" edge="1" parent="1" source="es_lac" style="endArrow=classic;html=1;rounded=0;" target="es_adlac">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mdn" edge="1" parent="1" source="es_mdn" style="endArrow=classic;html=1;rounded=0;" target="es_admdn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mds" edge="1" parent="1" source="es_mds" style="endArrow=classic;html=1;rounded=0;" target="es_admds">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_abm" edge="1" parent="1" source="es_adabm" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_lac" edge="1" parent="1" source="es_adlac" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mdn" edge="1" parent="1" source="es_admdn" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mds" edge="1" parent="1" source="es_admds" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_map" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;fontStyle=2;" target="es_pmap" value="consume / publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_route" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;" target="es_proute">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_order" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_jorder" value="subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_md" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jmd">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_cat" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jcat">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_mon" edge="1" parent="1" source="es_store" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_mon" value="subscribe">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="600" y="468" />
<mxPoint x="720" y="468" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="es_x_clab" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_adclab" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_dev" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="es_addev">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_clab" edge="1" parent="1" source="es_adclab" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_clab" value="LDT / natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_dev" edge="1" parent="1" source="es_addev" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_dev" value="natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="weitere thrd. Pratry Apps&lt;div&gt;...&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="230" x="916" y="90" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="app - adapter" vertex="1">
<mxGeometry height="44" width="230" x="916" y="190" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-3" edge="1" parent="1" source="rWyWgaAAbOhaxAdMFHOU-2" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-4" connectable="0" parent="rWyWgaAAbOhaxAdMFHOU-3" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="publish" vertex="1">
<mxGeometry relative="1" x="-0.2089" y="2" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-5" edge="1" parent="1" source="rWyWgaAAbOhaxAdMFHOU-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="rWyWgaAAbOhaxAdMFHOU-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="Abstraktion" vertex="1">
<mxGeometry height="24" width="110" x="437" y="44" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-11" parent="1" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#fff2cc;strokeColor=#000000;strokeWidth=2;" value="" vertex="1">
<mxGeometry height="50" width="60" x="101" y="301" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-13" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="master- data" vertex="1">
<mxGeometry height="30" width="70" x="170" y="290" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
+10 -1
View File
@@ -1,3 +1,12 @@
{
"autoMemoryDirectory": "~/claude-projects/limbach/memory"
"autoMemoryDirectory": "~/claude-projects/limbach/memory",
"permissions": {
"allow": [
"Edit(~/projects/limbach/**)",
"Edit(~/claude-projects/limbach/**)"
],
"additionalDirectories": [
"~/projects/limbach"
]
}
}
+474
View File
@@ -0,0 +1,474 @@
<mxfile host="Electron" pages="4">
<diagram id="as-is" name="AS-IS (heute)">
<mxGraphModel dx="1171" dy="929" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="AS-IS — heutige Landschaft (MVZ Ludwigsburg)" vertex="1">
<mxGeometry height="26" width="700" x="60" y="20" as="geometry" />
</mxCell>
<mxCell id="abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="AB+M&#xa;Order Entry&#xa;30% Musterschein / 70% digital" vertex="1">
<mxGeometry height="72" width="190" x="80" y="70" as="geometry" />
</mxCell>
<mxCell id="laccess" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="72" width="160" x="300" y="70" as="geometry" />
</mxCell>
<mxCell id="mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="72" width="160" x="500" y="70" as="geometry" />
</mxCell>
<mxCell id="bottleneck" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;fontStyle=2;" value="Nur 1 LDT an CLAB · AB+M muss zuerst abgeschlossen sein → Engpass" vertex="1">
<mxGeometry height="34" width="580" x="80" y="180" as="geometry" />
</mxCell>
<mxCell id="clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontStyle=1;fontSize=14;" value="CLAB&#xa;(LIS)" vertex="1">
<mxGeometry height="90" width="240" x="300" y="320" as="geometry" />
</mxCell>
<mxCell id="ipu" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Sysmex&#xa;Extended IPU" vertex="1">
<mxGeometry height="60" width="150" x="60" y="520" as="geometry" />
</mxCell>
<mxCell id="myla" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Myla → Maestria" vertex="1">
<mxGeometry height="60" width="150" x="230" y="520" as="geometry" />
</mxCell>
<mxCell id="labops" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="LabOps" vertex="1">
<mxGeometry height="60" width="120" x="400" y="520" as="geometry" />
</mxCell>
<mxCell id="mwrest" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1D5E7;strokeColor=#9673A6;" value="Desuri (bidir.) · Biomerieux&#xa;Liason · Firetransfer&#xa;(je eigene P2P-Anbindung)" vertex="1">
<mxGeometry height="60" width="240" x="540" y="520" as="geometry" />
</mxCell>
<mxCell id="devs" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Geräte: Sysmex-Straße · Atras SL (1)/(2) Schüttgutsortierer · Analyzer" vertex="1">
<mxGeometry height="50" width="720" x="60" y="650" as="geometry" />
</mxCell>
<mxCell id="sdgroup" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#B85450;dashed=1;verticalAlign=top;fontStyle=1;fontColor=#B85450;" value="Stammdaten-Inseln — Doppelpflege" vertex="1">
<mxGeometry height="210" width="380" x="820" y="300" as="geometry" />
</mxCell>
<mxCell id="sd1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="CLAB-Stammdaten&#xa;(selbst generiert)" vertex="1">
<mxGeometry height="55" width="160" x="840" y="340" as="geometry" />
</mxCell>
<mxCell id="sd2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="SinaCRM&#xa;(separate Pflege z. LIS)" vertex="1">
<mxGeometry height="55" width="160" x="1020" y="340" as="geometry" />
</mxCell>
<mxCell id="sd3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="MySQL&#xa;(Support-Requests)" vertex="1">
<mxGeometry height="55" width="160" x="840" y="430" as="geometry" />
</mxCell>
<mxCell id="sd4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8CECC;strokeColor=#B85450;" value="OTS / Znooni&#xa;(Leistungsverzeichnis)" vertex="1">
<mxGeometry height="55" width="160" x="1020" y="430" as="geometry" />
</mxCell>
<mxCell id="rgroup" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#82B366;dashed=1;verticalAlign=top;fontStyle=1;fontColor=#82B366;" value="Roche / Analytics" vertex="1">
<mxGeometry height="260" width="380" x="820" y="650" as="geometry" />
</mxCell>
<mxCell id="ccm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="2 × CCM" vertex="1">
<mxGeometry height="50" width="120" x="840" y="690" as="geometry" />
</mxCell>
<mxCell id="navify" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="Roche Navify LabOps&#xa;(auch Archivierung)" vertex="1">
<mxGeometry height="50" width="200" x="980" y="690" as="geometry" />
</mxCell>
<mxCell id="ranalytics" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="Monitoring von Roche · Analytics (CCM-Daten)&#xa;Roche Integrater · Average of normals" vertex="1">
<mxGeometry height="60" width="340" x="840" y="760" as="geometry" />
</mxCell>
<mxCell id="sinabi" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;" value="SinaBI (PowerBI)" vertex="1">
<mxGeometry height="45" width="160" x="840" y="840" as="geometry" />
</mxCell>
<mxCell id="e1" edge="1" parent="1" source="abm" style="endArrow=classic;html=1;fontStyle=2;" target="clab" value="LDT">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e2" edge="1" parent="1" source="laccess" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e3" edge="1" parent="1" source="mdn" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e4" edge="1" parent="1" source="ipu" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" edge="1" parent="1" source="myla" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e6" edge="1" parent="1" source="labops" style="endArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e7" edge="1" parent="1" source="mwrest" style="endArrow=classic;startArrow=classic;html=1;" target="clab">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e8" edge="1" parent="1" source="devs" style="endArrow=classic;html=1;dashed=1;" target="ipu">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e9" edge="1" parent="1" source="devs" style="endArrow=classic;html=1;dashed=1;" target="mwrest">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r1" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd2" value="separate Pflege">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r2" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;" target="sd1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r3" edge="1" parent="1" source="sd2" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd4" value="manuelles Mapping (Links)">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="r4" edge="1" parent="1" source="sd1" style="endArrow=classic;startArrow=classic;html=1;dashed=1;strokeColor=#B85450;fontColor=#B85450;fontStyle=2;" target="sd3" value="Doppelpflege">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="g1" edge="1" parent="1" source="clab" style="endArrow=classic;startArrow=classic;html=1;" target="navify">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="g2" edge="1" parent="1" source="ccm" style="endArrow=classic;html=1;" target="ranalytics">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="to-be" name="TO-BE (Ziel)">
<mxGraphModel dx="1240" dy="1964" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="980" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="t_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE — Integration Server mit Single Point of Truth" vertex="1">
<mxGeometry height="26" width="700" x="60" y="-30" as="geometry" />
</mxCell>
<mxCell id="leg_t" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="70" x="60" y="18" as="geometry" />
</mxCell>
<mxCell id="leg_e" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="125" y="16" as="geometry" />
</mxCell>
<mxCell id="leg_f" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="215" y="16" as="geometry" />
</mxCell>
<mxCell id="gC0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="64" width="170" x="120" y="90" as="geometry" />
</mxCell>
<mxCell id="gB0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="64" width="170" x="400" y="90" as="geometry" />
</mxCell>
<mxCell id="gA0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="64" width="170" x="700" y="90" as="geometry" />
</mxCell>
<mxCell id="srv" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8F8F8;strokeColor=#999999;verticalAlign=top;fontStyle=1;fontSize=14;" value="Integration Server" vertex="1">
<mxGeometry height="420" width="850" x="60" y="250" as="geometry" />
</mxCell>
<mxCell id="absC" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="120" y="300" as="geometry" />
</mxCell>
<mxCell id="absB" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="400" y="300" as="geometry" />
</mxCell>
<mxCell id="absA" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Order Abstraction" vertex="1">
<mxGeometry height="44" width="170" x="700" y="300" as="geometry" />
</mxCell>
<mxCell id="db" parent="1" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;boundedLbl=1;backgroundOutline=1;size=14;verticalAlign=middle;" value="&lt;b&gt;Single Point of Truth&lt;/b&gt;&lt;br&gt;canonical store&lt;br&gt;konsolidiert: Stammdaten · SinaCRM · Leistungsverzeichnis (OTS/Znooni)" vertex="1">
<mxGeometry height="115" width="350" x="320" y="390" as="geometry" />
</mxCell>
<mxCell id="zd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;verticalAlign=top;fontStyle=1;" value="Central Services" vertex="1">
<mxGeometry height="105" width="560" x="210" y="545" as="geometry" />
</mxCell>
<mxCell id="zd1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="50" width="160" x="230" y="580" as="geometry" />
</mxCell>
<mxCell id="zd2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="50" width="180" x="405" y="580" as="geometry" />
</mxCell>
<mxCell id="zd3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Monitoring&#xa;(Roche Analytics)" vertex="1">
<mxGeometry height="50" width="150" x="600" y="580" as="geometry" />
</mxCell>
<mxCell id="lis" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LIS (CLAB)" vertex="1">
<mxGeometry height="60" width="170" x="120" y="730" as="geometry" />
</mxCell>
<mxCell id="ga" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device Abstraction&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="70" width="210" x="680" y="725" as="geometry" />
</mxCell>
<mxCell id="ger" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="60" width="210" x="680" y="850" as="geometry" />
</mxCell>
<mxCell id="eC" edge="1" parent="1" source="gC0" style="endArrow=classic;html=1;rounded=0;" target="absC">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="eB" edge="1" parent="1" source="gB0" style="endArrow=classic;html=1;rounded=0;" target="absB">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="eA" edge="1" parent="1" source="gA0" style="endArrow=classic;html=1;rounded=0;" target="absA">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nC" edge="1" parent="1" source="absC" style="endArrow=classic;html=1;rounded=0;" target="db">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nB" edge="1" parent="1" source="absB" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="db" value="normalize">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="nA" edge="1" parent="1" source="absA" style="endArrow=classic;html=1;rounded=0;" target="db">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uni" edge="1" parent="1" source="db" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="zd" value="canonical">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bLis" edge="1" parent="1" source="lis" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.15;entryY=1;entryDx=0;entryDy=0;" target="db" value="direct DB access">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bGa" edge="1" parent="1" source="ga" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.85;entryY=1;entryDx=0;entryDy=0;" target="db" value="direct DB access">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bGaGer" edge="1" parent="1" source="ga" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="ger">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="bLisGer" edge="1" parent="1" source="lis" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="ger">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="event-sourcing" name="TO-BE (Event Sourcing)">
<mxGraphModel dx="1240" dy="984" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1320" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="es_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE (Variante) — Event-Sourcing-Integration" vertex="1">
<mxGeometry height="26" width="700" x="60" y="10" as="geometry" />
</mxCell>
<mxCell id="es_leg" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="60" x="60" y="46" as="geometry" />
</mxCell>
<mxCell id="es_leg_own" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="120" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_tp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="210" y="44" as="geometry" />
</mxCell>
<mxCell id="es_leg_ev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;" value="Event-Store" vertex="1">
<mxGeometry height="24" width="110" x="310" y="44" as="geometry" />
</mxCell>
<mxCell id="es_abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="56" width="160" x="70" y="90" as="geometry" />
</mxCell>
<mxCell id="es_lac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="56" width="160" x="260" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="56" width="160" x="450" y="90" as="geometry" />
</mxCell>
<mxCell id="es_mds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Stammdaten-Quellen&#xa;SinaCRM · OTS/Znooni" vertex="1">
<mxGeometry height="56" width="230" x="650" y="90" as="geometry" />
</mxCell>
<mxCell id="es_adabm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="70" y="190" as="geometry" />
</mxCell>
<mxCell id="es_adlac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="260" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="450" y="190" as="geometry" />
</mxCell>
<mxCell id="es_admds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter&#xa;(MasterData → Event)" vertex="1">
<mxGeometry height="44" width="230" x="650" y="190" as="geometry" />
</mxCell>
<mxCell id="es_store" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontStyle=1;fontSize=13;" value="Event Store — append-only Event-Log&#xa;kanonische Wahrheit · Projektionen abgeleitet · Replay-fähig" vertex="1">
<mxGeometry height="70" width="940" x="70" y="290" as="geometry" />
</mxCell>
<mxCell id="es_pgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;verticalAlign=top;fontStyle=1;" value="Event-Prozessoren" vertex="1">
<mxGeometry height="170" width="200" x="1050" y="270" as="geometry" />
</mxCell>
<mxCell id="es_pmap" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="305" as="geometry" />
</mxCell>
<mxCell id="es_proute" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="370" as="geometry" />
</mxCell>
<mxCell id="es_jgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#6C8EBF;dashed=1;verticalAlign=top;fontStyle=1;" value="Projektionen / Read-Models" vertex="1">
<mxGeometry height="107" width="470" x="751" y="457" as="geometry" />
</mxCell>
<mxCell id="es_jorder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Auftrags-Status" vertex="1">
<mxGeometry height="58" width="130" x="771" y="489" as="geometry" />
</mxCell>
<mxCell id="es_jmd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Konsolidierte Stammdaten&#xa;(Single Point of Truth)" vertex="1">
<mxGeometry height="58" width="170" x="916" y="489" as="geometry" />
</mxCell>
<mxCell id="es_jcat" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Leistungs-&#xa;verzeichnis" vertex="1">
<mxGeometry height="58" width="110" x="1096" y="489" as="geometry" />
</mxCell>
<mxCell id="es_mon" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Monitoring (Roche Analytics)" vertex="1">
<mxGeometry height="50" width="250" x="603" y="566" as="geometry" />
</mxCell>
<mxCell id="es_adclab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="CLAB-Adapter" vertex="1">
<mxGeometry height="50" width="160" x="90" y="430" as="geometry" />
</mxCell>
<mxCell id="es_addev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device-Adapter&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="50" width="280" x="290" y="430" as="geometry" />
</mxCell>
<mxCell id="es_clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="CLAB (LIS)" vertex="1">
<mxGeometry height="56" width="160" x="90" y="560" as="geometry" />
</mxCell>
<mxCell id="es_dev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="56" width="280" x="290" y="560" as="geometry" />
</mxCell>
<mxCell id="es_e_abm" edge="1" parent="1" source="es_abm" style="endArrow=classic;html=1;rounded=0;" target="es_adabm">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_lac" edge="1" parent="1" source="es_lac" style="endArrow=classic;html=1;rounded=0;" target="es_adlac">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mdn" edge="1" parent="1" source="es_mdn" style="endArrow=classic;html=1;rounded=0;" target="es_admdn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mds" edge="1" parent="1" source="es_mds" style="endArrow=classic;html=1;rounded=0;" target="es_admds">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_abm" edge="1" parent="1" source="es_adabm" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_lac" edge="1" parent="1" source="es_adlac" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mdn" edge="1" parent="1" source="es_admdn" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mds" edge="1" parent="1" source="es_admds" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_map" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;fontStyle=2;" target="es_pmap" value="consume / publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_route" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;" target="es_proute">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_order" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_jorder" value="subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_md" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jmd">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_cat" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jcat">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_mon" edge="1" parent="1" source="es_store" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_mon" value="subscribe">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="600" y="468" />
<mxPoint x="720" y="468" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="es_x_clab" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_adclab" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_dev" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="es_addev">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_clab" edge="1" parent="1" source="es_adclab" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_clab" value="LDT / natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_dev" edge="1" parent="1" source="es_addev" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_dev" value="natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="event-driven" name="TO-BE (Empfehlung)">
<mxGraphModel dx="1240" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="1000" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="m_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE (Empfehlung) — Canonical Store als System of Record + Integration über Events" vertex="1">
<mxGeometry height="26" width="900" x="60" y="10" as="geometry" />
</mxCell>
<mxCell id="m_leg" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="60" x="60" y="46" as="geometry" />
</mxCell>
<mxCell id="m_leg_own" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="120" y="44" as="geometry" />
</mxCell>
<mxCell id="m_leg_tp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="210" y="44" as="geometry" />
</mxCell>
<mxCell id="m_note" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;dashed=1;fontStyle=2;align=left;spacingLeft=8;" value="Unterschied zu Seite 2: kein direkter DB-Zugriff — Integration ausschließlich über Events.&#xa;Unterschied zu Seite 3: Store ist zustandsbasiertes System of Record, kein append-only Event-Log." vertex="1">
<mxGeometry height="60" width="420" x="700" y="80" as="geometry" />
</mxCell>
<mxCell id="m_lac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="56" width="170" x="80" y="90" as="geometry" />
</mxCell>
<mxCell id="m_mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="56" width="170" x="290" y="90" as="geometry" />
</mxCell>
<mxCell id="m_abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="56" width="170" x="500" y="90" as="geometry" />
</mxCell>
<mxCell id="m_adlac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter" vertex="1">
<mxGeometry height="40" width="170" x="80" y="185" as="geometry" />
</mxCell>
<mxCell id="m_admdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter" vertex="1">
<mxGeometry height="40" width="170" x="290" y="185" as="geometry" />
</mxCell>
<mxCell id="m_adabm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Adapter" vertex="1">
<mxGeometry height="40" width="170" x="500" y="185" as="geometry" />
</mxCell>
<mxCell id="m_srv" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8F8F8;strokeColor=#999999;verticalAlign=top;fontStyle=1;fontSize=14;" value="Integration Server" vertex="1">
<mxGeometry height="360" width="1080" x="60" y="270" as="geometry" />
</mxCell>
<mxCell id="m_bus" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontStyle=1;fontSize=13;" value="Event Bus — publish / subscribe" vertex="1">
<mxGeometry height="50" width="1020" x="90" y="320" as="geometry" />
</mxCell>
<mxCell id="m_route" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="50" width="170" x="100" y="430" as="geometry" />
</mxCell>
<mxCell id="m_map" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="50" width="190" x="300" y="430" as="geometry" />
</mxCell>
<mxCell id="m_mon" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Monitoring&#xa;(Roche Analytics)" vertex="1">
<mxGeometry height="50" width="170" x="520" y="430" as="geometry" />
</mxCell>
<mxCell id="m_store" parent="1" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;boundedLbl=1;backgroundOutline=1;size=14;verticalAlign=middle;" value="&lt;b&gt;Single Point of Truth&lt;/b&gt;&lt;br&gt;canonical store · System of Record&lt;br&gt;Stammdaten · SinaCRM · Leistungsverzeichnis (OTS/Znooni)" vertex="1">
<mxGeometry height="150" width="320" x="760" y="410" as="geometry" />
</mxCell>
<mxCell id="m_adclab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="CLAB-Adapter" vertex="1">
<mxGeometry height="50" width="170" x="120" y="700" as="geometry" />
</mxCell>
<mxCell id="m_addev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device-Adapter&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="50" width="320" x="360" y="700" as="geometry" />
</mxCell>
<mxCell id="m_clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="CLAB (LIS)" vertex="1">
<mxGeometry height="56" width="170" x="120" y="800" as="geometry" />
</mxCell>
<mxCell id="m_dev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="56" width="320" x="360" y="800" as="geometry" />
</mxCell>
<mxCell id="m_e_lac" edge="1" parent="1" source="m_lac" style="endArrow=classic;html=1;rounded=0;" target="m_adlac">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_e_mdn" edge="1" parent="1" source="m_mdn" style="endArrow=classic;html=1;rounded=0;" target="m_admdn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_e_abm" edge="1" parent="1" source="m_abm" style="endArrow=classic;html=1;rounded=0;" target="m_adabm">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_lac" edge="1" parent="1" source="m_adlac" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_bus" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_mdn" edge="1" parent="1" source="m_admdn" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="m_bus">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_abm" edge="1" parent="1" source="m_adabm" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="m_bus">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_route" edge="1" parent="1" source="m_bus" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_route" value="consume / publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_map" edge="1" parent="1" source="m_bus" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="m_map">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_mon" edge="1" parent="1" source="m_bus" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_mon" value="subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_store" edge="1" parent="1" source="m_bus" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_store" value="Events → State / Read">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_clab" edge="1" parent="1" source="m_bus" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;exitX=0.05;exitY=1;exitDx=0;exitDy=0;" target="m_adclab" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_b_dev" edge="1" parent="1" source="m_bus" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" target="m_addev">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_n_clab" edge="1" parent="1" source="m_adclab" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_clab" value="LDT / natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="m_n_dev" edge="1" parent="1" source="m_addev" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="m_dev" value="natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
+181
View File
@@ -0,0 +1,181 @@
<mxfile host="Electron">
<diagram id="event-sourcing" name="TO-BE (Event Sourcing)">
<mxGraphModel dx="1240" dy="984" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1320" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="rWyWgaAAbOhaxAdMFHOU-9" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="" vertex="1">
<mxGeometry height="93" width="500" x="80" y="453" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="" vertex="1">
<mxGeometry height="60" width="1110" x="54" y="230" as="geometry" />
</mxCell>
<mxCell id="es_title" parent="1" style="text;html=1;align=left;fontStyle=1;fontSize=16;" value="TO-BE (Variante) — Event-Sourcing-Integration" vertex="1">
<mxGeometry height="26" width="700" x="60" y="10" as="geometry" />
</mxCell>
<mxCell id="es_leg" parent="1" style="text;html=1;align=left;fontStyle=1;" value="Legend" vertex="1">
<mxGeometry height="20" width="60" x="60" y="89" as="geometry" />
</mxCell>
<mxCell id="es_leg_own" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="own" vertex="1">
<mxGeometry height="24" width="80" x="120" y="87" as="geometry" />
</mxCell>
<mxCell id="es_leg_tp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="third-party" vertex="1">
<mxGeometry height="24" width="90" x="210" y="87" as="geometry" />
</mxCell>
<mxCell id="es_leg_ev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;" value="Event-Store" vertex="1">
<mxGeometry height="24" width="110" x="310" y="87" as="geometry" />
</mxCell>
<mxCell id="es_abm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="AB+M&#xa;(Order Entry)" vertex="1">
<mxGeometry height="56" width="160" x="70" y="140" as="geometry" />
</mxCell>
<mxCell id="es_lac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="LabAccess&#xa;(Order Entry I)" vertex="1">
<mxGeometry height="56" width="160" x="260" y="140" as="geometry" />
</mxCell>
<mxCell id="es_mdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="MDN&#xa;(Order Entry II)" vertex="1">
<mxGeometry height="56" width="160" x="450" y="140" as="geometry" />
</mxCell>
<mxCell id="es_mds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Stammdaten-Quellen&#xa;SinaCRM · OTS/Znooni" vertex="1">
<mxGeometry height="56" width="230" x="650" y="140" as="geometry" />
</mxCell>
<mxCell id="es_adabm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="70" y="240" as="geometry" />
</mxCell>
<mxCell id="es_adlac" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="260" y="240" as="geometry" />
</mxCell>
<mxCell id="es_admdn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(Order → Event)" vertex="1">
<mxGeometry height="44" width="160" x="450" y="240" as="geometry" />
</mxCell>
<mxCell id="es_admds" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="Adapter&#xa;(MasterData → Event)" vertex="1">
<mxGeometry height="44" width="230" x="650" y="240" as="geometry" />
</mxCell>
<mxCell id="es_store" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontStyle=1;fontSize=13;" value="Event Store — append-only Event-Log&#xa;kanonische Wahrheit · Projektionen abgeleitet · Replay-fähig" vertex="1">
<mxGeometry height="70" width="940" x="70" y="340" as="geometry" />
</mxCell>
<mxCell id="es_pgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;verticalAlign=top;fontStyle=1;" value="Event-Prozessoren" vertex="1">
<mxGeometry height="170" width="200" x="1050" y="320" as="geometry" />
</mxCell>
<mxCell id="es_pmap" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Mapping / Transformation" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="355" as="geometry" />
</mxCell>
<mxCell id="es_proute" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Routing Engine" vertex="1">
<mxGeometry height="46" width="160" x="1070" y="420" as="geometry" />
</mxCell>
<mxCell id="es_jgrp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;dashed=1;verticalAlign=top;fontStyle=1;" value="Projektionen / Read-Models" vertex="1">
<mxGeometry height="107" width="470" x="751" y="507" as="geometry" />
</mxCell>
<mxCell id="es_jorder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Auftrags-Status" vertex="1">
<mxGeometry height="58" width="130" x="771" y="539" as="geometry" />
</mxCell>
<mxCell id="es_jmd" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Konsolidierte Stammdaten&#xa;(Single Point of Truth)" vertex="1">
<mxGeometry height="58" width="170" x="916" y="539" as="geometry" />
</mxCell>
<mxCell id="es_jcat" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EAF0FB;strokeColor=#6C8EBF;" value="Leistungs-&#xa;verzeichnis" vertex="1">
<mxGeometry height="58" width="110" x="1096" y="539" as="geometry" />
</mxCell>
<mxCell id="es_mon" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;" value="Monitoring (Roche Analytics)" vertex="1">
<mxGeometry height="50" width="250" x="603" y="633" as="geometry" />
</mxCell>
<mxCell id="es_adclab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="CLAB-Adapter" vertex="1">
<mxGeometry height="50" width="160" x="90" y="480" as="geometry" />
</mxCell>
<mxCell id="es_addev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;" value="Device-Adapter&#xa;Sysmex IPU · Myla/Maestria · LabOps · Desuri · Liason" vertex="1">
<mxGeometry height="50" width="280" x="290" y="480" as="geometry" />
</mxCell>
<mxCell id="es_clab" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="CLAB (LIS)" vertex="1">
<mxGeometry height="56" width="160" x="90" y="627" as="geometry" />
</mxCell>
<mxCell id="es_dev" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="Devices&#xa;Sysmex-Straße · Atras SL · Analyzer" vertex="1">
<mxGeometry height="56" width="280" x="290" y="627" as="geometry" />
</mxCell>
<mxCell id="es_e_abm" edge="1" parent="1" source="es_abm" style="endArrow=classic;html=1;rounded=0;" target="es_adabm">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_lac" edge="1" parent="1" source="es_lac" style="endArrow=classic;html=1;rounded=0;" target="es_adlac">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mdn" edge="1" parent="1" source="es_mdn" style="endArrow=classic;html=1;rounded=0;" target="es_admdn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_e_mds" edge="1" parent="1" source="es_mds" style="endArrow=classic;html=1;rounded=0;" target="es_admds">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_abm" edge="1" parent="1" source="es_adabm" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_lac" edge="1" parent="1" source="es_adlac" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mdn" edge="1" parent="1" source="es_admdn" style="endArrow=classic;html=1;rounded=0;" target="es_store">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_p_mds" edge="1" parent="1" source="es_admds" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_store" value="publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_map" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;fontStyle=2;" target="es_pmap" value="consume / publish">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_route" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;dashed=1;" target="es_proute">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_order" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_jorder" value="subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_md" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jmd">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_cat" edge="1" parent="1" source="es_store" style="endArrow=classic;html=1;rounded=0;" target="es_jcat">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_s_mon" edge="1" parent="1" source="es_store" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_mon" value="subscribe">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="600" y="518" />
<mxPoint x="720" y="518" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="es_x_clab" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_adclab" value="publish / subscribe">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_x_dev" edge="1" parent="1" source="es_store" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" target="es_addev">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_clab" edge="1" parent="1" source="es_adclab" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_clab" value="LDT / natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="es_n_dev" edge="1" parent="1" source="es_addev" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fontStyle=2;" target="es_dev" value="natives Protokoll">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE6CC;strokeColor=#D79B00;fontStyle=1;" value="weitere thrd. Pratry Apps&lt;div&gt;...&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="230" x="916" y="140" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;strokeWidth=2;" value="app - adapter" vertex="1">
<mxGeometry height="44" width="230" x="916" y="240" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-3" edge="1" parent="1" source="rWyWgaAAbOhaxAdMFHOU-2" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="340" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-4" connectable="0" parent="rWyWgaAAbOhaxAdMFHOU-3" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="publish" vertex="1">
<mxGeometry relative="1" x="-0.2089" y="2" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-5" edge="1" parent="1" source="rWyWgaAAbOhaxAdMFHOU-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="rWyWgaAAbOhaxAdMFHOU-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="Abstraktion" vertex="1">
<mxGeometry height="24" width="110" x="437" y="87" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-11" parent="1" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#fff2cc;strokeColor=#000000;strokeWidth=2;" value="" vertex="1">
<mxGeometry height="50" width="60" x="101" y="351" as="geometry" />
</mxCell>
<mxCell id="rWyWgaAAbOhaxAdMFHOU-13" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="master- data" vertex="1">
<mxGeometry height="30" width="70" x="170" y="340" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -0,0 +1,14 @@
---
name: keine-rhetorischen-fragen
description: Niemals rhetorische Fragen verwenden — strikt verboten
metadata:
node_type: memory
type: feedback
originSessionId: d35a0bd9-ab2f-4a8e-975e-6bd133983fa8
---
Niemals rhetorische Fragen verwenden. Striktes Verbot, ausnahmslos.
**Why:** Der Nutzer empfindet rhetorische Fragen als störend und hat das ausdrücklich und nachdrücklich untersagt.
**How to apply:** Aussagen statt Fragen formulieren. Keine Fragen zur Auflockerung, Überleitung oder als Stilmittel. Echte Rückfragen nur, wenn eine Antwort tatsächlich gebraucht wird. Verwandt mit [[verbotene-woerter]].
+12 -1
View File
@@ -1,3 +1,14 @@
{
"autoMemoryDirectory": "~/claude-projects/robotunits/memory"
"autoMemoryDirectory": "~/claude-projects/robotunits/memory",
"permissions": {
"allow": [
"Edit(~/projects/geko-core/**)",
"Edit(~/projects/adesso-cpq/**)",
"Edit(~/claude-projects/robotunits/**)"
],
"additionalDirectories": [
"~/projects/geko-core",
"~/projects/adesso-cpq"
]
}
}
+1 -9
View File
@@ -1,13 +1,5 @@
{
"permissions": {
"allow": [
"Bash(xargs -I {} find {} -type f \\\\\\( -name \"*.ts\" -o -name \"*.tsx\" -o -name \"*.js\" -o -name \"*.vue\" \\\\\\))",
"Bash(xargs cat)",
"Bash(xargs ls -la)",
"Bash(xargs -I {} sh -c 'echo \"=== {} ===\" && cat {}')",
"Bash(xargs -I {} bash -c 'echo \"=== {} ===\" && cat {}')",
"Bash(xargs ls -lh)",
"Bash(PATH=/home/marcuh/git/adesso-cpq/packages/blast/node_modules/.bin:__TRACKED_VAR__ tsup)"
]
"allow": []
}
}
+5 -9
View File
@@ -1,15 +1,11 @@
{
"permissions": {
"allow": [
"Edit(/Users/marcush/projects/wittgenstein/**)",
"Edit(/Users/marcush/claude-projects/**)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push:*)",
"Bash(git pull:*)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git -C:*)"
"Edit(~/projects/wittgenstein/**)",
"Edit(~/claude-projects/wittgenstein/**)"
],
"additionalDirectories": [
"~/projects/wittgenstein"
]
},
"autoMemoryDirectory": "~/claude-projects/wittgenstein/memory"
+1 -7
View File
@@ -1,11 +1,5 @@
{
"permissions": {
"allow": [
"mcp__outline__list_collections",
"mcp__outline__update_document",
"mcp__outline__create_document",
"mcp__outline__list_documents",
"mcp__outline__move_document"
]
"allow": []
}
}
+5
View File
@@ -1,6 +1,11 @@
{
"autoMemoryDirectory": "~/claude-projects/wuerth-plato/memory",
"permissions": {
"allow": [
"Edit(~/projects/fahrzeugeinrichtung-plato-backend/**)",
"Edit(~/projects/fahrzeugeinrichtung-plato-gitops/**)",
"Edit(~/claude-projects/wuerth-plato/**)"
],
"additionalDirectories": [
"~/projects/fahrzeugeinrichtung-plato-backend",
"~/projects/fahrzeugeinrichtung-plato-gitops"
+38
View File
@@ -0,0 +1,38 @@
{
"permissions": {
"allow": [
"Bash(npx nx *)",
"Bash(lsof -ti:3000)",
"Bash(xargs -r kill)",
"Bash(tee /tmp/plato-be.log)",
"Bash(python3 -)",
"Bash(npx tsc *)",
"Skill(code-review)",
"Bash(podman:*)",
"Bash(oc get:*)",
"Bash(oc describe:*)",
"Bash(oc status:*)",
"Bash(oc logs:*)",
"Bash(oc top:*)",
"Bash(oc project:*)",
"Bash(oc projects:*)",
"Bash(oc whoami:*)",
"Bash(oc version:*)",
"Bash(oc api-resources:*)",
"Bash(oc explain:*)"
],
"ask": [
"Bash(podman system reset:*)",
"Bash(podman system prune:*)",
"Bash(podman volume rm:*)",
"Bash(podman volume prune:*)",
"Bash(podman machine rm:*)",
"Bash(podman machine reset:*)"
],
"deny": [
"Bash(oc adm:*)",
"Bash(oc delete project:*)",
"Bash(oc delete namespace:*)"
]
}
}
+7
View File
@@ -0,0 +1,7 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
1. Dieses Modul ist Teil eines MonoRepos, das verschiedene — überwiegend Development- — Projekte bündelt.
2. Die eigentlichen Source- oder Ressource-Repos sind in der `settings.json` hinterlegt.
3. SAP-Zugriff (Basic Auth, Endpoint, Env→Secret/Overlay-Mapping): siehe `memory/sap-config.md`.
@@ -0,0 +1,19 @@
---
name: feedback_ort_zuerst
description: "Bei \"wo mache ich X?\"-Fragen sofort die konkrete UI-Stelle nennen, nicht durch Menüs jagen"
metadata:
node_type: memory
type: feedback
originSessionId: 03691a44-b7eb-4d9d-9e7c-5d5aae84e110
---
Marcus fragt bei UI/Tooling oft konkret "WO geht das?". Dann will er **die eine konkrete Stelle**, nicht eine Schritt-für-Schritt-Tour durch das Tool oder Vorbedingungen vorweg.
**Why:** Lange Navigationsanleitungen ("erst Actions, dann Run, dann Banner...") bei einer simplen Ortsfrage haben ihn massiv genervt ("RED DEUTSCH", "durch das komplette GitHub gejagt"). Kostet Zeit und Nerven.
**How to apply:**
- Ortsfrage → direkt der Ziel-Ort + der Knopf, in einem Satz. Z. B. "PR → Files changed → Review changes → Approve".
- Relevante Einschränkung in einem Halbsatz dazu (z. B. "eigenen PR kann man nicht approven"), aber nicht als Vorrede davorstellen.
- Keine "erst dies, dann das"-Ketten, wenn eine Stelle reicht.
**Zweiter Fehler im selben Vorgang:** Ich behauptete früh "Review Required ist fürs Deployen ignorierbar". Falsch — der witglobal `deploy-branch`-Workflow prüft `reviewDecision` und bricht mit `REVIEW_REQUIRED` ab, solange der PR nicht approved ist. Lehre: bei Aussagen über fremde Workflows erst den reusable workflow lesen, nicht aus dem Muster raten. Siehe [[feedback_evidence_first]].
@@ -0,0 +1,35 @@
---
name: project_prod_ist_stand
description: Prod (ocp-01 / 1401-plato-production) — Secrets (inkl. SAP) erledigt+aktiviert; einziger Blocker noch das to_be_replaced Image-Tag
metadata:
node_type: memory
type: project
originSessionId: 03691a44-b7eb-4d9d-9e7c-5d5aae84e110
---
Stand 2026-06-19, verifiziert direkt am Prod-Cluster (`api.ocp-01.wgn.wuerth.com`, Projekt `1401-plato-production`).
**Stand 2026-06-19 abends: Prod ist LIVE und voll erreichbar** — backend `0.38.4` 1/1 Running auf ocp-01, alle 3 Secrets (customer/postgres/sap) gemountet, ghcr-Pull funktioniert. Öffentliche URL **https://plato.witglobal.net** (Test: https://plato-test.witglobal.net auf ocp-dev01), zusätzlich zur alten fahrzeugeinrichtung-Route. OIDC-Login funktioniert.
**Custom-Routes + OIDC:** Routes als `route-public.yaml` je Overlay im gitops-Repo (commit `11ba61c`), edge/Redirect, host `plato.witglobal.net` bzw. `plato-test.witglobal.net` → backend-service:3000. Redirect-URI baut die App aus `req.headers.host` + fixem Pfad `/oauth/callback` (oidc.controller.ts `computeRedirectUri`). Beim IdP (PingFederate, strict byte-match, kein Trailing-Slash) **pro client_id** registriert: `https://plato.witglobal.net/oauth/callback` an `KONZ-PlaTo-Customer-PROD`, `https://plato-test.witglobal.net/oauth/callback` an `KONZ-PlaTo-Customer-DEV`. Kein Post-Logout-Redirect nötig.
PR `development → main` gemergt — `main` spiegelt den Prod-Stand. Go-live abgeschlossen.
Reihenfolge der Blocker, die fielen: (1) Secrets gesealt+aktiviert; (2) Dockerfile-Build-Bruch `crm.sqlite` raus → Image 0.38.4; (3) PR-Review REVIEW_REQUIRED approved; (4) **Namespace-Quota voll** (totes Frontend-Orphan-Deployment fraß 1 CPU/4Gi) → Frontend-Deployment/Service/Route gelöscht (war alter Split-Ansatz, Backend serviert FE-Assets selbst) → `oc rollout restart` → Pod startet.
**Quota-Warnung für später:** `default-resource-quotas` = 3 CPU / 12Gi hart. backend(1)+postgres(1) = 2, lässt nur 1 Slot Surge. Sobald ein zweiter Workload dazukommt (oder Rolling Update mit maxSurge), reicht es nicht → Quota anheben (Plattform) oder maxSurge=0.
**Historischer Ausgangsbefund (vor heute):**
1. **Image-Tag nie ersetzt** (offen). backend-/frontend-Pods ziehen wörtlich `…/backend:to_be_replaced` → ImagePullBackOff (Deployment 198d, 0/1). Der `.deploy to production`-Workflow (PR `development→main`, Kommentar `.deploy to production`) ist **nie gelaufen**. Das ist der gewählte Weg A, um es zu lösen — bringt echten Tag + klärt zugleich den offenen ghcr-Pull-Recht-Punkt auf Prod.
2. **Secrets — ERLEDIGT.** Alle drei SealedSecrets gegen ocp-01 gesealt, Entsiegelung auf Prod verifiziert (Synced=True), in `production/kustomization.yaml` aktiviert + in `backend.yaml` per `envFrom` referenziert:
- `plato-customer-secrets`, `plato-postgres-secrets` (commit `1ba047e`)
- `plato-sap-secrets` (commit `4601ea7`): SAP MUSS auf Prod (zentral). Werte = dieselben wie dev; dev-Klartext vom dev-Cluster gelesen, gegen ocp-01 neu gesealt. `SAP_URL` = dev-Endpoint `odatang9.wgn.wuerth.com/...` (User-Ansage „dieselben Werte"). Sealing-Rezept: `kubeseal --fetch-cert` geht auf Prod per Default-Pfad; dev-Secret per `oc --context=<dev> get secret -o json` → jq auf prod-ns umschreiben → `kubeseal --cert`.
- Beide gitops-Commits noch nicht gepusht (ahead 2; Push macht Marcus). Inhaltliche Werte-Korrektheit (richtige Prod-Creds?) erst sichtbar, wenn Backend hochkommt.
**Sauber/fertig auf Prod:** Namespace-Label `argocd.argoproj.io/managed-by=issp-gitops-developers` gesetzt, ArgoCD-App existiert und syncht. Plattformseite steht.
**Noch offen / nicht testbar:** ghcr-Pull-Berechtigung auf Prod (Pull via `default-dockercfg`, kein explizites `imagePullSecrets`) — scheitert aktuell am nicht-existenten Tag, nicht erkennbar an Auth. Zeigt sich erst mit echtem Tag. Außerdem: SAP-Secret fehlt für Prod komplett (dev hat `plato-sap-secrets.sealed.yaml`, prod nicht; `production/backend.yaml` referenziert SAP auch nicht).
Deploy-Mechanik siehe PDF `ressources/GitHub CICD to OpenShift.pdf`: Image nur auf `development` gebaut + wiederverwendet, Prod via PR-Kommentar `.deploy to production`, Prod-ArgoCD vermutlich `autoSync: false` → manueller Sync. Dev-Cluster = ocp-dev01 läuft sauber (backend 0.38.1).