Hey, Horace. Can you please explain me that, uh, essentials of FMT? नारायण रेड्डी, 35th edition book, अ, chapter 25, Agricultural Poisons, page number 395 to page number 401 in detail and explain each and everything so I can learn it and memorize it for my exams and write-- also write a 10 marker question. Give me an warnings, give me tricks to learn the, uh, things and I will ace my exams through it. Explain it to me like I am a small child and I do not understand things properly. So, explain it to me. बातचीत की आवाज़

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
I now have all the key content from Chapter 25 - Agricultural Poisons. Now let me compile a comprehensive, child-friendly, exam-oriented explanation with memory tricks and a 10-marker question.

🌾 Chapter 25: Agricultural Poisons (FMT - Narayan Reddy, 36th Ed.) Pages 395-401

Note: The library has the 36th edition (2026), which is the latest. Your 35th edition content is nearly identical - all key exam facts match.

🧠 First, understand the BIG PICTURE

Imagine a farmer spraying his fields. The chemicals he uses to kill insects and weeds - if a human swallows them, inhales them, or they touch the skin - these can KILL. Chapter 25 is all about these farming chemicals as poisons.
There are 4 main agricultural poisons you must know:
#PoisonWhat it isKey word
1Organophosphorus (OP)Insecticide"AChE killer"
2CarbamatesInsecticide"Reversible AChE killer"
3ChloratesWeedkiller"MetHb + hemolysis"
4ParaquatHerbicide"Lung destroyer"
5Aluminum Phosphide (ALP)Grain preservative"Garlic smell + no antidote"

🔴 PART 1: ORGANOPHOSPHORUS (OP) POISONS - THE MOST IMPORTANT!

🎯 Think of it like this:

Imagine a river called "Acetylcholine River." Normally, a cleaner called AChE (Acetylcholinesterase) cleans the river. OP compounds DESTROY the cleaner so acetylcholine keeps flooding everywhere. The body goes into overdrive!

Compounds to Know:

Alkyl phosphates: HETP, TEPP (Tetron), OMPA, Malathion (Kill bug), Dimefox, Sulfotepp
Aryl phosphates: Parathion (Nitrostigmine/Follidol - most common in India), Paraoxon, Methyl-parathion (Metacide), Diazinon
Memory trick for Alkyl vs Aryl: "Alkyl = Actively toxic already. Aryl = Activated by liver first" (Aryl phosphates need liver activation by cytochrome P450 to become toxic!)

Absorption:

  • Skin, inhalation, mucous membranes, GI tract - absorbed everywhere!
  • Mixed with solvent called "Aromax" - causes kerosene-like smell in stomach/vomit

⚡ Mechanism of Action (THE HEART of OP poisoning):

Normally:
Acetylcholine → AChE → Choline + Acetic Acid (cleaned up!)

In OP poisoning:
Acetylcholine → AChE is BLOCKED by OP → Acetylcholine BUILDS UP everywhere!
OP binds to AChE irreversibly (this is the exam favorite!)
This causes TWO types of effects:
Effect TypeReceptorSymptomsMemory Trick
MUSCARINIC (glands, smooth muscle)M receptorsSLUDGESalivation, Lacrimation, Urination, Defecation, GI cramps, Emesis
NICOTINIC (skeletal muscle, ganglia)N receptorsMATCHMuscle fasciculations, Adrenal stimulation, Tachycardia initially, Cramps, Hypertension
CNSBothAnxiety, seizures, coma
🌟 SLUDGE Trick: Salivation, Lacrimation, Urination, Defecation, GI cramps, Emesis - these are all muscarinic symptoms. Add to that DUMBELS: Defecation/Diarrhea, Urination, Miosis, Bradycardia/Bronchospasm/Bronchorrhea, Emesis, Lacrimation, Salivation/Sweating.

Signs on Examination:

  • Miosis (pinpoint pupils) - classic sign
  • Excessive secretions (saliva, tears, sweat)
  • Bradycardia
  • Muscle twitching/fasciculations
  • Garlic or kerosene-like odor from body

Diagnosis Confirmation:

Two methods:
  1. Atropine test - Give 2 mg atropine IV. In a NORMAL person, this causes dry mouth, racing heart (atropinization). In OP poisoning, symptoms IMPROVE without atropinization!
  2. Cholinesterase levels in blood:
    • RBC AChE (true cholinesterase) - more specific
    • Plasma pseudocholinesterase - more sensitive, falls FIRST
    • RBC cholinesterase < 50% of normal = poisoning confirmed
    • Plasma returns to normal in 7-10 days; untreated cases need 4 weeks
🌟 Exam trick: "Plasma falls first, but RBC is more accurate for diagnosis"

Post-Mortem Findings:

  • Kerosene/garlic-like smell
  • Pinpoint pupils
  • Cyanosis
  • Congestion of organs
  • Froth in airways
  • Stomach contents smell like kerosene

💊 TREATMENT (Very important for exams!):

Step 1 - Remove the patient from exposure
  • Remove clothes, wash skin with soap and water, then ethanol + water or alkaline solution
  • If eye involved: irrigate conjunctiva
Step 2 - Airway management
  • Keep airway open; tracheostomy may be needed
Step 3 - Stomach wash (if ingested)
  • Use 1:5,000 potassium permanganate solution
  • Give activated charcoal 1 g/kg
Step 4 - SPECIFIC ANTIDOTES (2 drugs - MUST memorize!)
The two antidotes - remember "A and P"
A = ATROPINE (first and main drug)
  • Blocks muscarinic effects
  • NO effect on nicotinic actions
  • Initial dose: 2-4 mg IV (peds: 0.05 mg/kg)
  • Double every 10-15 minutes until secretions dry
  • Average need: 40 mg/day, but can go up to 2,000 mg/day in severe cases!
  • End point: dry secretions (NOT pupil size!)
  • Avoid if HR > 140 bpm
P = PAM (Pralidoxime / 2-PAM)
  • Reactivates AChE - the ONLY drug that reverses the actual block!
  • Must be given EARLY (before "aging" occurs - irreversible binding after ~24-48 hrs)
  • Dose: 1-2 g IV slowly over 15-30 min (peds: 20-40 mg/kg)
  • Repeat after 1-2 hours if needed
  • Reduces nicotinic symptoms (muscle fasciculations)
AVOID these drugs: Physostigmine, edrophonium chloride, succinylcholine (they worsen the situation!)

🔵 PART 2: CARBAMATES

Easy comparison with OP:

FeatureOPCarbamates
MechanismIrreversible AChE inhibitionReversible AChE inhibition
Treatment with PAMYesNOT needed (usually avoided)
SeverityMore severeLess severe, self-limiting
ExamplesParathion, MalathionCarbaryl (Sevin), Aldicarb, Carbofuran
🌟 Memory trick: "Carbamates = Can reverse = Choose no PAM"
Carbamates cause the same SLUDGE symptoms but milder and shorter. Treatment is mainly atropine + supportive care.

🟡 PART 3: CHLORATES (Weedkillers)

Think of chlorates as "blood cell destroyers."
Used as: Weed killers, match heads, fireworks
Looks like: Sodium chlorate resembles table sugar (this is important - accidental ingestion!)
Fatal dose: ~20-30 g

Mechanism:

  • Powerful oxidizing agents - attack ALL body cells
  • React with thiol groups on RBCs → HEMOLYSIS
  • Oxidize hemoglobin → METHEMOGLOBIN (can't carry oxygen!)
  • Potent nephrotoxin (kidney damage)
  • Hemolysis releases K⁺ → hyperkalemia → can be fatal!

Symptoms (onset 1-4 hours):

Nausea, vomiting, diarrhea, abdominal pain + shallow breathing + blood/protein/hemoglobin in urine (hematuria, proteinuria, hemoglobinuria) + oliguria/anuria + renal failure + hemolysis + jaundice + methemoglobinemia (>40%) + agitation + convulsions → death due to renal failure
On skin/eyes: irritation, redness, burns, ulcers

Treatment:

  1. Stomach wash
  2. Methylene blue - 25 mL of 1% solution IV (treats methemoglobinemia)
  3. Sodium thiosulphate - 2-5 g in 200 mL of 5% sodium bicarbonate (drink)
  4. Ascorbic acid - 1 g every 4 hours (drink or slow IV)
  5. Peritoneal dialysis or hemodialysis (for renal failure)
  6. Symptomatic management
🌟 Memory trick for chlorate treatment: "WASH-MB-STA" Wash stomach → Methylene Blue → Sodium Thiosulphate → Ascorbic acid → dialysis

🟠 PART 4: PARAQUAT - "The Lung Killer"

Paraquat is a bipyridylium herbicide (weed killer). It is the most dangerous herbicide.
Trade names: "Gramoxone" (brownish concentrated liquid, 10-30% strength) - for farming; "Weedol" (brown granules, ~5%) - for horticultural use
Key fact: Sprayed on weeds BEFORE planting. Becomes inactivated on contact with soil. So workers spraying it are at risk, but the food grown in that soil is safe.
Route: Mainly ingestion (fatalities); inhalational deaths during spraying are very rare.

Mechanism (EXAM FAVOURITE):

Paraquat → NADPH-dependent reduction → FREE RADICALS
Free radicals + O₂ → Superoxide + Hydroxyl radicals (OH)
→ Disrupts cell structure and causes cell death
The lungs concentrate paraquat via a specific polyamine uptake system, making them the #1 target.

Symptoms:

Phase 1 (early, 24-48 hrs): Nausea, vomiting, diarrhea, abdominal pain, ulceration of mouth/throat (from corrosive action)
Phase 2 (days 3-14): ARDS (Acute Respiratory Distress Syndrome), pulmonary fibrosis - this is the KILLER. Also: renal failure, liver damage
Phase 3 (late): Irreversible lung fibrosis → death by respiratory failure
🌟 Paraquat = Pulmonary fibrosis - This is the MOST tested fact about paraquat!
Mortality: Extremely high if ingested in significant quantities

Post-mortem: "Paraquat lung" - massive fibrosis

Treatment:

  • NO specific antidote (examiners love this!)
  • Fuller's earth (bentonite) - adsorbs paraquat in gut
  • Gastric lavage
  • Avoid oxygen initially (oxygen worsens free radical damage!)
  • Hemoperfusion (to remove from blood)
  • Immunosuppression (steroids + cyclophosphamide) - tried to slow fibrosis
  • Supportive care
⚠️ WARNING: High-dose oxygen is CONTRAINDICATED in paraquat poisoning - it increases free radical formation and worsens lung damage! This is a COMMON exam trick question.

🟤 PART 5: ALUMINUM PHOSPHIDE (ALP) - "The Grain Poison"

ALP is one of the most lethal agricultural poisons in India.
Used for: Preserving stored grains (wheat, rice) against insects and rodents
Trade names: Celphos, Phostoxin, Quickphos
Formulations: Tablets (3 g each), pellets (0.6 g each), powder
Fatal dose: 1 tablet (3 g)

Mechanism:

ALP + moisture/HCl in stomach → PHOSPHINE GAS (PH₃)
Phosphine → inhibits mitochondrial cytochrome c oxidase 
→ blocks electron transport chain
→ cellular energy failure → cell death
Also reacts with air moisture to produce phosphine: This is why unopened packets stored in damp conditions are dangerous!

Smell: Garlic-like odor (this is a KEY exam point - both OP and ALP have garlic-like smell!)

Symptoms:

Appear within 30 minutes to few hours of ingestion:
  • GI: Nausea, vomiting, abdominal pain, gastrointestinal bleeding
  • CVS: Hypotension, arrhythmias, cardiac failure (main cause of death!)
  • Respiratory: ARDS, pulmonary edema, cyanosis
  • CNS: Anxiety, restlessness, ataxia, convulsions, coma
  • Metabolic: Metabolic acidosis
Death - mainly due to cardiovascular collapse

Diagnosis:

  • Silver nitrate paper test: Phosphine gas turns silver nitrate paper black (important forensic test!)
  • "Matchbox test"

Post-Mortem Appearances:

  • Garlic-like odor at mouth, nostrils, gastric contents
  • Blood-stained froth at mouth and nostrils
  • Congested mucous membrane of esophagus, stomach, duodenum
  • Decreasing congestion in small intestine (Fig. 25.3)
  • Lungs, liver, spleen, kidneys, brain all congested
  • Centrizonal hemorrhagic necrosis of liver

Histopathology:

  • Stomach: Congestion, edema, leucocytic infiltration, sloughing of gastric mucosa
  • Lungs: Congestion, edema, desquamation of respiratory epithelium, thickened alveoli, lymphocytic infiltration
  • Kidneys: Congestion, necrosis, tubular degeneration and regeneration
  • Adrenals: Congestion, hemorrhage, necrosis

Treatment (no specific antidote!):

  1. Gastric lavage with potassium permanganate after endotracheal intubation (oxidizes phosphine to non-toxic phosphate) - repeat 2-3 times
  2. Activated charcoal 100 g orally mixed with sorbitol (not water) - 240 mL per 30 g
  3. Antacids (reduce absorption of phosphine)
  4. Liquid paraffin (helps excretion of ALP and phosphine from gut)
  5. No specific antidote
  6. Magnesium sulphate - 1 g IV, repeated; then 1-1.5 g every 6 hours for 5-7 days (reduces organ toxicity, corrects hypomagnesemia and arrhythmias)
  7. Fluids for shock: 4-6 liters in first 3-6 hours (50% normal saline)
  8. Low-dose dopamine: 4-6 mcg/kg/min (for cardiac support)
  9. IV Hydrocortisone: 400 mg every 4-6 hours (highly effective, reduces dopamine dose)
  10. Oxygen for hypoxia
  11. IV sodium carbonate for metabolic acidosis
  12. Peritoneal or hemodialysis

📊 MASTER COMPARISON TABLE (Exam Gold!)

FeatureOPCarbamateChlorateParaquatALP
UseInsecticideInsecticideWeedkillerHerbicideGrain preservative
MechanismIrreversible AChE inhibitionReversible AChE inhibitionMetHb + HemolysisFree radicals (lung)Phosphine → mitochondrial block
Key symptomSLUDGE + miosisMilder SLUDGEMetHb + renal failurePulmonary fibrosisCardiac failure + garlic smell
Specific antidoteAtropine + PAMAtropine onlyMethylene blueNoneNone
PAM useful?YESNONoNoNo
SmellKerosene/garlic---Garlic
Key testAtropine test + AChE-MetHb level-Silver nitrate paper
Main CODRespiratory failure-Renal failureRespiratory failure/fibrosisCardiovascular collapse

⚠️ IMPORTANT WARNINGS FOR EXAMS

  1. Paraquat + Oxygen = DANGEROUS! Never give high-dose O₂ in paraquat poisoning - this is a favorite trick question.
  2. PAM (Pralidoxime) must be given EARLY - once "aging" happens (AChE-OP bond becomes permanent, ~24-48 hrs), PAM won't work.
  3. ALP has NO antidote - pure supportive treatment; very high mortality.
  4. Atropine end-point is dry secretions, NOT pupils - don't stop atropine based on pupil size.
  5. Carbamates - PAM usually NOT used/needed (sometimes even contraindicated in some references).
  6. OP confirmation test: Atropine 2 mg IV - if no atropinization occurs = OP poisoning confirmed.
  7. Plasma cholinesterase is MORE sensitive (falls first) but RBC cholinesterase is more diagnostic.
  8. Sodium chlorate looks like table sugar - accidental ingestion is common!

🧠 MEMORY TRICKS SUMMARY

TrickWhat it helps remember
SLUDGEMuscarinic symptoms (Salivation, Lacrimation, Urination, Defecation, GI cramps, Emesis)
DUMBELSFull muscarinic picture (D-Defecation, U-Urination, M-Miosis, B-Bradycardia/Bronchospasm, E-Emesis, L-Lacrimation, S-Salivation/Sweating)
"A and P" antidotesAtropine (muscarinic) + PAM/Pralidoxime (nicotinic + reactivation)
"Carbamates Can reverse, Choose no PAM"Reversible + no PAM
"Paraquat = Pulmonary Fibrosis + No O₂ + No antidote"The three NOs of paraquat
"ALP = Aluminum + Garlic + No antidote + Grain"Key ALP facts
"Gramoxone = Grass Gone"Paraquat trade name
"Celphos = Cell-phosphide = Grain thief killer"ALP trade name
Plasma falls FIRST, RBC is MORE accurateCholinesterase interpretation

✍️ 10-MARKER EXAM QUESTION + MODEL ANSWER


Q: Describe the toxicology of Organophosphorus poisoning. Include its mechanism of action, clinical features, post-mortem findings, and treatment.

(10 Marks - Narayan Reddy FMT Pattern)

Model Answer:

Introduction (1 mark): Organophosphorus (OP) compounds are esters of phosphoric acid widely used as insecticides in agriculture. They are among the most common causes of poisoning in India. They form two series: Alkyl phosphates (e.g., Malathion, TEPP) and Aryl phosphates (e.g., Parathion/Follidol, Methyl-parathion).
Absorption and Metabolism (1 mark): OP compounds are absorbed through skin, inhalation, mucous membranes, and the GI tract. They are widely distributed and cross the placenta. Metabolism occurs in the liver via cytochrome P450. Aryl phosphates require liver activation. They are mixed with solvent (Aromax) causing a kerosene-like smell.
Mechanism of Action (2 marks): Normally, acetylcholine (ACh) released at nerve synapses is broken down by acetylcholinesterase (AChE). OP compounds bind irreversibly to AChE, preventing breakdown of ACh. This leads to accumulation of ACh causing:
  • Muscarinic effects (SLUDGE): Salivation, Lacrimation, Urination, Defecation, GI cramps, Emesis; plus miosis, bradycardia, bronchospasm
  • Nicotinic effects: Muscle fasciculations, weakness, hypertension, tachycardia (initially)
  • CNS effects: Anxiety, convulsions, coma, respiratory failure
Clinical Features (1 mark): Onset within minutes to hours. Key features: profuse sweating, hypersalivation, lacrimation, pinpoint pupils (miosis), bradycardia, bronchospasm, muscle fasciculations, urinary incontinence, convulsions, and death from respiratory failure.
Diagnosis (1 mark):
  1. Atropine test: 2 mg IV atropine - no atropinization confirms OP poisoning
  2. Cholinesterase levels: Plasma (sensitive, falls first); RBC (diagnostic, <50% normal confirms poisoning)
Post-Mortem Findings (1 mark): Kerosene/garlic-like smell; pinpoint pupils; cyanosis; froth in airways; congestion of lungs, liver, kidneys, brain; gastric contents smelling of kerosene/solvent.
Treatment (3 marks):
  1. Remove from exposure; wash skin with soap, water, and ethanol
  2. Gastric lavage with 1:5,000 KMnO₄ solution; activated charcoal 1 g/kg
  3. Atropine sulphate: 2-4 mg IV initially; double every 10-15 min; up to 40-2000 mg/day; end-point is dry secretions
  4. Pralidoxime (2-PAM): 1-2 g IV over 15-30 min; must be given EARLY before aging; reactivates AChE
  5. Avoid: physostigmine, succinylcholine, edrophonium
  6. Supportive: airway management, tracheostomy if needed, treat seizures

📌 FINAL QUICK RECAP - "LAST NIGHT BEFORE EXAM" CARD

OP Poisoning:
→ Irreversible AChE inhibition
→ SLUDGE (muscarinic) + Fasciculations (nicotinic) + Coma (CNS)
→ Pinpoint pupils, kerosene smell, excessive secretions
→ Antidote: ATROPINE (muscarinic) + PAM (reactivation)
→ Confirm: Atropine test + AChE levels (<50% RBC = poisoned)

Carbamates: Like OP but REVERSIBLE → Atropine only, no PAM

Chlorates: Oxidizing agent → MetHb + Hemolysis + Renal failure
→ Antidote: Methylene blue

Paraquat (Gramoxone): Free radicals → Pulmonary FIBROSIS
→ NO antidote, NO O₂, Fuller's earth

ALP (Celphos): Phosphine gas → Mitochondrial block → Cardiac failure
→ Garlic smell, NO antidote, Magnesium sulphate + Hydrocortisone

(Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition, Narayan Reddy - Chapter 25: Agricultural Poisons)
Study tip: Read this 3 times. On the 1st read, just understand the story. On the 2nd read, cover the right column and test yourself on each row of the tables. On the 3rd read, write the 10-marker answer from memory!

Can you make a PDF of the above topic you, uh, explained to me? Exact same thing I want, but in a PDF format.

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"

Running Command

mkdir -p /tmp/workspace/fmt-agricultural-poisons && echo "done"

Writing File

~/fmt-agricultural-poisons/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem

OUTPUT = "/tmp/workspace/fmt-agricultural-poisons/Agricultural_Poisons_FMT_NarayanReddy.pdf"

# ── colours ──────────────────────────────────────────────────────────────────
C_DARK_BLUE   = colors.HexColor("#1a237e")
C_RED         = colors.HexColor("#b71c1c")
C_AMBER       = colors.HexColor("#e65100")
C_GREEN       = colors.HexColor("#1b5e20")
C_TEAL        = colors.HexColor("#006064")
C_PURPLE      = colors.HexColor("#4a148c")
C_LIGHT_BLUE  = colors.HexColor("#e3f2fd")
C_LIGHT_RED   = colors.HexColor("#ffebee")
C_LIGHT_GREEN = colors.HexColor("#e8f5e9")
C_LIGHT_AMB   = colors.HexColor("#fff3e0")
C_LIGHT_PURP  = colors.HexColor("#f3e5f5")
C_LIGHT_TEAL  = colors.HexColor("#e0f7fa")
C_YELLOW_HL   = colors.HexColor("#fff9c4")
C_GREY_BG     = colors.HexColor("#f5f5f5")
C_DARK_GREY   = colors.HexColor("#424242")
C_MED_GREY    = colors.HexColor("#757575")
C_WHITE       = colors.white
C_BLACK       = colors.black

# ── styles ────────────────────────────────────────────────────────────────────
def build_styles():
    base = getSampleStyleSheet()

    def s(name, parent="Normal", **kw):
        return ParagraphStyle(name, parent=base[parent], **kw)

    return {
        "cover_title": s("cover_title", "Title",
            fontSize=26, textColor=C_DARK_BLUE, spaceAfter=6,
            alignment=TA_CENTER, fontName="Helvetica-Bold"),
        "cover_sub": s("cover_sub",
            fontSize=14, textColor=C_DARK_GREY, spaceAfter=4,
            alignment=TA_CENTER, fontName="Helvetica"),
        "cover_meta": s("cover_meta",
            fontSize=10, textColor=C_MED_GREY, spaceAfter=2,
            alignment=TA_CENTER, fontName="Helvetica-Oblique"),

        "chapter_head": s("chapter_head",
            fontSize=18, textColor=C_WHITE, spaceAfter=2,
            fontName="Helvetica-Bold", alignment=TA_CENTER,
            backColor=C_DARK_BLUE, borderPadding=(8,10,8,10)),

        "part_head": s("part_head",
            fontSize=15, textColor=C_WHITE, spaceAfter=4, spaceBefore=14,
            fontName="Helvetica-Bold", alignment=TA_LEFT,
            backColor=C_RED, borderPadding=(6,8,6,8)),

        "section_head": s("section_head",
            fontSize=13, textColor=C_DARK_BLUE, spaceAfter=4, spaceBefore=10,
            fontName="Helvetica-Bold"),

        "sub_head": s("sub_head",
            fontSize=11, textColor=C_AMBER, spaceAfter=3, spaceBefore=6,
            fontName="Helvetica-Bold"),

        "body": s("body",
            fontSize=10, textColor=C_DARK_GREY, spaceAfter=4,
            leading=15, alignment=TA_JUSTIFY, fontName="Helvetica"),

        "body_bold": s("body_bold",
            fontSize=10, textColor=C_DARK_GREY, spaceAfter=4,
            leading=15, fontName="Helvetica-Bold"),

        "bullet": s("bullet",
            fontSize=10, textColor=C_DARK_GREY, spaceAfter=3,
            leading=14, leftIndent=16, fontName="Helvetica",
            bulletText="•"),

        "trick_box": s("trick_box",
            fontSize=10, textColor=C_GREEN, spaceAfter=4,
            leading=14, fontName="Helvetica-Bold",
            backColor=C_LIGHT_GREEN, borderPadding=(6,8,6,8)),

        "warning_box": s("warning_box",
            fontSize=10, textColor=C_RED, spaceAfter=4,
            leading=14, fontName="Helvetica-Bold",
            backColor=C_LIGHT_RED, borderPadding=(6,8,6,8)),

        "highlight": s("highlight",
            fontSize=10, textColor=C_DARK_GREY, spaceAfter=4,
            leading=14, fontName="Helvetica",
            backColor=C_YELLOW_HL, borderPadding=(5,8,5,8)),

        "code_box": s("code_box",
            fontSize=9, textColor=C_DARK_GREY, spaceAfter=4,
            leading=13, fontName="Courier",
            backColor=C_GREY_BG, borderPadding=(6,8,6,8)),

        "q_head": s("q_head",
            fontSize=13, textColor=C_WHITE, spaceAfter=4, spaceBefore=10,
            fontName="Helvetica-Bold", alignment=TA_LEFT,
            backColor=C_PURPLE, borderPadding=(6,8,6,8)),

        "footer_note": s("footer_note",
            fontSize=8, textColor=C_MED_GREY, spaceAfter=2,
            alignment=TA_CENTER, fontName="Helvetica-Oblique"),
    }

# ── table helper ──────────────────────────────────────────────────────────────
def styled_table(data, col_widths, header_bg=C_DARK_BLUE, alt_bg=C_LIGHT_BLUE):
    ts = TableStyle([
        ("BACKGROUND", (0,0), (-1,0), header_bg),
        ("TEXTCOLOR",  (0,0), (-1,0), C_WHITE),
        ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE",   (0,0), (-1,0), 9),
        ("ALIGN",      (0,0), (-1,0), "CENTER"),
        ("VALIGN",     (0,0), (-1,-1), "MIDDLE"),
        ("FONTSIZE",   (0,1), (-1,-1), 9),
        ("FONTNAME",   (0,1), (-1,-1), "Helvetica"),
        ("TEXTCOLOR",  (0,1), (-1,-1), C_DARK_GREY),
        ("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, alt_bg]),
        ("GRID",       (0,0), (-1,-1), 0.5, colors.HexColor("#bdbdbd")),
        ("TOPPADDING",  (0,0), (-1,-1), 5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 5),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("RIGHTPADDING",(0,0), (-1,-1), 6),
    ])
    t = Table(data, colWidths=col_widths, repeatRows=1)
    t.setStyle(ts)
    return t

# ── build content ─────────────────────────────────────────────────────────────
def build_story(st):
    story = []
    sp = lambda n=1: Spacer(1, n*4*mm)
    hr = lambda c=C_DARK_BLUE, t=1: HRFlowable(width="100%", thickness=t, color=c, spaceAfter=4, spaceBefore=4)

    def P(text, style): return Paragraph(text, st[style])
    def B(text): return Paragraph(f"• {text}", st["body"])

    # ══════════════════════════════════════════════════════
    # COVER PAGE
    # ══════════════════════════════════════════════════════
    story += [
        sp(8),
        P("🌾 Agricultural Poisons", "cover_title"),
        sp(1),
        P("Chapter 25 | Pages 395–401", "cover_sub"),
        sp(1),
        P("The Essentials of Forensic Medicine &amp; Toxicology", "cover_sub"),
        P("Dr. K.S. Narayan Reddy | 36th Edition (2026)", "cover_meta"),
        sp(2),
        hr(C_DARK_BLUE, 2),
        sp(1),
        P("Complete Study Notes • Memory Tricks • 10-Marker Q&amp;A", "cover_meta"),
        P("Prepared for Exam Preparation", "cover_meta"),
        sp(10),
        P("⚠️ Study Tips: Read once to understand, twice to memorise, third time to write from memory!", "highlight"),
        PageBreak(),
    ]

    # ══════════════════════════════════════════════════════
    # BIG PICTURE
    # ══════════════════════════════════════════════════════
    story += [
        P("🧠 The Big Picture — What is Chapter 25 About?", "chapter_head"),
        sp(1),
        P("Imagine a farmer spraying his fields. The chemicals he uses to kill insects and weeds — if a human "
          "swallows them, inhales them, or if they touch the skin — these can KILL. Chapter 25 is all about "
          "<b>these farming chemicals as poisons</b>. There are 5 major agricultural poisons you must know cold.", "body"),
        sp(1),
    ]

    overview_data = [
        ["#", "Poison", "What It Is", "Key Word / Hook"],
        ["1", "Organophosphorus (OP)", "Insecticide", "AChE Killer (Irreversible)"],
        ["2", "Carbamates", "Insecticide", "Reversible AChE Killer"],
        ["3", "Chlorates", "Weedkiller", "MetHb + Hemolysis"],
        ["4", "Paraquat", "Herbicide", "Lung Destroyer"],
        ["5", "Aluminum Phosphide (ALP)", "Grain Preservative", "Garlic Smell + No Antidote"],
    ]
    story.append(styled_table(overview_data, [15*mm, 50*mm, 45*mm, 65*mm]))
    story.append(sp(2))

    # ══════════════════════════════════════════════════════
    # PART 1 — OP POISONS
    # ══════════════════════════════════════════════════════
    story += [
        P("🔴  PART 1: ORGANOPHOSPHORUS (OP) POISONS — THE MOST IMPORTANT!", "part_head"),
        sp(1),
        P("Think of it like this: Imagine a river called the <b>Acetylcholine River</b>. Normally, a cleaner "
          "called <b>AChE (Acetylcholinesterase)</b> cleans the river. OP compounds <b>DESTROY the cleaner</b>, "
          "so acetylcholine keeps flooding everywhere. The body goes into overdrive!", "body"),
    ]

    story.append(P("Compounds to Know", "section_head"))
    compounds_data = [
        ["Alkyl Phosphates", "Aryl Phosphates"],
        ["HETP, TEPP (Tetron), OMPA, Dimefox,\nMalathion (Kill Bug/Bugsolline),\nSulfotepp, Demeton, Trichlorfon",
         "Parathion (Nitrostigmine/Follidol) ← most common in India\nParaoxon, Methyl-parathion (Metacide),\nChlorothion, Diazinon (Diazion; Tik 20)"],
    ]
    t = Table(compounds_data, colWidths=[87*mm, 87*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,0), C_TEAL),
        ("TEXTCOLOR",  (0,0), (-1,0), C_WHITE),
        ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTNAME",   (0,1), (-1,-1), "Helvetica"),
        ("FONTSIZE",   (0,0), (-1,-1), 9),
        ("TEXTCOLOR",  (0,1), (-1,-1), C_DARK_GREY),
        ("GRID",       (0,0), (-1,-1), 0.5, colors.HexColor("#bdbdbd")),
        ("VALIGN",     (0,0), (-1,-1), "TOP"),
        ("TOPPADDING",  (0,0), (-1,-1), 6),
        ("BOTTOMPADDING",(0,0), (-1,-1), 6),
        ("LEFTPADDING", (0,0), (-1,-1), 8),
    ]))
    story += [t, sp(1),
        P("🌟 Memory Trick: <b>Alkyl = Already toxic. Aryl = Activated by liver</b> (via Cytochrome P450)", "trick_box"),
        sp(1),
    ]

    story += [
        P("Absorption, Distribution &amp; Metabolism", "section_head"),
        B("Absorbed through: <b>skin, inhalation, mucous membranes, GI tract</b>"),
        B("Widely distributed; readily <b>cross placenta</b>"),
        B("Metabolism in liver via Cytochrome P450; Aryl types need liver activation"),
        B("Mixed with solvent <b>Aromax</b> → causes <b>kerosene-like smell</b> in stomach/vomit"),
        B("Excreted in urine; excretion prolonged over a week"),
        sp(1),
    ]

    story += [
        P("⚡ Mechanism of Action — THE HEART of OP Poisoning", "section_head"),
        P("<b>Normally:</b> Acetylcholine → AChE → Choline + Acetic Acid (all cleaned up!)<br/>"
          "<b>In OP poisoning:</b> Acetylcholine → AChE is BLOCKED by OP → Acetylcholine BUILDS UP everywhere!<br/>"
          "OP binds to AChE <b>IRREVERSIBLY</b> (this is the exam favourite!)", "code_box"),
        sp(1),
    ]

    effects_data = [
        ["Effect Type", "Receptor", "Key Symptoms", "Memory Trick"],
        ["MUSCARINIC\n(glands, smooth muscle)", "M receptors",
         "Salivation, Lacrimation, Urination,\nDefecation, GI cramps, Emesis,\nMiosis, Bradycardia, Bronchospasm",
         "SLUDGE\nSalivation, Lacrimation,\nUrination, Defecation,\nGI cramps, Emesis"],
        ["NICOTINIC\n(skeletal muscle, ganglia)", "N receptors",
         "Muscle fasciculations, Adrenal\nstimulation, Tachycardia (initially),\nCramps, Hypertension",
         "MATCH:\nMuscle fasciculations,\nAdrenal stim,\nTachycardia, Cramps,\nHypertension"],
        ["CNS", "Both M + N",
         "Anxiety, seizures, coma,\nrespiratory failure",
         "—"],
    ]
    story += [
        styled_table(effects_data, [40*mm, 28*mm, 60*mm, 47*mm], header_bg=C_RED),
        sp(1),
        P("🌟 DUMBELS trick for full muscarinic picture: <b>D</b>efecation, <b>U</b>rination, <b>M</b>iosis, "
          "<b>B</b>radycardia/Bronchospasm/Bronchorrhoea, <b>E</b>mesis, <b>L</b>acrimation, <b>S</b>alivation/Sweating",
          "trick_box"),
        sp(1),
    ]

    story += [
        P("Diagnosis", "section_head"),
        B("<b>Atropine Test:</b> Give 2 mg atropine IV. Normal person → dry mouth, racing heart. "
          "OP poisoning → symptoms IMPROVE without atropinization = CONFIRMED!"),
        B("<b>Cholinesterase Levels:</b>"),
        Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;• Plasma pseudocholinesterase — more <b>sensitive</b>, falls FIRST",
                  st["body"]),
        Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;• RBC true cholinesterase — more <b>diagnostic/specific</b>",
                  st["body"]),
        Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;• RBC AChE &lt;50% of normal = <b>poisoning confirmed</b>",
                  st["body"]),
        Paragraph("&nbsp;&nbsp;&nbsp;&nbsp;• Plasma returns to normal in <b>7–10 days</b>; untreated: <b>4 weeks</b>",
                  st["body"]),
        P("🌟 Remember: <b>Plasma falls FIRST, RBC is MORE accurate for diagnosis</b>", "trick_box"),
        sp(1),
    ]

    story += [
        P("Post-Mortem Findings", "section_head"),
        B("Kerosene/garlic-like smell from mouth, body cavities, stomach contents"),
        B("Pinpoint pupils (miosis)"),
        B("Cyanosis"),
        B("Froth in airways (lungs)"),
        B("Congestion of lungs, liver, brain, kidneys"),
        B("Stomach contents smell of kerosene/aromax solvent"),
        sp(1),
    ]

    story += [
        P("💊 Treatment (Very Important for Exams!)", "section_head"),
        P("Step 1 — Remove from exposure", "sub_head"),
        B("Remove clothes; wash skin with soap + water, then ethanol + water or alkaline solution"),
        B("If eye involved: irrigate all conjunctival surfaces"),
        P("Step 2 — Airway", "sub_head"),
        B("Keep airway patent; tracheostomy may be needed"),
        P("Step 3 — Decontaminate GI (if ingested)", "sub_head"),
        B("Stomach wash with <b>1:5,000 potassium permanganate solution</b>"),
        B("Activated charcoal 1 g/kg; avoid ipecac"),
        B("Cathartic (sorbitol/magnesium citrate) once, unless diarrhoea present"),
        P("Step 4 — SPECIFIC ANTIDOTES: Remember 'A and P'", "sub_head"),
    ]

    antidote_data = [
        ["Drug", "Dose", "Action", "Key Points"],
        ["ATROPINE\n(Drug A)", "2–4 mg IV initially\n(Peds: 0.05 mg/kg)\nDouble every 10–15 min\nUp to 40–2000 mg/day",
         "Blocks muscarinic effects\n(No effect on nicotinic)\nCounteracts CNS effects",
         "• End-point = DRY secretions\n  NOT pupil size!\n• Avoid if HR >140 bpm\n• Ineffective in severe\n  hypoxia/hypotension"],
        ["PAM / Pralidoxime\n2-PAM\n(Drug P)", "1–2 g IV over 15–30 min\n(Peds: 20–40 mg/kg)\nRepeat after 1–2 hrs",
         "REACTIVATES AChE —\nthe ONLY drug that\nreverses the actual block!",
         "• Must give EARLY!\n• After 'aging' (24–48 hrs)\n  PAM won't work\n• Reduces nicotinic\n  symptoms"],
    ]
    story += [
        styled_table(antidote_data, [30*mm, 40*mm, 50*mm, 55*mm], header_bg=C_GREEN),
        sp(1),
        P("⛔ AVOID these drugs: Physostigmine, Edrophonium chloride, Succinylcholine — they WORSEN the situation!",
          "warning_box"),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # PART 2 — CARBAMATES
    # ══════════════════════════════════════════════════════
    story += [
        P("🔵  PART 2: CARBAMATES", "part_head"),
        sp(1),
        P("Carbamates work the same way as OP — they inhibit AChE — but the key difference is the inhibition "
          "is <b>REVERSIBLE</b>. Think of it as a temporary glue vs. OP's permanent superglue.", "body"),
        sp(1),
    ]

    carb_data = [
        ["Feature", "OP Compounds", "Carbamates"],
        ["Mechanism", "Irreversible AChE inhibition", "REVERSIBLE AChE inhibition"],
        ["Severity", "More severe, prolonged", "Less severe, self-limiting"],
        ["PAM (Pralidoxime)", "YES — essential", "NOT needed / usually avoided"],
        ["Atropine", "YES — essential", "YES — essential"],
        ["Examples", "Parathion, Malathion", "Carbaryl (Sevin), Aldicarb, Carbofuran"],
    ]
    story += [
        styled_table(carb_data, [38*mm, 62*mm, 75*mm], header_bg=C_TEAL),
        sp(1),
        P("🌟 Memory Trick: 'Carbamates Can reverse — Choose no PAM' (3 C's)", "trick_box"),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # PART 3 — CHLORATES
    # ══════════════════════════════════════════════════════
    story += [
        P("🟡  PART 3: CHLORATES (Weedkillers)", "part_head"),
        sp(1),
        P("Think of chlorates as <b>blood cell destroyers</b>. They look like table sugar (sodium chlorate) "
          "— so accidental ingestion is common!", "body"),
        sp(1),
        P("Key Facts", "section_head"),
    ]

    chlorate_facts = [
        ["Property", "Details"],
        ["Used as", "Weed killers, match heads, fireworks"],
        ["Appearance", "Sodium chlorate resembles TABLE SUGAR — accidental ingestion risk!"],
        ["Fatal Dose", "~20–30 g"],
        ["Mechanism", "Powerful oxidising agent → attacks all body cells\n"
                       "Reacts with thiol groups on RBCs → HEMOLYSIS\n"
                       "Oxidises Hb → METHEMOGLOBIN (can't carry O₂!)\n"
                       "Potent NEPHROTOXIN; hemolysis releases K⁺ → fatal hyperkalemia"],
    ]
    story += [
        styled_table(chlorate_facts, [40*mm, 135*mm], header_bg=C_AMBER),
        sp(1),
        P("Symptoms (onset 1–4 hours)", "section_head"),
        B("Nausea, vomiting, diarrhoea, abdominal pain"),
        B("Shallow breathing"),
        B("Blood/protein/haemoglobin in urine (haematuria, proteinuria, haemoglobinuria)"),
        B("Oliguria/anuria → <b>renal failure</b> (main cause of death)"),
        B("<b>Haemolysis + jaundice + hepatic failure</b>"),
        B("<b>Methemoglobinaemia</b> — can reach 40% or above"),
        B("Agitation, muscular twitchings, convulsions"),
        B("Skin/eyes: irritation, redness, burns, ulcers"),
        P("Treatment", "section_head"),
    ]

    chlorate_tx = [
        ["Step", "Treatment"],
        ["1", "Stomach wash (gastric lavage)"],
        ["2", "Methylene blue — 25 mL of 1% solution IV (for methemoglobinaemia)"],
        ["3", "Sodium thiosulphate — 2–5 g in 200 mL of 5% sodium bicarbonate as drink"],
        ["4", "Ascorbic acid — 1 g every 4 hours (drink or slow IV)"],
        ["5", "Peritoneal dialysis or haemodialysis"],
        ["6", "Symptomatic management"],
    ]
    story += [
        styled_table(chlorate_tx, [12*mm, 163*mm], header_bg=C_AMBER),
        sp(1),
        P("🌟 Mnemonic for chlorate treatment: '<b>WASH MB STA</b>' — Wash stomach, Methylene Blue, "
          "Sodium Thiosulphate, Ascorbic acid, dialysis", "trick_box"),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # PART 4 — PARAQUAT
    # ══════════════════════════════════════════════════════
    story += [
        P("🟠  PART 4: PARAQUAT — 'The Lung Killer'", "part_head"),
        sp(1),
        P("Paraquat is a <b>bipyridylium herbicide</b> (weed killer). It is the most dangerous herbicide known. "
          "Once ingested in significant quantity, it almost always kills.", "body"),
        sp(1),
    ]

    paraquat_facts = [
        ["Property", "Details"],
        ["Trade names", "Gramoxone (brownish liquid, 10–30%); Weedol (brown granules, ~5%)"],
        ["Use", "Sprayed on weeds BEFORE planting. Becomes inactivated on contact with soil."],
        ["Main route", "Ingestion (fatalities); inhalational deaths during spraying are VERY RARE"],
        ["Mechanism", "NADPH-dependent reduction → FREE RADICALS\n"
                       "Free radicals + O₂ → Superoxide + Hydroxyl radicals (OH·)\n"
                       "→ Disrupts cell structure and causes cell death\n"
                       "Lungs concentrate paraquat via polyamine uptake system → lungs are #1 target"],
    ]
    story += [
        styled_table(paraquat_facts, [35*mm, 140*mm], header_bg=C_AMBER),
        sp(1),
        P("Clinical Phases", "section_head"),
    ]

    pq_phases = [
        ["Phase", "Timing", "Features"],
        ["Phase 1", "Early (24–48 hrs)", "Nausea, vomiting, diarrhoea, abdominal pain,\nulceration of mouth/throat (corrosive)"],
        ["Phase 2", "Days 3–14", "ARDS, PULMONARY FIBROSIS (the killer!), renal failure, liver damage"],
        ["Phase 3", "Late", "Irreversible lung fibrosis → death by respiratory failure"],
    ]
    story += [
        styled_table(pq_phases, [25*mm, 35*mm, 115*mm], header_bg=C_AMBER),
        sp(1),
        P("🌟 Most tested fact: <b>Paraquat = Pulmonary Fibrosis</b>", "trick_box"),
        P("⛔ WARNING: HIGH-DOSE OXYGEN IS CONTRAINDICATED IN PARAQUAT POISONING! "
          "Oxygen increases free radical formation and WORSENS lung damage. This is a favourite exam trick!",
          "warning_box"),
        P("Treatment", "section_head"),
        B("NO specific antidote (very important exam point!)"),
        B("Fuller's earth (bentonite) — adsorbs paraquat in gut"),
        B("Gastric lavage"),
        B("Haemoperfusion (to remove from blood)"),
        B("Immunosuppression: steroids + cyclophosphamide (to slow fibrosis)"),
        B("Supportive care"),
        P("🌟 'The THREE NOs of Paraquat: No antidote, No O₂ (high dose), No cure if severe'", "trick_box"),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # PART 5 — ALP
    # ══════════════════════════════════════════════════════
    story += [
        P("🟤  PART 5: ALUMINUM PHOSPHIDE (ALP) — 'The Grain Poison'", "part_head"),
        sp(1),
        P("ALP is one of the most lethal agricultural poisons in India, especially in rural areas. "
          "It is used for preserving stored grains (wheat, rice) against insects and rodents.", "body"),
        sp(1),
    ]

    alp_facts = [
        ["Property", "Details"],
        ["Trade names", "Celphos, Phostoxin, Quickphos"],
        ["Formulations", "Tablets (3 g each), pellets (0.6 g each), powder"],
        ["Fatal Dose", "1 tablet = 3 g — very small, very lethal!"],
        ["Smell", "GARLIC-LIKE odor (key exam point)"],
        ["Mechanism", "ALP + moisture/HCl in stomach → Phosphine gas (PH₃)\n"
                       "Phosphine → inhibits mitochondrial cytochrome c oxidase\n"
                       "→ blocks electron transport chain → cellular energy failure → cell death"],
        ["Main cause of death", "CARDIOVASCULAR COLLAPSE (cardiac failure)"],
    ]
    story += [
        styled_table(alp_facts, [40*mm, 135*mm], header_bg=C_DARK_GREY),
        sp(1),
        P("Symptoms", "section_head"),
        B("<b>GI:</b> Nausea, vomiting, abdominal pain, GI bleeding"),
        B("<b>CVS:</b> Hypotension, arrhythmias, cardiac failure (main cause of death!)"),
        B("<b>Respiratory:</b> ARDS, pulmonary oedema, cyanosis"),
        B("<b>CNS:</b> Anxiety, restlessness, ataxia, convulsions, coma"),
        B("<b>Metabolic:</b> Metabolic acidosis"),
        B("Appear within 30 minutes to a few hours of ingestion"),
        sp(1),
        P("Forensic Test for ALP", "section_head"),
        P("<b>Silver Nitrate Paper Test:</b> Phosphine gas turns silver nitrate paper <b>BLACK</b>. "
          "This is the important forensic confirmatory test!", "highlight"),
        sp(1),
        P("Post-Mortem Appearances", "section_head"),
        B("Garlic-like odor at mouth, nostrils, and gastric contents"),
        B("Blood-stained froth at mouth and nostrils"),
        B("Congested mucous membrane of lower oesophagus, stomach, duodenum"),
        B("Decreasing congestion in small intestine"),
        B("Lungs, liver, spleen, kidneys, brain — all congested"),
        B("<b>Centrizonal haemorrhagic necrosis of liver</b>"),
        sp(1),
        P("Histopathology", "section_head"),
    ]

    histo_data = [
        ["Organ", "Histopathological Changes"],
        ["Stomach", "Congestion, oedema, leucocytic infiltration, sloughing of gastric mucosa"],
        ["Lungs", "Congestion, oedema, desquamation of respiratory epithelium,\nthickened alveoli, lymphocytic infiltration"],
        ["Kidneys", "Congestion, necrosis, tubular degeneration and regeneration"],
        ["Adrenals", "Congestion, haemorrhage, necrosis"],
    ]
    story += [
        styled_table(histo_data, [30*mm, 145*mm], header_bg=C_DARK_GREY),
        sp(1),
        P("Treatment (NO specific antidote!)", "section_head"),
    ]

    alp_tx = [
        ["Step", "Treatment"],
        ["1", "Gastric lavage with potassium permanganate after endotracheal intubation\n"
              "(oxidises phosphine → non-toxic phosphate); repeat 2–3 times"],
        ["2", "Activated charcoal 100 g orally mixed with SORBITOL (NOT water),\n"
              "240 mL per 30 g — to adsorb phosphine"],
        ["3", "Antacids — reduce symptoms + reduce absorption of phosphine"],
        ["4", "Liquid paraffin — helps excretion of ALP and phosphine from gut"],
        ["5", "NO specific antidote"],
        ["6", "Magnesium sulphate — 1 g IV; then 1–1.5 g every 6 hrs for 5–7 days\n"
              "(reduces organ toxicity, corrects hypomagnesaemia + arrhythmias)"],
        ["7", "Fluids for shock: 4–6 litres in first 3–6 hours (50% normal saline)"],
        ["8", "Low-dose dopamine: 4–6 mcg/kg/min (cardiac support)"],
        ["9", "IV Hydrocortisone: 400 mg every 4–6 hours (highly effective; reduces dopamine dose)"],
        ["10", "Oxygen for hypoxia; IV sodium carbonate for metabolic acidosis"],
        ["11", "Peritoneal or haemodialysis"],
    ]
    story += [
        styled_table(alp_tx, [12*mm, 163*mm], header_bg=C_DARK_GREY),
        sp(2),
        PageBreak(),
    ]

    # ══════════════════════════════════════════════════════
    # MASTER COMPARISON TABLE
    # ══════════════════════════════════════════════════════
    story += [
        P("📊 MASTER COMPARISON TABLE — Exam Gold!", "chapter_head"),
        sp(1),
    ]

    master_data = [
        ["Feature", "OP", "Carbamate", "Chlorate", "Paraquat", "ALP"],
        ["Use", "Insecticide", "Insecticide", "Weedkiller", "Herbicide", "Grain preservative"],
        ["Mechanism", "Irreversible\nAChE inhibition", "Reversible\nAChE inhibition",
         "MetHb +\nHaemolysis +\nNephrotoxin", "Free radicals\n→ lung damage", "Phosphine\n→ mito block"],
        ["Key symptom", "SLUDGE +\nMiosis", "Milder SLUDGE", "MetHb +\nRenal failure",
         "Pulmonary\nFibrosis", "Cardiac failure\n+ garlic smell"],
        ["Antidote", "Atropine +\nPAM", "Atropine\nonly", "Methylene\nblue", "NONE", "NONE"],
        ["PAM useful?", "YES", "NO", "No", "No", "No"],
        ["Smell", "Kerosene/\ngarlic", "—", "—", "—", "Garlic"],
        ["Key test", "Atropine test\nAChE levels", "—", "MetHb level", "—", "Silver nitrate\npaper → black"],
        ["Main COD", "Respiratory\nfailure", "Respiratory\nfailure", "Renal failure", "Respiratory\nfailure/fibrosis",
         "Cardiovascular\ncollapse"],
    ]
    story += [
        styled_table(master_data, [30*mm, 29*mm, 29*mm, 29*mm, 29*mm, 29*mm]),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # WARNINGS BOX
    # ══════════════════════════════════════════════════════
    story += [
        P("⚠️  CRITICAL EXAM WARNINGS — Do NOT Get These Wrong!", "chapter_head"),
        sp(1),
        P("⛔ 1. PARAQUAT + HIGH-DOSE OXYGEN = DANGEROUS! High-dose O₂ increases free radical formation "
          "and WORSENS lung damage. Very common trick question.", "warning_box"),
        sp(1),
        P("⛔ 2. PAM (Pralidoxime) MUST be given EARLY — once 'aging' occurs (AChE-OP bond becomes permanent, "
          "~24–48 hrs), PAM won't work. Never give PAM late and expect results.", "warning_box"),
        sp(1),
        P("⛔ 3. ALP HAS NO ANTIDOTE — pure supportive treatment; very high mortality. "
          "Students often write atropine for ALP — WRONG!", "warning_box"),
        sp(1),
        P("⛔ 4. ATROPINE END-POINT IS DRY SECRETIONS, NOT PUPILS — do not stop atropine based on "
          "pupil size. This is the number one clinical error in OP poisoning.", "warning_box"),
        sp(1),
        P("⛔ 5. CARBAMATES — PAM is usually NOT used/needed (sometimes even avoided in some references). "
          "Remember: reversible = no need to reactivate!", "warning_box"),
        sp(1),
        P("⛔ 6. SODIUM CHLORATE LOOKS LIKE TABLE SUGAR — this is why accidental ingestion is common. "
          "A history of 'mistook white powder for sugar' = think chlorate!", "warning_box"),
        sp(2),
    ]

    # ══════════════════════════════════════════════════════
    # MEMORY TRICKS SUMMARY
    # ══════════════════════════════════════════════════════
    story += [
        P("🧠 MEMORY TRICKS SUMMARY", "chapter_head"),
        sp(1),
    ]

    tricks_data = [
        ["Mnemonic / Trick", "What It Helps You Remember"],
        ["SLUDGE", "Muscarinic symptoms: Salivation, Lacrimation, Urination, Defecation, GI cramps, Emesis"],
        ["DUMBELS", "Full muscarinic picture: Defecation, Urination, Miosis, Bradycardia/Bronchospasm,\n"
                    "Emesis, Lacrimation, Salivation/Sweating"],
        ["'A and P' antidotes", "Atropine (muscarinic block) + PAM/Pralidoxime (nicotinic + reactivation of AChE)"],
        ["'Carbamates Can reverse —\nChoose no PAM' (3 C's)", "Reversible inhibition; no PAM needed"],
        ["'THREE NOs of Paraquat'", "No antidote, No high-dose O₂, No cure if severe"],
        ["'Gramoxone = Grass Gone'", "Trade name for Paraquat"],
        ["'Celphos = Cell-phosphide'", "Trade name for Aluminum Phosphide"],
        ["'ALP = Garlic + Grain +\nNo Antidote'", "Three key ALP facts"],
        ["'Plasma falls FIRST,\nRBC is MORE accurate'", "Interpretation of cholinesterase levels in OP poisoning"],
        ["'WASH MB STA'", "Chlorate treatment: Wash stomach → Methylene Blue → Sodium Thiosulphate →\nAscorbic acid → dialysis"],
        ["'Alkyl = Already toxic;\nAryl = Activated by liver'", "Difference between alkyl and aryl phosphates in OP"],
    ]
    story += [
        styled_table(tricks_data, [55*mm, 120*mm], header_bg=C_PURPLE, alt_bg=C_LIGHT_PURP),
        sp(2),
        PageBreak(),
    ]

    # ══════════════════════════════════════════════════════
    # 10-MARKER QUESTION
    # ══════════════════════════════════════════════════════
    story += [
        P("✍️  10-MARKER EXAM QUESTION &amp; MODEL ANSWER", "q_head"),
        sp(1),
        P("<b>Question:</b> Describe the toxicology of Organophosphorus poisoning. Include its mechanism of "
          "action, clinical features, post-mortem findings, and treatment. <i>(10 Marks)</i>", "highlight"),
        sp(1),
    ]

    answer_sections = [
        ("Introduction — 1 Mark",
         "Organophosphorus (OP) compounds are esters of phosphoric acid widely used as insecticides in agriculture. "
         "They are among the most common causes of poisoning in India. They form two series: "
         "(1) Alkyl phosphates (e.g., Malathion, TEPP) and (2) Aryl phosphates (e.g., Parathion/Follidol, Methyl-parathion)."),

        ("Absorption and Metabolism — 1 Mark",
         "OP compounds are absorbed through skin, inhalation, mucous membranes, and the GI tract. They are widely "
         "distributed and cross the placenta. Metabolism occurs in the liver via cytochrome P450. Aryl phosphates require "
         "liver activation. They are mixed with solvent (Aromax) causing a kerosene-like smell. Excreted in urine over ~1 week."),

        ("Mechanism of Action — 2 Marks",
         "Normally, acetylcholine (ACh) released at nerve synapses is broken down by AChE. OP compounds bind "
         "<b>irreversibly</b> to AChE, preventing breakdown of ACh. Accumulated ACh causes:<br/>"
         "• <b>Muscarinic effects (SLUDGE):</b> Salivation, Lacrimation, Urination, Defecation, GI cramps, Emesis; "
         "plus miosis, bradycardia, bronchospasm<br/>"
         "• <b>Nicotinic effects:</b> Muscle fasciculations, weakness, hypertension, tachycardia (initially)<br/>"
         "• <b>CNS effects:</b> Anxiety, convulsions, coma, respiratory failure"),

        ("Clinical Features — 1 Mark",
         "Onset within minutes to hours. Key features: profuse sweating, hypersalivation, lacrimation, "
         "<b>pinpoint pupils (miosis)</b>, bradycardia, bronchospasm, muscle fasciculations, urinary incontinence, "
         "convulsions, and death from respiratory failure."),

        ("Diagnosis — 1 Mark",
         "1. <b>Atropine test:</b> 2 mg IV atropine — no atropinisation confirms OP poisoning.<br/>"
         "2. <b>Cholinesterase levels:</b> Plasma (sensitive, falls first); RBC (&lt;50% normal confirms poisoning). "
         "Plasma normalises in 7–10 days; untreated cases need 4 weeks."),

        ("Post-Mortem Findings — 1 Mark",
         "Kerosene/garlic-like smell; pinpoint pupils; cyanosis; froth in airways; "
         "congestion of lungs, liver, kidneys, brain; gastric contents smelling of kerosene/solvent."),

        ("Treatment — 3 Marks",
         "1. Remove from exposure; wash skin with soap, water, and ethanol.<br/>"
         "2. Gastric lavage with 1:5,000 KMnO₄ solution; activated charcoal 1 g/kg.<br/>"
         "3. <b>Atropine sulphate:</b> 2–4 mg IV initially; double every 10–15 min; up to 40–2,000 mg/day; "
         "end-point is dry secretions (NOT pupils).<br/>"
         "4. <b>Pralidoxime (2-PAM):</b> 1–2 g IV over 15–30 min; must be given EARLY before aging; reactivates AChE; "
         "reduces nicotinic symptoms.<br/>"
         "5. AVOID: physostigmine, succinylcholine, edrophonium chloride.<br/>"
         "6. Supportive: airway management, tracheostomy if needed, treat seizures."),
    ]

    for title, text in answer_sections:
        story += [
            P(title, "sub_head"),
            P(text, "body"),
            sp(1),
        ]

    # ══════════════════════════════════════════════════════
    # LAST-NIGHT RECAP
    # ══════════════════════════════════════════════════════
    story += [
        PageBreak(),
        P("📌 LAST-NIGHT-BEFORE-EXAM QUICK RECAP CARD", "chapter_head"),
        sp(1),
        P("OP POISONING:\n"
          "→ Irreversible AChE inhibition\n"
          "→ SLUDGE (muscarinic) + Fasciculations (nicotinic) + Coma (CNS)\n"
          "→ Pinpoint pupils, kerosene smell, excessive secretions\n"
          "→ Antidote: ATROPINE (muscarinic) + PAM (reactivation)\n"
          "→ Confirm: Atropine test + AChE levels (<50% RBC = poisoned)", "code_box"),
        sp(1),
        P("CARBAMATES:\n"
          "→ Like OP but REVERSIBLE → Atropine only, no PAM needed\n"
          "→ Less severe, self-limiting", "code_box"),
        sp(1),
        P("CHLORATES (Weedkiller):\n"
          "→ Oxidising agent → MetHb + Haemolysis + Renal failure\n"
          "→ Antidote: Methylene blue\n"
          "→ Treatment mnemonic: WASH MB STA", "code_box"),
        sp(1),
        P("PARAQUAT (Gramoxone, Herbicide):\n"
          "→ Free radicals → PULMONARY FIBROSIS\n"
          "→ NO antidote, NO high-dose O₂, Fuller's earth\n"
          "→ Highest mortality", "code_box"),
        sp(1),
        P("ALP (Celphos, Grain Preservative):\n"
          "→ Phosphine gas → Mitochondrial block → CARDIAC FAILURE\n"
          "→ Garlic smell, NO antidote\n"
          "→ Treatment: Magnesium sulphate + Hydrocortisone + Supportive", "code_box"),
        sp(2),
        hr(C_DARK_BLUE, 2),
        sp(1),
        P("Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026), Dr. K.S. Narayan Reddy, "
          "Chapter 25: Agricultural Poisons, Pages 395–401",
          "footer_note"),
        P("Study tip: Read 3 times. 1st — understand the story. 2nd — cover the right column, test yourself. "
          "3rd — write the 10-marker from memory. You will ace your exams!",
          "footer_note"),
    ]

    return story


# ── main ──────────────────────────────────────────────────────────────────────
def main():
    styles = build_styles()
    doc = SimpleDocTemplate(
        OUTPUT,
        pagesize=A4,
        leftMargin=18*mm,
        rightMargin=18*mm,
        topMargin=20*mm,
        bottomMargin=20*mm,
        title="Agricultural Poisons — FMT Chapter 25",
        author="Narayan Reddy FMT Study Notes",
        subject="Forensic Medicine & Toxicology — Agricultural Poisons",
    )
    story = build_story(styles)
    doc.build(story)
    print(f"PDF created: {OUTPUT}")


if __name__ == "__main__":
    main()
Running Command

cd /tmp/workspace/fmt-agricultural-poisons && python generate_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/fmt-agricultural-poisons/Agricultural_Poisons_FMT_NarayanReddy.pdf

Your PDF is ready! Here it is:

Agricultural Poisons FMT NarayanReddy

PDF Document · PDF


Here's what's inside the PDF (all neatly formatted with color-coded sections):
  • Cover page with title, chapter details, and edition info
  • Big Picture overview table (all 5 poisons at a glance)
  • Part 1 - OP Poisons - full mechanism, SLUDGE/DUMBELS table, diagnosis, post-mortem, treatment with Atropine + PAM doses
  • Part 2 - Carbamates - comparison table with OP
  • Part 3 - Chlorates - mechanism, symptoms, WASH MB STA treatment
  • Part 4 - Paraquat - phases table, three NOs, oxygen warning
  • Part 5 - ALP - histopathology table, silver nitrate test, full treatment steps
  • Master Comparison Table (all 5 poisons side by side)
  • 6 Critical Exam Warnings in red alert boxes
  • Memory Tricks Summary Table (all mnemonics)
  • Full 10-Marker Model Answer with marks breakdown
  • Last-Night Quick Recap Card in code boxes
All the best for your exams! 🌟
This is a shared conversation. Sign in to Orris to start your own chat.