Giveme an mysterious medical cas3 to solve
| Finding | Detail |
|---|---|
| Temp | 37.1Β°C (normal) |
| HR | 102 bpm (mildly elevated) |
| BP | 138/88 mmHg (mildly elevated) |
| Neuro | Confused, GCS 13/15 |
| Tremor | Coarse, bilateral, intentional tremor |
| Gait | Wide-based, ataxic |
| Mouth | Erythematous gingiva, foul metallic odor |
| Skin | Diffuse fine rash on trunk |
| Eyes | Mild conjunctival injection |
| Test | Result | Reference |
|---|---|---|
| CBC | Normal | - |
| CMP | Normal | - |
| Liver enzymes | AST/ALT mildly elevated (2x ULN) | - |
| Creatinine | 1.6 mg/dL | 0.7-1.2 |
| Urinalysis | Proteinuria (2+) | None |
| Blood cultures | Pending | - |
| TSH | Normal | - |
| Ammonia | Normal | - |
| Urine toxicology | Negative (standard screen) | - |
| CT head | No acute intracranial pathology | - |
Cyanide
| Clue in the Case | Cyanide Would Show... | What We Actually See |
|---|---|---|
| Onset | Acute (minutes to hours) β cyanide is fast-acting | Subacute over 3 weeks |
| Mechanism | Blocks cytochrome c oxidase β cellular hypoxia | Marcus has NO hypoxic picture |
| Cardiovascular | Severe hypotension, bradycardia, cardiovascular collapse | BP mildly elevated, HR only mildly up |
| Metabolic | Profound lactic acidosis, cherry-red skin | Normal labs, no acidosis |
| Kidneys | Not a classic feature | Marcus has proteinuria + elevated creatinine |
| Gingival changes | Not a feature | Marcus has erythematous gingiva |
| Tremor | Not a hallmark | Marcus has coarse bilateral intentional tremor + ataxia |
β 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)
Give me theanswer
| Test | Expected Finding |
|---|---|
| 24-hour urine mercury level | Markedly elevated (normal < 20 Β΅g/L) |
| Blood mercury level | Elevated (normal < 10 Β΅g/L) |
| Hair/nail mercury | Elevated (reflects chronic exposure) |
| Renal biopsy (if needed) | Membranous nephropathy pattern |
| MRI brain | Cerebellar 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!
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 β β
ββββββββββββββββββββ©βββββββββββββββββββ©ββββββββββββββββββββ
| Agent | Route | Notes |
|---|---|---|
| DMSA (Succimer) | Oral | First-line for mild-moderate cases |
| DMPS (Unithiol) | IV | Preferred for severe cases |
| BAL (Dimercaprol) | IM | Older agent, used if others unavailable |
Chelators work by binding mercury and allowing excretion in urine. Monitor renal function closely during treatment.
| Person | Suspected Mercury Link |
|---|---|
| Mad Hatters (1800s) | Used mercury nitrate to cure felt for hats - developed tremor, psychosis ("hatter's shakes") |
| Beethoven | Hair analysis showed mercury levels 100x normal - likely from syphilis treatment with mercurous chloride |
| Isaac Newton | Hair samples showed extreme mercury - from his chemistry experiments |
| Napoleon Bonaparte | Disputed - hair samples showed elevated mercury, possibly from wallpaper pigment |
Create a quick reference guide on heavy metal poisoning signs and treatments
What format would you like the reference guide in?
reportlab to build a well-formatted, multi-page PDF reference guide. Let me create it now.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
Heavy Metal Poisoning Reference
PDF Document Β· PDF