<mxfile host="app.diagrams.net" version="24.0.0">
  <diagram name="cpq-geko Abgrenzung" id="geko76-abgrenzung">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="850" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <!-- cpq Container -->
        <mxCell id="cpq" value="cpq (universell)" style="swimlane;startSize=32;fontSize=14;fontStyle=1;fillColor=#dae8fc;strokeColor=#6c8ebf;swimlaneFillColor=#f5f9ff;rounded=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="40" width="540" height="640" as="geometry" />
        </mxCell>

        <mxCell id="cpq-graph" value="&lt;b&gt;Szenegraph &amp;amp; PMI-Einbau&lt;/b&gt;&lt;br&gt;Gruppe = Weltkoordinaten-Anker&lt;br&gt;PMI-Snap / Placement-Mode" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="50" width="500" height="70" as="geometry" />
        </mxCell>

        <mxCell id="cpq-registry" value="&lt;b&gt;Modul-Registry&lt;/b&gt;&lt;br&gt;Anmeldung pro Produktfamilie" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="140" width="500" height="55" as="geometry" />
        </mxCell>

        <mxCell id="cpq-events" value="&lt;b&gt;Domain-Events&lt;/b&gt; (nach abgeschlossener Topologie-Änderung)&lt;br&gt;element_platziert (Mouse-Up) · pmi_belegt / pmi_frei · element_geloescht" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="215" width="500" height="70" as="geometry" />
        </mxCell>

        <mxCell id="cpq-query" value="&lt;b&gt;Query-API&lt;/b&gt;&lt;br&gt;belegte PMIs eines Nodes (+ Winkel) · Nachbarn + Metadaten" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="305" width="500" height="60" as="geometry" />
        </mxCell>

        <mxCell id="cpq-commands" value="&lt;b&gt;Kommandos&lt;/b&gt;&lt;br&gt;split_in_gruppe · inplace_modelltausch (Node-Identität bleibt) · loeschen" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="385" width="500" height="65" as="geometry" />
        </mxCell>

        <mxCell id="cpq-cascade" value="&lt;b&gt;Lösch-Kaskade mit Hook&lt;/b&gt;&lt;br&gt;registrierte Projektregel darf Löschmenge ändern" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="470" width="500" height="60" as="geometry" />
        </mxCell>

        <mxCell id="cpq-ui" value="&lt;b&gt;Detailmenü-Rahmen&lt;/b&gt;&lt;br&gt;rendert projektspezifische Felder aus Konfiguration" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#6c8ebf;" vertex="1" parent="cpq">
          <mxGeometry x="20" y="550" width="500" height="60" as="geometry" />
        </mxCell>

        <!-- geko Container -->
        <mxCell id="geko" value="geko: Schutzzaun-Modul (projektspezifisch)" style="swimlane;startSize=32;fontSize=14;fontStyle=1;fillColor=#d5e8d4;strokeColor=#82b366;swimlaneFillColor=#f7fcf5;rounded=1;" vertex="1" parent="1">
          <mxGeometry x="820" y="40" width="520" height="510" as="geometry" />
        </mxCell>

        <mxCell id="geko-split" value="&lt;b&gt;Zerlegungsvorschrift&lt;/b&gt;&lt;br&gt;Allround → Steher / Zaun / Steher (in Gruppe)" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="geko">
          <mxGeometry x="20" y="50" width="480" height="60" as="geometry" />
        </mxCell>

        <mxCell id="geko-matrix" value="&lt;b&gt;Bauform-Matrix&lt;/b&gt; (Datentabelle)&lt;br&gt;(Anbau-Seite, belegte Winkel) → Bauform · Artikel-Mapping A–G" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="geko">
          <mxGeometry x="20" y="130" width="480" height="60" as="geometry" />
        </mxCell>

        <mxCell id="geko-height" value="&lt;b&gt;Höhenformel&lt;/b&gt;&lt;br&gt;max(2200, max(Zaunhöhe + Fußfreiheit)) · Sondersteher-Regel" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="geko">
          <mxGeometry x="20" y="210" width="480" height="60" as="geometry" />
        </mxCell>

        <mxCell id="geko-delete" value="&lt;b&gt;Lösch-Sonderregel&lt;/b&gt;&lt;br&gt;Steher → Zäune mit · Zaun → alleinstehende Steher mit · Kettenabbruch" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="geko">
          <mxGeometry x="20" y="290" width="480" height="60" as="geometry" />
        </mxCell>

        <mxCell id="geko-ui" value="&lt;b&gt;Detailmenü-Konfiguration&lt;/b&gt;&lt;br&gt;Bauform-Dropdown gefiltert nach Matrix · Höhen-Untergrenze" style="rounded=1;whiteSpace=wrap;html=1;align=left;spacingLeft=10;fillColor=#ffffff;strokeColor=#82b366;" vertex="1" parent="geko">
          <mxGeometry x="20" y="370" width="480" height="60" as="geometry" />
        </mxCell>

        <!-- Kanten -->
        <mxCell id="e0" value="(0) registriert sich einmalig&#10;für Allround-Produktfamilie" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;strokeColor=#82b366;fontSize=11;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="geko-split" target="cpq-registry">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e1" value="(1) Domain-Event" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;strokeColor=#6c8ebf;fontSize=11;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="cpq-events" target="geko-matrix">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e2" value="(2) Abfrage: belegte PMIs + Winkel,&#10;Nachbarn, Zaun-Metadaten" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;strokeColor=#82b366;fontSize=11;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="geko-height" target="cpq-query">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e3" value="(3) Kommando: In-Place-Tausch,&#10;Höhe setzen, löschen" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;strokeColor=#82b366;fontSize=11;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="geko-delete" target="cpq-commands">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e4" value="Hook: Löschmenge anpassen,&#10;Heal auslösen" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;startArrow=block;strokeColor=#b85450;fontSize=11;exitX=1;exitY=0.5;entryX=0;entryY=0.75;dashed=1;" edge="1" parent="1" source="cpq-cascade" target="geko-delete">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="e5" value="liest Konfiguration" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;strokeColor=#9673a6;fontSize=11;exitX=1;exitY=0.5;entryX=0;entryY=0.75;dashed=1;" edge="1" parent="1" source="cpq-ui" target="geko-ui">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <!-- Legende -->
        <mxCell id="legend" value="Zyklus pro Topologie-Änderung: (1) Event → (2) Abfrage → (3) Kommando&#10;Abgrenzungsregel: wortgleich wiederverwendbar = cpq · kennt Artikelnummern / Winkel-Matrix / Zaun-Begriffe = geko" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;spacingLeft=10;fontSize=12;" vertex="1" parent="1">
          <mxGeometry x="40" y="710" width="900" height="60" as="geometry" />
        </mxCell>

      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
