As a intern doctor make a presentation on specifically 3rd stage management of Labour with elaborate video of the 3rd stage management of labour and a very interesting thank you slide at the end.
3rd stage of labour management active management AMTSL YouTube video
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/third-stage-labour-ppt
~/third-stage-labour-ppt/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Intern Doctor";
pres.title = "Management of the Third Stage of Labour";
// ─── COLOUR PALETTE ──────────────────────────────────────────────────────────
const DARK_BLUE = "0D2B55"; // dominant dark background
const MID_BLUE = "1A4A8A"; // secondary panels
const ACCENT_TEAL = "00C2A0"; // accent / highlight
const ACCENT_GOLD = "F4C430"; // accent numbers / icons
const WHITE = "FFFFFF";
const LIGHT_GRAY = "E8F0F7";
const TEXT_DARK = "1A1A2E";
const TEXT_LIGHT = "CBD8E8";
// ─── HELPERS ─────────────────────────────────────────────────────────────────
function addDarkSlide(pres) {
const slide = pres.addSlide();
slide.background = { color: DARK_BLUE };
return slide;
}
function addLightSlide(pres) {
const slide = pres.addSlide();
slide.background = { color: LIGHT_GRAY };
return slide;
}
function accentBar(slide, color = ACCENT_TEAL) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color } });
}
function sectionBadge(slide, text) {
slide.addShape(pres.ShapeType.roundRect, {
x: 0.3, y: 0.15, w: 2.2, h: 0.38, fill: { color: ACCENT_TEAL }, rectRadius: 0.08,
line: { color: ACCENT_TEAL }
});
slide.addText(text, {
x: 0.3, y: 0.15, w: 2.2, h: 0.38,
fontSize: 9, bold: true, color: DARK_BLUE, align: "center", valign: "middle", margin: 0
});
}
function slideNumber(slide, num) {
slide.addText(`${num}`, {
x: 9.4, y: 5.2, w: 0.5, h: 0.3,
fontSize: 9, color: TEXT_LIGHT, align: "right"
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
// Left bold strip
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: ACCENT_TEAL } });
// Decorative circles
slide.addShape(pres.ShapeType.ellipse, { x: 7.8, y: -0.5, w: 3.5, h: 3.5, fill: { color: MID_BLUE }, line: { color: MID_BLUE } });
slide.addShape(pres.ShapeType.ellipse, { x: 8.4, y: 3.5, w: 2.2, h: 2.2, fill: { color: "0A1E40" }, line: { color: "0A1E40" } });
slide.addShape(pres.ShapeType.ellipse, { x: 6.5, y: 4.0, w: 1.2, h: 1.2, fill: { color: ACCENT_TEAL }, line: { color: ACCENT_TEAL } });
// Subtitle tag
slide.addShape(pres.ShapeType.roundRect, {
x: 0.5, y: 0.55, w: 3.8, h: 0.42, fill: { color: ACCENT_TEAL }, rectRadius: 0.08, line: { color: ACCENT_TEAL }
});
slide.addText("OBSTETRICS | INTERN PRESENTATION", {
x: 0.5, y: 0.55, w: 3.8, h: 0.42,
fontSize: 9.5, bold: true, color: DARK_BLUE, align: "center", valign: "middle", margin: 0, charSpacing: 1.5
});
// Main title
slide.addText("Management of the", {
x: 0.45, y: 1.15, w: 7.5, h: 0.6,
fontSize: 20, color: TEXT_LIGHT, bold: false
});
slide.addText("3rd Stage", {
x: 0.45, y: 1.65, w: 7.5, h: 1.1,
fontSize: 58, color: WHITE, bold: true, charSpacing: -1
});
slide.addText("of Labour", {
x: 0.45, y: 2.65, w: 7.5, h: 0.75,
fontSize: 34, color: ACCENT_TEAL, bold: true
});
// Divider
slide.addShape(pres.ShapeType.line, { x: 0.45, y: 3.5, w: 5.5, h: 0, line: { color: ACCENT_GOLD, width: 2 } });
// Sub-info
slide.addText("From Birth of Baby to Delivery of Placenta & Membranes", {
x: 0.45, y: 3.65, w: 7.2, h: 0.4,
fontSize: 12, color: TEXT_LIGHT, italic: true
});
slide.addText("Presented by: Intern Doctor | Department of Obstetrics & Gynaecology", {
x: 0.45, y: 5.0, w: 8, h: 0.35,
fontSize: 9, color: TEXT_LIGHT
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW / AGENDA
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
sectionBadge(slide, "AGENDA");
slideNumber(slide, 2);
slide.addText("What We Will Cover", {
x: 0.4, y: 0.62, w: 9, h: 0.65,
fontSize: 28, bold: true, color: WHITE
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 3.5, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
const items = [
["01", "Definition & Duration of the 3rd Stage"],
["02", "Signs of Placental Separation"],
["03", "Active Management of the 3rd Stage (AMTSL)"],
["04", "Uterotonic Drugs – Oxytocin & Alternatives"],
["05", "Controlled Cord Traction (CCT)"],
["06", "Uterine Massage"],
["07", "Complications – Postpartum Haemorrhage (PPH)"],
["08", "Video Summary – AMTSL in Practice"],
];
items.forEach(([num, label], i) => {
const row = Math.floor(i / 2);
const col = i % 2;
const x = col === 0 ? 0.4 : 5.2;
const y = 1.5 + row * 0.88;
slide.addShape(pres.ShapeType.rect, { x, y, w: 0.42, h: 0.52, fill: { color: ACCENT_TEAL }, line: { color: ACCENT_TEAL } });
slide.addText(num, { x, y, w: 0.42, h: 0.52, fontSize: 10, bold: true, color: DARK_BLUE, align: "center", valign: "middle", margin: 0 });
slide.addText(label, { x: x + 0.5, y: y + 0.04, w: 4.1, h: 0.45, fontSize: 11, color: WHITE, valign: "middle" });
});
accentBar(slide);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — DEFINITION
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addLightSlide(pres);
sectionBadge(slide, "DEFINITION");
slideNumber(slide, 3);
slide.addText("What Is the 3rd Stage of Labour?", {
x: 0.4, y: 0.62, w: 9, h: 0.65,
fontSize: 26, bold: true, color: TEXT_DARK
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 4, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
// Big definition box
slide.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.45, w: 9.2, h: 1.05, fill: { color: MID_BLUE }, line: { color: MID_BLUE } });
slide.addText("The period from delivery of the baby to the complete expulsion of the placenta and membranes.", {
x: 0.45, y: 1.48, w: 9.1, h: 0.99,
fontSize: 14.5, color: WHITE, bold: true, italic: true, valign: "middle", align: "center"
});
// Duration cards
const cards = [
{ label: "Normal Duration", val: "5 – 30 min", color: ACCENT_TEAL },
{ label: "Prolonged (3rd stage)", val: "> 30 min", color: "E05C00" },
{ label: "Rare — Pathological", val: "> 60 min", color: "B00020" },
];
cards.forEach((c, i) => {
const x = 0.4 + i * 3.1;
slide.addShape(pres.ShapeType.roundRect, { x, y: 2.72, w: 2.9, h: 1.25, fill: { color: c.color }, rectRadius: 0.12, line: { color: c.color } });
slide.addText(c.label, { x, y: 2.76, w: 2.9, h: 0.5, fontSize: 10.5, bold: true, color: WHITE, align: "center", valign: "middle" });
slide.addText(c.val, { x, y: 3.2, w: 2.9, h: 0.7, fontSize: 18, bold: true, color: WHITE, align: "center", valign: "middle" });
});
// Two mechanisms
slide.addText("Two Mechanisms of Placental Separation:", {
x: 0.4, y: 4.1, w: 9, h: 0.35, fontSize: 12, bold: true, color: TEXT_DARK
});
slide.addText([
{ text: "Schultze mechanism", options: { bold: true, color: MID_BLUE } },
{ text: " — Foetal surface presents first (most common, ~80%)", options: { color: TEXT_DARK } },
], { x: 0.4, y: 4.45, w: 9, h: 0.35, fontSize: 11 });
slide.addText([
{ text: "Matthews Duncan mechanism", options: { bold: true, color: "E05C00" } },
{ text: " — Maternal surface / edge first (~20%)", options: { color: TEXT_DARK } },
], { x: 0.4, y: 4.82, w: 9, h: 0.35, fontSize: 11 });
accentBar(slide, MID_BLUE);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — SIGNS OF PLACENTAL SEPARATION
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
sectionBadge(slide, "ASSESSMENT");
slideNumber(slide, 4);
slide.addText("Signs of Placental Separation", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 28, bold: true, color: WHITE
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 4.5, h: 0, line: { color: ACCENT_GOLD, width: 2.5 } });
const signs = [
{ icon: "🔴", title: "Gush of Blood", desc: "Sudden gush of blood as placenta separates from uterine wall" },
{ icon: "🔵", title: "Cord Lengthening", desc: "Umbilical cord protrudes further out of the vaginal introitus" },
{ icon: "🟢", title: "Uterine Globularity", desc: "Uterus becomes globular, firm, and contracted (fundal rise)" },
{ icon: "🟡", title: "Fundal Rise", desc: "Fundus rises to the level of the umbilicus as placenta enters lower segment" },
];
signs.forEach((s, i) => {
const x = i < 2 ? 0.4 : 5.2;
const y = i < 2 ? 1.55 + i * 1.5 : 1.55 + (i - 2) * 1.5;
slide.addShape(pres.ShapeType.roundRect, {
x, y, w: 4.5, h: 1.3, fill: { color: MID_BLUE }, rectRadius: 0.15, line: { color: "1D5599" }
});
slide.addText(s.icon, { x: x + 0.15, y: y + 0.1, w: 0.65, h: 0.65, fontSize: 26, align: "center" });
slide.addText(s.title, { x: x + 0.85, y: y + 0.1, w: 3.5, h: 0.42, fontSize: 13, bold: true, color: ACCENT_TEAL });
slide.addText(s.desc, { x: x + 0.85, y: y + 0.52, w: 3.5, h: 0.65, fontSize: 10.5, color: TEXT_LIGHT, valign: "top" });
});
accentBar(slide, ACCENT_GOLD);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — ACTIVE MANAGEMENT (AMTSL) OVERVIEW
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addLightSlide(pres);
sectionBadge(slide, "AMTSL");
slideNumber(slide, 5);
slide.addText("Active Management of the 3rd Stage (AMTSL)", {
x: 0.4, y: 0.62, w: 9.2, h: 0.65, fontSize: 22, bold: true, color: TEXT_DARK
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 6, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
// Intro banner
slide.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.42, w: 9.2, h: 0.78, fill: { color: DARK_BLUE }, line: { color: DARK_BLUE } });
slide.addText("AMTSL reduces PPH risk by up to 60% and is the WHO-recommended standard of care", {
x: 0.4, y: 1.42, w: 9.2, h: 0.78, fontSize: 13, color: WHITE, bold: true, align: "center", valign: "middle"
});
// 3 pillars
const pillars = [
{ num: "1", title: "Uterotonic Drug", sub: "Oxytocin 10 IU IM\nWithin 1 min of birth", color: ACCENT_TEAL },
{ num: "2", title: "Controlled Cord\nTraction (CCT)", sub: "Brandt-Andrews method\nOnly after separation signs", color: MID_BLUE },
{ num: "3", title: "Uterine Massage", sub: "After placenta delivery\nBimanual if needed for atony", color: "6B4EAE" },
];
pillars.forEach((p, i) => {
const x = 0.4 + i * 3.1;
// Top coloured number block
slide.addShape(pres.ShapeType.rect, { x, y: 2.38, w: 2.85, h: 0.62, fill: { color: p.color }, line: { color: p.color } });
slide.addText(`STEP ${p.num}`, { x, y: 2.38, w: 2.85, h: 0.62, fontSize: 14, bold: true, color: WHITE, align: "center", valign: "middle" });
// Content block
slide.addShape(pres.ShapeType.rect, { x, y: 3.0, w: 2.85, h: 1.62, fill: { color: WHITE }, line: { color: p.color, width: 1.5 } });
slide.addText(p.title, { x: x + 0.1, y: 3.08, w: 2.65, h: 0.56, fontSize: 12.5, bold: true, color: p.color, align: "center" });
slide.addShape(pres.ShapeType.line, { x: x + 0.2, y: 3.64, w: 2.45, h: 0, line: { color: LIGHT_GRAY, width: 1 } });
slide.addText(p.sub, { x: x + 0.1, y: 3.7, w: 2.65, h: 0.85, fontSize: 10, color: TEXT_DARK, align: "center", valign: "middle" });
});
accentBar(slide);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — UTEROTONICS
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
sectionBadge(slide, "PHARMACOLOGY");
slideNumber(slide, 6);
slide.addText("Uterotonic Drugs", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 28, bold: true, color: WHITE
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 3, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
const drugs = [
{
name: "Oxytocin", color: ACCENT_TEAL, badge: "FIRST LINE",
rows: [
["Dose", "10 IU IM (or 20 IU in 1L NS IV infusion)"],
["Timing", "Within 1 min of delivery of anterior shoulder"],
["Action", "Stimulates myometrial contraction"],
["Note", "No absolute C/I; bolus IV can cause hypotension"],
]
},
{
name: "Ergometrine / Methylergometrine", color: ACCENT_GOLD, badge: "SECOND LINE",
rows: [
["Dose", "0.2 mg IM"],
["Action", "Sustained uterine contraction"],
["C/I", "Hypertension, pre-eclampsia, heart disease"],
["Note", "Never give IV — risk of severe HTN & CNS spasm"],
]
},
{
name: "Carboprost (15-methyl PGF2α)", color: "E05C00", badge: "REFRACTORY PPH",
rows: [
["Dose", "250 μg IM, repeat every 15-90 min (max 8 doses)"],
["Action", "Potent uterotonic prostaglandin"],
["C/I", "Asthma, cardiovascular disease"],
["Note", "Use if oxytocin + ergometrine fail"],
]
},
];
drugs.forEach((d, i) => {
const x = i < 2 ? 0.35 + i * 4.85 : 0.35;
const y = i < 2 ? 1.48 : 3.68;
const w = i < 2 ? 4.6 : 9.25;
slide.addShape(pres.ShapeType.rect, { x, y, w, h: i < 2 ? 1.98 : 1.65, fill: { color: MID_BLUE }, line: { color: d.color, width: 1.5 } });
slide.addShape(pres.ShapeType.rect, { x, y, w: i < 2 ? 1.5 : 2.2, h: 0.38, fill: { color: d.color }, line: { color: d.color } });
slide.addText(d.badge, { x, y, w: i < 2 ? 1.5 : 2.2, h: 0.38, fontSize: 8, bold: true, color: DARK_BLUE, align: "center", valign: "middle", margin: 0 });
slide.addText(d.name, { x: x + (i < 2 ? 1.6 : 2.3), y, w: w - (i < 2 ? 1.65 : 2.35), h: 0.38, fontSize: 11, bold: true, color: WHITE, valign: "middle" });
d.rows.forEach((r, ri) => {
const ry = y + 0.45 + ri * 0.35;
slide.addText(`${r[0]}:`, { x: x + 0.12, y: ry, w: i < 2 ? 0.7 : 1.0, h: 0.32, fontSize: 9, bold: true, color: d.color });
slide.addText(r[1], { x: x + (i < 2 ? 0.85 : 1.15), y: ry, w: w - (i < 2 ? 1.0 : 1.3), h: 0.32, fontSize: 9, color: TEXT_LIGHT });
});
});
accentBar(slide);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — CCT (Controlled Cord Traction)
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addLightSlide(pres);
sectionBadge(slide, "PROCEDURE");
slideNumber(slide, 7);
slide.addText("Controlled Cord Traction (CCT)", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 27, bold: true, color: TEXT_DARK
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 5, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
slide.addText("Also known as the Brandt-Andrews Method", {
x: 0.4, y: 1.35, w: 9, h: 0.38, fontSize: 11.5, color: MID_BLUE, italic: true
});
const steps = [
"Wait for signs of placental separation before applying traction.",
"Clamp the cord close to the perineum, hold it in one hand.",
"Place the other hand suprapubically — guard the uterus in the cephalad direction (counter-traction).",
"Apply steady, gentle downward traction on the cord during a contraction.",
"If placenta does not descend in 30–40 s, STOP — wait for next contraction.",
"As placenta reaches introitus, lift it upward and out. Twist gently to deliver membranes.",
"NEVER apply forceful traction — risk of cord avulsion or uterine inversion.",
];
steps.forEach((s, i) => {
const y = 1.78 + i * 0.51;
slide.addShape(pres.ShapeType.ellipse, { x: 0.38, y: y + 0.05, w: 0.36, h: 0.36,
fill: { color: i === 6 ? "B00020" : ACCENT_TEAL }, line: { color: i === 6 ? "B00020" : ACCENT_TEAL } });
slide.addText(`${i + 1}`, { x: 0.38, y: y + 0.05, w: 0.36, h: 0.36, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
slide.addText(s, {
x: 0.85, y, w: 8.75, h: 0.46, fontSize: i === 6 ? 11 : 10.5,
color: i === 6 ? "B00020" : TEXT_DARK, bold: i === 6, valign: "middle"
});
});
accentBar(slide);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — UTERINE MASSAGE & EXAMINATION
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
sectionBadge(slide, "POST-DELIVERY");
slideNumber(slide, 8);
slide.addText("Uterine Massage & Post-Delivery Checks", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 24, bold: true, color: WHITE
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 6, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
// Left panel - massage
slide.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.45, w: 4.6, h: 3.55, fill: { color: MID_BLUE }, line: { color: ACCENT_TEAL, width: 1 } });
slide.addText("🖐 Uterine Massage", { x: 0.45, y: 1.55, w: 4.4, h: 0.5, fontSize: 14, bold: true, color: ACCENT_TEAL });
const massagePoints = [
"Fundal massage routinely after placenta delivery",
"Check uterus is 'well-contracted' (firm, midline, at umbilicus)",
"Bimanual compression if uterine atony suspected",
"Sustained massage for 15 sec; reassess frequently",
"Avoid over-vigorous massage — can cause atony paradoxically",
];
massagePoints.forEach((p, i) => {
slide.addText(`• ${p}`, { x: 0.5, y: 2.12 + i * 0.55, w: 4.3, h: 0.5, fontSize: 10, color: TEXT_LIGHT });
});
// Right panel - checks
slide.addShape(pres.ShapeType.rect, { x: 5.15, y: 1.45, w: 4.5, h: 3.55, fill: { color: MID_BLUE }, line: { color: ACCENT_GOLD, width: 1 } });
slide.addText("🔍 Post-Delivery Checks", { x: 5.25, y: 1.55, w: 4.3, h: 0.5, fontSize: 14, bold: true, color: ACCENT_GOLD });
const checkPoints = [
"Examine placenta for completeness",
"Check cord: 2 arteries + 1 vein",
"Inspect for accessory lobes or missing cotyledons",
"Inspect cervix & vagina for lacerations",
"Monitor vital signs & blood loss closely",
"Document blood loss (normal: ≤ 500 mL vaginal delivery)",
];
checkPoints.forEach((p, i) => {
slide.addText(`• ${p}`, { x: 5.25, y: 2.12 + i * 0.48, w: 4.3, h: 0.44, fontSize: 10, color: TEXT_LIGHT });
});
accentBar(slide, ACCENT_GOLD);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — COMPLICATIONS / PPH
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addLightSlide(pres);
sectionBadge(slide, "COMPLICATIONS");
slideNumber(slide, 9);
slide.addText("Complications: Postpartum Haemorrhage (PPH)", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 22, bold: true, color: TEXT_DARK
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 7, h: 0, line: { color: "B00020", width: 2.5 } });
// Definition box
slide.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.4, w: 9.2, h: 0.65, fill: { color: "B00020" }, line: { color: "B00020" } });
slide.addText("Primary PPH: Blood loss ≥ 500 mL within 24 h (vaginal) | ≥ 1000 mL (caesarean)", {
x: 0.4, y: 1.4, w: 9.2, h: 0.65, fontSize: 12, color: WHITE, bold: true, align: "center", valign: "middle"
});
// 4 Ts
const ts = [
{ t: "TONE", val: "Uterine Atony", pct: "70%", desc: "Most common cause. Uterus fails to contract.", color: "B00020" },
{ t: "TRAUMA", val: "Lacerations / Inversion", pct: "20%", desc: "Cervical, vaginal, perineal tears; uterine rupture.", color: "E05C00" },
{ t: "TISSUE", val: "Retained Products", pct: "10%", desc: "Retained placenta, membranes, or blood clots.", color: MID_BLUE },
{ t: "THROMBIN", val: "Coagulopathy", pct: "1%", desc: "DIC, pre-existing clotting disorders.", color: "6B4EAE" },
];
ts.forEach((item, i) => {
const x = 0.35 + i * 2.38;
slide.addShape(pres.ShapeType.rect, { x, y: 2.18, w: 2.2, h: 0.55, fill: { color: item.color }, line: { color: item.color } });
slide.addText(`"T" – ${item.t}`, { x, y: 2.18, w: 2.2, h: 0.55, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle" });
slide.addShape(pres.ShapeType.rect, { x, y: 2.73, w: 2.2, h: 2.1, fill: { color: WHITE }, line: { color: item.color, width: 1.5 } });
slide.addText(item.pct, { x, y: 2.78, w: 2.2, h: 0.55, fontSize: 22, bold: true, color: item.color, align: "center" });
slide.addText(item.val, { x: x + 0.1, y: 3.32, w: 2.0, h: 0.42, fontSize: 10.5, bold: true, color: TEXT_DARK, align: "center" });
slide.addText(item.desc, { x: x + 0.08, y: 3.74, w: 2.05, h: 0.98, fontSize: 9, color: "444466", align: "center", valign: "top" });
});
accentBar(slide, "B00020");
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — PPH Management Algorithm
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
sectionBadge(slide, "MANAGEMENT");
slideNumber(slide, 10);
slide.addText("PPH Management: Step-Up Approach", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 26, bold: true, color: WHITE
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 4.5, h: 0, line: { color: "B00020", width: 2.5 } });
const steps = [
{ level: "STEP 1", text: "Call for help | 2× large bore IV access | FBC, crossmatch, coagulation screen | Crystalloid resuscitation", color: MID_BLUE },
{ level: "STEP 2", text: "Uterine massage | Oxytocin 20-40 IU IV infusion | Ergometrine 0.2 mg IM | Bladder catheterisation", color: "5B8DB8" },
{ level: "STEP 3", text: "Carboprost 250 µg IM ± intrauterine | Misoprostol 800–1000 µg rectal | Tranexamic acid 1 g IV", color: "E05C00" },
{ level: "STEP 4", text: "Examine under anaesthesia | Repair lacerations | Bakri balloon / uterine packing | Blood transfusion", color: "C15500" },
{ level: "STEP 5", text: "Surgical: B-Lynch suture | Uterine artery ligation | Interventional radiology (embolisation) | Hysterectomy (last resort)", color: "B00020" },
];
steps.forEach((s, i) => {
const y = 1.5 + i * 0.76;
slide.addShape(pres.ShapeType.rect, { x: 0.35, y, w: 1.3, h: 0.6, fill: { color: s.color }, line: { color: s.color } });
slide.addText(s.level, { x: 0.35, y, w: 1.3, h: 0.6, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
slide.addShape(pres.ShapeType.rect, { x: 1.7, y, w: 7.95, h: 0.6, fill: { color: "132D58" }, line: { color: s.color, width: 0.75 } });
slide.addText(s.text, { x: 1.82, y: y + 0.04, w: 7.7, h: 0.52, fontSize: 9.5, color: TEXT_LIGHT, valign: "middle" });
if (i < steps.length - 1) {
slide.addText("▼", { x: 0.72, y: y + 0.6, w: 0.56, h: 0.15, fontSize: 9, color: s.color, align: "center" });
}
});
accentBar(slide, "B00020");
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — VIDEO SLIDE (embedded YouTube link)
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addDarkSlide(pres);
// Full background gradient effect with shapes
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: "071628" }, line: { color: "071628" } });
slide.addShape(pres.ShapeType.ellipse, { x: -1, y: -1, w: 5, h: 5, fill: { color: "0D2B55" }, line: { color: "0D2B55" } });
slide.addShape(pres.ShapeType.ellipse, { x: 7, y: 2.5, w: 4, h: 4, fill: { color: "0A1E40" }, line: { color: "0A1E40" } });
// Section badge
slide.addShape(pres.ShapeType.roundRect, {
x: 0.4, y: 0.2, w: 2.4, h: 0.38, fill: { color: "FF0000" }, rectRadius: 0.08, line: { color: "FF0000" }
});
slide.addText("▶ VIDEO RESOURCE", {
x: 0.4, y: 0.2, w: 2.4, h: 0.38,
fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0, charSpacing: 1
});
slide.addText("AMTSL in Action", {
x: 0.4, y: 0.72, w: 9, h: 0.8,
fontSize: 36, bold: true, color: WHITE
});
slide.addText("Active Management of the 3rd Stage of Labour", {
x: 0.4, y: 1.5, w: 9, h: 0.45,
fontSize: 16, color: ACCENT_TEAL, italic: true
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 2.0, w: 5, h: 0, line: { color: ACCENT_TEAL, width: 1.5 } });
// YouTube thumbnail placeholder — clickable box
slide.addShape(pres.ShapeType.roundRect, {
x: 0.5, y: 2.15, w: 5.8, h: 3.1, fill: { color: "111111" }, rectRadius: 0.18,
line: { color: "FF0000", width: 2.5 }
});
// Play button
slide.addShape(pres.ShapeType.ellipse, {
x: 2.7, y: 3.0, w: 1.4, h: 1.4, fill: { color: "FF0000" }, line: { color: "FF0000" }
});
slide.addText("▶", { x: 2.7, y: 3.0, w: 1.4, h: 1.4, fontSize: 30, color: WHITE, align: "center", valign: "middle", margin: 0 });
slide.addText("CLICK TO WATCH", { x: 0.5, y: 4.85, w: 5.8, h: 0.38, fontSize: 10, bold: true, color: "FF0000", align: "center" });
// Video details panel
slide.addShape(pres.ShapeType.rect, { x: 6.55, y: 2.15, w: 3.1, h: 3.1, fill: { color: MID_BLUE }, line: { color: "1D5599" } });
slide.addText("Video covers:", { x: 6.65, y: 2.22, w: 2.9, h: 0.38, fontSize: 11, bold: true, color: ACCENT_TEAL });
const videoPoints = [
"Oxytocin administration",
"Early cord clamping",
"Controlled cord traction",
"Fundal massage",
"Placenta examination",
"PPH prevention tips",
];
videoPoints.forEach((p, i) => {
slide.addText(`✓ ${p}`, { x: 6.65, y: 2.65 + i * 0.41, w: 2.9, h: 0.38, fontSize: 9.5, color: TEXT_LIGHT });
});
// URL text
slide.addText("YouTube: Active Management of Third Stage of Labour | AMTSL", {
x: 0.5, y: 5.28, w: 9.0, h: 0.28, fontSize: 8.5, color: "8899BB", italic: true
});
// Hyperlink on the play button area — add text link
slide.addText("https://www.youtube.com/watch?v=-K-jFftVJ-8", {
x: 0.5, y: 5.08, w: 9.0, h: 0.22,
fontSize: 8, color: ACCENT_TEAL,
hyperlink: { url: "https://www.youtube.com/watch?v=-K-jFftVJ-8" }
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — SUMMARY TABLE
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = addLightSlide(pres);
sectionBadge(slide, "SUMMARY");
slideNumber(slide, 12);
slide.addText("Key Points at a Glance", {
x: 0.4, y: 0.62, w: 9, h: 0.65, fontSize: 27, bold: true, color: TEXT_DARK
});
slide.addShape(pres.ShapeType.line, { x: 0.4, y: 1.28, w: 4, h: 0, line: { color: ACCENT_TEAL, width: 2.5 } });
const tableData = [
[{ text: "Component", options: { bold: true } }, { text: "Key Details", options: { bold: true } }],
["3rd Stage Duration", "5–30 min (normal); >30 min = prolonged"],
["AMTSL Components", "Uterotonic + Controlled Cord Traction + Uterine Massage"],
["First-line Uterotonic", "Oxytocin 10 IU IM within 1 min of birth"],
["CCT Method", "Brandt-Andrews: counter-traction + gentle cord traction"],
["Normal Blood Loss", "≤ 500 mL (vaginal); ≤ 1000 mL (caesarean)"],
["PPH Definition", "≥ 500 mL within 24 h (vaginal delivery)"],
["4 Ts of PPH", "Tone (70%) | Trauma (20%) | Tissue (10%) | Thrombin (1%)"],
["Placenta Examination", "Completeness, cotyledons, cord vessels (2 arteries + 1 vein)"],
];
slide.addTable(tableData, {
x: 0.35, y: 1.45, w: 9.3, h: 3.8,
colW: [2.8, 6.5],
border: { type: "solid", color: "C8D8E8", pt: 0.5 },
fill: WHITE,
fontSize: 10,
color: TEXT_DARK,
align: "left",
valign: "middle",
rowH: 0.38,
});
accentBar(slide);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — THANK YOU (fun & eye-catching)
// ═══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slide.background = { color: "040D1A" };
// Decorative burst rings
[
{ x: 4.2, y: 1.5, r: 4.5, col: "00C2A0", op: 15 },
{ x: 4.2, y: 1.5, r: 3.5, col: "1A4A8A", op: 20 },
{ x: 4.2, y: 1.5, r: 2.5, col: "0D2B55", op: 30 },
].forEach(c => {
slide.addShape(pres.ShapeType.ellipse, {
x: c.x - c.r / 2, y: c.y - c.r / 2, w: c.r, h: c.r,
fill: { color: c.col, transparency: 100 - c.op },
line: { color: c.col, width: 1.5 }
});
});
// Confetti dots (scattered)
const confetti = [
{ x: 0.3, y: 0.3, col: ACCENT_TEAL }, { x: 1.5, y: 0.6, col: ACCENT_GOLD },
{ x: 8.8, y: 0.5, col: "B00020" }, { x: 9.2, y: 1.2, col: ACCENT_TEAL },
{ x: 0.8, y: 4.8, col: ACCENT_GOLD}, { x: 9.0, y: 4.6, col: ACCENT_TEAL },
{ x: 2.0, y: 0.2, col: "6B4EAE" }, { x: 7.5, y: 5.1, col: ACCENT_GOLD },
{ x: 5.0, y: 0.1, col: "FF6384" }, { x: 0.4, y: 2.8, col: ACCENT_TEAL },
];
confetti.forEach(c => {
slide.addShape(pres.ShapeType.ellipse, { x: c.x, y: c.y, w: 0.18, h: 0.18, fill: { color: c.col }, line: { color: c.col } });
});
// Main THANK YOU
slide.addText("Thank", {
x: 0.3, y: 0.65, w: 9.4, h: 1.2,
fontSize: 70, bold: true, color: WHITE, align: "center", charSpacing: -2
});
slide.addText("You!", {
x: 0.3, y: 1.75, w: 9.4, h: 1.3,
fontSize: 80, bold: true, color: ACCENT_TEAL, align: "center", charSpacing: -2
});
// Fun subtitle
slide.addText("🩺 A healthy placenta delivered is a life saved. 🩺", {
x: 0.3, y: 3.05, w: 9.4, h: 0.52,
fontSize: 14, color: ACCENT_GOLD, align: "center", italic: true, bold: true
});
// Divider line with dots
slide.addShape(pres.ShapeType.line, { x: 1.5, y: 3.68, w: 7, h: 0, line: { color: ACCENT_TEAL, width: 1 } });
// Key takeaway strip
slide.addShape(pres.ShapeType.roundRect, {
x: 1.0, y: 3.85, w: 8, h: 0.72, fill: { color: MID_BLUE }, rectRadius: 0.14, line: { color: ACCENT_TEAL, width: 1 }
});
slide.addText("Remember: AMTSL = Oxytocin + CCT + Uterine Massage — the 3-step shield against PPH", {
x: 1.05, y: 3.87, w: 7.9, h: 0.68,
fontSize: 11.5, color: WHITE, align: "center", valign: "middle", bold: true
});
// Name & department
slide.addText("Presented by: Intern Doctor | Dept. of Obstetrics & Gynaecology", {
x: 0.3, y: 4.72, w: 9.4, h: 0.3,
fontSize: 9.5, color: TEXT_LIGHT, align: "center"
});
// References note
slide.addText("Sources: Roberts & Hedges' Clinical Procedures in Emergency Medicine; Creasy & Resnik's Maternal-Fetal Medicine; WHO AMTSL Guidelines", {
x: 0.3, y: 5.1, w: 9.4, h: 0.3,
fontSize: 7.5, color: "4466AA", align: "center", italic: true
});
}
// ─── WRITE FILE ──────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/third-stage-labour-ppt/3rd_Stage_Labour_Management.pptx" })
.then(() => console.log("DONE: 3rd_Stage_Labour_Management.pptx written"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/third-stage-labour-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/third-stage-labour-ppt/
3rd Stage Labour Management
Presentation · PPTX
| # | Slide | Content |
|---|---|---|
| 1 | Title Slide | Bold typographic title, department info, decorative geometric shapes |
| 2 | Agenda | Numbered 8-point overview of all sections |
| 3 | Definition | What is the 3rd stage, duration cards (5-30 min normal, >30 min prolonged), Schultze vs Matthews Duncan mechanisms |
| 4 | Signs of Placental Separation | 4 cards - gush of blood, cord lengthening, uterine globularity, fundal rise |
| 5 | AMTSL Overview | 3-pillar layout: Uterotonic → CCT → Uterine Massage. WHO 60% PPH reduction stat highlighted |
| 6 | Uterotonic Drugs | Full drug table: Oxytocin (first-line), Ergometrine (second-line), Carboprost (refractory PPH) with doses, C/I, notes |
| 7 | Controlled Cord Traction | 7-step Brandt-Andrews method with danger warning highlighted in red |
| 8 | Uterine Massage & Checks | Two-panel: massage technique + post-delivery placenta/cervix/laceration checks |
| 9 | PPH Complications | 4 T's framework - Tone 70%, Trauma 20%, Tissue 10%, Thrombin 1% |
| 10 | PPH Step-Up Management | 5-step escalating algorithm from IV access to hysterectomy |
| 11 | VIDEO SLIDE | Clickable YouTube play button linking to AMTSL video (AAUN Obs & Gynae channel, 27K+ views), with checklist of what the video covers |
| 12 | Summary Table | 9-row at-a-glance reference table |
| 13 | Thank You | Dark starfield background, confetti dots, giant "Thank You!" in teal, memorable quote - "A healthy placenta delivered is a life saved", AMTSL mnemonic reminder, source credits |
Presentation
3rd stage labour AMTSL clinical diagram oxytocin controlled cord traction medical illustration
node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://image.slidesharecdn.com/eventsinthethirdstageoflabour-221113045103-ab78a01c/75/EVENTS-IN-THE-THIRD-STAGE-OF-LABOUR-pptx-21-2048.jpg" \ "https://image.slidesharecdn.com/mngmntof3rdstage2-201012051426/75/Management-of-3rd-stage-of-labor-33-2048.jpg" \ "https://image.slidesharecdn.com/activemanagementofthirdstagelabor-200412105125/75/Active-management-of-third-stage-labor-7-2048.jpg" \ "https://i.ytimg.com/vi/-K-jFftVJ-8/maxresdefault.jpg" \ 2>&1 | head -5