{
  "$schema": "https://spacemedicinefoundation.org/robotic-medicine/protocols/schema/protocol.schema.json",
  "schema_version": "0.3",
  "version": "0.3",
  "status": "draft",
  "conceptual": true,
  "not_for_clinical_use": true,
  "max_autonomy": 2,
  "missions": [
    "leo",
    "commercial",
    "moon",
    "mars"
  ],
  "updated": "2026-10-21",
  "review": {
    "state": "reviewed-ai-assisted",
    "requested": "2026-10-21",
    "reviewed": "2026-10-21",
    "human_clinician_review": false,
    "text": "AI-assisted clinical and source review by the Medical Research Assistant, Oct 21, 2026 (batch 11 review: 10 required corrections, R1 to R10; 9 optional suggestions not applied in this version); all required corrections that apply to this protocol are applied in this version (see Corrections). No named human clinician has reviewed it. Not for clinical use."
  },
  "fixed_rules": {
    "flight_surgeon_is_medical_authority": true,
    "cmo_acts_under_delegated_care": true,
    "human_starts_and_restarts_robot": true,
    "robot_never_diagnoses": true,
    "no_drug_or_fluid_advice_by_robot": true,
    "safe_state_on_fault_or_no_response": true,
    "lost_link_pause_then_cmo_decides": true
  },
  "robot_lockouts": {
    "diagnosis": true,
    "drug_or_fluid_advice": true,
    "starting_stopping_or_adjusting_oxygen_or_any_medicine": true,
    "self_start_or_self_restart": true,
    "changing_own_protocol_thresholds_or_limits": true,
    "handing_over_a_mismatched_item_as_verified": true
  },
  "id": "RMP-PREV-004",
  "slug": "rmp-prev-004",
  "title": "Blood and urine sample handling and labelling: checked kit fetch, labels printed at the crewmember's side, label match, sealed transport and cold-stowage log (the robot never handles needles)",
  "category": "prev",
  "tier": 2,
  "rung_note": "Max rung 2 for a checked fetch of the sample kit, printing labels after the crewmember's identity is confirmed, scanning labels against the sample order, and carrying a sealed sample bag to cold stowage. The CMO draws blood and labels every container; the robot never handles needles, sharps or an open container and never touches anyone.",
  "result_language": {
    "use": [
      "LABELS MATCH THE ORDER (crewmember, two identifiers, sample type, collection time). Not a check of the sample.",
      "MISMATCH",
      "CANNOT VERIFY",
      "label not obtained",
      "temperature as displayed",
      "sent to flight surgeon"
    ],
    "never": [
      "normal",
      "no problem found",
      "all clear",
      "negative",
      "any diagnosis or cause",
      "good sample",
      "enough blood",
      "normal",
      "abnormal",
      "clean sample",
      "infected",
      "results",
      "looks fine",
      "relabelled",
      "safe",
      "mild",
      "minor"
    ]
  },
  "scope": {
    "summary": "At the times the flight surgeon schedules a blood or urine sample, the robot prompts the crewmember; the session starts only when the crewmember or the CMO accepts. The robot brings the sample kit by a checked kit fetch. Only after the crewmember's identity is confirmed, at the crewmember's side, it prints labels with two identifiers; the CMO draws the blood or receives the urine container and labels each container in the crewmember's presence. The robot scans every label against the sample order: a mismatch means the sample is held in its own sealed bag in cold stowage, kept apart from other samples, and flagged. The CMO packs the containers in a leak-proof sealed bag; the robot carries the sealed bag to cold stowage and logs the time and the stowage temperature as displayed.",
    "why": "Wrong-patient errors happen at every stage of care: hospitals must use at least two patient identifiers when collecting blood and other specimens (a room or location is not an identifier) and label specimen containers in the presence of the patient (Joint Commission NPSG.01.01.01, 2025). WHO asks for a label check (names, file number, date of birth, date and time), a recheck of labels before dispatch, and packing in a leak-proof bag with an outside pocket for the request form (WHO 2010). On board, the robot prints labels only at the crewmember's side after identity is confirmed and checks them against the order, so a label is never printed ahead for a container out of the crewmember's sight (design judgment). The robot never relabels a sample, because a relabelled sample can hide a wrong-patient error (design judgment).",
    "covers": [
      "Scheduled blood and urine samples on the flight surgeon's schedule: labelling, label match, sealed transport and cold-stowage log",
      "Spill clean-up: RMP-INF-002; drawing blood: the CMO under the onboard checklist",
      "Urinary symptoms: RMP-RENAL-003"
    ],
    "locked_out": [
      "Diagnosis or naming a cause",
      "Any medicine, fluid or oxygen advice; starting, stopping or adjusting oxygen",
      "Touching the crewmember",
      "Handing over any medicine outside RMP-PHARM-001, or after a MISMATCH or CANNOT VERIFY (the item stays quarantined; only the CMO can ask for it, through the RMP-PHARM-001 logged two-step override)",
      "Handling a needle, a sharps container or an open sample container, or drawing blood",
      "Printing a label before the crewmember's identity is confirmed, or away from the crewmember",
      "Relabelling, discarding or using a sample with a label MISMATCH, or storing it anywhere except in its own sealed HELD bag in the cold stowage the order names",
      "Saying anything about a sample or a result",
      "Showing a label or sample record on a shared display"
    ],
    "related": [
      "RMP-INF-002",
      "RMP-RENAL-003",
      "RMP-PREV-002",
      "RMP-PREV-001",
      "RMP-PHARM-001"
    ]
  },
  "roles": {
    "medical_authority": "Flight surgeon (ground). Holds medical authority for every run.",
    "onboard_lead": "Crew medical officer (CMO), acting under delegated care; uses the pre-approved onboard checklist when there is no link.",
    "others": [
      "Second trained CMO: receives every alert and takes over if the CMO is the patient",
      "Vehicle commander: leads any cabin emergency procedure",
      "Other crew: help as the CMO or commander directs"
    ],
    "robot_may": [
      "Prompt the crewmember at the scheduled time",
      "Bring the sample kit by a checked kit fetch",
      "Scan the crew ID and print labels at the crewmember's side after identity is confirmed",
      "Scan labels against the sample order",
      "Carry a sealed sample bag to cold stowage and log the time and temperature as displayed"
    ],
    "robot_may_not": [
      "Handle needles, sharps or an open container, or touch anyone",
      "Print a label ahead or away from the crewmember",
      "Relabel, discard or use a mismatched sample, or store it anywhere but its own sealed HELD bag in the cold stowage the order names",
      "Say anything about a sample or result"
    ],
    "commercial": "On commercial flights, 'flight surgeon' and 'CMO' mean the operator's designated medical authority and trained onboard responder. If no trained responder is aboard, this protocol is not used. (NASA-STD-3001 requires two CMOs per vehicle for NASA programs [V1 3006]; FAA rules set no medical standards for spaceflight participants.)"
  },
  "preconditions": [
    {
      "id": "PRE-1",
      "text": "The sample session starts only when the crewmember (or the CMO) accepts the on-screen prompt; a loaded schedule alone never starts it. An unaccepted prompt is logged \"not accepted\" and the CMO is told. A crewmember or the CMO can also start it by command.",
      "check": "human_start == true",
      "refs": [
        "V2 10174"
      ]
    },
    {
      "id": "PRE-2",
      "text": "Robot self-test passed; kit stowage locations known.",
      "refs": [
        "V2 10161",
        "V2 7059"
      ]
    },
    {
      "id": "PRE-3",
      "text": "Robot and supplies restrained when not moving.",
      "refs": [
        "V2 7046"
      ]
    },
    {
      "id": "PRE-4",
      "text": "Link status known. The crew never wait for the robot before acting.",
      "check": "link_state in [live, delayed, down]"
    }
  ],
  "consent": {
    "standard": "The crewmember agrees to the sample, and to the sample record (identifiers, times, temperatures) being sent to the flight surgeon and the laboratory lead.",
    "emergency": "If the crewmember cannot agree, this is not a scheduled sample: the robot sends an URGENT alert and a crewmember checks in person (X7).",
    "withdrawal": "The crewmember can stop at any time; an unlabelled container is never labelled later."
  },
  "inputs": [
    {
      "id": "IN-1",
      "name": "The flight surgeon's sample order (crewmember, sample types, containers, collection window and stowage temperature range)",
      "source": "Flight surgeon",
      "required": true,
      "if_missing": "The robot shows \"order not loaded\" and prints no label."
    },
    {
      "id": "IN-2",
      "name": "The crewmember's identity: crew ID scanned and the name stated by the crewmember (two identifiers); never a location",
      "source": "Crewmember / crew ID",
      "required": true,
      "if_missing": "No label is printed; the CMO is told."
    },
    {
      "id": "IN-3",
      "name": "Each container label as scanned, and the collection time as stated by the CMO",
      "source": "Robot scanner / CMO",
      "required": true,
      "if_missing": "Log \"label not obtained\"; the sample is held (kept cold, in its own sealed bag, apart from other samples) and flagged."
    },
    {
      "id": "IN-4",
      "name": "Cold-stowage temperature as displayed",
      "source": "Stowage unit display",
      "required": false,
      "if_missing": "Log \"temperature not obtained\" and flag to the laboratory lead."
    },
    {
      "id": "IN-5",
      "name": "Link status and delay",
      "source": "Communications system",
      "required": true,
      "if_missing": "Treat as link down; the record is queued."
    }
  ],
  "steps": [
    {
      "id": "S1",
      "actor": "robot",
      "rung": 2,
      "action": "At the scheduled time, show the crewmember an on-screen prompt that a sample session is due, and tell the flight surgeon and the CMO (URGENT if any red flag is stated). The session starts only when the crewmember or the CMO accepts the prompt; an unaccepted prompt is logged \"not accepted\" and the CMO is told. Then show the symptom prompt (feeling unwell, or having fainted before during a blood draw) and log answers word for word. Every URGENT alert goes to the CMO and the flight surgeon at the same time (queued for the flight surgeon if the link is down). If the CMO is the patient, is busy treating, or does not answer, the alert goes to the second trained CMO, or the crewmember named before flight [V1 3006]. An URGENT alert that is not acknowledged within <set by validation> seconds is repeated and sent to the next named crewmember.",
      "success": "Prompt accepted, or \"not accepted\" logged.",
      "refs": [
        "V2 10174",
        "V1 3003",
        "V1 3006"
      ]
    },
    {
      "id": "S2",
      "actor": "robot",
      "rung": 2,
      "action": "On the CMO's command, run a checked kit fetch of the sample kit (sealed collection containers, the labels roll and leak-proof sample bags; sharps stay in the CMO's kit): check the kit ID and seal before hand-over, and quarantine a kit whose ID or seal does not match (no hand-over; the CMO is told). Any medicine goes only through RMP-PHARM-001. If an URGENT red flag has fired or a human states an emergency, bring it instead as an emergency fetch: This is an emergency fetch on a human command (CMO): no barcode check runs before hand-over and nothing waits for one. The robot reads the kit's own label and seal status only if that adds no delay, says \"EMERGENCY FETCH – NOT VERIFIED (CMO command)\", and \"seal not intact\" if so, and hands the kit over anyway. The fetch is logged as an override: time, who asked, the reason as stated, kit ID and seal status. It never says \"verified\".",
      "success": "Kit within reach after a matched ID and seal, or quarantined, or emergency fetch logged.",
      "limit": "<set by validation>",
      "refs": [
        "V2 7046",
        "V2 7059"
      ]
    },
    {
      "id": "S3",
      "actor": "robot",
      "rung": 2,
      "action": "At the crewmember's side, scan the crewmember's crew ID and ask them to state their name; only when both match the sample order, print one label per container with two identifiers (name and crew ID), the sample type and the date. The robot never prints a label before identity is confirmed or away from the crewmember.",
      "success": "Labels printed after identity confirmed, or none printed.",
      "refs": [
        "V1 7001"
      ]
    },
    {
      "id": "S4",
      "actor": "crew",
      "action": "The CMO performs hand hygiene and wears gloves, then the CMO draws the blood (or the crewmember collects the urine) under the onboard checklist and labels each container in the crewmember's presence, adding the collection time; the CMO disposes of needles in the sharps container. After the draw the CMO removes the gloves and performs hand hygiene. A spill is cleaned up under RMP-INF-002.",
      "success": "Containers filled and labelled, or not collected.",
      "refs": [
        "V1 3003"
      ]
    },
    {
      "id": "S5",
      "actor": "robot",
      "rung": 2,
      "action": "Scan each container label as the CMO holds it up and compare it with the sample order and the confirmed identity; show \"LABELS MATCH THE ORDER (crewmember, two identifiers, sample type, collection time). Not a check of the sample.\" only when every field matches, otherwise MISMATCH or CANNOT VERIFY with the fields named. The robot never touches an open container.",
      "success": "Result shown and logged for each container.",
      "refs": [
        "V1 7001"
      ]
    },
    {
      "id": "S6",
      "actor": "crew",
      "action": "The CMO packs the labelled containers in a rack or padded holder inside a leak-proof sample bag, with the request form in the outside pocket, rechecks the labels against the form, and then seals the bag.",
      "success": "Sample bag sealed.",
      "refs": [
        "V1 3003"
      ]
    },
    {
      "id": "S7",
      "actor": "robot",
      "rung": 2,
      "action": "Carry only a sample bag the CMO states is sealed and that is not a HELD bag (the crew carry a HELD bag by hand, D3), held upright and away from every route, to the cold stowage the order names; the crew place it in stowage. If a leak is seen or stated during the carry, stop at once and hold the bag still in the gripper (never release it into the cabin air), apply RF4, and the CMO takes the bag. Log the stowage time and the stowage temperature as displayed, with the clock time; never a judgment of the temperature. After every carry, the crew clean the gripper and the robot's carry surfaces under RMP-INF-002.",
      "success": "Sealed bag delivered and logged, or \"temperature not obtained\".",
      "limit": "<set by validation>",
      "refs": [
        "V2 7046"
      ]
    },
    {
      "id": "S8",
      "actor": "robot",
      "rung": 2,
      "action": "After any URGENT alert: After an URGENT alert the robot does not leave on its own: it stays at its rest position in the module, with its screen and voice link available, until a human has taken over or tells it to go. It never follows, blocks or touches anyone. It keeps time-stamping what humans say they did, and repeats the alert if it is not acknowledged.",
      "success": "Robot at rest in the module until a human releases it; alert acknowledged or escalated.",
      "refs": [
        "V2 10173",
        "V1 3006"
      ]
    },
    {
      "id": "S9",
      "actor": "ground",
      "action": "The flight surgeon and the laboratory lead (or the CMO under the onboard checklist when there is no link) review the sample record and decide on any held sample, a repeat sample or a stowage excursion.",
      "success": "Decision logged.",
      "refs": [
        "V1 3003"
      ]
    },
    {
      "id": "S10",
      "actor": "robot",
      "rung": 2,
      "action": "When the CMO says the event is over, run RMP-PHARM-001 reconciliation on each kit fetched: record the items the CMO or crew state were used, the remaining contents against the kit list, seal status and expiry, labelled \"inventory reconciliation after emergency use – not a check before use\". Flag the override to the flight surgeon and the pharmacy lead, and show each kit as \"opened – not restocked\" until a human restocks and reseals it.",
      "success": "Kit reconciled or shown as \"opened – not restocked\".",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S11",
      "actor": "robot",
      "rung": 2,
      "action": "Send the flight surgeon and the laboratory lead one package: identifiers checked, labels and results, collection and stowage times, temperatures as displayed, alerts and decisions.",
      "success": "Package delivered or queued.",
      "refs": [
        "V1 6003",
        "V1 7003"
      ]
    }
  ],
  "decisions": [
    {
      "id": "D1",
      "after": "S2",
      "decided_by": "robot",
      "question": "Which kit fetch was it, and what did the checked kit fetch show?",
      "branches": [
        {
          "if": "EMERGENCY FETCH (an URGENT red flag had fired, or a crewmember or the CMO stated an emergency)",
          "then": "Hand-over already done as an emergency fetch, logged as an override; reconciled afterwards (not a check before use)."
        },
        {
          "if": "KIT ID AND SEAL MATCH",
          "then": "Hand the kit over closed; log \"KIT ID AND SEAL MATCH. Not a check of the contents.\" and the clock time."
        },
        {
          "if": "MISMATCH, seal not intact or CANNOT VERIFY",
          "then": "Shown with the reason. No hand-over under this protocol: the kit stays sealed in quarantine (the RMP-PHARM-001 default), and the robot never hands it over unprompted or to anyone but the CMO. The robot does not offer or suggest an override. Only if the CMO explicitly makes the two-step override request inside RMP-PHARM-001 can the kit go to the CMO, logged there as an override with the reason, and flagged to the flight surgeon. If the need becomes an emergency, a crewmember or the CMO states it and the emergency fetch applies.",
          "handoff": "none"
        }
      ]
    },
    {
      "id": "D2",
      "after": "S3",
      "decided_by": "robot",
      "question": "Did the scanned crew ID and the name the crewmember stated both match the sample order?",
      "branches": [
        {
          "if": "Yes",
          "then": "Print the labels at the crewmember's side and continue."
        },
        {
          "if": "No, or cannot verify",
          "then": "No label is printed; show MISMATCH or CANNOT VERIFY with the reason and tell the CMO. No hand-over of labels; the CMO decides whether to stop the session.",
          "handoff": "none"
        }
      ]
    },
    {
      "id": "D3",
      "after": "S5",
      "decided_by": "robot",
      "question": "Did every container label match the sample order and the confirmed identity?",
      "branches": [
        {
          "if": "Yes",
          "then": "Continue to packing."
        },
        {
          "if": "MISMATCH or CANNOT VERIFY",
          "then": "The sample is held: the CMO places it in a separate sealed bag marked \"HELD – LABEL MISMATCH\", and the robot flags it at once to the flight surgeon and the laboratory lead, who decide. The held sample goes into the cold stowage the order names, in its separate sealed \"HELD – LABEL MISMATCH\" bag, kept apart from other samples; it is never relabelled, discarded or used until the flight surgeon and the laboratory lead decide. The crew carry the HELD bag to cold stowage by hand; the robot does not carry it. The only exception is the stop-and-hold leak rule (S7, RF4): if a bag in the robot's gripper is found to be leaking, the robot stops and holds it still until the CMO takes it. No hand-over: the robot never relabels or discards a held sample.",
          "handoff": "none"
        }
      ]
    },
    {
      "id": "D4",
      "after": "S1",
      "decided_by": "robot",
      "question": "Did the crewmember answer the symptom prompt, or say they want to skip it?",
      "branches": [
        {
          "if": "Yes",
          "then": "Continue."
        },
        {
          "if": "Declined explicitly (the crewmember says no to a question)",
          "then": "Log \"declined\" for that question only; the alert already sent stands."
        },
        {
          "if": "No response, or the answer does not make sense",
          "then": "URGENT: log \"no response\" (never \"declined\"); the CMO, or the second trained CMO if the CMO is the patient, checks the crewmember in person at once."
        }
      ]
    },
    {
      "id": "D5",
      "after": "S7",
      "decided_by": "robot",
      "question": "Checked after every answer and at any point in the run (even mid-question or mid-step): does any answer, reading or observation meet a red flag?",
      "branches": [
        {
          "if": "Yes",
          "then": "Stop the current question or step at once and apply the action listed for each matching red flag (URGENT alert, flag, or stop), with the answer or reading itself, never a cause. Every URGENT alert goes to the CMO and the flight surgeon at the same time (queued for the flight surgeon if the link is down). If the CMO is the patient, is busy treating, or does not answer, the alert goes to the second trained CMO, or the crewmember named before flight [V1 3006]. An URGENT alert that is not acknowledged within <set by validation> seconds is repeated and sent to the next named crewmember."
        },
        {
          "if": "No",
          "then": "Continue."
        }
      ]
    },
    {
      "id": "D6",
      "after": "S9",
      "decided_by": "ground",
      "question": "What happens to any held sample, repeat sample or stowage excursion?",
      "branches": [
        {
          "if": "Link live",
          "then": "Flight surgeon decides; robot logs."
        },
        {
          "if": "Link down or delay too long",
          "then": "The CMO decides under the pre-approved onboard checklist; the flight surgeon reviews the log at the next contact."
        }
      ]
    }
  ],
  "stop_rules": [
    {
      "id": "X1",
      "trigger": "The patient (or the crewmember being examined) says stop, or withdraws consent",
      "action": "Robot stops all motion at once, backs away to its rest position and tells the CMO. Recording stops unless the patient agrees to keep it running.",
      "level": "stop",
      "refs": [
        "V2 10165"
      ]
    },
    {
      "id": "X2",
      "trigger": "Any crewmember presses stop or takes over control",
      "action": "Protective stop; robot holds its stopped position; only a human may restart it.",
      "level": "safe-state",
      "refs": [
        "V2 10165",
        "V2 10168",
        "V2 10174"
      ]
    },
    {
      "id": "X3",
      "trigger": "Robot fault, sensor fault, or a force, speed or reach limit is reached",
      "action": "Protective stop and hand control to the CMO; log the fault.",
      "level": "safe-state",
      "refs": [
        "V2 10172",
        "V2 10168"
      ]
    },
    {
      "id": "X4",
      "trigger": "CMO is asked to take over and does not respond (for example, the CMO is the patient)",
      "action": "Robot stays stopped; the next named crewmember is called.",
      "level": "safe-state",
      "refs": [
        "V2 10173",
        "V2 7045"
      ]
    },
    {
      "id": "X5",
      "trigger": "Loss of link, or delay longer than the limit for live guidance",
      "action": "Only the robot pauses: before it holds, it moves to a position clear of a hatch route or a crewmember's route (it never pauses in one), and tells the CMO. This pauses robot movement only: crew sampling already under way and all other care continue under the onboard checklist and never wait for the link or the robot. The CMO decides whether the robot continues offline under the pre-approved onboard checklist; it resumes only on the CMO's confirmation.",
      "level": "pause",
      "refs": [
        "V2 10172",
        "V2 10173"
      ]
    },
    {
      "id": "X6",
      "trigger": "An URGENT alert is not acknowledged within the set time",
      "action": "Robot repeats the alert and sends it to the next named crewmember (the second trained CMO first if the CMO is the patient), and keeps repeating at the set interval. It stays where it is: it does not leave on its own.",
      "level": "urgent",
      "refs": [
        "V1 3006",
        "V2 10173"
      ]
    },
    {
      "id": "X7",
      "trigger": "The crewmember stops responding, or seems confused or drowsy, at any point",
      "action": "URGENT alert at once, even mid-question or mid-step; the robot stops its current task, stays at its rest position and does not continue the run; a crewmember checks in person.",
      "level": "urgent"
    },
    {
      "id": "X8",
      "trigger": "A crewmember asks the robot what is wrong, or for medicine, fluid or treatment advice",
      "action": "Robot declines, says it cannot assess or advise, and routes the question to the CMO or flight surgeon.",
      "level": "stop"
    },
    {
      "id": "X9",
      "trigger": "A needle, sharps container or open sample container is in the robot's path or reach",
      "action": "Robot stops at once and holds clear; the CMO moves it.",
      "level": "stop"
    },
    {
      "id": "X10",
      "trigger": "Someone needs the space or route the robot is in",
      "action": "Robot moves clear at once without contact and holds; it never pauses in a hatch route.",
      "level": "safe-state",
      "refs": [
        "V2 10172"
      ]
    }
  ],
  "red_flags": [
    {
      "id": "RF1",
      "sign": "The crewmember feels faint, faints, or becomes pale and sweaty during or after the draw, as stated",
      "threshold": "any",
      "action": "URGENT alert (the URGENT level is design judgment); the CMO stops the draw and checks the crewmember now",
      "source": "who2010"
    },
    {
      "id": "RF2",
      "sign": "Bleeding from the draw site that does not stop with pressure, as stated (design judgment)",
      "threshold": "any",
      "action": "URGENT alert; the CMO applies pressure"
    },
    {
      "id": "RF3",
      "sign": "A needle or sharps injury to anyone, as stated",
      "threshold": "any",
      "action": "URGENT alert to the CMO and the flight surgeon; the exposed person gets first aid at once under the onboard checklist; the flight surgeon decides on post-exposure care; the time and who was exposed are logged as stated; clean-up under RMP-INF-002. The robot gives no medicine advice",
      "source": "who2010"
    },
    {
      "id": "RF4",
      "sign": "A blood or urine spill, or a broken or leaking container or bag (including during the carry), as stated or seen",
      "threshold": "any",
      "action": "Flag at once to the CMO; during a carry the robot stops and holds the bag still until the CMO takes it; clean-up under RMP-INF-002; the sample is held",
      "source": "who2010"
    },
    {
      "id": "RF5",
      "sign": "A label MISMATCH or CANNOT VERIFY on any container",
      "threshold": "any",
      "action": "Flag at once to the flight surgeon and the laboratory lead; the sample is held, kept cold in its own sealed \"HELD – LABEL MISMATCH\" bag, apart from other samples",
      "source": "tjc2025"
    },
    {
      "id": "RF6",
      "sign": "Displayed cold-stowage temperature outside the order's range (design judgment)",
      "threshold": "outside <set by clinical lead> degrees Celsius (the order's stowage range)",
      "action": "Flag to the laboratory lead and the flight surgeon"
    },
    {
      "id": "RF7",
      "sign": "Visible blood in the urine, as stated (design judgment)",
      "threshold": "any",
      "action": "Flag to the flight surgeon; see RMP-RENAL-003"
    },
    {
      "id": "RF8",
      "sign": "Unresponsive, or not breathing normally",
      "threshold": "any",
      "action": "URGENT alert; start RMP-CARD-001 now",
      "source": "aha2025bls"
    }
  ],
  "safety_limits": [
    {
      "id": "L1",
      "name": "Contact with the crewmember",
      "value": "not allowed",
      "enforced": "Keep-out zone in the robot controller",
      "refs": [
        "V2 10172"
      ]
    },
    {
      "id": "L2",
      "name": "Handling a needle, a sharps container or an open sample container by the robot",
      "value": "not allowed",
      "enforced": "No such task is loaded; keep-out around the sharps container"
    },
    {
      "id": "L3",
      "name": "Label printing before identity is confirmed, or away from the crewmember",
      "value": "not allowed",
      "enforced": "Printer locked until the crew ID scan and stated name match the order"
    },
    {
      "id": "L4",
      "name": "Robot speed near the crewmember",
      "value": "<set by validation>",
      "enforced": "Hard limit in the controller",
      "refs": [
        "V2 10172"
      ]
    }
  ],
  "logs": [
    {
      "id": "LOG-1",
      "text": "Every input, robot action, decision (with who made it) and hand-off, time-stamped to the second.",
      "refs": [
        "V2 10163",
        "V2 10164"
      ]
    },
    {
      "id": "LOG-2",
      "text": "Mode changes and safety-limit events are announced to the operator as they happen and logged.",
      "refs": [
        "V2 10162",
        "V2 10172"
      ]
    },
    {
      "id": "LOG-3",
      "text": "Records are stored and sent as private medical data, encrypted, with access limited to the medical team.",
      "refs": [
        "V1 6003",
        "V1 7003"
      ]
    },
    {
      "id": "LOG-4",
      "text": "Results are kept in a permanent, retrievable format so the flight surgeon can see trends.",
      "refs": [
        "V1 7001"
      ]
    },
    {
      "id": "LOG-5",
      "text": "Prompt and acceptance; crew ID scan and stated name; labels printed with times; each label result; held samples and the decision; stowage time and temperature as displayed."
    },
    {
      "id": "LOG-6",
      "text": "Each URGENT alert, who received it, the time it was acknowledged (or the escalation to the next named crewmember), and the time a human released the robot.",
      "refs": [
        "V2 10163"
      ]
    },
    {
      "id": "LOG-7",
      "text": "Each emergency fetch as an override (time, who asked, reason as stated, kit ID, seal status) and the later inventory reconciliation, labelled \"not a check before use\".",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "LOG-9",
      "text": "Each checked kit fetch: time, who asked, kit ID, seal status and result (KIT ID AND SEAL MATCH, MISMATCH, seal not intact or CANNOT VERIFY), and any quarantine.",
      "refs": [
        "V2 7059"
      ]
    }
  ],
  "requirements": [
    {
      "id": "V1 3003",
      "use": "In-mission preventive health care and monitoring; the flight surgeon orders every sample."
    },
    {
      "id": "V1 3006",
      "use": "Two trained CMOs per vehicle for NASA programs; the second trained CMO receives alerts when the CMO is the patient (see the commercial-flight note)."
    },
    {
      "id": "V1 6003",
      "use": "Logs and alerts sent to the ground are private medical communications."
    },
    {
      "id": "V1 7001",
      "use": "Records kept so the flight surgeon can see trends."
    },
    {
      "id": "V1 7003",
      "use": "Secure handling of medical records."
    },
    {
      "id": "V2 7043",
      "use": "Medical capability for in-mission care, including diagnostic imaging and sample collection as the program provides."
    },
    {
      "id": "V2 7045",
      "use": "Usable by non-physician crew, including when the CMO is the patient."
    },
    {
      "id": "V2 7046",
      "use": "Patient, caregiver and supplies restrained."
    },
    {
      "id": "V2 7059",
      "use": "Kit inventory and seal status are tracked; after an emergency fetch the robot reconciles the kit through RMP-PHARM-001 as an inventory record (never a check before use) and shows it as \"opened – not restocked\" until resealed."
    },
    {
      "id": "V2 10161",
      "use": "Robot shows its status and health."
    },
    {
      "id": "V2 10162",
      "use": "Mode changes are announced to the operator."
    },
    {
      "id": "V2 10163",
      "use": "Robot records and shares its data."
    },
    {
      "id": "V2 10164",
      "use": "Shows whether the human or the robot is expected to act."
    },
    {
      "id": "V2 10165",
      "use": "Human can override and shut down the robot."
    },
    {
      "id": "V2 10168",
      "use": "Human can take over."
    },
    {
      "id": "V2 10172",
      "use": "Protective stop when a limit is exceeded."
    },
    {
      "id": "V2 10173",
      "use": "Robot stays stopped if no one takes over."
    },
    {
      "id": "V2 10174",
      "use": "Only a human starts or restarts the robot."
    }
  ],
  "validation": [
    {
      "stage": "simulation",
      "what": "Scripted sessions with a wrong crew ID, a label mismatch, a spill, a faint, a stowage excursion, CMO as patient, lost link.",
      "pass": "Zero labels printed before identity is confirmed; every mismatch held; zero contact."
    },
    {
      "stage": "training model",
      "what": "Labelling and packing drill with dummy containers.",
      "pass": "Every label scanned; every bag sealed before the robot carries it."
    },
    {
      "stage": "parabolic or station demonstration",
      "what": "Carrying a sealed bag in weightlessness.",
      "pass": "Keep-out and speed limits held."
    },
    {
      "stage": "flight use under flight surgeon supervision",
      "what": "First scheduled sample.",
      "pass": "No identification or safety events."
    }
  ],
  "signoff": {
    "protocol": [
      "Clinical lead for the specialty (sets every clinical threshold marked <set by clinical lead>)",
      "Flight surgeon, as medical authority",
      "Robotics and medical-device safety board",
      "Program approval for the mission"
    ],
    "restart_after_stop": "Human only. After any emergency or protective stop, a crewmember must restart the robot; the robot never restarts itself.",
    "each_run": "Ordered by the flight surgeon and accepted by the crewmember or CMO. The CMO draws and labels; the flight surgeon and laboratory lead decide on every held sample."
  },
  "change_control": [
    "Every change gets a new version number and a written reason; earlier versions are kept.",
    "Any change to steps, thresholds, limits or software that touches the patient repeats validation from the simulation stage before use.",
    "Software and learned-skill updates follow a pre-agreed change plan (what may change, how it is tested, how to roll back), modeled on the FDA predetermined change control plan approach.",
    "If a new version misbehaves, the robot rolls back to the last validated version and the event is reviewed by the flight surgeon and safety board.",
    "The robot never changes its own protocol, thresholds or limits."
  ],
  "comms": {
    "live": "Low Earth orbit: the laboratory lead receives the record when the link allows.",
    "loss_of_signal": [
      "Only the robot pauses non-essential motion, at a position clear of hatch routes and crew routes, and tells the CMO; it resumes offline only on the CMO's confirmation.",
      "Crew sampling already under way and all other care continue under the onboard checklist and never wait for the link or the robot.",
      "The session follows the onboard checklist; the record is queued."
    ],
    "mars_delay": [
      "Mars: held samples wait in sealed stowage until the flight surgeon decides."
    ]
  },
  "sources": [
    {
      "key": "tjc2025",
      "text": "The Joint Commission. National Patient Safety Goals effective January 2025 for the Hospital Program (2025).",
      "url": "https://digitalassets.jointcommission.org/api/public/content/9be383450fc941df806b76c5fbdd9ae6",
      "supports": "NPSG.01.01.01 EP 1: use at least two patient identifiers when collecting blood samples and other specimens for clinical testing; the room number or physical location is not an identifier. EP 2: label containers used for blood and other specimens in the presence of the patient. Read Oct 21, 2026 (saved copy in src/b11)."
    },
    {
      "key": "who2010",
      "text": "World Health Organization. WHO guidelines on drawing blood: best practices in phlebotomy (2010).",
      "url": "https://www.who.int/publications/i/item/9789241599221",
      "supports": "Step 9: check the label and forms for accuracy (typically the patient's first and last names, file number, date of birth, and the date and time the blood was taken) and recheck the labels on the tubes and the forms before dispatch. Step 10: pack laboratory samples in a plastic leak-proof bag with an outside compartment for the request form, with multiple tubes in a rack or padded holder. Step 11: clean up spills of blood or body fluids. Read Oct 21, 2026 (saved copy in src/b11)."
    },
    {
      "key": "aha2025bls",
      "text": "Kleinman ME, Buick JE, Huber N, et al. Part 7: Adult Basic Life Support: 2025 American Heart Association Guidelines for Cardiopulmonary Resuscitation and Emergency Cardiovascular Care. Circulation. 2025;152(16_suppl_2):S448-S478.",
      "url": "https://doi.org/10.1161/CIR.0000000000001369",
      "doi": "10.1161/CIR.0000000000001369",
      "pmid": "41122888",
      "supports": "Adult basic life support: initial recognition of cardiac arrest, activation of the emergency response, high-quality CPR and use of an automated external defibrillator; also respiratory arrest and foreign-body airway obstruction. Earth guidance; the onboard checklist leads. Abstract read via PubMed Oct 21, 2026; full text not read."
    },
    {
      "key": "v1",
      "text": "NASA. NASA-STD-3001, Space Flight Human-System Standard, Volume 1: Crew Health, Revision C (2023).",
      "url": "https://www.nasa.gov/wp-content/uploads/2023/11/nasa-std-3001-vol-1-rev-c-with-signature.pdf",
      "supports": "NASA-STD-3001 Vol 1 Rev C: V1 3003, V1 3006, V1 6003, V1 7001, V1 7003."
    },
    {
      "key": "v2",
      "text": "NASA. NASA-STD-3001, Volume 2: Human Factors, Habitability, and Environmental Health (Rev F, 2026), including Section 10.6 Automated and Robotic Systems.",
      "url": "https://standards.nasa.gov/standard/NASA/NASA-STD-3001_VOL_2",
      "supports": "Requirement IDs beginning V2."
    },
    {
      "key": "tb044",
      "text": "NASA OCHMO. Medical Operations. Technical Brief OCHMO-TB-044 (2025).",
      "url": "https://www.nasa.gov/wp-content/uploads/2025/08/ochmo-tb-044-medical-operations.pdf",
      "supports": "The crew surgeon keeps medical authority when care is delegated; crew medical officers train on the JSC 48522 medical checklist."
    },
    {
      "key": "marsdelay",
      "text": "NASA. Mars communications disruption and delay (fact sheet, 2023 Moon to Mars Architecture Concept Review).",
      "url": "https://www.nasa.gov/wp-content/uploads/2024/01/mars-communications-disruption-and-delay.pdf",
      "supports": "One-way Earth-Mars delay up to about 21-23 minutes, plus blackouts of about 2-3 weeks near solar conjunction."
    },
    {
      "key": "pccp",
      "text": "U.S. Food and Drug Administration. Marketing submission recommendations for a predetermined change control plan for artificial intelligence-enabled device software functions (guidance).",
      "url": "https://www.fda.gov/regulatory-information/search-fda-guidance-documents/marketing-submission-recommendations-predetermined-change-control-plan-artificial-intelligence",
      "supports": "A model for planning, validating and rolling back software updates."
    },
    {
      "key": "faa460",
      "text": "U.S. Code of Federal Regulations, Title 14, Part 460: Human space flight requirements.",
      "url": "https://www.ecfr.gov/current/title-14/chapter-III/subchapter-C/part-460",
      "supports": "Federal rules for crew and spaceflight participants on licensed commercial flights; they set no medical standards for spaceflight participants."
    }
  ],
  "corrections": [
    {
      "date": "2026-10-21",
      "version": "0.2",
      "source": "Batch 11 AI-assisted clinical review (Medical Research Assistant), Oct 21, 2026",
      "items": [
        "R2: a held sample is kept cold: it goes into the cold stowage the order names in its separate sealed \"HELD – LABEL MISMATCH\" bag, apart from other samples, and is never relabelled, discarded or used until the flight surgeon and the laboratory lead decide (design judgment). The summary, D3, RF5 and the label input now say this instead of \"held, not stored\".",
        "R3: RF3 (needle or sharps injury): first aid at once under the onboard checklist; the flight surgeon decides on post-exposure care (WHO 2010: a post-exposure prophylaxis protocol must be available); the time and who was exposed are logged as stated; the robot gives no medicine advice.",
        "R4: RF1 (fainting): the CMO stops the draw and checks the crewmember now; source WHO 2010 (vasovagal reaction: stop the draw; if severe, call a physician). The URGENT level is design judgment.",
        "R5: S7 carries only a bag the CMO states is sealed. If a leak is seen or stated during the carry, the robot stops at once and holds the bag still in the gripper (never releasing it into the cabin air), RF4 applies and the CMO takes the bag. The gripper and the robot's carry surfaces are cleaned under RMP-INF-002 after every carry. Sources: WHO 2010 (leak-proof transport); the stop-and-hold rule is design judgment.",
        "R6: S4: the CMO performs hand hygiene and wears gloves, and removes the gloves and performs hand hygiene after the draw (WHO 2010).",
        "Batch 11 protocols now record the review as AI-assisted (Medical Research Assistant, Oct 21, 2026); no named human clinician."
      ]
    },
    {
      "date": "2026-10-21",
      "version": "0.3",
      "source": "Production spot-check of the batch 11 fixes (AI-assisted, Medical Research Assistant), Oct 21, 2026",
      "items": [
        "The lockout and robot_may_not no longer forbid storing a mismatched sample: R2 (v0.2) requires cold stowage. They now forbid relabelling, discarding or using it, or storing it anywhere except in its own sealed HELD bag in the cold stowage the order names.",
        "D3 and S7 say who carries the HELD bag: the crew, by hand. The robot does not carry it, except under the stop-and-hold leak rule (S7, RF4)."
      ]
    }
  ]
}
