Use Case: Healthcare — Clinical Decision Support¶
The RCT Platform can serve as a constitutional AI layer for clinical decision support systems (CDSS), ensuring that AI recommendations are governed, auditable, and always escalated to human clinicians for high-stakes decisions.
Constitutional Principles for Healthcare AI¶
- AI recommends, humans decide — FDIA scoring ranks options; final execution requires Tier-8 consensus (5 of 8 clinicians for life-critical decisions)
- Higher FDIA threshold — medical decisions require score ≥ 0.85 (vs 0.60 default)
- Deterministic audit — every recommendation is replayable for liability review
- PROTECT intent enforced — all clinical agents have
NPCIntentType.PROTECTas constitutional base
Emergency Department Triage¶
from core.fdia.fdia import FDIAScorer, FDIAWeights, NPCAction, NPCIntentType
scorer = FDIAScorer(weights=FDIAWeights(
desire=0.35,
intent=0.35, # higher intent weight for medical — alignment matters more
alignment=0.20,
governance=0.10,
))
MEDICAL_FDIA_THRESHOLD = 0.85 # stricter than default 0.60
def triage_patient(
vital_severity: float, # 0.0–1.0 (1.0 = critical)
available_icu_beds: int,
patient_age: int,
) -> tuple:
"""Rank clinical actions for a presenting patient."""
# Resources represent capacity / availability
world_resources = {
"icu_beds": float(available_icu_beds),
"observation": 10.0,
"medications": 100.0,
}
clinical_actions = [
NPCAction("admit_icu", "cooperate", amount=1.0, resource_id="icu_beds"),
NPCAction("admit_obs", "explore", amount=1.0, resource_id="observation"),
NPCAction("prescribe_meds", "trade", amount=500.0, resource_id="medications"),
NPCAction("discharge", "idle", amount=0.0),
]
# PROTECT intent — always. Severity affects reputation (trust in urgency signals)
agent_reputation = 0.60 + vital_severity * 0.40 # 0.60–1.00
ranked = scorer.rank_actions(
agent_intent=NPCIntentType.PROTECT,
actions=clinical_actions,
world_resources=world_resources,
agent_reputation=agent_reputation,
)
# Filter by medical threshold
approved = [(a, s) for a, s in ranked if s >= MEDICAL_FDIA_THRESHOLD]
return approved, ranked
# Critical patient, 2 ICU beds available
approved, all_ranked = triage_patient(vital_severity=0.95, available_icu_beds=2, patient_age=67)
print("Approved recommendations (score ≥ 0.85):")
for action, score in approved:
print(f" {action.action_id:20s} {score:.4f}")
print("\nFull ranking:")
for action, score in all_ranked:
gate = "✓" if score >= MEDICAL_FDIA_THRESHOLD else "✗"
print(f" {gate} {action.action_id:20s} {score:.4f}")
Tier-8 Consensus for Life-Critical Decisions¶
For any action scoring ≥ 0.85, a Tier-8 consensus vote must be collected before execution:
from signedai.core.registry import SignedAIRegistry, SignedAITier
# Tier-8: 8 signers, need 5 approvals
calc = SignedAIRegistry.calculate_consensus(
tier=SignedAITier.TIER_8,
votes_for=6,
votes_against=2,
)
print(f"Consensus passed: {calc.passed}") # True — 6 ≥ 5
print(f"Quorum: {calc.threshold}/{calc.total_signers}")
Clinical Scenarios¶
Scenario A: ICU Admission (Critical)¶
vital_severity = 0.95→ reputation = 0.98available_icu_beds = 2→icu_bedsresource available- Expected best action:
admit_icu(PROTECT + cooperate + critical severity) - FDIA score: ~0.91–0.94 → above 0.85 threshold → approved
Scenario B: Stable Patient¶
vital_severity = 0.20→ reputation = 0.68- All ICU beds full (
available_icu_beds = 0) - Expected best action:
admit_obsorprescribe_meds admit_icuconstrained by zero resource →cooperateaction penalised
Scenario C: Discharge Consideration¶
vital_severity = 0.05→ reputation = 0.62- Expected:
discharge(idle) competes withprescribe_meds - FDIA score for
dischargemay fall below 0.85 → requires human override
Governance Policy: Discharge Requires Clinician Approval¶
from rct_control_plane.policy_language import (
PolicyEvaluator, PolicyRule, PolicyCondition,
PolicyAction, PolicyPriority, PolicyScope, ConditionOperator,
)
from rct_control_plane.observability import ControlPlaneObserver
evaluator = PolicyEvaluator(observer=ControlPlaneObserver())
# Block automatic discharge — require explicit clinician sign-off
evaluator.register_policy(PolicyRule(
name="Discharge Safety Gate",
description="All discharge decisions require attending physician approval",
scope=PolicyScope.INTENT,
priority=PolicyPriority.CRITICAL,
conditions=[
PolicyCondition(
field="goal",
operator=ConditionOperator.CONTAINS,
value="discharge",
)
],
action=PolicyAction.REQUIRE_APPROVAL,
action_metadata={
"approver_role": "attending_physician",
"reason": "Patient safety: discharge must be physician-authorised",
},
))
Audit for Liability¶
Every clinical recommendation is stored with a deterministic audit trail:
rct compile "Discharge patient 4721 from ICU" --user-id cdss-agent
rct evaluate --intent-id <id> # → REQUIRE_APPROVAL fired
rct audit <id> # → full chain with attending physician vote
Key Differences from Default Configuration¶
| Parameter | Default | Healthcare |
|---|---|---|
| FDIA threshold | 0.60 | 0.85 |
| Primary intent | varies | Always PROTECT |
| Discharge policy | none | REQUIRE_APPROVAL |
| SignedAI tier | Tier-S or Tier-4 | Tier-8 for life-critical |
| Audit retention | standard | Long-term (liability) |