Giveme an mysterious medical cas3 to solve

Here's a mysterious medical case for you to solve β€” good luck!

🩺 The Case of the Collapsing Chemist


Patient Presentation

Patient: Marcus, 34-year-old male, previously healthy, works in a university chemistry lab.
Chief Complaint: Brought to the ED by coworkers after being found confused and trembling at his workbench.

History of Present Illness

Over the past 3 weeks, Marcus has experienced:
  • Progressive fatigue and difficulty concentrating
  • Irritability and mood swings (coworkers noticed personality changes)
  • Tremors in both hands - initially mild, now constant
  • Insomnia and vivid nightmares
Today he was found slumped at his desk, muttering incoherently. He briefly regained consciousness in the ambulance but couldn't recall the last 48 hours.
Marcus himself says: "My mouth tastes like metal... I've had this weird tingling in my fingers for weeks but figured it was stress."

Past Medical History

  • No prior illnesses
  • No medications, no recreational drugs
  • No recent travel
  • No sick contacts

Physical Examination

FindingDetail
Temp37.1Β°C (normal)
HR102 bpm (mildly elevated)
BP138/88 mmHg (mildly elevated)
NeuroConfused, GCS 13/15
TremorCoarse, bilateral, intentional tremor
GaitWide-based, ataxic
MouthErythematous gingiva, foul metallic odor
SkinDiffuse fine rash on trunk
EyesMild conjunctival injection

Lab Results

TestResultReference
CBCNormal-
CMPNormal-
Liver enzymesAST/ALT mildly elevated (2x ULN)-
Creatinine1.6 mg/dL0.7-1.2
UrinalysisProteinuria (2+)None
Blood culturesPending-
TSHNormal-
AmmoniaNormal-
Urine toxicologyNegative (standard screen)-
CT headNo acute intracranial pathology-

The Clues

  • Works in a chemistry lab (unspecified project)
  • Metallic taste in mouth
  • Neurological deterioration over weeks (not days)
  • Kidney involvement (elevated creatinine, proteinuria)
  • Liver involvement (mild transaminitis)
  • Negative standard tox screen
  • Gingival changes
  • Subacute onset

Your Challenge

Answer these questions:
  1. What is the most likely diagnosis?
  2. What specific test(s) would you order to confirm it?
  3. What is the mechanism of toxicity?
  4. How would you treat Marcus?

Take your time. When you're ready, share your answers and I'll give you the full explanation!

Cyanide

Not Quite! Here's Your Feedback πŸ”

Good instinct β€” cyanide does fit a chemistry lab setting β€” but the clues point away from it. Here's why cyanide doesn't fit this case:

❌ Why NOT Cyanide

Clue in the CaseCyanide Would Show...What We Actually See
OnsetAcute (minutes to hours) β€” cyanide is fast-actingSubacute over 3 weeks
MechanismBlocks cytochrome c oxidase β†’ cellular hypoxiaMarcus has NO hypoxic picture
CardiovascularSevere hypotension, bradycardia, cardiovascular collapseBP mildly elevated, HR only mildly up
MetabolicProfound lactic acidosis, cherry-red skinNormal labs, no acidosis
KidneysNot a classic featureMarcus has proteinuria + elevated creatinine
Gingival changesNot a featureMarcus has erythematous gingiva
TremorNot a hallmarkMarcus has coarse bilateral intentional tremor + ataxia

🟑 The Real Killer Clues You Should Focus On

Think about what fits ALL of these together:
βœ… Subacute neurological decline (weeks) βœ… Intentional tremor + ataxia (cerebellar signs) βœ… Metallic taste in mouth βœ… Gingival erythema (classic "line" sign) βœ… Kidney damage (proteinuria, ↑creatinine) βœ… Mild liver involvement βœ… Chemistry lab exposure βœ… Negative standard tox screen (this substance requires special testing)

πŸ’‘ A Big Hint

This toxin has been famous throughout history. It was used by hatmakers in the 18th-19th centuries, causing a well-known syndrome. It was also the suspected cause of Beethoven's mysterious illness, and even Napoleon's death is debated around it.
The phrase "Mad as a hatter" comes from this exact poisoning. 🎩

Revised guess? What heavy metal do you think it is now?

Give me theanswer

The Answer: ☿ Mercury Poisoning (Elemental/Inorganic)


1. Diagnosis: Chronic Mercury Toxicity (Mercurialism)

Marcus was being slowly poisoned by mercury vapor in his chemistry lab β€” likely from a spill, broken thermometer, or improper storage of liquid mercury that he failed to report.

2. Confirmatory Tests

TestExpected Finding
24-hour urine mercury levelMarkedly elevated (normal < 20 Β΅g/L)
Blood mercury levelElevated (normal < 10 Β΅g/L)
Hair/nail mercuryElevated (reflects chronic exposure)
Renal biopsy (if needed)Membranous nephropathy pattern
MRI brainCerebellar atrophy, white matter changes
Standard urine tox screens do not test for heavy metals β€” you must order them separately. This is why his tox screen was negative!

3. Mechanism of Toxicity

Mercury is a devastatingly effective poison because it attacks the body at the molecular level:
Mercury (Hg²⁺)
       ↓
Binds to sulfhydryl (-SH) groups on proteins
       ↓
Inactivates enzymes, disrupts cell membranes,
damages mitochondria
       ↓
╔══════════════════╦══════════════════╦═══════════════════╗
β•‘   BRAIN          β•‘   KIDNEYS        β•‘   GI TRACT        β•‘
β•‘ Cerebellar damageβ•‘ Tubular/glom.    β•‘ Metallic taste    β•‘
β•‘ Tremor, ataxia,  β•‘ damage β†’         β•‘ Gingival inflam.  β•‘
β•‘ personality Ξ”,   β•‘ Proteinuria,     β•‘ Salivation        β•‘
β•‘ memory loss      β•‘ ↑Creatinine      β•‘                   β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
The gingival erythema ("mercurial stomatitis") and metallic taste are classic signs of mercury accumulating in oral tissues.

4. Treatment

Immediate

  • Remove from exposure immediately - get Marcus out of the lab
  • Supportive care: IV fluids for kidneys, seizure precautions

Chelation Therapy (the antidote)

AgentRouteNotes
DMSA (Succimer)OralFirst-line for mild-moderate cases
DMPS (Unithiol)IVPreferred for severe cases
BAL (Dimercaprol)IMOlder agent, used if others unavailable
Chelators work by binding mercury and allowing excretion in urine. Monitor renal function closely during treatment.

Long-term

  • Neurological rehabilitation (tremor, ataxia may partially persist)
  • Serial urine mercury levels to track clearance
  • Psychiatric support (personality changes can linger)
  • Report to occupational health / OSHA - the entire lab must be decontaminated

The Historical Connection 🎩

PersonSuspected Mercury Link
Mad Hatters (1800s)Used mercury nitrate to cure felt for hats - developed tremor, psychosis ("hatter's shakes")
BeethovenHair analysis showed mercury levels 100x normal - likely from syphilis treatment with mercurous chloride
Isaac NewtonHair samples showed extreme mercury - from his chemistry experiments
Napoleon BonaparteDisputed - hair samples showed elevated mercury, possibly from wallpaper pigment

How Marcus Likely Got Exposed

A mercury spill in the lab (even a small one) releases invisible vapor at room temperature. Chronic inhalation over weeks causes exactly this picture - while liquid mercury on skin causes minimal absorption, the vapor is highly lipid-soluble and crosses the blood-brain barrier easily.

Score: 0/4 - but now you know one of medicine's most fascinating poisoning syndromes! Want another case? 🧠

Create a quick reference guide on heavy metal poisoning signs and treatments

Asking for Preferences

What format would you like the reference guide in?

Reading File
Reading File
Good. I'll use reportlab to build a well-formatted, multi-page PDF reference guide. Let me create it now.
Running Command

mkdir -p /home/daytona/workspace/heavy-metal-guide && cat > /home/daytona/workspace/heavy-metal-guide/build_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT from reportlab.platypus import FrameBreak from reportlab.lib.colors import HexColor # ── Colour palette ────────────────────────────────────────────────────────── DARK_NAVY = HexColor("#1a2340") MED_BLUE = HexColor("#2b4590") ACCENT_TEAL = HexColor("#00788a") LIGHT_BLUE = HexColor("#e8f0fe") PALE_TEAL = HexColor("#e0f4f6") RED_ALERT = HexColor("#c0392b") ORANGE = HexColor("#d35400") GREEN = HexColor("#1e7e34") YELLOW_BG = HexColor("#fff8e1") GRAY_TEXT = HexColor("#444444") LIGHT_GRAY = HexColor("#f5f5f5") TABLE_HDR = HexColor("#2b4590") TABLE_ALT = HexColor("#eef2fb") WHITE = colors.white W, H = A4 styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( "MainTitle", parent=styles["Title"], fontSize=28, textColor=WHITE, leading=34, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=4 ) subtitle_style = ParagraphStyle( "Subtitle", parent=styles["Normal"], fontSize=13, textColor=HexColor("#b0c4ff"), leading=16, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=0 ) section_hdr = ParagraphStyle( "SectionHdr", parent=styles["Heading1"], fontSize=14, textColor=WHITE, leading=18, fontName="Helvetica-Bold", spaceAfter=0, spaceBefore=0 ) metal_title = ParagraphStyle( "MetalTitle", parent=styles["Normal"], fontSize=13, textColor=WHITE, leading=16, fontName="Helvetica-Bold", alignment=TA_LEFT ) body = ParagraphStyle( "Body", parent=styles["Normal"], fontSize=9, textColor=GRAY_TEXT, leading=13, fontName="Helvetica", spaceAfter=4 ) body_bold = ParagraphStyle( "BodyBold", parent=body, fontName="Helvetica-Bold", textColor=DARK_NAVY ) small = ParagraphStyle( "Small", parent=styles["Normal"], fontSize=8, textColor=GRAY_TEXT, leading=11, fontName="Helvetica" ) label = ParagraphStyle( "Label", parent=styles["Normal"], fontSize=8, textColor=WHITE, leading=10, fontName="Helvetica-Bold", alignment=TA_CENTER ) footer_style = ParagraphStyle( "Footer", parent=styles["Normal"], fontSize=7.5, textColor=HexColor("#888888"), leading=10, fontName="Helvetica", alignment=TA_CENTER ) warning_style = ParagraphStyle( "Warning", parent=styles["Normal"], fontSize=8.5, textColor=HexColor("#7b3f00"), leading=12, fontName="Helvetica-Bold", alignment=TA_CENTER ) def banner(title_text, color=MED_BLUE): """Full-width coloured section banner.""" tbl = Table([[Paragraph(title_text, section_hdr)]], colWidths=[W - 4*cm]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("TOPPADDING", (0,0), (-1,-1), 7), ("BOTTOMPADDING",(0,0), (-1,-1), 7), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS", [4]), ])) return tbl def metal_header(symbol, name, color): """Two-column header: symbol box + name.""" sym_cell = Table([[Paragraph(symbol, ParagraphStyle("sym", fontSize=22, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=26))]], colWidths=[1.5*cm], rowHeights=[1.5*cm]) sym_cell.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) name_cell = Table([[Paragraph(name, ParagraphStyle("mname", fontSize=14, textColor=WHITE, fontName="Helvetica-Bold", leading=17))]], colWidths=[(W - 4*cm - 1.5*cm)]) name_cell.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LEFTPADDING",(0,0), (-1,-1), 8), ])) outer = Table([[sym_cell, name_cell]], colWidths=[1.5*cm, W - 4*cm - 1.5*cm]) outer.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING",(0,0), (-1,-1), 0), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ])) return outer def info_table(rows, col_widths=None): """Standard 2-column info table.""" if col_widths is None: full = W - 4*cm col_widths = [full*0.34, full*0.66] data = [[Paragraph(str(r[0]), body_bold), Paragraph(str(r[1]), body)] for r in rows] tbl = Table(data, colWidths=col_widths) style = [ ("BACKGROUND", (0,0), (0,-1), HexColor("#f0f4ff")), ("BACKGROUND", (1,0), (1,-1), WHITE), ("LINEBELOW", (0,0), (-1,-2), 0.3, HexColor("#cccccc")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 7), ("RIGHTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "TOP"), ] for i in range(0, len(rows), 2): style.append(("BACKGROUND", (1,i), (1,i), HexColor("#fafafa"))) tbl.setStyle(TableStyle(style)) return tbl def chelation_table(rows): """Styled chelation table with header row.""" hdr = [Paragraph(c, ParagraphStyle("th", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER)) for c in rows[0]] data = [hdr] for r in rows[1:]: data.append([Paragraph(str(c), small) for c in r]) full = W - 4*cm tbl = Table(data, colWidths=[full*0.22, full*0.16, full*0.30, full*0.32]) style = [ ("BACKGROUND", (0,0), (-1,0), ACCENT_TEAL), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.3, HexColor("#bbbbbb")), ("VALIGN", (0,0), (-1,-1), "TOP"), ] for i in range(1, len(rows), 2): style.append(("BACKGROUND", (0,i), (-1,i), TABLE_ALT)) tbl.setStyle(TableStyle(style)) return tbl # ──────────────────────────────────────────────────────────────────────────── # Build story # ──────────────────────────────────────────────────────────────────────────── story = [] # ── COVER ──────────────────────────────────────────────────────────────────── cover_data = [[Paragraph("HEAVY METAL POISONING", title_style)], [Paragraph("Quick Clinical Reference Guide", subtitle_style)], [Spacer(1, 6)], [Paragraph("Signs Β· Diagnostics Β· Chelation Therapy", subtitle_style)]] cover_tbl = Table(cover_data, colWidths=[W - 4*cm]) cover_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), DARK_NAVY), ("TOPPADDING", (0,0), (-1,-1), 16), ("BOTTOMPADDING",(0,0), (-1,-1), 16), ("LEFTPADDING", (0,0), (-1,-1), 20), ("RIGHTPADDING", (0,0), (-1,-1), 20), ("ROUNDEDCORNERS", [6]), ])) story.append(cover_tbl) story.append(Spacer(1, 10)) # Disclaimer box disc = Table([[Paragraph( "FOR EDUCATIONAL PURPOSES ONLY - Always consult clinical toxicology and " "follow local protocols for actual patient management.", warning_style)]], colWidths=[W - 4*cm]) disc.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), YELLOW_BG), ("LINEABOVENEXT",(0,0), (-1,-1), 1, ORANGE), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING",(0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 12), ("RIGHTPADDING", (0,0), (-1,-1), 12), ("BOX", (0,0), (-1,-1), 1.5, ORANGE), ("ROUNDEDCORNERS", [4]), ])) story.append(disc) story.append(Spacer(1, 14)) # ── OVERVIEW TABLE ─────────────────────────────────────────────────────────── story.append(banner(" OVERVIEW: 6 KEY HEAVY METALS AT A GLANCE")) story.append(Spacer(1, 6)) ov_hdr = [Paragraph(c, ParagraphStyle("ovh", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER)) for c in ["Metal", "Classic Exposure", "Key Neuro Sign", "Key Systemic Sign", "First-Line Antidote"]] ov_rows = [ ["Mercury (Hg)", "Labs, thermometers, fish", "Intentional tremor, ataxia", "Proteinuria, metallic taste", "DMSA / DMPS"], ["Lead (Pb)", "Old paint, pipes, dust", "Encephalopathy (children)", "Basophilic stippling, anemia", "CaNa2EDTA / DMSA"], ["Arsenic (As)", "Pesticides, well water", "Peripheral neuropathy", "Rain-drop pigment, Mees lines", "DMSA / BAL"], ["Thallium (Tl)", "Rodenticides, industry", "Painful neuropathy, alopecia", "Cardiovascular collapse", "Prussian blue"], ["Iron (Fe)", "Iron tablets (paeds)", "Lethargy, coma (late)", "GI hemorrhage, anion gap", "Deferoxamine"], ["Cadmium (Cd)", "Welding, batteries, smoking", "Cognitive decline", "Renal tubular (Fanconi)", "Supportive (chelation limited)"], ] full = W - 4*cm ov_data = [ov_hdr] + [[Paragraph(c, small) for c in r] for r in ov_rows] ov_tbl = Table(ov_data, colWidths=[full*0.14, full*0.20, full*0.21, full*0.24, full*0.21]) ov_style = [ ("BACKGROUND", (0,0), (-1,0), MED_BLUE), ("GRID", (0,0), (-1,-1), 0.3, HexColor("#bbbbbb")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("VALIGN", (0,0), (-1,-1), "TOP"), ("BACKGROUND", (0,1), (-1,1), LIGHT_BLUE), ("BACKGROUND", (0,3), (-1,3), LIGHT_BLUE), ("BACKGROUND", (0,5), (-1,5), LIGHT_BLUE), ] ov_tbl.setStyle(TableStyle(ov_style)) story.append(ov_tbl) story.append(Spacer(1, 14)) # ────────────────────────────────────────────────────────────────────────────── # Helper: build one metal section # ────────────────────────────────────────────────────────────────────────────── def metal_section(symbol, name, color, exposure, sources, acute_signs, chronic_signs, lab_tests, antidotes, pearls): s = [] s.append(metal_header(symbol, name, color)) s.append(Spacer(1, 5)) full = W - 4*cm left_w = full * 0.48 right_w = full * 0.48 gap = full * 0.04 # Left column left = [] left.append(Paragraph("SOURCES / EXPOSURE", ParagraphStyle("subhdr", fontSize=8.5, textColor=color, fontName="Helvetica-Bold"))) left.append(Paragraph(sources, body)) left.append(Spacer(1, 4)) left.append(Paragraph("ACUTE SIGNS", ParagraphStyle("subhdr", fontSize=8.5, textColor=RED_ALERT, fontName="Helvetica-Bold"))) for item in acute_signs: left.append(Paragraph(f"β€’ {item}", body)) left.append(Spacer(1, 4)) left.append(Paragraph("CHRONIC SIGNS", ParagraphStyle("subhdr", fontSize=8.5, textColor=ORANGE, fontName="Helvetica-Bold"))) for item in chronic_signs: left.append(Paragraph(f"β€’ {item}", body)) # Right column right = [] right.append(Paragraph("DIAGNOSTIC TESTS", ParagraphStyle("subhdr", fontSize=8.5, textColor=ACCENT_TEAL, fontName="Helvetica-Bold"))) for item in lab_tests: right.append(Paragraph(f"β€’ {item}", body)) right.append(Spacer(1, 4)) right.append(Paragraph("TREATMENT / CHELATION", ParagraphStyle("subhdr", fontSize=8.5, textColor=GREEN, fontName="Helvetica-Bold"))) for item in antidotes: right.append(Paragraph(f"β€’ {item}", body)) right.append(Spacer(1, 4)) right.append(Paragraph("CLINICAL PEARLS", ParagraphStyle("subhdr", fontSize=8.5, textColor=MED_BLUE, fontName="Helvetica-Bold"))) for item in pearls: right.append(Paragraph(f"β˜… {item}", body)) # Pack into nested tables left_tbl = Table([[p] for p in left], colWidths=[left_w]) right_tbl = Table([[p] for p in right], colWidths=[right_w]) for t in [left_tbl, right_tbl]: t.setStyle(TableStyle([ ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING",(0,0), (-1,-1), 2), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ])) two_col = Table([[left_tbl, Spacer(gap, 1), right_tbl]], colWidths=[left_w, gap, right_w]) two_col.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING",(0,0), (-1,-1), 0), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ])) outer = Table([[two_col]], colWidths=[full]) outer.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), WHITE), ("BOX", (0,0), (-1,-1), 0.8, color), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING",(0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [4]), ])) s.append(outer) s.append(Spacer(1, 10)) return s # ── MERCURY ─────────────────────────────────────────────────────────────────── story += metal_section( "Hg", "MERCURY POISONING", HexColor("#2980b9"), exposure="Inorganic/elemental: labs, thermometers, dental amalgam. Organic (methylmercury): contaminated fish (tuna, swordfish), Minamata disease.", sources="Inorganic/elemental: labs, thermometers, dental amalgam. Organic (methylmercury): contaminated fish, Minamata disease.", acute_signs=[ "Nausea, vomiting, abdominal pain", "Pneumonitis (inhaled vapour)", "Acute tubular necrosis", "Pulmonary oedema", ], chronic_signs=[ "Intentional (cerebellar) tremor - classic", "Erethism: shyness, irritability, memory loss", "Acrodynia (pink disease) - children: pink, painful extremities", "Metallic taste, salivation, gingivostomatitis", "Proteinuria, nephrotic syndrome", "Wide-based ataxic gait", ], lab_tests=[ "24-hr urine mercury (>20 ug/L abnormal)", "Blood mercury (>10 ug/L abnormal)", "Hair/nail mercury (chronic exposure)", "Urinalysis: proteinuria", "MRI brain: cerebellar atrophy (chronic)", "Note: standard tox screen NEGATIVE", ], antidotes=[ "DMSA (Succimer) - oral, first-line mild/mod", "DMPS (Unithiol) - IV, severe cases", "BAL (Dimercaprol) - IM, older agent", "Remove from exposure immediately", "Haemodialysis if severe renal failure", ], pearls=[ "'Mad Hatter' - hatmakers used Hg nitrate to cure felt", "Organic Hg crosses placenta; fetal neurotoxicity", "Vapour is colourless/odourless - invisible exposure", "Chelation improves systemic but not neurological damage", ] ) # ── LEAD ────────────────────────────────────────────────────────────────────── story += metal_section( "Pb", "LEAD POISONING (PLUMBISM)", HexColor("#8e44ad"), exposure="Old paint (<1978 in US), lead pipes, leaded gasoline residue, occupational (battery mfg, mining), imported ceramics, some traditional remedies.", sources="Old paint (<1978 in US), lead pipes, leaded gasoline residue, occupational (battery mfg, mining), imported ceramics.", acute_signs=[ "Acute encephalopathy: seizures, coma (children)", "Lead colic: severe crampy abdominal pain", "Vomiting, constipation", "Headache, irritability", ], chronic_signs=[ "Burton's line: blue-black gingival line", "Basophilic stippling on peripheral blood smear", "Microcytic hypochromic anaemia", "Peripheral motor neuropathy (wrist/foot drop)", "Cognitive impairment, IQ loss (children)", "Nephropathy, hypertension, gout", "Radiopaque bands in long bones on X-ray", ], lab_tests=[ "Blood lead level (BLL) - gold standard", "BLL >5 ug/dL: action threshold (children)", "BLL >45 ug/dL: chelation threshold", "Peripheral smear: basophilic stippling", "FEP / ZPP elevated (inhibits haem synthesis)", "ALA in urine elevated", "X-ray: lead lines at metaphyses (children)", ], antidotes=[ "BLL >45: DMSA (oral) first-line", "Encephalopathy: BAL + CaNa2EDTA (IV)", "CaNa2EDTA (EDTA) alone can increase CNS Pb", "Never use EDTA alone without BAL if encephalopathic", "Identify and remove source (environmental remediation)", "Iron-deficiency tx: iron increases Pb absorption", ], pearls=[ "Lead inhibits both ALA dehydratase and ferrochelatase", "Children absorb 50% of ingested Pb vs 10% in adults", "Abdominal X-ray may show ingested paint chips", "Tetraethyl lead (gasoline) causes psychosis, not anaemia", ] ) story.append(PageBreak()) # ── ARSENIC ─────────────────────────────────────────────────────────────────── story += metal_section( "As", "ARSENIC POISONING", HexColor("#c0392b"), exposure="Contaminated well water (Bangladesh, India), pesticides/herbicides, wood preservatives (CCA), seafood (organic - non-toxic), smelting, traditional remedies.", sources="Contaminated well water, pesticides, wood preservatives (CCA), smelting, Fowler's solution (historical medicine).", acute_signs=[ "Profuse 'rice-water' diarrhoea", "Severe vomiting, garlic odour on breath", "Burning pain mouth to abdomen", "Cardiovascular collapse, QT prolongation", "Haemolysis, renal failure", ], chronic_signs=[ "Mees lines: transverse white lines on nails", "Rain-drop pigmentation (hyper + hypopigmentation)", "Keratosis (palms and soles)", "Peripheral sensorimotor neuropathy (stocking-glove)", "Skin cancers (squamous cell carcinoma, Bowen's disease)", "Blackfoot disease (peripheral vascular disease)", "Pancytopenia", ], lab_tests=[ "24-hr urine arsenic (>50 ug/L: concern)", "Hair/nail arsenic - timeline of exposure", "Blood arsenic (acute only; clears fast)", "Peripheral smear: haemolysis markers", "ECG: QTc prolongation", "LFTs: hepatitis pattern", "Skin biopsy if keratosis present", ], antidotes=[ "DMSA (Succimer) - oral, mild-mod", "BAL (Dimercaprol) - IM, severe/acute", "DMPS - IV, preferred in some centres", "Aggressive IV fluids for GI losses", "Haemodialysis if renal failure", "Remove contaminated water source", ], pearls=[ "Mees lines appear ~4-6 wks after acute poisoning", "Arsenic trioxide used therapeutically in APL (leukaemia)", "Historical use as 'inheritance powder' (poison of kings)", "Seafood arsenic = arsenobetaine (organic, non-toxic - avoid testing after seafood)", ] ) # ── THALLIUM ────────────────────────────────────────────────────────────────── story += metal_section( "Tl", "THALLIUM POISONING", HexColor("#6c3483"), exposure="Rodenticides (historical; banned in many countries), industrial use (semiconductors, optics), contaminated herbal remedies, homicidal poisoning.", sources="Old rodenticides, industrial semiconductor manufacturing, contaminated traditional remedies.", acute_signs=[ "Severe gastrointestinal: N/V, diarrhoea, pain", "Painful ascending peripheral neuropathy (days 1-4)", "CNS: confusion, cranial nerve palsies", "Cardiovascular collapse (severe cases)", ], chronic_signs=[ "ALOPECIA - hallmark; occurs 2-4 weeks post exposure", "Total body hair loss (scalp, eyebrow, body)", "Mees lines (nails)", "Painful sensorimotor neuropathy persists", "Optic nerve atrophy - vision loss", "Psychosis, dementia", ], lab_tests=[ "Urine thallium (>5 ug/L: toxic)", "Blood thallium", "Hair analysis - timeline", "ECG: arrhythmias", "Note: alopecia pattern is diagnostically striking", "Hair microscopy: Pohl-Pinkus marks", ], antidotes=[ "PRUSSIAN BLUE (ferric hexacyanoferrate) - specific antidote", "Dose: 250 mg/kg/day oral in 2-4 divided doses", "Prussian blue interrupts enterohepatic recirculation", "Multiple-dose activated charcoal adjunct", "Haemodialysis or haemoperfusion in severe cases", "Supportive: pain management for neuropathy", ], pearls=[ "Alopecia + painful neuropathy = think thallium first", "Thallium mimics potassium intracellularly", "Infamous as homicidal poison - colourless, tasteless", "GBS (Guillain-Barre) can be misdiagnosed initially", ] ) story.append(PageBreak()) # ── IRON ────────────────────────────────────────────────────────────────────── story += metal_section( "Fe", "IRON POISONING", HexColor("#d35400"), exposure="Paediatric accidental ingestion of iron supplements/prenatal vitamins. Most common cause of paediatric poisoning death.", sources="Paediatric accidental ingestion of iron supplements, prenatal vitamins, multivitamins.", acute_signs=[ "Phase 1 (0-6h): GI haemorrhage, vomiting, diarrhoea", "Phase 2 (6-12h): Latent period - apparent improvement", "Phase 3 (12-24h): Shock, lactic acidosis, coma", "Phase 4 (days 2-3): Liver failure (hepatotoxicity)", "Phase 5 (weeks): GI strictures, pyloric stenosis", ], chronic_signs=[ "Chronic iron overload (haemochromatosis, transfusion)", "Bronze diabetes: skin pigmentation + DM + cirrhosis", "Cardiomyopathy", "Hepatic fibrosis, cirrhosis", "Hypogonadism (pituitary iron deposition)", ], lab_tests=[ "Serum iron (>350 ug/dL: toxic; >500: severe)", "TIBC - saturation >100% suggests toxicity", "Serum ferritin (unreliable acutely)", "ABG: anion gap metabolic acidosis", "Abdominal X-ray: radiopaque tablets", "Deferoxamine challenge test (urine turns vin-rose)", "LFTs, PT/INR, glucose, creatinine", ], antidotes=[ "DEFEROXAMINE - IV infusion, chelates free iron", "Indication: serum Fe >500, or severe symptoms", "Rate: 15 mg/kg/hr IV (max 6g/day)", "Vin-rose urine = iron being excreted", "Whole bowel irrigation if tablets on X-ray", "Avoid emesis (corrosive to GI tract)", ], pearls=[ "Serum iron, NOT TIBC ratio, is best acute marker", "Latent phase 2 is deceptive - do not discharge", "Deferoxamine turns urine salmon/vin-rose colour (test)", "1 paediatric prenatal vitamin = adult toxic dose for 10 kg child", ] ) # ── CADMIUM ─────────────────────────────────────────────────────────────────── story += metal_section( "Cd", "CADMIUM POISONING", HexColor("#16a085"), exposure="Cigarette smoke (primary source), welding/battery manufacturing (NiCd), contaminated rice/crops in industrial areas (Itai-Itai disease, Japan).", sources="Cigarette smoke, welding/battery manufacturing, contaminated crops near smelters.", acute_signs=[ "Inhaled: chemical pneumonitis, pulmonary oedema", "Ingested: nausea, vomiting, abdominal cramps", "Headache, dizziness", "Metallic/sweet taste", ], chronic_signs=[ "Itai-Itai disease: severe bone pain, osteomalacia", "Fanconi syndrome (proximal renal tubular dysfunction)", "Glucosuria, phosphaturia, aminoaciduria, proteinuria", "Emphysema (smokers - pulmonary)", "Hypertension", "Lung/prostate cancer risk (IARC Group 1 carcinogen)", "Anosmia", ], lab_tests=[ "Urine cadmium (>2 ug/g creatinine: concern)", "Blood cadmium (>5 ug/L: toxic)", "Urine beta-2 microglobulin (tubular damage marker)", "Urine NGAL, NAG enzyme", "Urine glucose, phosphate, amino acids (Fanconi)", "DEXA scan: osteomalacia", "Pulmonary function tests if inhaled", ], antidotes=[ "NO effective chelation therapy available", "DMSA/EDTA may redistribute cadmium - potentially harmful", "Management: supportive only", "Remove from exposure", "Calcium and vitamin D for bone disease", "Renal replacement therapy if required", "Smoking cessation (most important modifiable source)", ], pearls=[ "Itai-Itai = 'it hurts it hurts' in Japanese (1950s epidemic)", "Cadmium half-life in body = 10-30 YEARS (bone/kidney)", "No safe chelator - unlike most heavy metals", "Beta-2 microglobulin is the earliest biomarker of renal injury", ] ) story.append(PageBreak()) # ── CHELATION SUMMARY TABLE ─────────────────────────────────────────────────── story.append(banner(" CHELATION THERAPY QUICK REFERENCE", color=ACCENT_TEAL)) story.append(Spacer(1, 6)) chel_rows = [ ["Agent", "Route", "Metals Treated", "Key Notes / Cautions"], ["DMSA\n(Succimer)", "Oral", "Pb, Hg, As, Cd (limited)", "First-line for most. Fewer side-effects. Monitor LFTs/CBC. Safe in children."], ["DMPS\n(Unithiol)", "IV / Oral", "Hg (preferred IV), As, Pb", "Not FDA-approved in US. Widely used in Europe. Rapid IV administration risk."], ["BAL\n(Dimercaprol)", "IM only", "As, Hg, Pb (+ EDTA), Au", "Peanut oil vehicle - avoid in peanut allergy. Painful injections. Avoid in hepatic failure."], ["CaNa2EDTA", "IV / IM", "Lead (primary)", "NEVER use alone in Pb encephalopathy (use BAL first). Risk of nephrotoxicity."], ["Deferoxamine", "IV / IM / SC", "Iron, Aluminium", "Turns urine vin-rose. Risk of ARDS with high dose. Yersinia infection risk."], ["Prussian Blue", "Oral", "Thallium, Caesium-137", "Only antidote for thallium. Interrupts enterohepatic recycling. Turns stool blue."], ["D-Penicillamine", "Oral", "Cu (Wilson's), Pb, Hg", "Also used in Wilson's disease and RA. Risk of SLE-like syndrome, nephrotic syndrome."], ] story.append(chelation_table(chel_rows)) story.append(Spacer(1, 12)) # ── MEMORY AIDS ─────────────────────────────────────────────────────────────── story.append(banner(" MNEMONICS & MEMORY AIDS", color=MED_BLUE)) story.append(Spacer(1, 6)) memo_data = [ [ Paragraph("Lead (Pb) - LEAD", ParagraphStyle("mn", fontSize=9, textColor=HexColor("#8e44ad"), fontName="Helvetica-Bold")), Paragraph("Lines (Burton's gingival)\nEncephalopathy\nAnaemia (microcytic)\nDropping (wrist/foot drop)", body), ], [ Paragraph("Mercury (Hg) - 3 Ts", ParagraphStyle("mn", fontSize=9, textColor=HexColor("#2980b9"), fontName="Helvetica-Bold")), Paragraph("Tremor (intentional cerebellar)\nTimidity/Temper (erethism)\nTaste (metallic)", body), ], [ Paragraph("Arsenic (As) - ABCDE", ParagraphStyle("mn", fontSize=9, textColor=RED_ALERT, fontName="Helvetica-Bold")), Paragraph("Alopecia / Abdominal pain\nBowen's disease (skin)\nCancer (skin, lung, bladder)\nDiarrhoea (rice-water)\nEncephalopathy / nEuropathy", body), ], [ Paragraph("Thallium (Tl)", ParagraphStyle("mn", fontSize=9, textColor=HexColor("#6c3483"), fontName="Helvetica-Bold")), Paragraph("HAIR LOSS = think Thallium\nPainful neuropathy precedes alopecia\nPrussian Blue is the ONLY antidote", body), ], ] memo_tbl = Table(memo_data, colWidths=[(W-4*cm)*0.25, (W-4*cm)*0.75]) memo_tbl.setStyle(TableStyle([ ("GRID", (0,0), (-1,-1), 0.3, HexColor("#cccccc")), ("BACKGROUND", (0,0), (0,-1), HexColor("#f8f4ff")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING",(0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(memo_tbl) story.append(Spacer(1, 12)) # ── CRITICAL LAB VALUES ─────────────────────────────────────────────────────── story.append(banner(" CRITICAL ACTION THRESHOLDS", color=RED_ALERT)) story.append(Spacer(1, 6)) thresh_hdr = [Paragraph(c, ParagraphStyle("th2", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER)) for c in ["Metal", "Test", "Action Threshold", "Urgent Threshold", "Response"]] thresh_rows = [ ["Lead", "Blood lead (BLL)", ">5 ug/dL (child)", ">70 ug/dL", "Chelation + env. investigation"], ["Mercury", "Urine Hg (24h)", ">20 ug/L", ">100 ug/L", "Remove exposure + chelate"], ["Arsenic", "Urine As (24h)", ">50 ug/L", ">200 ug/L", "Chelation (DMSA or BAL)"], ["Thallium", "Urine Tl", ">5 ug/L", ">200 ug/L", "Prussian blue immediately"], ["Iron", "Serum Fe", ">350 ug/dL", ">500 ug/dL", "Deferoxamine IV infusion"], ["Cadmium", "Urine Cd", ">2 ug/g creat.", ">5 ug/L blood","Supportive; remove exposure"], ] thr_data = [thresh_hdr] + [[Paragraph(c, small) for c in r] for r in thresh_rows] fw = W - 4*cm thr_tbl = Table(thr_data, colWidths=[fw*0.12, fw*0.18, fw*0.20, fw*0.18, fw*0.32]) thr_style = [ ("BACKGROUND", (0,0), (-1,0), RED_ALERT), ("GRID", (0,0), (-1,-1), 0.3, HexColor("#bbbbbb")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("VALIGN", (0,0), (-1,-1), "TOP"), ] for i in range(1, len(thresh_rows)+1, 2): thr_style.append(("BACKGROUND", (0,i), (-1,i), HexColor("#fff0f0"))) thr_tbl.setStyle(TableStyle(thr_style)) story.append(thr_tbl) story.append(Spacer(1, 14)) # Footer note story.append(HRFlowable(width=W-4*cm, thickness=0.5, color=HexColor("#cccccc"))) story.append(Spacer(1, 4)) story.append(Paragraph( "Reference: Clinical Toxicology (Dart), Goldfrank's Toxicologic Emergencies, CDC Lead Guidelines | " "Created July 2026 | For educational use only - not a substitute for clinical judgment", footer_style )) # ── BUILD ───────────────────────────────────────────────────────────────────── out_path = "/home/daytona/workspace/heavy-metal-guide/Heavy_Metal_Poisoning_Reference.pdf" doc = SimpleDocTemplate( out_path, pagesize=A4, leftMargin=2*cm, rightMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm, title="Heavy Metal Poisoning Quick Reference", author="Orris Medical Reference" ) def add_footer(canvas, doc): canvas.saveState() canvas.setFont("Helvetica", 7) canvas.setFillColor(HexColor("#aaaaaa")) canvas.drawCentredString(W/2, 1.2*cm, f"Heavy Metal Poisoning Quick Reference | Page {doc.page}") canvas.restoreState() doc.build(story, onFirstPage=add_footer, onLaterPages=add_footer) print(f"PDF saved to: {out_path}") PYEOF python3 /home/daytona/workspace/heavy-metal-guide/build_pdf.py

Your PDF reference guide is ready! Here's your download link:

Heavy Metal Poisoning Reference

PDF Document Β· PDF


What's inside (4 pages):
  • Overview table - all 6 metals at a glance (exposure, key signs, antidote)
  • Individual metal sections for each of the 6:
    • Mercury (Hg)
    • Lead (Pb)
    • Arsenic (As)
    • Thallium (Tl)
    • Iron (Fe)
    • Cadmium (Cd)
  • Each section covers: sources, acute signs, chronic signs, diagnostic tests, chelation/treatment, and clinical pearls
  • Chelation therapy table - all agents (DMSA, DMPS, BAL, EDTA, Deferoxamine, Prussian Blue, D-Penicillamine) with routes, metals treated, and cautions
  • Mnemonics for Lead, Mercury, Arsenic, and Thallium
  • Critical action thresholds - lab values that trigger treatment
This is a shared conversation. Sign in to Orris to start your own chat.