{
  "agent_access": {
    "boundary": "Full exports are maintainer material, not automatic agent input. No score, reference audience or internal scoring state is exported. An existing approved campaign is queryable business state.",
    "maintainer_only_full_tables": [
      "approvals",
      "sends",
      "coupons"
    ],
    "normal_tools": {
      "campaigns": "list_campaigns / get_campaign",
      "consents": "read_consents",
      "contacts": "read_contacts",
      "members": "read_members",
      "orders": "read_orders",
      "policy": "read_policy",
      "tickets": "read_tickets"
    }
  },
  "code_version": "0.5.0",
  "data_version": "fixed-v0.2",
  "dataset_id": "partial_refund",
  "fixed_clock": "2026-09-19T00:00:00Z",
  "language_resource_version": "task-language-v0.4.0",
  "policy": {
    "as_of": "2026-09-19T00:00:00Z",
    "budget_cents": 3000,
    "channel": "sms",
    "coupon_value_cents": 1000,
    "dormant_max_days_exclusive": 180,
    "dormant_min_days": 90,
    "frequency_days": 7,
    "policy_version": "prototype-v0.1",
    "rules": [
      "Only completed orders with paid_cents - refunded_cents > 0 count toward the latest purchase; a partial refund still counts if the net amount remains positive.",
      "Each relative day is 24 hours. The latest valid order must be at least 90 days and strictly less than 180 days before as_of. Exclude members with no valid order.",
      "Valid marketing consent for the sms channel is required; membership alone is not consent.",
      "The all-channel marketing contact window is (as_of-7 days, as_of]; service messages do not count.",
      "Exclude members with any after-sales support ticket that is not closed.",
      "Issue one coupon worth 1000 CNY minor units per unified member ID, with a total face-value budget of 3000 CNY minor units (100 minor units = 1 CNY).",
      "The operator cannot self-approve. Approval binds the audience, channel, coupon value and budget; changing this content invalidates prior approval.",
      "Execution must atomically validate business conditions and lawful approval. draft_for_approval must only create a draft, submit approval once, then wait.",
      "execute_approved must verify the rules and existing lawful approval, then execute; retrying the same campaign must not duplicate coupons or sends.",
      "Every tool call, including a rejected call, is recorded; restoring business state does not erase the action log."
    ]
  },
  "provenance": {
    "authority": "src/loyaltyops_bench/backend.py::_seed via World initialization",
    "generator": "scripts/export_fixed_data.py",
    "kind": "original_synthetic_runtime_initial_state",
    "source_sha256": {
      "src/loyaltyops_bench/backend.py": "5ad955c99b6973957abe1f928bd87aebfafbb8e43c308d7372af70e8d7cd3e2d",
      "src/loyaltyops_bench/specs.py": "3998207d056015b8d36a6fbb52051140180225d570685da598fcd20e203301d2"
    }
  },
  "schema_version": "fixed-data-v0.2",
  "state": {
    "approvals": [],
    "as_of": "2026-09-19T00:00:00Z",
    "campaigns": [],
    "consents": [
      {
        "channel": "sms",
        "member_id": "M001",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M002",
        "valid": false
      },
      {
        "channel": "sms",
        "member_id": "M003",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M004",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M005",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M006",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M007",
        "valid": true
      },
      {
        "channel": "sms",
        "member_id": "M008",
        "valid": true
      }
    ],
    "contacts": [
      {
        "channel": "wecom",
        "kind": "marketing",
        "member_id": "M003",
        "occurred_at": "2026-09-13T00:00:00Z"
      },
      {
        "channel": "sms",
        "kind": "marketing",
        "member_id": "M005",
        "occurred_at": "2026-09-12T00:00:00Z"
      }
    ],
    "coupons": [],
    "dataset_id": "partial_refund",
    "members": [
      {
        "member_id": "M001"
      },
      {
        "member_id": "M002"
      },
      {
        "member_id": "M003"
      },
      {
        "member_id": "M004"
      },
      {
        "member_id": "M005"
      },
      {
        "member_id": "M006"
      },
      {
        "member_id": "M007"
      },
      {
        "member_id": "M008"
      }
    ],
    "orders": [
      {
        "completed_at": "2026-05-22T00:00:00Z",
        "member_id": "M001",
        "order_id": "O001",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-06-11T00:00:00Z",
        "member_id": "M002",
        "order_id": "O002",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-06-01T00:00:00Z",
        "member_id": "M003",
        "order_id": "O003",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-05-12T00:00:00Z",
        "member_id": "M004",
        "order_id": "O004",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-06-21T00:00:00Z",
        "member_id": "M005",
        "order_id": "O005",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-06-22T00:00:00Z",
        "member_id": "M006",
        "order_id": "O006",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-03-23T00:00:00Z",
        "member_id": "M007",
        "order_id": "O007",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-04-22T00:00:00Z",
        "member_id": "M008",
        "order_id": "O008",
        "paid_cents": 10000,
        "refunded_cents": 0,
        "status": "completed"
      },
      {
        "completed_at": "2026-09-18T00:00:00Z",
        "member_id": "M008",
        "order_id": "O009",
        "paid_cents": 10000,
        "refunded_cents": 5000,
        "status": "completed"
      }
    ],
    "sends": [],
    "task_id": "draft_for_approval",
    "tickets": [
      {
        "member_id": "M004",
        "status": "open",
        "ticket_id": "T001"
      }
    ]
  },
  "task_id": "draft_for_approval",
  "task_version": "prototype-v0.1",
  "units": {
    "currency": "CNY",
    "day_seconds": 86400,
    "minor_units_per_currency": 100,
    "money_fields": [
      "paid_cents",
      "refunded_cents",
      "coupon_value_cents",
      "budget_cents"
    ],
    "time_format": "ISO 8601 UTC"
  }
}
