~/hanging-notes/generate.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
pres.title = "HANGING — MD Forensic Medicine Exam Notes";
pres.author = "Forensic Medicine";
// ─── COLOUR PALETTE ───────────────────────────────────────────────
const C = {
navy: "0D1B2A", // dominant dark
teal: "1B998B", // accent / heading bar
amber: "FF9F1C", // highlight / important
red: "C1121F", // danger / homicide
cream: "F5F0E8", // slide bg
white: "FFFFFF",
ltGray: "E8EFF5",
mdGray: "8899AA",
text: "1A1A2E",
green: "2D6A4F",
yellow: "FFD166",
orange: "F4845F",
};
// ─── HELPERS ──────────────────────────────────────────────────────
function titleSlide(slide, title, subtitle) {
// full-bleed dark background
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color: C.navy} });
// teal left bar
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.3, h:7.5, fill:{color: C.teal} });
// amber accent stripe
slide.addShape(pres.ShapeType.rect, { x:0.3, y:3.2, w:12.7, h:0.08, fill:{color: C.amber} });
slide.addText(title, {
x:0.6, y:1.8, w:12, h:1.2, fontSize:52, bold:true, color:C.white,
fontFace:"Calibri", align:"left"
});
slide.addText(subtitle, {
x:0.6, y:3.5, w:11, h:0.8, fontSize:22, color:C.teal,
fontFace:"Calibri", align:"left"
});
slide.addText("Sources: Reddy 2026 | Parikh | Dikshit | DiMaio | Knight", {
x:0.6, y:6.8, w:12, h:0.4, fontSize:12, color:C.mdGray, fontFace:"Calibri"
});
}
function sectionHeader(slide, num, title) {
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color: C.navy} });
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.12, fill:{color: C.teal} });
slide.addShape(pres.ShapeType.rect, { x:0, y:7.38, w:13.3, h:0.12, fill:{color: C.amber} });
slide.addText(`${num}`, {
x:1, y:1.5, w:2, h:2, fontSize:110, bold:true, color:C.teal,
fontFace:"Calibri", align:"center", valign:"middle"
});
slide.addText(title, {
x:3.2, y:2.6, w:9.5, h:1.5, fontSize:40, bold:true, color:C.white,
fontFace:"Calibri", align:"left", valign:"middle"
});
}
function contentSlide(slide, title) {
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color: C.cream} });
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.7, fill:{color: C.navy} });
slide.addShape(pres.ShapeType.rect, { x:0, y:0.7, w:13.3, h:0.06, fill:{color: C.teal} });
slide.addText(title, {
x:0.3, y:0.05, w:12.7, h:0.6, fontSize:22, bold:true, color:C.white,
fontFace:"Calibri", valign:"middle", margin:0
});
}
function keyBox(slide, x, y, w, h, label, value, bgColor) {
slide.addShape(pres.ShapeType.rect, { x, y, w, h, fill:{color: bgColor || C.navy}, line:{color:C.teal, width:1.5} });
slide.addText(label, { x:x+0.08, y:y+0.06, w:w-0.16, h:0.28, fontSize:10, color:C.teal, bold:true, fontFace:"Calibri", margin:0 });
slide.addText(value, { x:x+0.08, y:y+0.34, w:w-0.16, h:h-0.42, fontSize:13, color:C.white, bold:true, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
}
function tableSlide(slide, headers, rows, colWidths, startY, fontSize) {
const fs = fontSize || 11;
const hh = 0.38, rh = 0.34;
let x = 0.25;
// header row
headers.forEach((h, i) => {
slide.addShape(pres.ShapeType.rect, { x, y:startY, w:colWidths[i], h:hh, fill:{color:C.navy} });
slide.addText(h, { x:x+0.05, y:startY+0.02, w:colWidths[i]-0.1, h:hh-0.04, fontSize:fs, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
x += colWidths[i];
});
rows.forEach((row, ri) => {
x = 0.25;
const bg = ri%2===0 ? C.white : C.ltGray;
row.forEach((cell, ci) => {
slide.addShape(pres.ShapeType.rect, { x, y:startY+hh+(ri*rh), w:colWidths[ci], h:rh, fill:{color:bg}, line:{color:"CCCCCC", width:0.5} });
const isRed = typeof cell === 'string' && (cell.includes("❌") || cell.includes("Absent") || cell.includes("Homicide") || cell.includes("ABSENT"));
const isGreen = typeof cell === 'string' && (cell.includes("✓") || cell.includes("Present") || cell.includes("PRESENT"));
const isBold = typeof cell === 'string' && cell.startsWith("★");
slide.addText(String(cell).replace("★",""), {
x:x+0.05, y:startY+hh+(ri*rh)+0.02, w:colWidths[ci]-0.1, h:rh-0.04,
fontSize:fs-0.5, color: isRed ? C.red : isGreen ? C.green : isBold ? C.navy : C.text,
bold: isBold, fontFace:"Calibri", valign:"middle", margin:0, wrap:true
});
x += colWidths[ci];
});
});
}
function bullet(text, opts) {
return { text, options:{ bullet:true, breakLine:true, fontSize:13, color:C.text, fontFace:"Calibri", ...opts } };
}
function subbullet(text, opts) {
return { text, options:{ bullet:{indent:20}, indentLevel:1, breakLine:true, fontSize:11.5, color:C.navy, fontFace:"Calibri", ...opts } };
}
function lastBullet(text, opts) {
return { text, options:{ bullet:true, fontSize:13, color:C.text, fontFace:"Calibri", ...opts } };
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
titleSlide(s, "HANGING", "MD Forensic Medicine — Complete Exam Notes with Diagrams");
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 2 — DEFINITION + KEY FACTS
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "DEFINITION & KEY FACTS");
// Definition box
slide_addDefBox(s);
// 4 key pressure boxes
const boxes = [
["Jugular veins\noccluded by","2 kg", C.teal],
["Carotid arteries\noccluded by","3.5 kg", C.navy],
["Trachea\noccluded by","15 kg", C.orange],
["Vertebral arteries\noccluded by","16.6 kg", C.red],
];
boxes.forEach((b, i) => {
const bx = 0.3 + i*3.25;
s.addShape(pres.ShapeType.rect, { x:bx, y:4.5, w:3.0, h:1.5, fill:{color:b[2]}, line:{color:C.amber, width:2} });
s.addText(b[0], { x:bx+0.1, y:4.55, w:2.8, h:0.7, fontSize:11, color:C.white, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addText(b[1], { x:bx+0.1, y:5.2, w:2.8, h:0.7, fontSize:22, bold:true, color:C.amber, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
});
// Rule
s.addShape(pres.ShapeType.rect, { x:0.3, y:6.2, w:12.7, h:0.62, fill:{color:C.amber}, line:{color:C.amber} });
s.addText('★ "Hanging is ALWAYS suicidal unless contrary is proved beyond reasonable doubt" — Reddy 2026', {
x:0.4, y:6.22, w:12.5, h:0.58, fontSize:13.5, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle", margin:0
});
}
function slide_addDefBox(s) {
s.addShape(pres.ShapeType.rect, { x:0.3, y:0.85, w:12.7, h:1.6, fill:{color:C.navy}, line:{color:C.teal, width:2} });
s.addShape(pres.ShapeType.rect, { x:0.3, y:0.85, w:0.12, h:1.6, fill:{color:C.teal} });
s.addText([
{ text:"DEFINITION: ", options:{ bold:true, color:C.teal, fontSize:13, fontFace:"Calibri" } },
{ text:"A form of violent mechanical asphyxia caused by suspension of the body by a ligature encircling the neck, the constricting force being the WEIGHT OF THE BODY. The weight of the head alone (5–6 kg) is sufficient to occlude the carotid arteries (3.5 kg) and cause death — full body suspension is NOT necessary.", options:{ color:C.white, fontSize:13, fontFace:"Calibri" } }
], { x:0.55, y:0.9, w:12.3, h:1.5, valign:"middle" });
s.addShape(pres.ShapeType.rect, { x:0.3, y:2.6, w:5.9, h:1.7, fill:{color:C.ltGray}, line:{color:C.teal, width:1} });
s.addText("Parikh:", { x:0.4, y:2.65, w:1.2, h:0.3, fontSize:11, bold:true, color:C.teal, fontFace:"Calibri", margin:0 });
s.addText('"The ligature constricts the neurovascular bundles in the neck and/or the upper airways. When feet do not touch ground — complete hanging. When weight of only the head acts — partial hanging."', { x:0.4, y:2.95, w:5.6, h:1.2, fontSize:10.5, color:C.text, fontFace:"Calibri", italic:true, wrap:true });
s.addShape(pres.ShapeType.rect, { x:6.4, y:2.6, w:6.6, h:1.7, fill:{color:C.ltGray}, line:{color:C.amber, width:1} });
s.addText("DiMaio:", { x:6.5, y:2.65, w:1.2, h:0.3, fontSize:11, bold:true, color:C.amber, fontFace:"Calibri", margin:0 });
s.addText('"Asphyxia in hanging is secondary to compression of neck structures by a noose or constricting band tightened by the weight of the body. Either complete or incomplete (partial) suspension."', { x:6.5, y:2.95, w:6.3, h:1.2, fontSize:10.5, color:C.text, fontFace:"Calibri", italic:true, wrap:true });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 3 — CLASSIFICATION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "CLASSIFICATION OF HANGING");
// Three classification columns
const cols = [
{
title:"A. By SUSPENSION (Feet Position)", color:C.teal,
items:[
"COMPLETE — Fully suspended; no part touches ground; entire body weight acts",
"PARTIAL (INCOMPLETE) — Head + chest off ground; feet/toes/knees/buttocks touch",
" → Partial Standing",
" → Sitting",
" → Kneeling",
" → Reclining / Prone",
]
},
{
title:"B. By KNOT POSITION (Noose)", color:C.amber,
items:[
"TYPICAL (CLASSICAL) — Knot at nape/occiput; oblique V-shaped mark ascending to back",
"ATYPICAL — Knot at lateral (ear), anterior (chin/throat), or any unusual position",
"",
"Most common knot site in suicide:",
" → Lateral (under ear) — most common",
" → Posterior (nape)",
" → Anterior — least common",
]
},
{
title:"C. By MODE / MANNER", color:C.orange,
items:[
"Suicidal — ~95%; most common worldwide",
"Accidental — children (cords); autoerotic",
"Homicidal — very rare; usually victim incapacitated",
"Judicial — capital punishment (S.473 BNSS)",
"Autoerotic / Sexual asphyxia — masochistic young males",
"Lynching — mob hanging; from Capt. William Lynch, USA",
"Postmortem suspension — body hanged after death to simulate suicide",
]
},
];
cols.forEach((col, i) => {
const bx = 0.25 + i*4.35;
s.addShape(pres.ShapeType.rect, { x:bx, y:0.85, w:4.1, h:0.5, fill:{color:col.color} });
s.addText(col.title, { x:bx+0.05, y:0.87, w:4.0, h:0.46, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:bx, y:1.35, w:4.1, h:5.9, fill:{color:C.white}, line:{color:col.color, width:1.5} });
const items = col.items.map((it, idx) => {
if (!it) return { text:" ", options:{ breakLine:true, fontSize:10, fontFace:"Calibri" } };
const isSub = it.startsWith(" →");
return {
text: isSub ? it.replace(" →","→") : it,
options:{
bullet: !isSub,
indentLevel: isSub ? 1 : 0,
breakLine: idx < col.items.length-1,
fontSize: isSub ? 10 : 11,
color: isSub ? col.color : C.text,
fontFace:"Calibri",
bold: idx===0 && !isSub,
}
};
});
s.addText(items, { x:bx+0.1, y:1.4, w:3.9, h:5.8 });
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 4 — MECHANISM OF DEATH (DIAGRAM STYLE)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "MECHANISM OF DEATH IN HANGING");
const mechs = [
{ n:"1", title:"Cerebral Ischaemia", color:C.navy,
body:"Carotid compression (3.5 kg) → arterial occlusion → cerebral anoxia → unconscious in 10–15 sec → death in 3–5 min\n★ MOST COMMON MECHANISM\nProof: tracheostomy cases; vomitus below ligature" },
{ n:"2", title:"Cerebral Venous Congestion", color:C.teal,
body:"Jugular vein compression (2 kg) → venous outflow blocked → raised ICP → petechiae → engorgement → oedema → death\nDominant in PARTIAL HANGING → congested face, prominent petechiae" },
{ n:"3", title:"Airway Obstruction (Asphyxia)", color:C.orange,
body:"Root of tongue pushed back against pharynx; epiglottis folds over larynx → airway blocked. Tracheal compression needs 15 kg — rarely sole mechanism. Classical asphyxial triad: cyanosis + petechiae + congestion" },
{ n:"4", title:"Vagal Inhibition", color:C.red,
body:"Pressure on carotid sinus / vagus nerve → reflex cardiac arrest → INSTANTANEOUS DEATH. NO asphyxial signs (Knight: ~50% of mech. asphyxia deaths had no classical signs). Fear/alcohol heightens sensitivity" },
{ n:"5", title:"Spinal Cord Injury", color:"4A4E69",
body:"ONLY in judicial/long-drop hanging. Free fall + sudden jerk → fracture-dislocation C2–C3 (Hangman's fracture). Spinal cord transected → instantaneous death. Heart beats 15–20 min after. NO asphyxial signs" },
];
mechs.forEach((m, i) => {
const row = Math.floor(i/3);
const col = i%3;
const bx = 0.25 + col*4.35;
const by = 0.92 + row*3.1;
const bw = 4.1, bh = 2.9;
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:bw, h:bh, fill:{color:C.white}, line:{color:m.color, width:2} });
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:bw, h:0.55, fill:{color:m.color} });
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:0.45, h:0.55, fill:{color:C.amber} });
s.addText(m.n, { x:bx, y:by, w:0.45, h:0.55, fontSize:18, bold:true, color:C.navy, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addText(m.title, { x:bx+0.5, y:by+0.04, w:bw-0.55, h:0.48, fontSize:12, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText(m.body, { x:bx+0.1, y:by+0.6, w:bw-0.2, h:bh-0.7, fontSize:10, color:C.text, fontFace:"Calibri", valign:"top", wrap:true });
});
// bottom note
s.addShape(pres.ShapeType.rect, { x:0.25, y:7.0, w:12.8, h:0.35, fill:{color:C.amber} });
s.addText("★ Any combination of the above may act simultaneously | Mechanisms act in sequence with increasing ligature force", {
x:0.3, y:7.0, w:12.7, h:0.35, fontSize:11, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle", margin:0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 5 — PRESSURE VALUES + SEQUENCE DIAGRAM
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "PRESSURE THRESHOLDS & SEQUENCE OF OCCLUSION");
// Arrow diagram — left to right showing progressive occlusion
const steps = [
{ label:"Jugular Veins", pressure:"2 kg", color:C.teal, effect:"Venous congestion\nPetechiae begin" },
{ label:"Carotid Arteries", pressure:"3.5 kg", color:C.navy, effect:"Cerebral ischaemia\nUnconscious in 10–15 sec" },
{ label:"Trachea", pressure:"15 kg", color:C.orange, effect:"Airway obstruction\n(rarely achieved alone)" },
{ label:"Vertebral Arteries", pressure:"16.6 kg", color:C.red, effect:"Complete cerebral\narterial cut-off" },
];
steps.forEach((st, i) => {
const bx = 0.3 + i*3.2;
// box
s.addShape(pres.ShapeType.rect, { x:bx, y:1.0, w:3.0, h:2.2, fill:{color:st.color}, line:{color:C.amber, width:1.5} });
s.addText(st.label, { x:bx+0.05, y:1.05, w:2.9, h:0.55, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:bx+0.4, y:1.65, w:2.2, h:0.55, fill:{color:C.amber} });
s.addText(st.pressure, { x:bx+0.4, y:1.65, w:2.2, h:0.55, fontSize:22, bold:true, color:C.navy, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addText(st.effect, { x:bx+0.05, y:2.25, w:2.9, h:0.9, fontSize:10, color:C.white, fontFace:"Calibri", align:"center", valign:"middle", wrap:true });
// arrow
if (i < steps.length-1) {
s.addShape(pres.ShapeType.rightArrow, { x:bx+3.05, y:1.7, w:0.15, h:0.45, fill:{color:C.amber} });
}
});
// Head weight info
s.addShape(pres.ShapeType.rect, { x:0.3, y:3.5, w:5.5, h:1.5, fill:{color:C.ltGray}, line:{color:C.teal, width:1.5} });
s.addText("Weight of the Human Head", { x:0.4, y:3.55, w:5.3, h:0.4, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri", margin:0 });
s.addText([
bullet("Adult head weighs 5–6 kg (10–12 lb)"),
lastBullet("This EXCEEDS the carotid occlusion threshold (3.5 kg)"),
], { x:0.4, y:3.95, w:5.3, h:1.0 });
// Implication box
s.addShape(pres.ShapeType.rect, { x:6.1, y:3.5, w:6.9, h:1.5, fill:{color:C.navy}, line:{color:C.amber, width:2} });
s.addText("CRITICAL IMPLICATION (Exam Favourite):", { x:6.2, y:3.55, w:6.7, h:0.4, fontSize:12, bold:true, color:C.amber, fontFace:"Calibri", margin:0 });
s.addText("Full body suspension is NOT necessary for death.\nA person can die hanging in sitting, kneeling or lying position — just the weight of the head against the noose is enough.", {
x:6.2, y:3.95, w:6.7, h:1.0, fontSize:11, color:C.white, fontFace:"Calibri", wrap:true
});
// Face appearance summary
const faceRows = [
["Complete Hanging","Carotids occluded > Jugulars","PALE face","Sparse petechiae"],
["Partial Hanging","Jugulars occluded > Carotids (vertebrals continue)","CONGESTED face","Prominent petechiae"],
];
s.addShape(pres.ShapeType.rect, { x:0.3, y:5.2, w:12.7, h:0.38, fill:{color:C.navy} });
["Type of Hanging","Why","Face Appearance","Petechiae"].forEach((h, i) => {
const wx = [3.5,4.5,2.2,2.5];
let ox = 0.3; for(let j=0;j<i;j++) ox+=wx[j];
s.addText(h, { x:ox+0.05, y:5.22, w:wx[i]-0.1, h:0.34, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
});
faceRows.forEach((row, ri) => {
const wx = [3.5,4.5,2.2,2.5];
const bg = ri%2===0 ? C.white : C.ltGray;
let ox = 0.3;
row.forEach((cell, ci) => {
s.addShape(pres.ShapeType.rect, { x:ox, y:5.58+ri*0.55, w:wx[ci], h:0.5, fill:{color:bg}, line:{color:"CCCCCC", width:0.5} });
const isSpecial = cell==="PALE face"||cell==="CONGESTED face"||cell==="Prominent petechiae";
s.addText(cell, { x:ox+0.05, y:5.6+ri*0.55, w:wx[ci]-0.1, h:0.46, fontSize:10.5, color:isSpecial?C.red:C.text, bold:isSpecial, fontFace:"Calibri", valign:"middle", margin:0, wrap:true });
ox += wx[ci];
});
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 6 — LIGATURE MARK (DETAILED)
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "THE LIGATURE MARK — Most Important External Sign");
// Left column — characteristics
s.addShape(pres.ShapeType.rect, { x:0.25, y:0.85, w:6.1, h:6.5, fill:{color:C.white}, line:{color:C.teal, width:1.5} });
s.addShape(pres.ShapeType.rect, { x:0.25, y:0.85, w:6.1, h:0.45, fill:{color:C.teal} });
s.addText("CHARACTERISTICS", { x:0.3, y:0.87, w:6.0, h:0.41, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText([
bullet("Shape: Inverted V or U-shaped furrow; oblique; directed upward toward knot"),
bullet("Completeness: Does NOT completely encircle neck (gap at knot = SUSPENSION PEAK)"),
bullet("Level: 80% above thyroid | 15% at level | 5% below (partial hanging)"),
bullet("Fresh: Pale, yellowish, dry, parchment-like depressed groove"),
bullet("Later: Yellow-brown, firm, well-demarcated"),
bullet("Rope: Deep, clear with mirror-image weave pattern"),
bullet("Soft material (dupatta): Pale, poorly defined, no bruising"),
bullet("Edges: Narrow zone of congestion above + below groove at deepest point"),
subbullet("(due to lateral displacement of blood — NOT vital reaction)"),
bullet("Width: ≈ or slightly less than width of ligature material"),
lastBullet("Head inclines to side OPPOSITE the knot"),
], { x:0.35, y:1.38, w:5.9, h:6.0 });
// Right column — diagram + key differential
// ASCII-art style neck diagram using shapes
s.addShape(pres.ShapeType.rect, { x:6.55, y:0.85, w:6.5, h:6.5, fill:{color:C.white}, line:{color:C.amber, width:1.5} });
s.addShape(pres.ShapeType.rect, { x:6.55, y:0.85, w:6.5, h:0.45, fill:{color:C.amber} });
s.addText("SUSPENSION PEAK & LEVELS", { x:6.6, y:0.87, w:6.4, h:0.41, fontSize:13, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle", margin:0 });
// Neck oval
s.addShape(pres.ShapeType.ellipse, { x:8.8, y:1.45, w:2.0, h:2.8, fill:{color:"FFDAB9"}, line:{color:"CC8866", width:2} });
s.addText("NECK", { x:8.8, y:2.7, w:2.0, h:0.4, fontSize:11, bold:true, color:"885533", fontFace:"Calibri", align:"center", margin:0 });
// Ligature mark line — oblique
s.addShape(pres.ShapeType.line, { x:8.1, y:3.3, w:2.6, h:0, line:{color:C.red, width:3} }); // front-left
s.addShape(pres.ShapeType.line, { x:8.1, y:3.3, w:0, h:-1.4, line:{color:C.red, width:3} }); // up left
s.addShape(pres.ShapeType.line, { x:10.7, y:3.3, w:0, h:-1.4, line:{color:C.red, width:3} }); // up right
// Suspension peak label
s.addShape(pres.ShapeType.rect, { x:9.3, y:1.45, w:0.12, h:0.5, fill:{color:C.teal} });
s.addText("↑ SUSPENSION\n PEAK\n(No mark here)", { x:9.45, y:1.3, w:2.5, h:0.8, fontSize:9.5, color:C.teal, bold:true, fontFace:"Calibri" });
// Level labels
s.addShape(pres.ShapeType.line, { x:6.8, y:2.3, w:1.9, h:0, line:{color:C.teal, width:1, dash:"dash"} });
s.addText("← Chin", { x:7.0, y:2.1, w:1.5, h:0.3, fontSize:9, color:C.text, fontFace:"Calibri" });
s.addShape(pres.ShapeType.line, { x:6.8, y:2.85, w:1.9, h:0, line:{color:C.orange, width:1.5} });
s.addText("80% — Above thyroid", { x:6.82, y:2.88, w:1.85, h:0.3, fontSize:9, color:C.orange, bold:true, fontFace:"Calibri" });
s.addShape(pres.ShapeType.line, { x:6.8, y:3.3, w:1.9, h:0, line:{color:C.teal, width:1.5} });
s.addText("15% — At thyroid level", { x:6.82, y:3.32, w:1.85, h:0.28, fontSize:9, color:C.teal, bold:true, fontFace:"Calibri" });
s.addShape(pres.ShapeType.line, { x:6.8, y:3.75, w:1.9, h:0, line:{color:C.red, width:1.5} });
s.addText("5% — Below thyroid", { x:6.82, y:3.77, w:1.85, h:0.28, fontSize:9, color:C.red, bold:true, fontFace:"Calibri" });
s.addText("(Partial hanging)", { x:6.82, y:4.05, w:1.85, h:0.25, fontSize:8.5, color:C.red, fontFace:"Calibri", italic:true });
// vs Strangulation mini table
s.addShape(pres.ShapeType.rect, { x:6.6, y:4.45, w:6.3, h:0.38, fill:{color:C.navy} });
s.addText("HANGING vs LIGATURE STRANGULATION — Key Differences", {
x:6.65, y:4.47, w:6.2, h:0.34, fontSize:11, bold:true, color:C.amber, fontFace:"Calibri", valign:"middle", margin:0
});
const vsHeaders = ["Feature","Hanging","Strangulation"];
const vsRows = [
["Direction","Oblique (ascending)","Horizontal"],
["Completeness","Incomplete (gap)","Complete"],
["Level","Above thyroid (80%)","At/below thyroid"],
["Suspension Peak","PRESENT ✓","ABSENT ❌"],
["Usual Manner","Suicide","Homicide"],
];
tableSlide(s, vsHeaders, vsRows, [2.2,2.1,2.0], 4.83, 10);
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 7 — EXTERNAL POSTMORTEM APPEARANCES
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "POSTMORTEM APPEARANCES — External");
// Two columns
const left = [
{hd:"General Asphyxial Signs", color:C.navy, items:[
"Cyanosis — face, lips, nails (variable; may be absent)",
"Petechiae (Tardieu spots) — conjunctiva, sclera, skin (prominent in partial hanging)",
"Congested, prominent, injected eyeballs",
"Tongue — protrudes, dark brown/black (venous + drying)",
"Bloody froth — nose/mouth (pulmonary oedema)",
]},
{hd:"Specific to Hanging", color:C.teal, items:[
"Neck stretched; head inclined to OPPOSITE side of knot",
"Face PALE (complete) or CONGESTED (partial)",
"Saliva dribble — corner of mouth on OPPOSITE side to knot",
"PM lividity — glove-and-stocking pattern (forearms, hands, legs)",
"Middle ear haemorrhage",
"Scrotal/penile congestion; seminal emission (males)",
]},
];
left.forEach((col, i) => {
const by = 0.9 + i*3.15;
s.addShape(pres.ShapeType.rect, { x:0.25, y:by, w:7.0, h:0.42, fill:{color:col.color} });
s.addText(col.hd, { x:0.3, y:by+0.02, w:6.9, h:0.38, fontSize:12, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:0.25, y:by+0.42, w:7.0, h:2.65, fill:{color:C.white}, line:{color:col.color, width:1} });
const items = col.items.map((it, idx) => ({
text:it, options:{ bullet:true, breakLine:idx<col.items.length-1, fontSize:11, color:C.text, fontFace:"Calibri" }
}));
s.addText(items, { x:0.35, y:by+0.48, w:6.8, h:2.5 });
});
// Right column — important differentials panel
s.addShape(pres.ShapeType.rect, { x:7.55, y:0.88, w:5.5, h:6.5, fill:{color:C.navy}, line:{color:C.amber, width:2} });
s.addShape(pres.ShapeType.rect, { x:7.55, y:0.88, w:5.5, h:0.45, fill:{color:C.amber} });
s.addText("KEY DIFFERENTIATING FEATURES", { x:7.6, y:0.9, w:5.4, h:0.41, fontSize:12, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle", margin:0 });
const diffItems = [
["Why PALE face in complete hanging?", "Carotids occluded BEFORE jugulars → no blood pools in head → pale"],
["Why CONGESTED face in partial hanging?", "Jugulars compressed, but vertebral artery supply continues → blood pools in head → congested + petechiae"],
["Why saliva on OPPOSITE side to knot?", "Ligature compresses submandibular/parotid glands on knot side → secretion displaced to opposite side"],
["Why glove-stocking lividity?", "Body remains vertical for hours → gravity pools blood in forearms, hands, legs"],
["Why seminal emission?", "Spinal cord hypoxia + autonomic dysfunction → involuntary ejaculation"],
["Postmortem petechiae on limb skin — significance?", "NOT diagnostic of antemortem hanging — appear in any prolonged postmortem suspension due to hydrostatic capillary rupture"],
];
diffItems.forEach((item, i) => {
s.addShape(pres.ShapeType.rect, { x:7.65, y:1.42+i*0.95, w:5.3, h:0.85, fill:{ color:i%2===0?C.navy:"0A1624" }, line:{color:C.teal, width:0.5} });
s.addText("Q: "+item[0], { x:7.72, y:1.45+i*0.95, w:5.15, h:0.33, fontSize:9.5, bold:true, color:C.amber, fontFace:"Calibri", margin:0, wrap:true });
s.addText("A: "+item[1], { x:7.72, y:1.77+i*0.95, w:5.15, h:0.45, fontSize:9.5, color:C.white, fontFace:"Calibri", wrap:true });
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 8 — INTERNAL FINDINGS + NECK DISSECTION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "INTERNAL FINDINGS & NECK DISSECTION TECHNIQUE");
// LEFT: Dissection steps
s.addShape(pres.ShapeType.rect, { x:0.25, y:0.85, w:5.5, h:0.42, fill:{color:C.teal} });
s.addText("NECK DISSECTION — STEP BY STEP", { x:0.3, y:0.87, w:5.4, h:0.38, fontSize:12, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
const steps = [
["BEFORE REMOVAL","Do NOT remove noose; photograph in situ; document: material, width, knot type & position"],
["REMOVE LIGATURE","Cut OPPOSITE to knot; secure cut ends with tape; do NOT untie knot; slip/cut loop over head"],
["GOLDEN RULE","Remove BRAIN first (drain cranial blood) → then chest & abdomen → then neck last"],
["SKIN & PLATYSMA","Examine groove; measure width, depth, colour, direction, pattern"],
["STRAP MUSCLES","Tears, haemorrhage — esp. sternomastoid (torn in 10–15%)"],
["CAROTID ARTERIES","Open to level of mandible — look for horizontal intimal tears (traction-type) with subintimal haemorrhage"],
["HYOID BONE","Fracture at junction of inner 2/3 + outer 1/3 of greater cornu; look for blood clot = antemortem"],
["THYROID CARTILAGE","Superior horn fractures; thyrohyoid ligament tears (~40–45%)"],
["LARYNX/TRACHEA","Petechiae, hyperaemia of epiglottis and tracheal mucosa"],
["LUMBAR DISCS","Simon's haemorrhages = red stripes in intervertebral discs = prolonged suspension"],
];
steps.forEach((st, i) => {
const by = 1.35 + i*0.58;
s.addShape(pres.ShapeType.rect, { x:0.25, y:by, w:1.1, h:0.5, fill:{color: i===2?C.amber:C.navy } });
s.addText(st[0], { x:0.27, y:by+0.02, w:1.06, h:0.46, fontSize:8, bold:true, color: i===2?C.navy:C.teal, fontFace:"Calibri", align:"center", valign:"middle", wrap:true, margin:0 });
s.addShape(pres.ShapeType.rect, { x:1.35, y:by, w:4.4, h:0.5, fill:{color:i%2===0?C.white:C.ltGray}, line:{color:"CCCCCC", width:0.5} });
s.addText(st[1], { x:1.4, y:by+0.02, w:4.3, h:0.46, fontSize:10, color:C.text, fontFace:"Calibri", valign:"middle", wrap:true });
});
// RIGHT: Key internal findings boxes
s.addShape(pres.ShapeType.rect, { x:6.0, y:0.85, w:7.0, h:0.42, fill:{color:C.navy} });
s.addText("KEY INTERNAL FINDINGS", { x:6.05, y:0.87, w:6.9, h:0.38, fontSize:12, bold:true, color:C.amber, fontFace:"Calibri", valign:"middle", margin:0 });
const findings = [
{ title:"Carotid Intimal Tears", color:C.teal, body:"Horizontal traction tears + subintimal haemorrhage. Multiple, scattered at different levels near knot. DIAGNOSTIC of antemortem hanging. Open artery to mandible level to find them." },
{ title:"Simon's Haemorrhages ★", color:C.amber, body:"Red stripes in outer layers (annulus fibrosus) of LUMBAR intervertebral discs. Due to gravitational stretching during prolonged vertical suspension. Present in antemortem AND postmortem suspension." },
{ title:"Hyoid Bone Fracture", color:C.orange, body:"0–20% average. Rare below 40 yrs (cartilaginous, mobile). Fracture at junction inner 2/3 + outer 1/3 of greater cornu. Displaced OUTWARD. Blood clot = antemortem." },
{ title:"Lungs", color:"4A4E69", body:"Congested + oedematous; bloody serum on section. Subpleural ecchymoses (Tardieu spots). Pale if constriction at END OF INSPIRATION." },
];
findings.forEach((f, i) => {
const row = Math.floor(i/2), col = i%2;
const bx = 6.1 + col*3.45, by = 1.35 + row*2.9;
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:3.3, h:2.75, fill:{color:C.white}, line:{color:f.color, width:2} });
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:3.3, h:0.48, fill:{color:f.color} });
s.addText(f.title, { x:bx+0.05, y:by+0.02, w:3.2, h:0.44, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText(f.body, { x:bx+0.1, y:by+0.55, w:3.1, h:2.1, fontSize:10.5, color:C.text, fontFace:"Calibri", wrap:true, valign:"top" });
});
// Antemortem indicator list
s.addShape(pres.ShapeType.rect, { x:6.1, y:7.15, w:6.9, h:0.38, fill:{color:C.teal} });
s.addText([
{text:"Antemortem indicators: ", options:{bold:true, color:C.white, fontSize:11, fontFace:"Calibri"}},
{text:"Carotid intimal tears | Congested lymph nodes above + below mark | Vital reaction in groove (histology) | Hyperaemia of epiglottis/trachea | Petechiae on serous surfaces", options:{color:C.yellow, fontSize:10.5, fontFace:"Calibri"}}
], { x:6.15, y:7.16, w:6.8, h:0.36, valign:"middle" });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 9 — ANTEMORTEM vs POSTMORTEM HANGING
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "ANTEMORTEM vs POSTMORTEM HANGING");
const headers = ["Indicator","Antemortem Hanging","Postmortem Suspension"];
const rows = [
["Carotid intimal tears", "★ Present (horizontal, traction-type)", "ABSENT"],
["Subintimal haemorrhage", "★ Present", "ABSENT"],
["Lymph nodes above/below mark", "★ Congested + haemorrhagic", "ABSENT / normal"],
["Deep muscle haemorrhage under groove", "★ Present", "Dry, white, bloodless zone"],
["Hyperaemia of trachea/epiglottis", "★ Present", "ABSENT"],
["Petechiae on SEROUS SURFACES", "★ Present (pleura, pericardium)", "ABSENT — key distinction"],
["Petechiae on SKIN of limbs", "Can be present", "Present (hydrostatic)"],
["Vital reaction (histology)", "Neutrophils, vascular reaction", "No vital reaction"],
["Simon's haemorrhages", "Present (prolonged suspension)", "Present (prolonged)"],
["Rope fibres on victim's hands", "★ May be present", "Usually absent"],
["Groove mark on beam", "Rope moves TOP → BOTTOM", "Rope moves BOTTOM → TOP (body pulled up)"],
];
tableSlide(s, headers, rows, [3.6,4.1,4.95], 0.88, 10.5);
// footer
s.addShape(pres.ShapeType.rect, { x:0.25, y:7.0, w:12.8, h:0.38, fill:{color:C.amber} });
s.addText("★ = Most important diagnostic criteria for antemortem hanging | ★ alone do not confirm — need combination of findings", {
x:0.3, y:7.01, w:12.7, h:0.36, fontSize:11, bold:true, color:C.navy, fontFace:"Calibri", valign:"middle", margin:0
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 10 — DOCUMENTATION OF LIGATURE MATERIAL
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "DOCUMENTATION OF LIGATURE MATERIAL (Medico-Legal Evidence)");
// 4 step boxes
const steps4 = [
{ n:"STEP 1", title:"At the Scene", color:C.teal,
items:["Photograph body + noose + suspension point in situ", "Do NOT cut down or touch until documented", "Note: type, attachment site, knot position, direction", "Measure: height of suspension point from ground", "Measure: length of rope used"] },
{ n:"STEP 2", title:"Removing the Ligature", color:C.navy,
items:["NEVER untie the knot — it is evidence", "Cut OPPOSITE to the knot (diametrically)", "Secure BOTH cut ends with adhesive tape — label A and B", "Slip loop over the head, OR cut and preserve", "Submit intact ligature with body to mortuary"] },
{ n:"STEP 3", title:"9-Parameter Description", color:C.orange,
items:["1. Nature/material (rope, dupatta, wire, cord, belt...)", "2. Composition/texture (cotton, nylon; braided/twisted)", "3. Colour + any staining (blood, saliva, paint)", "4. Width/diameter (in cm)", "5. Length (loop + rope to support)", "6. Noose type: Fixed loop OR Running/slip-knot", "7. Knot type + position + number of turns", "8. Mode of application (single/multiple loops)", "9. Condition (intact, frayed, broken)"] },
{ n:"STEP 4", title:"Preservation + Handover", color:C.red,
items:["Dry at room temperature — NOT plastic bag (causes decomposition)", "Use BROWN PAPER envelope/bag — seal, sign, date", "Label: case no. + body ID + date + surgeon's name", "Hand over to IO under written receipt", "Document in PM report: 'Articles handed over'"] },
];
steps4.forEach((st, i) => {
const col = i%2, row = Math.floor(i/2);
const bx = 0.25 + col*6.65, by = 0.88 + row*3.15;
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:6.4, h:0.48, fill:{color:st.color} });
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:1.1, h:0.48, fill:{color:C.amber} });
s.addText(st.n, { x:bx+0.02, y:by+0.02, w:1.06, h:0.44, fontSize:11, bold:true, color:C.navy, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addText(st.title, { x:bx+1.15, y:by+0.04, w:5.2, h:0.4, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:bx, y:by+0.48, w:6.4, h:2.6, fill:{color:C.white}, line:{color:st.color, width:1.5} });
const items = st.items.map((it, idx) => ({
text:it, options:{ bullet:true, breakLine:idx<st.items.length-1, fontSize:10.5, color:C.text, fontFace:"Calibri" }
}));
s.addText(items, { x:bx+0.15, y:by+0.54, w:6.15, h:2.45 });
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 11 — POSTMORTEM REPORT: OPINION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "POSTMORTEM REPORT — OPINION IN HANGING CASES");
// 3 opinions
const opinions = [
{ n:"1", title:"Cause of Death", color:C.navy, scenarios:[
["Typical suicidal hanging (no drop)","Asphyxia due to hanging"],
["Carotid compression dominant","Cerebral ischaemia due to compression of carotid arteries by ligature (hanging)"],
["Vagal inhibition (sudden death, no signs)","Cardiac inhibition (reflex vagal) due to hanging"],
["Judicial / long drop","Fracture-dislocation of cervical vertebrae (C2–C3) with spinal cord injury due to judicial hanging"],
["Delayed death after rescue","Hypoxic encephalopathy — complication of hanging"],
]},
{ n:"2", title:"Manner of Death", color:C.teal, scenarios:[
["State clearly","Suicidal / Homicidal / Accidental"],
["Support with findings e.g. suicidal","No signs of struggle; oblique ligature mark with suspension peak; accessible knot; consistent PM lividity; no other injuries"],
["Suspicious of homicide","Knot at back of neck; gagged mouth; tied limbs; offensive/defensive injuries; evidence of assault"],
["Cannot be determined","State: 'Further investigation by police/magistrate is recommended'"],
]},
{ n:"3", title:"Time Since Death", color:C.orange, scenarios:[
["Rigor mortis state","Note stage: developing/fully established/resolving"],
["PM lividity","Fixed vs non-fixed; position consistent with hanging posture?"],
["Decomposition","Any evidence; eye/corneal changes"],
["Stomach contents","Digestion state for rough meal-to-death interval"],
]},
];
opinions.forEach((op, i) => {
const bx = 0.25 + i*4.35, by = 0.88;
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:4.1, h:0.45, fill:{color:op.color} });
s.addShape(pres.ShapeType.rect, { x:bx, y:by, w:0.45, h:0.45, fill:{color:C.amber} });
s.addText(op.n, { x:bx, y:by, w:0.45, h:0.45, fontSize:18, bold:true, color:C.navy, fontFace:"Calibri", align:"center", valign:"middle", margin:0 });
s.addText(op.title, { x:bx+0.5, y:by+0.04, w:3.55, h:0.37, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:bx, y:by+0.45, w:4.1, h:5.5, fill:{color:C.white}, line:{color:op.color, width:1.5} });
op.scenarios.forEach((sc, si) => {
s.addShape(pres.ShapeType.rect, { x:bx+0.1, y:by+0.6+si*1.28, w:3.9, h:0.38, fill:{color:op.color} });
s.addText(sc[0], { x:bx+0.15, y:by+0.62+si*1.28, w:3.8, h:0.34, fontSize:10, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:bx+0.1, y:by+0.98+si*1.28, w:3.9, h:0.82, fill:{color:C.ltGray}, line:{color:"CCCCCC", width:0.5} });
s.addText("→ "+sc[1], { x:bx+0.15, y:by+1.0+si*1.28, w:3.8, h:0.78, fontSize:10, color:C.text, fontFace:"Calibri", valign:"middle", wrap:true });
});
});
// Template opinion
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.85, w:12.8, h:0.58, fill:{color:C.navy}, line:{color:C.teal, width:1.5} });
s.addText([
{text:"TEMPLATE: ", options:{bold:true, color:C.amber, fontSize:11, fontFace:"Calibri"}},
{text:'"In my opinion, death in this case was due to asphyxia as a result of hanging. The manner of death appears to be suicidal. Cause of death: Asphyxia due to hanging."', options:{color:C.white, fontSize:11, fontFace:"Calibri", italic:true}}
], { x:0.35, y:6.87, w:12.6, h:0.54, valign:"middle" });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 12 — SUICIDAL vs HOMICIDAL HANGING
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "SUICIDAL vs HOMICIDAL vs ACCIDENTAL HANGING");
const headers = ["Feature","Suicidal","Homicidal","Accidental"];
const rows = [
["Frequency","★ Most common (~95%)","Very rare","Rare"],
["Signs of struggle","ABSENT ❌","Present ✓ (usually)","ABSENT ❌"],
["Knot position","Accessible to deceased","Often back of neck","Accessible"],
["Mouth","Open/normal","May be gagged","Normal"],
["Limbs","Free (may self-tie)","Often tied (behind back)","Free"],
["Other injuries","Absent or self-inflicted","Present (offensive/defensive)","Scene-related"],
["Suicide note","~25% cases","Absent","Absent"],
["Room/scene","Often locked from inside","Disturbed furniture","Obvious circumstances"],
["Drug/alcohol","May be present","Victim may be stupefied","Autoerotic: sober"],
["Ligature","Easily accessible material","May be unusual","Cords, blinds, crib straps"],
["Motive","Depression, psych illness","Pre-existing conflict","Misadventure / autoerotic"],
];
tableSlide(s, headers, rows, [2.6,2.8,2.8,3.35], 0.88, 10);
// Homicide suspicion markers
s.addShape(pres.ShapeType.rect, { x:0.25, y:5.75, w:12.8, h:0.38, fill:{color:C.red} });
s.addText("★ SUSPECT HOMICIDE WHEN:", { x:0.3, y:5.77, w:4.5, h:0.34, fontSize:12, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText("(1) Knot at back (2) Mouth gagged (3) Limbs tied (4) Signs of struggle (5) Injuries inconsistent with self-infliction (6) Evidence of stupefaction (7) Crescentic abrasions near ligature (throttling)", {
x:4.85, y:5.77, w:8.15, h:0.34, fontSize:10.5, color:C.white, fontFace:"Calibri", valign:"middle", margin:0
});
// Autoerotic box
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.22, w:12.8, h:1.1, fill:{color:C.ltGray}, line:{color:C.orange, width:1.5} });
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.22, w:2.5, h:0.4, fill:{color:C.orange} });
s.addText("AUTOEROTIC / SEXUAL ASPHYXIA", { x:0.3, y:6.24, w:2.4, h:0.36, fontSize:10, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText([
{text:"Scene clues: ", options:{bold:true, color:C.orange, fontSize:11, fontFace:"Calibri"}},
{text:"Padding under noose | Partial/complete nudity | Pornographic material | Mirrors | Female clothing on male | Elaborate escape mechanism | Young male | Masochistic paraphernalia", options:{color:C.text, fontSize:11, fontFace:"Calibri"}},
], { x:0.35, y:6.66, w:12.6, h:0.62, valign:"middle" });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 13 — IPC vs BNS
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "IPC / CrPC vs BNS / BNSS — Relevant Sections in Hanging");
const headers = ["Subject","Old IPC / CrPC","New BNS / BNSS 2023","Key Provision"];
const rows = [
["Attempt to suicide","S.309 IPC","★ S.226 BNS","Effectively decriminalised — MHA 2017 S.115: presumption of severe stress; duty to provide care NOT prosecution"],
["Abetment of suicide","S.306 IPC","S.108 BNS","Up to 10 years imprisonment + fine"],
["Murder (homicidal hanging)","S.302 IPC","S.103 BNS","Punishment for murder — death or life imprisonment"],
["Culpable homicide","S.304 IPC","S.105 BNS","Culpable homicide not amounting to murder"],
["Hurt","S.319 IPC","S.114 BNS","Definition of hurt (if injuries found)"],
["Police inquest (unnatural death)","S.174 CrPC","S.194 BNSS","Mandatory police inquest in ALL hanging deaths"],
["Magistrate's inquest","S.176 CrPC","S.196 BNSS","Compulsory: death in police custody; or if police inquest unsatisfactory"],
["Capital punishment (judicial hanging)","S.354(5) CrPC","★ S.473(5) BNSS","Hanging is the prescribed method of execution in India"],
["Evidence — rope/ligature","Indian Evidence Act S.3","Bharatiya Sakshya Adhiniyam 2023","Physical evidence — chain of custody must be maintained"],
];
tableSlide(s, headers, rows, [2.9,2.1,2.1,5.4], 0.88, 9.5);
// MHA box
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.72, w:12.8, h:0.7, fill:{color:C.navy}, line:{color:C.amber, width:2} });
s.addText([
{text:"★ MHA 2017 S.115: ", options:{bold:true, color:C.amber, fontSize:12, fontFace:"Calibri"}},
{text:"Any person who attempts suicide shall be presumed to be under severe stress and shall NOT be tried and punished under S.309 IPC (S.226 BNS). State has a DUTY to provide care, treatment and rehabilitation — NOT prosecution.", options:{color:C.white, fontSize:11, fontFace:"Calibri"}},
], { x:0.35, y:6.74, w:12.6, h:0.66, valign:"middle" });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 14 — JUDICIAL HANGING + FATAL PERIOD
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "JUDICIAL HANGING, LYNCHING & FATAL PERIOD");
// Judicial hanging box
s.addShape(pres.ShapeType.rect, { x:0.25, y:0.88, w:6.8, h:0.42, fill:{color:C.navy} });
s.addText("JUDICIAL HANGING (S.473(5) BNSS)", { x:0.3, y:0.9, w:6.7, h:0.38, fontSize:13, bold:true, color:C.amber, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:0.25, y:1.3, w:6.8, h:5.3, fill:{color:C.white}, line:{color:C.navy, width:1.5} });
s.addText([
bullet("Face covered with dark mask; stood on platform above trapdoor"),
bullet("Knot placed at LEFT angle of jaw (sub-auricular) — optimal position"),
bullet("Drop of 5–7 metres calculated by Table of Drops (inverse to body weight)"),
bullet("Too short a drop → strangulation (slow death)"),
bullet("Too long a drop → decapitation"),
bullet("Free fall + sudden stop → Hangman's Fracture"),
subbullet("Fracture-dislocation at C2–C3 or C3–C4"),
subbullet("Bilateral pedicle/neural arch fractures of C2"),
subbullet("Spinal cord transected/lacerated"),
subbullet("Pons + medulla may be contused"),
bullet("Death is INSTANTANEOUS; heart beats 15–20 min after"),
bullet("Limb twitching, muscle jerks persist (spinal reflex below lesion)"),
bullet("Extensive sternomastoid tears; transverse carotid intimal tears"),
bullet("NO classical asphyxial signs"),
lastBullet("★ Justifiable homicide — manner of death is HOMICIDAL (judicial)"),
], { x:0.35, y:1.38, w:6.6, h:5.12 });
// Right side
// Fatal period
s.addShape(pres.ShapeType.rect, { x:7.35, y:0.88, w:5.7, h:0.42, fill:{color:C.teal} });
s.addText("FATAL PERIOD", { x:7.4, y:0.9, w:5.6, h:0.38, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
const fp = [
["Judicial hanging (long drop)","INSTANTANEOUS\n(heart: 15–20 min)", C.red],
["Suicidal hanging (no drop)","5–8 minutes", C.navy],
["Loss of consciousness","10–15 seconds\n(carotid occlusion)", C.teal],
["Vagal inhibition","Instantaneous", C.orange],
];
fp.forEach((f, i) => {
s.addShape(pres.ShapeType.rect, { x:7.35, y:1.38+i*1.2, w:5.7, h:1.1, fill:{color:C.white}, line:{color:f[2], width:1.5} });
s.addShape(pres.ShapeType.rect, { x:7.35, y:1.38+i*1.2, w:3.0, h:1.1, fill:{color:C.ltGray} });
s.addText(f[0], { x:7.4, y:1.4+i*1.2, w:2.9, h:1.06, fontSize:11, color:C.text, fontFace:"Calibri", valign:"middle", wrap:true });
s.addText(f[1], { x:10.4, y:1.4+i*1.2, w:2.55, h:1.06, fontSize:14, bold:true, color:f[2], fontFace:"Calibri", align:"center", valign:"middle" });
});
// Lynching
s.addShape(pres.ShapeType.rect, { x:7.35, y:6.3, w:5.7, h:0.42, fill:{color:C.red} });
s.addText("LYNCHING", { x:7.4, y:6.32, w:5.6, h:0.38, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:7.35, y:6.72, w:5.7, h:0.72, fill:{color:C.white}, line:{color:C.red, width:1} });
s.addText("Named after Capt. William Lynch (USA). Mob hanging without trial. Non-justifiable homicide. Manner of death = HOMICIDE. Common in India: honor killing, caste conflicts, mob justice.", {
x:7.4, y:6.74, w:5.6, h:0.68, fontSize:10, color:C.text, fontFace:"Calibri", wrap:true
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 15 — MODES OF DEATH — DETAILED DIAGRAM
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "MODES OF DEATH IN HANGING — Comparative Summary");
const headers = ["Mode","Speed","Asphyxial Signs","Face","Petechiae","Most Common In","Autopsy Clue"];
const rows = [
["Cerebral Ischaemia\n(Carotid)","10–15 sec → unconscious; death 3–5 min","Mild or ABSENT","★ PALE","Sparse/absent","Complete hanging\n(MOST COMMON overall)","Carotid intimal tears; brain pale"],
["Cerebral Venous\nCongestion (Jugular)","Slower","★ PROMINENT","★ CONGESTED\ncyanosed","★ Prominent","Partial hanging","Engorged vessels; congested brain"],
["Asphyxia\n(Airway block)","~4–5 min","★ CLASSICAL TRIAD","Cyanosed","Prominent","Rarely sole mechanism; combined","Pale lungs (inspiration); congested (expiration); Tardieu spots"],
["Vagal Inhibition","INSTANTANEOUS","ABSENT ❌","Pale/normal","ABSENT ❌","Sensitive carotid sinus;\nfear/alcohol","Diagnosis by exclusion; no other findings"],
["Spinal Cord Injury","INSTANTANEOUS","ABSENT ❌","Normal","ABSENT ❌","JUDICIAL hanging only\n(long drop)","Hangman's fx C2–C3; cord transection"],
];
tableSlide(s, headers, rows, [1.9,1.8,1.85,1.45,1.3,2.15,1.8], 0.88, 9.5);
// Bottom explanation
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.15, w:12.8, h:1.25, fill:{color:C.navy}, line:{color:C.teal, width:1.5} });
s.addText("WHY CEREBRAL ISCHAEMIA, NOT ASPHYXIA, IS THE COMMONEST MODE:", { x:0.35, y:6.18, w:12.6, h:0.38, fontSize:12, bold:true, color:C.amber, fontFace:"Calibri", margin:0 });
s.addText([
{text:"(1) ", options:{bold:true, color:C.teal, fontSize:11, fontFace:"Calibri"}},
{text:"Trachea needs 15 kg to compress — rarely achieved in nonjudicial hanging. ", options:{color:C.white, fontSize:11, fontFace:"Calibri"}},
{text:"(2) ", options:{bold:true, color:C.teal, fontSize:11, fontFace:"Calibri"}},
{text:"Carotids need only 3.5 kg — occluded by body weight before trachea is compressed. ", options:{color:C.white, fontSize:11, fontFace:"Calibri"}},
{text:"PROOF: ", options:{bold:true, color:C.amber, fontSize:11, fontFace:"Calibri"}},
{text:"Persons with tracheostomy have died by hanging; vomitus found in bronchi BELOW the level of the noose.", options:{color:C.white, fontSize:11, fontFace:"Calibri"}},
], { x:0.35, y:6.58, w:12.6, h:0.75, valign:"middle" });
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 16 — HIGH YIELD VIVA TABLE
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "HIGH-YIELD VIVA QUICK FACTS — HANGING");
// Two column layout
const left = [
["Most common cause of death in hanging","Cerebral ischaemia (NOT asphyxia) ★"],
["Most common manner","SUICIDAL"],
["Carotid occlusion pressure","3.5 kg"],
["Jugular occlusion pressure","2 kg"],
["Tracheal compression","15 kg"],
["Vertebral artery","16.6 kg"],
["Weight of head","5–6 kg (10–12 lb)"],
["Ligature mark above thyroid","80% of cases"],
["Hyoid fracture average","0–20% (rare < 40 yrs)"],
["Hyoid fracture site","Inner 2/3 + outer 1/3 of greater cornu"],
["Simon's haemorrhages","Lumbar IVD annulus fibrosus haemorrhage"],
["Suspension peak","Absent mark at knot site — KEY to diagnose hanging"],
["Saliva dribble side","OPPOSITE to knot side"],
];
const right = [
["Face in complete hanging","PALE (carotid dominant)"],
["Face in partial hanging","CONGESTED (jugular dominant)"],
["Neck dissection — do FIRST","Remove BRAIN first (drain blood)"],
["Carotids opened up to","Level of MANDIBLE"],
["IPC 309 → BNS","S.226 BNS (decriminalised by MHA 2017)"],
["IPC 174 CrPC → BNSS","S.194 BNSS (police inquest)"],
["Capital punishment method","Hanging — S.473(5) BNSS"],
["Knight's observation","50% mech. asphyxia: NO classical signs"],
["Key medico-legal principle","Hanging is ALWAYS suicidal unless contrary proved"],
["Postmortem petechiae on limbs","NOT diagnostic — hydrostatic capillary rupture"],
["Prove antemortem — best sign","Carotid intimal tears + congested lymph nodes"],
["Le Faci's sympathicae","Horner's syndrome on knot side (cervical sympathetic)"],
["Lynching — named after","Capt. William Lynch, USA"],
];
[left, right].forEach((col, ci) => {
const bx = 0.25 + ci*6.6;
col.forEach((row, ri) => {
const bg = ri%2===0 ? C.white : C.ltGray;
s.addShape(pres.ShapeType.rect, { x:bx, y:0.88+ri*0.48, w:2.4, h:0.44, fill:{color:C.navy}, line:{color:"AAAAAA", width:0.3} });
s.addShape(pres.ShapeType.rect, { x:bx+2.4, y:0.88+ri*0.48, w:4.0, h:0.44, fill:{color:bg}, line:{color:"AAAAAA", width:0.3} });
s.addText(row[0], { x:bx+0.06, y:0.9+ri*0.48, w:2.28, h:0.4, fontSize:9.5, color:C.teal, fontFace:"Calibri", valign:"middle", wrap:true, margin:0 });
s.addText(row[1], { x:bx+2.46, y:0.9+ri*0.48, w:3.88, h:0.4, fontSize:10, bold:true, color:C.text, fontFace:"Calibri", valign:"middle", wrap:true, margin:0 });
});
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 17 — DELAYED DEATH + SCENE EXAMINATION
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "DELAYED CAUSES OF DEATH | SCENE EXAMINATION | SPECIAL SIGNS");
// Delayed death
s.addShape(pres.ShapeType.rect, { x:0.25, y:0.88, w:4.2, h:0.42, fill:{color:C.navy} });
s.addText("DELAYED DEATH AFTER RESCUE", { x:0.3, y:0.9, w:4.1, h:0.38, fontSize:11, bold:true, color:C.amber, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:0.25, y:1.3, w:4.2, h:4.2, fill:{color:C.white}, line:{color:C.navy, width:1.5} });
s.addText([
bullet("Aspiration pneumonia"),
bullet("Pulmonary oedema (neurogenic/hypoxic)"),
bullet("Laryngeal oedema → delayed airway obstruction"),
bullet("Hypoxic encephalopathy"),
bullet("Cerebral infarction (carotid dissection)"),
bullet("Brain abscess / cerebral softening"),
bullet("Retropharyngeal abscess"),
bullet("Cervical cellulitis"),
lastBullet("Epilepsy, amnesia, dementia (sequelae)"),
], { x:0.35, y:1.38, w:4.0, h:4.0 });
// Scene examination
s.addShape(pres.ShapeType.rect, { x:4.65, y:0.88, w:4.2, h:0.42, fill:{color:C.teal} });
s.addText("SCENE EXAMINATION PROTOCOL", { x:4.7, y:0.9, w:4.1, h:0.38, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:4.65, y:1.3, w:4.2, h:4.2, fill:{color:C.white}, line:{color:C.teal, width:1.5} });
s.addText([
bullet("Do NOT cut body down before photography"),
bullet("Document: posture, height of suspension, type of support"),
bullet("Note accessibility — could deceased have reached it?"),
bullet("Measure drop height + identify platform used"),
bullet("Examine rope grooves on beam (confirm contact)"),
bullet("If rope broke: match neck portion to ceiling portion"),
bullet("Look for: suicide note, overturned furniture, footwear"),
bullet("In suicidal: rope marks TOP→BOTTOM on beam"),
lastBullet("In postmortem suspension: rope marks BOTTOM→TOP"),
], { x:4.75, y:1.38, w:4.0, h:4.0 });
// Special signs
s.addShape(pres.ShapeType.rect, { x:9.05, y:0.88, w:4.0, h:0.42, fill:{color:C.orange} });
s.addText("SPECIAL SIGNS (Viva Favourites)", { x:9.1, y:0.9, w:3.9, h:0.38, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:9.05, y:1.3, w:4.0, h:4.2, fill:{color:C.white}, line:{color:C.orange, width:1.5} });
const signs = [
["Simon's Haemorrhages","Haemorrhage in outer layers of lumbar IVD (annulus fibrosus). Red stripes between vertebral bodies. Prolonged vertical suspension."],
["Le Faci's Sympathicae","Unilateral Horner's syndrome (ptosis + miosis + anhidrosis) on side of knot — pressure on cervical sympathetic chain. Sign of antemortem hanging."],
["Suspension Peak","Area of absent ligature mark at knot site — pathognomonic of hanging vs strangulation."],
["Tardieu's Spots","Subpleural/subpericardial petechiae — sign of asphyxia; present in antemortem hanging but NOT postmortem suspension."],
];
signs.forEach((sg, i) => {
s.addShape(pres.ShapeType.rect, { x:9.1, y:1.38+i*0.98, w:3.9, h:0.35, fill:{color:C.orange} });
s.addText(sg[0], { x:9.15, y:1.4+i*0.98, w:3.8, h:0.31, fontSize:10, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:9.1, y:1.73+i*0.98, w:3.9, h:0.56, fill:{color:C.ltGray} });
s.addText(sg[1], { x:9.15, y:1.75+i*0.98, w:3.8, h:0.52, fontSize:9.5, color:C.text, fontFace:"Calibri", wrap:true, valign:"middle" });
});
// Postmortem suspension tells
s.addShape(pres.ShapeType.rect, { x:0.25, y:5.68, w:12.8, h:0.4, fill:{color:C.red} });
s.addText("★ POSTMORTEM SUSPENSION TELLS:", { x:0.3, y:5.7, w:4.5, h:0.36, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText("Ligature NOT in classic V-config | No intimal tears | Dry/bloodless groove | No lymph node congestion | Rope marks on beam go upward | No fibres on victim's hands | Cause of death = something else at autopsy", {
x:4.85, y:5.7, w:8.15, h:0.36, fontSize:10, color:C.white, fontFace:"Calibri", valign:"middle"
});
s.addShape(pres.ShapeType.rect, { x:0.25, y:6.18, w:12.8, h:1.2, fill:{color:C.ltGray}, line:{color:C.teal, width:1.5} });
s.addText("SECONDARY EFFECTS IN SURVIVORS (Reddy):", { x:0.35, y:6.2, w:5.5, h:0.35, fontSize:11, bold:true, color:C.teal, fontFace:"Calibri", margin:0 });
s.addText("Hemiplegia | Decubitus ulcers + infection | Anaemia + hypoproteinaemia | Epileptiform convulsions | Amnesia | Dementia | Cervical cellulitis | Parotitis | Retropharyngeal abscess", {
x:0.35, y:6.58, w:12.6, h:0.75, fontSize:10.5, color:C.text, fontFace:"Calibri", wrap:true
});
}
// ══════════════════════════════════════════════════════════════════
// SLIDE 18 — CLOSING / SUMMARY MIND MAP
// ══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.navy} });
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.08, fill:{color:C.amber} });
s.addShape(pres.ShapeType.rect, { x:0, y:7.42, w:13.3, h:0.08, fill:{color:C.teal} });
// Central node
s.addShape(pres.ShapeType.ellipse, { x:4.9, y:2.9, w:3.5, h:1.7, fill:{color:C.teal}, line:{color:C.amber, width:3} });
s.addText("HANGING", { x:4.9, y:3.0, w:3.5, h:0.8, fontSize:26, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
s.addText("FORENSIC MEDICINE", { x:4.9, y:3.8, w:3.5, h:0.5, fontSize:12, color:C.amber, fontFace:"Calibri", align:"center" });
// Branch nodes
const branches = [
{ label:"DEFINITION\n+ Classification", x:0.2, y:0.5, color:C.teal },
{ label:"MECHANISM\n5 modes of death", x:9.8, y:0.5, color:C.orange },
{ label:"LIGATURE\nMark Features", x:0.2, y:3.1, color:"4A4E69" },
{ label:"AUTOPSY\nNeck Dissection", x:9.8, y:3.1, color:C.red },
{ label:"MEDICOLEGAL\nS vs H vs A", x:0.2, y:5.6, color:C.green },
{ label:"IPC → BNS\nKey Sections", x:9.8, y:5.6, color:"6D4C7A" },
{ label:"POSTMORTEM\nREPORT & OPINION", x:4.5, y:6.3, color:C.amber },
];
branches.forEach(b => {
s.addShape(pres.ShapeType.rect, { x:b.x, y:b.y, w:2.9, h:1.0, fill:{color:b.color}, line:{color:C.amber, width:1.5} });
s.addText(b.label, { x:b.x+0.05, y:b.y+0.05, w:2.8, h:0.9, fontSize:13, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
});
// Key final rule
s.addShape(pres.ShapeType.rect, { x:3.5, y:6.85, w:6.3, h:0.5, fill:{color:C.amber} });
s.addText('"Hanging is ALWAYS suicidal unless contrary proved beyond reasonable doubt" — Reddy', {
x:3.55, y:6.87, w:6.2, h:0.46, fontSize:12, bold:true, color:C.navy, fontFace:"Calibri", align:"center", valign:"middle", margin:0
});
}
// ══════════════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/hanging-notes/Hanging_Forensic_Exam_Notes.pptx" })
.then(() => console.log("✅ DONE: Hanging_Forensic_Exam_Notes.pptx"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });