This cookbook details how to deploy a localized, containerized clinical endocrinology, endocrine emergency, and intensive care decision-support engine for emergency resuscitation bays, medical intensive care units ($\text{MICUs}$), and acute endocrinology consultation services to ingest thermoregulatory telemetry, cardiac hemodynamics, neurocognitive scoring, hepatic-gastrointestinal dysfunction markers, and free thyroid hormone panels, classify thyrotoxic decompensation according to the Burch-Wartofsky Point Scale ($\text{BWPS}$, Score $<25, 25-44, \ge 45$) and Japan Thyroid Association ($\text{JTA}$) Akamizu Criteria ($\text{TS1 Definite vs TS2 Suspected}$), automate the 5-Step Multimodal Pharmacotherapy Protocol (Thionamide Synthesis Blockade, Delayed Inorganic Iodine Release Blockade, Glucocorticoid Conversion Blockade, Beta-Adrenergic Antagonism, Bile Acid Sequestration), enforce the Mandatory 1-Hour Inorganic Iodine Delay Sentinel (Wolff-Chaikoff Gating vs Jod-Basedow Explosion), gate Therapeutic Plasma Exchange ($\text{TPE}$ / Plasmapheresis) for medical refractory crisis, and manage the Aspirin / Salicylate Protein-Displacement Contraindication Sentinel according to American Thyroid Association ($\text{ATA}$) and $\text{JTA}$ consensus guidelines without external cloud API reliance.
Thyroid Storm (Thyrotoxic Crisis) is an extreme, life-threatening manifestation of thyrotoxicosis characterized by multi-organ decompensation, hyperpyrexia, hyperdynamic circulatory failure, altered mental status, and mortality rates exceeding $10 - 30\%$ if aggressive multimodal therapy is delayed:
[Thyroid Telemetry: Temp F/C, HR, Rhythm, CNS Score, GI/Hepatic, CHF, Free T4/T3, TSH]
│
▼
[Burch-Wartofsky Point Scale (BWPS) Calculator: <25 Unlikely, 25-44 Impending, >=45 Storm]
│
▼
[Japan Thyroid Association (JTA) Akamizu Classifier: TS1 Definite vs TS2 Suspected]
│
▼
[5-Step Multimodal Blockade Sequence: PTU Load -> SSKI (Delayed) -> Hydrocortisone -> Beta-Blocker]
│
▼
[Wolff-Chaikoff 1-Hour Iodine Delay Timer & Sentinel: Jod-Basedow Prevention]
│
▼
[Therapeutic Plasma Exchange (TPE) & Cholestyramine Bile Sequestration Gating]
│
▼
[Aspirin / Salicylate TBG-Displacement Absolute Contraindication Sentinel]
Install required scientific Python and clinical endocrinology modeling packages:
pip install numpy scipy pandas torch torchvision matplotlib
"""
Cookbook 363: Offline Clinical Endocrinology Thyroid Storm BWPS & Multimodal Blockade Engine
OpenPHR Clinical AI Working Group (https://openphr.org)
"""
import math
import numpy as np
import pandas as pd
from typing import Dict, List, Tuple, Optional
from dataclasses import dataclass
@dataclass
class ThyroidStormTelemetry:
patient_id: str
age_years: float = 38.0
patient_weight_kg: float = 65.0
# Thermoregulatory Telemetry
temperature_fahrenheit: float = 103.4 # >= 103.0-103.9 F = 25 pts
# Cardiac Telemetry
heart_rate_bpm: float = 146.0 # >= 140 bpm = 25 pts
has_atrial_fibrillation: bool = True # +10 pts
heart_failure_status: str = "Moderate (Bilateral bibasilar rales)" # "None", "Mild (Edema)", "Moderate (Rales)", "Severe (Pulmonary Edema)" -> 10 pts
# Neurological Telemetry
cns_status: str = "Moderate (Delirium / Psychosis / Extreme Agitation)" # "Normal", "Mild (Agitation)", "Moderate (Delirium)", "Severe (Seizures/Coma)" -> 20 pts
# GI & Hepatic Telemetry
gi_hepatic_status: str = "Severe (Jaundice / Bilirubin >= 3.0 mg/dL)" # "Normal", "Moderate (Diarrhea/Vomiting)", "Severe (Jaundice)" -> 20 pts
# Precipitating Event
has_precipitating_event: bool = True # Sepsis / Infection -> 10 pts
# Hormone Panel
free_t4_ng_dl: float = 5.8 # Markedly elevated (Normal 0.8 - 1.8)
free_t3_pg_ml: float = 14.2 # Markedly elevated (Normal 2.3 - 4.2)
tsh_uiu_ml: float = 0.01 # Fully suppressed (< 0.01)
# Comorbidities & Allergy
has_thionamide_allergy_or_severe_hepatitis: bool = False
@dataclass
class ThyroidStormEvaluationReport:
patient_id: str
bwps_total_score: int # 110 / 140
bwps_severity_tier: str # "DEFINITE THYROID STORM (Score >= 45)"
akamizu_jta_classification: str # "TS1: DEFINITE THYROID STORM"
multimodal_pharmacotherapy_orders: List[str]
tpe_plasmapheresis_gating: str
safety_sentinels: List[str]
clinical_ata_jta_directive: str
class ThyroidStormDecisionEngine:
"""
Offline clinical engine for Burch-Wartofsky Point Scale calculation, Akamizu JTA criteria,
multimodal sequence generation with 1-hour iodine delay gating, and TPE triage.
"""
def calculate_bwps(self, d: ThyroidStormTelemetry) -> Tuple[int, Dict[str, int], str]:
# 1. Thermoregulatory Dysfunction
tf = d.temperature_fahrenheit
if tf >= 104.0: temp_pts = 30
elif tf >= 103.0: temp_pts = 25
elif tf >= 102.0: temp_pts = 20
elif tf >= 101.0: temp_pts = 15
elif tf >= 100.0: temp_pts = 10
elif tf >= 99.0: temp_pts = 5
else: temp_pts = 0
# 2. CNS Effects
cns_lower = d.cns_status.lower()
if "severe" in cns_lower or "coma" in cns_lower or "seizure" in cns_lower: cns_pts = 30
elif "moderate" in cns_lower or "delirium" in cns_lower or "psychosis" in cns_lower: cns_pts = 20
elif "mild" in cns_lower or "agitation" in cns_lower: cns_pts = 10
else: cns_pts = 0
# 3. GI-Hepatic Dysfunction
gi_lower = d.gi_hepatic_status.lower()
if "severe" in gi_lower or "jaundice" in gi_lower: gi_pts = 20
elif "moderate" in gi_lower or "diarrhea" in gi_lower or "vomiting" in gi_lower or "pain" in gi_lower: gi_pts = 10
else: gi_pts = 0
# 4. Cardiovascular Dysfunction
# Tachycardia
hr = d.heart_rate_bpm
if hr >= 140.0: hr_pts = 25
elif hr >= 130.0: hr_pts = 20
elif hr >= 120.0: hr_pts = 15
elif hr >= 110.0: hr_pts = 10
elif hr >= 90.0: hr_pts = 5
else: hr_pts = 0
# Heart Failure
chf_lower = d.heart_failure_status.lower()
if "severe" in chf_lower or "pulmonary edema" in chf_lower: chf_pts = 15
elif "moderate" in chf_lower or "rales" in chf_lower: chf_pts = 10
elif "mild" in chf_lower or "edema" in chf_lower: chf_pts = 5
else: chf_pts = 0
# Atrial Fibrillation
afib_pts = 10 if d.has_atrial_fibrillation else 0
# 5. Precipitating Event
precip_pts = 10 if d.has_precipitating_event else 0
total_bwps = temp_pts + cns_pts + gi_pts + hr_pts + chf_pts + afib_pts + precip_pts
breakdown = {
"Thermoregulatory_Pts": temp_pts,
"CNS_Pts": cns_pts,
"GI_Hepatic_Pts": gi_pts,
"Tachycardia_Pts": hr_pts,
"Heart_Failure_Pts": chf_pts,
"Atrial_Fibrillation_Pts": afib_pts,
"Precipitant_Pts": precip_pts
}
if total_bwps >= 45:
tier = "DEFINITE THYROID STORM (Score >= 45 - Critical Medical Emergency)"
elif 25 <= total_bwps <= 44:
tier = "IMPENDING / SUGGESTIVE OF THYROID STORM (Score 25 to 44)"
else:
tier = "THYROID STORM UNLIKELY (Score < 25)"
return total_bwps, breakdown, tier
def evaluate_akamizu_jta(self, d: ThyroidStormTelemetry, bwps_breakdown: Dict[str, int]) -> Tuple[str, str]:
has_thyrotoxicosis = d.free_t4_ng_dl > 1.8 and d.tsh_uiu_ml < 0.1
has_cns = bwps_breakdown["CNS_Pts"] >= 10
has_fever = bwps_breakdown["Thermoregulatory_Pts"] >= 10
has_tachy = bwps_breakdown["Tachycardia_Pts"] >= 20 # HR >= 130
has_chf = bwps_breakdown["Heart_Failure_Pts"] >= 10
has_gi = bwps_breakdown["GI_Hepatic_Pts"] >= 10
non_cns_count = sum([has_fever, has_tachy, has_chf, has_gi])
if has_thyrotoxicosis:
if (has_cns and non_cns_count >= 1) or (non_cns_count >= 3):
return "TS1: DEFINITE THYROID STORM (Akamizu Criteria)", "Meets official Japan Thyroid Association TS1 criteria for confirmed thyroid storm."
elif (has_cns and non_cns_count == 0) or (non_cns_count == 2):
return "TS2: SUSPECTED THYROID STORM (Akamizu Criteria)", "Meets JTA TS2 criteria; high risk of rapid progression to full storm."
else:
return "THYROTOXICOSIS WITHOUT FULMINANT STORM", "Biochemical thyrotoxicosis present without meeting multi-organ storm threshold."
else:
return "NON-THYROTOXIC ILLNESS", "Free thyroid hormone levels not elevated."
def generate_multimodal_orders(self, d: ThyroidStormTelemetry) -> Tuple[List[str], List[str]]:
orders = []
sentinels = []
orders.append("1. STEP 1 (THIONAMIDE - BLOCK NEW HORMONE SYNTHESIS):")
if not d.has_thionamide_allergy_or_severe_hepatitis:
orders.append(" • PROPYLTHIOURACIL (PTU) PREFERRED: Administer Loading Dose 500-1000 mg PO/PR/NG, followed by 250 mg PO/PR q4h.")
orders.append(" (PTU blocks both thyroid peroxidase synthesis AND peripheral T4-to-T3 deiodinase conversion).")
else:
orders.append(" • METHIMAZOLE (MMI) ALTERNATIVE: Administer 20-30 mg PO/IV q6h (Total 80 mg/day).")
orders.append("2. STEP 2 (INORGANIC IODINE - BLOCK HORMONE RELEASE - STRICT 1-HOUR DELAY):")
orders.append(" • ⏱️ TIMED ORDER: SATURATED SOLUTION OF POTASSIUM IODIDE (SSKI) 5 drops (250 mg) PO/NG q6h (or Lugol's 8 drops q6h).")
orders.append(" • 🚨 MANDATORY EXECUTION RULE: ADMINISTER EXACTLY 60 MINUTES AFTER INITIAL PTU/MMI DOSE!")
orders.append("3. STEP 3 (GLUCOCORTICOID - BLOCK CONVERSION & ADRENAL STRESS PROTECTION):")
orders.append(" • HYDROCORTISONE: Administer 100 mg IV q8h (or Loading Dose 300 mg IV, then 100 mg q8h).")
orders.append(" (Inhibits 5'-deiodinase and treats relative hypermetabolic adrenal insufficiency).")
orders.append("4. STEP 4 (BETA-BLOCKER - CONTROL ADRENERGIC HYPERSTIMULATION):")
if "pulmonary edema" not in d.heart_failure_status.lower():
orders.append(" • PROPRANOLOL: Administer 60-80 mg PO/NG q4-6h (or IV 1.0-2.0 mg slow push q4h).")
else:
orders.append(" • ESMOLOL INFUSION: In acute heart failure/pulmonary edema, titrate continuous IV Esmolol 50-300 mcg/kg/min with arterial line monitoring.")
orders.append("5. STEP 5 (ENTEROHEPATIC RECIRCULATION BLOCKADE):")
orders.append(" • CHOLESTYRAMINE: Administer 4 g PO/NG QID to bind thyroid hormones in gut lumen and accelerate elimination.")
# Wolff-Chaikoff Delay Sentinel
sentinels.append("🚨 WOLFF-CHAIKOFF 1-HOUR IODINE DELAY MANDATE: NEVER administer SSKI/Lugol's iodine prior to or concurrently with thionamides. Inorganic iodine given to an unblocked thyroid gland acts as explosive substrate for immediate de novo hormone synthesis (Jod-Basedow Phenomenon), causing fatal cardiovascular collapse. STRICTLY ENFORCE 1-HOUR DELAY!")
# Aspirin Contraindication Sentinel
sentinels.append("🚨 SALICYLATE / ASPIRIN ABSOLUTE CONTRAINDICATION: Aspirin and salicylates displace T4 and T3 from Thyroid-Binding Globulin (TBG), dramatically elevating free active T3/T4 fractions. USE ACETAMINOPHEN AND EXTERNAL COOLING BLANKETS EXCLUSIVELY FOR HYPERPYREXIA!")
return orders, sentinels
def evaluate_tpe_gating(self, d: ThyroidStormTelemetry, bwps_score: int) -> Tuple[str, List[str]]:
sentinels = []
if bwps_score >= 70 or d.has_thionamide_allergy_or_severe_hepatitis or ("severe" in d.cns_status.lower() and "severe" in d.gi_hepatic_status.lower()):
tpe_status = "🚨 STAT THERAPEUTIC PLASMA EXCHANGE (TPE / PLASMAPHERESIS) GATED: Severe multi-organ crisis or thionamide contraindication. TPE rapidly clears protein-bound T4/T3 (>50-80% reduction in 2 sessions) and removes circulating toxic metabolites."
sentinels.append("🚨 TPE ICU PROTOCOL: Place high-flow central venous apheresis catheter; order 1.5 plasma volume exchange with 5% albumin and fresh frozen plasma (FFP) replacement.")
else:
tpe_status = "Therapeutic Plasma Exchange on standby. Re-evaluate if patient fails to show clinical improvement within 24-48 hours of medical blockade."
return tpe_status, sentinels
def evaluate_case(self, data: ThyroidStormTelemetry) -> ThyroidStormEvaluationReport:
bwps, breakdown, tier = self.calculate_bwps(data)
akamizu_cls, akamizu_desc = self.evaluate_akamizu_jta(data, breakdown)
orders, sent_med = self.generate_multimodal_orders(data)
tpe_rec, sent_tpe = self.evaluate_tpe_gating(data, bwps)
all_sentinels = sent_med + sent_tpe
directives = []
directives.append(f"STAGING: BWPS Score {bwps}/140 ({tier}).")
directives.append(f"AKAMIZU JTA: {akamizu_cls}.")
directives.append("MULTIMODAL BLOCKADE: Step 1 PTU -> Step 2 SSKI (1h Delay) -> Step 3 Hydrocortisone -> Step 4 Beta-Blocker -> Step 5 Cholestyramine.")
directives.append(f"TPE: {tpe_rec}.")
return ThyroidStormEvaluationReport(
patient_id=data.patient_id,
bwps_total_score=bwps,
bwps_severity_tier=tier,
akamizu_jta_classification=akamizu_cls,
multimodal_pharmacotherapy_orders=orders,
tpe_plasmapheresis_gating=tpe_rec,
safety_sentinels=all_sentinels,
clinical_ata_jta_directive=" ".join(directives)
)
# Example Execution & Verification
if __name__ == "__main__":
engine = ThyroidStormDecisionEngine()
print("=" * 80)
print("OpenPHR Clinical Endocrinology Thyroid Storm BWPS & Multimodal Engine")
print("=" * 80)
# Test Case 1: 38-year-old female presenting to Emergency Resuscitation Bay.
# Telemetry: Temp 103.4 F (25 pts), HR 146 bpm in Afib (25+10 pts), Rales (10 pts), Delirium (20 pts), Jaundice (20 pts).
# Scores: Total BWPS = 110 / 140 (Definite Thyroid Storm!); Akamizu = TS1 Definite Thyroid Storm.
# Triage: STAT Multimodal Blockade (PTU -> 1h Delay -> SSKI -> Hydrocortisone -> Propranolol -> Cholestyramine) + TPE Gating!
# Sentinels: 1-Hour Iodine Delay + Aspirin Displace Hazard!
ts1 = ThyroidStormTelemetry(
patient_id="ENDO-STORM-9901",
age_years=38.0,
patient_weight_kg=65.0,
temperature_fahrenheit=103.4,
heart_rate_bpm=146.0,
has_atrial_fibrillation=True,
heart_failure_status="Moderate (Bilateral bibasilar rales)",
cns_status="Moderate (Delirium / Psychosis / Extreme Agitation)",
gi_hepatic_status="Severe (Jaundice / Bilirubin >= 3.0 mg/dL)",
has_precipitating_event=True,
free_t4_ng_dl=5.8,
free_t3_pg_ml=14.2,
tsh_uiu_ml=0.01,
has_thionamide_allergy_or_severe_hepatitis: False
)
rep1 = engine.evaluate_case(ts1)
print(f"\n[Patient {rep1.patient_id} - Thyroid Storm Assessment]")
print(f"Burch-Wartofsky Point Scale: {rep1.bwps_total_score} / 140")
print(f"Severity Tier: {rep1.bwps_severity_tier}")
print(f"Akamizu JTA Criteria: {rep1.akamizu_jta_classification}")
print("\nMultimodal Pharmacotherapy Orders:")
for o in rep1.multimodal_pharmacotherapy_orders:
print(f" {o}")
print(f"\nTherapeutic Plasma Exchange (TPE) Gating:\n {rep1.tpe_plasmapheresis_gating}")
if rep1.safety_sentinels:
print("\nSafety Sentinels:")
for s in rep1.safety_sentinels:
print(f" 🚨 {s}")
print(f"\nATA / JTA Consensus Directive:\n{rep1.clinical_ata_jta_directive}")