Make a ppt on arsenic poisoning for forensic medicine and toxicology add flow charts , pictures and mnemonics where necessary
arsenic poisoning forensic medicine toxicology clinical features pathology mnemonics
ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/arsenic-ppt
~/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); });
cd /home/daytona/workspace/arsenic-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/arsenic-ppt/
Arsenic Poisoning Forensic
Presentation · PPTX
| # | Slide | Key Feature |
|---|---|---|
| 1 | Title Slide | Arsenic Poisoning — Forensic Medicine & Toxicology |
| 2 | Contents | 12-topic table of contents |
| 3 | Introduction | Valence states (As⁰, As³⁺, As⁵⁺, AsH₃), forensic significance, fatal dose/period |
| 4 | Sources & Forms | 3-column: Inorganic / Organic / Environmental compounds |
| 5 | Mechanism Flowchart | Multi-level flowchart: Absorption → Distribution → SH inhibition / enzyme block / capillary dilation / uncoupling |
| 6 | Acute Poisoning | Timeline flowchart (0–30 min → 48 h) with color-coded stages |
| 7 | Types of Acute Poisoning | Fulminant / Gastroenteritic / Narcotic types |
| 8 | Arsenic vs Cholera Table | Full differential diagnosis table (9 features) |
| 9 | Chronic Poisoning | 6-system grid: Skin, Nails/Hair, Nervous, GI/Liver, Haematological, CVS/Renal |
| 10 | Mees' Lines & Skin Signs | Drawn nail schematic with annotation + Raindrop pigmentation, Hyperkeratosis, Bowen's disease |
| 11 | Autopsy Findings | Side-by-side: Acute PM vs Chronic PM findings |
| 12 | Medico-Legal Aspects | Homicidal / Suicidal / Accidental / Forensic detection / Key values |
| 13 | Chemical Tests | Reinsch test, Marsh test, investigations table with normal values |
| 14 | Treatment Flowchart | Step-by-step flowchart with chelation agents (BAL, DMSA, DMPS, D-Pen) |
| 15 | Mnemonics | ARSENIC (chronic features), MARSH (test steps), CHELATE (treatment) |
| 16 | ADME Pharmacokinetics | 4-column: Absorption, Distribution, Metabolism, Excretion |
| 17 | Carcinogenicity | IARC Group 1 — Skin, Lung, Bladder, Liver, Kidney + Blackfoot disease |
| 18 | Key Take-Home Points | 10 examiner-favourite bullet points |
| 19 | Thank You | Sources 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
mkdir -p /home/daytona/workspace/accidents-ppt && echo "dir ready"
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')"
~/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); });
cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1
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"
~/accidents-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
~/accidents-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1
~/accidents-ppt/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/accidents-ppt/build.js'
cd /home/daytona/workspace/accidents-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/accidents-ppt/
Accidents Parks CommMed
Presentation · PPTX
| # | Slide | Highlights |
|---|---|---|
| 1 | Title | Bold cover |
| 2 | Contents | 12-topic color-coded index |
| 3 | Definition | All 3 definitions (Hogarth, WHO 1956, general) + 5 epidemiological key concepts |
| 4 | Measurement | Mortality indices, Morbidity (AIS), Disability (ICF-WHO) |
| 5 | Statistics | 6 global stat tiles + India bar chart (pedestrians 35.1%, motorcyclists 30.9%, etc.) |
| 6 | Types | RTA, Domestic, Industrial, Railway + intentionality classification table |
| 7 | Park's Diagram | The actual Park's textbook figure — "Primary Factors in Accidents" (Human + Environmental + Precipitating factors) embedded as image |
| 8 | RTA Risk Factors | 6 categories: Speed, Drink-driving, Helmets, Seat belts, Distracted driving, Road/Vehicle factors with all % figures |
| 9 | Domestic Accidents | Drowning, Burns, Falls, Poisoning — each with risk factors |
| 10 | Industrial & Railway | SE Asia stats, India data, types of industrial injuries, prevention |
| 11 | Haddon's Matrix | Pre-crash / Crash / Post-crash × Host / Agent / Environment — full table |
| 12 | Prevention — 3E's | Engineering, Education, Enforcement with examples |
| 13 | RTA Prevention | Park's 5-point plan (legislation, education, safety devices, alcohol control, emergency care) |
| 14 | RTA Management Flowchart | Step-by-step emergency care flowchart (scene safety → CPR → transport → ATLS) |
| 15 | Burns First Aid | Do's and Don'ts columns (directly from Park's) + Drowning management steps |
| 16 | India Statistics Table | Full NCRB data table — all causes of accidental death 2014 & 2015 |
| 17 | Snakebite | 4-level management (community → PHC → district → referral) + antivenom facts |
| 18 | Key Points Summary | 10 examiner-favourite bullet points |
| 19 | Thank You | Source 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
mkdir -p /home/daytona/workspace/arsenic-notes && python3 -c "import reportlab; print(reportlab.Version)"
~/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 & Toxicology</i> — "
"Gautam Biswas, 36th Edition (2026) | Forensic Medicine & 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 & 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 & 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 > Kidney > 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 & 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 & 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 & 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 & 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) & 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 & 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 & 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: <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 & 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 & 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!")
cd /home/daytona/workspace/arsenic-notes && python3 build_notes.py 2>&1
ls -lh /home/daytona/workspace/arsenic-notes/
Arsenic Poisoning Biswas
PDF Document · PDF
| Section | Content |
|---|---|
| 1. General Properties & Compounds | Physical properties table (appearance, taste, solubility, heating) + all 7 poisonous compounds with colour-coded rows |
| 2. Mechanism of Action | 6 mechanisms — SH group binding, vascular endothelium, CNS depression, arsenate uncoupling, arsine haemolysis |
| 3. Fatal Dose / Period / ADME | Comparison table (As₂O₃ vs Arsine gas) + absorption, distribution, elimination in full |
| 4. Acute Poisoning | 3-type table: Gastroenteritic (most common), Fulminant, Narcotic — with full symptom progression |
| 5. Chronic Poisoning | 8 systems in colour-banded rows: Skin, Nails/Hair, Nervous, Eyes, GI/Hepatic, CVS/Renal, Haematological, General |
| 6. Post-Mortem Appearances | Organ-by-organ table |
| 7. Arsenic vs Cholera | Full Table 27.1 from Biswas with key differentiating rows highlighted |
| 8. Investigations & Tests | Reinsch vs Marsh explanation + investigations table (urine, blood, liver, hair, X-ray, ECG) |
| 9. Treatment | Decontamination steps with red warnings (no alkalis!) + chelation table (BAL = DOC highlighted in green) |
| 10. Medico-Legal | 5 colour-labelled categories: Homicidal, Suicidal, Accidental, Forensic detection, Carcinogenicity |
| Quick Recall Box | 12 exam-favourite one-liners — all from Biswas |