{
  "decisionTable": {
    "name": "Shipping cost",
    "description": "A decision table with hitPolicy 'first': rows are tried top to bottom and only the first one that matches applies, so the most specific rows come first and an all-wildcard row closes the table as the default. A null 'when' cell is a wildcard. The table expands into one ordinary rule per row, and 'first' makes the expanded set stop after its first match.",
    "id": "shipping",
    "hitPolicy": "first",
    "inputs": [
      { "field": "Customer.Tier", "operator": "Equals" },
      { "field": "Order.Total", "operator": "GreaterThanOrEqual" }
    ],
    "outputs": [
      { "target": "ShippingCost" },
      { "target": "ShippingTier" }
    ],
    "rows": [
      { "when": ["vip", null], "then": [0, "free-vip"] },
      { "when": [null, 100], "then": [0, "free-over-100"] },
      { "when": [null, 50], "then": [4.95, "reduced"] },
      { "when": [null, null], "then": [9.95, "standard"] }
    ]
  }
}
