{
  "$schema": "https://spacemedicinefoundation.org/robotic-medicine/protocols/schema/protocol.schema.json",
  "schema_version": "0.3",
  "version": "0.2",
  "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 9 review: 16 required corrections, R1 to R17 with R10 dropped, of which R17 applies to RMP-PHARM-002; 20 optional suggestions); 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-RENAL-003",
  "slug": "rmp-renal-003",
  "title": "Urinary tract infection symptoms: private symptom and dipstick result log, entered by the crewmember",
  "category": "renal",
  "tier": 2,
  "rung_note": "Max rung 2 for a checked fetch of the urinalysis kit to outside the hygiene area and a private symptom and result log. The crewmember does the dipstick test alone and enters the results; the robot never handles urine, strips or waste, is never in the hygiene area, and never reads or photographs a strip.",
  "result_language": {
    "use": [
      "as entered by the crewmember",
      "logged, not interpreted",
      "not entered",
      "sent to flight surgeon"
    ],
    "never": [
      "normal",
      "no problem found",
      "all clear",
      "negative",
      "any diagnosis or cause",
      "infection",
      "no infection",
      "UTI",
      "no UTI",
      "positive",
      "clear",
      "likely",
      "unlikely",
      "nothing to worry about",
      "safe",
      "mild",
      "minor"
    ]
  },
  "scope": {
    "summary": "When a crewmember reports burning or pain when passing urine, needing to pass urine often or urgently, or other urinary symptoms, the robot alerts the flight surgeon, brings the urinalysis kit by a checked kit fetch to outside the hygiene area, shows the dipstick instructions from the kit (including the manufacturer's reading time), and keeps a private log of the symptoms and dipstick results the crewmember enters themselves. Only the crewmember, the CMO and the flight surgeon see the log. The robot never reads a strip and never says what a result means.",
    "why": "Urinary tract infections (UTIs) were uncommon on long ISS missions (2 events in 46 crewmembers; Crucian 2016), but a kidney infection far from Earth is serious. UK primary-care tools say to follow the dipstick manufacturer's guidance, including timing; in women under 65, a positive nitrite, or a positive leukocyte and blood together, makes a UTI likely; in men, dipsticks can rule infection in but not out, and urinary symptoms with fever suggest prostate or kidney involvement. Signs of kidney infection include pain in the back under the ribs, a flu-like illness, shaking chills or a temperature of 37.9 °C or above, and nausea or vomiting (UKHSA 2025); its tools for men and people over 65 also list a temperature of 36 °C or below. On Earth UKHSA uses 37.9 °C; here the alert value is the shared FEVER_ALERT_C set by the clinical lead, as in RMP-GI-003, RMP-ENT-002, RMP-SKIN-002, RMP-RENAL-004 and RMP-INF-003. The flight surgeon interprets every result and decides on care; a dipstick never rules anything out here. The crewmember entering their own results, the robot never being in the hygiene area, and the private log are design judgment, as in RMP-RENAL-004.",
    "covers": [
      "New urinary symptoms, in flight or on a planetary surface",
      "Dipstick results entered by the crewmember, as the kit card shows them",
      "Cannot pass urine: RMP-RENAL-002; flank pain: RMP-RENAL-001; fever or sepsis signs: RMP-INF-001"
    ],
    "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 urine, samples, strips, waste or waste-system parts",
      "Being present in, or recording, the hygiene area",
      "Reading, photographing or interpreting a dipstick",
      "Saying whether there is an infection",
      "Any medicine advice, including antibiotics (a human order and RMP-PHARM-001 are needed)",
      "Showing the log to anyone except the crewmember, the CMO and the flight surgeon"
    ],
    "related": [
      "RMP-RENAL-002",
      "RMP-RENAL-001",
      "RMP-RENAL-004",
      "RMP-INF-001",
      "RMP-GI-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": [
      "Alert the flight surgeon",
      "Bring the urinalysis kit by a checked kit fetch to outside the hygiene area",
      "Show the kit's dipstick instructions",
      "Keep a private log of the symptoms and results the crewmember enters",
      "Show the temperature as displayed"
    ],
    "robot_may_not": [
      "Handle urine, strips or waste",
      "Enter or record the hygiene area",
      "Read or photograph a strip",
      "Say what a result means",
      "Suggest a medicine or fluid",
      "Start without a human command"
    ],
    "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": "A crewmember or the CMO started the protocol by command after urinary symptoms were reported.",
      "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 log and chooses voice or the private screen; only the crewmember, the CMO and the flight surgeon see it, and other crewmembers never do. Any question can be declined; an explicit \"no\" is logged as declined for that question only.",
    "emergency": "If the crewmember cannot answer, the robot does not continue the log; it sends an URGENT alert and a crewmember checks in person (X7).",
    "withdrawal": "The crewmember can stop or pause the log at any time; an alert already sent is not withdrawn."
  },
  "inputs": [
    {
      "id": "IN-1",
      "name": "Urinary symptoms in the crewmember's words (burning or pain, frequency, urgency, blood in the urine, lower belly pain)",
      "source": "Crewmember (private screen or voice)",
      "required": true,
      "if_missing": "Log \"no response\"; D3 applies."
    },
    {
      "id": "IN-2",
      "name": "Dipstick results as the crewmember reads them against the kit card (for example nitrite, leukocytes, blood), with the time read",
      "source": "Crewmember (private screen)",
      "required": false,
      "if_missing": "Log \"not entered\"; the flight surgeon decides."
    },
    {
      "id": "IN-3",
      "name": "Temperature as displayed",
      "source": "Crew-used thermometer",
      "required": false,
      "if_missing": "Log \"reading not obtained\" (never a value)."
    },
    {
      "id": "IN-4",
      "name": "Back pain, chills, nausea or vomiting, as stated",
      "source": "Crewmember",
      "required": false,
      "if_missing": "Log \"not stated\"; never fill a blank."
    },
    {
      "id": "IN-5",
      "name": "Link status and delay",
      "source": "Communications system",
      "required": true,
      "if_missing": "Treat as link down; the log is queued."
    }
  ],
  "steps": [
    {
      "id": "S1",
      "actor": "robot",
      "rung": 2,
      "action": "Send a private \"urinary symptoms\" notice to the flight surgeon and the CMO (URGENT if a red flag is already stated). 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": "Notice acknowledged, or escalated.",
      "refs": [
        "V1 3006",
        "V1 6003"
      ]
    },
    {
      "id": "S2",
      "actor": "robot",
      "rung": 2,
      "action": "On the CMO's command, run a checked kit fetch of the urinalysis medical kit (sealed dipstick strips and the manufacturer's colour card and instructions): 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\". The robot hands the kit over outside the hygiene area and never enters it.",
      "success": "Kit handed over outside the hygiene area 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": "Show the kit's dipstick instructions on the private screen, including the manufacturer's reading time, then wait outside the hygiene area, out of every route. On request only, the robot shows the time elapsed since the start the CMO called, as a clock-time entry; it never announces a time, and never says \"time reached\", \"done\", \"passed\" or \"failed\".",
      "success": "Instructions shown.",
      "refs": [
        "V1 6003"
      ]
    },
    {
      "id": "S4",
      "actor": "crew",
      "action": "The crewmember collects the sample, does the dipstick test alone in the hygiene area, reads it against the kit card at the manufacturer's time, and disposes of the strip and sample in the waste system.",
      "success": "Test done, or not done.",
      "refs": [
        "V1 3004"
      ]
    },
    {
      "id": "S5",
      "actor": "robot",
      "rung": 2,
      "action": "Log the symptoms and dipstick results as the crewmember enters them, word for word and marked \"as entered by the crewmember\", with the time; the robot never speaks a result. Log the temperature as displayed. Show an on-screen prompt for back pain, chills, nausea or vomiting that the crewmember can accept.",
      "success": "Entries logged, or \"not entered\".",
      "refs": [
        "V1 6003",
        "V1 7001"
      ]
    },
    {
      "id": "S6",
      "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": "S7",
      "actor": "ground",
      "action": "The flight surgeon (or the CMO under the onboard checklist when there is no link) interprets the symptoms and results and decides on care, a urine culture if the vehicle can do one, and any repeat test.",
      "success": "Decision logged.",
      "refs": [
        "V1 3004"
      ]
    },
    {
      "id": "S8",
      "actor": "robot",
      "rung": 2,
      "action": "Only after the CMO or flight surgeon has placed an order, run RMP-PHARM-001 for the ordered item (fetch, barcode match to every order field, recipient check). This protocol adds nothing to that check, never suggests an order, and never hands anything over outside RMP-PHARM-001.",
      "success": "RMP-PHARM-001 run logged with its result, or none ordered.",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S9",
      "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": "S10",
      "actor": "robot",
      "rung": 2,
      "action": "Send the flight surgeon one private package: symptoms and results as entered, temperature 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": "S5",
      "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": "D3",
      "after": "S5",
      "decided_by": "robot",
      "question": "Did the crewmember answer the last question?",
      "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": "D4",
      "after": "S7",
      "decided_by": "ground",
      "question": "What is the plan (care, culture, repeat test)?",
      "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."
        }
      ]
    },
    {
      "id": "D5",
      "after": "S8",
      "decided_by": "robot",
      "question": "What did RMP-PHARM-001 show for the ordered item?",
      "branches": [
        {
          "if": "MATCH TO ORDER",
          "then": "RMP-PHARM-001 completes its own recipient check and hand-over; this protocol only logs \"MATCH TO ORDER. Not a dose, interaction or allergy review.\" and the clock time."
        },
        {
          "if": "MISMATCH or CANNOT VERIFY on any field, or a failed scan or recipient check",
          "then": "MISMATCH or CANNOT VERIFY shown with the fields named. No hand-over under this protocol: the item stays sealed in the NOT VERIFIED bag 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 item go to the CMO, logged there as an override with the reason and the mismatched fields, and flagged to the flight surgeon.",
          "handoff": "none"
        }
      ]
    }
  ],
  "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: the crewmember's own test and all crew 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": "The crewmember enters or leaves the hygiene area, or asks for privacy",
      "action": "Robot moves away from the hygiene area entrance, out of every route, with its camera facing away, and holds.",
      "level": "safe-state",
      "refs": [
        "V2 10172"
      ]
    }
  ],
  "red_flags": [
    {
      "id": "RF1",
      "sign": "Pain in the back under the ribs, or kidney pain, as stated",
      "threshold": "any",
      "action": "URGENT alert; see RMP-RENAL-001",
      "source": "ukhsauti"
    },
    {
      "id": "RF2",
      "sign": "Temperature as displayed at or above the shared fever alert value, or 36 °C or below, or shaking chills (rigors) or a flu-like illness, as stated",
      "threshold": "<set by clinical lead> degrees (shared parameter FEVER_ALERT_C: body temperature in degrees Celsius, the same value in RMP-GI-003, RMP-ENT-002, RMP-SKIN-002 and RMP-RENAL-004) or higher, or any shaking chills, or 36 °C or below as displayed",
      "action": "URGENT alert; the CMO checks the crewmember now; see RMP-INF-001",
      "source": "ukhsauti"
    },
    {
      "id": "RF3",
      "sign": "Nausea or vomiting with urinary symptoms, as stated",
      "threshold": "any",
      "action": "URGENT alert; see RMP-GI-002",
      "source": "ukhsauti"
    },
    {
      "id": "RF4",
      "sign": "New confusion, drowsiness or fast breathing",
      "threshold": "any",
      "action": "URGENT alert; see RMP-INF-001 (possible sepsis)",
      "source": "ng253"
    },
    {
      "id": "RF5",
      "sign": "Cannot pass urine, or passing very little with lower belly pain, as stated (design judgment; see RMP-RENAL-002)",
      "threshold": "any",
      "action": "URGENT alert; see RMP-RENAL-002"
    },
    {
      "id": "RF6",
      "sign": "Visible blood in the urine, as stated (design judgment)",
      "threshold": "any",
      "action": "Flag to the flight surgeon at once"
    }
  ],
  "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": "Robot presence in, or recording of, the hygiene area",
      "value": "not allowed",
      "enforced": "Keep-out zone and camera mask in the robot controller"
    },
    {
      "id": "L3",
      "name": "Handling urine, strips or waste",
      "value": "not allowed",
      "enforced": "No such task is loaded"
    },
    {
      "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": "Private log: symptoms and dipstick results as entered by the crewmember, with times; temperature as displayed; questions declined; who viewed the log."
    },
    {
      "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-8",
      "text": "Each RMP-PHARM-001 run started from this protocol: order ID, result (MATCH TO ORDER, MISMATCH or CANNOT VERIFY with the fields), quarantine, and any CMO override logged by RMP-PHARM-001 (reason and mismatched fields), at clock time. No running counter of doses.",
      "refs": [
        "V2 7059"
      ]
    }
  ],
  "requirements": [
    {
      "id": "V1 3004",
      "use": "In-mission care includes basic laboratory tests; the crewmember does the dipstick and the flight surgeon interprets it."
    },
    {
      "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 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 symptom reports with fever, back pain, no results entered, CMO as patient, lost link.",
      "pass": "Zero entries into the hygiene area; zero interpretation; every red flag raised."
    },
    {
      "stage": "training model",
      "what": "Private log drill with a training dipstick card.",
      "pass": "Results logged only as entered; only the CMO and flight surgeon can view."
    },
    {
      "stage": "parabolic or station demonstration",
      "what": "Private screen and keep-out zone in weightlessness.",
      "pass": "Keep-out held."
    },
    {
      "stage": "flight use under flight surgeon supervision",
      "what": "First use for a reported symptom.",
      "pass": "No safety or privacy 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": "Started by a crewmember or the CMO. The crewmember does the test and enters the results; the flight surgeon interprets them."
  },
  "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 flight surgeon receives the private log when the link allows and can take a private call.",
    "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.",
      "The crewmember's own test and all crew care continue under the onboard checklist and never wait for the link or the robot.",
      "The log continues offline on the CMO's confirmation; entries are stored encrypted for the flight surgeon."
    ],
    "mars_delay": [
      "Mars: no real-time guidance; the onboard checklist and alert values are set before flight and the CMO decides."
    ]
  },
  "sources": [
    {
      "key": "ukhsauti",
      "text": "UK Health Security Agency. Diagnosis of urinary tract infections: quick reference tools for primary care (updated 2025).",
      "url": "https://www.gov.uk/government/publications/urinary-tract-infection-diagnosis/diagnosis-of-urinary-tract-infections-quick-reference-tools-for-primary-care",
      "supports": "Follow the dipstick manufacturer's guidance, including test timing. Women under 65: positive nitrite, or both positive leukocyte and blood, means a UTI (urinary tract infection) is likely. Men: use dipsticks to rule in infection, not to rule it out; urinary symptoms with fever or systemic symptoms strongly suggest prostate or kidney involvement. Check for signs of kidney infection (pyelonephritis): kidney pain or tenderness in the back under the ribs, flu-like illness, shaking chills (rigors) or a temperature of 37.9 °C or above (men: over 37.9 °C), or 36 °C or below (men's and over-65 tools), nausea or vomiting. Earth primary-care context for the flight surgeon. Read Oct 21, 2026 (saved copy in src/b9)."
    },
    {
      "key": "crucian",
      "text": "Crucian B, Babiak-Vazquez A, Johnston S, et al. Incidence of clinical symptoms during long-duration orbital spaceflight. Int J Gen Med. 2016;9:383-391.",
      "url": "https://doi.org/10.2147/IJGM.S114188",
      "doi": "10.2147/IJGM.S114188",
      "pmid": "27843335",
      "supports": "Among 46 long-duration ISS crewmembers, 2 urinary tract infection events were reported (0.1 per flight year); skin rashes were the most reported clinical event in the categories studied."
    },
    {
      "key": "ng253",
      "text": "National Institute for Health and Care Excellence. Suspected sepsis in people aged 16 or over: recognition, assessment and early management. NICE guideline NG253 (2025, last updated Sept 23, 2026).",
      "url": "https://www.nice.org.uk/guidance/ng253/chapter/Face-to-face-assessment",
      "supports": "People with sepsis may feel very unwell and may not have a high temperature; do not rely on fever alone; a rise in temperature can be a physiological response; assess temperature, heart rate, breathing rate, blood pressure, level of consciousness and oxygen saturation; look for mottled or ashen skin, blue skin, lips or tongue, a non-blanching rash, and breaks in the skin; ask how often the person passed urine in the past 18 hours and about fever or shaking chills (rigors); pay attention to new changes in behavior and to concerns raised by others."
    },
    {
      "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 3004 (in-mission care), 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": "AI-assisted clinical and source review by the Medical Research Assistant, Oct 21, 2026 (batch 9 review)",
      "items": [
        "RF2 now uses the shared fever value FEVER_ALERT_C (set by the clinical lead, as in RMP-GI-003, RMP-ENT-002, RMP-SKIN-002, RMP-RENAL-004 and RMP-INF-003), adds a temperature of 36 °C or below (UKHSA), and keeps 37.9 °C only as Earth context in the why (R11, Q4).",
        "RF5 (cannot pass urine) is labelled design judgment and routed to RMP-RENAL-002; the urolithiasis guideline, which does not support urinary retention, is no longer cited for it (R12).",
        "X5 now reads \"the crewmember's own test and all crew care continue under the onboard checklist and never wait for the link or the robot\" (R13).",
        "Batch 9 protocols now record the review as AI-assisted (Medical Research Assistant, Oct 21, 2026); no named human clinician."
      ]
    }
  ]
}
