sequenceDiagram participant C as FIX Client Simulator participant G as Gateway FIX callback participant W as Gateway bounded worker participant P as Protobuf mapper / gRPC stub participant O as OMS C->>G: FIX 4.4 NewOrderSingle (35=D) G->>G: MessageCracker -> FixOrderMapper -> IncomingOrder G->>W: Atomic admission with original SessionID Note over G,W: Callback returns without waiting for OMS; full queue logs NOT_SUBMITTED W->>P: FixToProtobufMapper.map(order) P->>O: gRPC SubmitOrder(SubmitOrderRequest), per-call deadline O->>O: Validate; atomic in-memory identity lookup / business decision alt Definitive accepted or rejected decision O-->>P: SubmitOrderResponse(order_id, decision, reject_reason) P-->>W: OrderSubmissionResult W->>W: Create and track ExecutionReport with stable ExecID alt Original session logged on; local engine accepts W-->>C: FIX ExecutionReport (35=8), NEW or REJECTED C->>C: Correlate SessionID + ClOrdID; detect repeated ExecID else Original session absent or send fails W->>W: DELIVERY_PENDING / DELIVERY_FAILED; no reconnect drain end else Invalid request O-->>P: gRPC INVALID_ARGUMENT P-->>W: INVALID_REQUEST; log without ExecutionReport else Deadline, unavailable transport, or unusable response P->>P: Client observes failure or cannot establish a decision Note over P,O: OMS may already have stored an acceptance before the deadline P-->>W: UNKNOWN_OUTCOME W->>W: Log correlation; no ExecutionReport; no application retry end Note over C,O: FIX resend of persisted reports preserves ExecID; business state is volatile