{
 "about": {
  "method": "cell-counting-volume@1.0.0; dose-per-cell-arithmetic@1.0.0",
  "recordedOn": "2026-10-20",
  "script": "pipeline/lab-calculators/receipt_integrity_reference.py",
  "scriptSha256": "ef63a0f3938c49f1ee1a6875d8732f8077d514053b91d00728709fcf371a2f15",
  "source": "CSO memo of 20 October 2026 (docs/board/memos/2026-10-20-cso-audit-fixes.md), section 3; CSO memo of 17 October 2026, K3 and dose case 8; contract 10 lines 50, 108 and 134; audit of 20 October 2026, counting-dose M1 and M2",
  "scope": "The retained receipt reader (envelope everyday-preparation@1.0.0) for the cell-counting and dose-plan kinds: which complete receipts read and which read as null. The engines' arithmetic is checked by cell-counting-v3.json and dose-plan-v3.json (0.7.0), whose calculated cases are the base receipts here.",
  "baseFixtures": {
   "cell-counting-v3.json": {
    "version": "0.7.0",
    "sha256": "18dc5fcf347f5a732d5798efaa54e3c537ac30cf3b280acf315083644ba67312"
   },
   "dose-plan-v3.json": {
    "version": "0.7.0",
    "sha256": "d7fc9ea0a1a996e33c1aba52a4444dc027a71f3dc6c96547101a42a008355bf3"
   }
  },
  "rules": {
   "canonical-unit": "cell-counting: totalCountedVolume in L; viableDensity and totalDensity in cells/L",
   "density-identity": "cell-counting: viableDensity = sumLiveCount * dilutionFactor / totalCountedVolume and totalDensity = sumTotalCount * dilutionFactor / totalCountedVolume, where present, within float rounding",
   "basis-agreement": "dose-plan: requiredQuantity's basis equals enteredDose's"
  },
  "supersedes": "0.7.0 stays as published. Its dose-plan-v3.json case case-08a-receipt-swapped-basis sets requiredQuantity's unit to the string 'invalid-basis': it tests an invalid string, not a swap. The true swap of two valid bases is tested here (dose-pfu-quantity-* and dose-swap-*).",
  "notCovered": "The dose receipt carries no titre, so requiredStockVolume = requiredQuantity / titre cannot be rechecked on read; that needs a new receipt version (deferred).",
  "tolerances": {
   "read": "exact: each receipt reads or reads as null",
   "identities": "within float rounding; every refused identity case differs by relative 1e-6 or more in exact fractions, the one accepted perturbation by 1e-12"
  },
  "environment": {
   "image": "local",
   "python": "3.13.16",
   "platform": "Linux-6.18.44-fc-v139-x86_64-with-glibc2.39"
  },
  "crossCheck": {
   "tool": "fractions",
   "version": "stdlib",
   "ran": true,
   "result": "Every base receipt's rows re-derived in exact fractions from its v3 case input; every identity case's gap computed in exact fractions"
  }
 },
 "oracle": {
  "name": "Python fractions and decimal",
  "version": "3.13.16"
 },
 "count": 49,
 "recordedOn": "2026-10-20",
 "cases": [
  {
   "name": "valid-case-01-contract-worked-example",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-01-contract-worked-example",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 2e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 20,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 200000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/5000000",
    "dilutionFactor": "2",
    "sumLiveCount": "20",
    "viableDensity": "200000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-02-unit-equivalence",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-02-unit-equivalence",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 2e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 20,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 200000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/5000000",
    "dilutionFactor": "2",
    "sumLiveCount": "20",
    "viableDensity": "200000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-03-mixed-region-sizes-weighted-pooling",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-03-mixed-region-sizes-weighted-pooling",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 5e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 110,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 220000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/2000000",
    "dilutionFactor": "1",
    "sumLiveCount": "110",
    "viableDensity": "220000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-04-paired-90-live-10-dead",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000000",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-05a-all-zero-paired",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-05a-all-zero-paired",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 0.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 0.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-zero-total",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "0",
    "sumDeadCount": "0",
    "sumTotalCount": "0",
    "viableDensity": "0",
    "totalDensity": "0"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-05b-all-zero-total-only",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-05b-all-zero-total-only",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "totalDensity",
      "value": 0.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-total-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumTotalCount": "0",
    "totalDensity": "0"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-06-live-zero-dead-positive",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-06-live-zero-dead-positive",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 25,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 25,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 0.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 250000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 0.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "0",
    "sumDeadCount": "25",
    "sumTotalCount": "25",
    "viableDensity": "0",
    "totalDensity": "250000000",
    "viabilityPercent": "0"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-07-total-only-mode",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-07-total-only-mode",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 150,
      "unit": ""
     },
     {
      "key": "totalDensity",
      "value": 1500000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-total-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumTotalCount": "150",
    "totalDensity": "1500000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-08b-explicit-dead-zero-calculated",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-08b-explicit-dead-zero-calculated",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 50,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 50,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 500000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 500000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 100.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "50",
    "sumDeadCount": "0",
    "sumTotalCount": "50",
    "viableDensity": "500000000",
    "totalDensity": "500000000",
    "viabilityPercent": "100"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-09c-max-safe-integer-accepted",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-09c-max-safe-integer-accepted",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 0.001,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 9007199254740991,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 9.007199254740991e+18,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/1000",
    "dilutionFactor": "1",
    "sumLiveCount": "9007199254740991",
    "viableDensity": "9007199254740991000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-11c-dilution-one-undiluted",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-11c-dilution-one-undiluted",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 50,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 500000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "50",
    "viableDensity": "500000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-11d-dilution-two-doubled",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-11d-dilution-two-doubled",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 50,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "2",
    "sumLiveCount": "50",
    "viableDensity": "1000000000"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-14-bridge-equality",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-14-bridge-equality",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000000",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-01a-identity-anchor-ml",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-01b-identity-anchor-ul",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01b-identity-anchor-ul",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-01c-identity-anchor-l",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01c-identity-anchor-l",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-02-probe-class-titre-per-ul",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-02-probe-class-titre-per-ul",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-08,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-03a-basis-pfu",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03a-basis-pfu",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0001,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 2.0,
      "unit": "PFU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/10000",
    "enteredDose": "2"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-03b-basis-ifu",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03b-basis-ifu",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "IFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0002,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 5.0,
      "unit": "IFU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/5000",
    "enteredDose": "5"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-03c-basis-vg",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03c-basis-vg",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 100000000.0,
      "unit": "vg"
     },
     {
      "key": "requiredStockVolume",
      "value": 1e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 100.0,
      "unit": "vg per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "100000000",
    "requiredStockVolume": "1/100000",
    "enteredDose": "100"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-03d-basis-particles",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03d-basis-particles",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 50000000.0,
      "unit": "particles"
     },
     {
      "key": "requiredStockVolume",
      "value": 5e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 50.0,
      "unit": "particles per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "50000000",
    "requiredStockVolume": "1/20000",
    "enteredDose": "50"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-04a-zero-dose-calculated",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-04a-zero-dose-calculated",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 0.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 0.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned",
     "explicit-zero-dose"
    ]
   },
   "exact": {
    "requiredQuantity": "0",
    "requiredStockVolume": "0",
    "enteredDose": "0"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-06c-fractional-estimated-cells-accepted",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-06c-fractional-estimated-cells-accepted",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 750000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 7.5e-06,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned",
     "estimated-cell-count"
    ]
   },
   "exact": {
    "requiredQuantity": "750000",
    "requiredStockVolume": "3/400000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-07a-total-cells-denominator",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-07a-total-cells-denominator",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per total cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "valid-case-07b-viable-cells-denominator",
   "about": "The calculated v3 receipt, as the engine writes it, reads.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-07b-viable-cells-denominator",
   "mutation": null,
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "counting-viable-density-within-rounding",
   "about": "Viable density off its identity by relative 1e-12 (float rounding) still reads.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "viableDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000000.0009,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "9000000000009/10000",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "read"
   }
  },
  {
   "name": "counting-viable-density-doubled-live-only",
   "about": "A doubled viable density in a live-only receipt is refused.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-01-contract-worked-example",
   "mutation": {
    "viableDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 2e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 20,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 400000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/5000000",
    "dilutionFactor": "2",
    "sumLiveCount": "20",
    "viableDensity": "400000000"
   },
   "expected": {
    "expect": "null",
    "rule": "density-identity"
   }
  },
  {
   "name": "counting-viable-density-doubled-paired",
   "about": "A doubled viable density in a paired receipt is refused.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "viableDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 1800000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "1800000000",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "null",
    "rule": "density-identity"
   }
  },
  {
   "name": "counting-viable-density-off-1e-6",
   "about": "A viable density off its identity by relative 1e-6 is refused.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "viableDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000900.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000900",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "null",
    "rule": "density-identity"
   }
  },
  {
   "name": "counting-total-density-arbitrary-total-only",
   "about": "An arbitrary total density (123456 cells/L) in a total-only receipt is refused.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-07-total-only-mode",
   "mutation": {
    "totalDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 150,
      "unit": ""
     },
     {
      "key": "totalDensity",
      "value": 123456.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-total-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumTotalCount": "150",
    "totalDensity": "123456"
   },
   "expected": {
    "expect": "null",
    "rule": "density-identity"
   }
  },
  {
   "name": "counting-total-density-arbitrary-paired",
   "about": "An arbitrary total density (123456 cells/L) in a paired receipt is refused.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "totalDensity": {
     "value": "changed"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 123456.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000000",
    "totalDensity": "123456",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "null",
    "rule": "density-identity"
   }
  },
  {
   "name": "counting-viable-density-in-cells-per-ml",
   "about": "The viable density written in cells/mL (the same quantity) is refused: the receipt holds cells/L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-01-contract-worked-example",
   "mutation": {
    "viableDensity": {
     "value": "changed",
     "unit": "cells/mL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 2e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 20,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 200000.0,
      "unit": "cells/mL"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/5000000",
    "dilutionFactor": "2",
    "sumLiveCount": "20",
    "viableDensity": "200000"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "counting-total-density-in-cells-per-ml",
   "about": "The total density written in cells/mL (the same quantity) is refused: the receipt holds cells/L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-07-total-only-mode",
   "mutation": {
    "totalDensity": {
     "value": "changed",
     "unit": "cells/mL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 1e-07,
      "unit": "L"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 150,
      "unit": ""
     },
     {
      "key": "totalDensity",
      "value": 1500000.0,
      "unit": "cells/mL"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-total-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000000",
    "dilutionFactor": "1",
    "sumTotalCount": "150",
    "totalDensity": "1500000"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "counting-volume-in-ml",
   "about": "The total counted volume written in mL (the same quantity) is refused: the receipt holds L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-01-contract-worked-example",
   "mutation": {
    "totalCountedVolume": {
     "value": "changed",
     "unit": "mL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 0.0002,
      "unit": "mL"
     },
     {
      "key": "dilutionFactor",
      "value": 2.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 20,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 200000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-live-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/5000",
    "dilutionFactor": "2",
    "sumLiveCount": "20",
    "viableDensity": "200000000"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "counting-volume-in-ul",
   "about": "The total counted volume written in µL (the same quantity) is refused: the receipt holds L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "totalCountedVolume": {
     "value": "changed",
     "unit": "µL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 0.1,
      "unit": "µL"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000000.0,
      "unit": "cells/L"
     },
     {
      "key": "totalDensity",
      "value": 1000000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000000",
    "totalDensity": "1000000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "counting-volume-in-nl",
   "about": "The total counted volume written in nL (the same quantity) is refused: the receipt holds L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-07-total-only-mode",
   "mutation": {
    "totalCountedVolume": {
     "value": "changed",
     "unit": "nL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 100.0,
      "unit": "nL"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 150,
      "unit": ""
     },
     {
      "key": "totalDensity",
      "value": 1500000000.0,
      "unit": "cells/L"
     },
     {
      "key": "viabilityStatus",
      "value": "unavailable-total-only",
      "unit": ""
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "100",
    "dilutionFactor": "1",
    "sumTotalCount": "150",
    "totalDensity": "1500000000"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "counting-self-consistent-ml-and-cells-per-ml",
   "about": "A receipt in mL and cells/mL that is self-consistent in those units is still refused: the receipt holds L and cells/L.",
   "kind": "cell-counting",
   "baseFixture": "cell-counting-v3.json",
   "baseCase": "case-04-paired-90-live-10-dead",
   "mutation": {
    "totalCountedVolume": {
     "value": "changed",
     "unit": "mL"
    },
    "viableDensity": {
     "value": "changed",
     "unit": "cells/mL"
    },
    "totalDensity": {
     "value": "changed",
     "unit": "cells/mL"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "cell-counting",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "totalCountedVolume",
      "value": 0.0001,
      "unit": "mL"
     },
     {
      "key": "dilutionFactor",
      "value": 1.0,
      "unit": ""
     },
     {
      "key": "sumLiveCount",
      "value": 90,
      "unit": ""
     },
     {
      "key": "sumDeadCount",
      "value": 10,
      "unit": ""
     },
     {
      "key": "sumTotalCount",
      "value": 100,
      "unit": ""
     },
     {
      "key": "viableDensity",
      "value": 900000.0,
      "unit": "cells/mL"
     },
     {
      "key": "totalDensity",
      "value": 1000000.0,
      "unit": "cells/mL"
     },
     {
      "key": "viabilityStatus",
      "value": "available",
      "unit": ""
     },
     {
      "key": "viabilityPercent",
      "value": 90.0,
      "unit": "%"
     }
    ],
    "qualifications": []
   },
   "exact": {
    "totalCountedVolume": "1/10000",
    "dilutionFactor": "1",
    "sumLiveCount": "90",
    "sumDeadCount": "10",
    "sumTotalCount": "100",
    "viableDensity": "900000",
    "totalDensity": "1000000",
    "viabilityPercent": "90"
   },
   "expected": {
    "expect": "null",
    "rule": "canonical-unit"
   }
  },
  {
   "name": "dose-pfu-quantity-beside-tu-per-viable-cell",
   "about": "A required quantity in PFU beside a dose in TU per viable cell is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": {
    "requiredQuantity": {
     "unit": "PFU"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-pfu-quantity-beside-tu-per-total-cell",
   "about": "A required quantity in PFU beside a dose in TU per total cell is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-07a-total-cells-denominator",
   "mutation": {
    "requiredQuantity": {
     "unit": "PFU"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "TU per total cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-tu-pfu",
   "about": "The TU receipt with its dose written in PFU per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": {
    "enteredDose": {
     "unit": "PFU per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "PFU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-tu-ifu",
   "about": "The TU receipt with its dose written in IFU per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": {
    "enteredDose": {
     "unit": "IFU per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "IFU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-tu-vg",
   "about": "The TU receipt with its dose written in vg per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": {
    "enteredDose": {
     "unit": "vg per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "vg per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-tu-particles",
   "about": "The TU receipt with its dose written in particles per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-01a-identity-anchor-ml",
   "mutation": {
    "enteredDose": {
     "unit": "particles per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 3000000.0,
      "unit": "TU"
     },
     {
      "key": "requiredStockVolume",
      "value": 3e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 3.0,
      "unit": "particles per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "3000000",
    "requiredStockVolume": "3/100000",
    "enteredDose": "3"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-pfu-ifu",
   "about": "The PFU receipt with its dose written in IFU per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03a-basis-pfu",
   "mutation": {
    "enteredDose": {
     "unit": "IFU per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0001,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 2.0,
      "unit": "IFU per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/10000",
    "enteredDose": "2"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-pfu-vg",
   "about": "The PFU receipt with its dose written in vg per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03a-basis-pfu",
   "mutation": {
    "enteredDose": {
     "unit": "vg per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0001,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 2.0,
      "unit": "vg per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/10000",
    "enteredDose": "2"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-pfu-particles",
   "about": "The PFU receipt with its dose written in particles per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03a-basis-pfu",
   "mutation": {
    "enteredDose": {
     "unit": "particles per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "PFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0001,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 2.0,
      "unit": "particles per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/10000",
    "enteredDose": "2"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-ifu-vg",
   "about": "The IFU receipt with its dose written in vg per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03b-basis-ifu",
   "mutation": {
    "enteredDose": {
     "unit": "vg per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "IFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0002,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 5.0,
      "unit": "vg per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/5000",
    "enteredDose": "5"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-ifu-particles",
   "about": "The IFU receipt with its dose written in particles per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03b-basis-ifu",
   "mutation": {
    "enteredDose": {
     "unit": "particles per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 1000000.0,
      "unit": "IFU"
     },
     {
      "key": "requiredStockVolume",
      "value": 0.0002,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 5.0,
      "unit": "particles per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "1000000",
    "requiredStockVolume": "1/5000",
    "enteredDose": "5"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  },
  {
   "name": "dose-swap-vg-particles",
   "about": "The vg receipt with its dose written in particles per viable cell (both valid bases, swapped between the rows) is refused.",
   "kind": "dose-plan",
   "baseFixture": "dose-plan-v3.json",
   "baseCase": "case-03c-basis-vg",
   "mutation": {
    "enteredDose": {
     "unit": "particles per viable cell"
    }
   },
   "receipt": {
    "ok": true,
    "v": 1,
    "kind": "dose-plan",
    "method": {
     "id": "everyday-preparation",
     "version": "1.0.0"
    },
    "rows": [
     {
      "key": "requiredQuantity",
      "value": 100000000.0,
      "unit": "vg"
     },
     {
      "key": "requiredStockVolume",
      "value": 1e-05,
      "unit": "L"
     },
     {
      "key": "enteredDose",
      "value": 100.0,
      "unit": "particles per viable cell"
     },
     {
      "key": "allocationStatus",
      "value": "not-assessed",
      "unit": ""
     }
    ],
    "qualifications": [
     "planned"
    ]
   },
   "exact": {
    "requiredQuantity": "100000000",
    "requiredStockVolume": "1/100000",
    "enteredDose": "100"
   },
   "expected": {
    "expect": "null",
    "rule": "basis-agreement"
   }
  }
 ]
}
