{
  "set": "CX Digital — CS SOP demo set for MinimalAI",
  "generated": "2026-09-30",
  "schema": "Agent Operating Procedure (AOP) v0.9",
  "source": "https://swimlanes.cxdigital.nl/",
  "security": "No secrets. Tools by logical name; bind to the AI platform's integrations.",
  "languages": {
    "spec": "en",
    "customer_facing": [
      "nl",
      "en"
    ]
  },
  "sections": [
    {
      "id": "order_delivery_wismo",
      "nl": "Order, levering & WISMO",
      "en": "Order, delivery & WISMO",
      "procedures": [
        "CS-W01",
        "CS-W11",
        "CS-W12",
        "CS-W06",
        "CS-W16",
        "CS-W04",
        "CS-W05",
        "CS-E10",
        "CS-W30",
        "CS-W31",
        "CS-W26"
      ]
    },
    {
      "id": "complaints_escalation_incident",
      "nl": "Klacht, escalatie & incident",
      "en": "Complaints, escalation & incident",
      "procedures": [
        "CS-S05",
        "CS-S06",
        "CS-W02",
        "CS-W03",
        "CS-W23",
        "CS-W24",
        "CS-W32",
        "CS-W34"
      ]
    }
  ],
  "procedures": [
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W01 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W01",
        "title": {
          "nl": "Order status & Track & Trace",
          "en": "Order status & Track & Trace"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W01_Order_Status_TrackTrace.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-G04",
          "CS-W02"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w01_order_status_track_trace",
        "description": "Goal: answer “where is my order?” fast and correctly with live status from WMS/webshopplatform. | How: fetch status live, share T&T or communicate expected delivery date.",
        "goal": {
          "nl": "Doel: klantvraag “waar is mijn order?” snel en correct beantwoorden met actuele status uit WMS/webshopplatform. | Hoe: status live ophalen, T&T delen of verwachte leverdatum communiceren.",
          "en": "Goal: answer “where is my order?” fast and correctly with live status from WMS/webshopplatform. | How: fetch status live, share T&T or communicate expected delivery date."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-G04, CS-W02",
        "example_utterances": {
          "nl": [
            "waar is mijn bestelling",
            "wat is de status van mijn order",
            "heb ik al een track en trace"
          ],
          "en": [
            "where is my order",
            "what's my order status",
            "do I have a tracking link"
          ]
        }
      },
      "actors": [
        "Agent",
        "Agent + CRM",
        "Carrier",
        "Customer",
        "WMS / webshopplatform"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "carrier.getTrackTrace",
          "description": "Fetch or file Track & Trace / claim with the carrier.",
          "binding": "<bind per client> — suggested: Sendcloud / carrier integration",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "webshop.getOrder",
          "description": "Read order, payment or refund data from the webshop platform.",
          "binding": "<bind per client> — suggested: E-commerce platform (Shopify, WooCommerce, Magento…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Vraag: waar is mijn order?",
              "en": "Where is my order?"
            },
            "what": {
              "nl": "Klant vraagt via e-mail, chat of telefoon naar de status van de bestelling.",
              "en": "Customer asks for the order status via email, chat or phone."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent + CRM",
            "label": {
              "nl": "Order opzoeken",
              "en": "Look up order"
            },
            "what": {
              "nl": "Agent zoekt de order op ordernummer of e-mailadres in CRM.",
              "en": "Agent looks up the order by order number or email in CRM."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "WMS / webshopplatform",
            "label": {
              "nl": "Status ophalen",
              "en": "Fetch status"
            },
            "what": {
              "nl": "Actuele order- en verzendstatus komt uit WMS en webshopplatform.",
              "en": "Live order and shipping status from WMS and webshopplatform."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Al verzonden?",
              "en": "Already shipped?"
            },
            "what": {
              "nl": "Beslissing: is de order al verzonden?",
              "en": "Decision: has the order already shipped?"
            },
            "detail": {
              "nl": "Ja → Track & Trace delen (stap 6). Nee → verwachte leverdatum communiceren (stap 5).",
              "en": "Yes → share Track & Trace (step 6). No → communicate expected delivery (step 5)."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Already shipped?)",
                "next": "S5"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Verwachte leverdatum melden",
              "en": "Share expected delivery"
            },
            "what": {
              "nl": "Nog niet verzonden: agent meldt de verwachte verzend-/leverdatum uit WMS.",
              "en": "Not yet shipped: agent communicates the expected ship/delivery date from WMS."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Carrier",
            "label": {
              "nl": "Track & Trace delen",
              "en": "Share Track & Trace"
            },
            "what": {
              "nl": "Verzonden: agent deelt de Track & Trace-link van de vervoerder.",
              "en": "Shipped: agent shares the carrier's Track & Trace link."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Klant geïnformeerd",
              "en": "Customer informed"
            },
            "what": {
              "nl": "Klant weet de status — vraag opgelost, minder herhaalcontact.",
              "en": "Customer knows the status — query resolved, less repeat contact."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Live source: status must come from WMS/webshopplatform, not manual guessing.",
          "rule_nl": "Live bron: status moet uit WMS/webshopplatform komen, niet handmatig gokken.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W01'"
        },
        {
          "rule": "T&T timing: only share the link once the carrier has it; otherwise manage expectations.",
          "rule_nl": "T&T-timing: link pas delen als de vervoerder ’m heeft; anders verwachting managen.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W01'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W01 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W01_Order_Status_TrackTrace.html"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W02",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W11 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W11",
        "title": {
          "nl": "WISMO – mét Sendcloud",
          "en": "WISMO – with Sendcloud"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W11_WISMO_Sendcloud.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W12",
          "CS-G04"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w11_wismo_with_sendcloud",
        "description": "Goal: quickly give the customer clarity on order status via Sendcloud tracking. | WISMO = “Where Is My Order”, the biggest contact driver in e-commerce.",
        "goal": {
          "nl": "Doel: klant snel duidelijkheid geven over de orderstatus via Sendcloud track & trace. | WISMO = “Where Is My Order”, de grootste contactdriver in e-commerce.",
          "en": "Goal: quickly give the customer clarity on order status via Sendcloud tracking. | WISMO = “Where Is My Order”, the biggest contact driver in e-commerce."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W12, CS-G04",
        "example_utterances": {
          "nl": [
            "mijn pakket staat al dagen stil",
            "track en trace werkt niet",
            "wanneer wordt mijn pakket bezorgd"
          ],
          "en": [
            "my parcel hasn't moved for days",
            "tracking link doesn't work",
            "when will my parcel be delivered"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Sendcloud"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "shipping.getTracking",
          "description": "Track & Trace, delivery dates and shipment events.",
          "binding": "<bind per client> — suggested: Sendcloud (or other carrier/shipping integration)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant vraagt: waar is mijn order?",
              "en": "Customer asks: where is my order?"
            },
            "what": {
              "nl": "Klant neemt contact op omdat de bestelling nog niet binnen is.",
              "en": "Customer reaches out because the order hasn't arrived yet."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Order opzoeken in shop/OMS",
              "en": "Look up order in shop/OMS"
            },
            "what": {
              "nl": "Agent zoekt de bestelling op ordernummer of e-mail.",
              "en": "Agent finds the order by order number or email."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Sendcloud",
            "label": {
              "nl": "Track & trace ophalen (Sendcloud)",
              "en": "Fetch tracking (Sendcloud)"
            },
            "what": {
              "nl": "Sendcloud levert automatisch de actuele zendingstatus en tracking link.",
              "en": "Sendcloud automatically provides the current shipment status and tracking link."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Status beoordelen",
              "en": "Assess status"
            },
            "what": {
              "nl": "Agent bepaalt: onderweg, vertraagd of zoek?",
              "en": "Agent decides: in transit, delayed or lost?"
            },
            "detail": {
              "nl": "Bij vertraging/zoek: ga naar carrier-onderzoek (stap R).",
              "en": "If delayed/lost: go to carrier investigation (step R)."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Assess status)",
                "next": "S5"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Klant informeren + tracking link",
              "en": "Inform customer + tracking link"
            },
            "what": {
              "nl": "Agent stuurt status + Sendcloud tracking link, zodat klant zelf kan volgen.",
              "en": "Agent sends status + Sendcloud tracking link so the customer can self-serve."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant volgt zending live",
              "en": "Customer tracks live"
            },
            "what": {
              "nl": "Klant volgt de zending realtime via de tracking-pagina.",
              "en": "Customer follows the shipment in real time via the tracking page."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Status duidelijk",
              "en": "Status clear"
            },
            "what": {
              "nl": "Klant weet waar de order is – contact afgerond.",
              "en": "Customer knows where the order is – contact closed."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Self-service first: always include the tracking link so the customer can self-serve – this prevents repeat contact.",
          "rule_nl": "Self-service first: stuur altijd de tracking link mee zodat de klant zelf kan volgen – dit voorkomt herhaalcontact.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W11'"
        },
        {
          "rule": "Manage expectations: communicate a concrete expected delivery date, not a vague “on its way”.",
          "rule_nl": "Verwachting managen: communiceer een concrete verwachte leverdatum, geen vaag “onderweg”.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W11'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W11 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W11_WISMO_Sendcloud.html"
        },
        {
          "title": "CS-W12",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W12 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W12",
        "title": {
          "nl": "WISMO – zonder Sendcloud (handmatig)",
          "en": "WISMO – without Sendcloud (manual)"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W12_WISMO_Handmatig.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W11"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w12_wismo_without_sendcloud_manual",
        "description": "Goal: provide order status without automated tracking. Agent checks manually with the carrier. | More steps and longer lead time than the Sendcloud variant.",
        "goal": {
          "nl": "Doel: orderstatus geven zonder geautomatiseerde tracking. Agent checkt handmatig bij de carrier. | Meer handelingen en langere doorlooptijd dan de Sendcloud-variant.",
          "en": "Goal: provide order status without automated tracking. Agent checks manually with the carrier. | More steps and longer lead time than the Sendcloud variant."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W11",
        "example_utterances": {
          "nl": [
            "is mijn bestelling al verzonden",
            "ik heb nog geen verzendmail gehad",
            "wanneer gaat mijn order de deur uit"
          ],
          "en": [
            "has my order shipped",
            "I didn't get a shipping email",
            "when does my order ship"
          ]
        }
      },
      "actors": [
        "Agent",
        "Carrier",
        "Customer"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "carrier.getTrackTrace",
          "description": "Fetch or file Track & Trace / claim with the carrier.",
          "binding": "<bind per client> — suggested: Sendcloud / carrier integration",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant vraagt: waar is mijn order?",
              "en": "Customer asks: where is my order?"
            },
            "what": {
              "nl": "Klant neemt contact op over een niet-ontvangen bestelling.",
              "en": "Customer reaches out about an order not received."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Order opzoeken in shop/OMS",
              "en": "Look up order in shop/OMS"
            },
            "what": {
              "nl": "Agent zoekt de order en het verzendbewijs/trackingnummer op.",
              "en": "Agent finds the order and the shipping proof/tracking number."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Status checken (handmatig)",
              "en": "Check status (manual)"
            },
            "what": {
              "nl": "Agent bepaalt of de zending onderweg, vertraagd of zoek lijkt.",
              "en": "Agent assesses whether the shipment seems in transit, delayed or lost."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Check status (manual))",
                "next": "S4"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Carrier",
            "label": {
              "nl": "Carrier-status handmatig opvragen",
              "en": "Request carrier status manually"
            },
            "what": {
              "nl": "Agent checkt de carrier-site of neemt contact op met de carrier.",
              "en": "Agent checks the carrier site or contacts the carrier."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Klant per mail terugkoppelen",
              "en": "Reply to customer by email"
            },
            "what": {
              "nl": "Agent stuurt de gevonden status handmatig naar de klant.",
              "en": "Agent manually sends the found status to the customer."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant ontvangt update",
              "en": "Customer receives update"
            },
            "what": {
              "nl": "Klant ontvangt de statusupdate per e-mail.",
              "en": "Customer receives the status update by email."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Status duidelijk",
              "en": "Status clear"
            },
            "what": {
              "nl": "Klant weet de status – contact afgerond.",
              "en": "Customer knows the status – contact closed."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Manual = error-prone: statuses are copied by hand; risk of errors and outdated info.",
          "rule_nl": "Handmatig = foutgevoelig: statussen worden overgetypt; risico op fouten en verouderde info.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W12'"
        },
        {
          "rule": "More repeat contact: without self-service tracking the customer calls back more often → higher workload.",
          "rule_nl": "Meer herhaalcontact: zonder self-service tracking belt de klant vaker terug → hogere werkdruk.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W12'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W12 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W12_WISMO_Handmatig.html"
        },
        {
          "title": "CS-W11",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W06 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W06",
        "title": {
          "nl": "Levertijd / voorraad / backorder",
          "en": "Lead time / stock / backorder"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W06_Levertijd_Voorraad_Backorder.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W01",
          "CS-W04"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w06_lead_time_stock_backorder",
        "description": "Goal: answer lead time, stock and backorder questions correctly with WMS data. | How: check stock, communicate lead time or get backorder date from supplier.",
        "goal": {
          "nl": "Doel: vragen over levertijd, voorraad en backorder correct beantwoorden met WMS-data. | Hoe: voorraad checken, levertijd melden of backorder-datum opvragen bij leverancier.",
          "en": "Goal: answer lead time, stock and backorder questions correctly with WMS data. | How: check stock, communicate lead time or get backorder date from supplier."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W01, CS-W04",
        "example_utterances": {
          "nl": [
            "wanneer is dit weer op voorraad",
            "hoe lang is de levertijd",
            "waarom duurt mijn levering zo lang"
          ],
          "en": [
            "when is this back in stock",
            "what is the delivery time",
            "why is my delivery taking so long"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Supplier",
        "WMS"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "supplier.getDeliveryDate",
          "description": "Expected inbound/stock date from purchasing or supplier.",
          "binding": "<bind per client> — suggested: ERP / purchasing",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Vraag: levertijd / op voorraad?",
              "en": "Lead time / in stock?"
            },
            "what": {
              "nl": "Klant vraagt of een product op voorraad is en wat de levertijd is.",
              "en": "Customer asks if a product is in stock and what the lead time is."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Product opzoeken",
              "en": "Look up product"
            },
            "what": {
              "nl": "Agent zoekt het product op in CRM/webshopplatform.",
              "en": "Agent looks up the product in CRM/webshopplatform."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "WMS",
            "label": {
              "nl": "Voorraad & levertijd checken",
              "en": "Check stock & lead time"
            },
            "what": {
              "nl": "Actuele voorraad en levertijd komen uit WMS.",
              "en": "Current stock and lead time come from WMS."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Op voorraad?",
              "en": "In stock?"
            },
            "what": {
              "nl": "Beslissing: is het product op voorraad?",
              "en": "Decision: is the product in stock?"
            },
            "detail": {
              "nl": "Ja → levertijd melden. Nee → backorder/aanvoer opvragen bij leverancier.",
              "en": "Yes → communicate lead time. No → request backorder/restock from supplier."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: In stock?)",
                "next": "S5"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Supplier",
            "label": {
              "nl": "Backorder / aanvoer opvragen",
              "en": "Request backorder / restock"
            },
            "what": {
              "nl": "Niet op voorraad: verwachte aanvoer/leverdatum opvragen bij de leverancier.",
              "en": "Out of stock: request expected restock/delivery date from the supplier."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Levertijd / datum melden",
              "en": "Communicate lead time / date"
            },
            "what": {
              "nl": "Agent communiceert de levertijd of de verwachte (backorder)datum.",
              "en": "Agent communicates the lead time or expected (backorder) date."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Klant weet levertijd",
              "en": "Customer knows lead time"
            },
            "what": {
              "nl": "Klant heeft duidelijkheid over levertijd/beschikbaarheid.",
              "en": "Customer has clarity on lead time/availability."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Live stock: from WMS; no promises based on guesswork.",
          "rule_nl": "Live voorraad: uit WMS; geen toezeggingen op gokwerk.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W06'"
        },
        {
          "rule": "Under-promise: communicate a realistic backorder date.",
          "rule_nl": "Onderbeloven: backorder-datum realistisch communiceren.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W06'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W06 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W06_Levertijd_Voorraad_Backorder.html"
        },
        {
          "title": "CS-W01",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W16 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W16",
        "title": {
          "nl": "Order wijzigen / annuleren (vóór verzending)",
          "en": "Change / cancel order (before shipping)"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W16_Order_Wijzigen_Annuleren.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-G04",
          "CS-W15"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w16_change_cancel_order_before_shipping",
        "description": "Goal: handle changes (address, product, cancellation) quickly while the order has not shipped yet. | Time-critical: the window before picking/shipping determines what is still possible.",
        "goal": {
          "nl": "Doel: wijzigingen (adres, product, annulering) snel verwerken zolang de order nog niet verzonden is. | Tijdkritisch: het tijdvenster vóór picking/verzending bepaalt wat nog kan.",
          "en": "Goal: handle changes (address, product, cancellation) quickly while the order has not shipped yet. | Time-critical: the window before picking/shipping determines what is still possible."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-G04, CS-W15",
        "example_utterances": {
          "nl": [
            "ik wil mijn bestelling annuleren",
            "kan ik mijn adres nog wijzigen",
            "ik wil iets toevoegen aan mijn order"
          ],
          "en": [
            "I want to cancel my order",
            "can I still change my address",
            "I want to add an item to my order"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Finance",
        "Warehouse"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "returns.createReturn",
          "description": "Create/lookup a return or replacement.",
          "binding": "<bind per client> — suggested: Returns platform (e.g. Returnista, Sendcloud Returns)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant: wijzig/annuleer order",
              "en": "Customer: change/cancel order"
            },
            "what": {
              "nl": "Klant vraagt een adreswijziging, productwijziging of annulering aan.",
              "en": "Customer requests an address change, product change or cancellation."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Check: al verzonden?",
              "en": "Check: already shipped?"
            },
            "what": {
              "nl": "Agent controleert de orderstatus en het verzendvenster.",
              "en": "Agent checks the order status and the shipping window."
            },
            "detail": {
              "nl": "Al verzonden? → doorzetten naar retour/weigeren (stap R).",
              "en": "Already shipped? → route to return/refuse (step R)."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Check: already shipped?)",
                "next": "S3"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Wijziging doorvoeren",
              "en": "Apply change"
            },
            "what": {
              "nl": "Agent verwerkt adres-/productwijziging of zet de annulering in gang.",
              "en": "Agent applies the address/product change or initiates the cancellation."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Warehouse",
            "label": {
              "nl": "Order aanpassen/blokkeren in WMS",
              "en": "Adjust/hold order in WMS"
            },
            "what": {
              "nl": "Warehouse past de order aan of blokkeert de picking op tijd.",
              "en": "Warehouse adjusts the order or holds the picking in time."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Bevestiging naar klant",
              "en": "Confirmation to customer"
            },
            "what": {
              "nl": "Agent bevestigt de doorgevoerde wijziging aan de klant.",
              "en": "Agent confirms the applied change to the customer."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Finance",
            "label": {
              "nl": "Bij annulering: refund",
              "en": "On cancellation: refund"
            },
            "what": {
              "nl": "Bij annulering na betaling verwerkt finance de refund (zie <a class='sop-link' href='CS-W15_Refund_Proces.html'>CS-W15</a>).",
              "en": "On cancellation after payment finance processes the refund (see <a class='sop-link' href='CS-W15_Refund_Proces.html'>CS-W15</a>)."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Order bijgewerkt",
              "en": "Order updated"
            },
            "what": {
              "nl": "Wijziging/annulering is verwerkt en bevestigd.",
              "en": "Change/cancellation is applied and confirmed."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Window is everything: what's possible depends on status: before picking a lot, after almost nothing.",
          "rule_nl": "Tijdvenster is alles: wat nog kan hangt af van de status: vóór picking lukt veel, daarna bijna niets.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W16'"
        },
        {
          "rule": "Address change + carrier: an address change after handover to the carrier is often no longer possible.",
          "rule_nl": "Adreswijziging + carrier: een adreswijziging na overdracht aan de carrier is vaak niet meer mogelijk.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W16'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W16 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W16_Order_Wijzigen_Annuleren.html"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W15",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W04 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W04",
        "title": {
          "nl": "Productadvies & maatvoering",
          "en": "Product advice & sizing"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W04_Productadvies_Maatvoering.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-G04",
          "CS-W06"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w04_product_advice_sizing",
        "description": "Goal: help the customer pick the right door hardware (lock, handle, hinge) with correct sizing — fewer returns from wrong sizes. | How: ask needs, sizing from knowledge base, advice + product link.",
        "goal": {
          "nl": "Doel: klant het juiste deurbeslag laten kiezen (slot, kruk, scharnier) met de juiste maatvoering — minder retouren door verkeerde maat. | Hoe: behoefte uitvragen, maatvoering uit kennisbank, advies + productlink.",
          "en": "Goal: help the customer pick the right door hardware (lock, handle, hinge) with correct sizing — fewer returns from wrong sizes. | How: ask needs, sizing from knowledge base, advice + product link."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-G04, CS-W06",
        "example_utterances": {
          "nl": [
            "welke maat moet ik nemen",
            "past dit bij mijn model",
            "wat is het verschil tussen deze twee"
          ],
          "en": [
            "which size should I choose",
            "is this compatible with my model",
            "what's the difference between these two"
          ]
        }
      },
      "actors": [
        "Agent",
        "Agent + webshopplatform",
        "Customer",
        "Knowledge base / webshopplatform",
        "Supplier / Brand"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "webshop.getOrder",
          "description": "Read order, payment or refund data from the webshop platform.",
          "binding": "<bind per client> — suggested: E-commerce platform (Shopify, WooCommerce, Magento…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "returns.createReturn",
          "description": "Create/lookup a return or replacement.",
          "binding": "<bind per client> — suggested: Returns platform (e.g. Returnista, Sendcloud Returns)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "supplier.getDeliveryDate",
          "description": "Expected inbound/stock date from purchasing or supplier.",
          "binding": "<bind per client> — suggested: ERP / purchasing",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Productvraag / maatvoering",
              "en": "Product / sizing question"
            },
            "what": {
              "nl": "Klant vraagt advies over een product of de juiste maatvoering.",
              "en": "Customer asks for advice on a product or the right sizing."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Behoefte uitvragen",
              "en": "Ask needs / specs"
            },
            "what": {
              "nl": "Agent vraagt type deur, toepassing en maten uit.",
              "en": "Agent asks for door type, use case and measurements."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Knowledge base / webshopplatform",
            "label": {
              "nl": "Maatvoering & info opzoeken",
              "en": "Look up sizing & info"
            },
            "what": {
              "nl": "Agent zoekt maatvoering en productinfo op in de kennisbank/webshopplatform.",
              "en": "Agent looks up sizing and product info in the knowledge base/webshopplatform."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Info compleet?",
              "en": "Info complete?"
            },
            "what": {
              "nl": "Beslissing: is alle info er om een sluitend advies te geven?",
              "en": "Decision: is all info available for solid advice?"
            },
            "detail": {
              "nl": "Ja → advies + productlink. Nee → merk/leverancier raadplegen.",
              "en": "Yes → advice + product link. No → consult brand/supplier."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Info complete?)",
                "next": "S5"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Supplier / Brand",
            "label": {
              "nl": "Merk raadplegen (indien nodig)",
              "en": "Consult brand (if needed)"
            },
            "what": {
              "nl": "Bij twijfel: maatvoering/compatibiliteit checken bij merk/leverancier.",
              "en": "When in doubt: check sizing/compatibility with brand/supplier."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Agent + webshopplatform",
            "label": {
              "nl": "Advies + productlink",
              "en": "Advice + product link"
            },
            "what": {
              "nl": "Agent geeft passend advies met directe productlink (webshopplatform).",
              "en": "Agent gives fitting advice with a direct product link (webshopplatform)."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Klant kiest juist product",
              "en": "Customer picks right product"
            },
            "what": {
              "nl": "Klant bestelt met vertrouwen de juiste maat — minder retouren.",
              "en": "Customer confidently orders the right size — fewer returns."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Record sizing: per brand/series in the knowledge base — consistent advice.",
          "rule_nl": "Maatvoering vastleggen: per merk/serie in de kennisbank — consistent advies.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W04'"
        },
        {
          "rule": "Double-check: wrong advice = return; confirm sizing before ordering.",
          "rule_nl": "Dubbelcheck: verkeerd advies = retour; bevestig de maat vóór bestelling.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W04'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W04 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W04_Productadvies_Maatvoering.html"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W06",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W05 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W05",
        "title": {
          "nl": "Offerte & zakelijk bestellen (B2B)",
          "en": "Quote & business order (B2B)"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W05_Offerte_Zakelijk_B2B.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W07"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w05_quote_business_order_b2b",
        "description": "Goal: let business customers quickly get a quote or place a business order. | How: ask needs + volumes, check price/stock, send quote, order + invoice.",
        "goal": {
          "nl": "Doel: zakelijke klanten snel een offerte of zakelijke bestelling laten plaatsen. | Hoe: behoefte + aantallen uitvragen, prijs/voorraad checken, offerte versturen, order + factuur.",
          "en": "Goal: let business customers quickly get a quote or place a business order. | How: ask needs + volumes, check price/stock, send quote, order + invoice."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W07",
        "example_utterances": {
          "nl": [
            "ik wil een offerte voor 50 stuks",
            "hebben jullie zakelijke prijzen",
            "kan ik op factuur bestellen"
          ],
          "en": [
            "I'd like a quote for 50 units",
            "do you have business pricing",
            "can I order on invoice"
          ]
        }
      },
      "actors": [
        "Agent / Sales",
        "Business customer",
        "Order / Invoice",
        "webshopplatform / WMS"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "webshop.getOrder",
          "description": "Read order, payment or refund data from the webshop platform.",
          "binding": "<bind per client> — suggested: E-commerce platform (Shopify, WooCommerce, Magento…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "payment.getStatus",
          "description": "Read payment/invoice status from the payment service provider.",
          "binding": "<bind per client> — suggested: PSP (e.g. Mollie, Adyen, Stripe, Klarna)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Business customer",
            "label": {
              "nl": "Offerteaanvraag / zakelijk",
              "en": "Quote request / business"
            },
            "what": {
              "nl": "Zakelijke klant vraagt een offerte aan of wil zakelijk bestellen.",
              "en": "Business customer requests a quote or wants to order for business."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent / Sales",
            "label": {
              "nl": "Behoefte + aantallen",
              "en": "Needs + volumes"
            },
            "what": {
              "nl": "Agent/Sales vraagt producten, aantallen en gewenste levering uit.",
              "en": "Agent/Sales asks for products, volumes and desired delivery."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Agent / Sales",
            "label": {
              "nl": "Standaard of maatwerk?",
              "en": "Standard or custom?"
            },
            "what": {
              "nl": "Beslissing: standaard prijs of maatwerk/prijsafspraak nodig?",
              "en": "Decision: standard pricing or custom/price agreement needed?"
            },
            "detail": {
              "nl": "Standaard → direct offerte. Maatwerk → prijs/voorraad opvragen.",
              "en": "Standard → quote directly. Custom → check price/stock."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Standard or custom?)",
                "next": "S4"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "webshopplatform / WMS",
            "label": {
              "nl": "Prijs & voorraad checken",
              "en": "Check price & stock"
            },
            "what": {
              "nl": "Prijs en voorraad checken in webshopplatform/WMS (incl. B2B-korting).",
              "en": "Check price and stock in webshopplatform/WMS (incl. B2B discount)."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Agent / Sales",
            "label": {
              "nl": "Offerte opstellen + sturen",
              "en": "Draft + send quote"
            },
            "what": {
              "nl": "Agent stelt de offerte op en stuurt deze naar de klant.",
              "en": "Agent drafts the quote and sends it to the customer."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Business customer",
            "label": {
              "nl": "Akkoord op offerte",
              "en": "Approve quote"
            },
            "what": {
              "nl": "Klant gaat akkoord met de offerte.",
              "en": "Customer approves the quote."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Order / Invoice",
            "label": {
              "nl": "Order + factuur",
              "en": "Order + invoice"
            },
            "what": {
              "nl": "Order wordt geplaatst en (zakelijke) factuur verstuurd.",
              "en": "Order is placed and the (business) invoice is sent."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Price agreements: record B2B discount/tiers per customer.",
          "rule_nl": "Prijsafspraken: B2B-korting/staffel vastleggen per klant.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W05'"
        },
        {
          "rule": "Payment terms: on account vs. upfront — define terms.",
          "rule_nl": "Betaaltermijn: op rekening vs. vooruit — voorwaarden bepalen.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W05'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W05 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W05_Offerte_Zakelijk_B2B.html"
        },
        {
          "title": "CS-W07",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-E10 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-E10",
        "title": {
          "nl": "Cross-sell / upsell via CS",
          "en": "Cross-sell / upsell via CS"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-E10_CrossSell_Upsell.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-S03"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_e10_cross_sell_upsell_via_cs",
        "description": "Goal: CS as a revenue generator — help the customer with a better solution, not pushy but helpful. | Note: NEVER during a complaint or problem. | Tracking: tags + monthly reporting.",
        "goal": {
          "nl": "Doel: CS als revenue generator — de klant helpen met een betere oplossing, niet pushy maar behulpzaam. | Let op: NOOIT bij een klacht of probleem. | Tracking: tags + maandelijkse rapportage.",
          "en": "Goal: CS as a revenue generator — help the customer with a better solution, not pushy but helpful. | Note: NEVER during a complaint or problem. | Tracking: tags + monthly reporting."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-S03",
        "example_utterances": {
          "nl": [
            "wat past er nog meer bij",
            "hebben jullie ook accessoires hiervoor",
            "is er een voordeelset"
          ],
          "en": [
            "what goes well with this",
            "do you have accessories for this",
            "is there a bundle deal"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Reporting"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant vraagt advies / koopt",
              "en": "Customer asks advice / buys"
            },
            "what": {
              "nl": "De klant vraagt advies, of een product is out of stock, of een accessoire past bij de aankoop.",
              "en": "The customer asks for advice, or a product is out of stock, or an accessory fits the purchase."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Gepast moment?",
              "en": "Appropriate moment?"
            },
            "what": {
              "nl": "Beslissing: is dit een gepast moment? NIET bij een klacht of probleem.",
              "en": "Decision: is this an appropriate moment? NOT during a complaint or problem."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Appropriate moment?)",
                "next": "S3"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Relevante suggestie doen",
              "en": "Make relevant suggestion"
            },
            "what": {
              "nl": "Agent doet een relevante suggestie ('customers also liked…') — een suggestie, geen push, alleen als het de klant helpt.",
              "en": "Agent makes a relevant suggestion ('customers also liked…') — a suggestion, not a push, only if it helps the customer."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Tag 'cross-sell-suggested'",
              "en": "Tag 'cross-sell-suggested'"
            },
            "what": {
              "nl": "Agent zet de tag 'cross-sell-suggested' en documenteert de suggestie in het ticket.",
              "en": "Agent sets the 'cross-sell-suggested' tag and documents the suggestion in the ticket."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "decision",
            "actor": "Customer",
            "label": {
              "nl": "Klant accepteert?",
              "en": "Customer accepts?"
            },
            "what": {
              "nl": "Beslissing: neemt de klant de suggestie aan?",
              "en": "Decision: does the customer accept the suggestion?"
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Customer accepts?)",
                "next": "S6"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "end",
            "actor": "Agent",
            "label": {
              "nl": "Tag 'cross-sell-accepted'",
              "en": "Tag 'cross-sell-accepted'"
            },
            "what": {
              "nl": "Bij acceptatie zet de agent de tag 'cross-sell-accepted'.",
              "en": "On acceptance the agent sets the 'cross-sell-accepted' tag."
            },
            "outcome": "resolved"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "step",
            "actor": "Reporting",
            "label": {
              "nl": "Maandelijkse rapportage",
              "en": "Monthly reporting"
            },
            "what": {
              "nl": "De cross-sell-tags worden maandelijks gerapporteerd om de bijdrage van CS aan revenue te meten.",
              "en": "The cross-sell tags are reported monthly to measure CS's contribution to revenue."
            },
            "next": "E1"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never during complaint/problem: cross-sell only once the customer is helped, not during a complaint.",
          "rule_nl": "Nooit bij klacht/probleem: cross-sell alleen wanneer de klant geholpen is, niet tijdens een klacht.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-E10'"
        },
        {
          "rule": "Suggestion, not a push: only propose when it's truly relevant for the customer.",
          "rule_nl": "Suggestie, geen push: alleen voorstellen als het echt relevant is voor de klant.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-E10'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-E10 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-E10_CrossSell_Upsell.html"
        },
        {
          "title": "CS-S03",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W30 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W30",
        "title": {
          "nl": "Orderbevestiging & verwachtingsmanagement",
          "en": "Order confirmation & expectation management"
        },
        "version": "1.0-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W30_Orderbevestiging_Verwachting.html",
        "owner": "CS Manager — Client",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W01",
          "CS-W16",
          "CS-W31"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w30_order_confirmation_expectation_management",
        "description": "Order confirmation & expectation management",
        "goal": {
          "nl": null,
          "en": null
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W01, CS-W16, CS-W31",
        "example_utterances": {
          "nl": [
            "ik heb geen orderbevestiging ontvangen",
            "klopt mijn bestelling wel",
            "wanneer kan ik mijn order verwachten"
          ],
          "en": [
            "I didn't receive an order confirmation",
            "is my order correct",
            "when can I expect my order"
          ]
        }
      },
      "actors": [
        "Agent (CS)",
        "Customer",
        "System"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Plaatst bestelling",
              "en": "Places order"
            },
            "what": {
              "nl": "Klant rondt de bestelling af in de webshop.",
              "en": "Customer completes the order in the shop."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Automatische orderbevestiging",
              "en": "Automatic order confirmation"
            },
            "what": {
              "nl": "Systeem stuurt direct een orderbevestiging met de besteldetails.",
              "en": "System sends an order confirmation with the order details right away."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Verwachte leverdatum tonen",
              "en": "Show expected delivery date"
            },
            "what": {
              "nl": "Bereken en communiceer de verwachte verzend-/leverdatum.",
              "en": "Calculate and communicate the expected ship/delivery date."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "System",
            "label": {
              "nl": "Op voorraad & op tijd?",
              "en": "In stock & on time?"
            },
            "what": {
              "nl": "Alles leverbaar en op tijd? Ja → stap 5. Nee → CS-W31 (Backorder/deellevering).",
              "en": "All deliverable and on time? Yes → step 5. No → CS-W31 (backorder/partial)."
            },
            "branches": [
              {
                "condition": "Ja / Yes",
                "next": "S5"
              },
              {
                "condition": "see step text",
                "handoff_procedure": "CS-W31"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Next steps: volg order + wijzig-optie",
              "en": "Next steps: track + change option"
            },
            "what": {
              "nl": "Toon ‘volg je order’ (CS-W01) en de mogelijkheid tot wijzigen/annuleren (CS-W16).",
              "en": "Show ‘track your order’ (CS-W01) and the option to change/cancel (CS-W16)."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Agent (CS)",
            "label": {
              "nl": "Afwijking? proactief updaten",
              "en": "Deviation? proactively update"
            },
            "what": {
              "nl": "Bij afwijking van de belofte: informeer de klant proactief vóór de verwachte datum.",
              "en": "If the promise slips: proactively inform the customer before the expected date."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Klant weet wat & wanneer",
              "en": "Customer knows what & when"
            },
            "what": {
              "nl": "Klant heeft heldere verwachtingen en weet waar de order te volgen is.",
              "en": "Customer has clear expectations and knows where to track the order."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W30 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W30_Orderbevestiging_Verwachting.html"
        },
        {
          "title": "CS-W01",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W16",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W31",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W31 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W31",
        "title": {
          "nl": "Backorder & deellevering-communicatie",
          "en": "Backorder & partial delivery comms"
        },
        "version": "1.0-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W31_Backorder_Deellevering.html",
        "owner": "CS Manager — Client",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W06",
          "CS-W16"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w31_backorder_partial_delivery_comms",
        "description": "Backorder & partial delivery comms",
        "goal": {
          "nl": null,
          "en": null
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W06, CS-W16",
        "example_utterances": {
          "nl": [
            "ik heb maar een deel van mijn bestelling ontvangen",
            "waar is de rest van mijn order",
            "kan ik wachten tot alles binnen is"
          ],
          "en": [
            "I only received part of my order",
            "where is the rest of my order",
            "can I wait until everything is in stock"
          ]
        }
      },
      "actors": [
        "Agent (CS)",
        "Customer",
        "System",
        "Warehouse"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Signaleer backorder/deellevering",
              "en": "Detect backorder/partial"
            },
            "what": {
              "nl": "Systeem signaleert dat (een deel van) de order niet direct leverbaar is.",
              "en": "System detects that (part of) the order is not immediately available."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent (CS)",
            "label": {
              "nl": "Meld proactief + nieuwe datum",
              "en": "Proactively notify + new date"
            },
            "what": {
              "nl": "Informeer de klant proactief met een realistische nieuwe datum.",
              "en": "Proactively inform the customer with a realistic new date."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Customer",
            "label": {
              "nl": "Keuze klant?",
              "en": "Customer choice?"
            },
            "what": {
              "nl": "Klant kiest: wachten, order splitsen (deellevering) of annuleren.",
              "en": "Customer chooses: wait, split the order (partial) or cancel."
            },
            "branches": [
              {
                "condition": "otherwise",
                "next": "S4"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Verwerk keuze in order (CS-W16)",
              "en": "Apply choice to order (CS-W16)"
            },
            "what": {
              "nl": "Verwerk de keuze in de order volgens CS-W16 (wijzigen/splitsen/annuleren).",
              "en": "Apply the choice to the order per CS-W16 (change/split/cancel)."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Warehouse",
            "label": {
              "nl": "(Deel)levering uitvoeren",
              "en": "Execute (partial) delivery"
            },
            "what": {
              "nl": "Magazijn verstuurt de beschikbare items; restant volgt bij binnenkomst.",
              "en": "Warehouse ships available items; remainder follows on arrival."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Bewaak tot compleet",
              "en": "Track until complete"
            },
            "what": {
              "nl": "Bewaak de backorder tot de order volledig geleverd is.",
              "en": "Track the backorder until the order is fully delivered."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Compleet geleverd",
              "en": "Fully delivered"
            },
            "what": {
              "nl": "Order is compleet geleverd; verwachtingen zijn onderweg gemanaged.",
              "en": "Order fully delivered; expectations were managed along the way."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W31 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W31_Backorder_Deellevering.html"
        },
        {
          "title": "CS-W06",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W16",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W26 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W26",
        "title": {
          "nl": "Voorraad- & levertijdbelofte (PDP)",
          "en": "Stock & lead-time promise (PDP)"
        },
        "version": "1.0-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W26_Voorraad_Levertijdbelofte.html",
        "owner": "CS Manager — Client",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W06"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "order_delivery_wismo",
          "nl": "Order, levering & WISMO",
          "en": "Order, delivery & WISMO"
        }
      },
      "intent": {
        "name": "cs_w26_stock_lead_time_promise_pdp",
        "description": "Stock & lead-time promise (PDP)",
        "goal": {
          "nl": null,
          "en": null
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W06",
        "example_utterances": {
          "nl": [
            "als ik nu bestel wanneer heb ik het dan",
            "is dit echt morgen in huis",
            "klopt de levertijd op de website"
          ],
          "en": [
            "if I order now when will I get it",
            "will this really arrive tomorrow",
            "is the delivery time on the website correct"
          ]
        }
      },
      "actors": [
        "Customer",
        "Ops / IT",
        "System"
      ],
      "actions": [
        {
          "ref": "crm.lookup",
          "description": "Generic CRM/ticket lookup. Bind per client.",
          "binding": "<bind per client> — suggested: Helpdesk + e-commerce platform",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Ops / IT",
            "label": {
              "nl": "Bron van waarheid voorraad",
              "en": "Single source of truth stock"
            },
            "what": {
              "nl": "Bepaal de leidende voorraadbron (WMS/ERP) waarop de PDP zich baseert.",
              "en": "Define the leading stock source (WMS/ERP) the PDP relies on."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Levertijd-logica per productgroep",
              "en": "Lead-time logic per product group"
            },
            "what": {
              "nl": "Stel de levertijd-logica per productgroep in (voorraad, pre-order, maatwerk).",
              "en": "Set lead-time logic per product group (stock, pre-order, custom)."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "System",
            "label": {
              "nl": "Op voorraad?",
              "en": "In stock?"
            },
            "what": {
              "nl": "Is het artikel op voorraad? Ja → stap 4 (levertijd tonen). Nee → stap 5 (backorder/pre-order).",
              "en": "Is the item in stock? Yes → step 4 (show lead time). No → step 5 (backorder/pre-order)."
            },
            "branches": [
              {
                "condition": "Ja / Yes",
                "next": "S4"
              },
              {
                "condition": "Nee / No",
                "next": "S5"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Levertijd tonen op PDP",
              "en": "Show lead time on PDP"
            },
            "what": {
              "nl": "Toon een concrete, kloppende levertijd op de productpagina.",
              "en": "Show a concrete, accurate lead time on the product page."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Backorder/pre-order-belofte",
              "en": "Backorder/pre-order promise"
            },
            "what": {
              "nl": "Geen voorraad: toon een eerlijke backorder-/pre-order-belofte met datum.",
              "en": "No stock: show an honest backorder/pre-order promise with a date."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Kloppende belofte vóór koop",
              "en": "Accurate promise before buying"
            },
            "what": {
              "nl": "Klant ziet vóór de koop een realistische levertijd — minder WISMO achteraf.",
              "en": "Customer sees a realistic lead time before buying — less WISMO later."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W26 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W26_Voorraad_Levertijdbelofte.html"
        },
        {
          "title": "CS-W06",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-S05 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-S05",
        "title": {
          "nl": "Klachten & escalatie",
          "en": "Complaints & escalation"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-S05_Klachten_Escalatie.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-S03",
          "CS-S08"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_s05_complaints_escalation",
        "description": "Goal: handling complaints correctly prevents churn, with consistent compensation. | Handling: acknowledge → apologize → solve/escalate → compensation if appropriate → tag 'complaint'.",
        "goal": {
          "nl": "Doel: klachten correct afhandelen voorkomt churn, met consistente compensatie. | Afhandeling: erken → excuus → oplossen/escaleren → compensatie indien gepast → tag 'complaint'.",
          "en": "Goal: handling complaints correctly prevents churn, with consistent compensation. | Handling: acknowledge → apologize → solve/escalate → compensation if appropriate → tag 'complaint'."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-S03, CS-S08",
        "example_utterances": {
          "nl": [
            "ik wil een klacht indienen",
            "ik ben hier echt niet tevreden over",
            "dit is al de derde keer"
          ],
          "en": [
            "I want to file a complaint",
            "I'm really unhappy about this",
            "this is the third time already"
          ]
        }
      },
      "actors": [
        "Agent",
        "CS Manager",
        "Customer"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant uit klacht",
              "en": "Customer voices complaint"
            },
            "what": {
              "nl": "Klant is ontevreden en vraagt actie of compensatie.",
              "en": "Customer is dissatisfied and asks for action or compensation."
            },
            "detail": {
              "nl": "Signaalwoorden: teleurgesteld, boos, klacht, compensatie. Let ook op eerdere tickets over hetzelfde issue.",
              "en": "Signal words: disappointed, angry, complaint, compensation. Also watch earlier tickets about the same issue."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Klacht herkennen",
              "en": "Recognize complaint"
            },
            "what": {
              "nl": "Agent herkent de klacht op basis van signaalwoorden en historie.",
              "en": "Agent recognizes the complaint based on signal words and history."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Erken + excuus (empathie)",
              "en": "Acknowledge + apologize (empathy)"
            },
            "what": {
              "nl": "Erken het probleem met empathie en bied excuus aan.",
              "en": "Acknowledge the problem with empathy and apologize."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Zelf oplossen of escaleren?",
              "en": "Solve yourself or escalate?"
            },
            "what": {
              "nl": "Kan de agent het zelf oplossen, of is escalatie nodig (zie <a class='sop-link' href='CS-S06_Escalatie.html'>CS-S06</a>)?",
              "en": "Can the agent solve it themselves, or is escalation needed (see <a class='sop-link' href='CS-S06_Escalatie.html'>CS-S06</a>)?"
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Solve yourself or escalate?)",
                "next": "S5"
              },
              {
                "condition": "see step text",
                "handoff_procedure": "CS-S06"
              },
              {
                "condition": "see step text",
                "handoff_procedure": "CS-S06"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Compensatie bepalen",
              "en": "Determine compensation"
            },
            "what": {
              "nl": "Bepaal passende compensatie volgens de richtlijn.",
              "en": "Determine appropriate compensation per the guideline."
            },
            "detail": {
              "nl": "Klein ongemak: [€5 voucher] (agent) · Gemiddeld: [€10 voucher] (agent) · Groot: [€25+ voucher] (CS Manager).",
              "en": "Minor inconvenience: [€5 voucher] (agent) · Medium: [€10 voucher] (agent) · Major: [€25+ voucher] (CS Manager)."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Determine compensation)",
                "next": "S6"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "CS Manager",
            "label": {
              "nl": "Autorisatie groot probleem",
              "en": "Authorization major problem"
            },
            "what": {
              "nl": "Bij grote compensatie ([€25+]) is autorisatie van CS Manager nodig.",
              "en": "For large compensation ([€25+]) CS Manager authorization is needed."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Agent",
            "label": {
              "nl": "Tag 'complaint' + afronden",
              "en": "Tag 'complaint' + close"
            },
            "what": {
              "nl": "Tag het ticket als 'complaint' en rond af.",
              "en": "Tag the ticket as 'complaint' and close it."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Empathy, not defensive: show understanding; don't react defensively.",
          "rule_nl": "Empathie, niet defensief: toon begrip; reageer niet defensief.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-S05'"
        },
        {
          "rule": "Take ownership: don't pass it on without explanation.",
          "rule_nl": "Eigenaarschap nemen: schuif niet door zonder uitleg.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-S05'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-S05 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-S05_Klachten_Escalatie.html"
        },
        {
          "title": "CS-S03",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-S08",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-S06 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-S06",
        "title": {
          "nl": "Escalatie proces",
          "en": "Escalation process"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-S06_Escalatie.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-S05",
          "CS-S02"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_s06_escalation_process",
        "description": "Goal: get the right department to act when you can't solve it yourself. | SLA: 4 hours response after escalation. | How: tag 'escalation-[department]' + internal note with context.",
        "goal": {
          "nl": "Doel: de juiste afdeling actie laten nemen wanneer jij het niet kunt oplossen. | SLA: 4 uur response na escalatie. | Hoe: tag 'escalation-[afdeling]' + interne notitie met context.",
          "en": "Goal: get the right department to act when you can't solve it yourself. | SLA: 4 hours response after escalation. | How: tag 'escalation-[department]' + internal note with context."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-S05, CS-S02",
        "example_utterances": {
          "nl": [
            "ik wil een leidinggevende spreken",
            "dit wordt niet opgelost",
            "ik stap naar de geschillencommissie"
          ],
          "en": [
            "I want to speak to a manager",
            "this isn't getting solved",
            "I'm going to a disputes committee"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Department / L2"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "returns.createReturn",
          "description": "Create/lookup a return or replacement.",
          "binding": "<bind per client> — suggested: Returns platform (e.g. Returnista, Sendcloud Returns)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Kan niet zelf oplossen",
              "en": "Can't solve yourself"
            },
            "what": {
              "nl": "Je hebt niet de kennis/rechten, een andere afdeling moet actie nemen, de klant vraagt om een manager, of het is te complex.",
              "en": "You lack the knowledge/rights, another department must act, the customer asks for a manager, or it's too complex."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Welk type escalatie?",
              "en": "Which escalation type?"
            },
            "what": {
              "nl": "Bepaal het type escalatie.",
              "en": "Determine the escalation type."
            },
            "detail": {
              "nl": "Finance (refund/betaling/factuur) → escalation-finance · Logistics (verzending/voorraad/retour) → escalation-logistics · Technical (bug/account/systeem) → escalation-tech · Management (ernstige klacht/juridisch) → escalation-management.",
              "en": "Finance (refund/payment/invoice) → escalation-finance · Logistics (shipping/stock/return) → escalation-logistics · Technical (bug/account/system) → escalation-tech · Management (serious complaint/legal) → escalation-management."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Which escalation type?)",
                "next": "S3"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Tag 'escalation-[afdeling]'",
              "en": "Tag 'escalation-[dept]'"
            },
            "what": {
              "nl": "Voeg de juiste escalatie-tag toe.",
              "en": "Add the correct escalation tag."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Interne notitie met context",
              "en": "Internal note with context"
            },
            "what": {
              "nl": "Schrijf een interne notitie volgens het template.",
              "en": "Write an internal note using the template."
            },
            "detail": {
              "nl": "Template: klant, order, probleem, gevraagde actie, deadline (indien urgent).",
              "en": "Template: customer, order, problem, requested action, deadline (if urgent)."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Klant informeren",
              "en": "Inform customer"
            },
            "what": {
              "nl": "Informeer de klant dat het wordt opgepakt.",
              "en": "Inform the customer that it's being picked up."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Department / L2",
            "label": {
              "nl": "Afdeling pakt op (SLA 4u)",
              "en": "Department picks up (SLA 4h)"
            },
            "what": {
              "nl": "De afdeling/L2 pakt de escalatie op binnen de SLA van 4 uur.",
              "en": "The department/L2 picks up the escalation within the 4-hour SLA."
            },
            "detail": {
              "nl": "Geen reactie na 4u: reminder. Geen reactie na 8u: direct contact opnemen.",
              "en": "No response after 4h: reminder. No response after 8h: contact directly."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Agent",
            "label": {
              "nl": "Opgelost / opgevolgd",
              "en": "Solved / followed up"
            },
            "what": {
              "nl": "Het ticket blijft op jouw naam (of reassign) en wordt opgevolgd tot oplossing.",
              "en": "The ticket stays in your name (or reassign) and is followed up until solved."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Don't just pass on: always include context via the internal note.",
          "rule_nl": "Niet zomaar doorschuiven: altijd context meegeven via de interne notitie.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-S06'"
        },
        {
          "rule": "Ownership: ticket stays in your name or is deliberately reassigned.",
          "rule_nl": "Eigenaarschap: ticket blijft op jouw naam of wordt bewust gereassigned.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-S06'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-S06 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-S06_Escalatie.html"
        },
        {
          "title": "CS-S05",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-S02",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W02 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W02",
        "title": {
          "nl": "Bezorgklacht / schade / niet ontvangen",
          "en": "Delivery complaint / damage / not received"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W02_Bezorgklacht_Schade.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W01",
          "CS-G04",
          "CS-S05"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w02_delivery_complaint_damage_not_received",
        "description": "Goal: resolve a damaged or not-received parcel quickly and fairly. | How: capture proof, carrier claim where needed, replacement via WMS or refund via webshopplatform.",
        "goal": {
          "nl": "Doel: een beschadigd of niet-ontvangen pakket snel en eerlijk oplossen. | Hoe: bewijs vastleggen, carrier-claim waar nodig, vervanging via WMS of refund via webshopplatform.",
          "en": "Goal: resolve a damaged or not-received parcel quickly and fairly. | How: capture proof, carrier claim where needed, replacement via WMS or refund via webshopplatform."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W01, CS-G04, CS-S05",
        "example_utterances": {
          "nl": [
            "mijn pakket is beschadigd aangekomen",
            "volgens track en trace bezorgd maar niks ontvangen",
            "er ontbreekt iets in mijn pakket"
          ],
          "en": [
            "my parcel arrived damaged",
            "tracking says delivered but I got nothing",
            "something is missing from my parcel"
          ]
        }
      },
      "actors": [
        "Agent",
        "Agent + CRM",
        "Carrier",
        "Customer",
        "WMS / webshopplatform"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "carrier.getTrackTrace",
          "description": "Fetch or file Track & Trace / claim with the carrier.",
          "binding": "<bind per client> — suggested: Sendcloud / carrier integration",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "webshop.getOrder",
          "description": "Read order, payment or refund data from the webshop platform.",
          "binding": "<bind per client> — suggested: E-commerce platform (Shopify, WooCommerce, Magento…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Melding: schade / niet ontvangen",
              "en": "Report: damage / not received"
            },
            "what": {
              "nl": "Klant meldt een beschadigd of niet-ontvangen pakket.",
              "en": "Customer reports a damaged or not-received parcel."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent + CRM",
            "label": {
              "nl": "Ticket + order checken",
              "en": "Create ticket + check order"
            },
            "what": {
              "nl": "Agent maakt een ticket aan in CRM en controleert order en verzending.",
              "en": "Agent creates a ticket in CRM and checks order and shipment."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Schade of kwijt?",
              "en": "Damaged or lost?"
            },
            "what": {
              "nl": "Beslissing: gaat het om schade of een kwijtgeraakt pakket?",
              "en": "Decision: is it damage or a lost parcel?"
            },
            "detail": {
              "nl": "Vraag bij schade om foto’s. Bepaalt carrier-claim vs. direct vervanging/refund.",
              "en": "Ask for photos on damage. Determines carrier claim vs. direct replacement/refund."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Damaged or lost?)",
                "next": "S4"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Carrier",
            "label": {
              "nl": "Carrier-onderzoek / claim",
              "en": "Carrier investigation / claim"
            },
            "what": {
              "nl": "Bij kwijt of schade: onderzoek of claim bij de vervoerder (binnen de carrier-deadline).",
              "en": "On lost or damage: investigation or claim with the carrier (within the carrier deadline)."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "WMS / webshopplatform",
            "label": {
              "nl": "Vervanging of refund",
              "en": "Replacement or refund"
            },
            "what": {
              "nl": "Vervangende zending via WMS of terugbetaling via webshopplatform.",
              "en": "Replacement shipment via WMS or refund via webshopplatform."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Opgelost + teruggekoppeld",
              "en": "Resolved + informed"
            },
            "what": {
              "nl": "Klant ontvangt vervanging of refund en wordt teruggekoppeld.",
              "en": "Customer receives replacement or refund and is informed."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Proof: ask for photos on damage before a claim.",
          "rule_nl": "Bewijs: vraag foto’s bij schade vóór een claim.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W02'"
        },
        {
          "rule": "Carrier deadline: file the claim in time, within the carrier's window.",
          "rule_nl": "Carrier-deadline: claim tijdig indienen binnen de termijn van de vervoerder.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W02'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W02 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W02_Bezorgklacht_Schade.html"
        },
        {
          "title": "CS-W01",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-S05",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W03 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W03",
        "title": {
          "nl": "Garantie & defect product",
          "en": "Warranty & defective product"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W03_Garantie_Defect.html",
        "owner": "CS Manager — Klant",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-G04",
          "CS-S05"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w03_warranty_defective_product",
        "description": "Goal: handle warranty claims and defective products correctly, with the right route per brand/supplier. | How: check warranty, claim with brand, repair/replacement/refund.",
        "goal": {
          "nl": "Doel: garantieclaims en defecte producten correct afhandelen, met de juiste route per merk/leverancier. | Hoe: garantie checken, claim bij merk, reparatie/vervanging/refund.",
          "en": "Goal: handle warranty claims and defective products correctly, with the right route per brand/supplier. | How: check warranty, claim with brand, repair/replacement/refund."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-G04, CS-S05",
        "example_utterances": {
          "nl": [
            "mijn product is kapot",
            "valt dit onder de garantie",
            "het werkt niet meer na een maand"
          ],
          "en": [
            "my product is broken",
            "is this covered by warranty",
            "it stopped working after a month"
          ]
        }
      },
      "actors": [
        "Agent",
        "Agent + CRM",
        "Customer",
        "Supplier / Brand",
        "WMS / webshopplatform"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "wms.getStatus",
          "description": "Fetch live order/stock/shipment status from WMS or webshop platform.",
          "binding": "<bind per client> — suggested: WMS / fulfilment (e.g. Monta, Picqer)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "webshop.getOrder",
          "description": "Read order, payment or refund data from the webshop platform.",
          "binding": "<bind per client> — suggested: E-commerce platform (Shopify, WooCommerce, Magento…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "reviews.getReview",
          "description": "Read/respond to public reviews.",
          "binding": "<bind per client> — suggested: Review platform (e.g. Trustpilot, Kiyoh)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "supplier.getDeliveryDate",
          "description": "Expected inbound/stock date from purchasing or supplier.",
          "binding": "<bind per client> — suggested: ERP / purchasing",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Defect / garantieclaim",
              "en": "Defect / warranty claim"
            },
            "what": {
              "nl": "Klant meldt een defect product of dient een garantieclaim in.",
              "en": "Customer reports a defective product or files a warranty claim."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent + CRM",
            "label": {
              "nl": "Order + garantie checken",
              "en": "Check order + warranty"
            },
            "what": {
              "nl": "Agent checkt aankoopdatum en garantievoorwaarden in webshopplatform/CRM.",
              "en": "Agent checks purchase date and warranty terms in webshopplatform/CRM."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Agent",
            "label": {
              "nl": "Binnen garantie?",
              "en": "Within warranty?"
            },
            "what": {
              "nl": "Beslissing: valt het product binnen de garantietermijn en -voorwaarden?",
              "en": "Decision: is the product within the warranty period and terms?"
            },
            "detail": {
              "nl": "Ja → claim bij leverancier/merk. Nee → opties of betaalde reparatie aanbieden.",
              "en": "Yes → claim with supplier/brand. No → offer options or paid repair."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Within warranty?)",
                "next": "S4"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Supplier / Brand",
            "label": {
              "nl": "Claim bij leverancier / merk",
              "en": "Claim with supplier / brand"
            },
            "what": {
              "nl": "Garantieclaim indienen bij de leverancier of het merk (bv. Formani, Intersteel).",
              "en": "File the warranty claim with the supplier or brand (e.g. Formani, Intersteel)."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "WMS / webshopplatform",
            "label": {
              "nl": "Reparatie / vervanging / refund",
              "en": "Repair / replacement / refund"
            },
            "what": {
              "nl": "Afhandeling: reparatie, vervangend product (WMS) of refund (webshopplatform).",
              "en": "Resolution: repair, replacement product (WMS) or refund (webshopplatform)."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Opgelost + teruggekoppeld",
              "en": "Resolved + informed"
            },
            "what": {
              "nl": "Klant krijgt een oplossing en terugkoppeling — garantie afgehandeld.",
              "en": "Customer gets a solution and feedback — warranty handled."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Terms per brand: warranty periods differ — record them in the knowledge base.",
          "rule_nl": "Voorwaarden per merk: garantietermijnen verschillen — leg ze vast in de kennisbank.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W03'"
        },
        {
          "rule": "Proof of purchase: link the webshopplatform order as evidence.",
          "rule_nl": "Aankoopbewijs: koppel de order in webshopplatform als bewijs.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W03'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W03 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W03_Garantie_Defect.html"
        },
        {
          "title": "CS-G04",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-S05",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W23 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W23",
        "title": {
          "nl": "Negatieve review / publieke klacht",
          "en": "Negative review / public complaint"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W23_Negatieve_Review.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-S05",
          "CS-G12"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w23_negative_review_public_complaint",
        "description": "Goal: follow up public negative reviews quickly, empathetically and on-brand, and resolve offline. | Speed matters — it's publicly visible.",
        "goal": {
          "nl": "Doel: publieke negatieve reviews snel, empathisch en merkwaardig opvolgen en offline oplossen. | Snelheid telt — het is publiek zichtbaar.",
          "en": "Goal: follow up public negative reviews quickly, empathetically and on-brand, and resolve offline. | Speed matters — it's publicly visible."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-S05, CS-G12",
        "example_utterances": {
          "nl": [
            "ik ga een slechte review schrijven",
            "ik heb een negatieve review geplaatst",
            "jullie service is waardeloos"
          ],
          "en": [
            "I'm going to write a bad review",
            "I posted a negative review",
            "your service is terrible"
          ]
        }
      },
      "actors": [
        "Agent",
        "Customer",
        "Manager / Marketing"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "reviews.getReview",
          "description": "Read/respond to public reviews.",
          "binding": "<bind per client> — suggested: Review platform (e.g. Trustpilot, Kiyoh)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Negatieve review (publiek)",
              "en": "Negative review (public)"
            },
            "what": {
              "nl": "Klant plaatst een negatieve review op Trustpilot/Google/social.",
              "en": "Customer posts a negative review on Trustpilot/Google/social."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Context ophalen",
              "en": "Gather context"
            },
            "what": {
              "nl": "Agent zoekt het bijbehorende ticket/order erbij.",
              "en": "Agent finds the related ticket/order."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Publiek reageren",
              "en": "Reply publicly"
            },
            "what": {
              "nl": "Agent reageert kort en empathisch en haalt het gesprek offline.",
              "en": "Agent replies briefly and empathetically and takes it offline."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Klant 1-op-1 oplossen",
              "en": "Resolve 1-on-1"
            },
            "what": {
              "nl": "Agent lost het probleem persoonlijk op.",
              "en": "Agent resolves the issue personally."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "decision",
            "actor": "Manager / Marketing",
            "label": {
              "nl": "Ernstige case? afstemmen",
              "en": "Serious case? align"
            },
            "what": {
              "nl": "Bij reputatierisico stemt de agent af met manager/marketing.",
              "en": "On reputation risk the agent aligns with manager/marketing."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Serious case? align)",
                "next": "S6"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Agent",
            "label": {
              "nl": "Vragen om review-update",
              "en": "Ask for review update"
            },
            "what": {
              "nl": "Na de oplossing vraagt de agent vriendelijk om de review bij te werken.",
              "en": "After resolving, the agent kindly asks to update the review."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Opgelost + reputatie hersteld",
              "en": "Resolved + reputation restored"
            },
            "what": {
              "nl": "Klant is geholpen en de review is bijgewerkt of gesloten.",
              "en": "Customer is helped and the review is updated or closed."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Speed: public reviews are visible — respond quickly.",
          "rule_nl": "Snelheid: publieke reviews zijn zichtbaar — reageer snel.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W23'"
        },
        {
          "rule": "No customer data public: never share order/personal data in a public reply.",
          "rule_nl": "Geen klantdata publiek: deel nooit order-/persoonsgegevens in een openbare reactie.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W23'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W23 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W23_Negatieve_Review.html"
        },
        {
          "title": "CS-S05",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-G12",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W24 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W24",
        "title": {
          "nl": "Major incident / storing",
          "en": "Major incident / outage"
        },
        "version": "0.9-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W24_Major_Incident.html",
        "owner": "CS Manager — Jouw Webshop",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-G12",
          "CS-G08",
          "CS-W21"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w24_major_incident_outage",
        "description": "Goal: on a major outage (shop/PSP down) scale up fast, communicate proactively and recover cleanly. | Communicate early and honestly.",
        "goal": {
          "nl": "Doel: bij een grote storing (shop/PSP down) snel opschalen, proactief communiceren en netjes herstellen. | Communiceer vroeg en eerlijk.",
          "en": "Goal: on a major outage (shop/PSP down) scale up fast, communicate proactively and recover cleanly. | Communicate early and honestly."
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-G12, CS-G08, CS-W21",
        "example_utterances": {
          "nl": [
            "de website doet het niet",
            "ik kan niet betalen",
            "ik krijg een foutmelding bij afrekenen"
          ],
          "en": [
            "the website is down",
            "I can't pay",
            "I get an error at checkout"
          ]
        }
      },
      "actors": [
        "Customers",
        "Incident lead",
        "Monitoring"
      ],
      "actions": [
        {
          "ref": "crm.lookup",
          "description": "Generic CRM/ticket lookup. Bind per client.",
          "binding": "<bind per client> — suggested: Helpdesk + e-commerce platform",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "ops.getIncidentStatus",
          "description": "Current incident/outage status for proactive comms.",
          "binding": "<bind per client> — suggested: Status page / internal",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Monitoring",
            "label": {
              "nl": "Storing gedetecteerd",
              "en": "Outage detected"
            },
            "what": {
              "nl": "Monitoring (of klanten) signaleert dat shop/PSP plat ligt.",
              "en": "Monitoring (or customers) detect the shop/PSP is down."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "decision",
            "actor": "Incident lead",
            "label": {
              "nl": "Impact & scope bepalen",
              "en": "Assess impact & scope"
            },
            "what": {
              "nl": "Incident-lead bepaalt wat geraakt is en hoe groot.",
              "en": "Incident lead determines what's affected and how big."
            },
            "branches": [
              {
                "condition": "yes / as expected (evaluate: Assess impact & scope)",
                "next": "S3"
              },
              {
                "condition": "no / exception / unclear — follow step note or hand off",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Incident lead",
            "label": {
              "nl": "Incident-kanaal + rollen",
              "en": "Incident channel + roles"
            },
            "what": {
              "nl": "Incident-lead start het kanaal en wijst rollen toe.",
              "en": "Incident lead starts the channel and assigns roles."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Customers",
            "label": {
              "nl": "Proactieve melding klanten",
              "en": "Proactive customer notice"
            },
            "what": {
              "nl": "CS communiceert proactief via banner/mail/social/statuspagina.",
              "en": "CS communicates proactively via banner/mail/social/status page."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Incident lead",
            "label": {
              "nl": "Oplossen + statusupdates",
              "en": "Resolve + status updates"
            },
            "what": {
              "nl": "Tech lost op; incident-lead geeft regelmatige updates.",
              "en": "Tech resolves; incident lead gives regular updates."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Customers",
            "label": {
              "nl": "Herstelbericht + nazorg orders",
              "en": "Recovery notice + order aftercare"
            },
            "what": {
              "nl": "CS meldt herstel en lost gedupeerde orders na.",
              "en": "CS announces recovery and follows up affected orders."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "end",
            "actor": "Incident lead",
            "label": {
              "nl": "Opgelost + post-mortem gepland",
              "en": "Resolved + post-mortem planned"
            },
            "what": {
              "nl": "Storing voorbij; evaluatie wordt ingepland.",
              "en": "Outage over; evaluation is scheduled."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Early & honest: communicate fast, even without a fix — silence breeds frustration.",
          "rule_nl": "Vroeg & eerlijk: communiceer snel, ook zonder oplossing — stilte voedt frustratie.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W24'"
        },
        {
          "rule": "One source of truth: use one status page/channel so everyone sees the same.",
          "rule_nl": "Eén bron van waarheid: gebruik één statuspagina/kanaal zodat iedereen hetzelfde ziet.",
          "severity": "soft",
          "source": "Risk from swimlane 'CS-W24'"
        },
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W24 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W24_Major_Incident.html"
        },
        {
          "title": "CS-G12",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-G08",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W21",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W32 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W32",
        "title": {
          "nl": "Recall / batch-issue / productveiligheid",
          "en": "Recall / batch issue / product safety"
        },
        "version": "1.0-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W32_Recall_Productveiligheid.html",
        "owner": "CS Manager — Client",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W03",
          "CS-G12"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w32_recall_batch_issue_product_safety",
        "description": "Recall / batch issue / product safety",
        "goal": {
          "nl": null,
          "en": null
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W03, CS-G12",
        "example_utterances": {
          "nl": [
            "is dit product teruggeroepen",
            "ik heb een bericht gezien over een terugroepactie",
            "is dit product veilig"
          ],
          "en": [
            "has this product been recalled",
            "I saw a recall notice",
            "is this product safe"
          ]
        }
      },
      "actors": [
        "Customer",
        "Ops / IT",
        "Risk",
        "Risk / Lead"
      ],
      "actions": [
        {
          "ref": "crm.lookup",
          "description": "Generic CRM/ticket lookup. Bind per client.",
          "binding": "<bind per client> — suggested: Helpdesk + e-commerce platform",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "returns.createReturn",
          "description": "Create/lookup a return or replacement.",
          "binding": "<bind per client> — suggested: Returns platform (e.g. Returnista, Sendcloud Returns)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "supplier.getDeliveryDate",
          "description": "Expected inbound/stock date from purchasing or supplier.",
          "binding": "<bind per client> — suggested: ERP / purchasing",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "ops.getIncidentStatus",
          "description": "Current incident/outage status for proactive comms.",
          "binding": "<bind per client> — suggested: Status page / internal",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Risk",
            "label": {
              "nl": "Veiligheidssignaal ontvangen",
              "en": "Safety signal received"
            },
            "what": {
              "nl": "Signaal binnen via klacht, leverancier of autoriteit dat een product mogelijk onveilig is.",
              "en": "Signal received via complaint, supplier or authority that a product may be unsafe."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "decision",
            "actor": "Risk",
            "label": {
              "nl": "Veiligheidsrisico?",
              "en": "Safety risk?"
            },
            "what": {
              "nl": "Is dit een veiligheidsrisico? Ja → stap 3. Nee (regulier defect) → CS-W03 (Garantie/defect).",
              "en": "Is this a safety risk? Yes → step 3. No (regular defect) → CS-W03 (warranty/defect)."
            },
            "branches": [
              {
                "condition": "Ja / Yes",
                "next": "S3"
              },
              {
                "condition": "see step text",
                "handoff_procedure": "CS-W03"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "step",
            "actor": "Ops / IT",
            "label": {
              "nl": "Scope bepalen (batch/serienr)",
              "en": "Determine scope (batch/serial)"
            },
            "what": {
              "nl": "Bepaal getroffen batch/serienummers en welke orders/klanten geraakt zijn.",
              "en": "Determine affected batch/serial numbers and which orders/customers are impacted."
            },
            "next": "S4"
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "decision",
            "actor": "Risk",
            "label": {
              "nl": "Besluit: recall / stop-verkoop",
              "en": "Decide: recall / stop-sale"
            },
            "what": {
              "nl": "Besluit maatregel: recall, stop-verkoop of monitoren. Recall/stop → stap 5. Monitoren → vastleggen + bewaken.",
              "en": "Decide action: recall, stop-sale or monitor. Recall/stop → step 5. Monitor → record + watch."
            },
            "branches": [
              {
                "condition": "Recall",
                "next": "S5"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "Ops / IT",
            "label": {
              "nl": "Verkoop stoppen + voorraad blokkeren",
              "en": "Stop sales + block stock"
            },
            "what": {
              "nl": "Zet het product offline en blokkeer de betrokken voorraad direct.",
              "en": "Take the product offline and block the affected stock immediately."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Getroffen klanten notificeren",
              "en": "Notify affected customers"
            },
            "what": {
              "nl": "Informeer getroffen klanten proactief met duidelijke instructie (stop gebruik / retour / vervanging).",
              "en": "Proactively inform affected customers with clear instructions (stop use / return / replace)."
            },
            "next": "S7"
          },
          {
            "id": "S7",
            "swimlane_step": 7,
            "type": "step",
            "actor": "Risk",
            "label": {
              "nl": "Registreren & rapporteren",
              "en": "Record & report"
            },
            "what": {
              "nl": "Leg alles vast en rapporteer aan de bevoegde autoriteit conform wettelijke termijn.",
              "en": "Record everything and report to the competent authority within the legal deadline."
            },
            "next": "S8"
          },
          {
            "id": "S8",
            "swimlane_step": 8,
            "type": "step",
            "actor": "Risk / Lead",
            "label": {
              "nl": "Root cause + preventie (CS-G12)",
              "en": "Root cause + prevention (CS-G12)"
            },
            "what": {
              "nl": "Voer root cause-analyse uit en leg preventieve maatregelen vast (CS-G12).",
              "en": "Run a root cause analysis and record preventive measures (CS-G12)."
            },
            "next": "S9"
          },
          {
            "id": "S9",
            "swimlane_step": 9,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Afgehandeld — klant veilig",
              "en": "Handled — customer safe"
            },
            "what": {
              "nl": "Klant is veilig geïnformeerd en gecompenseerd; incident gedocumenteerd.",
              "en": "Customer safely informed and compensated; incident documented."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W32 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W32_Recall_Productveiligheid.html"
        },
        {
          "title": "CS-W03",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-G12",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    },
    {
      "$schema_note": "CX Digital agent-ready procedure (AOP v0.9), generated from swimlane CS-W34 on swimlanes.cxdigital.nl. Vendor-neutral. NO secrets: tools are logical names; bind them to the AI platform's own integrations.",
      "meta": {
        "id": "CS-W34",
        "title": {
          "nl": "Onderdelen & accessoires nabestellen",
          "en": "Spare parts & accessories reorder"
        },
        "version": "1.0-agent.1",
        "source_swimlane": "https://swimlanes.cxdigital.nl/CS-W34_Onderdelen_Accessoires.html",
        "owner": "CS Manager — Client",
        "customer_facing_languages": [
          "nl",
          "en"
        ],
        "spec_language": "en",
        "channels": [
          "chat",
          "email"
        ],
        "related": [
          "CS-W01",
          "CS-W03"
        ],
        "client_binding_note": "Generic reference version. Bind per client: systems, order-number format, thresholds, tone of voice.",
        "section": {
          "id": "complaints_escalation_incident",
          "nl": "Klacht, escalatie & incident",
          "en": "Complaints, escalation & incident"
        }
      },
      "intent": {
        "name": "cs_w34_spare_parts_accessories_reorder",
        "description": "Spare parts & accessories reorder",
        "goal": {
          "nl": null,
          "en": null
        },
        "entry_conditions": "Customer message matches this process; see example utterances (to be enriched per client).",
        "out_of_scope": "See related processes: CS-W01, CS-W03",
        "example_utterances": {
          "nl": [
            "kan ik een los onderdeel bestellen",
            "ik ben een onderdeel kwijt",
            "hebben jullie vervangende onderdelen"
          ],
          "en": [
            "can I order a spare part",
            "I lost a part",
            "do you have replacement parts"
          ]
        }
      },
      "actors": [
        "Agent (CS)",
        "Customer",
        "System"
      ],
      "actions": [
        {
          "ref": "crm.lookupOrder",
          "description": "Look up the customer/order/ticket in the CRM or ticketing platform.",
          "binding": "<bind per client> — suggested: Helpdesk (Zendesk/Gorgias/…) + e-commerce platform (Shopify/Magento/…)",
          "secret_location": "AI platform integration credentials — NOT in this file"
        },
        {
          "ref": "supplier.getDeliveryDate",
          "description": "Expected inbound/stock date from purchasing or supplier.",
          "binding": "<bind per client> — suggested: ERP / purchasing",
          "secret_location": "AI platform integration credentials — NOT in this file"
        }
      ],
      "procedure": {
        "start": "S1",
        "steps": [
          {
            "id": "S1",
            "swimlane_step": 1,
            "type": "step",
            "actor": "Customer",
            "label": {
              "nl": "Vraagt onderdeel/accessoire aan",
              "en": "Requests part/accessory"
            },
            "what": {
              "nl": "Klant vraagt een los onderdeel of accessoire aan.",
              "en": "Customer requests a spare part or accessory."
            },
            "next": "S2"
          },
          {
            "id": "S2",
            "swimlane_step": 2,
            "type": "step",
            "actor": "Agent (CS)",
            "label": {
              "nl": "Identificeer juist onderdeel",
              "en": "Identify correct part"
            },
            "what": {
              "nl": "Bepaal het juiste onderdeel via product/serienummer.",
              "en": "Determine the correct part via product/serial number."
            },
            "next": "S3"
          },
          {
            "id": "S3",
            "swimlane_step": 3,
            "type": "decision",
            "actor": "Agent (CS)",
            "label": {
              "nl": "Beschikbaar?",
              "en": "Available?"
            },
            "what": {
              "nl": "Onderdeel op voorraad? Ja → stap 4. Nee → alternatief bieden of bij leverancier bestellen.",
              "en": "Part in stock? Yes → step 4. No → offer alternative or order from supplier."
            },
            "branches": [
              {
                "condition": "Ja / Yes",
                "next": "S4"
              },
              {
                "condition": "unclear / tool error",
                "next": "E1"
              }
            ]
          },
          {
            "id": "S4",
            "swimlane_step": 4,
            "type": "step",
            "actor": "Agent (CS)",
            "label": {
              "nl": "Prijs + order plaatsen",
              "en": "Price + place order"
            },
            "what": {
              "nl": "Communiceer prijs en plaats of zet de order door.",
              "en": "Communicate price and place or route the order."
            },
            "next": "S5"
          },
          {
            "id": "S5",
            "swimlane_step": 5,
            "type": "step",
            "actor": "System",
            "label": {
              "nl": "Levering + track (CS-W01)",
              "en": "Delivery + track (CS-W01)"
            },
            "what": {
              "nl": "Verstuur het onderdeel en deel de Track & Trace (CS-W01).",
              "en": "Ship the part and share Track & Trace (CS-W01)."
            },
            "next": "S6"
          },
          {
            "id": "S6",
            "swimlane_step": 6,
            "type": "end",
            "actor": "Customer",
            "label": {
              "nl": "Onderdeel geleverd",
              "en": "Part delivered"
            },
            "what": {
              "nl": "Klant heeft het juiste onderdeel/accessoire ontvangen — product weer compleet.",
              "en": "Customer received the correct part/accessory — product complete again."
            },
            "outcome": "resolved"
          }
        ]
      },
      "guardrails": [
        {
          "rule": "Never invent statuses, dates, amounts or facts. Use only values returned by the bound tools.",
          "severity": "hard"
        },
        {
          "rule": "On doubt, conflict, tool error or an irritated customer: hand off to a human agent (E1).",
          "severity": "soft"
        }
      ],
      "escalation": {
        "E1": {
          "trigger": "Not found, tool error, angry customer, suspected fraud, or out-of-scope.",
          "action": "handoff_human",
          "queue": "CS L1 (human) — via helpdesk handoff",
          "context_to_pass": [
            "last_customer_message",
            "tool_error"
          ]
        }
      },
      "knowledge_refs": [
        {
          "title": "CS-W34 swimlane",
          "url": "https://swimlanes.cxdigital.nl/CS-W34_Onderdelen_Accessoires.html"
        },
        {
          "title": "CS-W01",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        },
        {
          "title": "CS-W03",
          "note": "related procedure in this set or on swimlanes.cxdigital.nl"
        }
      ]
    }
  ]
}