{"abstract":"A 601 mg dose from 500 mg vials is prepared from one vial.","category":"Medication dosing calculations","checks":7,"contract":"Input {dose_mg, vial_mg, diluent_ml, displacement_ml, single_use}. Concentration = vial_mg/(diluent_ml + displacement_ml). Draw volume = dose/concentration, rounded half-up to 0.01 mL when the volume is <= 1 mL, else to 0.1 mL. Vials = ceil(dose/vial_mg). Waste = vials*vial_mg - dose for single-use vials, else 0. Return {conc_mg_ml (4 dp), draw_ml, vials, waste_mg}.","evaluation_group":"w2-meddose-reconstitution","failed_approach":"Adding one to the floor over-counts when the dose is an exact multiple of the vial.","family":"w2-meddose-reconstitution-vial-count-ceiling","id":"FA-64066","implementations":{"attempt":{"sha256":"270318ac34bd58127b85597439e6a9d75973c4d5d821f9b91aec232f26f97609","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    conc = Fraction(x['vial_mg']) / (Fraction(str(x['diluent_ml'])) + Fraction(str(x['displacement_ml'])))\n    vol = Fraction(str(x['dose_mg'])) / conc\n    q = 100 if vol <= 1 else 10\n    draw = Fraction(math.floor(vol * q + Fraction(1, 2)), q)\n    vials = Fraction(str(x['dose_mg'])) // x['vial_mg'] + 1\n    waste = vials * x['vial_mg'] - Fraction(str(x['dose_mg'])) if x['single_use'] else 0\n    return {'conc_mg_ml': round(float(conc), 4), 'draw_ml': float(draw), 'vials': int(vials), 'waste_mg': float(waste)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('powder displacement dilutes vial',\n   {'dose_mg': 450, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 9.0, 'vials': 1, 'waste_mg': 50.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 37, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.74, 'vials': 1, 'waste_mg': 63.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 45, 'vial_mg': 1000, 'diluent_ml': 49, 'displacement_ml': 1, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.3, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 62, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.2, 'vials': 1, 'waste_mg': 38.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 250, 'vial_mg': 250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 601, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 399.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 31, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 10.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 41, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.82, 'vials': 1, 'waste_mg': 59.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 49, 'vial_mg': 1000, 'diluent_ml': 48, 'displacement_ml': 2, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.5, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 71, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.4, 'vials': 1, 'waste_mg': 29.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 100.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 602, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 398.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 32, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.2, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 550, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 11.0, 'vials': 2, 'waste_mg': 450.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 29, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.58, 'vials': 1, 'waste_mg': 71.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 53, 'vial_mg': 1000, 'diluent_ml': 47, 'displacement_ml': 3, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.7, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 81, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.6, 'vials': 1, 'waste_mg': 19.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 750, 'vial_mg': 750, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 150.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 603, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 397.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.3, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 600, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 400.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.66, 'vials': 1, 'waste_mg': 67.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 57, 'vial_mg': 1000, 'diluent_ml': 46, 'displacement_ml': 4, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.9, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 92, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.8, 'vials': 1, 'waste_mg': 8.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1000, 'vial_mg': 1000, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 200.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 604, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 396.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 34, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.4, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 650, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 13.0, 'vials': 2, 'waste_mg': 350.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 47, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.94, 'vials': 1, 'waste_mg': 53.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 61, 'vial_mg': 1000, 'diluent_ml': 45, 'displacement_ml': 5, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 102, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 2.0, 'vials': 2, 'waste_mg': 98.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1250, 'vial_mg': 1250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 250.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 605, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 395.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 35, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.5, 'vials': 1, 'waste_mg': 0.0})]]\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":"44f69c25ce560697d45a9cb55352d53616efb7fd76cab12b54a54016a0e1ab46","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    conc = Fraction(x['vial_mg']) / (Fraction(str(x['diluent_ml'])) + Fraction(str(x['displacement_ml'])))\n    vol = Fraction(str(x['dose_mg'])) / conc\n    q = 100 if vol <= 1 else 10\n    draw = Fraction(math.floor(vol * q + Fraction(1, 2)), q)\n    vials = Fraction(str(x['dose_mg'])) // x['vial_mg']\n    waste = vials * x['vial_mg'] - Fraction(str(x['dose_mg'])) if x['single_use'] else 0\n    return {'conc_mg_ml': round(float(conc), 4), 'draw_ml': float(draw), 'vials': int(vials), 'waste_mg': float(waste)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('powder displacement dilutes vial',\n   {'dose_mg': 450, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 9.0, 'vials': 1, 'waste_mg': 50.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 37, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.74, 'vials': 1, 'waste_mg': 63.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 45, 'vial_mg': 1000, 'diluent_ml': 49, 'displacement_ml': 1, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.3, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 62, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.2, 'vials': 1, 'waste_mg': 38.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 250, 'vial_mg': 250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 601, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 399.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 31, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 10.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 41, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.82, 'vials': 1, 'waste_mg': 59.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 49, 'vial_mg': 1000, 'diluent_ml': 48, 'displacement_ml': 2, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.5, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 71, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.4, 'vials': 1, 'waste_mg': 29.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 100.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 602, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 398.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 32, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.2, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 550, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 11.0, 'vials': 2, 'waste_mg': 450.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 29, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.58, 'vials': 1, 'waste_mg': 71.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 53, 'vial_mg': 1000, 'diluent_ml': 47, 'displacement_ml': 3, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.7, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 81, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.6, 'vials': 1, 'waste_mg': 19.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 750, 'vial_mg': 750, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 150.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 603, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 397.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.3, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 600, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 400.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.66, 'vials': 1, 'waste_mg': 67.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 57, 'vial_mg': 1000, 'diluent_ml': 46, 'displacement_ml': 4, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.9, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 92, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.8, 'vials': 1, 'waste_mg': 8.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1000, 'vial_mg': 1000, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 200.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 604, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 396.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 34, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.4, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 650, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 13.0, 'vials': 2, 'waste_mg': 350.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 47, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.94, 'vials': 1, 'waste_mg': 53.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 61, 'vial_mg': 1000, 'diluent_ml': 45, 'displacement_ml': 5, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 102, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 2.0, 'vials': 2, 'waste_mg': 98.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1250, 'vial_mg': 1250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 250.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 605, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 395.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 35, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.5, 'vials': 1, 'waste_mg': 0.0})]]\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":"5d821a66b7acb1f569a56d8114145c7038d61ce02fad0ed5ebae8148b6851365","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    conc = Fraction(x['vial_mg']) / (Fraction(str(x['diluent_ml'])) + Fraction(str(x['displacement_ml'])))\n    vol = Fraction(str(x['dose_mg'])) / conc\n    q = 100 if vol <= 1 else 10\n    draw = Fraction(math.floor(vol * q + Fraction(1, 2)), q)\n    vials = -(-Fraction(str(x['dose_mg'])) // x['vial_mg'])\n    waste = vials * x['vial_mg'] - Fraction(str(x['dose_mg'])) if x['single_use'] else 0\n    return {'conc_mg_ml': round(float(conc), 4), 'draw_ml': float(draw), 'vials': int(vials), 'waste_mg': float(waste)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('powder displacement dilutes vial',\n   {'dose_mg': 450, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 9.0, 'vials': 1, 'waste_mg': 50.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 37, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.74, 'vials': 1, 'waste_mg': 63.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 45, 'vial_mg': 1000, 'diluent_ml': 49, 'displacement_ml': 1, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.3, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 62, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.2, 'vials': 1, 'waste_mg': 38.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 250, 'vial_mg': 250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 601, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 399.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 31, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 10.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 41, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.82, 'vials': 1, 'waste_mg': 59.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 49, 'vial_mg': 1000, 'diluent_ml': 48, 'displacement_ml': 2, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.5, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 71, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.4, 'vials': 1, 'waste_mg': 29.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 500, 'vial_mg': 500, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 100.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 602, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 398.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 32, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.2, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 550, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 11.0, 'vials': 2, 'waste_mg': 450.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 29, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.58, 'vials': 1, 'waste_mg': 71.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 53, 'vial_mg': 1000, 'diluent_ml': 47, 'displacement_ml': 3, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.7, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 81, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.6, 'vials': 1, 'waste_mg': 19.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 750, 'vial_mg': 750, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 150.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 603, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 397.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.3, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 600, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.0, 'vials': 2, 'waste_mg': 400.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 33, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.66, 'vials': 1, 'waste_mg': 67.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 57, 'vial_mg': 1000, 'diluent_ml': 46, 'displacement_ml': 4, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 2.9, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 92, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 1.8, 'vials': 1, 'waste_mg': 8.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1000, 'vial_mg': 1000, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 200.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 604, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 396.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 34, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.4, 'vials': 1, 'waste_mg': 0.0})],\n [('powder displacement dilutes vial',\n   {'dose_mg': 650, 'vial_mg': 500, 'diluent_ml': '9.6', 'displacement_ml': '0.4', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 13.0, 'vials': 2, 'waste_mg': 350.0}),\n  ('sub-millilitre draw in hundredths',\n   {'dose_mg': 47, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 0.94, 'vials': 1, 'waste_mg': 53.0}),\n  ('draw volume half step rounds up',\n   {'dose_mg': 61, 'vial_mg': 1000, 'diluent_ml': 45, 'displacement_ml': 5, 'single_use': False},\n   {'conc_mg_ml': 20.0, 'draw_ml': 3.1, 'vials': 1, 'waste_mg': 0.0}),\n  ('draw volume below half step rounds down',\n   {'dose_mg': 102, 'vial_mg': 100, 'diluent_ml': '1.8', 'displacement_ml': '0.2', 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 2.0, 'vials': 2, 'waste_mg': 98.0}),\n  ('dose exactly one vial',\n   {'dose_mg': 1250, 'vial_mg': 1250, 'diluent_ml': 5, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 250.0, 'draw_ml': 5.0, 'vials': 1, 'waste_mg': 0.0}),\n  ('dose spanning two vials',\n   {'dose_mg': 605, 'vial_mg': 500, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': True},\n   {'conc_mg_ml': 50.0, 'draw_ml': 12.1, 'vials': 2, 'waste_mg': 395.0}),\n  ('multi-use vial has no waste',\n   {'dose_mg': 35, 'vial_mg': 100, 'diluent_ml': 10, 'displacement_ml': 0, 'single_use': False},\n   {'conc_mg_ml': 10.0, 'draw_ml': 3.5, 'vials': 1, 'waste_mg': 0.0})]]\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-reconstitution-vial-count-ceiling","generated_at":"2026-09-29T14:47:20.666741+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Reconstitution calculators must account for powder displacement and syringe graduations; vial counts and waste accounting are separate rules.","repair":"Use ceiling division of dose by vial content.","root_cause":"Vials needed uses floor division instead of ceiling.","sha256":"79e2642705bbf4fcde7f1d5ce9f81f97066982e85b68764a4fb780fe8d8ea4df","title":"Vial reconstitution, draw volume and waste: vial count ceiling · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.467,"exit_code":1,"observations":[{"actual":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":1,"waste_mg":50.0},"check":"powder displacement dilutes vial","expected":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":1,"waste_mg":50.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":1,"waste_mg":63.0},"check":"sub-millilitre draw in hundredths","expected":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":1,"waste_mg":63.0},"passed":true},{"actual":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":1,"waste_mg":0.0},"check":"draw volume half step rounds up","expected":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":1,"waste_mg":0.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":1,"waste_mg":38.0},"check":"draw volume below half step rounds down","expected":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":1,"waste_mg":38.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":2,"waste_mg":250.0},"check":"dose exactly one vial","expected":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":1,"waste_mg":0.0},"passed":false},{"actual":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":2,"waste_mg":399.0},"check":"dose spanning two vials","expected":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":2,"waste_mg":399.0},"passed":true},{"actual":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":1,"waste_mg":0.0},"check":"multi-use vial has no waste","expected":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":1,"waste_mg":0.0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"powder displacement dilutes vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 1, \"waste_mg\": 50.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 1, \"waste_mg\": 50.0}, \"passed\": true}, {\"check\": \"sub-millilitre draw in hundredths\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 1, \"waste_mg\": 63.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 1, \"waste_mg\": 63.0}, \"passed\": true}, {\"check\": \"draw volume half step rounds up\", \"actual\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}, {\"check\": \"draw volume below half step rounds down\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 1, \"waste_mg\": 38.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 1, \"waste_mg\": 38.0}, \"passed\": true}, {\"check\": \"dose exactly one vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 2, \"waste_mg\": 250.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": false}, {\"check\": \"dose spanning two vials\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 2, \"waste_mg\": 399.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 2, \"waste_mg\": 399.0}, \"passed\": true}, {\"check\": \"multi-use vial has no waste\", \"actual\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.468,"exit_code":1,"observations":[{"actual":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":0,"waste_mg":-450.0},"check":"powder displacement dilutes vial","expected":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":1,"waste_mg":50.0},"passed":false},{"actual":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":0,"waste_mg":-37.0},"check":"sub-millilitre draw in hundredths","expected":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":1,"waste_mg":63.0},"passed":false},{"actual":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":0,"waste_mg":0.0},"check":"draw volume half step rounds up","expected":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":1,"waste_mg":0.0},"passed":false},{"actual":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":0,"waste_mg":-62.0},"check":"draw volume below half step rounds down","expected":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":1,"waste_mg":38.0},"passed":false},{"actual":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":1,"waste_mg":0.0},"check":"dose exactly one vial","expected":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":1,"waste_mg":0.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":1,"waste_mg":-101.0},"check":"dose spanning two vials","expected":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":2,"waste_mg":399.0},"passed":false},{"actual":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":0,"waste_mg":0.0},"check":"multi-use vial has no waste","expected":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":1,"waste_mg":0.0},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"powder displacement dilutes vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 0, \"waste_mg\": -450.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 1, \"waste_mg\": 50.0}, \"passed\": false}, {\"check\": \"sub-millilitre draw in hundredths\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 0, \"waste_mg\": -37.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 1, \"waste_mg\": 63.0}, \"passed\": false}, {\"check\": \"draw volume half step rounds up\", \"actual\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 0, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": false}, {\"check\": \"draw volume below half step rounds down\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 0, \"waste_mg\": -62.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 1, \"waste_mg\": 38.0}, \"passed\": false}, {\"check\": \"dose exactly one vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}, {\"check\": \"dose spanning two vials\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 1, \"waste_mg\": -101.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 2, \"waste_mg\": 399.0}, \"passed\": false}, {\"check\": \"multi-use vial has no waste\", \"actual\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 0, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.401,"exit_code":0,"observations":[{"actual":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":1,"waste_mg":50.0},"check":"powder displacement dilutes vial","expected":{"conc_mg_ml":50.0,"draw_ml":9.0,"vials":1,"waste_mg":50.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":1,"waste_mg":63.0},"check":"sub-millilitre draw in hundredths","expected":{"conc_mg_ml":50.0,"draw_ml":0.74,"vials":1,"waste_mg":63.0},"passed":true},{"actual":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":1,"waste_mg":0.0},"check":"draw volume half step rounds up","expected":{"conc_mg_ml":20.0,"draw_ml":2.3,"vials":1,"waste_mg":0.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":1,"waste_mg":38.0},"check":"draw volume below half step rounds down","expected":{"conc_mg_ml":50.0,"draw_ml":1.2,"vials":1,"waste_mg":38.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":1,"waste_mg":0.0},"check":"dose exactly one vial","expected":{"conc_mg_ml":50.0,"draw_ml":5.0,"vials":1,"waste_mg":0.0},"passed":true},{"actual":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":2,"waste_mg":399.0},"check":"dose spanning two vials","expected":{"conc_mg_ml":50.0,"draw_ml":12.0,"vials":2,"waste_mg":399.0},"passed":true},{"actual":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":1,"waste_mg":0.0},"check":"multi-use vial has no waste","expected":{"conc_mg_ml":10.0,"draw_ml":3.1,"vials":1,"waste_mg":0.0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"powder displacement dilutes vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 1, \"waste_mg\": 50.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 9.0, \"vials\": 1, \"waste_mg\": 50.0}, \"passed\": true}, {\"check\": \"sub-millilitre draw in hundredths\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 1, \"waste_mg\": 63.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 0.74, \"vials\": 1, \"waste_mg\": 63.0}, \"passed\": true}, {\"check\": \"draw volume half step rounds up\", \"actual\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 20.0, \"draw_ml\": 2.3, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}, {\"check\": \"draw volume below half step rounds down\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 1, \"waste_mg\": 38.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 1.2, \"vials\": 1, \"waste_mg\": 38.0}, \"passed\": true}, {\"check\": \"dose exactly one vial\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 5.0, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}, {\"check\": \"dose spanning two vials\", \"actual\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 2, \"waste_mg\": 399.0}, \"expected\": {\"conc_mg_ml\": 50.0, \"draw_ml\": 12.0, \"vials\": 2, \"waste_mg\": 399.0}, \"passed\": true}, {\"check\": \"multi-use vial has no waste\", \"actual\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 1, \"waste_mg\": 0.0}, \"expected\": {\"conc_mg_ml\": 10.0, \"draw_ml\": 3.1, \"vials\": 1, \"waste_mg\": 0.0}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}