flowchart TB
  %% Classes for styling
  classDef nodeDefault fill:#2F2F2F,stroke:#4F4F4F,color:#FFFFFF,font-weight:300
  classDef subgraphTitle fill:#335C67,stroke:#264653,color:#FFFFFF,font-weight:400

  %% Overall Flow
  %% --------------------------------------

  %% Subgraph A: MC Number and Carrier Verification
  subgraph A[MC Number and Carrier Verification]
  direction TB
  A1((Greeting_RequestMCNumber)):::nodeDefault
  A2((McNumberRequired)):::nodeDefault
  A3((NoMcNumberTransfer)):::nodeDefault
  A4((ToolCall-searchCarriers)):::nodeDefault
  A5((McNumberNotFound)):::nodeDefault
  A6((UpdateMcNumber)):::nodeDefault
  A7((PhoneNumberCheck)):::nodeDefault

  A1 -->|User provides MC Number| A4
  A1 -->|User does not provide MC Number| A2

  A2 -->|User provides MC Number| A4
  A2 -->|User still withholds MC Number| A3

  A4 -->|apiCarrierStatus != VERIFIED| A5
  A4 -->|apiCarrierStatus == VERIFIED| A7

  A5 -->|User confirms same MC| A4
  A5 -->|User updates MC| A6

  A6 -.->|skip user response| A4

  end

  %% Subgraph B: AI Agents Pitch & Load Reference
  subgraph B[AI Pitch and Load Reference Gathering]
  direction TB
  B1((aiAgentsHHPitch)):::nodeDefault
  B2((Activate AI Agent Nurture)):::nodeDefault
  B3((log AI negativity)):::nodeDefault
  B4((NoMcNumberTransfer)):::nodeDefault

  A7 -->|always| B1
  B1 -->|User is interested| B2
  B1 -->|User is not interested| B3

  B2 -->|userLoadReference not null| C1((ToolCall-searchLoads))
  B2 -->|userLoadReference is null| B4

  B3 -->|userLoadReference not null| C1
  B3 -->|userLoadReference is null| B4

  end

  %% Subgraph C: Load Search & Handling
  subgraph C[Load Search and Retrieval]
  direction TB
  C1((ToolCall-searchLoads)):::nodeDefault
  C2((LoadNotFound)):::nodeDefault
  C3((LoadFound)):::nodeDefault
  C4((NoMcNumberTransfer)):::nodeDefault
  C5((LoadDenied)):::nodeDefault
  C6((PreNegotiationBackout)):::nodeDefault
  C7((GetLoadDetails)):::nodeDefault
  C8((LoadDetailsNotFound)):::nodeDefault
  C9((LoadDetailsFound)):::nodeDefault

  C1 -->|apiLoadUUID not null| C3
  C1 -->|apiLoadUUID is null| C2

  C2 -->|User provides revised ref| C1
  C2 -->|No clarity from user| C4

  C3 -->|always proceed| C7
  C7 -->|apiLoadStatus == PUBLISHED| C9
  C7 -->|apiLoadStatus != PUBLISHED| C8

  C8 -->|User responded| C4

  C9 -->|User confirms details| D1((getOfferDetails))
  C9 -->|User denies details| C5

  C5 -->|No longer interested| C6

  end

  %% Subgraph D: Offer Details & Negotiation
  subgraph D[Offer, Negotiation, and Bidding]
  direction TB
  D1((getOfferDetails)):::nodeDefault
  D2((OfferDetailsNotFound)):::nodeDefault
  D3((TransferForMinBid)):::nodeDefault
  D4((OfferDetailsFound)):::nodeDefault
  D5((getTradeAskId)):::nodeDefault
  D6((TradeAskIdNotFound)):::nodeDefault
  D7((getTradeAskIdRetry)):::nodeDefault
  D8((TradeAskIdFound)):::nodeDefault
  D9((RateAcceptInit)):::nodeDefault
  D10((Negotiation1)):::nodeDefault
  D11((Negotiation2)):::nodeDefault
  D12((RateAcceptInit_Neg)):::nodeDefault
  D13((placeBid)):::nodeDefault
  D14((201)):::nodeDefault
  D15((500)):::nodeDefault

  D1 -->|apiOfferOriginSingleLineAddress not null| D4
  D1 -->|apiOfferStatusDoubleCheck != PUBLISHED| D2

  D2 -->|User responded| D3

  D4 -->|always choose| D5

  D5 -->|apiTradeAskId not null| D8
  D5 -->|apiTradeAskId is null| D6

  D6 -->|User responded| D7
  D7 -->|apiTradeAskId is not null| D10
  D7 -->|apiTradeAskId is null| D2

  D8 -->|User accepts rate| D9
  D8 -->|User counters rate| D10

  D9 -->|bidConfirmedFinal true| D13
  D9 -->|bidConfirmedFinal false| D10

  D10 -->|Proposed rate within valid range| D12
  D10 -->|Proposed rate outside range| D11

  D11 -->|Now within range| D12
  D11 -->|Still invalid rate| D2

  D12 -->|bidConfirmedFinal true| D13

  D13 -->|apiPlaceBidTradeBidId not null| D14
  D13 -->|apiPlaceBidTradeBidId is null| D15

  end

  %% Subgraph E: Post-Bid or Additional Assistance
  subgraph E[Completion and Further Assistance]
  direction TB
  E1((EndCall)):::nodeDefault
  E2((FurtherAssistance)):::nodeDefault
  E3((New Route Node)):::nodeDefault
  E4((FurtherAssistance_Transfer)):::nodeDefault

  D14 -->|the conversation is ending| E1
  D14 -->|User needs further help| E2
  D15 -->|the conversation is ending| E1
  D15 -->|User needs further help| E2

  E2 -->|User responded| E3

  E3 -->|userSecondIntent = bid_again| C1
  E3 -->|userSecondIntent = something_else| E4

  end

  %% Style subgraphs
  class A subgraphTitle
  class B subgraphTitle
  class C subgraphTitle
  class D subgraphTitle
  class E subgraphTitle

1. State: Greeting_RequestMCNumber (ID: 1)

Purpose

Connectors

  1. (1) → (3335fbdb...) "ToolCall-searchCarriers"
  2. (1) → (a82623ce...) "McNumberRequired"

2. State: McNumberRequired (ID: a82623ce-ade6-4295-92b6-f1df8a440cd2)

Purpose

Connectors

  1. (a82623ce...) → (3335fbdb...) "ToolCall-searchCarriers"
  2. (a82623ce...) → (9f38b67c...) "NoMcNumberTransfer"

3. State: NoMcNumberTransfer (ID: 9f38b67c-15b8-4525-8fd3-3763a3bce8f6)

Purpose

Connectors