{
  "scope": "Constructed exact-rational arithmetic; no tax, FX, provider or database",
  "policy": "nonnegative total; largest fractional remainder; stable ID tie-break",
  "cases": [
    {
      "name": "USD equal thirds",
      "scale": 2,
      "total_minor": 100,
      "weights": [
        "1",
        "1",
        "1"
      ],
      "independent_minor": [
        33,
        33,
        33
      ],
      "independent_error_minor": -1,
      "allocated_minor": {
        "a": 34,
        "b": 33,
        "c": 33
      },
      "allocation_error_minor": 0
    },
    {
      "name": "USD two cents",
      "scale": 2,
      "total_minor": 2,
      "weights": [
        "1",
        "1",
        "1"
      ],
      "independent_minor": [
        1,
        1,
        1
      ],
      "independent_error_minor": 1,
      "allocated_minor": {
        "a": 1,
        "b": 1,
        "c": 0
      },
      "allocation_error_minor": 0
    },
    {
      "name": "USD uneven weights",
      "scale": 2,
      "total_minor": 101,
      "weights": [
        "1",
        "2",
        "3"
      ],
      "independent_minor": [
        17,
        34,
        51
      ],
      "independent_error_minor": 1,
      "allocated_minor": {
        "a": 17,
        "b": 34,
        "c": 50
      },
      "allocation_error_minor": 0
    },
    {
      "name": "JPY one unit",
      "scale": 0,
      "total_minor": 1,
      "weights": [
        "1",
        "1"
      ],
      "independent_minor": [
        1,
        1
      ],
      "independent_error_minor": 1,
      "allocated_minor": {
        "a": 1,
        "b": 0
      },
      "allocation_error_minor": 0
    },
    {
      "name": "Three-decimal scale",
      "scale": 3,
      "total_minor": 1001,
      "weights": [
        "1",
        "1",
        "1"
      ],
      "independent_minor": [
        334,
        334,
        334
      ],
      "independent_error_minor": 1,
      "allocated_minor": {
        "a": 334,
        "b": 334,
        "c": 333
      },
      "allocation_error_minor": 0
    },
    {
      "name": "Zero allocation",
      "scale": 2,
      "total_minor": 0,
      "weights": [
        "0",
        "0",
        "0"
      ],
      "independent_minor": [
        0,
        0,
        0
      ],
      "independent_error_minor": 0,
      "allocated_minor": {
        "a": 0,
        "b": 0,
        "c": 0
      },
      "allocation_error_minor": 0
    },
    {
      "name": "Single line",
      "scale": 2,
      "total_minor": 100,
      "weights": [
        "1"
      ],
      "independent_minor": [
        100
      ],
      "independent_error_minor": 0,
      "allocated_minor": {
        "a": 100
      },
      "allocation_error_minor": 0
    },
    {
      "name": "Stored full reversal",
      "scale": 2,
      "total_minor": -100,
      "allocated_minor": {
        "a": -34,
        "b": -33,
        "c": -33
      },
      "allocation_error_minor": 0,
      "method": "negate the stored original amounts; do not reallocate"
    }
  ],
  "rejected_inputs": [
    "duplicate IDs",
    "negative weight",
    "zero weights with positive total",
    "fractional minor-unit total",
    "negative total",
    "empty lines"
  ],
  "sensitivity": {
    "cases": 3750,
    "independent_mismatches": 1411,
    "allocation_mismatches": 0,
    "allocation_bound_violations": 0
  },
  "permutation_checks": 26
}
