<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="Electron" agent="Standing Order Agent" version="24.7.17">
  <diagram name="Rules Module" id="standing-order-rules-module">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1650" pageHeight="900" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="r1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="inputs" target="safety"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="inputs" target="exclusions"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="inputs" target="items"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="inputs" target="basket"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="safety" target="slot"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="exclusions" target="slot"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="items" target="approval"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="basket" target="approval"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="slot" target="decision"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="approval" target="decision"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="versions" target="decision"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="decision" target="allow"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="decision" target="review"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="r14" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#9AB8AD;strokeWidth=2;dashed=0;endArrow=block;endFill=1;fontColor=#547067;fontFamily=Helvetica;fontSize=12;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="decision" target="deny"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="inputs" value="Evaluation facts&#xa;cart · price · slot · preference" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#E4EFFB;strokeColor=#5F88B5;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="60" y="300" width="230" height="130" as="geometry"/></mxCell>
        <mxCell id="safety" value="1 · Safety rules&#xa;restricted products · origin · limits" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#FDE7E0;strokeColor=#C8755E;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="370" y="70" width="250" height="110" as="geometry"/></mxCell>
        <mxCell id="exclusions" value="2 · User exclusions&#xa;exact-only · never-buy" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#FFF1D6;strokeColor=#C58A2C;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="370" y="230" width="250" height="110" as="geometry"/></mxCell>
        <mxCell id="items" value="3 · Item rules&#xa;quantity · cadence · price · substitute" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#DDF4E6;strokeColor=#4F8B6B;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="370" y="390" width="250" height="120" as="geometry"/></mxCell>
        <mxCell id="basket" value="4 · Basket rules&#xa;total · change · must-have" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#DDF4E6;strokeColor=#4F8B6B;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="370" y="560" width="250" height="110" as="geometry"/></mxCell>
        <mxCell id="slot" value="5 · Slot rules&#xa;day · window · fallback rank" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#E4EFFB;strokeColor=#5F88B5;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="720" y="220" width="240" height="110" as="geometry"/></mxCell>
        <mxCell id="approval" value="6 · Approval rules&#xa;mode · snapshot · expiry" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#FFF1D6;strokeColor=#C58A2C;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="720" y="430" width="240" height="110" as="geometry"/></mxCell>
        <mxCell id="decision" value="Decision reducer&#xa;priority + conflict resolution" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#EEE9FA;strokeColor=#7D68AA;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="1050" y="290" width="250" height="150" as="geometry"/></mxCell>
        <mxCell id="allow" value="ALLOW&#xa;continue deterministically" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#DDF4E6;strokeColor=#4F8B6B;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;shape=ellipse;perimeter=ellipsePerimeter;" vertex="1" parent="1"><mxGeometry x="1390" y="120" width="200" height="90" as="geometry"/></mxCell>
        <mxCell id="review" value="NEEDS REVIEW&#xa;explain reasons" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#FFF1D6;strokeColor=#C58A2C;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;shape=ellipse;perimeter=ellipsePerimeter;" vertex="1" parent="1"><mxGeometry x="1390" y="330" width="200" height="90" as="geometry"/></mxCell>
        <mxCell id="deny" value="DENY&#xa;stop and audit" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#FDE7E0;strokeColor=#C8755E;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;shape=ellipse;perimeter=ellipsePerimeter;" vertex="1" parent="1"><mxGeometry x="1390" y="540" width="200" height="90" as="geometry"/></mxCell>
        <mxCell id="versions" value="Versioned rule set&#xa;JSON DSL + test cases" style="rounded=1;whiteSpace=wrap;html=1;arcSize=18;fillColor=#F2F5F3;strokeColor=#80928B;fontColor=#17352B;fontFamily=Helvetica;fontSize=14;fontStyle=1;spacing=10;strokeWidth=1.5;shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=14;" vertex="1" parent="1"><mxGeometry x="720" y="650" width="240" height="100" as="geometry"/></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
