<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="Critical Flow — One Event Becomes One Invoice Line" id="12-critical-flow-event-to-line">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="970" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="n.s-prod" value="&lt;b&gt;Producer&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="60" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico1" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.s-prod">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-api" value="&lt;b&gt;Ingest API&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#4a3200;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="290" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico2" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAABmJLR0QA/wD/AP+gvaeTAAAEyElEQVRoge2aW0ybZRjHf6W0QCEDwhihiGxgaaFyENiEIdkGA0ZmYAQTF+O8WbJkJmrijQvBuQs1Xuit2Y2J2+IBjMLizDKc6NIBMxyEDoRymBwsh3CQleMYBy/4XN2Ewkdf1uD6v3r6Hp7/80vz9nm/toqPC5bZzvJwdQHOyg3garkBXC03gKv1xANo/NGlgUL+TgW6NDT+TvrjuemdmgD2FpKQi8qbC28x2itve3AE+e9wf47ma9SVMzOxyTI2A+AbyN5C4nNReTFzF5U3SvlpPJQA9++RUkDCEczXqCtn+i/ZeeQ5a/xJLuC5o6i8sLZR9x2+gWS/Ltv1gaq/YKyffUUk55OYR+vP1JYyNSYjw0YBVkpPehFPNdY2ar6izwwQnyO/6odlbaP8fcJi2FdEfA7GTFqrZGCsD6AJIDl/ldLFagVDa+D5l+wYt0qZXA/DEYBaQ8YJ4g6jVNHTRO3XDLSLLPq/GmiXMNKOE5+D8RC3r2O6xPzMmlscAUSnkZhHbzM1XzJgEV/uWhpo59tzaPXsf4XEPIa7aPlpzcWO+sDKB4Xp4mOt/oEGLJgu2stYS098J3a5Nt+J/62M17g3RW8z5krSjrMzfP04LEaIsyCAUB1LS0yOA4REERazfhyqE+IsCKDsXYa7pbjiA/u4gzgkilc/EWC97c+AG8DV2nIA/xB2J6HYxBPPxiQeQOX10MvEPIrOEhS+ypQQCQbYk8TJ8+yK/Ce7kpgDDHUy2seuSE6eZ0+SWEOhALsTyT/D0qL98hiZgm+gdBWbm2RhnoJiIlMEeooDiEikoJhZG2UlTAxJg8ZMFuax3ASwjVBWwvQ4+WdEMggDOPIGnioqPrRXrwkgMoWuX5mbkkZsI1z+CKWS7NOibMUB1JWDgqxTqH2kkdgDeChpuW5fo/Yh6xQoqCsXZSsOoPEKv3yG1kDRexKDMZPJMfpuSwtU3hSWoDVgukTjFVG2gu5CK2r4HoWSjBNo9cxNszOC2lKWl6TZMANaAzc+p75CoKdQAKC+gjt1jFvJPg3LtFbZp3qauPAm41axhlvQyMateKrRZ9Dfwt3hR6eES/A7sKKFeb45i8djuWdtCQAw3LVFiR+V+zbqam17ADFnwC+IuSnmZ5m14RuIp1qK/YJQeq4S+wbiFyTEWRDAsWIAcyU/fsrRtwmPk+JjxYRErRKvrBEiMQCtVUxPMNQJ0G5isFOKW6vobV4lbjdhG8GYKcBaDMBvP9i/VjFXPjS+amyuZLhbDMC2P8RuAFfL0RlYmAcoOkfXLSzV9Jntd+MtlcKDp+PRp/NMqr2MteQIwHITtQ/6DJ49TFw2szY6arBU82frlpAoPHjKiD6d6P347GB5GWsbFpP0SL2WHAEsLtB0laar+OxAl0rsIRJySTjC7CR/NNBRzZ0GEXUr0BqITkefjm8gwFg/9RX8fmNDP1Ru6GN01oa5EnMlO4KJ3o/+BWIPEnuQqTFso05Vb8wi7WWpKw91Ul9BRw22ERkZ5PUB2wj1l6m/jH+IRKLVAywuyEoDsLQIoNUz3E3jFTpqHn362aAUTv5rMSCU4N103gK5aRToUhnpYWLQGX+nO/HE4GYrWKaz1klz+B/0ATeAq+UGcLXcAK7Wtgf4Gw0UqbdP8rvOAAAAAElFTkSuQmCC;" vertex="1" parent="n.s-api">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-ledger" value="&lt;b&gt;Event ledger&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="520" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico3" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADIUlEQVRoge3aTWwVVRjG8V9LkW+kwYDY6kLxC5QNJEIMECEGNSa6MCaGHStXrtyqxI0xJLCCDTGBBRuCiSQuTIgxhAUsABP5SAQlCFhlYaB82AqNdfFO06E9U+5M7+29rf0nbyY9M3Pmee85M/Ocd8o0zaVtHOfOwoosuvBEFp2YjTnZMf9kx9/AAK7jGv7ErziHK1VFlEmgE5vwOtbjOXRUvfAIbuI0vscRnMK/9ei4TQg+KH7JwQmKK/hMjGxlVuCHCRSdir/xqZiKpXgFt5osPh9HxH01ihkFbSfwWNmsG8jT6MexkTvaEwcvFU+TVmN1qjGVQKqtFUjqalWxNTMlE7gt7vxWo7fMwV9p/qMzH31YWyaBDuxrAeGD+AtvlRGfZzOON0n4HezG4qri86zCTpxvsOi7+A4fYmFVsV3Yj2UF+7vxAb7At7ikmtG7IVznfnyM1xTYBbyNHakdKTvdjavixjmAPfixoOM8S8RbfEnW76Jc//1Zf/1iHfB79vdYzMF7+AhrcBjv1qBDt9G/1gV8iS1YUEsnFVmObTgkplNewzepE8YagSIGREIXcBG/ZNurYmHSl108da1FmCsWR89msTzbvihGsIjkCFRZUXUYXkqORa9IZpaYDkXze1zUa0mY4tEsGsqU9EKTilQCdakGNICkrlQC19HTWC2VOF3m4LWGbXUrROGifixewtEmC+/D9irih2jDG/ga9yZQ+DV8jieriF6A5xPti/E+9uJn8Uaul+BbYrQ/wTqjyz3tCqoSRVbikjBxu/BbQaJzxdt4ZXbO49l2vmEj1+lBI3dXPCT+EA+Ky/gp2w4mrtGON0WZsUcFMzcgTNRWE/BWzfGyKClezGlJmrmHWYkZeCeL+zgpqmMnDRu5O+MU2yXM3At4FRvwVK0nl/FCM8X8XDeivUckc1lMlV4xVfrE3J4pptVCYermibLlM8KJziuhYRT1MHNDHzY21qGv0kxJLzSpmJIJTJcWGxDTpcVmCP9/lBarfKnvFh+6VwnPMvSl/pGS/dwUpvEszogy43Fh+mpmPP9qMJJ6lxanmRT8B1M0bJ9FjBNdAAAAAElFTkSuQmCC;" vertex="1" parent="n.s-ledger">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-agg" value="&lt;b&gt;Aggregator&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="750" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico4" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.s-agg">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-rate" value="&lt;b&gt;Rating service&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="980" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico5" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.s-rate">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-run" value="&lt;b&gt;Invoice run&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1210" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_ico6" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACpUlEQVRoge3YTYhNYRzH8Y+3iLzkbZoSdhJZkI1YUWzYWbCxJCU1ZShlpVhQKIoFG28pKxaKDUnyUtTQZJCExZSJEYMMFs+cXMe5955z7jn3jppf/evWfc7/+f6e5/+8nMOIWqsxJeWdhA3YhMUYQG9JfRWqZTiJfvyKxRPsxuyW0VXRHAGsx7/QSfED17ER41rACyYMAVwZAkoDnhTvhRlb2izwWiXSaJRWYvOxDy9yQOWZnW+4jPUaKLFGS+QBdmIGFuGgsAuVXmLTcUS+EnmDA1hQJff4oUG5mnNQ7mNdLfjJeJQx6QDOY61sZ0o7dqErY38/saVa0r0ZEt3BVkzLAF1Ny3EcfSn77sOUpEQ36zz4FkexpADoJI0XFu4lfK/DsjopwdOEhgO4INReWdeOJEUl9iSB6Rc2Rw1H10n0CS/RjcEySKuoF8/wOstDSTMQxaA/x//YIkljahcOs1c1WP6agbQG4mvhIOYWBD0aa6Sr/UIMRFF5KcuzPqYJh93zjP0WZqAyeoSpn5UCPLpPfWmgv8INRPEV57Aqljsa7ax9DDbbQGV0oQOn8Tnjs++wHwtbaSBP3Pb3i87EegbK3BLT6oOwAx0TDq5MaqWBhziFs8KCzqVmG+jHRZzA4yISNtPAGewQFnRhqncXKlLdCoanuQZK0YiBVuu/NzAcDrJqasOeeo0qDXwsjyWT2tCJbcJVIkkfoh+VJXSrRKg0asNh4RW2Q3X4r7iX9Mds4R20rItaZx3wtDfWvbVGYR6uNclAVvA+bMeoWgYirRC+i5ZhYKbwTp0WvH+ofa6PaCtxoyADh2Qf8X2Ymgc8rjJmpJQRb6WRUsHLNNJU8LgaMdJS8LiyGBlW4HHVMjKsweNaKXyW78Zd4atdIdvhiEZUsH4D+zfN9JHFLwAAAAAASUVORK5CYII=;" vertex="1" parent="n.s-run">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.s-cust" value="&lt;b&gt;Customer&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;collapsible=0;recursiveResize=0;outlineConnect=0;size=58;rounded=1;arcSize=8;fillColor=#08427b;strokeColor=#073b6f;fontColor=#ffffff;fontSize=12;fontFamily=Segoe UI;verticalAlign=top;spacingTop=9;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1440" y="80" width="200" height="770" as="geometry" />
        </mxCell>
        <mxCell id="_plate7" value="" style="rounded=1;arcSize=22;html=1;fillColor=#ffffff;strokeColor=none;movable=0;resizable=0;connectable=0;" vertex="1" parent="n.s-cust">
          <mxGeometry x="5" y="13" width="32" height="32" as="geometry" />
        </mxCell>
        <mxCell id="_ico8" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACWklEQVRoge3Zz4tNYRzH8dfIrwmJGcZMIgpJEjZsiA1pLGhK2VDEcpLFWCkrG3tr/8GQHRNWipRhocxmombIaESNjDFj8XTrNHPunXueOfec2zTv+m7Ovd9z3p/uvec8z/eyRLm05Hy+lTiBbuzEFvzGKF6hH0M5XzMXVuAaRjAzTz3BwXI002nHc/OLJ2sKfSW4zqELw7LJJ+te4cYJWoXvdax8pa4WLV7hdp2C89UEthbsrh0/FyierPvF6nM9J/FK/cKqGJFlkQHORvZVYy2OxzTGBtgX2Zf7OWMDdET21aIzpik2wHRkXy3+xTTFBhiN7KvFSExTbIB3kX21eN+Ac1blknxvo9+xvMgA6zGWY4BS1kQ3ImVn1zjaCnZH+MifZpSdXdO4ULR4ko3Cjy9W/lbxynNZh0eyyU/gYhmytTiPD2qLT+EBtuV10bw39XAIZ7BLWHL8wWe8xmPhlrnEoiH2K7RfGI10YgMm8RBv6uhtRY+wfJ7CV3zCC/zIKpIlwBr04oowtErjozD3GRSmFePCTqsNe3EUJ4U712z+4hnuCmOaXOlW39Aqr+oXnjG5cFNYqxclX6kh7Fmo/OUSxJM1jM2x8oeFe3iZAWYwEBtgoAnkK3Uuq/yxJpBO1ttqotW2lD1ZEzeYA9id9kK1AKcb5xLNqbSDaQFasL2xLlHsSDuYFqBN+Kuo2ehKO5gWYHWDRWJJ9YqdCzUNizLAZOEW9ZHqlRZgTGNmnwtlMMube5X/9E3WN2zKEqAFdzTHYm5IWFhWFa1FB44o77nwBS+FrecSTcl/+F0YjmstwYwAAAAASUVORK5CYII=;" vertex="1" parent="n.s-cust">
          <mxGeometry x="9" y="17" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_m9" value="1. POST /events — id, meter, qty, event_ts" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1195;exitDx=0;exitDy=0;entryX=0.5;entryY=0.1195;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-prod" target="n.s-api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m10" value="2. validate schema, check dedup index" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.1714;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2026;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.s-api" target="n.s-api">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="470" y="210" />
              <mxPoint x="470" y="240" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m11" value="3. append, await replication" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2390;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2390;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-api" target="n.s-ledger">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m12" value="4. committed" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.2909;exitDx=0;exitDy=0;entryX=0.5;entryY=0.2909;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-ledger" target="n.s-api">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m13" value="5. 202 accepted — a durability promise" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.3429;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3429;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-api" target="n.s-prod">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m14" value="6. stream by event time" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#d79b00;exitX=0.5;exitY=0.3948;exitDx=0;exitDy=0;entryX=0.5;entryY=0.3948;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-ledger" target="n.s-agg">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m15" value="7. window, watermark, provisional" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.4468;exitDx=0;exitDy=0;entryX=0.5;entryY=0.4779;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.s-agg" target="n.s-agg">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="930" y="430" />
              <mxPoint x="930" y="450" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m16" value="8. aggregate + event_range" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#d79b00;exitX=0.5;exitY=0.5143;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5143;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-agg" target="n.s-rate">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m17" value="9. plan version in force at event_ts" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.5662;exitDx=0;exitDy=0;entryX=0.5;entryY=0.5974;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.s-rate" target="n.s-rate">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1160" y="520" />
              <mxPoint x="1160" y="540" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m18" value="10. priced line with tier breakdown" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.6338;exitDx=0;exitDy=0;entryX=0.5;entryY=0.6338;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-rate" target="n.s-run">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m19" value="11. anomaly gate, then issue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.6857;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7169;entryDx=0;entryDy=0;align=left;spacingLeft=6;" edge="1" parent="1" source="n.s-run" target="n.s-run">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1390" y="610" />
              <mxPoint x="1390" y="630" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="_m20" value="12. invoice issued — immutable" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#d79b00;exitX=0.5;exitY=0.7532;exitDx=0;exitDy=0;entryX=0.5;entryY=0.7532;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-run" target="n.s-cust">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m21" value="13. expand this line" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.8052;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8052;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-cust" target="n.s-run">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m22" value="14. evidence query over event_range" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=block;endFill=1;strokeColor=#5a6570;exitX=0.5;exitY=0.8571;exitDx=0;exitDy=0;entryX=0.5;entryY=0.8571;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-run" target="n.s-ledger">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="_m23" value="15. the events behind the figure" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;fontFamily=Segoe UI;verticalAlign=bottom;endArrow=open;endFill=0;dashed=1;strokeColor=#5a6570;exitX=0.5;exitY=0.9091;exitDx=0;exitDy=0;entryX=0.5;entryY=0.9091;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.s-ledger" target="n.s-cust">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="Critical Flow — One Event Becomes One Invoice Line" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1610" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1610" height="10" as="geometry" />
        </mxCell>
        <mxCell id="note" value="Message 5 is the whole design: the acknowledgement follows replication, so an accepted event cannot be lost and messages 13 to 15 are always answerable." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="900" width="1610" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="920" width="1610" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Architecture Practice   ·   date 2026-10" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="930" width="1610" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
