POS Orders - Failover Flow

%%{init: {
  "theme": "base",
  "themeVariables": {
    "fontSize": "18px",
    "background": "transparent",
    "primaryColor": "#ffffff",
    "primaryBorderColor": "#64748b",
    "lineColor": "#64748b",
    "edgeLabelBackground": "#ffffff",
    "actorBkg": "#038851",
    "actorTextColor": "#ffffff",
    "actorBorder": "#026139",
    "actorLineColor": "#94a3b8",
    "signalColor": "#64748b",
    "signalTextColor": "#059669",
    "noteBkgColor": "#e6f4ee",
    "noteTextColor": "#02502f",
    "noteBorderColor": "#038851",
    "activationBkgColor": "#c6ebdc",
    "activationBorderColor": "#026139",
    "sequenceNumberColor": "#ffffff"
  }
}}%%
flowchart TD
    A([NEW ORDER]):::start --> B[ORDER WEBHOOK SENT]
    B --> C[Connection attempted<br/>for 3 seconds]

    C --> D{🟢 Connection Made?}
    C --> E{🔴 No Connection?}
    C --> F["Error 502, 503, 504"]

    D --> G["Response time ≤ 30s"]
    D --> H["Response time > 30s<br/><b>Read Timeout</b>"]

    E --> I
    F --> I["<b>RETRY</b><br/>Initial retry after 10s<br/>exponential backoff<br/>of factor 2"]:::retry

    I --> J["Fifth retry without<br/>connection<br/><b>Connection Timeout</b>"]
    J -->|loop back| C

    G --> K([ORDER RECEIVED]):::success
    H --> L([FAILED ORDER]):::failed
    J --> L

    K --> M[CHANNEL STATUS UPDATE]
    L --> M

    classDef start fill:#038851,color:#ffffff,stroke:#026139
    classDef success fill:#ffffff,stroke:#038851,stroke-width:2px,color:#02502f
    classDef failed fill:#ffffff,stroke:#e35d3a,stroke-width:2px,color:#7a2c15
    classDef retry fill:#038851,color:#ffffff,stroke:#026139