{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://packrift-benchmark-navigator.vercel.app/data/packingsolver-fixtures/schemas/instance_index.schema.json",
  "title": "Packrift Instance Index CSV row schema",
  "description": "Scenario-to-packingsolver input file map for bins.csv, items.csv, and parameters.csv. This schema validates JSON objects produced by parsing the CSV row as strings.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "order_id",
    "scenario_family",
    "scenario_note",
    "target_carton_sku",
    "line_count",
    "estimated_total_item_volume_cuin",
    "estimated_cube_utilization",
    "item_families",
    "source_product_url_count",
    "bins_csv_url",
    "items_csv_url",
    "parameters_csv_url",
    "file_set_present"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "Generated scenario identifier.",
      "pattern": "^packrift-20260531-\\d{4}-[a-z0-9-]+$"
    },
    "scenario_family": {
      "type": "string",
      "description": "Generated review scenario family.",
      "enum": [
        "apparel-return",
        "beauty-sampler",
        "book-media",
        "bulk-lightweight",
        "electronics-accessory",
        "home-goods-small",
        "marketplace-replacement",
        "sample-kit",
        "subscription-bundle",
        "warehouse-restock"
      ]
    },
    "scenario_note": {
      "type": "string",
      "description": "Plain-English scenario description."
    },
    "target_carton_sku": {
      "type": "string",
      "description": "Scenario anchor carton SKU."
    },
    "line_count": {
      "type": "string",
      "description": "Number of source item lines.",
      "pattern": "^(?:0|[1-9][0-9]*)$"
    },
    "estimated_total_item_volume_cuin": {
      "type": "string",
      "description": "Total estimated item cube.",
      "pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
    },
    "estimated_cube_utilization": {
      "type": "string",
      "description": "Estimated cube utilization.",
      "pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
    },
    "item_families": {
      "type": "string",
      "description": "Pipe-delimited source families present in the scenario."
    },
    "source_product_url_count": {
      "type": "string",
      "description": "Unique Packrift product URLs used by the scenario.",
      "pattern": "^(?:0|[1-9][0-9]*)$"
    },
    "bins_csv_url": {
      "type": "string",
      "description": "Public bins.csv URL for the generated packingsolver input.",
      "format": "uri"
    },
    "items_csv_url": {
      "type": "string",
      "description": "Public items.csv URL for the generated packingsolver input.",
      "format": "uri"
    },
    "parameters_csv_url": {
      "type": "string",
      "description": "Public parameters.csv URL for the generated packingsolver input.",
      "format": "uri"
    },
    "file_set_present": {
      "type": "string",
      "description": "Whether all three generated input files are present.",
      "enum": [
        "true"
      ]
    }
  }
}
