{
  "id": "o907NaeC17Uw78Jv",
  "name": "Sales Order Prioritization Based on Customer SLA",
  "tags": [],
  "nodes": [
    {
      "id": "fed36f3d-9961-48ce-b978-016bd12a8454",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        1280
      ],
      "parameters": {
        "width": 352,
        "height": 800,
        "content": "## Overview\nAutomates sales order prioritization using customer SLA tiers, urgency, value, and margin. Critical orders trigger immediate alerts & tasks; normal orders are batched, scheduled, dispatched, and reported.\n\n## How it works\n1. **Trigger** every 15 min \u2192 fetch pending orders.\n2. **Enrich** with SLA data \u2192 calculate priority scores.\n3. **Branch**: critical \u2192 urgent task + alert; else \u2192 batch & schedule.\n4. **Schedule** picking/dispatch \u2192 update ERP \u2192 send summary.\n\n## Setup steps\n1. Replace all `https://your-*.com` URLs with real endpoints.\n2. Add API credentials (header auth shown for alerts).\n3. Adjust batch size, weights, or scheduling logic in Code nodes if needed.\n4. Activate workflow.\n\n(\u2248180 words)"
      },
      "typeVersion": 1
    },
    {
      "id": "db57d111-77d4-4199-9285-5af954bd0049",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        816,
        1504
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "*/15 * * * *"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "867bf758-971b-4450-97e5-26e77489d626",
      "name": "Fetch Pending Orders",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1040,
        1504
      ],
      "parameters": {
        "url": "https://your-erp.com/api/orders",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "status",
              "value": "pending,confirmed"
            },
            {
              "name": "limit",
              "value": "100"
            }
          ]
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "096bd3fd-85cc-4449-8837-14be45277738",
      "name": "Fetch Customer SLA Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1264,
        1504
      ],
      "parameters": {
        "url": "https://your-erp.com/api/customers/batch",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { \"customer_ids\": $json.orders.map(o => o.customer_id) } }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "5b32443d-c53a-4ebe-b6c9-6efc2f9d9248",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        1344
      ],
      "parameters": {
        "color": 5,
        "width": 630,
        "height": 384,
        "content": "\ud83d\udc65 pending orders Retrieves customer SLA tiers Delivery timeframes & priorities than\n\ud83c\udfaf Calculates priority scores Urgency 40% + Tier 30% + Value 20% + Margin 10% after we get calculates \u26a0\ufe0f Identifies critical orders\nSLA breach = Immediate action"
      },
      "typeVersion": 1
    },
    {
      "id": "6b358de4-cb68-4d1b-87be-1b19f3b239a5",
      "name": "Calculate Priority Scores",
      "type": "n8n-nodes-base.code",
      "position": [
        1488,
        1504
      ],
      "parameters": {
        "jsCode": "const ordersData = $input.all()[0].json;\nconst customersData = $input.all()[1].json;\n\nconst customerSLAMap = {};\nif (customersData.customers) {\n  customersData.customers.forEach(customer => {\n    customerSLAMap[customer.customer_id] = {\n      sla_tier: customer.sla_tier || 'bronze',\n      delivery_days: customer.delivery_days || 7,\n      priority_multiplier: customer.priority_multiplier || 1,\n      profit_margin: customer.profit_margin || 20\n    };\n  });\n}\n\nconst tierWeights = {\n  'platinum': 100,\n  'gold': 75,\n  'silver': 50,\n  'bronze': 25,\n  'standard': 10\n};\n\nconst enrichedOrders = ordersData.orders.map(order => {\n  const customerSLA = customerSLAMap[order.customer_id] || {\n    sla_tier: 'bronze',\n    delivery_days: 7,\n    priority_multiplier: 1,\n    profit_margin: 20\n  };\n  \n  const orderDate = new Date(order.created_at);\n  const slaDeadline = new Date(orderDate);\n  slaDeadline.setDate(slaDeadline.getDate() + customerSLA.delivery_days);\n  const daysUntilBreach = Math.ceil((slaDeadline - new Date()) / (1000 * 60 * 60 * 24));\n  \n  const urgencyScore = daysUntilBreach <= 0 ? 1000 : (100 / Math.max(daysUntilBreach, 1));\n  const tierScore = tierWeights[customerSLA.sla_tier.toLowerCase()] || 10;\n  const valueScore = Math.min((order.total_amount || 0) / 100, 100);\n  const marginScore = (customerSLA.profit_margin || 20);\n  \n  const priorityScore = Math.round(\n    (urgencyScore * 0.4) + \n    (tierScore * 0.3) + \n    (valueScore * 0.2) + \n    (marginScore * 0.1)\n  ) * customerSLA.priority_multiplier;\n  \n  let urgencyLevel = 'normal';\n  if (daysUntilBreach <= 0) urgencyLevel = 'critical';\n  else if (daysUntilBreach <= 1) urgencyLevel = 'urgent';\n  else if (daysUntilBreach <= 2) urgencyLevel = 'high';\n  \n  return {\n    ...order,\n    sla_info: {\n      tier: customerSLA.sla_tier,\n      delivery_days: customerSLA.delivery_days,\n      deadline: slaDeadline.toISOString(),\n      days_until_breach: daysUntilBreach,\n      urgency_level: urgencyLevel\n    },\n    scoring: {\n      priority_score: priorityScore,\n      urgency_score: Math.round(urgencyScore),\n      tier_score: tierScore,\n      value_score: Math.round(valueScore),\n      margin_score: marginScore\n    },\n    profit_margin: customerSLA.profit_margin\n  };\n});\n\nenrichedOrders.sort((a, b) => b.scoring.priority_score - a.scoring.priority_score);\n\nreturn enrichedOrders.map(order => ({ json: order }));"
      },
      "typeVersion": 2
    },
    {
      "id": "b602f629-fbac-49a4-86d5-9281da31e1ca",
      "name": "Check if SLA Critical",
      "type": "n8n-nodes-base.if",
      "position": [
        1712,
        1504
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.sla_info.days_until_breach }}",
              "operation": "smallerEqual"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5cba1751-15e4-4d4c-bcfd-c28cae3db6f6",
      "name": "Create Urgent Picking Task",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1936,
        1408
      ],
      "parameters": {
        "url": "https://your-wms.com/api/picking-tasks/urgent",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"order_id\": $json.order_id,\n  \"priority\": \"critical\",\n  \"sla_deadline\": $json.sla_info.deadline,\n  \"customer_tier\": $json.sla_info.tier,\n  \"items\": $json.items,\n  \"warehouse_location\": $json.warehouse_id || \"MAIN\",\n  \"notes\": \"URGENT: SLA breach in \" + $json.sla_info.days_until_breach + \" days\",\n  \"assign_to\": \"senior_picker\",\n  \"auto_schedule\": true\n} }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "f1e04e3e-af01-4dc5-966d-c263901fa1f0",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        1280
      ],
      "parameters": {
        "color": 7,
        "width": 438,
        "height": 320,
        "content": "\ud83d\udea8 Creates urgent task Assign to senior picker immediately tha \ud83d\udcf1 Alerts manager via SMS + Email High priority notification"
      },
      "typeVersion": 1
    },
    {
      "id": "de7fa61a-28ee-4f68-8d31-d4dc5167d69a",
      "name": "Alert Warehouse Manager",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2160,
        1408
      ],
      "parameters": {
        "url": "https://your-notification-service.com/api/send",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"channel\": \"sms,email\",\n  \"recipient\": \"warehouse-manager@company.com\",\n  \"priority\": \"high\",\n  \"subject\": \"\ud83d\udea8 CRITICAL SLA Alert - \" + $json.order_id,\n  \"body\": \"Critical order! Order: \" + $json.order_id + \" | Tier: \" + $json.sla_info.tier + \" | Breach: \" + Math.abs($json.sla_info.days_until_breach) + \" days | Value: $\" + $json.total_amount\n} }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.1
    },
    {
      "id": "3f2ee818-d814-4520-86e2-1d3caf5a4f86",
      "name": "Batch Normal Orders",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1936,
        1872
      ],
      "parameters": {
        "options": {},
        "batchSize": 10
      },
      "typeVersion": 3
    },
    {
      "id": "599c9d46-8038-4aa8-a12a-eae69c7a95d0",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        1680
      ],
      "parameters": {
        "color": 2,
        "width": 422,
        "height": 352,
        "content": "\ud83d\udce6 Batches orders in groups of 10 Optimizes processing after execution \ud83d\udcc5 Smart scheduling by urgency High: 4hrs | Normal: Today | Low: 2-3 days"
      },
      "typeVersion": 1
    },
    {
      "id": "a987eb38-c86a-4fe5-b34e-2c0c41cc6031",
      "name": "Generate Picking Schedule",
      "type": "n8n-nodes-base.code",
      "position": [
        2176,
        1872
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst ordersByUrgency = {\n  high: [],\n  normal: [],\n  low: []\n};\n\nitems.forEach(item => {\n  const order = item.json;\n  const urgency = order.sla_info.urgency_level;\n  \n  if (urgency === 'high' || urgency === 'urgent') {\n    ordersByUrgency.high.push(order);\n  } else if (order.sla_info.days_until_breach <= 4) {\n    ordersByUrgency.normal.push(order);\n  } else {\n    ordersByUrgency.low.push(order);\n  }\n});\n\nconst now = new Date();\nconst schedules = [];\n\nordersByUrgency.high.forEach((order, index) => {\n  const scheduledTime = new Date(now.getTime() + (index * 30 * 60000));\n  schedules.push({\n    ...order,\n    scheduled_time: scheduledTime.toISOString(),\n    time_slot: 'high_priority',\n    estimated_pick_duration: 45\n  });\n});\n\nordersByUrgency.normal.forEach((order, index) => {\n  const scheduledTime = new Date(now.getTime() + ((index + 8) * 60 * 60000));\n  schedules.push({\n    ...order,\n    scheduled_time: scheduledTime.toISOString(),\n    time_slot: 'normal',\n    estimated_pick_duration: 30\n  });\n});\n\nordersByUrgency.low.forEach((order, index) => {\n  const scheduledTime = new Date(now.getTime() + ((index + 24) * 60 * 60000));\n  schedules.push({\n    ...order,\n    scheduled_time: scheduledTime.toISOString(),\n    time_slot: 'standard',\n    estimated_pick_duration: 30\n  });\n});\n\nreturn [{ json: { \n  schedules: schedules, \n  summary: {\n    total_orders: schedules.length,\n    high_priority: ordersByUrgency.high.length,\n    normal_priority: ordersByUrgency.normal.length,\n    low_priority: ordersByUrgency.low.length\n  }\n}}];"
      },
      "typeVersion": 2
    },
    {
      "id": "aff8f182-17c2-4762-943e-ebc7b7cfc1cb",
      "name": "Create Bulk Picking Tasks",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2384,
        1600
      ],
      "parameters": {
        "url": "https://your-wms.com/api/picking-tasks/bulk",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"tasks\": $json.schedules.map(order => ({\n    order_id: order.order_id,\n    customer_id: order.customer_id,\n    priority: order.sla_info.urgency_level,\n    scheduled_time: order.scheduled_time,\n    estimated_duration: order.estimated_pick_duration,\n    sla_deadline: order.sla_info.deadline,\n    items: order.items,\n    warehouse_location: order.warehouse_id || \"MAIN\",\n    notes: \"Tier: \" + order.sla_info.tier + \" | Score: \" + order.scoring.priority_score\n  })),\n  \"auto_assign\": true,\n  \"optimize_route\": true\n} }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "ac398148-10e9-4064-9f1c-73c75956831a",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2336,
        1488
      ],
      "parameters": {
        "color": 5,
        "width": 1334,
        "height": 320,
        "content": "Creates tasks in WMS (auto-assign + route optimize) \u2192 Plans shipments (Express/Priority/Standard) \u2192 Sends to TMS (book carriers + reserve capacity) \u2192 Updates ERP (status, schedule, deadlines) \u2192 Generates summary report (stats, breakdowns, next deadlines) \u2192 Emails ops team (execution summary)."
      },
      "typeVersion": 1
    },
    {
      "id": "107fd068-d573-448e-8d4a-9f9f526d4d5f",
      "name": "Generate Dispatch Schedule",
      "type": "n8n-nodes-base.code",
      "position": [
        2608,
        1600
      ],
      "parameters": {
        "jsCode": "const scheduleData = $input.first().json;\nconst pickingTasks = $input.all()[1].json;\n\nconst dispatchSchedule = scheduleData.schedules.map(order => {\n  const pickingTime = new Date(order.scheduled_time);\n  const dispatchTime = new Date(pickingTime.getTime() + \n    ((order.estimated_pick_duration + 45) * 60000));\n  \n  let shippingMethod = 'standard';\n  if (order.sla_info.urgency_level === 'critical' || order.sla_info.urgency_level === 'urgent') {\n    shippingMethod = 'express';\n  } else if (order.sla_info.urgency_level === 'high') {\n    shippingMethod = 'priority';\n  }\n  \n  return {\n    order_id: order.order_id,\n    customer_id: order.customer_id,\n    dispatch_time: dispatchTime.toISOString(),\n    shipping_method: shippingMethod,\n    carrier: order.preferred_carrier || 'auto_select',\n    sla_deadline: order.sla_info.deadline,\n    priority: order.scoring.priority_score,\n    customer_tier: order.sla_info.tier\n  };\n});\n\nconst dispatchSlots = {};\ndispatchSchedule.forEach(dispatch => {\n  const hour = new Date(dispatch.dispatch_time).toISOString().slice(0, 13);\n  if (!dispatchSlots[hour]) dispatchSlots[hour] = [];\n  dispatchSlots[hour].push(dispatch);\n});\n\nreturn [{ json: {\n  dispatch_schedule: dispatchSchedule,\n  dispatch_slots: dispatchSlots,\n  total_dispatches: dispatchSchedule.length\n}}];"
      },
      "typeVersion": 2
    },
    {
      "id": "c53642b0-6cd8-4570-bc1a-aa00f5abf420",
      "name": "Schedule Dispatches in TMS",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2832,
        1600
      ],
      "parameters": {
        "url": "https://your-tms.com/api/dispatch/schedule",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "8c114593-3f39-4962-a4d3-e478eb5a4c9f",
      "name": "Update Order Statuses",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3056,
        1600
      ],
      "parameters": {
        "url": "https://your-erp.com/api/orders/update-bulk",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"updates\": $input.first().json.schedules.map(order => ({\n    order_id: order.order_id,\n    status: \"scheduled\",\n    priority_score: order.scoring.priority_score,\n    urgency_level: order.sla_info.urgency_level,\n    scheduled_pick_time: order.scheduled_time,\n    sla_deadline: order.sla_info.deadline,\n    updated_at: new Date().toISOString()\n  }))\n} }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "0770cd61-31d9-4cbe-b225-a41c5b1eaeec",
      "name": "Generate Summary Report",
      "type": "n8n-nodes-base.code",
      "position": [
        3280,
        1600
      ],
      "parameters": {
        "jsCode": "const scheduleData = $input.all()[0].json;\nconst dispatchData = $input.all()[1].json;\nconst updateResponse = $input.all()[2].json;\n\nconst summary = {\n  execution_time: new Date().toISOString(),\n  orders_processed: scheduleData.summary.total_orders,\n  priority_breakdown: {\n    critical: scheduleData.schedules.filter(o => o.sla_info.urgency_level === 'critical').length,\n    urgent: scheduleData.schedules.filter(o => o.sla_info.urgency_level === 'urgent').length,\n    high: scheduleData.summary.high_priority,\n    normal: scheduleData.summary.normal_priority,\n    low: scheduleData.summary.low_priority\n  },\n  sla_tiers: {\n    platinum: scheduleData.schedules.filter(o => o.sla_info.tier === 'platinum').length,\n    gold: scheduleData.schedules.filter(o => o.sla_info.tier === 'gold').length,\n    silver: scheduleData.schedules.filter(o => o.sla_info.tier === 'silver').length,\n    bronze: scheduleData.schedules.filter(o => o.sla_info.tier === 'bronze').length\n  },\n  picking_tasks_created: scheduleData.summary.total_orders,\n  dispatches_scheduled: dispatchData.total_dispatches,\n  next_critical_deadline: scheduleData.schedules\n    .filter(o => o.sla_info.urgency_level === 'critical')\n    .sort((a, b) => new Date(a.sla_info.deadline) - new Date(b.sla_info.deadline))[0]?.sla_info.deadline || 'None'\n};\n\nreturn [{ json: summary }];"
      },
      "typeVersion": 2
    },
    {
      "id": "56d8fefd-1541-4792-acf5-61011feb4e5c",
      "name": "Send Summary Notification",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3504,
        1600
      ],
      "parameters": {
        "url": "https://your-notification-service.com/api/send",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"recipient\": \"operations@company.com\",\n  \"subject\": \"\u2705 SLA Prioritization Complete\",\n  \"body\": \"Orders: \" + $json.orders_processed + \" | Critical: \" + $json.priority_breakdown.critical + \" | Urgent: \" + $json.priority_breakdown.urgent + \" | High: \" + $json.priority_breakdown.high + \" | Tasks: \" + $json.picking_tasks_created + \" | Dispatches: \" + $json.dispatches_scheduled,\n  \"priority\": \"normal\"\n} }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.1
    },
    {
      "id": "fedd9164-d9fa-4081-a932-6a85b3cefe6a",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        789,
        1408
      ],
      "parameters": {
        "color": 5,
        "width": 422,
        "height": 272,
        "content": "\u23f0 Runs every 15 minutes Fetches pending orders than \ud83d\udce5 Gets pending/confirmed orders Limit: 100 per run"
      },
      "typeVersion": 1
    },
    {
      "id": "1b8f961e-92d8-46f1-b238-4e2cc6786485",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3808,
        1312
      ],
      "parameters": {
        "width": 464,
        "height": 800,
        "content": "## Overview\n\n\nAutomates sales order prioritization using customer SLAs, inventory status, and margin criteria. Plans shipments, creates WMS & TMS tasks, and notifies teams automatically once scheduled, dispatched, and reported.\n\n**How it works**\n\nTrigger runs every 15 min to fetch pending orders.\n\nEnrich data with SLA to calculate priority score.\n\nBranch logic: urgent \u2192 alert & create tasks; normal \u2192 batch schedule.\n\nDispatch info pushed to ERP & digital channels.\n\nSetup steps\n\nReplace URLs with your API endpoints.\n\nAdd authentication headers as shown for each HTTP node.\n\nAdjust cron, logic, weights, or scheduling as required.\n\nActivate workflow.\n\n**Output**\n\n\u2705 WMS & TMS tasks created (with assigned users & routes)\n\ud83d\ude9a Shipments planned & booked (Express / Priority / Standard)\n\ud83d\udcbe ERP updated (status, schedules, deadlines)\n\ud83d\udcca Summary report generated (stats, breakdowns, next deadlines)\n\ud83d\udce7 Execution summary emailed to ops team"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9709981c-1cb1-4576-8255-659696bd76bf",
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch Pending Orders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Batch Normal Orders": {
      "main": [
        [
          {
            "node": "Generate Picking Schedule",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Pending Orders": {
      "main": [
        [
          {
            "node": "Fetch Customer SLA Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if SLA Critical": {
      "main": [
        [
          {
            "node": "Create Urgent Picking Task",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Batch Normal Orders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Order Statuses": {
      "main": [
        [
          {
            "node": "Generate Summary Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Warehouse Manager": {
      "main": [
        [
          {
            "node": "Create Bulk Picking Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Customer SLA Data": {
      "main": [
        [
          {
            "node": "Calculate Priority Scores",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Summary Report": {
      "main": [
        [
          {
            "node": "Send Summary Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Priority Scores": {
      "main": [
        [
          {
            "node": "Check if SLA Critical",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Bulk Picking Tasks": {
      "main": [
        [
          {
            "node": "Generate Dispatch Schedule",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Picking Schedule": {
      "main": [
        [
          {
            "node": "Create Bulk Picking Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Urgent Picking Task": {
      "main": [
        [
          {
            "node": "Alert Warehouse Manager",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Dispatch Schedule": {
      "main": [
        [
          {
            "node": "Schedule Dispatches in TMS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Dispatches in TMS": {
      "main": [
        [
          {
            "node": "Update Order Statuses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}