{
  "name": "Packrift source-to-packingsolver format map",
  "version": "v2026.05.31-r2",
  "generated_at": "2026-05-31T12:26:00Z",
  "publisher": {
    "name": "Packrift",
    "url": "https://packrift.com/"
  },
  "canonical_page": "https://packrift-benchmark-navigator.vercel.app/packingsolver-format-spec.html",
  "converter_page": "https://packrift-benchmark-navigator.vercel.app/packingsolver-converter.html",
  "converter_script": "https://packrift-benchmark-navigator.vercel.app/data/packingsolver-fixtures/convert_box_packrift.py",
  "upstream_references": [
    {
      "label": "packingsolver box instance parser",
      "url": "https://github.com/fontanf/packingsolver/blob/e3a91035cea0501a11edfb94235d0baa6a0213fd/src/box/instance_builder.cpp#L337-L542"
    },
    {
      "label": "packingsolver convert_box.py pattern",
      "url": "https://github.com/fontanf/packingsolver/blob/master/scripts/convert_box.py"
    }
  ],
  "source_files": {
    "cartons": {
      "url": "https://packrift-benchmark-navigator.vercel.app/data/packingsolver-fixtures/fixture_cartons_v2026.05.31.csv",
      "description": "Public Packrift carton candidate records used as bin types.",
      "required_fields": [
        "carton_id",
        "length_in",
        "width_in",
        "height_in",
        "volume_cuin"
      ]
    },
    "orders": {
      "url": "https://packrift-benchmark-navigator.vercel.app/data/packingsolver-fixtures/fixture_orders_v2026.05.31.csv",
      "description": "Generated ecommerce scenario order lines used as item types.",
      "required_fields": [
        "order_id",
        "item_length_in",
        "item_width_in",
        "item_height_in",
        "item_count"
      ]
    }
  },
  "target_files": {
    "bins.csv": {
      "description": "Candidate bin/carton types for one scenario order.",
      "columns": [
        {
          "name": "ID",
          "source": "carton row order",
          "rule": "zero-based integer index"
        },
        {
          "name": "X",
          "source": "length_in",
          "rule": "round(length_in * 1000)"
        },
        {
          "name": "Y",
          "source": "width_in",
          "rule": "round(width_in * 1000)"
        },
        {
          "name": "Z",
          "source": "height_in",
          "rule": "round(height_in * 1000)"
        },
        {
          "name": "COST",
          "source": "volume_cuin",
          "rule": "round(volume_cuin * 1000), a size proxy rather than live price or margin"
        },
        {
          "name": "COPIES",
          "source": "scenario policy",
          "rule": "1 candidate copy per carton type"
        }
      ]
    },
    "items.csv": {
      "description": "Item types for one generated scenario order.",
      "columns": [
        {
          "name": "ID",
          "source": "order line order within order_id",
          "rule": "zero-based integer index"
        },
        {
          "name": "X",
          "source": "item_length_in",
          "rule": "round(item_length_in * 1000)"
        },
        {
          "name": "Y",
          "source": "item_width_in",
          "rule": "round(item_width_in * 1000)"
        },
        {
          "name": "Z",
          "source": "item_height_in",
          "rule": "round(item_height_in * 1000)"
        },
        {
          "name": "COPIES",
          "source": "item_count",
          "rule": "positive integer scenario quantity"
        },
        {
          "name": "PROFIT",
          "source": "scaled dimensions",
          "rule": "X * Y * Z, deterministic parser value rather than commercial profit"
        },
        {
          "name": "ROTATION_XYZ",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        },
        {
          "name": "ROTATION_YXZ",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        },
        {
          "name": "ROTATION_ZYX",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        },
        {
          "name": "ROTATION_YZX",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        },
        {
          "name": "ROTATION_XZY",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        },
        {
          "name": "ROTATION_ZXY",
          "source": "scenario policy",
          "rule": "1 unless a documented physical handling constraint exists"
        }
      ]
    },
    "parameters.csv": {
      "description": "Scenario objective selection.",
      "columns": [
        {
          "name": "NAME",
          "source": "constant",
          "rule": "objective"
        },
        {
          "name": "VALUE",
          "source": "constant",
          "rule": "variable-sized-bin-packing"
        }
      ]
    }
  },
  "validation_rules": [
    "Every carton row must have positive length_in, width_in, height_in, and volume_cuin.",
    "Every order row must have a non-empty order_id and positive item dimensions.",
    "Every item_count must be a positive integer.",
    "Each scenario output folder must contain bins.csv, items.csv, and parameters.csv.",
    "The converter must not claim optimal or quasi-optimal solutions."
  ],
  "boundaries": [
    "Scenario groupings are generated and are not real customer orders.",
    "No optimal or quasi-optimal solution is declared.",
    "Target carton fields in the source rows are scenario anchors, not solver answers.",
    "COST and PROFIT are deterministic parser fields, not Packrift pricing, margin, or freight economics.",
    "No third-party endorsement is implied by the existence of this mapping."
  ]
}
