We have a competition of oral case presentation for the anesthesia day on Monday. So, give me a case which I can present, and I should get a first top in the case presentation. And give me a case.

Asking for Preferences
Asking for Preferences
Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Running Command

mkdir -p /tmp/workspace/anesthesia-day-case && ls /tmp/workspace/anesthesia-day-case/

Writing File

~/anesthesia-day-case/build_pptx.py

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
from io import BytesIO

# ── Colour palette ──────────────────────────────────────────────
DARK_BLUE   = RGBColor(0x0D, 0x2B, 0x55)   # slide header bar
MID_BLUE    = RGBColor(0x1A, 0x5F, 0x9E)   # accent / section bars
LIGHT_BLUE  = RGBColor(0xD6, 0xE8, 0xF7)   # light fill boxes
ORANGE      = RGBColor(0xE8, 0x6A, 0x10)   # highlight / alert
WHITE       = RGBColor(0xFF, 0xFF, 0xFF)
DARK_GRAY   = RGBColor(0x33, 0x33, 0x33)
LIGHT_GRAY  = RGBColor(0xF4, 0xF4, 0xF4)
RED_ALERT   = RGBColor(0xC0, 0x39, 0x2B)

W = Inches(13.333)
H = Inches(7.5)

prs = Presentation()
prs.slide_width  = W
prs.slide_height = H
blank = prs.slide_layouts[6]

# ── Helper functions ─────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_rgb, alpha=None):
    shape = slide.shapes.add_shape(1, x, y, w, h)   # MSO_SHAPE_TYPE.RECTANGLE = 1
    shape.line.fill.background()
    shape.line.width = 0
    fill = shape.fill
    fill.solid()
    fill.fore_color.rgb = fill_rgb
    return shape

def add_text(slide, text, x, y, w, h, size=18, bold=False, color=DARK_GRAY,
             align=PP_ALIGN.LEFT, wrap=True, italic=False, anchor=MSO_ANCHOR.TOP):
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.vertical_anchor = anchor
    tf.margin_left  = Inches(0.05)
    tf.margin_right = Inches(0.05)
    tf.margin_top   = Inches(0.03)
    tf.margin_bottom = Inches(0.03)
    p = tf.paragraphs[0]
    p.alignment = align
    run = p.add_run()
    run.text = text
    run.font.size   = Pt(size)
    run.font.bold   = bold
    run.font.italic = italic
    run.font.color.rgb = color
    return tb

def add_slide_header(slide, title, subtitle=None):
    # Top dark bar
    add_rect(slide, 0, 0, W, Inches(1.1), DARK_BLUE)
    add_text(slide, title, Inches(0.35), Inches(0.08), Inches(11), Inches(0.75),
             size=30, bold=True, color=WHITE, anchor=MSO_ANCHOR.MIDDLE)
    if subtitle:
        add_text(slide, subtitle, Inches(0.35), Inches(0.78), Inches(11), Inches(0.35),
                 size=14, bold=False, color=LIGHT_BLUE, italic=True)
    # Bottom accent line
    add_rect(slide, 0, Inches(1.1), W, Inches(0.05), MID_BLUE)

def bullet_block(slide, items, x, y, w, h, header=None, hdr_color=MID_BLUE):
    if header:
        add_rect(slide, x, y, w, Inches(0.38), hdr_color)
        add_text(slide, header, x + Inches(0.12), y + Inches(0.02), w - Inches(0.25),
                 Inches(0.36), size=15, bold=True, color=WHITE, anchor=MSO_ANCHOR.MIDDLE)
        y += Inches(0.38)
        h -= Inches(0.38)
    add_rect(slide, x, y, w, h, LIGHT_GRAY)
    tb = slide.shapes.add_textbox(x + Inches(0.15), y + Inches(0.1),
                                  w - Inches(0.3), h - Inches(0.2))
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0
    first = True
    for item in items:
        if first:
            p = tf.paragraphs[0]
            first = False
        else:
            p = tf.add_paragraph()
        p.space_before = Pt(4)
        run = p.add_run()
        run.text = f"• {item}"
        run.font.size   = Pt(14)
        run.font.color.rgb = DARK_GRAY

# ════════════════════════════════════════════════════════════════
# SLIDE 1  –  Title
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, DARK_BLUE)                       # full background
add_rect(s, 0, Inches(2.6), W, Inches(2.3), MID_BLUE)    # centre band

add_text(s, "ANESTHESIA DAY  •  ORAL CASE PRESENTATION",
         Inches(1), Inches(0.5), Inches(11.3), Inches(0.7),
         size=16, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)

add_text(s, "Malignant Hyperthermia",
         Inches(0.5), Inches(2.65), Inches(12.3), Inches(1.2),
         size=46, bold=True, color=WHITE, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)

add_text(s, "A Rare but Life-Threatening Anesthetic Emergency",
         Inches(1), Inches(3.85), Inches(11.3), Inches(0.6),
         size=22, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER, italic=True)

add_text(s, "Presented by: [Your Name]  |  Date: Monday, July 2026",
         Inches(1), Inches(6.5), Inches(11.3), Inches(0.5),
         size=13, bold=False, color=RGBColor(0xAA, 0xCC, 0xEE), align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════
# SLIDE 2  –  Case Presentation
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "Case Presentation", "The Patient")

# Patient ID card
add_rect(s, Inches(0.35), Inches(1.25), Inches(4.0), Inches(5.9), WHITE)
add_rect(s, Inches(0.35), Inches(1.25), Inches(4.0), Inches(0.45), MID_BLUE)
add_text(s, "PATIENT PROFILE", Inches(0.5), Inches(1.27), Inches(3.7), Inches(0.4),
         size=14, bold=True, color=WHITE)

profile_items = [
    "Name: Mr. Arjun S.",
    "Age: 19 years  |  Male",
    "Weight: 72 kg  |  Height: 175 cm",
    "ASA Physical Status: I",
    "Scheduled Procedure:",
    "  Open reduction + internal fixation",
    "  of right tibial fracture",
    "Anesthesia Plan: General anesthesia",
    "PMH: No known allergies",
    "Family Hx: Uncle — \"reaction to anesthesia\"",
    "Medications: None",
]
tb = s.shapes.add_textbox(Inches(0.5), Inches(1.77), Inches(3.6), Inches(5.2))
tf = tb.text_frame
tf.word_wrap = True
first = True
for item in profile_items:
    if first:
        p = tf.paragraphs[0]; first = False
    else:
        p = tf.add_paragraph()
    p.space_before = Pt(3)
    run = p.add_run()
    run.text = item
    run.font.size = Pt(13)
    run.font.color.rgb = DARK_GRAY
    if "Family" in item:
        run.font.bold  = True
        run.font.color.rgb = RED_ALERT

# Intraoperative events
add_rect(s, Inches(4.6), Inches(1.25), Inches(8.4), Inches(5.9), WHITE)
add_rect(s, Inches(4.6), Inches(1.25), Inches(8.4), Inches(0.45), ORANGE)
add_text(s, "INTRAOPERATIVE EVENTS (TIMELINE)", Inches(4.75), Inches(1.27), Inches(8.1), Inches(0.4),
         size=14, bold=True, color=WHITE)

events = [
    ("T+0 min",    "Induction: Propofol 150 mg + Succinylcholine 100 mg IV"),
    ("T+5 min",    "Intubation achieved; sevoflurane 2% started"),
    ("T+20 min",   "ETCO₂ rises: 45 → 62 mmHg (unexpected)"),
    ("T+25 min",   "HR: 85 → 135 bpm; SpO₂ 97%"),
    ("T+30 min",   "Masseter muscle rigidity noted"),
    ("T+35 min",   "Temp 37.2°C → 38.9°C (rapid rise)"),
    ("T+38 min",   "ABG: pH 7.18, PaCO₂ 78 mmHg, HCO₃ 16 — severe mixed acidosis"),
    ("T+40 min",   "DIAGNOSIS: MALIGNANT HYPERTHERMIA — Emergency protocol activated"),
]
tb2 = s.shapes.add_textbox(Inches(4.75), Inches(1.8), Inches(8.1), Inches(5.2))
tf2 = tb2.text_frame
tf2.word_wrap = True
first = True
for time_pt, event in events:
    if first:
        p = tf2.paragraphs[0]; first = False
    else:
        p = tf2.add_paragraph()
    p.space_before = Pt(5)
    r1 = p.add_run(); r1.text = f"{time_pt}  "
    r1.font.size = Pt(12); r1.font.bold = True
    r1.font.color.rgb = MID_BLUE if "DIAGNOSIS" not in event else RED_ALERT
    r2 = p.add_run(); r2.text = event
    r2.font.size = Pt(12)
    r2.font.color.rgb = RED_ALERT if "DIAGNOSIS" in event else DARK_GRAY
    if "DIAGNOSIS" in event:
        r2.font.bold = True

# ════════════════════════════════════════════════════════════════
# SLIDE 3  –  What is Malignant Hyperthermia?
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "What is Malignant Hyperthermia?", "Definition & Epidemiology")

left_items = [
    "Pharmacogenetic clinical syndrome triggered by volatile halogenated anesthetics (halothane, isoflurane, sevoflurane, desflurane) and/or succinylcholine",
    "Results in uncontrolled skeletal muscle hypermetabolism",
    "Caused by sustained elevation of intracellular ionized Ca²⁺ in skeletal muscle",
    "Before dantrolene era: mortality ~60%",
    "With prompt dantrolene treatment: mortality <1.4%",
]
bullet_block(s, left_items, Inches(0.35), Inches(1.25), Inches(6.0), Inches(5.9),
             header="DEFINITION", hdr_color=MID_BLUE)

right_data = [
    "Incidence: 1:10,000 – 1:250,000 anesthetics",
    "MH susceptibility mutations: ~1:2,000 in population",
    "Males more susceptible than females",
    "Pediatric patients: 52.1% of all MH reactions",
    "Mutations in RyR1 gene (50–80% of cases)",
    "Also: CACNA1S gene (L-type Ca²⁺ channel)",
    "Autosomal dominant inheritance",
    "Family history is a critical RED FLAG",
]
bullet_block(s, right_data, Inches(6.65), Inches(1.25), Inches(6.35), Inches(5.9),
             header="EPIDEMIOLOGY & GENETICS", hdr_color=ORANGE)

# ════════════════════════════════════════════════════════════════
# SLIDE 4  –  Pathophysiology
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "Pathophysiology", "The Molecular Cascade")

# Central arrow flow
steps = [
    ("TRIGGER", "Volatile anesthetic / Succinylcholine", DARK_BLUE),
    ("RyR1 MUTATION", "Abnormal ryanodine receptor on SR membrane", MID_BLUE),
    ("Ca²⁺ FLOOD", "Uncontrolled Ca²⁺ release from sarcoplasmic reticulum", MID_BLUE),
    ("HYPERMETABOLISM", "ATP depletion, heat production, O₂ consumption ↑↑↑", ORANGE),
    ("MULTI-ORGAN FAILURE", "Rhabdomyolysis, acidosis, hyperthermia, DIC, death", RED_ALERT),
]
box_w = Inches(2.3)
box_h = Inches(0.9)
gap   = Inches(0.18)
start_x = Inches(0.35)
start_y = Inches(1.35)
for i, (title_s, body, col) in enumerate(steps):
    bx = start_x + i * (box_w + gap)
    add_rect(s, bx, start_y, box_w, box_h, col)
    add_text(s, title_s, bx + Inches(0.08), start_y + Inches(0.02),
             box_w - Inches(0.16), Inches(0.35), size=13, bold=True, color=WHITE)
    add_text(s, body, bx + Inches(0.08), start_y + Inches(0.37),
             box_w - Inches(0.16), Inches(0.5), size=10.5, color=WHITE, wrap=True)
    if i < len(steps) - 1:
        add_text(s, "→", bx + box_w + Inches(0.02), start_y + Inches(0.2),
                 Inches(0.16), Inches(0.5), size=22, bold=True, color=DARK_BLUE,
                 align=PP_ALIGN.CENTER)

# Downstream effects boxes
add_rect(s, Inches(0.35), Inches(2.55), W - Inches(0.7), Inches(0.04), MID_BLUE)

effects = [
    ("↑ ETCO₂",      "First & most sensitive sign; CO₂ produced by muscle hypermetabolism"),
    ("Tachycardia",  "Sympathetic activation; compensatory response"),
    ("Hyperthermia", "Up to 1°C rise per 5 min — LATE sign"),
    ("Rigidity",     "Masseter spasm after succinylcholine is pathognomonic"),
    ("Acidosis",     "Mixed respiratory + metabolic; pH may drop to <7.0"),
    ("Dark urine",   "Myoglobinuria from rhabdomyolysis → renal failure risk"),
]
col_w = Inches(2.1)
for i, (sign, detail) in enumerate(effects):
    bx = Inches(0.35) + i * (col_w + Inches(0.1))
    add_rect(s, bx, Inches(2.65), col_w, Inches(0.38), DARK_BLUE)
    add_text(s, sign, bx + Inches(0.06), Inches(2.67), col_w - Inches(0.12),
             Inches(0.34), size=13, bold=True, color=WHITE, anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, bx, Inches(3.03), col_w, Inches(1.0), WHITE)
    add_text(s, detail, bx + Inches(0.08), Inches(3.06), col_w - Inches(0.16),
             Inches(0.92), size=11, color=DARK_GRAY, wrap=True)

add_text(s, "CLINICAL SIGNS & SYMPTOMS", Inches(0.35), Inches(2.57), Inches(4), Inches(0.35),
         size=12, bold=True, color=WHITE)

# Late / life-threatening
add_rect(s, Inches(0.35), Inches(4.2), W - Inches(0.7), Inches(0.45), RED_ALERT)
add_text(s, "⚠  LATE / LIFE-THREATENING: DIC  •  Renal failure  •  Cardiac arrest  •  Brain death",
         Inches(0.5), Inches(4.22), W - Inches(1.0), Inches(0.4),
         size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER)

# Grading note
note_items = [
    "The Larach Clinical Grading Scale (CGS) quantifies likelihood of MH based on clinical signs.",
    "Key diagnostic test: In Vitro Contracture Test (IVCT) on muscle biopsy — Gold standard.",
    "Genetic testing: RyR1 and CACNA1S mutation panels available for family screening.",
]
bullet_block(s, note_items, Inches(0.35), Inches(4.82), W - Inches(0.7), Inches(2.3),
             header="DIAGNOSIS", hdr_color=MID_BLUE)

# ════════════════════════════════════════════════════════════════
# SLIDE 5  –  Emergency Management
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, RGBColor(0xFD, 0xF0, 0xEC))  # very light red tint
add_slide_header(s, "Emergency Management", "When Every Second Counts")

steps_mgmt = [
    ("STEP 1\nCALL FOR HELP", [
        "Activate MH emergency protocol immediately",
        "Assign roles: airway, drugs, documentation",
        "Call for dantrolene — locate crash cart",
    ], RED_ALERT),
    ("STEP 2\nSTOP TRIGGERS", [
        "Discontinue all volatile anesthetics NOW",
        "Stop succinylcholine (if still running)",
        "Change to TIVA: propofol + opioid",
        "Hyperventilate with 100% O₂ at 10 L/min",
    ], ORANGE),
    ("STEP 3\nDANTROLENE", [
        "2.5 mg/kg IV STAT — repeat every 5 min",
        "Max initial dose: up to 10 mg/kg (or until symptoms resolve)",
        "Dantrolene: inhibits RyR1, stops Ca²⁺ release",
        "Continue 1 mg/kg IV q6h for 24–48 hrs",
    ], MID_BLUE),
    ("STEP 4\nSUPPORTIVE", [
        "Active cooling: ice packs, cold IV saline (4°C)",
        "Target core temp < 38.5°C",
        "Sodium bicarbonate for severe acidosis",
        "Dextrose + insulin for hyperkalemia",
        "Hydration: 2 mL/kg/hr to protect kidneys",
        "Avoid calcium-channel blockers (interact with dantrolene)",
    ], DARK_BLUE),
]
col_w = Inches(2.95)
for i, (title_s, items, col) in enumerate(steps_mgmt):
    bx = Inches(0.35) + i * (col_w + Inches(0.15))
    add_rect(s, bx, Inches(1.25), col_w, Inches(0.65), col)
    add_text(s, title_s, bx + Inches(0.1), Inches(1.27), col_w - Inches(0.2),
             Inches(0.6), size=13, bold=True, color=WHITE,
             align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, bx, Inches(1.9), col_w, Inches(4.8), WHITE)
    tb = s.shapes.add_textbox(bx + Inches(0.12), Inches(2.0), col_w - Inches(0.24), Inches(4.6))
    tf = tb.text_frame; tf.word_wrap = True
    first = True
    for item in items:
        if first: p = tf.paragraphs[0]; first = False
        else: p = tf.add_paragraph()
        p.space_before = Pt(5)
        run = p.add_run(); run.text = f"• {item}"
        run.font.size = Pt(12.5); run.font.color.rgb = DARK_GRAY

# Bottom alert bar
add_rect(s, 0, Inches(6.9), W, Inches(0.6), RED_ALERT)
add_text(s, "DANTROLENE is the ONLY life-saving antidote — must be stocked in every OR that uses triggering agents",
         Inches(0.3), Inches(6.92), W - Inches(0.6), Inches(0.55),
         size=16, bold=True, color=WHITE, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)

# ════════════════════════════════════════════════════════════════
# SLIDE 6  –  Our Case: Management & Outcome
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "Case: Management & Outcome", "What We Did")

left_actions = [
    "Volatile anesthetic and succinylcholine immediately discontinued",
    "Switched to TIVA: Propofol 100 mcg/kg/min + fentanyl infusion",
    "Hyperventilated with 100% O₂ (FiO₂ 1.0)",
    "Dantrolene 2.5 mg/kg IV stat → total 7.5 mg/kg administered",
    "Active cooling: ice packs axillae & groin, cold IV saline 4°C",
    "Sodium bicarbonate 100 mEq IV for metabolic acidosis",
    "Foley catheter inserted — urine output monitored hourly",
    "Arterial line + central line inserted",
    "Serial ABGs + CK + electrolytes q1h",
    "Transferred to ICU post-operatively",
]
bullet_block(s, left_actions, Inches(0.35), Inches(1.25), Inches(6.5), Inches(5.9),
             header="ACTIONS TAKEN (Chronological)", hdr_color=ORANGE)

# Outcome column
add_rect(s, Inches(7.1), Inches(1.25), Inches(5.85), Inches(5.9), WHITE)
add_rect(s, Inches(7.1), Inches(1.25), Inches(5.85), Inches(0.45), MID_BLUE)
add_text(s, "OUTCOME", Inches(7.25), Inches(1.27), Inches(5.55), Inches(0.4),
         size=14, bold=True, color=WHITE)

outcomes = [
    ("T+50 min", "ETCO₂ fell from 78 → 45 mmHg"),
    ("T+60 min", "Heart rate normalized to 88 bpm"),
    ("T+90 min", "Temperature peaked at 39.4°C, then trended down"),
    ("T+4 hrs",  "Temperature 37.8°C; pH 7.36"),
    ("Day 2",    "CK peak: 45,000 U/L (rhabdomyolysis confirmed)"),
    ("Day 3",    "Urine output satisfactory; renal function preserved"),
    ("Day 5",    "Patient extubated, fully conscious"),
    ("Day 7",    "Discharged with MH alert bracelet + genetic counseling"),
]
tb = s.shapes.add_textbox(Inches(7.25), Inches(1.8), Inches(5.55), Inches(4.2))
tf = tb.text_frame; tf.word_wrap = True; first = True
for time_pt, event in outcomes:
    if first: p = tf.paragraphs[0]; first = False
    else: p = tf.add_paragraph()
    p.space_before = Pt(5)
    r1 = p.add_run(); r1.text = f"{time_pt}  "
    r1.font.size = Pt(12.5); r1.font.bold = True; r1.font.color.rgb = MID_BLUE
    r2 = p.add_run(); r2.text = event
    r2.font.size = Pt(12.5); r2.font.color.rgb = DARK_GRAY

# Lesson box
add_rect(s, Inches(7.1), Inches(5.5), Inches(5.85), Inches(1.65), DARK_BLUE)
add_text(s, "KEY LESSON", Inches(7.25), Inches(5.55), Inches(5.55), Inches(0.35),
         size=13, bold=True, color=ORANGE)
add_text(s,
         "Early recognition of rising ETCO₂ + tachycardia in the presence of triggering agents — THINK MH FIRST. "
         "A positive family history of anesthetic complications is a mandatory pre-operative red flag.",
         Inches(7.25), Inches(5.9), Inches(5.55), Inches(1.1),
         size=12.5, color=WHITE, wrap=True)

# ════════════════════════════════════════════════════════════════
# SLIDE 7  –  Anesthesia Considerations & Prevention
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "Anesthesia Considerations & Prevention", "The Anesthesiologist's Role")

col1 = [
    "Screen all patients: ask about personal AND family history of anesthetic reactions",
    "MH-susceptible patients require trigger-free anesthesia (TIVA only)",
    "Purge anesthesia machine: flush for 10–30 min at 10 L/min fresh gas flow",
    "Replace soda lime absorber before use",
    "Use dedicated MH-safe machines where available",
    "Pre-operative genetic counseling for at-risk families",
    "Safe agents: propofol, ketamine, opioids, midazolam, non-depolarizing NMBs",
    "AVOID: succinylcholine, all volatile agents",
]
bullet_block(s, col1, Inches(0.35), Inches(1.25), Inches(6.15), Inches(5.9),
             header="PREVENTION STRATEGIES", hdr_color=DARK_BLUE)

col2_a = [
    "Dantrolene 36 vials (720 mg) must be immediately available in every OR",
    "Each vial: 20 mg dantrolene + 3 g mannitol — must be reconstituted with 60 mL sterile water",
    "MH hotline (MHAUS USA): 1-800-MH-HYPER",
    "Post-episode: report to national MH registry",
    "Patient receives MH alert card/bracelet for life",
]
bullet_block(s, col2_a, Inches(6.7), Inches(1.25), Inches(6.28), Inches(2.9),
             header="OR PREPAREDNESS", hdr_color=ORANGE)

col2_b = [
    "Ryanodex (dantrolene sodium for injection 250 mg): newer concentrated formulation — faster reconstitution",
    "Research ongoing: specific RyR1 stabilizers as future prophylaxis",
    "MHAUS provides online MH simulation training for OR teams",
]
bullet_block(s, col2_b, Inches(6.7), Inches(4.35), Inches(6.28), Inches(2.8),
             header="CURRENT DEVELOPMENTS", hdr_color=MID_BLUE)

# ════════════════════════════════════════════════════════════════
# SLIDE 8  –  Take-Home Messages
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, DARK_BLUE)
add_rect(s, 0, 0, W, Inches(1.3), MID_BLUE)
add_text(s, "Take-Home Messages", Inches(0.35), Inches(0.08), Inches(12.6), Inches(1.1),
         size=34, bold=True, color=WHITE, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)

messages = [
    ("1", "THINK MH early", "Rising ETCO₂ + tachycardia + muscle rigidity during volatile anesthesia = MH until proven otherwise"),
    ("2", "HISTORY is key", "A family member who 'reacted to anesthesia' may mean MH susceptibility — ALWAYS ask"),
    ("3", "STOP and SWITCH", "Immediately discontinue volatile agents; convert to TIVA with 100% O₂"),
    ("4", "DANTROLENE saves lives", "2.5 mg/kg IV, repeat every 5 min up to 10 mg/kg — do not delay"),
    ("5", "COOL aggressively", "Target temperature < 38.5°C; avoid hyperthermia rebound"),
    ("6", "FOLLOW UP", "Genetic testing + counseling for patient and first-degree relatives"),
]

for i, (num, headline, detail) in enumerate(messages):
    bx = Inches(0.4) + (i % 3) * Inches(4.28)
    by = Inches(1.5) + (i // 3) * Inches(2.7)
    add_rect(s, bx, by, Inches(3.9), Inches(2.4), MID_BLUE)
    add_rect(s, bx, by, Inches(0.55), Inches(2.4), ORANGE)
    add_text(s, num, bx + Inches(0.03), by + Inches(0.7), Inches(0.48), Inches(1.0),
             size=28, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
    add_text(s, headline, bx + Inches(0.65), by + Inches(0.08), Inches(3.15), Inches(0.5),
             size=15, bold=True, color=WHITE)
    add_text(s, detail, bx + Inches(0.65), by + Inches(0.58), Inches(3.1), Inches(1.7),
             size=11.5, color=LIGHT_BLUE, wrap=True)

add_text(s, "\"In anesthesia, the price of ignorance is a life.\"",
         Inches(1), Inches(6.85), Inches(11.3), Inches(0.55),
         size=14, bold=False, color=RGBColor(0xAA, 0xCC, 0xEE),
         align=PP_ALIGN.CENTER, italic=True)

# ════════════════════════════════════════════════════════════════
# SLIDE 9  –  References
# ════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, LIGHT_GRAY)
add_slide_header(s, "References", "")

refs = [
    "1.  Miller RD, et al. Miller's Anesthesia, 10th ed. (2025). Chapter on Malignant Hyperthermia. Elsevier.",
    "2.  Morgan GE, Mikhail MS. Morgan and Mikhail's Clinical Anesthesiology, 7th ed. (2022). McGraw-Hill.",
    "3.  Barash PG, et al. Barash, Cullen, and Stoelting's Clinical Anesthesia, 9th ed. (2024). Wolters Kluwer.",
    "4.  Larach MG, et al. A clinical grading scale to predict malignant hyperthermia susceptibility. Anesthesiology. 1994;80(4):771-779.",
    "5.  Hopkins PM, et al. European Malignant Hyperthermia Group guidelines for investigation of MH susceptibility. Br J Anaesth. 2015;115(4):531-539.",
    "6.  Rosenberg H, et al. Malignant hyperthermia: a review. Orphanet J Rare Dis. 2015;10:93.",
    "7.  MHAUS (Malignant Hyperthermia Association of the United States). www.mhaus.org",
    "8.  Guyton AC, Hall JE. Textbook of Medical Physiology, 14th ed. Elsevier.",
]
tb = s.shapes.add_textbox(Inches(0.5), Inches(1.4), Inches(12.3), Inches(5.5))
tf = tb.text_frame; tf.word_wrap = True; first = True
for ref in refs:
    if first: p = tf.paragraphs[0]; first = False
    else: p = tf.add_paragraph()
    p.space_before = Pt(8)
    run = p.add_run(); run.text = ref
    run.font.size = Pt(12.5); run.font.color.rgb = DARK_GRAY

# ════════════════════════════════════════════════════════════════
# SAVE
# ════════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/anesthesia-day-case/Malignant_Hyperthermia_Case_Presentation.pptx"
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
    f.write(buf.getvalue())

print(f"SAVED: {out_path}")
Running Command

cd /tmp/workspace/anesthesia-day-case && python build_pptx.py 2>&1

Running Command

python3 - <<'EOF' from pptx import Presentation prs = Presentation("/tmp/workspace/anesthesia-day-case/Malignant_Hyperthermia_Case_Presentation.pptx") print(f"Total slides: {len(prs.slides)}") for i, slide in enumerate(prs.slides, 1): texts = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t: texts.append(t[:60]) print(f" Slide {i}: {texts[:3]}") EOF

Here is your complete, competition-ready case presentation - download it below:

Malignant Hyperthermia Case Presentation

Presentation · PPTX


Why This Case Will Win

Malignant Hyperthermia (MH) is the single most impressive case you can present for an anesthesia competition. Here is why:
  • It is triggered by the anesthesiologist's own drugs (sevoflurane, succinylcholine)
  • It is rare and lethal, but 100% survivable if caught fast
  • It demands pharmacology, physiology, genetics, AND emergency management - all in one case
  • It has a specific antidote (dantrolene) that only anesthesiologists know to give
  • Judges will be impressed that a junior resident chose this and knew it cold

Deck Structure (9 slides, 15 minutes)

SlideTitleTime
1Title slide30 sec
2Case Presentation - Patient profile + intraoperative timeline2 min
3What is MH? - Definition + epidemiology/genetics1.5 min
4Pathophysiology - Molecular cascade + clinical signs2.5 min
5Emergency Management - 4-step protocol2.5 min
6Our Case: Management & Outcome2 min
7Prevention & Anesthesia Considerations1.5 min
8Take-Home Messages1 min
9References30 sec

The Case in Brief (for your oral narration)

Patient: Mr. Arjun S., 19M, ASA-I, scheduled for tibial ORIF under GA. Family history: uncle had a "reaction to anesthesia" - this was the red flag that should have prompted pre-operative workup.
Trigger point: Succinylcholine given at induction, sevoflurane maintenance started.
Clue sequence to present dramatically:
  1. ETCO₂ rises unexpectedly (62 mmHg) - "First sign and most sensitive"
  2. Tachycardia (135 bpm) - "We thought light anesthesia"
  3. Masseter rigidity - "Pathognomonic after succinylcholine"
  4. Temperature spikes 1°C per 5 min - "Late, but now no doubt"
  5. ABG pH 7.18 - "Mixed respiratory + metabolic acidosis"
Pivot: MH protocol activated. Dantrolene 2.5 mg/kg IV stat, TIVA, cooling, monitoring.
Outcome: Full recovery, discharged Day 7 with MH alert bracelet + genetic counseling referral.

Winning Tips for the Presentation

  1. Open with the family history red flag - tell the audience before the case that one detail was missed. Then reveal it. This creates narrative tension.
  2. Know the number: 2.5 mg/kg - judges will definitely ask about dantrolene dosing.
  3. Know the mechanism in one sentence: "Dantrolene inhibits the ryanodine receptor (RyR1), blocking Ca²⁺ release from the sarcoplasmic reticulum."
  4. Know why ETCO₂ rises first - it is the most sensitive sign because muscle hypermetabolism generates CO₂ before temperature climbs.
  5. End with the lesson - "This case taught us that a family history of anesthetic complications is not just paperwork. It is a life-or-death question."
Sources: Miller's Anesthesia 10th ed., Morgan & Mikhail's Clinical Anesthesiology 7th ed., Barash Clinical Anesthesia 9th ed.
This is a shared conversation. Sign in to Orris to start your own chat.