{
  "apiVersion": "modernedi.com/scenario/v1",
  "kind": "ScenarioDefinition",
  "metadata": {"namespace": "modernedi.examples", "key": "warehouse-outbound", "version": "1.0.0"},
  "spec": {
    "parameters": [
      {"id": "expectedAdviceCount", "type": "decimal", "required": true},
      {"id": "expectedShippedQuantity", "type": "decimal", "required": true}
    ],
    "actors": [{"id": "depositor"}, {"id": "warehouse"}],
    "steps": [
      {
        "id": "shippingOrder", "fromActor": "depositor", "toActor": "warehouse",
        "transaction": {"standard": "X12", "transactionSet": "940", "businessUsage": "warehouse_shipping_order"},
        "occurrence": {"min": 1, "max": 1, "closure": {"kind": "fixed"}},
        "facts": [
          {"name": "depositorOrderNumber", "type": "string", "cardinality": "one", "normalization": ["trim"], "sensitivity": "business"}
        ],
        "pipeline": [
          {"id": "exchange", "kind": "exchange"},
          {"id": "extract", "kind": "extract", "facts": ["depositorOrderNumber"]}
        ]
      },
      {
        "id": "shippingAdvice", "fromActor": "warehouse", "toActor": "depositor",
        "transaction": {"standard": "X12", "transactionSet": "945", "businessUsage": "warehouse_shipping_advice"},
        "occurrence": {"min": 1, "max": 10, "closure": {"kind": "expected_count", "parameter": "expectedAdviceCount"}},
        "facts": [
          {"name": "depositorOrderNumber", "type": "string", "cardinality": "one", "normalization": ["trim"], "sensitivity": "business"},
          {"name": "shipmentIdentificationNumber", "type": "string", "cardinality": "one", "normalization": ["trim"], "sensitivity": "business"},
          {"name": "shippedQuantity", "type": "decimal", "cardinality": "one", "normalization": ["decimal_canonical"], "sensitivity": "business"}
        ],
        "pipeline": [
          {"id": "exchange", "kind": "exchange"},
          {"id": "extract", "kind": "extract", "facts": ["depositorOrderNumber", "shipmentIdentificationNumber", "shippedQuantity"]}
        ]
      }
    ],
    "transitions": [
      {
        "id": "adviceForOrder", "fromStep": "shippingOrder", "toStep": "shippingAdvice", "relationship": "follows", "within": "P2D",
        "correlations": [
          {
            "id": "sameOrder", "operator": "equal",
            "left": {"kind": "fact", "stepId": "shippingOrder", "fact": "depositorOrderNumber", "projection": "value"},
            "right": {"kind": "fact", "stepId": "shippingAdvice", "fact": "depositorOrderNumber", "projection": "value"}
          }
        ],
        "matching": {
          "strategy": "correlate",
          "quantifiers": [
            {"kind": "every", "scope": "from"},
            {"kind": "every", "scope": "to"},
            {"kind": "exactly", "scope": "pairs", "count": 2}
          ],
          "unmatched": "fail"
        }
      }
    ],
    "assertions": [
      {
        "id": "shipmentIdsUnique", "operator": "unique",
        "left": {"kind": "fact", "stepId": "shippingAdvice", "fact": "shipmentIdentificationNumber", "projection": "list"}
      },
      {
        "id": "shippedQuantityMatchesExpected", "operator": "sum_equal",
        "left": {"kind": "fact", "stepId": "shippingAdvice", "fact": "shippedQuantity", "projection": "list"},
        "right": {"kind": "parameter", "parameter": "expectedShippedQuantity"}
      }
    ],
    "checkpoints": [],
    "branches": []
  }
}
