{"abstract":"A 250 mg/5 mL suspension yields volumes five times too small.","category":"Medication dosing calculations","checks":8,"contract":"Input {weight_kg, mg_per_kg, max_mg, conc_mg, conc_ml (label strength conc_mg per conc_ml), syringe_ml (1, 5 or 10)}. dose = min(mg_per_kg*weight, max_mg); volume = dose/(conc_mg/conc_ml). Graduations: 1 mL syringe 0.01 mL, 5 mL syringe 0.2 mL, 10 mL syringe 0.5 mL. Round half-up to the graduation, but if that delivers more than max_mg round down instead. A rounded volume above syringe capacity returns {status SPLIT, syringes = ceil(volume/capacity)}; otherwise {status OK, volume_ml, dose_mg delivered}.","evaluation_group":"w2-meddose-oral-liquid-volume","failed_approach":"Inverting the label strength divides a dose by mL/mg and gives nonsensical volumes.","family":"w2-meddose-oral-liquid-volume-label-concentration-per-millilitre","id":"FA-64226","implementations":{"attempt":{"sha256":"ca4e83c83a3431efd6be82abb748a55d69617c98ad36bf8c02fa0b580fcc0e0d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    dose = min(Fraction(str(x['mg_per_kg'])) * Fraction(str(x['weight_kg'])), x['max_mg'])\n    per_ml = Fraction(x['conc_ml'], x['conc_mg'])\n    vol = dose / per_ml\n    grad = {1: Fraction(1, 100), 5: Fraction(1, 5), 10: Fraction(1, 2)}[x['syringe_ml']]\n    v = math.floor(vol / grad + Fraction(1, 2)) * grad\n    if v * per_ml > x['max_mg']:\n        v = math.floor(vol / grad) * grad\n    if v > x['syringe_ml']:\n        return {'status': 'SPLIT', 'syringes': math.ceil(v / x['syringe_ml'])}\n    return {'status': 'OK', 'volume_ml': float(v), 'dose_mg': float(v * per_ml)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('suspension per 5 mL label',\n   {'weight_kg': 13, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 9, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 3.8, 'dose_mg': 91.2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 21, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 195, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 180.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 39, 'mg_per_kg': 5, 'max_mg': 200, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.1', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 5, 'max_mg': 1000, 'conc_mg': 10, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 31, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 14, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 10, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.2, 'dose_mg': 100.8}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 22, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 215, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 43, 'mg_per_kg': 5, 'max_mg': 220, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.2', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 10, 'max_mg': 1000, 'conc_mg': 20, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 32, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 15, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 225.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 11, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.6, 'dose_mg': 110.4}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 23, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.0, 'dose_mg': 160.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 235, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 47, 'mg_per_kg': 5, 'max_mg': 240, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.05', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 30, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 34, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 16, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 12, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 24, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.5, 'dose_mg': 170.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 255, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 51, 'mg_per_kg': 5, 'max_mg': 260, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.15', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 20, 'max_mg': 1000, 'conc_mg': 40, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 36, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 17, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 13, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 25, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 9.0, 'dose_mg': 180.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 275, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 55, 'mg_per_kg': 5, 'max_mg': 280, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.0, 'dose_mg': 280.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.12', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 25, 'max_mg': 1000, 'conc_mg': 50, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 37, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"50c1adefdcb5fd458000230f400049570f36e0dc770fb2a5064c8efbf4f6f78d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    dose = min(Fraction(str(x['mg_per_kg'])) * Fraction(str(x['weight_kg'])), x['max_mg'])\n    per_ml = Fraction(x['conc_mg'])\n    vol = dose / per_ml\n    grad = {1: Fraction(1, 100), 5: Fraction(1, 5), 10: Fraction(1, 2)}[x['syringe_ml']]\n    v = math.floor(vol / grad + Fraction(1, 2)) * grad\n    if v * per_ml > x['max_mg']:\n        v = math.floor(vol / grad) * grad\n    if v > x['syringe_ml']:\n        return {'status': 'SPLIT', 'syringes': math.ceil(v / x['syringe_ml'])}\n    return {'status': 'OK', 'volume_ml': float(v), 'dose_mg': float(v * per_ml)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('suspension per 5 mL label',\n   {'weight_kg': 13, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 9, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 3.8, 'dose_mg': 91.2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 21, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 195, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 180.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 39, 'mg_per_kg': 5, 'max_mg': 200, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.1', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 5, 'max_mg': 1000, 'conc_mg': 10, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 31, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 14, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 10, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.2, 'dose_mg': 100.8}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 22, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 215, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 43, 'mg_per_kg': 5, 'max_mg': 220, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.2', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 10, 'max_mg': 1000, 'conc_mg': 20, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 32, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 15, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 225.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 11, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.6, 'dose_mg': 110.4}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 23, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.0, 'dose_mg': 160.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 235, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 47, 'mg_per_kg': 5, 'max_mg': 240, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.05', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 30, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 34, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 16, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 12, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 24, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.5, 'dose_mg': 170.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 255, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 51, 'mg_per_kg': 5, 'max_mg': 260, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.15', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 20, 'max_mg': 1000, 'conc_mg': 40, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 36, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 17, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 13, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 25, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 9.0, 'dose_mg': 180.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 275, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 55, 'mg_per_kg': 5, 'max_mg': 280, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.0, 'dose_mg': 280.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.12', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 25, 'max_mg': 1000, 'conc_mg': 50, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 37, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"c26945bb8f52c5b7b0d2f85b2bdc2e9665f396fd0f1c8db1879d53bbb9b8af7d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    dose = min(Fraction(str(x['mg_per_kg'])) * Fraction(str(x['weight_kg'])), x['max_mg'])\n    per_ml = Fraction(x['conc_mg'], x['conc_ml'])\n    vol = dose / per_ml\n    grad = {1: Fraction(1, 100), 5: Fraction(1, 5), 10: Fraction(1, 2)}[x['syringe_ml']]\n    v = math.floor(vol / grad + Fraction(1, 2)) * grad\n    if v * per_ml > x['max_mg']:\n        v = math.floor(vol / grad) * grad\n    if v > x['syringe_ml']:\n        return {'status': 'SPLIT', 'syringes': math.ceil(v / x['syringe_ml'])}\n    return {'status': 'OK', 'volume_ml': float(v), 'dose_mg': float(v * per_ml)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('suspension per 5 mL label',\n   {'weight_kg': 13, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 9, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 3.8, 'dose_mg': 91.2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 21, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 195, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 180.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 39, 'mg_per_kg': 5, 'max_mg': 200, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.1', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 5, 'max_mg': 1000, 'conc_mg': 10, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 31, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 14, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.0, 'dose_mg': 200.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 10, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.2, 'dose_mg': 100.8}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 22, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.5, 'dose_mg': 150.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 215, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 200.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 43, 'mg_per_kg': 5, 'max_mg': 220, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.2', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 10, 'max_mg': 1000, 'conc_mg': 20, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 32, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2})],\n [('suspension per 5 mL label',\n   {'weight_kg': 15, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 4.5, 'dose_mg': 225.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 11, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 4.6, 'dose_mg': 110.4}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 23, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.0, 'dose_mg': 160.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 235, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.5, 'dose_mg': 220.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 47, 'mg_per_kg': 5, 'max_mg': 240, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.05', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 30, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 34, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 16, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 12, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 24, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 8.5, 'dose_mg': 170.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 255, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.0, 'dose_mg': 240.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 51, 'mg_per_kg': 5, 'max_mg': 260, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.15', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 20, 'max_mg': 1000, 'conc_mg': 40, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 36, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})],\n [('suspension per 5 mL label',\n   {'weight_kg': 17, 'mg_per_kg': 15, 'max_mg': 500, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 250.0}),\n  ('5 mL syringe graduations',\n   {'weight_kg': 13, 'mg_per_kg': 10, 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('10 mL syringe graduations',\n   {'weight_kg': 25, 'mg_per_kg': 7, 'max_mg': 500, 'conc_mg': 100, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 9.0, 'dose_mg': 180.0}),\n  ('rounding up would exceed maximum',\n   {'weight_kg': 40, 'mg_per_kg': 20, 'max_mg': 275, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 6.5, 'dose_mg': 260.0}),\n  ('rounding up lands exactly on maximum',\n   {'weight_kg': 55, 'mg_per_kg': 5, 'max_mg': 280, 'conc_mg': 200, 'conc_ml': 5, 'syringe_ml': 10},\n   {'status': 'OK', 'volume_ml': 7.0, 'dose_mg': 280.0}),\n  ('volume rounds down to capacity',\n   {'weight_kg': 10, 'mg_per_kg': '12.12', 'max_mg': 500, 'conc_mg': 120, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'OK', 'volume_ml': 5.0, 'dose_mg': 120.0}),\n  ('exact multiple of syringe capacity',\n   {'weight_kg': 20, 'mg_per_kg': 25, 'max_mg': 1000, 'conc_mg': 50, 'conc_ml': 1, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 2}),\n  ('split across syringes',\n   {'weight_kg': 37, 'mg_per_kg': 15, 'max_mg': 1000, 'conc_mg': 250, 'conc_ml': 5, 'syringe_ml': 5},\n   {'status': 'SPLIT', 'syringes': 3})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic toy software model with explicitly stipulated thresholds and formulas; it is not clinical guidance, not a validated medical calculator, and makes no claim of conformance to any published protocol. Numbered variants vary patient and order inputs. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-meddose-oral-liquid-volume-label-concentration-per-millilitre","generated_at":"2026-09-29T14:47:22.420746+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Liquid dosing converts mg to mL through a label strength and then to what a syringe can actually measure; each step has a distinct defect.","repair":"Divide the label milligrams by the label millilitres to get mg/mL.","root_cause":"The label strength per conc_ml is used as if it were per 1 mL.","sha256":"882b5da65b5097aa84d130bf6c5963eb9be962448eca5f427aa05269a4569437","title":"Oral liquid volume measured in a dosing syringe: label concentration per millilitre · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.654,"exit_code":1,"observations":[{"actual":{"status":"SPLIT","syringes":975},"check":"suspension per 5 mL label","expected":{"dose_mg":200.0,"status":"OK","volume_ml":4.0},"passed":false},{"actual":{"status":"SPLIT","syringes":432},"check":"5 mL syringe graduations","expected":{"dose_mg":91.2,"status":"OK","volume_ml":3.8},"passed":false},{"actual":{"status":"SPLIT","syringes":294},"check":"10 mL syringe graduations","expected":{"dose_mg":150.0,"status":"OK","volume_ml":7.5},"passed":false},{"actual":{"status":"SPLIT","syringes":780},"check":"rounding up would exceed maximum","expected":{"dose_mg":180.0,"status":"OK","volume_ml":4.5},"passed":false},{"actual":{"status":"SPLIT","syringes":780},"check":"rounding up lands exactly on maximum","expected":{"dose_mg":200.0,"status":"OK","volume_ml":5.0},"passed":false},{"actual":{"status":"SPLIT","syringes":581},"check":"volume rounds down to capacity","expected":{"dose_mg":120.0,"status":"OK","volume_ml":5.0},"passed":false},{"actual":{"status":"SPLIT","syringes":200},"check":"exact multiple of syringe capacity","expected":{"status":"SPLIT","syringes":2},"passed":false},{"actual":{"status":"SPLIT","syringes":4650},"check":"split across syringes","expected":{"status":"SPLIT","syringes":2},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"suspension per 5 mL label\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 975}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.0, \"dose_mg\": 200.0}, \"passed\": false}, {\"check\": \"5 mL syringe graduations\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 432}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 3.8, \"dose_mg\": 91.2}, \"passed\": false}, {\"check\": \"10 mL syringe graduations\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 294}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 7.5, \"dose_mg\": 150.0}, \"passed\": false}, {\"check\": \"rounding up would exceed maximum\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 780}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.5, \"dose_mg\": 180.0}, \"passed\": false}, {\"check\": \"rounding up lands exactly on maximum\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 780}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 200.0}, \"passed\": false}, {\"check\": \"volume rounds down to capacity\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 581}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 120.0}, \"passed\": false}, {\"check\": \"exact multiple of syringe capacity\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 200}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": false}, {\"check\": \"split across syringes\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 4650}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":47.072,"exit_code":1,"observations":[{"actual":{"dose_mg":250.0,"status":"OK","volume_ml":1.0},"check":"suspension per 5 mL label","expected":{"dose_mg":200.0,"status":"OK","volume_ml":4.0},"passed":false},{"actual":{"dose_mg":96.0,"status":"OK","volume_ml":0.8},"check":"5 mL syringe graduations","expected":{"dose_mg":91.2,"status":"OK","volume_ml":3.8},"passed":false},{"actual":{"dose_mg":150.0,"status":"OK","volume_ml":1.5},"check":"10 mL syringe graduations","expected":{"dose_mg":150.0,"status":"OK","volume_ml":7.5},"passed":false},{"actual":{"dose_mg":100.0,"status":"OK","volume_ml":0.5},"check":"rounding up would exceed maximum","expected":{"dose_mg":180.0,"status":"OK","volume_ml":4.5},"passed":false},{"actual":{"dose_mg":200.0,"status":"OK","volume_ml":1.0},"check":"rounding up lands exactly on maximum","expected":{"dose_mg":200.0,"status":"OK","volume_ml":5.0},"passed":false},{"actual":{"dose_mg":120.0,"status":"OK","volume_ml":1.0},"check":"volume rounds down to capacity","expected":{"dose_mg":120.0,"status":"OK","volume_ml":5.0},"passed":false},{"actual":{"status":"SPLIT","syringes":2},"check":"exact multiple of syringe capacity","expected":{"status":"SPLIT","syringes":2},"passed":true},{"actual":{"dose_mg":450.0,"status":"OK","volume_ml":1.8},"check":"split across syringes","expected":{"status":"SPLIT","syringes":2},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"suspension per 5 mL label\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 1.0, \"dose_mg\": 250.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.0, \"dose_mg\": 200.0}, \"passed\": false}, {\"check\": \"5 mL syringe graduations\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 0.8, \"dose_mg\": 96.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 3.8, \"dose_mg\": 91.2}, \"passed\": false}, {\"check\": \"10 mL syringe graduations\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 1.5, \"dose_mg\": 150.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 7.5, \"dose_mg\": 150.0}, \"passed\": false}, {\"check\": \"rounding up would exceed maximum\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 0.5, \"dose_mg\": 100.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.5, \"dose_mg\": 180.0}, \"passed\": false}, {\"check\": \"rounding up lands exactly on maximum\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 1.0, \"dose_mg\": 200.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 200.0}, \"passed\": false}, {\"check\": \"volume rounds down to capacity\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 1.0, \"dose_mg\": 120.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 120.0}, \"passed\": false}, {\"check\": \"exact multiple of syringe capacity\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": true}, {\"check\": \"split across syringes\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 1.8, \"dose_mg\": 450.0}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":47.923,"exit_code":0,"observations":[{"actual":{"dose_mg":200.0,"status":"OK","volume_ml":4.0},"check":"suspension per 5 mL label","expected":{"dose_mg":200.0,"status":"OK","volume_ml":4.0},"passed":true},{"actual":{"dose_mg":91.2,"status":"OK","volume_ml":3.8},"check":"5 mL syringe graduations","expected":{"dose_mg":91.2,"status":"OK","volume_ml":3.8},"passed":true},{"actual":{"dose_mg":150.0,"status":"OK","volume_ml":7.5},"check":"10 mL syringe graduations","expected":{"dose_mg":150.0,"status":"OK","volume_ml":7.5},"passed":true},{"actual":{"dose_mg":180.0,"status":"OK","volume_ml":4.5},"check":"rounding up would exceed maximum","expected":{"dose_mg":180.0,"status":"OK","volume_ml":4.5},"passed":true},{"actual":{"dose_mg":200.0,"status":"OK","volume_ml":5.0},"check":"rounding up lands exactly on maximum","expected":{"dose_mg":200.0,"status":"OK","volume_ml":5.0},"passed":true},{"actual":{"dose_mg":120.0,"status":"OK","volume_ml":5.0},"check":"volume rounds down to capacity","expected":{"dose_mg":120.0,"status":"OK","volume_ml":5.0},"passed":true},{"actual":{"status":"SPLIT","syringes":2},"check":"exact multiple of syringe capacity","expected":{"status":"SPLIT","syringes":2},"passed":true},{"actual":{"status":"SPLIT","syringes":2},"check":"split across syringes","expected":{"status":"SPLIT","syringes":2},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"suspension per 5 mL label\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 4.0, \"dose_mg\": 200.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.0, \"dose_mg\": 200.0}, \"passed\": true}, {\"check\": \"5 mL syringe graduations\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 3.8, \"dose_mg\": 91.2}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 3.8, \"dose_mg\": 91.2}, \"passed\": true}, {\"check\": \"10 mL syringe graduations\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 7.5, \"dose_mg\": 150.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 7.5, \"dose_mg\": 150.0}, \"passed\": true}, {\"check\": \"rounding up would exceed maximum\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 4.5, \"dose_mg\": 180.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 4.5, \"dose_mg\": 180.0}, \"passed\": true}, {\"check\": \"rounding up lands exactly on maximum\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 200.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 200.0}, \"passed\": true}, {\"check\": \"volume rounds down to capacity\", \"actual\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 120.0}, \"expected\": {\"status\": \"OK\", \"volume_ml\": 5.0, \"dose_mg\": 120.0}, \"passed\": true}, {\"check\": \"exact multiple of syringe capacity\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": true}, {\"check\": \"split across syringes\", \"actual\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"expected\": {\"status\": \"SPLIT\", \"syringes\": 2}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}