Make a ppt on Personal Identity: Identification data, age determination, race, religion, sex, moles, and scars according to forensic medicine
mkdir -p /home/daytona/workspace/forensic-identity-ppt && ls /home/daytona/works…
~/forensic-identity-ppt/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Personal Identity - Forensic Medicine";
pres.author = "Forensic Medicine";
// ── PALETTE ──────────────────────────────────────────
const BG_DARK = "0D1B2A"; // deep navy
const BG_MID = "1B2A3B"; // medium navy
const ACCENT = "E8534A"; // crimson-red
const ACCENT2 = "F4A442"; // amber
const WHITE = "F0F4F8";
const LIGHT_GREY= "CBD5E1";
const TEAL = "2DD4BF";
const CARD_BG = "162233";
// ── HELPER: Add a decorative header bar ──────────────
function addHeaderBar(slide, title, subtitle) {
// Dark background fill
slide.background = { color: BG_DARK };
// Top accent stripe
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 0.08,
fill: { color: ACCENT }, line: { color: ACCENT }
});
// Left colored sidebar
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0.08, w: 0.12, h: 5.545,
fill: { color: ACCENT }, line: { color: ACCENT }
});
// Title
slide.addText(title, {
x: 0.25, y: 0.18, w: 9.5, h: 0.6,
fontSize: 26, bold: true, color: WHITE,
fontFace: "Calibri", margin: 0
});
if (subtitle) {
slide.addShape(pres.ShapeType.rect, {
x: 0.25, y: 0.84, w: 1.2, h: 0.05,
fill: { color: ACCENT2 }, line: { color: ACCENT2 }
});
slide.addText(subtitle, {
x: 0.25, y: 0.92, w: 9.5, h: 0.35,
fontSize: 13, color: ACCENT2,
fontFace: "Calibri", italic: true, margin: 0
});
}
}
// ── HELPER: Bullet card ──────────────────────────────
function addCard(slide, x, y, w, h, heading, bullets, headingColor) {
slide.addShape(pres.ShapeType.rect, {
x, y, w, h,
fill: { color: CARD_BG },
line: { color: ACCENT, pt: 1.5 },
shadow: { type: "outer", color: "000000", opacity: 0.35, blur: 6, offset: 3, angle: 45 }
});
slide.addText(heading, {
x: x + 0.12, y: y + 0.08, w: w - 0.24, h: 0.32,
fontSize: 12.5, bold: true, color: headingColor || ACCENT,
fontFace: "Calibri", margin: 0
});
// divider
slide.addShape(pres.ShapeType.rect, {
x: x + 0.12, y: y + 0.42, w: w - 0.24, h: 0.03,
fill: { color: ACCENT }, line: { color: ACCENT }
});
const items = bullets.map((b, i) => ({
text: b,
options: { bullet: { type: "bullet", indent: 10 }, breakLine: i < bullets.length - 1, fontSize: 10.5, color: LIGHT_GREY, fontFace: "Calibri" }
}));
slide.addText(items, {
x: x + 0.12, y: y + 0.5, w: w - 0.24, h: h - 0.6,
valign: "top", margin: 0, lineSpacingMultiple: 1.2
});
}
// ══════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: BG_DARK };
// Accent geometric shapes
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.1, fill: { color: ACCENT }, line: { color: ACCENT } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.525, w: 10, h: 0.1, fill: { color: ACCENT2 }, line: { color: ACCENT2 } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.1, w: 0.15, h: 5.425, fill: { color: ACCENT2 }, line: { color: ACCENT2 } });
s.addShape(pres.ShapeType.rect, { x: 9.85, y: 0.1, w: 0.15, h: 5.425, fill: { color: ACCENT }, line: { color: ACCENT } });
// Large decorative circle
s.addShape(pres.ShapeType.ellipse, {
x: 6.5, y: 0.5, w: 4, h: 4,
fill: { color: BG_MID }, line: { color: ACCENT, pt: 2 }
});
s.addText("PERSONAL IDENTITY", {
x: 0.5, y: 1.2, w: 6.2, h: 1.1,
fontSize: 40, bold: true, color: WHITE,
fontFace: "Calibri", charSpacing: 3, margin: 0
});
s.addText("IN FORENSIC MEDICINE", {
x: 0.5, y: 2.25, w: 6.2, h: 0.6,
fontSize: 22, bold: false, color: ACCENT2,
fontFace: "Calibri", charSpacing: 4, margin: 0
});
s.addShape(pres.ShapeType.rect, {
x: 0.5, y: 2.95, w: 3.5, h: 0.06,
fill: { color: ACCENT }, line: { color: ACCENT }
});
s.addText("Identification Data • Age • Race & Religion\nSex • Moles & Scars", {
x: 0.5, y: 3.1, w: 6, h: 0.8,
fontSize: 14, color: LIGHT_GREY, fontFace: "Calibri", margin: 0
});
s.addText("Based on: The Essentials of Forensic Medicine & Toxicology (36th Ed., 2026)\nParikh's Textbook of Medical Jurisprudence & Forensic Medicine\nPC Dikshit Textbook of Forensic Medicine & Toxicology", {
x: 0.5, y: 4.6, w: 9.2, h: 0.8,
fontSize: 9, color: "6B8099", fontFace: "Calibri", italic: true, margin: 0
});
// Forensic icon text inside circle
s.addText("🔬\nFORENSIC\nIDENTITY", {
x: 7.0, y: 1.2, w: 3, h: 2,
fontSize: 15, bold: true, color: ACCENT,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
}
// ══════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW: What is Personal Identity?
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "What is Personal Identity?", "Foundation of Forensic Investigation");
s.addText("Personal identity in forensic medicine refers to the establishment of an individual's unique characteristics — whether alive or dead — using a systematic combination of physical, biological, and circumstantial data.", {
x: 0.28, y: 1.4, w: 9.5, h: 0.8,
fontSize: 13, color: WHITE, fontFace: "Calibri",
italic: true, margin: 0, lineSpacingMultiple: 1.4
});
// Why it matters
s.addText("Why Identification Matters:", {
x: 0.28, y: 2.25, w: 9.5, h: 0.35,
fontSize: 14, bold: true, color: ACCENT2, fontFace: "Calibri", margin: 0
});
const reasons = [
"Establish corpus delicti — legal proof that a crime occurred",
"Identify criminal suspects via physical evidence (fingerprints, blood, hair, tools used)",
"Identify deceased in accidents, suicides, homicides, mass disasters",
"Trace victim's movements and background; identify enemies and associates",
"Required before sentencing in murder trials — proof of identity of the dead"
];
const rItems = reasons.map((r, i) => ({
text: r,
options: { bullet: { type: "bullet" }, breakLine: i < reasons.length - 1, fontSize: 12, color: LIGHT_GREY, fontFace: "Calibri" }
}));
s.addText(rItems, { x: 0.4, y: 2.65, w: 9.3, h: 1.8, valign: "top", margin: 0, lineSpacingMultiple: 1.35 });
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 4.55, w: 9.4, h: 0.7,
fill: { color: CARD_BG }, line: { color: ACCENT2, pt: 1.5 }
});
s.addText("Key Principle: No single feature is reliable alone — a COMBINATION of features is always used. Sex, age, and stature are primary characteristics.", {
x: 0.4, y: 4.62, w: 9.2, h: 0.55,
fontSize: 12, bold: true, color: ACCENT2, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
}
// ══════════════════════════════════════════════════════
// SLIDE 3 — IDENTIFICATION DATA (Overview)
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Identification Data", "The 14 Parameters of Personal Identification");
const items = [
["01", "Race & Religion", "Complexion, skull, hair, clothing, circumcision"],
["02", "Sex", "Primary/secondary sex characteristics, skeleton"],
["03", "Age", "Teeth, bones, skin, secondary sex chars, X-ray"],
["04", "Stature & Build", "Height, weight, general muscular development"],
["05", "Complexion & Features", "Facial characteristics, eye/hair color"],
["06", "External Peculiarities", "Moles, scars, tattoos, birthmarks, malformations"],
["07", "Anthropometry", "Bertillon system — 11 body measurements"],
["08", "Fingerprints", "Dactylography — loops, whorls, arches"],
["09", "Teeth / Dentition", "Dental formula, fillings, shape, wear patterns"],
["10", "Personal Effects", "Clothes, jewellery, pocket contents"],
["11", "Handwriting", "Style, slant, pressure patterns"],
["12", "Speech & Voice", "Accent, pitch, vocal characteristics"],
["13", "Gait & Mannerisms", "Tricks of manner, habits of movement"],
["14", "Memory & Education", "Language, knowledge base, recall patterns"],
];
const cols = 2;
const rows = 7;
const cardW = 4.5;
const cardH = 0.54;
const startX = [0.2, 5.0];
const startY = 1.35;
const gap = 0.57;
items.forEach((item, idx) => {
const col = idx < rows ? 0 : 1;
const row = idx < rows ? idx : idx - rows;
const x = startX[col];
const y = startY + row * gap;
s.addShape(pres.ShapeType.rect, {
x, y, w: cardW, h: cardH,
fill: { color: CARD_BG }, line: { color: idx < rows ? ACCENT : TEAL, pt: 1 }
});
s.addShape(pres.ShapeType.rect, {
x, y, w: 0.4, h: cardH,
fill: { color: idx < rows ? ACCENT : TEAL }, line: { color: idx < rows ? ACCENT : TEAL }
});
s.addText(item[0], {
x: x + 0.02, y: y + 0.05, w: 0.36, h: cardH - 0.1,
fontSize: 10, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
s.addText(item[1], {
x: x + 0.46, y: y + 0.04, w: cardW - 0.56, h: 0.24,
fontSize: 11, bold: true, color: WHITE,
fontFace: "Calibri", margin: 0
});
s.addText(item[2], {
x: x + 0.46, y: y + 0.26, w: cardW - 0.56, h: 0.22,
fontSize: 9, color: LIGHT_GREY, fontFace: "Calibri", italic: true, margin: 0
});
});
}
// ══════════════════════════════════════════════════════
// SLIDE 4 — RACE & RELIGION
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Determination of Race & Religion", "Skeletal, Physical & Cultural Markers");
// Race cards
const races = [
{
name: "CAUCASOID (White)",
color: ACCENT2,
pts: [
"Skull: high, rounded; orbits triangular",
"Nasal aperture: elongated, sill sharp-edged",
"Facial profile: orthognathous (straight)",
"Palate: triangular",
"Hair: wavy; cross-section oval/elliptical",
"Cephalic Index: >80 (brachycephalic)",
"Includes: Europeans, West Asians, Asian Indians"
]
},
{
name: "MONGOLOID (Yellow)",
color: TEAL,
pts: [
"Skull: square; prominent malar (cheek) area",
"Facial skeleton: flat appearance",
"Orbits: rounded; nasal aperture rounded",
"Palate: rounded; limbs shorter",
"Hair: straight, circular cross-section",
"Includes: East/SE Asians, Native Americans",
"Cephalic Index intermediate"
]
},
{
name: "NEGROID (Black)",
color: ACCENT,
pts: [
"Skull: narrow, elongated; prognathous face",
"Orbits: square; nasal aperture broad, guttered sill",
"Palate: rectangular; limbs longer",
"Hair: tightly curled; flat/ribbon cross-section",
"Cephalic Index: <75 (dolicocephalic)",
"Skull of Indian: Caucasian with some Negroid features",
"Skull determines race in ~85–90% cases"
]
}
];
races.forEach((race, i) => {
const x = 0.2 + i * 3.2;
s.addShape(pres.ShapeType.rect, {
x, y: 1.35, w: 3.05, h: 3.55,
fill: { color: CARD_BG }, line: { color: race.color, pt: 2 }
});
s.addShape(pres.ShapeType.rect, {
x, y: 1.35, w: 3.05, h: 0.42,
fill: { color: race.color }, line: { color: race.color }
});
s.addText(race.name, {
x: x + 0.1, y: 1.38, w: 2.85, h: 0.38,
fontSize: 11.5, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const bItems = race.pts.map((p, j) => ({
text: p, options: { bullet: { type: "bullet" }, breakLine: j < race.pts.length - 1, fontSize: 10, color: LIGHT_GREY, fontFace: "Calibri" }
}));
s.addText(bItems, { x: x + 0.12, y: 1.82, w: 2.82, h: 3.0, valign: "top", margin: 0, lineSpacingMultiple: 1.25 });
});
// Religion section
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 4.98, w: 9.6, h: 0.55,
fill: { color: BG_MID }, line: { color: ACCENT2, pt: 1 }
});
s.addText("Religion Indicators:", {
x: 0.35, y: 5.0, w: 1.8, h: 0.25,
fontSize: 11, bold: true, color: ACCENT2, fontFace: "Calibri", margin: 0
});
s.addText("Hindu ♂: sacred thread, caste mark, tuft of hair, pierced ear lobes | Hindu ♀: nose ring, ear rings, bangles | Muslim ♂: circumcised, beard | Sikh ♂: turban, kara (bracelet), kesh (uncut hair) | Christian: cross/baptism marks", {
x: 0.35, y: 5.22, w: 9.4, h: 0.28,
fontSize: 9.5, color: LIGHT_GREY, fontFace: "Calibri", margin: 0
});
}
// ══════════════════════════════════════════════════════
// SLIDE 5 — DETERMINATION OF SEX
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Determination of Sex", "Primary, Secondary & Skeletal Characteristics");
// Three columns
const cols = [
{
title: "Primary Sex Characteristics",
color: ACCENT,
items: [
"External genitalia — most definitive in living",
"Gonads: testes in males, ovaries in females",
"Internal ducts: vas deferens vs fallopian tubes",
"Nuclear sex (Barr body): present in females",
"Chromosomal sex: XX female, XY male",
"DNA analysis: definitive even from degraded tissue"
]
},
{
title: "Secondary Sex Characteristics",
color: TEAL,
items: [
"Breasts: developed in females after puberty",
"Body hair distribution pattern",
"Larynx: larger & voice deeper in males",
"Facial hair: beard & moustache in males",
"Pubic/axillary hair pattern differs",
"Muscle bulk: greater in males",
"Fat distribution: hips/thighs in females"
]
},
{
title: "Skeletal Sex Determination",
color: ACCENT2,
items: [
"PELVIS: most reliable bone (95% accuracy)",
"Female: wider, shallower, oval inlet, larger sciatic notch",
"Male: narrower, deeper, heart-shaped inlet",
"SKULL: females smaller, smoother; males larger, rugged",
"LONG BONES: males longer, heavier, larger epiphyses",
"STERNUM: male >15 cm; female <15 cm",
"Teeth: F-body (Barr body) in female pulp cells"
]
}
];
cols.forEach((col, i) => {
const x = 0.2 + i * 3.25;
s.addShape(pres.ShapeType.rect, {
x, y: 1.35, w: 3.1, h: 4.0,
fill: { color: CARD_BG }, line: { color: col.color, pt: 2 }
});
s.addShape(pres.ShapeType.rect, {
x, y: 1.35, w: 3.1, h: 0.42,
fill: { color: col.color }, line: { color: col.color }
});
s.addText(col.title, {
x: x + 0.08, y: 1.37, w: 2.95, h: 0.4,
fontSize: 11, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const bItems = col.items.map((p, j) => ({
text: p, options: { bullet: { type: "bullet" }, breakLine: j < col.items.length - 1, fontSize: 10.5, color: LIGHT_GREY, fontFace: "Calibri" }
}));
s.addText(bItems, { x: x + 0.12, y: 1.82, w: 2.87, h: 3.45, valign: "top", margin: 0, lineSpacingMultiple: 1.25 });
});
}
// ══════════════════════════════════════════════════════
// SLIDE 6 — AGE DETERMINATION (Part 1)
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Age Determination — Part 1", "Infancy, Childhood & Puberty");
s.addText("Age estimation uses teeth, bones, secondary sexual characteristics, and general physical development. A range is always given in certificates.", {
x: 0.28, y: 1.35, w: 9.5, h: 0.45,
fontSize: 12, color: LIGHT_GREY, fontFace: "Calibri", italic: true, margin: 0
});
// Dental age table
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 1.85, w: 4.5, h: 0.4,
fill: { color: ACCENT }, line: { color: ACCENT }
});
s.addText("DENTAL AGE ESTIMATION", {
x: 0.3, y: 1.9, w: 4.3, h: 0.3,
fontSize: 12, bold: true, color: BG_DARK, fontFace: "Calibri", align: "center", margin: 0
});
const dentalRows = [
["6–8 months", "Lower central incisors (1st deciduous)"],
["7–9 months", "Upper central incisors"],
["7–10 months", "Upper lateral incisors"],
["12–16 months", "1st deciduous molars"],
["16–20 months", "Canines"],
["20–24 months", "2nd deciduous molars (all 20 milk teeth)"],
["6–7 years", "1st permanent molars / lower central incisors"],
["7–8 years", "Upper central incisors (permanent)"],
["11–13 years", "2nd permanent molars"],
["17–25 years", "3rd molars (wisdom teeth)"],
];
dentalRows.forEach((row, i) => {
const y = 2.3 + i * 0.28;
const bgColor = i % 2 === 0 ? CARD_BG : BG_MID;
s.addShape(pres.ShapeType.rect, { x: 0.2, y, w: 4.5, h: 0.27, fill: { color: bgColor }, line: { color: "2A3D52", pt: 0.5 } });
s.addText(row[0], { x: 0.25, y: y + 0.03, w: 1.5, h: 0.22, fontSize: 9.5, bold: true, color: ACCENT2, fontFace: "Calibri", margin: 0 });
s.addText(row[1], { x: 1.78, y: y + 0.03, w: 2.9, h: 0.22, fontSize: 9.5, color: LIGHT_GREY, fontFace: "Calibri", margin: 0 });
});
// Skeletal age right panel
s.addShape(pres.ShapeType.rect, {
x: 5.0, y: 1.85, w: 4.8, h: 0.4,
fill: { color: TEAL }, line: { color: TEAL }
});
s.addText("SKELETAL & PHYSICAL AGE SIGNS", {
x: 5.1, y: 1.9, w: 4.6, h: 0.3,
fontSize: 12, bold: true, color: BG_DARK, fontFace: "Calibri", align: "center", margin: 0
});
const skelRows = [
["Birth", "No ossification centers in carpal bones"],
["1 year", "Capitatum & hamatum ossified"],
["3–4 years", "Triquetrum ossified"],
["5–6 years", "Lunate & greater multangular"],
["6–7 years", "Navicular (scaphoid) ossified"],
["8–10 years", "Lesser multangular & pisiform"],
["Puberty ♀", "9–14 yrs: breast bud, pubic hair, menarche"],
["Puberty ♂", "11–15 yrs: testicular enlargement, pubic hair"],
["18–25 yrs", "Epiphyses of long bones fuse"],
["21+ yrs", "Adult — body measurements stable"],
];
skelRows.forEach((row, i) => {
const y = 2.3 + i * 0.28;
const bgColor = i % 2 === 0 ? CARD_BG : BG_MID;
s.addShape(pres.ShapeType.rect, { x: 5.0, y, w: 4.8, h: 0.27, fill: { color: bgColor }, line: { color: "2A3D52", pt: 0.5 } });
s.addText(row[0], { x: 5.06, y: y + 0.03, w: 1.5, h: 0.22, fontSize: 9.5, bold: true, color: TEAL, fontFace: "Calibri", margin: 0 });
s.addText(row[1], { x: 6.6, y: y + 0.03, w: 3.15, h: 0.22, fontSize: 9.5, color: LIGHT_GREY, fontFace: "Calibri", margin: 0 });
});
}
// ══════════════════════════════════════════════════════
// SLIDE 7 — AGE DETERMINATION (Part 2 — Adults)
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Age Determination — Part 2", "Adults, Elderly & Certificate Format");
// Age sign cards for adults
const ageCards = [
{
heading: "20–30 Years",
color: TEAL,
items: [
"All permanent teeth present; wisdom teeth erupting",
"Skin smooth and firm, no significant wrinkles",
"Hair: full, no greying",
"Epiphyses fully fused by 25 years",
"Sutures of skull partially open"
]
},
{
heading: "30–45 Years",
color: ACCENT2,
items: [
"Fine wrinkles around eyes and forehead",
"Greying may begin (especially temples)",
"Skin loses some elasticity",
"Sacroiliac joint may begin to fuse",
"Slight wear on molar cusps"
]
},
{
heading: "45–60 Years",
color: ACCENT,
items: [
"Skull sutures become obliterated",
"Arcus senilis (grey corneal ring) may appear",
"Pronounced greying or baldness",
"Deep wrinkles, skin laxity visible",
"Menopause in females (avg. 50 yrs)",
"Significant dental wear, root transparency"
]
},
{
heading: "60+ Years",
color: "9B59B6",
items: [
"Hair white/grey, sparse",
"Osteoporotic changes in skeleton",
"Loss of teeth common; alveolar resorption",
"Cartilage calcification (larynx, ribs)",
"Skin: thin, parchment-like, pigmented spots",
"Cataract formation; corneal arcus present"
]
}
];
ageCards.forEach((card, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.2 + col * 4.85;
const y = 1.35 + row * 2.0;
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.65, h: 1.85,
fill: { color: CARD_BG }, line: { color: card.color, pt: 1.5 }
});
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.65, h: 0.38,
fill: { color: card.color }, line: { color: card.color }
});
s.addText(card.heading, {
x: x + 0.1, y: y + 0.03, w: 4.45, h: 0.33,
fontSize: 13, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const bItems = card.items.map((p, j) => ({
text: p, options: { bullet: { type: "bullet" }, breakLine: j < card.items.length - 1, fontSize: 10, color: LIGHT_GREY, fontFace: "Calibri" }
}));
s.addText(bItems, { x: x + 0.12, y: y + 0.42, w: 4.4, h: 1.35, valign: "top", margin: 0, lineSpacingMultiple: 1.2 });
});
// Certificate format
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 5.1, w: 9.6, h: 0.48,
fill: { color: BG_MID }, line: { color: ACCENT2, pt: 1.5 }
});
s.addText("Age Certificate Wording: \"From general physical, dental and radiological examination of _______, I am of the opinion that the individual is aged between ___ and ___ years.\" (Always give a range, never an exact age)", {
x: 0.35, y: 5.12, w: 9.3, h: 0.44,
fontSize: 10, color: ACCENT2, fontFace: "Calibri",
align: "center", valign: "middle", italic: true, margin: 0
});
}
// ══════════════════════════════════════════════════════
// SLIDE 8 — MOLES, SCARS & EXTERNAL PECULIARITIES
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Moles, Scars & External Peculiarities", "Acquired & Congenital Identification Marks");
// Intro
s.addText("External peculiarities are among the most reliable long-lasting identification features — they persist throughout life and survive decomposition, burns (partially), and other postmortem changes.", {
x: 0.28, y: 1.35, w: 9.5, h: 0.5,
fontSize: 12, color: LIGHT_GREY, fontFace: "Calibri", italic: true, margin: 0
});
// Top cards
addCard(s, 0.2, 1.95, 4.65, 1.7, "MOLES (Naevi)", [
"Congenital pigmented spots on the skin",
"Flat (melanocytic) or raised (melanoma risk)",
"Recorded by: size, shape, color, exact location",
"Highly individualizing — virtually never identical",
"Used in identification of mutilated/decomposed bodies",
"Junctional naevi: flat, pigmented; Compound naevi: raised"
], ACCENT2);
addCard(s, 5.15, 1.95, 4.65, 1.7, "SCARS", [
"Result from injury, surgery, burns, or disease",
"Hypertrophic: raised above skin surface",
"Atrophic: depressed/sunken into skin",
"Keloid: overgrown scar beyond wound margins",
"Operation scars: reflect surgical history",
"Location, size, shape, and texture are recorded"
], ACCENT);
addCard(s, 0.2, 3.75, 4.65, 1.55, "TATTOOS", [
"Permanent marks using pigment injected into dermis",
"Survive decomposition due to deep dermal placement",
"Amateur vs professional: color, depth differ",
"Removal attempts leave characteristic scarring",
"Can reveal cultural background, gang affiliation, identity",
"Even burned bodies: wipe away charring to reveal tattoo"
], TEAL);
addCard(s, 5.15, 3.75, 4.65, 1.55, "BIRTHMARKS & MALFORMATIONS", [
"Birthmarks: port-wine stains, haemangiomas, cafe-au-lait",
"Congenital malformations: syndactyly, polydactyly",
"Extra digits or fused toes — unique to individual",
"Recorded carefully in medico-legal examinations",
"Occupation marks: calluses, pigmentation (miners, cobblers)",
"Circumcision: religious/cultural significance"
], ACCENT2);
}
// ══════════════════════════════════════════════════════
// SLIDE 9 — ANTHROPOMETRY & FINGERPRINTS
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Anthropometry & Fingerprints", "Scientific Measurement-Based Identity Systems");
// Bertillon
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 1.35, w: 4.6, h: 3.75,
fill: { color: CARD_BG }, line: { color: ACCENT2, pt: 2 }
});
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 1.35, w: 4.6, h: 0.42,
fill: { color: ACCENT2 }, line: { color: ACCENT2 }
});
s.addText("BERTILLON SYSTEM (Anthropometry)", {
x: 0.3, y: 1.38, w: 4.4, h: 0.38,
fontSize: 12, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const bertillon = [
"Principle: Body measurements don't change after age 21",
"No two persons share all measurements (11 measurements)",
"",
"Three data categories:",
"1. Descriptive data: color, shape, markings",
"2. Morphological data: shape of nose, ear, chin",
"3. Metric data: 11 key measurements:",
" • Height (standing & sitting)",
" • Arm span (outstretched)",
" • Head length & width",
" • Right ear length",
" • Left foot length",
" • Left middle & ring finger length",
" • Left forearm (cubit) length",
"",
"Limitation: Superseded by fingerprints (more reliable)"
];
const bItems = bertillon.map((p, j) => ({
text: p,
options: {
bullet: p.startsWith("•") || p.startsWith("1.") || p.startsWith("2.") || p.startsWith("3.") ? false : (p.trim() !== "" ? { type: "bullet" } : false),
breakLine: j < bertillon.length - 1,
fontSize: 10,
color: p.startsWith("Limitation") ? ACCENT : (p.includes("data:") || p.includes("Principle") || p.includes("No two") ? ACCENT2 : LIGHT_GREY),
fontFace: "Calibri",
bold: p.includes("data:") || p.includes("Principle") || p.includes("categories")
}
}));
s.addText(bItems, { x: 0.32, y: 1.82, w: 4.37, h: 3.2, valign: "top", margin: 0, lineSpacingMultiple: 1.2 });
// Fingerprints
s.addShape(pres.ShapeType.rect, {
x: 5.0, y: 1.35, w: 4.8, h: 3.75,
fill: { color: CARD_BG }, line: { color: ACCENT, pt: 2 }
});
s.addShape(pres.ShapeType.rect, {
x: 5.0, y: 1.35, w: 4.8, h: 0.42,
fill: { color: ACCENT }, line: { color: ACCENT }
});
s.addText("FINGERPRINTS (Dactylography)", {
x: 5.1, y: 1.38, w: 4.6, h: 0.38,
fontSize: 12, bold: true, color: BG_DARK,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const fp = [
"Principle (Galton & Henry, 1892):",
"• Uniqueness: no two persons have identical prints",
"• Persistence: form at 3rd fetal month, unchanged for life",
"• Infallibility: unaffected by disease (except leprosy/burns)",
"",
"Three main pattern types:",
"LOOPS (most common ~65–70%):",
" Radial loop, Ulnar loop",
"WHORLS (~25–30%):",
" Plain, central pocket, twin loop, accidental",
"ARCHES (~5%):",
" Plain arch, Tented arch",
"",
"Poroscopy: Identification by sweat pores on ridges",
"Cheiloscopy: Lip print identification",
"Palatoscopy: Palatal ridge patterns (fire victims)"
];
const fpItems = fp.map((p, j) => ({
text: p,
options: {
bullet: false,
breakLine: j < fp.length - 1,
fontSize: 10,
color: p.includes("LOOPS") || p.includes("WHORLS") || p.includes("ARCHES") ? ACCENT2 :
p.includes("Principle") || p.includes("Three") ? WHITE :
p.includes("Poroscopy") || p.includes("Cheiloscopy") || p.includes("Palatoscopy") ? TEAL : LIGHT_GREY,
fontFace: "Calibri",
bold: p.includes("LOOPS") || p.includes("WHORLS") || p.includes("ARCHES") || p.includes("Principle") || p.includes("Three")
}
}));
s.addText(fpItems, { x: 5.1, y: 1.82, w: 4.6, h: 3.2, valign: "top", margin: 0, lineSpacingMultiple: 1.2 });
// Bottom note
s.addShape(pres.ShapeType.rect, {
x: 0.2, y: 5.15, w: 9.6, h: 0.42,
fill: { color: BG_MID }, line: { color: TEAL, pt: 1 }
});
s.addText("DNA Fingerprinting: Now gold standard — more accurate than both systems. Can be extracted from hair roots, blood, semen, saliva, bones.", {
x: 0.4, y: 5.18, w: 9.2, h: 0.36,
fontSize: 11, bold: true, color: TEAL, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
}
// ══════════════════════════════════════════════════════
// SLIDE 10 — TEETH & OTHER METHODS
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Teeth, Stature & Other Identification Methods", "Dental Records, Height & Personal Effects");
addCard(s, 0.2, 1.35, 4.6, 2.35, "DENTAL IDENTIFICATION", [
"No two dentitions are identical — highly individual",
"Critical in: aviation accidents, mass disasters, fire victims",
"Compare with antemortem dental X-rays & records",
"Dental formula (adult): 2-1-2-3 = 32 teeth",
"Age from root transparency (increases after 30 yrs)",
"Sex from teeth: males larger; females have Barr body in pulp",
"Race: primitive races — 3rd molar largest; civilized — 1st molar largest",
"Bridges, fillings, crowns = unique identifying features"
], ACCENT2);
addCard(s, 5.0, 1.35, 4.8, 2.35, "STATURE (HEIGHT) ESTIMATION", [
"Living: measured directly (standing height)",
"From long bones (Pearson's regression formulae):",
" Femur × 2.238 + 69.089 (male)",
" Tibia: more reliable than femur",
"Height from vertebral column: multiply by 1.3",
"Arm span ≈ height in adults",
"Height from foot length: multiply by 6.876 (males)",
"Stature varies: morning ht > evening ht by ~2 cm"
], TEAL);
addCard(s, 0.2, 3.8, 4.6, 1.75, "PERSONAL EFFECTS", [
"Clothing: size, style, laundry marks, labels, name tags",
"Jewellery: rings, watches, bracelets with engraved markings",
"Wallets, IDs, letters, photographs",
"Keys: may provide access to home/vehicle of missing person",
"Spectacles: prescription can identify wearer",
"Medical devices: pacemakers, prostheses have serial numbers"
], ACCENT);
addCard(s, 5.0, 3.8, 4.8, 1.75, "HANDWRITING & OTHER METHODS", [
"Handwriting: style, slant, pen pressure — examined by graphologist",
"Voice: spectrogram analysis (voiceprint)",
"Gait & mannerisms: used in CCTV analysis",
"Superimposition: skull over photograph method",
"Facial reconstruction: forensic art over skull features",
"Blood groups: ABO, Rh — useful in paternity disputes"
], "9B59B6");
}
// ══════════════════════════════════════════════════════
// SLIDE 11 — IDENTIFICATION OF THE DEAD
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
addHeaderBar(s, "Identification of the Dead", "Postmortem & Mass Disaster Protocols");
s.addText("Identifying an unknown corpse requires a systematic stepwise approach, and becomes more challenging with advanced decomposition, burning, or mutilation.", {
x: 0.28, y: 1.35, w: 9.5, h: 0.45,
fontSize: 12, color: LIGHT_GREY, fontFace: "Calibri", italic: true, margin: 0
});
const steps = [
{ n: "01", title: "External Examination", desc: "Sex, approximate age, race, stature, nutritional state, postmortem changes, injuries", color: ACCENT },
{ n: "02", title: "Identification Marks", desc: "Scars, moles, tattoos, birthmarks, occupation marks, surgical scars, congenital defects", color: ACCENT2 },
{ n: "03", title: "Fingerprints", desc: "Obtain if skin intact; degloving technique for charred/decomposed hands", color: TEAL },
{ n: "04", title: "Dental Examination", desc: "Compare with antemortem records; dental X-ray; examine dentures for name/ID number", color: ACCENT },
{ n: "05", title: "Clothing & Personal Effects", desc: "Describe each garment: size, color, laundry marks, labels; record jewellery inscriptions", color: ACCENT2 },
{ n: "06", title: "Skeletal Analysis", desc: "Race, sex, age from skull and long bones; bone pathology; healed fractures", color: TEAL },
{ n: "07", title: "DNA Analysis", desc: "Blood, hair root, bone marrow — compare against family members' DNA profiles", color: ACCENT },
{ n: "08", title: "Photography & Documentation", desc: "Full body → mid-range → close-up of injuries; photographs at right angles with scale", color: ACCENT2 },
];
steps.forEach((step, i) => {
const col = i < 4 ? 0 : 1;
const row = i < 4 ? i : i - 4;
const x = 0.2 + col * 5.0;
const y = 1.88 + row * 0.82;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.7, h: 0.74, fill: { color: CARD_BG }, line: { color: step.color, pt: 1 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 0.46, h: 0.74, fill: { color: step.color }, line: { color: step.color } });
s.addText(step.n, { x: x + 0.02, y: y + 0.18, w: 0.42, h: 0.38, fontSize: 13, bold: true, color: BG_DARK, fontFace: "Calibri", align: "center", margin: 0 });
s.addText(step.title, { x: x + 0.54, y: y + 0.04, w: 4.1, h: 0.26, fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri", margin: 0 });
s.addText(step.desc, { x: x + 0.54, y: y + 0.3, w: 4.1, h: 0.38, fontSize: 9.5, color: LIGHT_GREY, fontFace: "Calibri", margin: 0 });
});
}
// ══════════════════════════════════════════════════════
// SLIDE 12 — SUMMARY / KEY POINTS
// ══════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: BG_DARK };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: ACCENT }, line: { color: ACCENT } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.545, w: 10, h: 0.08, fill: { color: ACCENT2 }, line: { color: ACCENT2 } });
s.addText("KEY TAKEAWAYS", {
x: 0.4, y: 0.2, w: 9.2, h: 0.6,
fontSize: 28, bold: true, color: WHITE,
fontFace: "Calibri", charSpacing: 4, align: "center", margin: 0
});
s.addShape(pres.ShapeType.rect, {
x: 3.5, y: 0.85, w: 3, h: 0.05,
fill: { color: ACCENT }, line: { color: ACCENT }
});
s.addText("Personal Identity in Forensic Medicine", {
x: 0.4, y: 0.92, w: 9.2, h: 0.3,
fontSize: 13, color: ACCENT2, fontFace: "Calibri", align: "center", italic: true, margin: 0
});
const takeaways = [
["No single feature alone", "Always combine multiple identification parameters — sex, age, and stature are PRIMARY"],
["Race from skeleton", "Skull & cephalic index determine race in ~85–90% of cases; hair cross-section also key"],
["Age = range, not exact", "Certificate must state a range; combine dental, skeletal & secondary sex characteristics"],
["Sex — pelvis is best", "Pelvis gives 95% accuracy; nuclear sex (Barr body) from pulp cells in teeth is also reliable"],
["Moles & scars persist", "Survive decomposition; recorded by size, site, shape — tattoos survive fire (reveal by wiping)"],
["Fingerprints = unique", "Never identical, never change — superseded only by DNA analysis for absolute certainty"],
["Dentition is critical", "No two dentitions alike; compare antemortem records; useful in mass disasters & fire deaths"],
["DNA is gold standard", "From hair root, blood, bone marrow; comparison against known family members' profiles"],
];
takeaways.forEach(([title, desc], i) => {
const col = i < 4 ? 0 : 1;
const row = i < 4 ? i : i - 4;
const x = 0.2 + col * 5.0;
const y = 1.3 + row * 0.98;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.7, h: 0.88, fill: { color: CARD_BG }, line: { color: i % 2 === 0 ? ACCENT : TEAL, pt: 1 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 0.08, h: 0.88, fill: { color: i % 2 === 0 ? ACCENT : TEAL }, line: { color: i % 2 === 0 ? ACCENT : TEAL } });
s.addText(title, { x: x + 0.18, y: y + 0.06, w: 4.4, h: 0.28, fontSize: 11.5, bold: true, color: i % 2 === 0 ? ACCENT2 : TEAL, fontFace: "Calibri", margin: 0 });
s.addText(desc, { x: x + 0.18, y: y + 0.34, w: 4.4, h: 0.46, fontSize: 10, color: LIGHT_GREY, fontFace: "Calibri", margin: 0, lineSpacingMultiple: 1.2 });
});
}
// ══════════════════════════════════════════════════════
// WRITE
// ══════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/forensic-identity-ppt/Personal_Identity_Forensic_Medicine.pptx" })
.then(() => console.log("✅ PPT created successfully"))
.catch(err => console.error("❌ Error:", err));
cd /home/daytona/workspace/forensic-identity-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/forensic-identity-ppt/Personal_Identity_Forensic_…
Personal Identity Forensic Medicine
Presentation · PPTX
| Slide | Topic |
|---|---|
| 1 | Title Slide - geometric design with topic overview |
| 2 | What is Personal Identity? - definition, importance, corpus delicti |
| 3 | Identification Data - all 14 parameters (numbered cards, two columns) |
| 4 | Race & Religion - Caucasoid / Mongoloid / Negroid skull features + cephalic index; religion indicators (Hindu, Muslim, Sikh, Christian) |
| 5 | Sex Determination - primary, secondary, and skeletal (pelvis, skull, long bones, Barr body) |
| 6 | Age Determination Part 1 - dental eruption timeline + skeletal ossification table |
| 7 | Age Determination Part 2 - adult age signs (20s → 60+) + certificate wording format |
| 8 | Moles, Scars & Peculiarities - moles/naevi, scars (hypertrophic/keloid), tattoos, birthmarks, occupation marks |
| 9 | Anthropometry & Fingerprints - Bertillon system (11 measurements) + dactylography (loops/whorls/arches) + DNA note |
| 10 | Teeth, Stature & Other Methods - dental ID, Pearson's regression for height, personal effects, handwriting |
| 11 | Identification of the Dead - 8-step postmortem protocol including mass disaster management |
| 12 | Key Takeaways - 8 summary cards covering every major principle |