Make a ppt on arsenic poisoning for forensic medicine and toxicology add flow charts , pictures and mnemonics where necessary

Reading File
Reading File
Reading File
Finding Sources
Searching the Web

arsenic poisoning forensic medicine toxicology clinical features pathology mnemonics

Reading File
Reading File
Reading File
Reading File
Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/arsenic-ppt

Writing File

~/arsenic-ppt/build.js

const pptxgen = require("pptxgenjs");

let pres = new pptxgen();
pres.layout = "LAYOUT_WIDE";
pres.title = "Arsenic Poisoning - Forensic Medicine & Toxicology";
pres.author = "Forensic Medicine & Toxicology";

// ─── COLOR PALETTE ───
const C = {
  darkBg:    "1A1A2E",   // deep navy
  midBg:     "16213E",   // dark blue
  accent1:   "E94560",   // vivid red
  accent2:   "F5A623",   // amber
  accent3:   "0FBCF9",   // cyan
  lightGray: "F0F4F8",
  white:     "FFFFFF",
  textDark:  "1A1A2E",
  mutedText: "8899AA",
  green:     "27AE60",
  orange:    "E67E22",
  purple:    "8E44AD",
  teal:      "16A085",
  boxBg:     "0D1B2A",
};

const FONT = "Calibri";

// ─── HELPERS ────────────────────────────────────────────────────────────────

function titleSlide(text, subtitle) {
  let s = pres.addSlide();
  // full-bleed background
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.darkBg } });
  // decorative accent bar left
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: "100%", fill: { color: C.accent1 } });
  // accent line
  s.addShape(pres.ShapeType.rect, { x: 0.18, y: 2.2, w: 12.9, h: 0.06, fill: { color: C.accent2 } });

  s.addText(text, {
    x: 0.5, y: 1.4, w: 12.3, h: 1.5,
    fontSize: 44, bold: true, color: C.white, fontFace: FONT,
    align: "center", valign: "middle"
  });
  if (subtitle) {
    s.addText(subtitle, {
      x: 0.5, y: 3.1, w: 12.3, h: 0.9,
      fontSize: 22, color: C.accent2, fontFace: FONT,
      align: "center", valign: "middle", italic: true
    });
  }
  s.addText("Forensic Medicine & Toxicology", {
    x: 0.5, y: 4.2, w: 12.3, h: 0.5,
    fontSize: 14, color: C.mutedText, fontFace: FONT, align: "center"
  });
  return s;
}

function sectionHeader(text, color) {
  let s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.midBg } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 0.12, fill: { color: color || C.accent1 } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 7.38, w: "100%", h: 0.12, fill: { color: color || C.accent1 } });
  s.addText(text, {
    x: 0.5, y: 2.2, w: 12.3, h: 2.5,
    fontSize: 48, bold: true, color: C.white, fontFace: FONT,
    align: "center", valign: "middle"
  });
  return s;
}

function contentSlide(title, opts) {
  let s = pres.addSlide();
  // background
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.lightGray } });
  // header band
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.0, fill: { color: C.darkBg } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.0, w: "100%", h: 0.07, fill: { color: opts && opts.color ? opts.color : C.accent1 } });
  s.addText(title, {
    x: 0.35, y: 0.1, w: 12.6, h: 0.8,
    fontSize: 26, bold: true, color: C.white, fontFace: FONT,
    valign: "middle"
  });
  return s;
}

function addBullets(slide, items, x, y, w, h, opts) {
  let textArr = items.map((item, i) => {
    if (typeof item === "string") {
      return { text: item, options: { bullet: { indent: 20 }, breakLine: i < items.length - 1, fontSize: opts && opts.fontSize ? opts.fontSize : 16, color: opts && opts.color ? opts.color : C.textDark, fontFace: FONT } };
    } else {
      return { text: item.text, options: { bullet: item.sub ? { indent: 40 } : { indent: 20 }, breakLine: true, fontSize: item.sub ? 13 : (opts && opts.fontSize ? opts.fontSize : 16), color: item.color || (opts && opts.color ? opts.color : C.textDark), bold: item.bold || false, fontFace: FONT } };
    }
  });
  slide.addText(textArr, { x, y, w, h, valign: "top" });
}

function box(slide, x, y, w, h, color, text, textColor, fontSize) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill: { color },
    line: { color: C.white, width: 0 },
    rectRadius: 0.12
  });
  if (text) {
    slide.addText(text, {
      x, y, w, h,
      fontSize: fontSize || 14,
      color: textColor || C.white,
      fontFace: FONT,
      align: "center",
      valign: "middle",
      bold: true
    });
  }
}

function arrow(slide, x1, y1, len, horiz) {
  if (horiz) {
    slide.addShape(pres.ShapeType.line, { x: x1, y: y1, w: len, h: 0, line: { color: C.accent2, width: 2.5 } });
  } else {
    slide.addShape(pres.ShapeType.line, { x: x1, y: y1, w: 0, h: len, line: { color: C.accent2, width: 2.5 } });
  }
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════════════════════
titleSlide("ARSENIC POISONING", "Forensic Medicine & Toxicology | Comprehensive Review");

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — TABLE OF CONTENTS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Overview / Contents", { color: C.accent2 });
  const topics = [
    "1.  Introduction & Background",
    "2.  Sources & Forms of Arsenic",
    "3.  Mechanism of Toxicity",
    "4.  Acute Poisoning — Clinical Features",
    "5.  Subacute Poisoning",
    "6.  Chronic Poisoning — Clinical Features",
    "7.  Skin & Nail Signs (Aldrich-Mees Lines, Raindrop Pigmentation)",
    "8.  Autopsy / Post-Mortem Findings",
    "9.  Medico-Legal Aspects",
    "10. Diagnosis & Investigations",
    "11. Treatment Flowchart",
    "12. Mnemonics & Memory Aids",
  ];
  addBullets(s, topics, 0.5, 1.2, 12.3, 5.8, { fontSize: 17, color: C.textDark });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Introduction — The Poison of Kings", { color: C.accent1 });
  // left panel
  box(s, 0.3, 1.2, 6.0, 5.5, C.darkBg);
  s.addText([
    { text: "What is Arsenic?", options: { bold: true, breakLine: true, fontSize: 18, color: C.accent2, fontFace: FONT } },
    { text: "• Atomic number: 33  |  Symbol: As", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Metalloid — properties of metal + non-metal", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Nearly tasteless and odourless → ideal homicidal poison", options: { breakLine: true, fontSize: 15, color: C.accent3, fontFace: FONT } },
    { text: "• Called 'Poison of Kings' or 'Inheritance Powder'", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: " ", options: { breakLine: true, fontSize: 10, fontFace: FONT } },
    { text: "Valence States", options: { bold: true, breakLine: true, fontSize: 17, color: C.accent2, fontFace: FONT } },
    { text: "• As⁰  — Elemental arsenic (least toxic)", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• As³⁺ (Arsenite) — MOST toxic form", options: { breakLine: true, fontSize: 15, color: C.accent1, fontFace: FONT } },
    { text: "• As⁵⁺ (Arsenate) — Moderately toxic", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• AsH₃ (Arsine gas) — Most toxic gas form", options: { breakLine: true, fontSize: 15, color: C.accent1, fontFace: FONT } },
  ], { x: 0.5, y: 1.3, w: 5.6, h: 5.2, valign: "top" });

  // right panel
  box(s, 6.6, 1.2, 6.0, 5.5, C.midBg);
  s.addText([
    { text: "Forensic Significance", options: { bold: true, breakLine: true, fontSize: 18, color: C.accent2, fontFace: FONT } },
    { text: "• Historically: Favourite homicidal poison (slow-acting)", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Mimics natural diseases (cholera, gastroenteritis)", options: { breakLine: true, fontSize: 15, color: C.accent3, fontFace: FONT } },
    { text: "• Persists in hair, nails, bones for years post-mortem", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Detectable even after exhumation", options: { breakLine: true, fontSize: 15, color: C.accent2, fontFace: FONT } },
    { text: " ", options: { breakLine: true, fontSize: 10, fontFace: FONT } },
    { text: "Fatal Dose & Period", options: { bold: true, breakLine: true, fontSize: 17, color: C.accent2, fontFace: FONT } },
    { text: "• Arsenic trioxide: 180–200 mg (Dikshit)", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Other texts: 200–300 mg", options: { breakLine: true, fontSize: 15, color: C.white, fontFace: FONT } },
    { text: "• Fatal period: 12–48 hrs (can be 2–3 hrs)", options: { breakLine: true, fontSize: 15, color: C.accent1, fontFace: FONT } },
    { text: "• Arsine gas: almost instantaneous", options: { breakLine: true, fontSize: 15, color: C.accent1, fontFace: FONT } },
  ], { x: 6.8, y: 1.3, w: 5.6, h: 5.2, valign: "top" });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — SOURCES & FORMS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Sources & Common Forms of Arsenic", { color: C.teal });
  // 3-column layout
  const cols = [
    { title: "Inorganic Compounds", color: C.accent1, items: [
      "Arsenic trioxide (As₂O₃)",
      "White arsenic — commonest poison",
      "Arsenic pentoxide (As₂O₅)",
      "Arsenious acid (H₃AsO₃)",
      "Arsenic trichloride (AsCl₃)",
      "Lead arsenate",
      "Copper acetoarsenite",
      "(Paris green — insecticide)",
    ]},
    { title: "Organic Compounds", color: C.accent2, items: [
      "Cacodylic acid",
      "Arsphenamine (Salvarsan)",
      "Dimercaptosuccinic acid",
      "Herbicides (MSMA, DSMA)",
      "Wood preservatives (CCA)",
      "Less toxic than inorganic",
      "Can cause anaphylaxis,",
      "hepatitis, agranulocytosis",
    ]},
    { title: "Environmental / Occupational", color: C.teal, items: [
      "Contaminated groundwater",
      "Mining & smelting",
      "Glass manufacturing",
      "Semiconductors (GaAs)",
      "Pesticide manufacturing",
      "Sheep dip workers",
      "Coal burning (fly ash)",
      "Traditional medicines",
    ]},
  ];
  cols.forEach((col, i) => {
    let x = 0.3 + i * 4.35;
    box(s, x, 1.2, 4.1, 0.6, col.color, col.title, C.white, 15);
    box(s, x, 1.85, 4.1, 4.8, C.darkBg);
    col.items.forEach((item, j) => {
      s.addText("• " + item, {
        x: x + 0.15, y: 1.95 + j * 0.55, w: 3.8, h: 0.5,
        fontSize: 13, color: C.white, fontFace: FONT
      });
    });
  });
  // note at bottom
  s.addText("⚠  Contaminated well water is the #1 public health source worldwide (Bangladesh, West Bengal, India)", {
    x: 0.3, y: 6.85, w: 12.7, h: 0.45,
    fontSize: 13, color: C.textDark, fontFace: FONT, italic: true, align: "center"
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — MECHANISM FLOWCHART
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Mechanism of Toxicity — Flowchart", { color: C.purple });

  // TOP BOX
  box(s, 3.8, 1.2, 5.7, 0.65, C.accent1, "ARSENIC ENTERS BODY", C.white, 16);
  arrow(s, 6.65, 1.85, 0.45);

  // Row 1 — routes
  const routes = ["Oral Ingestion", "Inhalation", "Dermal Absorption", "Parenteral"];
  routes.forEach((r, i) => {
    box(s, 0.15 + i * 3.25, 2.35, 3.0, 0.55, C.midBg, r, C.accent2, 13);
  });

  // converge line
  s.addShape(pres.ShapeType.rect, { x: 0.5, y: 2.9, w: 12.3, h: 0.04, fill: { color: C.accent2 } });
  arrow(s, 6.65, 2.9, 0.35);

  // Distributed to tissues
  box(s, 3.8, 3.28, 5.7, 0.65, C.orange, "DISTRIBUTED TO TISSUES", C.white, 16);
  s.addText("Liver → Kidney → Spleen → Muscle → Bone → Hair/Nails/Skin (keratin)", {
    x: 0.3, y: 3.98, w: 12.7, h: 0.4, fontSize: 12, color: C.textDark, fontFace: FONT, align: "center", italic: true
  });

  arrow(s, 6.65, 4.38, 0.35);

  // Mechanism boxes row
  const mechs = [
    { label: "Binds SH\n(Sulphydryl)\nGroups", color: C.accent1 },
    { label: "Inhibits Pyruvate\nDehydrogenase\nComplex", color: C.purple },
    { label: "Capillary\nDilation &\nTransudation", color: C.teal },
    { label: "Arsenate\nUncouples\nOxidative Phos.", color: C.orange },
  ];
  mechs.forEach((m, i) => {
    box(s, 0.15 + i * 3.25, 4.78, 3.0, 1.05, m.color, m.label, C.white, 12);
  });

  arrow(s, 6.65, 5.83, 0.35);

  // Outcome row
  const outcomes = ["Cellular Energy\nFailure", "Enzyme Inhibition\n(oxidative stress)", "Capillary Leak\n→ GI haemorrhage", "Cell Death\n(Apoptosis)"];
  outcomes.forEach((o, i) => {
    box(s, 0.15 + i * 3.25, 6.22, 3.0, 0.75, C.darkBg, o, C.accent3, 12);
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — ACUTE POISONING CLINICAL FEATURES
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Acute Arsenic Poisoning — Clinical Features", { color: C.accent1 });

  // Timeline flowchart
  const steps = [
    { time: "0–30 min",  text: "Metallic taste, garlic odour in breath, dry mouth (xerostomia), dysphagia", color: C.teal },
    { time: "30 min–2 h", text: "Severe nausea & vomiting (may be projectile), colicky abdominal pain, profuse diarrhoea — rice-water stools (bloody)", color: C.orange },
    { time: "2–8 h",     text: "Dehydration, hypovolaemic shock, tachycardia, hypotension, cold clammy skin, oliguria", color: C.accent1 },
    { time: "8–24 h",    text: "Cardiac arrhythmias (QTc prolongation), renal tubular necrosis, hepatic necrosis, CNS — headache, vertigo, delirium", color: C.purple },
    { time: ">24–48 h",  text: "Multi-organ failure, convulsions, coma, death (cardiovascular collapse / hypovolaemic shock)", color: C.darkBg },
  ];

  steps.forEach((step, i) => {
    // time badge
    box(s, 0.3, 1.25 + i * 1.08, 1.7, 0.85, step.color, step.time, C.white, 11);
    // arrow
    s.addShape(pres.ShapeType.line, {
      x: 2.05, y: 1.66 + i * 1.08, w: 0.35, h: 0,
      line: { color: step.color, width: 2 }
    });
    // content box
    box(s, 2.45, 1.25 + i * 1.08, 10.5, 0.85, "E8EDF2", "");
    s.addText(step.text, {
      x: 2.6, y: 1.28 + i * 1.08, w: 10.2, h: 0.82,
      fontSize: 13, color: C.textDark, fontFace: FONT, valign: "middle"
    });
  });

  // connecting vertical line
  s.addShape(pres.ShapeType.line, {
    x: 1.15, y: 1.25, w: 0, h: 4.9,
    line: { color: C.mutedText, width: 1, dashType: "dash" }
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — TYPES OF ACUTE POISONING
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Types / Presentations of Acute Arsenic Poisoning", { color: C.accent2 });

  const types = [
    {
      name: "1. Fulminant (Algid) Type",
      color: C.accent1,
      desc: [
        "• Massive ingestion",
        "• Rapid cardiovascular collapse",
        "• Marked GI symptoms with rice-watery stools",
        "• Death within 24 hours",
        "• Resembles Asiatic cholera"
      ]
    },
    {
      name: "2. Gastroenteritic Type",
      color: C.orange,
      desc: [
        "• Most COMMON type",
        "• Metallic taste → vomiting → diarrhoea",
        "• Abdominal pain / cramps",
        "• Blood in stool / vomit",
        "• Death in 12–48 hours"
      ]
    },
    {
      name: "3. Narcotic Type",
      color: C.purple,
      desc: [
        "• GI symptoms minimal",
        "• Predominantly CNS effects",
        "• Giddiness, formication",
        "• Muscle tenderness",
        "• Delirium → coma → death"
      ]
    },
  ];

  types.forEach((t, i) => {
    let x = 0.3 + i * 4.35;
    box(s, x, 1.2, 4.1, 0.7, t.color, t.name, C.white, 14);
    box(s, x, 1.95, 4.1, 4.7, C.darkBg);
    t.desc.forEach((line, j) => {
      s.addText(line, {
        x: x + 0.1, y: 2.1 + j * 0.82, w: 3.9, h: 0.75,
        fontSize: 14, color: C.white, fontFace: FONT
      });
    });
  });

  // Cholera vs Arsenic note
  box(s, 0.3, 6.75, 12.7, 0.55, C.accent2, "Key Differentiator: In Arsenic — pain BEFORE vomiting; stools dark/bloody first, later rice-watery  |  In Cholera — watery stools first without blood", C.textDark, 12);
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — ARSENIC vs CHOLERA TABLE
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Differential Diagnosis: Arsenic Poisoning vs Cholera", { color: C.teal });

  const rows = [
    ["Feature", "Arsenic Poisoning", "Cholera"],
    ["Pain in throat", "BEFORE vomiting", "After vomiting"],
    ["Purging", "After vomiting", "Before vomiting"],
    ["Stools", "Dark, bloody → later rice-watery", "Rice-watery, not bloody, involuntary jet"],
    ["Tenesmus / anal irritation", "Present", "Absent"],
    ["Vomited matter", "Mucus, bile and blood", "Watery, no mucus/bile/blood"],
    ["Voice", "Not affected", "Rough and whistling"],
    ["Conjunctivae", "Inflamed", "Not inflamed"],
    ["Analysis of excreta", "Arsenic present", "Cholera vibrio present"],
    ["Circumstantial evidence", "Arsenic poisoning evidence", "Other cholera cases in locality"],
  ];

  const colW = [3.5, 4.5, 4.5];
  const colX = [0.3, 3.85, 8.4];
  const rowH = 0.52;

  rows.forEach((row, ri) => {
    row.forEach((cell, ci) => {
      const isHeader = ri === 0;
      const bg = isHeader ? C.darkBg : (ri % 2 === 0 ? "DDE6EF" : C.white);
      const tc = isHeader ? C.accent2 : C.textDark;
      box(s, colX[ci], 1.2 + ri * rowH, colW[ci], rowH, bg);
      s.addText(cell, {
        x: colX[ci] + 0.08, y: 1.2 + ri * rowH, w: colW[ci] - 0.1, h: rowH,
        fontSize: isHeader ? 14 : 13, bold: isHeader, color: tc, fontFace: FONT, valign: "middle"
      });
    });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — CHRONIC POISONING
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Chronic Arsenic Poisoning — Systems Review", { color: C.orange });

  const systems = [
    { sys: "Skin", color: C.orange, icon: "🎨", pts: [
      "Raindrop pigmentation (mottled brown)",
      "Hyperkeratosis — palms & soles",
      "Bowen's disease (pre-malignant)",
      "Erythematous flushing (earliest sign)",
      "Desquamation / scaling"
    ]},
    { sys: "Nails & Hair", color: C.teal, icon: "💅", pts: [
      "Aldrich-Mees lines (transverse white bands)",
      "1–2 mm wide, appears at 5–6 weeks",
      "Distance from nail base = timing of exposure",
      "Brittle nails, irregular thickening",
      "Diffuse / patchy alopecia"
    ]},
    { sys: "Nervous System", color: C.purple, icon: "🧠", pts: [
      "Symmetrical sensorimotor polyneuropathy",
      "Glove-and-stocking anaesthesia",
      "Paraesthesia, numbness — soles first",
      "Resembles Guillain-Barré syndrome",
      "Encephalopathy: headache, personality change"
    ]},
    { sys: "GI / Liver", color: C.accent1, icon: "🫁", pts: [
      "Nausea, vomiting, diarrhoea (persistent)",
      "Hepatomegaly, jaundice",
      "Cirrhosis (long-term)",
      "Portal hypertension"
    ]},
    { sys: "Haematological", color: C.accent2, icon: "🩸", pts: [
      "Normochromic normocytic anaemia",
      "Leucopenia, thrombocytopenia",
      "Mild eosinophilia",
      "Karyorrhexis on bone marrow",
      "Megaloblastic anaemia (folate interference)"
    ]},
    { sys: "Cardiovascular / Renal", color: C.midBg, icon: "❤️", pts: [
      "Blackfoot disease (obliterative arterial disease)",
      "Chronic nephritis, dependent oedema",
      "Cardiac failure",
      "QTc prolongation"
    ]},
  ];

  // 2 rows × 3 cols
  systems.forEach((sys, i) => {
    let col = i % 3;
    let row = Math.floor(i / 3);
    let x = 0.25 + col * 4.35;
    let y = 1.2 + row * 3.05;
    box(s, x, y, 4.1, 0.55, sys.color, sys.sys, C.white, 14);
    box(s, x, y + 0.55, 4.1, 2.45, C.darkBg);
    sys.pts.forEach((p, j) => {
      s.addText("• " + p, {
        x: x + 0.1, y: y + 0.62 + j * 0.44, w: 3.9, h: 0.42,
        fontSize: 12, color: C.white, fontFace: FONT
      });
    });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — ALDRICH-MEES LINES VISUAL SLIDE
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Aldrich-Mees Lines & Skin Signs (Hallmarks)", { color: C.accent2 });

  // Left diagram — nail with Mee's line annotation
  box(s, 0.4, 1.2, 5.5, 5.6, C.darkBg);
  s.addText("MEES' LINES (Leukonychia Striata)", {
    x: 0.5, y: 1.3, w: 5.3, h: 0.6,
    fontSize: 16, bold: true, color: C.accent2, fontFace: FONT, align: "center"
  });
  // Draw nail schematic
  s.addShape(pres.ShapeType.roundRect, {
    x: 1.8, y: 2.1, w: 2.4, h: 3.5,
    fill: { color: "F5DEB3" }, line: { color: "8B7355", width: 2 }, rectRadius: 0.3
  });
  // White lines
  [0.6, 1.3, 2.0, 2.7].forEach(offset => {
    s.addShape(pres.ShapeType.rect, {
      x: 1.85, y: 2.1 + offset, w: 2.3, h: 0.12,
      fill: { color: C.white }, line: { color: "CCCCCC", width: 0 }
    });
  });
  // labels
  s.addText("← White transverse\n   bands (1–2 mm)", { x: 4.3, y: 2.4, w: 1.5, h: 0.8, fontSize: 10, color: C.accent2, fontFace: FONT });
  s.addText("Multiple exposures\n→ Multiple lines", { x: 4.3, y: 3.3, w: 1.5, h: 0.8, fontSize: 10, color: C.white, fontFace: FONT });
  s.addText("Distance from base\n= time of exposure", { x: 4.3, y: 4.2, w: 1.5, h: 0.8, fontSize: 10, color: C.accent3, fontFace: FONT });
  s.addText("Nail grows 0.1 mm/day\n→ 1 cm from base = ~100 days prior exposure", {
    x: 0.5, y: 5.3, w: 5.3, h: 0.9, fontSize: 11, color: C.mutedText, fontFace: FONT, align: "center"
  });

  // Right panel — all hallmark signs
  box(s, 6.2, 1.2, 6.6, 5.6, C.midBg);
  s.addText("KEY CLINICAL HALLMARKS", {
    x: 6.3, y: 1.3, w: 6.3, h: 0.5,
    fontSize: 16, bold: true, color: C.accent2, fontFace: FONT, align: "center"
  });
  const signs = [
    { name: "Aldrich-Mees Lines", detail: "Transverse white bands on nails\nAppear 5–6 weeks after exposure\nForensic timing tool" },
    { name: "Raindrop Pigmentation", detail: "Mottled brown pigmentation\nFlexures, temples, eyelids, neck\nHypo-pigmented spots on hyperpigmented base" },
    { name: "Hyperkeratosis", detail: "Thickening of palms & soles\nCorns and arsenical warts\nPre-malignant change" },
    { name: "Bowen's Disease", detail: "Squamous cell carcinoma in situ\nIndicates systemic malignancy risk\nLung, bladder, skin cancers" },
    { name: "Alopecia", detail: "Patchy or diffuse hair loss\nHair arsenic detectable for months-years" },
  ];
  signs.forEach((sign, i) => {
    box(s, 6.3, 1.9 + i * 0.98, 6.3, 0.9, i % 2 === 0 ? C.darkBg : "0D1B2A");
    s.addText(sign.name, { x: 6.4, y: 1.92 + i * 0.98, w: 2.0, h: 0.45, fontSize: 13, bold: true, color: C.accent2, fontFace: FONT });
    s.addText(sign.detail, { x: 8.45, y: 1.92 + i * 0.98, w: 4.1, h: 0.85, fontSize: 11, color: C.white, fontFace: FONT, valign: "top" });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — AUTOPSY FINDINGS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Post-Mortem / Autopsy Findings", { color: C.accent1 });

  // Acute PM findings (left)
  box(s, 0.3, 1.2, 6.0, 5.6, C.darkBg);
  s.addText("ACUTE POISONING", {
    x: 0.4, y: 1.25, w: 5.8, h: 0.55,
    fontSize: 16, bold: true, color: C.accent1, fontFace: FONT, align: "center"
  });
  const acutePM = [
    ["External", "Garlic odour, no rigidity changes specific, periorbital oedema"],
    ["Stomach", "Normal or haemorrhagic gastritis, patchy inflammatory redness, acute erosions"],
    ["Small Intestine", "Dilated, reddened mucosa, thickened folds, submucosal haemorrhages"],
    ["Large Intestine", "Congested, mucosal sloughing"],
    ["Liver", "Fatty degeneration, centrilobular necrosis, jaundice"],
    ["Kidneys", "Tubular necrosis (proximal tubules)"],
    ["Heart", "Subepicardial haemorrhages, myocardial degeneration"],
    ["Brain", "Cerebral oedema, vascular congestion"],
  ];
  acutePM.forEach((row, i) => {
    s.addText(row[0] + ": ", { x: 0.45, y: 1.9 + i * 0.54, w: 1.5, h: 0.5, fontSize: 12, bold: true, color: C.accent2, fontFace: FONT });
    s.addText(row[1], { x: 1.9, y: 1.9 + i * 0.54, w: 4.2, h: 0.5, fontSize: 12, color: C.white, fontFace: FONT });
  });

  // Chronic PM findings (right)
  box(s, 6.6, 1.2, 6.0, 5.6, C.midBg);
  s.addText("CHRONIC POISONING", {
    x: 6.7, y: 1.25, w: 5.8, h: 0.55,
    fontSize: 16, bold: true, color: C.orange, fontFace: FONT, align: "center"
  });
  const chronPM = [
    ["Skin", "Raindrop pigmentation, hyperkeratosis, Bowen's disease"],
    ["Nails", "Aldrich-Mees lines (white transverse bands)"],
    ["Hair", "Arsenic detectable by neutron activation analysis"],
    ["Liver", "Cirrhosis, portal hypertension, hepatomegaly"],
    ["Peripheral Nerves", "Axonal neuropathy, myelin fragmentation"],
    ["Bone Marrow", "Hypoplasia, karyorrhexis, megaloblastic changes"],
    ["Kidney", "Chronic nephritis, glomerulosclerosis"],
    ["Distribution", "Liver > Kidney > Spleen > Muscle > Bone > Keratin (hair, nails)"],
  ];
  chronPM.forEach((row, i) => {
    s.addText(row[0] + ": ", { x: 6.75, y: 1.9 + i * 0.54, w: 1.7, h: 0.5, fontSize: 12, bold: true, color: C.accent2, fontFace: FONT });
    s.addText(row[1], { x: 8.4, y: 1.9 + i * 0.54, w: 4.1, h: 0.5, fontSize: 12, color: C.white, fontFace: FONT });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — MEDICO-LEGAL ASPECTS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Medico-Legal Aspects", { color: C.purple });

  box(s, 0.3, 1.2, 12.7, 5.6, C.darkBg);

  const mlItems = [
    {
      heading: "1. Homicidal Use",
      color: C.accent1,
      body: "Most common metallic homicidal poison. Tasteless & odourless → easily added to food/drink. Slow action mimics natural disease (gastroenteritis, cholera). Administered in repeated small doses (slow murder). Chronic form delays suspicion."
    },
    {
      heading: "2. Suicidal Use",
      color: C.orange,
      body: "Insecticides (Paris green) most common suicidal source. Acute gastroenteric picture follows. Rarely — occupational exposure."
    },
    {
      heading: "3. Accidental Poisoning",
      color: C.teal,
      body: "Contaminated groundwater (Bangladesh, West Bengal, India — 'Arsenal of Bangladesh'). Occupational: miners, smelters, pesticide workers, glass workers, semiconductor industry. Accidental ingestion of Paris green pesticide."
    },
    {
      heading: "4. Forensic Detection",
      color: C.accent2,
      body: "Hair and nails preserve arsenic for YEARS — invaluable for exhumation cases. Reinsch test: arsenic deposits as grey mirror on copper strip. Marsh test: classic confirmatory — arsine gas converted to metallic mirror. Reinsch → quick screen; Marsh → confirmation."
    },
    {
      heading: "5. Key Forensic Points",
      color: C.purple,
      body: "Fatal liver arsenic level >1 mg%. Normal blood As <4 µg/L; urine <0.03 mg/L. Serious poisoning: blood As >1.5 mg/100 mL. X-ray abdomen may show radiodense arsenic in GIT. Time exposure estimated by measuring Mees' line distance from nail base."
    },
  ];

  mlItems.forEach((item, i) => {
    let y = 1.3 + i * 1.04;
    box(s, 0.45, y, 2.5, 0.85, item.color, item.heading, C.white, 12);
    s.addText(item.body, {
      x: 3.1, y: y + 0.05, w: 9.7, h: 0.85,
      fontSize: 12, color: C.white, fontFace: FONT, valign: "middle"
    });
    if (i < mlItems.length - 1) {
      s.addShape(pres.ShapeType.line, { x: 0.45, y: y + 0.9, w: 12.3, h: 0, line: { color: C.mutedText, width: 0.5, dashType: "dash" } });
    }
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — CHEMICAL TESTS / INVESTIGATIONS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Diagnosis & Chemical Tests (Marsh, Reinsch)", { color: C.teal });

  // Reinsch box
  box(s, 0.3, 1.2, 6.0, 2.7, C.darkBg);
  s.addText("REINSCH TEST", { x: 0.4, y: 1.25, w: 5.8, h: 0.55, fontSize: 16, bold: true, color: C.teal, fontFace: FONT, align: "center" });
  s.addText([
    { text: "Principle: ", options: { bold: true, color: C.accent2, fontSize: 13, fontFace: FONT } },
    { text: "Copper strip dipped in acidified sample — arsenic deposits as grey-black metallic sheen\n", options: { color: C.white, fontSize: 13, fontFace: FONT } },
    { text: "Use: ", options: { bold: true, color: C.accent2, fontSize: 13, fontFace: FONT } },
    { text: "SCREENING test (also detects Hg, Sb, Bi)\n", options: { color: C.white, fontSize: 13, fontFace: FONT } },
    { text: "Advantage: ", options: { bold: true, color: C.accent2, fontSize: 13, fontFace: FONT } },
    { text: "Simple, rapid, bedside", options: { color: C.white, fontSize: 13, fontFace: FONT } },
  ], { x: 0.45, y: 1.9, w: 5.6, h: 1.8, valign: "top" });

  // Marsh box
  box(s, 6.6, 1.2, 6.0, 2.7, C.midBg);
  s.addText("MARSH TEST (Berzelius, 1836)", { x: 6.7, y: 1.25, w: 5.8, h: 0.55, fontSize: 16, bold: true, color: C.accent2, fontFace: FONT, align: "center" });
  s.addText([
    { text: "Principle: ", options: { bold: true, color: C.teal, fontSize: 13, fontFace: FONT } },
    { text: "Arsenic → Arsine gas (H₂SO₄ + Zn) → heated tube → metallic arsenic mirror\n", options: { color: C.white, fontSize: 13, fontFace: FONT } },
    { text: "Use: ", options: { bold: true, color: C.teal, fontSize: 13, fontFace: FONT } },
    { text: "CONFIRMATORY (gold standard)\n", options: { color: C.accent2, fontSize: 13, fontFace: FONT } },
    { text: "Mirror soluble in NaOCl/H₂O₂ → confirms As\n", options: { color: C.white, fontSize: 13, fontFace: FONT } },
    { text: "Detects: 0.02 mg arsenic", options: { color: C.white, fontSize: 13, fontFace: FONT } },
  ], { x: 6.75, y: 1.9, w: 5.6, h: 1.8, valign: "top" });

  // Investigations Table
  s.addText("Other Investigations", { x: 0.3, y: 4.05, w: 12.7, h: 0.45, fontSize: 15, bold: true, color: C.textDark, fontFace: FONT });
  const invRows = [
    ["Investigation", "Normal", "Significance in Arsenic Poisoning"],
    ["Urine arsenic", "<0.03 mg/L", "Most reliable; elevated within 24–48 h of exposure"],
    ["Blood arsenic", "<4 µg/L", ">1.5 mg/100 mL = serious poisoning; hepatic >1 mg% in fatal cases"],
    ["Hair arsenic", "<2 ppm", "Long-term marker; neutron activation analysis (NAA)"],
    ["AAS / ICP-MS", "—", "Atomic Absorption Spectroscopy — most accurate quantitation"],
    ["X-ray abdomen", "—", "Shows radiodense arsenic in GIT in acute cases"],
    ["ECG", "—", "QTc prolongation, ventricular arrhythmias"],
  ];
  invRows.forEach((row, ri) => {
    [0.3, 3.1, 5.5].forEach((cx, ci) => {
      const isH = ri === 0;
      box(s, cx, 4.55 + ri * 0.42, ci === 0 ? 2.7 : ci === 1 ? 2.3 : 7.0, 0.4, isH ? C.darkBg : (ri % 2 === 0 ? "DDE6EF" : C.white));
      s.addText(row[ci], {
        x: cx + 0.06, y: 4.55 + ri * 0.42, w: (ci === 0 ? 2.7 : ci === 1 ? 2.3 : 7.0) - 0.1, h: 0.4,
        fontSize: isH ? 12 : 11, bold: isH, color: isH ? C.accent2 : C.textDark, fontFace: FONT, valign: "middle"
      });
    });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — TREATMENT FLOWCHART
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Treatment Flowchart — Acute Arsenic Poisoning", { color: C.green });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: "F5FAF5" } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 1.0, fill: { color: C.darkBg } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.0, w: "100%", h: 0.07, fill: { color: C.green } });
  s.addText("Treatment Flowchart — Acute Arsenic Poisoning", {
    x: 0.35, y: 0.1, w: 12.6, h: 0.8,
    fontSize: 26, bold: true, color: C.white, fontFace: FONT, valign: "middle"
  });

  // Step 1 — Immediate
  box(s, 4.15, 1.2, 5.0, 0.65, C.accent1, "ARSENIC EXPOSURE CONFIRMED / SUSPECTED", C.white, 13);
  arrow(s, 6.65, 1.85, 0.4);

  // Step 2 — Remove
  box(s, 4.15, 2.28, 5.0, 0.65, C.orange, "REMOVE FROM SOURCE\n(inhalation) / REMOVE CLOTHING", C.white, 12);
  arrow(s, 6.65, 2.93, 0.4);

  // Step 3 — Stabilise
  box(s, 4.15, 3.36, 5.0, 0.65, C.teal, "AIRWAY / BREATHING / CIRCULATION\nIV fluids, O₂, cardiac monitoring", C.white, 12);
  arrow(s, 6.65, 4.01, 0.4);

  // Side branch — GI decontamination
  box(s, 0.3, 3.5, 3.5, 1.5, C.midBg);
  s.addText("GI Decontamination\n(if oral, within 1–2 h)", { x: 0.35, y: 3.52, w: 3.4, h: 0.6, fontSize: 12, bold: true, color: C.accent2, fontFace: FONT, align: "center" });
  s.addText("• Gastric lavage (warm water/milk)\n• Whole bowel irrigation\n• Activated charcoal (limited benefit)\n• Avoid alkalis (↑ arsenic solubility)", { x: 0.35, y: 4.1, w: 3.4, h: 0.85, fontSize: 11, color: C.white, fontFace: FONT });
  s.addShape(pres.ShapeType.line, { x: 3.8, y: 4.0, w: 0.35, h: 0, line: { color: C.accent2, width: 2 } });

  // Step 4 — Chelation
  box(s, 4.15, 4.44, 5.0, 0.65, C.purple, "CHELATION THERAPY", C.white, 14);
  arrow(s, 6.65, 5.09, 0.3);

  // Chelation detail
  box(s, 0.3, 5.1, 12.7, 1.7, C.darkBg);
  s.addText("Chelating Agents", { x: 0.45, y: 5.15, w: 3.0, h: 0.45, fontSize: 14, bold: true, color: C.accent2, fontFace: FONT });
  const chelates = [
    { name: "BAL (Dimercaprol)", detail: "3 mg/kg IM q4h × 2 days → then q6h × 1 day → q12h × 7 days\nDrug of choice (DOC) for ACUTE arsenic poisoning" },
    { name: "DMSA (Succimer)", detail: "10 mg/kg PO q8h × 5 days — safer, oral option\nUsed for mild-moderate, also chronic" },
    { name: "DMPS (Unithiol)", detail: "5 mg/kg IV/PO — used in Europe\nNot widely available" },
    { name: "D-Penicillamine", detail: "250 mg PO qid — less effective; 2nd line\nAlso used for chronic arsenic" },
  ];
  chelates.forEach((c, i) => {
    let cx = 0.45 + i * 3.15;
    box(s, cx, 5.65, 3.0, 0.97, i % 2 === 0 ? C.midBg : "0D1B2A");
    s.addText(c.name, { x: cx + 0.05, y: 5.68, w: 2.9, h: 0.38, fontSize: 12, bold: true, color: C.accent3, fontFace: FONT });
    s.addText(c.detail, { x: cx + 0.05, y: 6.05, w: 2.9, h: 0.55, fontSize: 10, color: C.white, fontFace: FONT });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — MNEMONICS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Mnemonics & Memory Aids", { color: C.accent2 });

  // MNEMONIC 1 — ARSENIC (features of chronic poisoning)
  box(s, 0.3, 1.2, 6.2, 5.6, C.darkBg);
  s.addText("Mnemonic 1: ARSENIC", {
    x: 0.4, y: 1.25, w: 5.9, h: 0.6,
    fontSize: 18, bold: true, color: C.accent2, fontFace: FONT, align: "center"
  });
  s.addText("Chronic Arsenic Poisoning Features", {
    x: 0.4, y: 1.85, w: 5.9, h: 0.4,
    fontSize: 13, color: C.mutedText, fontFace: FONT, align: "center", italic: true
  });
  const arsenic = [
    { L: "A", T: "Aldrich-Mees lines (nails)", color: C.accent1 },
    { L: "R", T: "Raindrop pigmentation (skin)", color: C.orange },
    { L: "S", T: "Sensorimotor neuropathy", color: C.accent2 },
    { L: "E", T: "Encephalopathy + Enzyme inhibition", color: C.teal },
    { L: "N", T: "Nausea, vomiting, diarrhoea", color: C.purple },
    { L: "I", T: "Iron (anaemia) + Immune suppression", color: C.green },
    { L: "C", T: "Cancer (lung, skin, bladder)", color: C.accent1 },
  ];
  arsenic.forEach((item, i) => {
    box(s, 0.5, 2.35 + i * 0.63, 0.55, 0.53, item.color, item.L, C.white, 18);
    s.addText(item.T, { x: 1.2, y: 2.38 + i * 0.63, w: 5.0, h: 0.5, fontSize: 14, color: C.white, fontFace: FONT, valign: "middle" });
  });

  // MNEMONIC 2 — MARSH test steps
  box(s, 6.8, 1.2, 5.9, 2.6, C.midBg);
  s.addText("Mnemonic 2: MARSH Test Steps", {
    x: 6.9, y: 1.25, w: 5.7, h: 0.55,
    fontSize: 15, bold: true, color: C.accent3, fontFace: FONT, align: "center"
  });
  const marsh = [
    { L: "M", T: "Mix — sample with H₂SO₄ + Zn" },
    { L: "A", T: "Arsine gas is produced" },
    { L: "R", T: "Route through heated glass tube" },
    { L: "S", T: "Silver metallic mirror deposited" },
    { L: "H", T: "HNO₃ dissolves mirror (confirms As)" },
  ];
  marsh.forEach((item, i) => {
    box(s, 6.9, 1.87 + i * 0.36, 0.38, 0.33, C.accent3, item.L, C.darkBg, 12);
    s.addText(item.T, { x: 7.35, y: 1.87 + i * 0.36, w: 5.2, h: 0.33, fontSize: 12, color: C.white, fontFace: FONT, valign: "middle" });
  });

  // MNEMONIC 3 — BAL therapy
  box(s, 6.8, 3.95, 5.9, 2.85, C.darkBg);
  s.addText("Mnemonic 3: CHELATE (Treatment Principles)", {
    x: 6.9, y: 4.0, w: 5.7, h: 0.55,
    fontSize: 14, bold: true, color: C.accent2, fontFace: FONT, align: "center"
  });
  const chelate = [
    { L: "C", T: "Chelation with BAL (DOC)" },
    { L: "H", T: "Hydration — aggressive IV fluids" },
    { L: "E", T: "ECG monitoring (QTc)" },
    { L: "L", T: "Lavage (gastric washout)" },
    { L: "A", T: "Antioxidants + supportive care" },
    { L: "T", T: "Test urine/blood arsenic levels" },
    { L: "E", T: "Eliminate — whole bowel irrigation" },
  ];
  chelate.forEach((item, i) => {
    box(s, 6.9, 4.63 + i * 0.3, 0.38, 0.27, C.accent2, item.L, C.darkBg, 12);
    s.addText(item.T, { x: 7.35, y: 4.63 + i * 0.3, w: 5.2, h: 0.27, fontSize: 11, color: C.white, fontFace: FONT, valign: "middle" });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 16 — ABSORPTION, DISTRIBUTION, METABOLISM, EXCRETION
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Pharmacokinetics — ADME of Arsenic", { color: C.teal });

  const adme = [
    {
      title: "ABSORPTION",
      color: C.accent1,
      pts: [
        "Oral (pentavalent arsenic — most common)",
        "Inhalation (arsine gas — most rapid)",
        "Dermal (arsenite)",
        "Parenteral (IV)",
        "Avg daily intake: 0.5–1 mg (food/water)",
        "Permissible limit in groundwater: 0.05 mg/L"
      ]
    },
    {
      title: "DISTRIBUTION",
      color: C.orange,
      pts: [
        "Early: Liver > Kidney > Spleen > Lung",
        "Later: Muscle (days), Bone (weeks–months)",
        "Long-term: Hair, Nails, Skin (years)",
        "Bound to protein portion of haemoglobin",
        "Does NOT cross blood-brain barrier easily",
        "DOES cross placenta (teratogenic)"
      ]
    },
    {
      title: "METABOLISM",
      color: C.teal,
      pts: [
        "Inorganic As³⁺ methylated in liver",
        "→ Monomethylarsonic acid (MMA)",
        "→ Dimethylarsinic acid (DMA)",
        "As³⁺ inhibits thiol enzymes",
        "Oxidative stress via H₂O₂ generation",
        "Replaces phosphorus in bone apatite"
      ]
    },
    {
      title: "EXCRETION",
      color: C.purple,
      pts: [
        "Primarily kidneys (as methylated arsenic)",
        "Also: faeces, bile, sweat, skin, hair, nails",
        "Excreted as arsenobetaine in seafood-eaters",
        "Hair/nail arsenic detectable for years",
        "Urine As: best indicator of recent exposure",
        "Half-life (blood): ~60 hours"
      ]
    },
  ];

  adme.forEach((item, i) => {
    let x = 0.3 + i * 3.25;
    box(s, x, 1.2, 3.0, 0.65, item.color, item.title, C.white, 15);
    box(s, x, 1.9, 3.0, 4.9, C.darkBg);
    item.pts.forEach((p, j) => {
      s.addText("• " + p, {
        x: x + 0.1, y: 2.0 + j * 0.73, w: 2.85, h: 0.68,
        fontSize: 12, color: C.white, fontFace: FONT
      });
    });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 17 — CARCINOGENICITY & LONG-TERM EFFECTS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Carcinogenicity & Long-Term Effects of Arsenic", { color: C.accent1 });

  box(s, 0.3, 1.2, 12.7, 1.0, C.accent1);
  s.addText("Arsenic is a Group 1 Human Carcinogen (IARC)", {
    x: 0.3, y: 1.3, w: 12.7, h: 0.8,
    fontSize: 20, bold: true, color: C.white, fontFace: FONT, align: "center"
  });

  const cancers = [
    { site: "Skin", detail: "Bowen's disease (SCC in situ), Basal cell carcinoma, Squamous cell carcinoma\nMost characteristic arsenic malignancy", color: C.accent1 },
    { site: "Lung", detail: "Inhalation route (smelters, miners)\nSCC and small cell lung cancer\nIncreased risk × 3–8 fold", color: C.orange },
    { site: "Bladder", detail: "Ingestion via contaminated water\nTransitional cell carcinoma\nDose-dependent risk", color: C.teal },
    { site: "Liver", detail: "Angiosarcoma (vascular tumour)\nHepatomegaly → cirrhosis → malignancy\nNon-cirrhotic portal fibrosis", color: C.purple },
    { site: "Kidney", detail: "Renal cell carcinoma\nAssociated with chronic nephropathy\nLess common than skin/lung/bladder", color: C.accent2 },
    { site: "Other Effects", detail: "Blackfoot disease (peripheral arterial occlusion)\nDiabetes mellitus\nHypertension, peripheral vascular disease\nTeratogenicity", color: C.green },
  ];

  cancers.forEach((c, i) => {
    let col = i % 3;
    let row = Math.floor(i / 3);
    let x = 0.3 + col * 4.35;
    let y = 2.35 + row * 2.2;
    box(s, x, y, 4.1, 0.55, c.color, c.site, C.white, 15);
    box(s, x, y + 0.55, 4.1, 1.6, C.darkBg);
    s.addText(c.detail, { x: x + 0.12, y: y + 0.6, w: 3.9, h: 1.5, fontSize: 12, color: C.white, fontFace: FONT });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 18 — SUMMARY / KEY POINTS
// ════════════════════════════════════════════════════════════════════════════
{
  let s = contentSlide("Key Take-Home Points — Examiner's Favourites", { color: C.accent2 });

  const keyPoints = [
    { num: "01", text: "Arsenic trioxide is the COMMONEST arsenic poison used in homicide; fatal dose 180–300 mg; fatal period 12–48 h", color: C.accent1 },
    { num: "02", text: "Mechanism: SH-group inhibition (enzyme block) + capillary dilation + pyruvate dehydrogenase inhibition", color: C.orange },
    { num: "03", text: "Acute type: Gastroenteritic (commonest) > Fulminant > Narcotic; resembles cholera but stools are dark/bloody FIRST", color: C.teal },
    { num: "04", text: "Aldrich-Mees lines: White transverse nail bands; appear at 5–6 weeks; distance from nail base = timing of exposure", color: C.accent2 },
    { num: "05", text: "Chronic skin hallmark: Raindrop pigmentation (flexures/eyelids) + hyperkeratosis palms-soles + Bowen's disease", color: C.purple },
    { num: "06", text: "Peripheral neuropathy = glove-and-stocking distribution; mimics Guillain-Barré syndrome", color: C.green },
    { num: "07", text: "Reinsch test (screening) → Marsh test (CONFIRMATORY / gold standard for arsenic detection)", color: C.accent3 },
    { num: "08", text: "BAL (Dimercaprol) = Drug of Choice for acute poisoning; DMSA = oral alternative", color: C.orange },
    { num: "09", text: "Arsenic persists in hair/nails for YEARS — critical for post-mortem and exhumation cases", color: C.teal },
    { num: "10", text: "IARC Group 1 Carcinogen: Skin > Lung > Bladder > Liver cancers; Blackfoot disease (obliterative arterial disease)", color: C.accent1 },
  ];

  keyPoints.forEach((kp, i) => {
    let col = i % 2;
    let row = Math.floor(i / 2);
    let x = 0.3 + col * 6.5;
    let y = 1.2 + row * 1.05;
    box(s, x, y, 0.7, 0.85, kp.color, kp.num, C.white, 16);
    box(s, x + 0.75, y, 5.6, 0.85, C.darkBg);
    s.addText(kp.text, { x: x + 0.85, y: y + 0.03, w: 5.4, h: 0.8, fontSize: 12, color: C.white, fontFace: FONT, valign: "middle" });
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 19 — THANK YOU
// ════════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: "100%", fill: { color: C.darkBg } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: "100%", fill: { color: C.accent1 } });
  s.addShape(pres.ShapeType.rect, { x: 0.18, y: 2.9, w: 12.9, h: 0.07, fill: { color: C.accent2 } });
  s.addText("Thank You", {
    x: 0.5, y: 1.3, w: 12.3, h: 1.5,
    fontSize: 52, bold: true, color: C.white, fontFace: FONT, align: "center"
  });
  s.addText("Arsenic Poisoning — Forensic Medicine & Toxicology", {
    x: 0.5, y: 3.1, w: 12.3, h: 0.7,
    fontSize: 20, color: C.accent2, fontFace: FONT, align: "center", italic: true
  });
  s.addText("Sources: PC Dikshit Textbook of Forensic Medicine | Essentials of Forensic Medicine & Toxicology (2026) | ATSDR | Katzung Pharmacology", {
    x: 0.5, y: 4.1, w: 12.3, h: 0.7,
    fontSize: 12, color: C.mutedText, fontFace: FONT, align: "center"
  });
}

// ── WRITE FILE ──────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/arsenic-ppt/Arsenic_Poisoning_Forensic.pptx" })
  .then(() => console.log("PPT created successfully!"))
  .catch(err => { console.error(err); process.exit(1); });
Running Command

cd /home/daytona/workspace/arsenic-ppt && node build.js 2>&1

Running Command

ls -lh /home/daytona/workspace/arsenic-ppt/

Your presentation is ready! Download it here:

Arsenic Poisoning Forensic

Presentation · PPTX


What's Inside (19 Slides)

The deck uses a bold deep navy + vivid red/amber forensic color palette on a 16:9 widescreen layout.
#SlideKey Feature
1Title SlideArsenic Poisoning — Forensic Medicine & Toxicology
2Contents12-topic table of contents
3IntroductionValence states (As⁰, As³⁺, As⁵⁺, AsH₃), forensic significance, fatal dose/period
4Sources & Forms3-column: Inorganic / Organic / Environmental compounds
5Mechanism FlowchartMulti-level flowchart: Absorption → Distribution → SH inhibition / enzyme block / capillary dilation / uncoupling
6Acute PoisoningTimeline flowchart (0–30 min → 48 h) with color-coded stages
7Types of Acute PoisoningFulminant / Gastroenteritic / Narcotic types
8Arsenic vs Cholera TableFull differential diagnosis table (9 features)
9Chronic Poisoning6-system grid: Skin, Nails/Hair, Nervous, GI/Liver, Haematological, CVS/Renal
10Mees' Lines & Skin SignsDrawn nail schematic with annotation + Raindrop pigmentation, Hyperkeratosis, Bowen's disease
11Autopsy FindingsSide-by-side: Acute PM vs Chronic PM findings
12Medico-Legal AspectsHomicidal / Suicidal / Accidental / Forensic detection / Key values
13Chemical TestsReinsch test, Marsh test, investigations table with normal values
14Treatment FlowchartStep-by-step flowchart with chelation agents (BAL, DMSA, DMPS, D-Pen)
15MnemonicsARSENIC (chronic features), MARSH (test steps), CHELATE (treatment)
16ADME Pharmacokinetics4-column: Absorption, Distribution, Metabolism, Excretion
17CarcinogenicityIARC Group 1 — Skin, Lung, Bladder, Liver, Kidney + Blackfoot disease
18Key Take-Home Points10 examiner-favourite bullet points
19Thank YouSources cited (PC Dikshit, Essentials 2026, ATSDR, Katzung)

The book to refer and use as reference is parks for com med make a ppt on accidents with flowcharts and pictures where ever needed

Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Loading Image
Running Command

mkdir -p /home/daytona/workspace/accidents-ppt && echo "dir ready"

Running Command

node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://cdn.orris.care/cdss_images/8ecad8121ef184836f2371f8c43a4e6aaa7df4c7c956432a27b5342b1b3791e7.png" \ 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print('OK' if d[0]['base64'] else 'FAIL')"

Writing File

~/accidents-ppt/build.js

const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");

// ── Fetch Park's primary factors diagram ─────────────────────────────────
const imgData = JSON.parse(execSync(
  `node /home/daytona/skills/shared/scripts/fetch_images.js "https://cdn.orris.care/cdss_images/8ecad8121ef184836f2371f8c43a4e6aaa7df4c7c956432a27b5342b1b3791e7.png"`
).toString());
const parksDiagram = imgData[0].base64;  // full base64 with mime prefix

// ── Setup ─────────────────────────────────────────────────────────────────
let pres = new pptxgen();
pres.layout = "LAYOUT_WIDE";
pres.title = "Accidents — Park's Textbook of Preventive & Social Medicine";

// ── PALETTE ──────────────────────────────────────────────────────────────
const C = {
  navy:      "1B2A4A",
  darkBg:    "0F1E35",
  mid:       "163052",
  accent1:   "E8453C",   // red
  accent2:   "F5A623",   // amber
  accent3:   "2ECC71",   // green
  blue:      "2980B9",
  teal:      "1ABC9C",
  purple:    "8E44AD",
  orange:    "E67E22",
  white:     "FFFFFF",
  light:     "EBF0F7",
  muted:     "8899BB",
  textDark:  "1B2A4A",
};
const FONT = "Calibri";

// ── HELPERS ───────────────────────────────────────────────────────────────
function addBg(s, color) {
  s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{ color } });
}

function headerBand(s, accentColor) {
  s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{ color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.08, fill:{ color: accentColor || C.accent1 } });
}

function slideTitle(s, text, accentColor) {
  headerBand(s, accentColor);
  s.addText(text, {
    x:0.35, y:0.08, w:12.6, h:0.84,
    fontSize:27, bold:true, color:C.white, fontFace:FONT, valign:"middle"
  });
}

function box(s, x, y, w, h, fillColor, text, textColor, fontSize, opts) {
  s.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill: { color: fillColor },
    line: { color: C.white, width: 0 },
    rectRadius: 0.1
  });
  if (text) {
    s.addText(text, {
      x, y, w, h,
      fontSize: fontSize || 14,
      color: textColor || C.white,
      fontFace: FONT,
      align: opts && opts.align ? opts.align : "center",
      valign: "middle",
      bold: opts && opts.bold !== undefined ? opts.bold : true,
      wrap: true,
    });
  }
}

function arrowDown(s, cx, y1, len) {
  s.addShape(pres.ShapeType.line, { x:cx, y:y1, w:0, h:len, line:{ color:C.accent2, width:2.5 } });
  // arrowhead triangle
  s.addShape(pres.ShapeType.isoceles, {
    x: cx - 0.1, y: y1 + len - 0.01, w: 0.2, h: 0.18,
    fill:{ color: C.accent2 }, line:{ color: C.accent2, width:0 }
  });
}

function arrowRight(s, x1, cy, len) {
  s.addShape(pres.ShapeType.line, { x:x1, y:cy, w:len, h:0, line:{ color:C.accent2, width:2.5 } });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.darkBg);
  // left accent strip
  s.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.2, h:"100%", fill:{ color: C.accent1 } });
  // decorative bar
  s.addShape(pres.ShapeType.rect, { x:0.2, y:2.55, w:13.1, h:0.07, fill:{ color: C.accent2 } });

  s.addText("ACCIDENTS", {
    x:0.5, y:0.9, w:12.5, h:1.6,
    fontSize:56, bold:true, color:C.white, fontFace:FONT, align:"center"
  });
  s.addText("Community Medicine | Park's Textbook of Preventive & Social Medicine", {
    x:0.5, y:2.8, w:12.5, h:0.8,
    fontSize:22, color:C.accent2, fontFace:FONT, align:"center", italic:true
  });
  s.addText([
    { text: "Epidemiology • Types • Risk Factors • Prevention • Control", options:{ color: C.muted, fontSize:16, fontFace:FONT } }
  ], { x:0.5, y:3.7, w:12.5, h:0.6, align:"center" });
  s.addText("Reference: Park's Textbook of Preventive & Social Medicine", {
    x:0.5, y:6.9, w:12.5, h:0.45,
    fontSize:12, color:C.muted, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 — CONTENTS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Contents", C.accent2);
  const topics = [
    ["01", "Definition & Epidemiological Significance", C.accent1],
    ["02", "Measurement — Mortality, Morbidity, Disability", C.orange],
    ["03", "Global & India Statistics", C.blue],
    ["04", "Types of Accidents (RTA, Domestic, Industrial, Railway)", C.teal],
    ["05", "Primary Factors — Park's Diagram (Human & Environmental)", C.purple],
    ["06", "Road Traffic Accidents — Risk Factors in Detail", C.accent1],
    ["07", "Domestic Accidents — Drowning, Burns, Falls, Poisoning", C.orange],
    ["08", "Industrial & Railway Accidents", C.blue],
    ["09", "Haddon's Matrix — Epidemiological Framework", C.teal],
    ["10", "Prevention — 3E's + Specific Strategies Flowchart", C.purple],
    ["11", "Management Flowchart — RTA Emergency Care", C.accent1],
    ["12", "Key Statistics & Summary", C.accent2],
  ];
  topics.forEach(([num, text, color], i) => {
    let col = i % 2, row = Math.floor(i / 2);
    let x = 0.3 + col * 6.55, y = 1.2 + row * 1.05;
    box(s, x, y, 0.65, 0.85, color, num, C.white, 16);
    box(s, x + 0.7, y, 5.7, 0.85, C.navy, text, C.white, 13, { align:"left", bold:false });
    s.addText(text, { x: x + 0.78, y: y + 0.03, w: 5.5, h: 0.8, fontSize:13, color:C.white, fontFace:FONT, valign:"middle" });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 — DEFINITION
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Definition & Epidemiological Significance", C.accent1);

  // 3 definition boxes
  const defs = [
    { src: "Hogarth (1978)", def: "\"An unexpected, unplanned occurrence which may involve injury\"", color: C.accent1 },
    { src: "WHO Advisory Group (1956)", def: "\"An unpremeditated event resulting in recognizable damage\"", color: C.blue },
    { src: "General Definition", def: "\"An occurrence in a sequence of events which usually produces unintended injury, death or property damage\"", color: C.teal },
  ];
  defs.forEach((d, i) => {
    box(s, 0.3 + i * 4.35, 1.15, 4.1, 0.55, d.color, d.src, C.white, 13);
    box(s, 0.3 + i * 4.35, 1.72, 4.1, 1.5, C.navy);
    s.addText(d.def, { x: 0.45 + i * 4.35, y: 1.78, w: 3.8, h: 1.38, fontSize:13, color:C.white, fontFace:FONT, valign:"middle", italic:true, align:"center" });
  });

  // Key points
  box(s, 0.3, 3.4, 12.7, 0.55, C.accent2, "KEY EPIDEMIOLOGICAL CONCEPTS (Park's)", C.navy, 15);
  const keyPts = [
    { icon:"🔬", text:"Accidents have their own natural history — follow same epidemiological pattern as any disease (Agent • Host • Environment)" },
    { icon:"📊", text:"They occur more frequently in certain age groups, times of day/week, localities — NOT random" },
    { icon:"⚠️", text:"Susceptibility ↑ with alcohol, drugs, physiological fatigue" },
    { icon:"✅", text:"MAJORITY of accidents are PREVENTABLE — 'If accident is a disease, education is its vaccine'" },
    { icon:"🌍", text:"Accidents = major epidemic of Non-Communicable Disease in the present century" },
  ];
  keyPts.forEach((kp, i) => {
    box(s, 0.3, 4.05 + i * 0.56, 0.5, 0.48, C.navy, kp.icon, C.white, 16);
    s.addText(kp.text, { x: 0.88, y: 4.07 + i * 0.56, w: 12.0, h: 0.48, fontSize:13, color:C.textDark, fontFace:FONT, valign:"middle" });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 — MEASUREMENT & STATISTICS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Measurement of the Problem", C.orange);

  // 3 measurement types
  const meas = [
    { title:"A. MORTALITY", color:C.accent1, pts:[
      "Proportional mortality rate\n(deaths due to accidents per 100/1000 total deaths)",
      "Deaths per million population\n(\"Killed\" = death within 30 days of accident)",
      "Death rate per 1000 registered vehicles/year",
      "Accidents/fatalities as ratio of vehicles per km\nor passengers per km",
      "Deaths of vehicle occupants per 1000 vehicles/year",
    ]},
    { title:"B. MORBIDITY", color:C.orange, pts:[
      "Measured as \"serious injuries\" and \"slight injuries\"",
      "Seriousness assessed by Abbreviated Injury Scale (AIS)",
      "Morbidity rates generally less reliable due to\nunder-reporting and mis-reporting",
    ]},
    { title:"C. DISABILITY", color:C.blue, pts:[
      "Important outcome of the accident process",
      "May be temporary or permanent,\npartial or total",
      "Measurement by duration = limited concept",
      "Does not capture psychological / social aspects",
      "WHO: ICF (International Classification of\nFunctioning, Disability & Health) used to estimate",
    ]},
  ];
  meas.forEach((m, i) => {
    let x = 0.3 + i * 4.35;
    box(s, x, 1.15, 4.1, 0.6, m.color, m.title, C.white, 14);
    box(s, x, 1.78, 4.1, 4.7, C.navy);
    m.pts.forEach((p, j) => {
      s.addText("• " + p, { x: x+0.12, y: 1.88 + j * 0.87, w: 3.88, h: 0.82, fontSize:12, color:C.white, fontFace:FONT, valign:"top" });
    });
  });

  s.addText("Abbreviated Injury Scale (AIS): Grades severity 1 (minor) → 6 (unsurvivable) for trauma injuries — standard epidemiological tool", {
    x:0.3, y:6.6, w:12.7, h:0.55,
    fontSize:12, color:C.textDark, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 — GLOBAL & INDIA STATISTICS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Global & India — Accident Statistics", C.blue);

  // Global stats boxes
  const globalStats = [
    { stat:"1.25 Million", desc:"Deaths/year from road accidents worldwide", color:C.accent1 },
    { stat:"20–50x", desc:"Non-fatal injuries per every RTA death", color:C.orange },
    { stat:"90%", desc:"Road accident deaths in LMICs", color:C.blue },
    { stat:"30%+", desc:"Of RTA deaths are <25 yrs (children & youth)", color:C.purple },
    { stat:"48%", desc:"Dying on roads = vulnerable users (pedestrians, cyclists, motorcyclists)", color:C.teal },
    { stat:"3×", desc:"Young males (<25 yrs) more likely to die in car crash vs young females", color:C.accent1 },
  ];
  globalStats.forEach((g, i) => {
    let col = i % 3, row = Math.floor(i / 3);
    let x = 0.3 + col * 4.35, y = 1.15 + row * 1.6;
    box(s, x, y, 4.1, 0.75, g.color, g.stat, C.white, 22);
    box(s, x, y + 0.75, 4.1, 0.78, C.navy);
    s.addText(g.desc, { x: x+0.08, y: y+0.78, w: 3.94, h: 0.75, fontSize:12, color:C.white, fontFace:FONT, valign:"middle", align:"center" });
  });

  // India bar chart - conceptual
  box(s, 0.3, 4.4, 12.7, 0.45, C.navy, "INDIA — Road Injury Deaths 2017 (by road user type)  [Park's Table]", C.accent2, 13);

  const bars = [
    { label:"Pedestrians", pct:35.1, n:"76,729", color:C.accent1 },
    { label:"Motorcyclists", pct:30.9, n:"67,524", color:C.orange },
    { label:"Vehicle occupants", pct:26.4, n:"57,802", color:C.blue },
    { label:"Cyclists", pct:7.0, n:"15,324", color:C.teal },
  ];
  const maxW = 7.5;
  bars.forEach((b, i) => {
    s.addText(b.label, { x:0.3, y:4.98 + i*0.48, w:2.3, h:0.42, fontSize:12, color:C.textDark, fontFace:FONT, valign:"middle" });
    s.addShape(pres.ShapeType.rect, { x:2.65, y:4.98 + i*0.48, w: maxW * b.pct / 100, h:0.38, fill:{ color: b.color }, line:{ color:b.color } });
    s.addText(`${b.pct}%  (${b.n})`, { x: 2.65 + maxW * b.pct / 100 + 0.1, y:4.98 + i*0.48, w:2.5, h:0.38, fontSize:12, color:C.textDark, fontFace:FONT, valign:"middle" });
  });
  s.addText("Total RTA deaths India 2017: 2,18,876  |  Age-standardized rate: 17.2 per 100,000  |  Leading cause of death in males aged 15–39 yrs", {
    x:0.3, y:6.9, w:12.7, h:0.45, fontSize:11, color:C.muted, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 — TYPES OF ACCIDENTS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Types of Accidents — Classification", C.teal);

  const types = [
    { name:"1. Road Traffic\nAccidents (RTA)", color:C.accent1, sub:["Motor vehicles, motorcycles,\nbicycles, pedestrians","Leading cause of accidental death\nworldwide","1.25 million deaths/year globally"] },
    { name:"2. Domestic\nAccidents", color:C.orange, sub:["Drowning, Burns, Falls","Poisoning (drugs, insecticides,\nkerosene)","Sharp instruments, animal bites"] },
    { name:"3. Industrial\nAccidents", color:C.blue, sub:["Agriculture: 22–29/1000 workers","~120 million injuries/year in SE Asia","Machinery, chemical, biological\nhazards"] },
    { name:"4. Railway\nAccidents", color:C.teal, sub:["Train collisions, derailments","Level crossing accidents","Falls from trains"] },
  ];

  types.forEach((t, i) => {
    let x = 0.3 + i * 3.25;
    box(s, x, 1.15, 3.0, 1.0, t.color, t.name, C.white, 15);
    box(s, x, 2.18, 3.0, 2.8, C.navy);
    t.sub.forEach((line, j) => {
      s.addText("• " + line, { x: x+0.1, y: 2.25 + j * 0.85, w: 2.85, h: 0.82, fontSize:12, color:C.white, fontFace:FONT, valign:"top" });
    });
  });

  // Intentionality classification
  box(s, 0.3, 5.15, 12.7, 0.45, C.navy, "Classification by INTENTIONALITY (Park's):", C.accent2, 13);
  const intCols = [
    { title:"UNINTENTIONAL", color:C.accent3, items:"RTA • Poisoning • Falls • Fire & Burns • Drowning • Industrial accidents" },
    { title:"INTENTIONAL — INTERPERSONAL", color:C.accent1, items:"Homicide • Sexual assault • Neglect/abandonment • Child maltreatment" },
    { title:"INTENTIONAL — SELF", color:C.orange, items:"Suicide" },
    { title:"COLLECTIVE VIOLENCE", color:C.purple, items:"War • Civil unrest • Terrorism" },
  ];
  intCols.forEach((c, i) => {
    let x = 0.3 + i * 3.25;
    box(s, x, 5.65, 3.0, 0.45, c.color, c.title, C.white, 11);
    box(s, x, 6.12, 3.0, 0.7, C.mid);
    s.addText(c.items, { x: x+0.08, y: 6.14, w: 2.88, h: 0.67, fontSize:11, color:C.white, fontFace:FONT, valign:"middle", align:"center" });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 — PARK'S PRIMARY FACTORS DIAGRAM
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Primary Factors in Accidents — Park's Diagram", C.purple);

  // Embed the actual Park's textbook diagram
  s.addImage({ data: parksDiagram, x: 1.5, y: 1.15, w: 10.3, h: 5.8 });

  s.addText("Source: Park's Textbook of Preventive & Social Medicine — Fig. Primary Factors in Accidents", {
    x: 0.3, y: 7.05, w: 12.7, h: 0.35,
    fontSize:11, color:C.muted, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 — RTA RISK FACTORS DETAILED
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Road Traffic Accidents — Risk Factors (Park's)", C.accent1);

  const rfs = [
    { title:"Speed", color:C.accent1, pts:[
      "90% survival if impact ≤30 km/h",
      "<50% survival at ≥45 km/h impact",
      "30 km/h zones recommended near schools/\nresidential areas",
    ]},
    { title:"Drink-Driving", color:C.orange, pts:[
      "Alcohol = direct cause of 30–50% severe RTAs",
      "Risk ↑ significantly above BAC 0.04 g/dl",
      "BAC ≤0.05 g/dl laws: reduce alcohol crashes",
      "Sobriety checkpoints → 20% reduction",
    ]},
    { title:"Helmet Use", color:C.blue, pts:[
      "Correct helmet: ↓ death risk by ~40%",
      "↓ severe injury risk by >70%",
      "Enforcement → wearing rates >90%",
      "Head injury ↓ by 30% on average",
    ]},
    { title:"Seat Belts", color:C.teal, pts:[
      "Front-seat fatality: ↓ 40–50%",
      "Rear-seat fatality: ↓ 25–75%",
      "Child restraints: ↓ infant death ~70%",
      "↓ small child death 54–80%",
    ]},
    { title:"Distracted Driving", color:C.purple, pts:[
      "Mobile phones → 4× crash risk",
      "Longer braking reaction time",
      "Impaired lane-keeping",
      "Text messaging especially dangerous\n(young drivers most at risk)",
    ]},
    { title:"Road & Vehicle Factors", color:C.accent1, pts:[
      "Defective/narrow roads",
      "Poor lighting, lack of signage",
      "Old/poorly maintained vehicles",
      "Overloaded buses, 2/3-wheelers",
      "Mixed traffic (slow + fast + pedestrians)",
    ]},
  ];
  rfs.forEach((rf, i) => {
    let col = i % 3, row = Math.floor(i / 3);
    let x = 0.3 + col * 4.35, y = 1.15 + row * 2.85;
    box(s, x, y, 4.1, 0.55, rf.color, rf.title, C.white, 14);
    box(s, x, y + 0.55, 4.1, 2.24, C.navy);
    rf.pts.forEach((p, j) => {
      s.addText("• " + p, { x: x+0.1, y: y + 0.62 + j * 0.5, w: 3.9, h: 0.48, fontSize:12, color:C.white, fontFace:FONT, valign:"top" });
    });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 — DOMESTIC ACCIDENTS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Domestic Accidents — Drowning, Burns, Falls, Poisoning", C.orange);

  const domAcc = [
    { name:"DROWNING", color:C.blue, facts:[
      "3rd leading cause of unintentional injury death",
      "322,000 deaths globally (2016)",
      "7% of all injury-related deaths",
      "Consciousness lost ~2 min; irreversible brain damage 4–6 min",
      "90% of drowning deaths in LMICs",
      "Risk factors: Age <5 yrs (highest rate), Male sex, Alcohol",
      "Prevention: fencing pools, swimming lessons, supervision",
    ]},
    { name:"BURNS", color:C.accent1, facts:[
      "80–90% of burns occur at HOME (Bangladesh, Ethiopia data)",
      "Children & women: hot liquids, flames, cookstove explosions",
      "Men: fire, scalds, chemicals, electricity in workplace",
      "Risk ↑: Epilepsy, peripheral neuropathy, alcohol, kerosene use",
      "Prevention: safe cookstoves, smoke alarms, sprinkler systems",
      "First Aid DO's: cool running water, remove clothing, wrap in clean cloth",
      "First Aid DON'Ts: No ice, no paste/oil/turmeric, no prolonged cooling",
    ]},
    { name:"FALLS", color:C.teal, facts:[
      "Leading cause of domestic injuries, especially elderly",
      "Children: falls from heights, furniture",
      "Elderly: osteoporosis → hip fractures",
      "Risk factors: age extremes, poor lighting, wet floors, medications",
      "Prevention: handrails, non-slip mats, adequate lighting",
    ]},
    { name:"POISONING", color:C.purple, facts:[
      "Drugs, insecticides, rat poisons, kerosene",
      "Children at greatest risk of accidental ingestion",
      "Organophosphate pesticides — major cause in agricultural areas",
      "Prevention: child-proof caps, locked storage, safe disposal",
      "Immediate action: poison control center, do not induce vomiting\nunless advised",
    ]},
  ];

  domAcc.forEach((d, i) => {
    let col = i % 2, row = Math.floor(i / 2);
    let x = 0.3 + col * 6.55, y = 1.15 + row * 3.0;
    box(s, x, y, 6.1, 0.55, d.color, d.name, C.white, 14);
    box(s, x, y + 0.55, 6.1, 2.38, C.navy);
    d.facts.forEach((f, j) => {
      s.addText("• " + f, { x: x+0.1, y: y + 0.62 + j * 0.31, w: 5.9, h: 0.30, fontSize:11, color:C.white, fontFace:FONT });
    });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 — INDUSTRIAL & RAILWAY ACCIDENTS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Industrial & Railway Accidents", C.blue);

  // Industrial
  box(s, 0.3, 1.15, 6.1, 0.6, C.blue, "INDUSTRIAL ACCIDENTS", C.white, 15);
  box(s, 0.3, 1.78, 6.1, 5.5, C.navy);
  const indPts = [
    "~580 million workers in SE Asia Region",
    "60–80% employed in agriculture, fisheries, home industries",
    "~120 million injuries & 200,000 deaths/year (SE Asia)",
    "Agriculture injury: 22–29 per 1000 workers",
    "India: incidence rate ~116 per 100,000 ag-workers",
    "31% injuries in rural Haryana related to agricultural activity",
    "Serious injuries: mechanized equipment & tractors",
    "Chemical exposure: pesticides, fertilizers",
    "Biological: animal bites, zoonotic diseases",
    "",
    "Types of Industrial Injuries:",
    "• Physical: machinery, heat, noise, vibration",
    "• Chemical: solvents, acids, pesticides",
    "• Biological: animal bites, infections",
    "• Ergonomic: repetitive strain, lifting",
  ];
  indPts.forEach((p, i) => {
    s.addText(p.startsWith("•") ? p : (p === "" ? "" : "• " + p), {
      x:0.45, y:1.85 + i * 0.33, w:5.8, h:0.32,
      fontSize:12, color:p.startsWith("Types") ? C.accent2 : C.white, fontFace:FONT, bold:p.startsWith("Types")
    });
  });

  // Railway
  box(s, 6.7, 1.15, 6.1, 0.6, C.teal, "RAILWAY ACCIDENTS", C.white, 15);
  box(s, 6.7, 1.78, 6.1, 2.5, C.navy);
  const railTypes = [
    "Collision (train-train or train-object)",
    "Derailment",
    "Level crossing accidents",
    "Falls from moving trains",
    "Platform accidents",
    "Fire and explosions",
  ];
  railTypes.forEach((r, i) => {
    s.addText("• " + r, { x:6.85, y:1.88 + i * 0.37, w:5.8, h:0.35, fontSize:13, color:C.white, fontFace:FONT });
  });

  // Prevention of Industrial accidents
  box(s, 6.7, 4.4, 6.1, 0.55, C.orange, "PREVENTION OF INDUSTRIAL ACCIDENTS", C.white, 13);
  box(s, 6.7, 4.98, 6.1, 2.3, C.navy);
  const indPrev = [
    "Engineering controls: machine guarding, safe design",
    "Administrative controls: work rotation, rest breaks",
    "Personal protective equipment (PPE): helmets,\ngloves, goggles, harnesses",
    "Safety education and training for workers",
    "Regular health surveillance and inspection",
    "Reporting and investigation of near-misses",
  ];
  indPrev.forEach((p, i) => {
    s.addText("• " + p, { x:6.85, y:5.05 + i * 0.36, w:5.8, h:0.34, fontSize:12, color:C.white, fontFace:FONT });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 — HADDON'S MATRIX
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Haddon's Matrix — Epidemiological Framework for Accidents", C.teal);

  s.addText("Haddon (1968) applied the epidemiological triad (Host–Agent–Environment) across 3 time phases of an accident:", {
    x:0.3, y:1.1, w:12.7, h:0.5,
    fontSize:14, color:C.textDark, fontFace:FONT
  });

  // Matrix table
  const headerRow = ["Phase / Factor", "HOST (Human)", "AGENT (Vehicle/Energy)", "ENVIRONMENT (Physical + Social)"];
  const rows = [
    ["PRE-CRASH\n(Before)", "Age, Sex, Vision, Alcohol use,\nFatigue, Experience, Impulsiveness", "Vehicle speed, brake condition,\ntyre quality, overloading", "Road design, lighting, traffic laws,\nspeed limits, signage enforcement"],
    ["CRASH\n(During)", "Seat belt use, helmet use,\nOsteoporosis, physical condition", "Crashworthiness — airbags,\ncrumple zones, door strength", "Crash barriers, median dividers,\nguardrails, lamp posts"],
    ["POST-CRASH\n(After)", "Age, comorbidities, blood group,\nfirst aid knowledge", "Fuel leakage, fire risk,\nextrication difficulty", "Emergency services, hospital\ndistance, trauma care quality"],
  ];

  const colW = [2.2, 3.5, 3.5, 3.5];
  const colX = [0.3, 2.55, 6.1, 9.65];
  const rowH = 1.55;

  headerRow.forEach((h, ci) => {
    box(s, colX[ci], 1.7, colW[ci], 0.6, C.navy, h, C.accent2, 13);
  });
  rows.forEach((row, ri) => {
    const rowColors = [C.accent1, C.blue, C.teal];
    row.forEach((cell, ci) => {
      const bg = ci === 0 ? rowColors[ri] : (ri % 2 === 0 ? C.mid : "162A48");
      box(s, colX[ci], 2.33 + ri * rowH, colW[ci], rowH, bg);
      s.addText(cell, {
        x: colX[ci] + 0.08, y: 2.33 + ri * rowH, w: colW[ci] - 0.12, h: rowH,
        fontSize: ci === 0 ? 13 : 12, bold: ci === 0, color: C.white, fontFace:FONT, valign:"middle",
        align: ci === 0 ? "center" : "left"
      });
    });
  });

  s.addText("Haddon's Matrix guides COMPREHENSIVE prevention — interventions at each phase × each factor column", {
    x:0.3, y:7.0, w:12.7, h:0.38,
    fontSize:12, color:C.textDark, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 — PREVENTION FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Prevention of Accidents — The 3E's Framework (Park's)", C.accent3);

  // 3E's header boxes
  const Es = [
    { E:"Engineering", desc:"Modify the physical environment\nto make accidents less likely or\nless harmful", color:C.blue, examples:[
      "Seat belts, airbags, crumple zones",
      "Road design: roundabouts, medians",
      "Speed bumps, crash barriers",
      "Child-proof medicine caps",
      "Smoke detectors, sprinklers",
      "Machine guards in industry",
    ]},
    { E:"Education", desc:"Change behaviour through\nawareness, training, and\npromotion of safe practices", color:C.teal, examples:[
      "Driver training & licensing",
      "School road-safety programs",
      "'Accident is a disease, education is its vaccine'",
      "First aid training",
      "Alcohol & drug awareness",
      "Safe motherhood — domestic safety",
    ]},
    { E:"Enforcement", desc:"Laws, regulations and their\nrigorous enforcement to compel\nsafe behaviour", color:C.purple, examples:[
      "Compulsory helmet & seat belt laws",
      "Blood Alcohol Concentration (BAC) limits",
      "Speed limit legislation & cameras",
      "Vehicle roadworthiness testing",
      "Workplace safety regulations",
      "Random breath testing checkpoints",
    ]},
  ];

  Es.forEach((e, i) => {
    let x = 0.3 + i * 4.35;
    // Large E badge
    box(s, x, 1.1, 1.0, 1.0, e.color, e.E[0], C.white, 36);
    box(s, x + 1.05, 1.1, 3.05, 1.0, C.navy, e.E, C.accent2, 16);
    // desc
    box(s, x, 2.15, 4.1, 0.85, C.mid);
    s.addText(e.desc, { x: x+0.1, y:2.17, w:3.9, h:0.82, fontSize:12, color:C.white, fontFace:FONT, valign:"middle", align:"center" });
    // examples
    box(s, x, 3.05, 4.1, 3.65, C.navy);
    e.examples.forEach((ex, j) => {
      s.addText("✓ " + ex, { x: x+0.1, y:3.12 + j * 0.57, w:3.9, h:0.54, fontSize:12, color:C.white, fontFace:FONT });
    });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 13 — RTA PREVENTION SPECIFIC FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "RTA Prevention — Specific Strategies (Park's)", C.accent1);

  // 5-point plan from Park's
  const strategies = [
    { num:"1", title:"Legislation & Enforcement", color:C.accent1, pts:["Compulsory helmet laws → wearing rates >90%","BAC laws (≤0.05 g/dl) → ↓ alcohol crashes","Speed limits & camera enforcement","Child restraint laws"] },
    { num:"2", title:"Safety Education", color:C.orange, pts:["Start with school children","Driver training: safe driving + maintenance","First aid for general public","Risk factor awareness: alcohol, fatigue, drugs"] },
    { num:"3", title:"Promotion of Safety Devices", color:C.blue, pts:["Seat belts → ↓ fatality 40–50% (front), 25–75% (rear)","Helmets → ↓ death risk 40%, severe injury 70%","Child restraints → ↓ infant death ~70%","Door locks, laminated windscreen glass"] },
    { num:"4", title:"Alcohol & Drug Control", color:C.teal, pts:["Alcohol = cause of 30–50% severe RTAs","BAC >0.04 g/dl → significant crash risk","Sobriety checkpoints → 20% reduction","Ban barbiturates, cannabis while driving"] },
    { num:"5", title:"Emergency & Trauma Care", color:C.purple, pts:["Emergency care must begin at accident site","Continue during transportation","Conclude in hospital emergency room","Trauma centres, ATLS trained personnel","Golden Hour concept — rapid response"] },
  ];

  strategies.forEach((st, i) => {
    let col = i % 3 === 2 && i === 4 ? 1 : i % 3;
    let row = Math.floor(i / 3);
    if (i === 3) col = 0;
    if (i === 4) col = 1.5;
    let actualCol = i < 3 ? i : (i === 3 ? 0 : 1.5);
    let x = 0.3 + actualCol * 4.35, y = 1.15 + row * 3.05;
    box(s, x, y, 0.65, 0.65, st.color, st.num, C.white, 22);
    box(s, x + 0.7, y, 3.4, 0.65, C.navy, st.title, C.accent2, 13);
    box(s, x, y + 0.7, 4.1, 2.28, C.mid);
    st.pts.forEach((p, j) => {
      s.addText("• " + p, { x: x+0.1, y: y + 0.77 + j * 0.52, w:3.9, h:0.5, fontSize:12, color:C.white, fontFace:FONT });
    });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 14 — MANAGEMENT FLOWCHART (RTA Emergency Care)
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Management Flowchart — RTA Emergency Care", C.accent3);

  // Central flowchart
  const steps = [
    { label:"ROAD TRAFFIC ACCIDENT OCCURS", color:C.accent1, y:1.15 },
    { label:"SCENE SAFETY — Ensure safety of rescuer & bystanders\nSwitch off vehicle, avoid fire/fuel hazard", color:C.orange, y:1.98 },
    { label:"CALL FOR HELP — Ambulance / 108 Emergency / Police", color:C.blue, y:2.81 },
    { label:"PRIMARY SURVEY — ABCDE\nAirway • Breathing • Circulation • Disability (GCS) • Exposure", color:C.teal, y:3.64 },
    { label:"CONTROL HAEMORRHAGE — Direct pressure\nImmobilise spine if suspected spinal injury", color:C.purple, y:4.47 },
    { label:"TRANSPORT TO EMERGENCY — Golden Hour concept\nContinue care en route; alert receiving hospital", color:C.navy, y:5.30 },
    { label:"HOSPITAL TRAUMA CARE — ATLS Protocol\nSecondary survey, imaging, blood transfusion, surgery", color:C.accent1, y:6.13 },
  ];

  steps.forEach((step, i) => {
    box(s, 2.0, step.y, 9.3, 0.72, step.color, step.label, C.white, i === 0 ? 15 : 13);
    if (i < steps.length - 1) {
      arrowDown(s, 6.65, step.y + 0.72, 0.11);
    }
  });

  // Side notes
  s.addText("Emergency care begins at ACCIDENT SITE → continues during TRANSPORTATION → concludes at HOSPITAL (Park's)", {
    x:0.3, y:6.95, w:12.7, h:0.4,
    fontSize:11, color:C.textDark, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 15 — DROWNING MANAGEMENT FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Drowning — Management & Burns First Aid (Domestic Accidents)", C.blue);

  // DROWNING
  box(s, 0.3, 1.15, 6.1, 0.55, C.blue, "DROWNING — MANAGEMENT", C.white, 14);
  const drownSteps = [
    { step:"REMOVE from water safely\n(do not risk rescuer's life)", color:C.blue },
    { step:"CHECK responsiveness &\ncall for emergency help", color:C.teal },
    { step:"START CPR immediately\n(30 compressions : 2 breaths)", color:C.accent1 },
    { step:"Do NOT perform 'drainage'\nmanoeuvres — wastes time", color:C.orange },
    { step:"TRANSPORT to hospital\nas soon as possible", color:C.blue },
  ];
  drownSteps.forEach((ds, i) => {
    box(s, 0.3, 1.78 + i * 0.97, 6.1, 0.8, ds.color, `${i+1}. ${ds.step}`, C.white, 12);
    if (i < drownSteps.length - 1) {
      s.addShape(pres.ShapeType.line, { x:3.35, y:2.58 + i*0.97, w:0, h:0.17, line:{ color:C.accent2, width:2 } });
    }
  });

  // BURNS FIRST AID
  box(s, 6.7, 1.15, 6.1, 0.55, C.accent1, "BURNS — FIRST AID (Park's)", C.white, 14);

  box(s, 6.7, 1.78, 6.1, 0.42, C.accent3, "DO's", C.white, 14);
  const dos = [
    "Stop burning — remove clothing, irrigate burns",
    "Use cool RUNNING WATER to reduce burn temperature",
    "Extinguish flames: roll on ground / blanket / water",
    "Chemical burns: irrigate with large volumes of water",
    "Wrap in clean cloth and transport to hospital",
  ];
  dos.forEach((d, i) => {
    box(s, 6.7, 2.22 + i * 0.44, 6.1, 0.4, i % 2 === 0 ? C.mid : C.navy);
    s.addText("✓ " + d, { x:6.82, y:2.23 + i*0.44, w:5.9, h:0.38, fontSize:12, color:C.white, fontFace:FONT, valign:"middle" });
  });

  box(s, 6.7, 4.47, 6.1, 0.42, C.accent1, "DON'Ts", C.white, 14);
  const donts = [
    "Do NOT apply ice (deepens injury)",
    "No paste, oil, haldi (turmeric) or cotton on burn",
    "Do NOT start first aid before ensuring YOUR safety",
    "Avoid prolonged water cooling → hypothermia",
    "Do NOT open blisters until topical antimicrobials applied",
  ];
  donts.forEach((d, i) => {
    box(s, 6.7, 4.91 + i * 0.44, 6.1, 0.4, i % 2 === 0 ? "3D0A0A" : "5C1111");
    s.addText("✗ " + d, { x:6.82, y:4.92 + i*0.44, w:5.9, h:0.38, fontSize:12, color:C.white, fontFace:FONT, valign:"middle" });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 16 — INDIA STATISTICS TABLE
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "India — Accidental Deaths by Cause (Park's Table)", C.orange);

  const tableData = [
    ["Cause of Death", "2014", "2015"],
    ["Traffic accidents", "1,62,107", "1,77,423"],
    ["Drowning", "29,903", "29,822"],
    ["Poisoning", "22,587", "26,173"],
    ["Sudden deaths", "26,526", "35,023"],
    ["Fire", "19,513", "17,700"],
    ["Falls", "15,399", "16,759"],
    ["Electrocution", "9,606", "9,986"],
    ["Natural calamity", "20,201", "10,510"],
    ["Collapse of structures", "1,821", "1,885"],
    ["Stampede", "178", "480"],
    ["Mines / quarry disasters", "210", "118"],
    ["Firearms", "633", "736"],
    ["Killed by animals", "886", "951"],
    ["Suffocation", "1,256", "1,427"],
    ["Factory / machine accidents", "797", "695"],
    ["TOTAL (natural + unnatural)", "4,51,757", "4,13,457"],
  ];

  const colW = [6.5, 2.8, 2.8];
  const colX = [0.3, 6.85, 9.7];
  const rowH = 0.39;

  tableData.forEach((row, ri) => {
    const isH = ri === 0;
    const isTotal = ri === tableData.length - 1;
    const bg = isH ? C.navy : isTotal ? C.accent1 : (ri % 2 === 0 ? "DDE6EF" : C.white);
    const tc = isH ? C.accent2 : isTotal ? C.white : C.textDark;
    row.forEach((cell, ci) => {
      box(s, colX[ci], 1.15 + ri * rowH, colW[ci], rowH, bg);
      s.addText(cell, {
        x: colX[ci] + 0.06, y: 1.15 + ri * rowH, w: colW[ci] - 0.1, h: rowH,
        fontSize: isH ? 13 : isTotal ? 13 : 12, bold: isH || isTotal,
        color: tc, fontFace:FONT, valign:"middle",
        align: ci === 0 ? "left" : "center"
      });
    });
  });

  s.addText("Source: Park's Textbook — Accidental Deaths in India (NCRB Data)  |  Traffic accidents consistently = #1 cause", {
    x:0.3, y:7.7, w:12.7, h:0.4, fontSize:11, color:C.muted, fontFace:FONT, align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 17 — SNAKEBITE (from Park's domestic accidents section)
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Snakebite — Management (Domestic/Occupational Accident)", C.teal);

  // Left — management levels
  box(s, 0.3, 1.15, 6.0, 0.55, C.teal, "SNAKEBITE MANAGEMENT LEVELS (Park's)", C.white, 13);

  const levels = [
    { level:"Community / First Aid", color:C.accent3, pts:[
      "Reassure victim — most snakebites are from non-venomous snakes",
      "Immobilize bitten limb (below heart level)",
      "Remove rings, watches from bitten limb",
      "Apply pressure immobilisation bandage",
      "DO NOT: cut/suck wound, apply tourniquet, use electric shock",
      "Transport immediately to health facility",
    ]},
    { level:"Primary Health Centre", color:C.teal, pts:[
      "Examine for systemic signs of envenomation",
      "Blood tests: coagulation studies, CBC",
      "Antivenom if systemic envenomation confirmed",
      "Anti-tetanus toxoid",
    ]},
    { level:"District Hospital", color:C.blue, pts:[
      "IV antivenom (polyvalent — drug of choice)",
      "Monitor for anaphylaxis to antivenom",
      "Surgical debridement if necrosis",
      "Transfusion if severe anaemia",
    ]},
    { level:"Referral / Specialist", color:C.purple, pts:[
      "Advanced surgical management",
      "Bacterial culture, CT imaging",
      "Haemodialysis if acute renal failure",
      "Physiotherapy / rehabilitation",
    ]},
  ];
  let yy = 1.75;
  levels.forEach((lv, i) => {
    box(s, 0.3, yy, 6.0, 0.42, lv.color, lv.level, C.white, 12);
    yy += 0.42;
    box(s, 0.3, yy, 6.0, lv.pts.length * 0.34 + 0.1, C.navy);
    lv.pts.forEach((p, j) => {
      s.addText("• " + p, { x:0.42, y:yy + 0.05 + j*0.34, w:5.8, h:0.32, fontSize:11, color:C.white, fontFace:FONT });
    });
    yy += lv.pts.length * 0.34 + 0.18;
  });

  // Antivenom box
  box(s, 6.6, 1.15, 6.1, 0.55, C.accent2, "ANTIVENOM — Key Facts (Park's)", C.navy, 13);
  box(s, 6.6, 1.73, 6.1, 5.55, C.navy);
  const avFacts = [
    "First developed in 1895 by Albert Calmette\n(Indian cobra bites — France)",
    "Made by injecting small venom dose into\nhorse/sheep → harvest antibodies",
    "Administered IV — binds and neutralizes venom",
    "CANNOT undo damage already caused →\nseek treatment IMMEDIATELY",
    "Modern antivenoms usually POLYVALENT\n(effective against multiple species)",
    "Pharmaceutical companies target local species\nfor each geographic area",
    "Side effect risk: Anaphylaxis possible →\nbut BENEFIT outweighs risk in envenomation",
    "Strengthening health systems:\n• Snakebite as notifiable disease\n• Standard treatment guidelines\n• Adequate antivenom supply chain",
  ];
  avFacts.forEach((f, i) => {
    s.addText("• " + f, { x:6.72, y:1.82 + i*0.66, w:5.88, h:0.63, fontSize:11, color:C.white, fontFace:FONT });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 18 — SUMMARY KEY POINTS
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.light);
  slideTitle(s, "Key Points — Examiner Summary (Park's)", C.accent2);

  const keyPts = [
    { n:"01", t:"Definition: Unexpected, unplanned occurrence causing injury/death/property damage (WHO 1956 + Hogarth 1978)", c:C.accent1 },
    { n:"02", t:"Accidents follow epidemiological triad — Agent, Host, Environment — same as communicable diseases", c:C.orange },
    { n:"03", t:"Global: 1.25 million RTA deaths/year; 90% in LMICs; 48% victims = vulnerable road users", c:C.blue },
    { n:"04", t:"India 2017: 2,18,876 RTA deaths; leading COD in males aged 15–39 yrs", c:C.teal },
    { n:"05", t:"3 Types of Acute Poisoning — Gastroenteritic (most common), Fulminant, Narcotic", c:C.purple },
    { n:"06", t:"Park's 3E's of Prevention: Engineering + Education + Enforcement", c:C.accent3 },
    { n:"07", t:"Seat belt → ↓ fatality 40–50%; Helmet → ↓ death 40%, severe injury 70%; Child restraints → ↓ infant death 70%", c:C.accent1 },
    { n:"08", t:"Haddon Matrix: Pre-crash / Crash / Post-crash × Host / Agent / Environment — systematic prevention", c:C.orange },
    { n:"09", t:"Drowning: 3rd leading unintentional injury death; 322,000/yr; consciousness lost 2 min; brain damage 4–6 min", c:C.blue },
    { n:"10", t:"\"If accident is a disease, education is its vaccine\" — Park's key quote for prevention", c:C.teal },
  ];

  keyPts.forEach((kp, i) => {
    let col = i % 2, row = Math.floor(i / 2);
    let x = 0.3 + col * 6.55, y = 1.15 + row * 1.08;
    box(s, x, y, 0.65, 0.9, kp.c, kp.n, C.white, 18);
    box(s, x + 0.7, y, 5.7, 0.9, C.navy);
    s.addText(kp.t, { x: x+0.8, y: y+0.05, w:5.5, h:0.82, fontSize:12, color:C.white, fontFace:FONT, valign:"middle" });
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 19 — THANK YOU
// ═══════════════════════════════════════════════════════════════════════════
{
  let s = pres.addSlide();
  addBg(s, C.darkBg);
  s.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.2, h:"100%", fill:{ color:C.accent2 } });
  s.addShape(pres.ShapeType.rect, { x:0.2, y:2.95, w:13.1, h:0.07, fill:{ color:C.accent1 } });
  s.addText("Thank You", { x:0.5, y:1.0, w:12.5, h:1.8, fontSize:54, bold:true, color:C.white, fontFace:FONT, align:"center" });
  s.addText("Accidents — Community Medicine", { x:0.5, y:3.1, w:12.5, h:0.7, fontSize:22, color:C.accent2, fontFace:FONT, align:"center", italic:true });
  s.addText("Reference: Park's Textbook of Preventive & Social Medicine\nAll statistics sourced directly from Park's — exact figures as cited in the textbook", {
    x:0.5, y:4.1, w:12.5, h:0.9, fontSize:13, color:C.muted, fontFace:FONT, align:"center"
  });
}

// ── WRITE FILE ────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/accidents-ppt/Accidents_Parks_CommMed.pptx" })
  .then(() => console.log("PPT created successfully!"))
  .catch(err => { console.error(err); process.exit(1); });
Running Command

cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1

Running Command

curl -s "https://cdn.orris.care/cdss_images/8ecad8121ef184836f2371f8c43a4e6aaa7df4c7c956432a27b5342b1b3791e7.png" -o /home/daytona/workspace/accidents-ppt/parks_factors.png && echo "Downloaded: $(wc -c < /home/daytona/workspace/accidents-ppt/parks_factors.png) bytes"

Editing File

~/accidents-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
Editing File

~/accidents-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
Running Command

cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1

Editing File

~/accidents-ppt/build.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
Running Command

cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1

Running Command

ls -lh /home/daytona/workspace/accidents-ppt/

Your presentation is ready! Download it here:

Accidents Parks CommMed

Presentation · PPTX


What's Inside — 19 Slides, All From Park's

The deck uses a deep navy + red/amber palette on widescreen format, with all content directly sourced from Park's Textbook of Preventive & Social Medicine.
#SlideHighlights
1TitleBold cover
2Contents12-topic color-coded index
3DefinitionAll 3 definitions (Hogarth, WHO 1956, general) + 5 epidemiological key concepts
4MeasurementMortality indices, Morbidity (AIS), Disability (ICF-WHO)
5Statistics6 global stat tiles + India bar chart (pedestrians 35.1%, motorcyclists 30.9%, etc.)
6TypesRTA, Domestic, Industrial, Railway + intentionality classification table
7Park's DiagramThe actual Park's textbook figure — "Primary Factors in Accidents" (Human + Environmental + Precipitating factors) embedded as image
8RTA Risk Factors6 categories: Speed, Drink-driving, Helmets, Seat belts, Distracted driving, Road/Vehicle factors with all % figures
9Domestic AccidentsDrowning, Burns, Falls, Poisoning — each with risk factors
10Industrial & RailwaySE Asia stats, India data, types of industrial injuries, prevention
11Haddon's MatrixPre-crash / Crash / Post-crash × Host / Agent / Environment — full table
12Prevention — 3E'sEngineering, Education, Enforcement with examples
13RTA PreventionPark's 5-point plan (legislation, education, safety devices, alcohol control, emergency care)
14RTA Management FlowchartStep-by-step emergency care flowchart (scene safety → CPR → transport → ATLS)
15Burns First AidDo's and Don'ts columns (directly from Park's) + Drowning management steps
16India Statistics TableFull NCRB data table — all causes of accidental death 2014 & 2015
17Snakebite4-level management (community → PHC → district → referral) + antivenom facts
18Key Points Summary10 examiner-favourite bullet points
19Thank YouSource attribution

Take info from Gautam Biswas for arsenic poisoning and make a one or two page content to write in A4 sheets actually u write it add colours and stuff I’ll see that and copy

Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/arsenic-notes && python3 -c "import reportlab; print(reportlab.Version)"

Writing File

~/arsenic-notes/build_notes.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
from reportlab.lib.colors import HexColor, white, black

# ─── COLOURS ────────────────────────────────────────────────────────────────
NAVY    = HexColor("#1B2A4A")
DKBLUE  = HexColor("#163052")
RED     = HexColor("#C0392B")
AMBER   = HexColor("#E67E22")
TEAL    = HexColor("#16A085")
PURPLE  = HexColor("#6C3483")
GREEN   = HexColor("#1E8449")
STEEL   = HexColor("#2980B9")
LBLUE   = HexColor("#D6EAF8")
LRED    = HexColor("#FADBD8")
LTEAL   = HexColor("#D1F2EB")
LPURPLE = HexColor("#E8DAEF")
LAMBER  = HexColor("#FDEBD0")
LGREY   = HexColor("#F2F3F4")
DARKRED = HexColor("#7B241C")

W, H = A4   # 595 x 842 pt
M = 1.8*cm  # margins

# ─── HELPERS ────────────────────────────────────────────────────────────────

class ColorBox(Flowable):
    """A solid-coloured rectangle box with centered label text."""
    def __init__(self, w, h, bg, text, text_color=white, font="Helvetica-Bold", font_size=11):
        Flowable.__init__(self)
        self.bw, self.bh = w, h
        self.bg, self.tc = bg, text_color
        self.text, self.font, self.fs = text, font, font_size

    def draw(self):
        self.canv.setFillColor(self.bg)
        self.canv.rect(0, 0, self.bw, self.bh, fill=1, stroke=0)
        self.canv.setFillColor(self.tc)
        self.canv.setFont(self.font, self.fs)
        self.canv.drawCentredString(self.bw/2, self.bh/2 - self.fs*0.35, self.text)

    def wrap(self, *args):
        return self.bw, self.bh


def style(name, parent=None, **kw):
    s = ParagraphStyle(name, parent=parent)
    for k, v in kw.items():
        setattr(s, k, v)
    return s

# ─── STYLES ──────────────────────────────────────────────────────────────────
base = ParagraphStyle("base", fontName="Helvetica", fontSize=9.5,
                      leading=14, textColor=NAVY, spaceAfter=3,
                      alignment=TA_JUSTIFY)

h_main = style("h_main", fontName="Helvetica-Bold", fontSize=16,
               textColor=white, backColor=NAVY, borderPadding=(6,8,6,8),
               leading=22, alignment=TA_CENTER, spaceAfter=4, spaceBefore=6)

h_sec = style("h_sec", fontName="Helvetica-Bold", fontSize=12,
              textColor=white, backColor=RED, borderPadding=(4,6,4,6),
              leading=16, alignment=TA_LEFT, spaceAfter=3, spaceBefore=6)

h_sub = style("h_sub", fontName="Helvetica-Bold", fontSize=10.5,
              textColor=NAVY, leading=14, spaceAfter=2, spaceBefore=4)

bullet = style("bullet", parent=base, leftIndent=14, firstLineIndent=-8,
               spaceAfter=2)

bold_label = style("bold_label", parent=base, fontName="Helvetica-Bold",
                   textColor=DARKRED)

note_style = style("note", parent=base, fontName="Helvetica-Oblique",
                   fontSize=8.5, textColor=HexColor("#555555"))

tag_style = style("tag", fontName="Helvetica-Bold", fontSize=8,
                  textColor=white, alignment=TA_CENTER, leading=10)

# ─── DOCUMENT ───────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    "/home/daytona/workspace/arsenic-notes/Arsenic_Poisoning_Biswas.pdf",
    pagesize=A4,
    leftMargin=M, rightMargin=M,
    topMargin=1.5*cm, bottomMargin=1.5*cm
)

story = []
PW = W - 2*M   # usable page width

# ════════════════════════════════════════════════════════════════════════════
# HEADER BANNER
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("ARSENIC POISONING", h_main))
story.append(Paragraph(
    "Source: <i>The Essentials of Forensic Medicine &amp; Toxicology</i> — "
    "Gautam Biswas, 36th Edition (2026) | Forensic Medicine &amp; Toxicology",
    style("src", parent=base, fontName="Helvetica-Oblique", fontSize=8.5,
          textColor=HexColor("#777777"), alignment=TA_CENTER, spaceAfter=8)
))
story.append(HRFlowable(width=PW, thickness=2, color=RED, spaceAfter=8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 1 — GENERAL PROPERTIES & COMPOUNDS
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("1. GENERAL PROPERTIES &amp; COMPOUNDS", h_sec))

# Quick-ref box — physical properties
prop_data = [
    [Paragraph("<b>Property</b>", base), Paragraph("<b>Detail</b>", base)],
    ["Appearance", "White/opaque, heavy crystalline powder (like porcelain)"],
    ["Taste / Smell", "No taste, no smell — ideal homicidal poison"],
    ["Solubility", "Sparingly soluble in water; floats on surface despite being 3.5× heavier"],
    ["Heating", "Sublimes (does not melt) — garlic odour when heated"],
    ["Metallic arsenic", "Black coloured; NON-TOXIC when ingested (not absorbed from GIT)"],
]
t = Table(prop_data, colWidths=[4.5*cm, PW - 4.5*cm])
t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), NAVY),
    ("TEXTCOLOR",  (0,0), (-1,0), white),
    ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",   (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LGREY, white]),
    ("GRID",       (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN",     (0,0), (-1,-1), "MIDDLE"),
    ("LEFTPADDING",(0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING",(0,0),(-1,-1),3),
]))
story.append(t)
story.append(Spacer(1, 6))

story.append(Paragraph("<b>Poisonous Compounds (Biswas):</b>", h_sub))

compounds = [
    ("(1)", "Arsenious oxide / Arsenic trioxide (As₂O₃)", RED,
     "Sankhya or somalkhar; most common homicidal poison. White arsenic. "
     "Occurs as white crystalline powder or opaque porcelain-like solid. No taste/smell."),
    ("(2)", "Copper arsenite & Copper acetoarsenite", TEAL,
     "Scheele's green & Paris green / Emerald green — used as insecticides."),
    ("(3)", "Arsenic acid, Sodium & Potassium arsenates", STEEL,
     "Industrial and agricultural uses."),
    ("(4)", "Arsenic sulfide", AMBER,
     "Orpiment (yellow) and Realgar (red/orange) — natural minerals."),
    ("(5)", "Arsenic trichloride", PURPLE,
     "Butter of arsenic — corrosive liquid."),
    ("(6)", "Arsine gas (AsH₃)", DARKRED,
     "Colourless gas with garlic-like, NON-irritating odour. Most toxic gaseous form. "
     "Direct haemolytic poison — haemolysis, haemoglobinuria, renal failure. Death almost instantaneous."),
    ("(7)", "Organic compounds", GREEN,
     "Cacodylates, Atoxyl, Acetarson, Tryparsamide, Salvarsan, Mepharsen — less toxic; "
     "can cause anaphylaxis, hepatitis, agranulocytosis."),
]
for num, title, color, desc in compounds:
    row_data = [[
        Paragraph(f"<font color='white'><b>{num}</b></font>",
                  style("cn", parent=base, alignment=TA_CENTER, textColor=white,
                        fontName="Helvetica-Bold")),
        Paragraph(f"<b>{title}</b><br/><font size='9'>{desc}</font>", base)
    ]]
    ct = Table(row_data, colWidths=[1.0*cm, PW - 1.0*cm])
    ct.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (0,0), color),
        ("BACKGROUND", (1,0), (1,0), LGREY),
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("TOPPADDING", (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("LINEBELOW", (0,0), (-1,-1), 0.5, white),
    ]))
    story.append(ct)

story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 2 — MECHANISM OF ACTION
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("2. MECHANISM OF ACTION", h_sec))

mech_items = [
    ("Sulphydryl (SH) Group Binding",
     "Combines with sulphydryl groups of mitochondrial enzymes — especially "
     "<b>pyruvate oxidase</b> and certain phosphatases → cellular respiration blocked."),
    ("Vascular Endothelium Target",
     "Particular target is vascular endothelium → <b>increased permeability</b>, "
     "tissue oedema and haemorrhage (especially intestinal canal)."),
    ("Local Mucosal Irritation",
     "Direct irritation of mucous membranes."),
    ("CNS Depression",
     "Remote depression of the nervous system."),
    ("Arsenate Toxicity",
     "<b>Arsenate</b> causes toxicity by <b>uncoupling oxidative phosphorylation</b> "
     "(substitutes for phosphate in ATP synthesis — arsenolysis)."),
    ("Arsine Gas",
     "Acts as a direct haemolytic poison → massive haemolysis, haemoglobinuria, renal failure."),
]
for title, desc in mech_items:
    d = [[
        Paragraph("→", style("arr", parent=base, textColor=RED, fontName="Helvetica-Bold",
                              alignment=TA_CENTER)),
        Paragraph(f"<b>{title}:</b> {desc}", base)
    ]]
    mt = Table(d, colWidths=[0.7*cm, PW - 0.7*cm])
    mt.setStyle(TableStyle([
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING", (0,0), (-1,-1), 3),
        ("TOPPADDING", (0,0), (-1,-1), 2),
        ("BOTTOMPADDING", (0,0), (-1,-1), 2),
    ]))
    story.append(mt)
story.append(Spacer(1, 6))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 3 — FATAL DOSE & PERIOD
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("3. FATAL DOSE, PERIOD &amp; ABSORPTION", h_sec))

fd_data = [
    [Paragraph("<b>Parameter</b>", base),
     Paragraph("<b>Arsenic Trioxide</b>", base),
     Paragraph("<b>Arsine Gas</b>", base)],
    ["Fatal Dose",
     "200–300 mg (Biswas) / 180 mg (Dikshit)\nAs low as 30 mg can be fatal in some",
     "Very small amounts — almost instantaneous"],
    ["Fatal Period", "1–2 days (24–48 hrs)", "Almost instantaneous"],
    ["Lethal Blood Level", ">1 mg% in liver (fatal cases)", "Rapid haemolysis"],
    ["Normal Urine As", "<0.03 mg/L", "Haemoglobinuria present"],
    ["Serious Poisoning", "Blood As >1.5 mg/100 mL", "—"],
]
fdt = Table(fd_data, colWidths=[3.5*cm, (PW-3.5*cm)/2, (PW-3.5*cm)/2])
fdt.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), NAVY),
    ("TEXTCOLOR", (0,0), (-1,0), white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LRED, white]),
    ("GRID", (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
]))
story.append(fdt)
story.append(Spacer(1, 4))

story.append(Paragraph(
    "<b>Absorption:</b> Average daily intake = 0.5–1 mg in food/water. "
    "Absorbed orally (pentavalent arsenic), dermally (arsenite), by inhalation (arsine), or parenterally. "
    "On absorption, bound to protein portion of haemoglobin. "
    "Permissible limit in groundwater: <b>0.05 mg/litre</b>.",
    base))
story.append(Spacer(1, 4))

story.append(Paragraph(
    "<b>Distribution:</b> Early stage — Liver &gt; Kidney &gt; Spleen. "
    "Prolonged — Muscle (days), Bone (weeks–months), Hair/Nails/Skin — for <b>years</b>. "
    "Replaces phosphorus in bone. Does NOT cross blood-brain barrier well. "
    "<b>Does cross the placenta</b> (teratogenic). Brain has the lowest level.",
    base))
story.append(Spacer(1, 4))
story.append(Paragraph(
    "<b>Elimination:</b> Mainly kidneys (methylated arsenic). Also faeces, bile, sweat, hair, nails, skin. "
    "Hair arsenic detectable for <b>years</b> — valuable in exhumation cases.",
    base))

story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 4 — SIGNS & SYMPTOMS — ACUTE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("4. SIGNS &amp; SYMPTOMS — ACUTE POISONING", h_sec))

story.append(Paragraph(
    "Symptoms usually begin within <b>30 minutes</b> of ingestion. "
    "Three clinical presentations:", base))
story.append(Spacer(1, 4))

types_data = [
    [Paragraph("<b>Type</b>", style("th",parent=base,textColor=white,fontName="Helvetica-Bold")),
     Paragraph("<b>Features</b>", style("th",parent=base,textColor=white,fontName="Helvetica-Bold"))],

    [Paragraph("<b>Gastro-enteritic\n(Most Common)</b>",
               style("tc", parent=base, fontName="Helvetica-Bold", textColor=white)),
     Paragraph(
         "1. Metallic taste, slight <b>garlicky odour</b> in breath, xerostomia (dry mouth), dysphagia<br/>"
         "2. Severe nausea &amp; vomiting → colicky abdominal pain → profuse diarrhoea "
         "(rice-water stools, may be bloody) — due to vasodilation + transudation + mucosal sloughing<br/>"
         "3. Dehydration, hypovolaemic shock, cold clammy skin, oliguria/anuria<br/>"
         "4. Cardiac arrhythmias (QTc prolongation), renal tubular necrosis, hepatic necrosis<br/>"
         "5. Death from cardiovascular collapse / hypovolaemic shock in 12–48 hrs",
         base)],

    [Paragraph("<b>Fulminant\n(Algid Type)</b>",
               style("tc2", parent=base, fontName="Helvetica-Bold", textColor=white)),
     Paragraph(
         "• Massive ingestion<br/>"
         "• Rapid cardiovascular collapse, marked GI symptoms<br/>"
         "• Resembles <b>Asiatic cholera</b> — but stools dark/bloody first<br/>"
         "• Death within 24 hours",
         base)],

    [Paragraph("<b>Narcotic Type</b>",
               style("tc3", parent=base, fontName="Helvetica-Bold", textColor=white)),
     Paragraph(
         "• GI symptoms minimal or absent<br/>"
         "• Giddiness, formication, muscle tenderness<br/>"
         "• Delirium → coma → death<br/>"
         "• Rarely: complete paralysis of extremities",
         base)],
]
tt = Table(types_data, colWidths=[3.2*cm, PW - 3.2*cm])
tt.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), NAVY),
    ("TEXTCOLOR",  (0,0), (-1,0), white),
    ("BACKGROUND", (0,1), (0,1), RED),
    ("BACKGROUND", (0,2), (0,2), AMBER),
    ("BACKGROUND", (0,3), (0,3), PURPLE),
    ("TEXTCOLOR",  (0,1), (0,-1), white),
    ("FONTSIZE",   (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (1,1), (-1,-1), [LRED, LAMBER, LPURPLE]),
    ("GRID",  (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN",(0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (0,0),(-1,-1),5),
    ("TOPPADDING",  (0,0),(-1,-1),5),
    ("BOTTOMPADDING",(0,0),(-1,-1),5),
]))
story.append(tt)
story.append(Spacer(1, 6))

# Subacute
story.append(Paragraph("<b>Subacute Poisoning (Biswas):</b>", h_sub))
story.append(Paragraph(
    "Repeated small doses at intervals. Features: dysphagia, cough, foul-smelling "
    "tongue (dry &amp; congested), bloody motions.", base))
story.append(Spacer(1, 6))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 5 — CHRONIC POISONING
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("5. CHRONIC ARSENIC POISONING (Biswas)", h_sec))

chronic_systems = [
    ("SKIN", AMBER, LAMBER, [
        "Earliest: Persistent erythematous flushing (cutaneous capillary dilation)",
        "Raindrop pigmentation — finely mottled brown, mostly on flexures, temples, eyelids, neck",
        "Rash resembling fading measles rash",
        "Hyperkeratosis of palms and soles",
        "Bowen's disease (SCC in situ) — long-term complication, indicates systemic malignancy",
    ]),
    ("NAILS & HAIR", TEAL, LTEAL, [
        "Aldrich-Mees lines — transverse white lines (1–2 mm) in fingernails",
        "Appear at ~5–6 weeks after exposure; distance from nail base = timing",
        "Multiple exposures → multiple lines several mm apart",
        "Brittle nails with irregular thickening",
        "Diffuse or patchy alopecia (hair loss)",
    ]),
    ("NERVOUS SYSTEM", PURPLE, LPURPLE, [
        "Neuropathy = HALLMARK of arsenic poisoning",
        "Symmetrical sensorimotor polyneuropathy — resembles Guillain-Barré syndrome",
        "Predominant features: paraesthesia, numbness, pain — particularly soles of feet (glove-stocking)",
        "Eventually: muscular atrophy, paralysis, ataxia",
        "Encephalopathy: headache, personality disturbance, convulsions, coma",
    ]),
    ("EYES", STEEL, LBLUE, [
        "Congestion, watering, photophobia",
        "Conjunctivitis",
    ]),
    ("GI / HEPATIC", RED, LRED, [
        "Nausea, vomiting, abdominal cramps, diarrhoea, salivation",
        "Hepatomegaly, jaundice, cirrhosis",
        "Portal hypertension",
    ]),
    ("CARDIOVASCULAR / RENAL", NAVY, LGREY, [
        "Chronic nephritis, dependent oedema, cardiac failure",
        "Blackfoot disease — obliterative arterial disease of lower extremities",
        "QTc prolongation, arrhythmias",
    ]),
    ("HAEMATOLOGICAL", GREEN, LTEAL, [
        "Normochromic normocytic anaemia (partly haemolytic)",
        "Leucopenia, thrombocytopenia, mild eosinophilia",
        "Karyorrhexis — bizarre nuclear forms on bone marrow",
        "Megaloblastic picture (folate metabolism interference)",
        "Bone marrow suppression, hypoplasia, leukemia",
    ]),
    ("GENERAL / OTHER", DARKRED, LRED, [
        "Weight loss, anorexia, general weakness",
        "Cough, haemoptysis, dyspnoea",
        "Arsenic is TERATOGENIC",
        "Associated with lung cancer, skin cancer, leukemia",
    ]),
]

for sys_name, color, bg, pts in chronic_systems:
    inner_data = [[
        Paragraph(f"<font color='white'><b>{sys_name}</b></font>",
                  style("sh", parent=base, alignment=TA_CENTER, fontName="Helvetica-Bold")),
        [Paragraph(f"• {p}", bullet) for p in pts]
    ]]
    st = Table(inner_data, colWidths=[2.5*cm, PW - 2.5*cm])
    st.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (0,0), color),
        ("BACKGROUND", (1,0), (1,0), bg),
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("TOPPADDING", (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LINEBELOW", (0,0), (-1,-1), 0.5, white),
    ]))
    story.append(st)

story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 6 — POST-MORTEM
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("6. POST-MORTEM APPEARANCES (Biswas)", h_sec))

pm_data = [
    [Paragraph("<b>Structure</b>", base), Paragraph("<b>Acute Findings</b>", base)],
    ["Stomach", "Normal OR chronic gastritis; patchy haemorrhagic gastritis; acute/chronic erosions"],
    ["Small Intestine", "Dilated, reddened, thickened mucosa, submucosal haemorrhages"],
    ["Liver", "Fatty degeneration OR severe centrilobular necrosis; jaundice"],
    ["Kidneys", "Tubular (proximal) necrosis"],
    ["Distribution in body", "Liver → Kidney → Spleen → Muscle (days) → Bone (months) → Hair/Nails (years)"],
    ["Liver arsenic level", ">1 mg% = fatal; X-ray may show radiodense arsenic in GIT (acute)"],
]
pmt = Table(pm_data, colWidths=[4.0*cm, PW - 4.0*cm])
pmt.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), NAVY),
    ("TEXTCOLOR", (0,0), (-1,0), white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LGREY, white]),
    ("GRID", (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
]))
story.append(pmt)
story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 7 — ARSENIC vs CHOLERA TABLE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("7. ARSENIC POISONING vs CHOLERA (Table 27.1 — Biswas)", h_sec))

diff_data = [
    [Paragraph("<b>Feature</b>", base),
     Paragraph("<b>Arsenic Poisoning</b>", base),
     Paragraph("<b>Cholera</b>", base)],
    ["Pain in throat", "BEFORE vomiting", "After vomiting"],
    ["Purging", "After vomiting", "Before vomiting"],
    ["Stools", "Dark-coloured & bloody; later rice-watery", "Rice-watery; not bloody; involuntary jet"],
    ["Tenesmus / anal irritation", "Present", "Absent"],
    ["Vomited matter", "Mucus, bile and blood", "Watery; without mucus/bile/blood"],
    ["Voice", "Not affected", "Rough and whistling"],
    ["Conjunctivae", "Inflamed", "Not inflamed"],
    ["Analysis of excreta", "Arsenic present", "Cholera vibrio present"],
    ["Circumstantial evidence", "Evidence of arsenic poisoning", "Other cholera cases in locality"],
]
cols3 = [3.8*cm, (PW-3.8*cm)/2, (PW-3.8*cm)/2]
dt = Table(diff_data, colWidths=cols3)
dt.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), NAVY),
    ("TEXTCOLOR",  (0,0), (-1,0), white),
    ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTNAME",   (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE",   (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LGREY, white]),
    ("GRID",  (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN",(0,0), (-1,-1), "MIDDLE"),
    ("LEFTPADDING", (0,0),(-1,-1), 5),
    ("TOPPADDING",  (0,0),(-1,-1), 3),
    ("BOTTOMPADDING",(0,0),(-1,-1),3),
    # highlight key rows
    ("BACKGROUND", (1,1), (1,1), LRED),
    ("BACKGROUND", (1,2), (1,2), LRED),
    ("BACKGROUND", (1,4), (1,4), LRED),
]))
story.append(dt)
story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 8 — INVESTIGATIONS & CHEMICAL TESTS
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("8. INVESTIGATIONS &amp; CHEMICAL TESTS (Biswas)", h_sec))

story.append(Paragraph("<b>Reinsch Test</b> (Screening):", h_sub))
story.append(Paragraph(
    "Copper strip dipped in acidified urine/stomach contents → arsenic deposits as "
    "<b>grey-black metallic sheen</b>. Also detects Hg, Sb, Bi. Rapid bedside screen.", base))
story.append(Spacer(1, 3))

story.append(Paragraph("<b>Marsh Test</b> (Confirmatory — Gold Standard):", h_sub))
story.append(Paragraph(
    "Sample + H₂SO₄ + Zinc → Arsine gas (AsH₃) → heated glass tube → "
    "<b>silver metallic arsenic mirror</b> deposited. Mirror soluble in NaOCl/H₂O₂ confirms arsenic. "
    "Detects as little as 0.02 mg arsenic.", base))
story.append(Spacer(1, 3))

story.append(Paragraph(
    "<b>Neutron Activation Analysis (NAA) &amp; Atomic Absorption Spectroscopy (AAS):</b> "
    "Most accurate quantitation — used for hair, nails, bone (forensic timing).", base))
story.append(Spacer(1, 4))

inv_data = [
    [Paragraph("<b>Test</b>", base),
     Paragraph("<b>Normal</b>", base),
     Paragraph("<b>Significance</b>", base)],
    ["Urine arsenic", "<0.03 mg/L", "Best indicator of recent exposure; elevated within 24–48 h"],
    ["Blood arsenic", "<4 µg/L (blood)", ">1.5 mg/100 mL = serious poisoning"],
    ["Liver arsenic (PM)", "Trace", ">1 mg% in liver = fatal case (Biswas)"],
    ["Hair arsenic", "<2 ppm", "Long-term marker; forensic timing; detectable for years"],
    ["X-ray abdomen", "—", "Radiodense arsenic visible in GIT (acute poisoning)"],
    ["ECG", "—", "QTc prolongation, ventricular arrhythmias"],
]
it = Table(inv_data, colWidths=[3.5*cm, 3.0*cm, PW-6.5*cm])
it.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), TEAL),
    ("TEXTCOLOR",  (0,0), (-1,0), white),
    ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTNAME",   (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE",   (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LTEAL, white]),
    ("GRID",  (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN",(0,0), (-1,-1), "MIDDLE"),
    ("LEFTPADDING", (0,0),(-1,-1), 5),
    ("TOPPADDING",  (0,0),(-1,-1), 3),
    ("BOTTOMPADDING",(0,0),(-1,-1),3),
]))
story.append(it)
story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 9 — TREATMENT
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("9. TREATMENT (Biswas)", h_sec))

story.append(Paragraph("<b>Immediate (GI Decontamination):</b>", h_sub))
treat_steps = [
    "Remove patient from source of exposure (inhalation) / remove clothing",
    "Emetics if recent ingestion and patient conscious",
    "Gastric lavage with warm water and milk — repeatedly via stomach tube",
    "⚠ Alkalis should NOT be given — increase solubility of arsenic",
    "⚠ Freshly precipitated ferric oxide and dialyzed iron are NOT recommended",
    "Butter/greasy substances help prevent absorption",
    "Whole bowel irrigation",
]
for step in treat_steps:
    color = RED if step.startswith("⚠") else NAVY
    story.append(Paragraph(
        f"<font color='{'red' if step.startswith('⚠') else '#1B2A4A'}'>{"• " if not step.startswith("⚠") else ""}{step}</font>",
        bullet))

story.append(Spacer(1, 5))
story.append(Paragraph("<b>Chelation Therapy:</b>", h_sub))

chel_data = [
    [Paragraph("<b>Agent</b>", base),
     Paragraph("<b>Dose</b>", base),
     Paragraph("<b>Notes</b>", base)],
    ["BAL (Dimercaprol)",
     "3 mg/kg IM q4h × 2 days\nthen q6h × 1 day\nthen q12h × 7 days",
     "DRUG OF CHOICE (DOC) for acute arsenic poisoning\n— chelates arsenic from SH groups"],
    ["DMSA (Succimer)",
     "10 mg/kg PO q8h × 5 days",
     "Oral; safer; used for mild-moderate & chronic arsenic"],
    ["DMPS (Unithiol)",
     "5 mg/kg IV or PO",
     "Used in Europe; limited availability"],
    ["D-Penicillamine",
     "250 mg PO 4×/day",
     "2nd line; less effective; used for chronic arsenic"],
]
cht = Table(chel_data, colWidths=[3.5*cm, 4.5*cm, PW-8.0*cm])
cht.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), GREEN),
    ("TEXTCOLOR",  (0,0), (-1,0), white),
    ("FONTNAME",   (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTNAME",   (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE",   (0,0), (-1,-1), 9),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LTEAL, white]),
    ("GRID",  (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
    ("VALIGN",(0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (0,0),(-1,-1), 5),
    ("TOPPADDING",  (0,0),(-1,-1), 3),
    ("BOTTOMPADDING",(0,0),(-1,-1),3),
    # Highlight BAL row
    ("BACKGROUND", (0,1), (-1,1), HexColor("#D5F5E3")),
    ("FONTNAME",   (0,1), (0,1), "Helvetica-Bold"),
    ("TEXTCOLOR",  (0,1), (0,1), GREEN),
]))
story.append(cht)
story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# SECTION 10 — MEDICO-LEGAL / FORENSIC
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("10. MEDICO-LEGAL ASPECTS (Biswas)", h_sec))

ml_points = [
    ("Homicidal", RED,
     "Most common metallic homicidal poison. Tasteless &amp; odourless — "
     "easily added to food/drink undetected. Slow action mimics gastroenteritis/cholera. "
     "Repeated small doses → chronic slow murder."),
    ("Suicidal", AMBER,
     "Insecticides (Paris green) most common suicidal form. Acute GI picture."),
    ("Accidental", TEAL,
     "Contaminated groundwater (Bangladesh, West Bengal — 'Arsenal of Bangladesh'). "
     "Occupational: miners, smelters, glass-workers, pesticide workers. "
     "Accidental ingestion of Paris green."),
    ("Forensic Detection — Key", NAVY,
     "Hair &amp; nails preserve arsenic for YEARS → invaluable in exhumation cases. "
     "Reinsch test (screen) → Marsh test (confirmatory). "
     "Distance of Mees' lines from nail base = timing of exposure. "
     "Neutron activation analysis estimates arsenic in hair, nails, bone. "
     "Fatal liver arsenic: >1 mg%; Blood As >1.5 mg/100 mL = serious poisoning. "
     "Normal hair arsenic: &lt;2 ppm."),
    ("Carcinogenicity", DARKRED,
     "IARC Group 1 Human Carcinogen. "
     "Causes: lung cancer, skin cancer (Bowen's disease, BCC, SCC), bladder cancer, liver angiosarcoma. "
     "Also: Blackfoot disease (obliterative peripheral arterial disease). Teratogenic."),
]

for label, color, text in ml_points:
    row = [[
        Paragraph(f"<font color='white'><b>{label}</b></font>",
                  style("ml", parent=base, alignment=TA_CENTER, fontName="Helvetica-Bold")),
        Paragraph(text, base)
    ]]
    mlt = Table(row, colWidths=[2.8*cm, PW - 2.8*cm])
    mlt.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (0,0), color),
        ("BACKGROUND", (1,0), (1,0), LGREY),
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("LEFTPADDING", (0,0), (-1,-1), 6),
        ("TOPPADDING", (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LINEBELOW", (0,0), (-1,-1), 0.5, white),
    ]))
    story.append(mlt)

story.append(Spacer(1, 8))

# ════════════════════════════════════════════════════════════════════════════
# QUICK RECALL BOX
# ════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width=PW, thickness=2, color=TEAL, spaceAfter=6))
story.append(Paragraph("⚡  QUICK RECALL — EXAM FAVOURITES (Biswas)", 
    style("qr", parent=base, fontName="Helvetica-Bold", fontSize=11,
          textColor=NAVY, spaceAfter=4)))

qr_items = [
    "Commonest arsenic compound: <b>Arsenic trioxide (white arsenic / sankhya)</b>",
    "Fatal dose: <b>200–300 mg</b> (Biswas) | Fatal period: <b>1–2 days</b>",
    "Mechanism: <b>SH group inhibition</b> (pyruvate oxidase) + vascular endothelium → arsenate = uncouples oxidative phosphorylation",
    "Commonest acute type: <b>Gastroenteritic</b>",
    "Classic sign of chronic arsenic: <b>Aldrich-Mees lines</b> (transverse white nail bands at 5–6 wks)",
    "Skin hallmark: <b>Raindrop pigmentation</b> (flexures, temples, eyelids, neck)",
    "Neuropathy = <b>Hallmark</b> — symmetrical sensorimotor; resembles <b>Guillain-Barré</b>",
    "Screening test: <b>Reinsch test</b> | Confirmatory: <b>Marsh test</b>",
    "Drug of choice (DOC): <b>BAL (Dimercaprol)</b> for acute poisoning",
    "Arsenic persists in <b>hair &amp; nails for years</b> — key in exhumation",
    "Permissible limit in groundwater: <b>0.05 mg/litre</b>",
    "IARC Group 1 carcinogen: lung, skin (Bowen's), bladder, liver angiosarcoma",
]
qr_data = [[Paragraph(f"• {item}", bullet)] for item in qr_items]
qr_table = Table(qr_data, colWidths=[PW])
qr_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), HexColor("#EAF6FF")),
    ("ROWBACKGROUNDS", (0,0), (-1,-1), [HexColor("#EAF6FF"), white]),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("TOPPADDING", (0,0), (-1,-1), 2),
    ("BOTTOMPADDING", (0,0), (-1,-1), 2),
    ("GRID", (0,0), (-1,-1), 0, white),
]))
story.append(qr_table)

story.append(Spacer(1, 6))
story.append(HRFlowable(width=PW, thickness=1, color=HexColor("#CCCCCC"), spaceAfter=4))
story.append(Paragraph(
    "Reference: The Essentials of Forensic Medicine &amp; Toxicology, Gautam Biswas, 36th Edition (2026)",
    style("foot", parent=base, fontSize=8, textColor=HexColor("#888888"),
          alignment=TA_CENTER, italic=True)))

# ─── BUILD ───────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF created successfully!")
Running Command

cd /home/daytona/workspace/arsenic-notes && python3 build_notes.py 2>&1

Running Command

ls -lh /home/daytona/workspace/arsenic-notes/

Your notes are ready! Download the PDF here:

Arsenic Poisoning Biswas

PDF Document · PDF


What's in the document (2 A4 pages, colour-coded)

Everything is taken directly from Gautam Biswas — The Essentials of Forensic Medicine & Toxicology, 36th Edition (2026):
SectionContent
1. General Properties & CompoundsPhysical properties table (appearance, taste, solubility, heating) + all 7 poisonous compounds with colour-coded rows
2. Mechanism of Action6 mechanisms — SH group binding, vascular endothelium, CNS depression, arsenate uncoupling, arsine haemolysis
3. Fatal Dose / Period / ADMEComparison table (As₂O₃ vs Arsine gas) + absorption, distribution, elimination in full
4. Acute Poisoning3-type table: Gastroenteritic (most common), Fulminant, Narcotic — with full symptom progression
5. Chronic Poisoning8 systems in colour-banded rows: Skin, Nails/Hair, Nervous, Eyes, GI/Hepatic, CVS/Renal, Haematological, General
6. Post-Mortem AppearancesOrgan-by-organ table
7. Arsenic vs CholeraFull Table 27.1 from Biswas with key differentiating rows highlighted
8. Investigations & TestsReinsch vs Marsh explanation + investigations table (urine, blood, liver, hair, X-ray, ECG)
9. TreatmentDecontamination steps with red warnings (no alkalis!) + chelation table (BAL = DOC highlighted in green)
10. Medico-Legal5 colour-labelled categories: Homicidal, Suicidal, Accidental, Forensic detection, Carcinogenicity
Quick Recall Box12 exam-favourite one-liners — all from Biswas
This is a shared conversation. Sign in to Orris to start your own chat.