Make a ppt on normal pregnancy obg
mkdir -p /home/daytona/workspace/normal-pregnancy-ppt && ls /home/daytona/worksp…
~/normal-pregnancy-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.author = 'OBG Department';
pres.title = 'Normal Pregnancy';
// ─── COLOR PALETTE ───────────────────────────────────────────────────────────
const DEEP_TEAL = "0D4F5C"; // dominant dark
const MID_TEAL = "1A7A8A"; // supporting
const LIGHT_TEAL = "E8F6F8"; // light fill
const ACCENT = "F0A500"; // warm amber accent
const WHITE = "FFFFFF";
const DARK_TEXT = "1C1C2E";
const SOFT_GRAY = "F4F7F8";
const LIGHT_LINE = "C5DCE1";
const PINK_ACCENT = "E8457A";
// ─── HELPERS ─────────────────────────────────────────────────────────────────
function addSlideHeader(slide, title, subtitle) {
// Top accent bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.08, fill: { color: ACCENT } });
// Header background
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.08, w: 10, h: 0.85, fill: { color: DEEP_TEAL } });
slide.addText(title, {
x: 0.4, y: 0.10, w: 9.2, h: 0.7,
fontSize: 22, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle", margin: 0
});
if (subtitle) {
slide.addText(subtitle, { x: 0.4, y: 0.85, w: 9.2, h: 0.2, fontSize: 10, color: LIGHT_TEAL, fontFace: "Calibri", margin: 0 });
}
}
function addSlideFooter(slide, slideNum) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.4, w: 10, h: 0.22, fill: { color: DEEP_TEAL } });
slide.addText("Normal Pregnancy — OBG", { x: 0.3, y: 5.42, w: 5, h: 0.18, fontSize: 8, color: LIGHT_TEAL, fontFace: "Calibri" });
slide.addText(`${slideNum}`, { x: 9.2, y: 5.42, w: 0.5, h: 0.18, fontSize: 8, color: LIGHT_TEAL, fontFace: "Calibri", align: "right" });
}
function addBulletBox(slide, items, x, y, w, h, opts = {}) {
const textArr = items.map((item, i) => ({
text: item,
options: { bullet: { type: "bullet", indent: 12 }, breakLine: i < items.length - 1, fontSize: opts.fontSize || 13.5, color: opts.color || DARK_TEXT, fontFace: "Calibri" }
}));
slide.addText(textArr, { x, y, w, h, valign: "top", margin: [6, 8, 4, 8], ...opts });
}
function cardBox(slide, label, value, x, y, w, h, bgColor = MID_TEAL) {
slide.addShape(pres.ShapeType.rect, { x, y, w, h, fill: { color: bgColor }, line: { color: bgColor, width: 0 } });
slide.addText(value, { x, y: y + 0.04, w, h: h * 0.55, fontSize: 22, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
slide.addText(label, { x, y: y + h * 0.55, w, h: h * 0.42, fontSize: 10, color: LIGHT_TEAL, fontFace: "Calibri", align: "center", valign: "top" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
// Full dark background
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DEEP_TEAL } });
// Decorative teal circle
sl.addShape(pres.ShapeType.ellipse, { x: 6.8, y: -1.0, w: 4.5, h: 4.5, fill: { color: MID_TEAL }, line: { color: MID_TEAL, width: 0 } });
sl.addShape(pres.ShapeType.ellipse, { x: 7.4, y: -0.5, w: 3.5, h: 3.5, fill: { color: "1E8FA0" }, line: { color: "1E8FA0", width: 0 } });
// Accent bar
sl.addShape(pres.ShapeType.rect, { x: 0.5, y: 1.6, w: 0.12, h: 2.5, fill: { color: ACCENT } });
// Title text
sl.addText("NORMAL PREGNANCY", { x: 0.8, y: 1.5, w: 7, h: 0.9, fontSize: 36, bold: true, color: WHITE, fontFace: "Calibri", charSpacing: 3 });
sl.addText("Obstetrics & Gynaecology", { x: 0.8, y: 2.4, w: 7, h: 0.5, fontSize: 18, color: ACCENT, fontFace: "Calibri", italic: true });
sl.addShape(pres.ShapeType.rect, { x: 0.8, y: 2.95, w: 4.5, h: 0.04, fill: { color: LIGHT_TEAL } });
sl.addText([
{ text: "Definition • Diagnosis • Physiology", options: { breakLine: true } },
{ text: "Antenatal Care • Fetal Development • Intrapartum", options: {} }
], { x: 0.8, y: 3.1, w: 7, h: 0.8, fontSize: 12, color: LIGHT_TEAL, fontFace: "Calibri" });
sl.addText("Source: Creasy & Resnik's Maternal-Fetal Medicine, 9e", { x: 0.8, y: 5.1, w: 8, h: 0.3, fontSize: 9, color: "5DA8B5", fontFace: "Calibri" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — DEFINITION & OVERVIEW
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Definition & Overview", "What is a Normal Pregnancy?");
addSlideFooter(sl, "2");
// Left panel - definition
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.15, w: 5.5, h: 3.9, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.15, w: 5.5, h: 0.38, fill: { color: MID_TEAL } });
sl.addText("DEFINITION", { x: 0.3, y: 1.15, w: 5.5, h: 0.38, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, [
"Gestation of a single viable fetus in the uterus",
"Duration: ~280 days (40 weeks) from LMP",
"Divided into 3 trimesters of ~13 weeks each",
"Normal: no major maternal or fetal complications",
"Results in live birth of a healthy neonate",
"Average birthweight: 3.0–3.5 kg at term"
], 0.4, 1.6, 5.3, 3.35, { fontSize: 13 });
// Right panel - key stats
sl.addShape(pres.ShapeType.rect, { x: 6.1, y: 1.15, w: 3.6, h: 3.9, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 6.1, y: 1.15, w: 3.6, h: 0.38, fill: { color: ACCENT } });
sl.addText("KEY FACTS", { x: 6.1, y: 1.15, w: 3.6, h: 0.38, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
cardBox(sl, "Gestational Age", "40 wks", 6.2, 1.65, 1.6, 0.85, MID_TEAL);
cardBox(sl, "Trimesters", "3", 7.9, 1.65, 1.7, 0.85, "1E8FA0");
cardBox(sl, "Fetal Viability", "24 wks", 6.2, 2.6, 1.6, 0.85, "2196A0");
cardBox(sl, "Term Range", "37–42", 7.9, 2.6, 1.7, 0.85, MID_TEAL);
sl.addText([
{ text: "Naegele's Rule: ", options: { bold: true, color: DEEP_TEAL } },
{ text: "LMP + 9 months + 7 days", options: { color: DARK_TEXT } }
], { x: 6.1, y: 3.55, w: 3.6, h: 0.4, fontSize: 11, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addShape(pres.ShapeType.rect, { x: 6.15, y: 4.05, w: 3.5, h: 0.04, fill: { color: LIGHT_LINE } });
sl.addText("Trimesters: 1st (1–13 wks) · 2nd (14–26 wks) · 3rd (27–40 wks)", { x: 6.1, y: 4.15, w: 3.55, h: 0.55, fontSize: 9.5, color: "5A6A6F", fontFace: "Calibri", align: "center" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — DIAGNOSIS OF PREGNANCY
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Diagnosis of Pregnancy", "Signs, Symptoms & Investigations");
addSlideFooter(sl, "3");
const catData = [
{
title: "PRESUMPTIVE SIGNS", color: "3A9AB0",
items: ["Amenorrhoea", "Nausea & vomiting", "Breast tenderness / tingling", "Urinary frequency", "Quickening (16–20 wks)", "Skin changes (linea nigra, melasma)"]
},
{
title: "PROBABLE SIGNS", color: MID_TEAL,
items: ["Uterine enlargement", "+ve urine/serum βhCG", "Hegar's sign (6–10 wks)", "Goodell's sign (softening of cervix)", "Chadwick's sign (bluish cervix)", "Ballottement (16–28 wks)"]
},
{
title: "POSITIVE SIGNS", color: DEEP_TEAL,
items: ["Fetal heart sounds (Doppler)", "Fetal movements felt by examiner", "Fetal parts palpable", "USG: gestational sac from 5 wks", "USG: fetal cardiac activity 6–7 wks"]
}
];
catData.forEach((cat, i) => {
const xPos = 0.18 + i * 3.27;
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 4.15, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fill: { color: cat.color } });
sl.addText(cat.title, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fontSize: 10.5, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, cat.items, xPos + 0.08, 1.6, 2.95, 3.55, { fontSize: 12.5 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — PHYSIOLOGICAL CHANGES (CARDIOVASCULAR & RESPIRATORY)
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Physiological Changes — Cardiovascular & Respiratory", "Creasy & Resnik's Maternal-Fetal Medicine");
addSlideFooter(sl, "4");
// CVS box
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.1, w: 4.5, h: 4.2, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.1, w: 4.5, h: 0.42, fill: { color: MID_TEAL } });
sl.addText("❤ CARDIOVASCULAR", { x: 0.3, y: 1.1, w: 4.5, h: 0.42, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, [
"Cardiac output ↑ 40–50% (peaks 28–32 wks)",
"Heart rate ↑ 15–20 bpm",
"Stroke volume ↑ 30%",
"Blood volume ↑ 40–50% (plasma > RBCs → physiological anaemia)",
"Systolic/diastolic BP ↓ by 5–10 mmHg (mid-pregnancy)",
"SVR ↓ due to low-resistance uteroplacental circuit",
"Systolic murmur in >95% women (functional)",
"Heart displaced upward & leftward"
], 0.4, 1.6, 4.3, 3.6, { fontSize: 12 });
// Respiratory box
sl.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.1, w: 4.5, h: 4.2, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.1, w: 4.5, h: 0.42, fill: { color: DEEP_TEAL } });
sl.addText("🫁 RESPIRATORY", { x: 5.2, y: 1.1, w: 4.5, h: 0.42, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, [
"Tidal volume ↑ 40% (500 → 700 mL)",
"Minute ventilation ↑ 50%",
"Functional residual capacity ↓ 20–25%",
"Residual volume ↓ 20%",
"PaCO₂ ↓ to 30 mmHg (chronic respiratory alkalosis)",
"PaO₂ ↑ slightly (100–104 mmHg)",
"Diaphragm displaced upward 4 cm",
"Progesterone drives hyperventilation"
], 5.3, 1.6, 4.3, 3.6, { fontSize: 12 });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — PHYSIOLOGICAL CHANGES (RENAL, GI, HAEMATOLOGICAL)
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Physiological Changes — Renal, GI & Haematological", "Systemic adaptations in normal pregnancy");
addSlideFooter(sl, "5");
const boxes = [
{
title: "🫘 RENAL", color: "2196A0",
items: ["GFR ↑ 50% by 1st trimester", "Renal plasma flow ↑ 75%", "Creatinine ↓ to 0.4–0.8 mg/dL", "Mild glycosuria is normal", "Ureteral dilation (hydroureter)", "Bladder capacity ↓ — frequency ↑", "Proteinuria up to 300 mg/24 h normal"]
},
{
title: "🍽 GASTROINTESTINAL", color: "1A7A8A",
items: ["Nausea/vomiting — peak 8–12 wks", "GI motility ↓ (progesterone)", "Gastric acid secretion ↓", "GERD due to relaxed LOS", "Constipation common", "ALP ↑ (placental isoform)", "Gallstone risk ↑"]
},
{
title: "🩸 HAEMATOLOGICAL", color: DEEP_TEAL,
items: ["RBC mass ↑ 20–30%", "Plasma volume ↑ 50% → Hb ↓ (dilutional)", "WBC ↑ up to 12,000/mm³", "Platelets slightly ↓", "Hypercoagulable: Fibrinogen, F.VII, F.VIII ↑", "Protein S ↓; Protein C unchanged", "ESR unreliable (markedly ↑)"]
}
];
boxes.forEach((b, i) => {
const xPos = 0.18 + i * 3.27;
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 4.15, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fill: { color: b.color } });
sl.addText(b.title, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fontSize: 10.5, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, b.items, xPos + 0.08, 1.6, 2.95, 3.6, { fontSize: 12 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — ANTENATAL CARE SCHEDULE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Antenatal Care Schedule", "WHO Recommended ANC Contacts");
addSlideFooter(sl, "6");
const visits = [
{ ga: "< 12 wks\n(1st Visit)", tasks: "Confirm pregnancy, dating USG\nBlood group + Rh typing\nCBC, VDRL, HIV, Rubella, HBsAg\nPap smear, urine R/E\nFolic acid + Iron supplements\nBlood pressure baseline" },
{ ga: "14–18 wks", tasks: "Anomaly risk screening\nDouble/Triple marker test\n(AFP, βhCG, uE3)\nBlood pressure + weight\nFetal heart sounds\nIron + calcium supplements" },
{ ga: "18–22 wks", tasks: "Anomaly scan (level II USG)\nFetal morphology survey\nCervical length if indicated\nWeight gain assessment\nEdema check\nDental review" },
{ ga: "24–28 wks", tasks: "GCT / OGTT for GDM screening\nBlood pressure monitoring\nFetal growth assessment\nAnti-D if Rh-ve at 28 wks\nTdap vaccination\nAnaemia screen" },
{ ga: "32–36 wks", tasks: "Fetal presentation\nGrowth USG if indicated\nBlood pressure monitoring\nRepeat CBC + urine\nBirth planning\nBreastfeeding counselling" },
{ ga: "37–40 wks", tasks: "Weekly BP monitoring\nFetal kick counts\nCervical assessment\nDiscuss mode of delivery\nHospital registration\nSigns of labour counselling" }
];
visits.forEach((v, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const xPos = 0.18 + col * 3.25;
const yPos = 1.08 + row * 2.18;
const bgCol = (i % 2 === 0) ? MID_TEAL : DEEP_TEAL;
sl.addShape(pres.ShapeType.rect, { x: xPos, y: yPos, w: 3.05, h: 2.05, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: xPos, y: yPos, w: 3.05, h: 0.42, fill: { color: bgCol } });
sl.addText(v.ga, { x: xPos, y: yPos, w: 3.05, h: 0.42, fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
const lines = v.tasks.split("\n");
const textArr = lines.map((line, idx) => ({
text: line,
options: { bullet: { type: "bullet", indent: 8 }, breakLine: idx < lines.length - 1, fontSize: 10, color: DARK_TEXT, fontFace: "Calibri" }
}));
sl.addText(textArr, { x: xPos + 0.06, y: yPos + 0.44, w: 2.95, h: 1.55, valign: "top", margin: [4, 4, 4, 4] });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — FETAL DEVELOPMENT BY TRIMESTER
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Fetal Development by Trimester", "Embryonic and fetal milestones");
addSlideFooter(sl, "7");
const trimesters = [
{
title: "1st TRIMESTER (1–13 wks)", color: "3A9AB0",
items: [
"Wk 3–4: Implantation, bilaminar disc",
"Wk 5–6: Heart begins beating, neural tube closes",
"Wk 8: All major organs forming (embryonic period ends)",
"Wk 9–12: Fingers/toes visible, external genitalia differentiate",
"Wk 10: Fetal period begins; CRL ~4 cm",
"Wk 12: USG — NT measurement for T21 screening",
"Crown-rump length used for dating",
"Organogenesis complete — highest teratogen risk"
]
},
{
title: "2nd TRIMESTER (14–26 wks)", color: MID_TEAL,
items: [
"Wk 16–18: Quickening (multiparae ~16 wks)",
"Wk 18–20: Anomaly scan / morphology survey",
"Wk 20: Vernix caseosa, lanugo appear",
"Wk 22–24: Surfactant production begins",
"Wk 24: Viability threshold (~25% survival)",
"Wk 26: Eyes open; grasp reflex present",
"Fetal growth ~ 10 g/day in late 2nd trimester",
"BPD, FL, HC, AC used for growth assessment"
]
},
{
title: "3rd TRIMESTER (27–40 wks)", color: DEEP_TEAL,
items: [
"Wk 28: Surfactant production ↑; viable > 90%",
"Wk 30–32: Lanugo disappears; subcutaneous fat deposits",
"Wk 34: Lung maturity significantly improved",
"Wk 36: Head usually engages (primigravidae)",
"Wk 37: Term begins; mature surfactant system",
"Wk 40: Average weight 3.2–3.5 kg, length ~50 cm",
"Iron stores, IgG, Vitamin D transferred to fetus",
"Peak fetal growth 200–250 g/week"
]
}
];
trimesters.forEach((t, i) => {
const xPos = 0.18 + i * 3.27;
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 4.18, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fill: { color: t.color } });
sl.addText(t.title, { x: xPos, y: 1.1, w: 3.1, h: 0.44, fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, t.items, xPos + 0.08, 1.6, 2.95, 3.62, { fontSize: 11.5 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — COMMON SYMPTOMS & MANAGEMENT
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Common Symptoms in Normal Pregnancy & Management", "Non-pathological complaints requiring reassurance/treatment");
addSlideFooter(sl, "8");
const rows = [
["Nausea & Vomiting", "1st trimester; peaks 8–10 wks", "Small frequent meals, ginger, vitamin B6, antiemetics if severe"],
["Heartburn / GERD", "2nd–3rd trimester", "Antacids, small meals, avoid lying down after food, H2 blockers"],
["Constipation", "Throughout pregnancy", "High fiber diet, increased fluids, lactulose if needed"],
["Backache / Pelvic pain", "2nd–3rd trimester", "Posture, physiotherapy, supportive belt, paracetamol if needed"],
["Leg cramps", "3rd trimester, nocturnal", "Calcium, magnesium, gentle stretching"],
["Ankle oedema", "3rd trimester", "Elevation, compression stockings (rule out pre-eclampsia)"],
["Varicose veins", "2nd–3rd trimester", "Compression hosiery, elevation, avoid prolonged standing"],
["Urinary frequency", "1st & 3rd trimesters", "Reassure; rule out UTI with urine culture"],
["Dyspnoea", "3rd trimester", "Physiological due to diaphragm elevation; reassurance; rule out PE/pulmonary disease"]
];
// Table header
const cols = [2.6, 2.5, 4.6];
const xStarts = [0.15, 2.78, 5.32];
const headers = ["SYMPTOM", "TIMING", "MANAGEMENT"];
headers.forEach((h, i) => {
sl.addShape(pres.ShapeType.rect, { x: xStarts[i], y: 1.08, w: cols[i], h: 0.36, fill: { color: DEEP_TEAL } });
sl.addText(h, { x: xStarts[i], y: 1.08, w: cols[i], h: 0.36, fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
});
rows.forEach((row, ri) => {
const yPos = 1.5 + ri * 0.435;
const bg = ri % 2 === 0 ? WHITE : LIGHT_TEAL;
row.forEach((cell, ci) => {
sl.addShape(pres.ShapeType.rect, { x: xStarts[ci], y: yPos, w: cols[ci], h: 0.42, fill: { color: bg }, line: { color: LIGHT_LINE, width: 0.5 } });
sl.addText(cell, { x: xStarts[ci] + 0.06, y: yPos, w: cols[ci] - 0.1, h: 0.42, fontSize: 10.5, color: DARK_TEXT, fontFace: "Calibri", valign: "middle", margin: [2, 4, 2, 4] });
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — NORMAL LABOUR & INTRAPARTUM CARE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Normal Labour & Intrapartum Care", "Stages of labour and management");
addSlideFooter(sl, "9");
const stages = [
{
stage: "STAGE I", sub: "Onset of labour → full dilation",
latent: "0–6 cm (≤20 hrs nullip / ≤14 hrs multip)",
active: "6–10 cm (~1 cm/hr nullip, faster multip)",
color: "3A9AB0",
pts: ["Regular uterine contractions", "Cervical effacement + dilation", "Show (blood-stained mucus)", "AROM / SROM", "Monitor FHR, BP, contractions", "Partogram documentation"]
},
{
stage: "STAGE II", sub: "Full dilation → delivery of baby",
latent: "Passive: before urge to push",
active: "Active: ≤3 hrs nullip / ≤2 hrs multip",
color: MID_TEAL,
pts: ["Expulsive contractions + voluntary effort", "Cardinal movements of labour", "FHR monitoring every 5 min", "Controlled cord traction after crowning", "Support perineum; avoid routine episiotomy", "Note time of delivery"]
},
{
stage: "STAGE III", sub: "Delivery of placenta (≤30 min)",
latent: "Active management: oxytocin 10 IU IM",
active: "Signs: cord lengthens, gush of blood, uterus rises",
color: DEEP_TEAL,
pts: ["Oxytocin within 1 min of delivery", "Controlled cord traction", "Uterine massage after placenta", "Check placenta completeness", "Inspect perineum for tears", "Estimate blood loss"]
}
];
stages.forEach((s, i) => {
const xPos = 0.18 + i * 3.27;
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 4.18, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: xPos, y: 1.1, w: 3.1, h: 0.55, fill: { color: s.color } });
sl.addText(s.stage, { x: xPos, y: 1.1, w: 3.1, h: 0.3, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(s.sub, { x: xPos, y: 1.35, w: 3.1, h: 0.25, fontSize: 8.5, color: LIGHT_TEAL, fontFace: "Calibri", align: "center" });
sl.addShape(pres.ShapeType.rect, { x: xPos + 0.06, y: 1.7, w: 2.98, h: 0.7, fill: { color: LIGHT_TEAL }, line: { color: LIGHT_LINE, width: 0.5 } });
sl.addText([
{ text: s.latent + "\n", options: { fontSize: 9, color: DEEP_TEAL, fontFace: "Calibri" } },
{ text: s.active, options: { fontSize: 9, color: DEEP_TEAL, fontFace: "Calibri" } }
], { x: xPos + 0.08, y: 1.72, w: 2.94, h: 0.65, valign: "middle", margin: [2, 4, 2, 4] });
addBulletBox(sl, s.pts, xPos + 0.08, 2.48, 2.95, 2.7, { fontSize: 11.5 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — POSTPARTUM CARE & NORMAL PUERPERIUM
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Normal Puerperium & Postpartum Care", "6 weeks following delivery");
addSlideFooter(sl, "10");
// Left col
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.1, w: 4.5, h: 4.2, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.1, w: 4.5, h: 0.42, fill: { color: MID_TEAL } });
sl.addText("PHYSIOLOGICAL INVOLUTION", { x: 0.3, y: 1.1, w: 4.5, h: 0.42, fontSize: 11.5, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, [
"Uterus returns to non-pregnant size by 6 wks",
"Fundal height: at umbilicus on day 1, pelvis by day 10",
"Lochia rubra (1–4 days) → serosa → alba (wks 2–6)",
"Cervical os closes by day 4–6",
"Ovulation may resume by wk 6 (non-breastfeeding)",
"Breastfeeding suppresses ovulation (LAM method)",
"BP, HR, weight return toward pre-pregnancy levels",
"GFR normalises by 6 wks postpartum"
], 0.4, 1.6, 4.3, 3.6, { fontSize: 12.5 });
// Right col
sl.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.1, w: 4.5, h: 4.2, fill: { color: WHITE }, line: { color: LIGHT_LINE, width: 1 } });
sl.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.1, w: 4.5, h: 0.42, fill: { color: DEEP_TEAL } });
sl.addText("ROUTINE POSTPARTUM MANAGEMENT", { x: 5.2, y: 1.1, w: 4.5, h: 0.42, fontSize: 11.5, bold: true, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle" });
addBulletBox(sl, [
"Breastfeeding encouraged — initiated within 1 hr",
"Vitamin K 1 mg IM to neonate at birth",
"Fundal massage + lochia monitoring q4h",
"Iron + folic acid supplementation for 3 months",
"Contraception counselling at 6-wk visit",
"Postpartum depression screening (EPDS)",
"Pap smear if due; thyroid screening if risk",
"Immunisation catch-up (MMR, rubella if not immune)",
"Family planning: IUCD, POPs, barrier methods"
], 5.3, 1.6, 4.3, 3.6, { fontSize: 12.5 });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — SUMMARY TABLE: KEY NUMBERS
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: SOFT_GRAY } });
addSlideHeader(sl, "Key Clinical Numbers in Normal Pregnancy", "Quick reference for exams & clinical practice");
addSlideFooter(sl, "11");
const data = [
["Parameter", "Normal Value / Fact"],
["Gestational duration", "280 days / 40 weeks from LMP"],
["Cardiac output increase", "40–50% (peaks at 28–32 wks)"],
["Blood volume increase", "40–50% (plasma >> RBC)"],
["Normal Hb in pregnancy", "≥ 11 g/dL (1st/3rd trimester); ≥10.5 g/dL (2nd)"],
["Creatinine (normal)", "0.4–0.8 mg/dL (lower than non-pregnant)"],
["Proteinuria upper limit", "< 300 mg/24 h"],
["Maternal pulse rate", "HR ↑ by 15–20 bpm"],
["Systolic murmur", "> 95% of pregnant women (grade ≤ 2/4; functional)"],
["Fetal viability", "24 weeks (50% survival at 24–25 wks)"],
["Quickening – primigravida", "18–20 weeks"],
["Quickening – multigravida", "16–18 weeks"],
["Term definition", "37 0/7 – 41 6/7 weeks"],
["Active phase progress", "≥ 1 cm/hr (nullipara); faster in multipara"],
["3rd stage duration", "≤ 30 minutes"],
["Postpartum period", "Up to 6 weeks after delivery"]
];
const hdrCols = [4.2, 5.6];
const xS = [0.18, 4.4];
data.forEach((row, ri) => {
const yPos = 1.1 + ri * 0.28;
row.forEach((cell, ci) => {
const isHeader = ri === 0;
const bg = isHeader ? DEEP_TEAL : (ri % 2 === 0 ? WHITE : LIGHT_TEAL);
sl.addShape(pres.ShapeType.rect, { x: xS[ci], y: yPos, w: hdrCols[ci], h: 0.26, fill: { color: bg }, line: { color: LIGHT_LINE, width: 0.5 } });
sl.addText(cell, { x: xS[ci] + 0.06, y: yPos, w: hdrCols[ci] - 0.1, h: 0.26, fontSize: isHeader ? 11 : 10, bold: isHeader, color: isHeader ? WHITE : DARK_TEXT, fontFace: "Calibri", valign: "middle", margin: [1, 4, 1, 4] });
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — CLOSING / THANK YOU
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DEEP_TEAL } });
sl.addShape(pres.ShapeType.ellipse, { x: -1.5, y: 2.5, w: 5, h: 5, fill: { color: MID_TEAL }, line: { color: MID_TEAL, width: 0 } });
sl.addShape(pres.ShapeType.ellipse, { x: 7.5, y: -1.5, w: 4, h: 4, fill: { color: "1E8FA0" }, line: { color: "1E8FA0", width: 0 } });
sl.addShape(pres.ShapeType.rect, { x: 0, y: 2.5, w: 10, h: 0.06, fill: { color: ACCENT } });
sl.addText("THANK YOU", { x: 1, y: 0.9, w: 8, h: 1.0, fontSize: 42, bold: true, color: WHITE, fontFace: "Calibri", align: "center", charSpacing: 6 });
sl.addText("Normal Pregnancy — Obstetrics & Gynaecology", { x: 1, y: 1.85, w: 8, h: 0.5, fontSize: 16, color: ACCENT, fontFace: "Calibri", align: "center", italic: true });
sl.addText([
{ text: "Reference: ", options: { bold: true, color: LIGHT_TEAL, fontSize: 12, fontFace: "Calibri" } },
{ text: "Creasy & Resnik's Maternal-Fetal Medicine, 9th Ed.", options: { color: WHITE, fontSize: 12, fontFace: "Calibri" } }
], { x: 1, y: 2.85, w: 8, h: 0.4, align: "center" });
sl.addText([
{ text: "Berek & Novak's Gynecology, 16th Ed.", options: { color: WHITE, fontSize: 12, fontFace: "Calibri" } }
], { x: 1, y: 3.2, w: 8, h: 0.4, align: "center" });
sl.addText("Slides cover: Definition · Diagnosis · Physiology · ANC · Fetal Development · Labour · Puerperium", {
x: 1, y: 4.6, w: 8, h: 0.5, fontSize: 9.5, color: LIGHT_TEAL, fontFace: "Calibri", align: "center"
});
}
// ─── SAVE ─────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/normal-pregnancy-ppt/Normal_Pregnancy_OBG.pptx" })
.then(() => console.log("✅ PPT saved successfully!"))
.catch(e => console.error("❌ Error:", e));
cd /home/daytona/workspace/normal-pregnancy-ppt && node create_ppt.js
ls -lh /home/daytona/workspace/normal-pregnancy-ppt/Normal_Pregnancy_OBG.pptx
Normal Pregnancy OBG
Presentation · PPTX
| # | Slide Title |
|---|---|
| 1 | Title Slide |
| 2 | Definition & Overview (trimesters, Naegele's rule, key stats) |
| 3 | Diagnosis of Pregnancy (presumptive / probable / positive signs) |
| 4 | Physiological Changes — Cardiovascular & Respiratory |
| 5 | Physiological Changes — Renal, GI & Haematological |
| 6 | Antenatal Care Schedule (6-visit WHO framework) |
| 7 | Fetal Development by Trimester (milestones) |
| 8 | Common Symptoms & Management (table format) |
| 9 | Normal Labour & Intrapartum Care (3 stages) |
| 10 | Normal Puerperium & Postpartum Care |
| 11 | Key Clinical Numbers (quick-reference table for exams) |
| 12 | Thank You / References |
Give a ppt on chapter normal labor obg mbbs
~/normal-labor-ppt/create_labor_ppt.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.author = 'OBG MBBS';
pres.title = 'Normal Labour';
// ─── PALETTE ───────────────────────────────────────────────────────────────
const NAVY = "0A2C4A";
const BLUE = "1565A8";
const MID_BLUE = "1E88C8";
const LIGHT_BLUE= "E3F2FD";
const ACCENT = "E64A19"; // burnt orange accent
const GOLD = "F9A825";
const WHITE = "FFFFFF";
const DARK = "1A1A2E";
const SOFT_BG = "F5F8FC";
const LINE_CLR = "C5D5E8";
const TEAL = "00838F";
const GREEN = "2E7D32";
// ─── HELPERS ───────────────────────────────────────────────────────────────
function hdr(sl, title, sub) {
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.07, fill:{color:GOLD} });
sl.addShape(pres.ShapeType.rect, { x:0, y:0.07, w:10, h:0.88, fill:{color:NAVY} });
sl.addText(title, { x:0.35, y:0.09, w:9.3, h:0.65, fontSize:21, bold:true, color:WHITE, fontFace:"Calibri", valign:"middle", margin:0 });
if(sub) sl.addText(sub, { x:0.35, y:0.76, w:9.3, h:0.2, fontSize:9.5, color:"A8C8E8", fontFace:"Calibri", margin:0 });
}
function ftr(sl, n) {
sl.addShape(pres.ShapeType.rect, { x:0, y:5.4, w:10, h:0.225, fill:{color:NAVY} });
sl.addText("Normal Labour — OBG MBBS", { x:0.3, y:5.415, w:6, h:0.19, fontSize:8, color:"A8C8E8", fontFace:"Calibri" });
sl.addText(`${n}`, { x:9.3, y:5.415, w:0.5, h:0.19, fontSize:8, color:"A8C8E8", fontFace:"Calibri", align:"right" });
}
function bullets(sl, items, x, y, w, h, opts={}) {
const arr = items.map((t,i) => ({
text: t,
options: { bullet:{type:"bullet", indent:10}, breakLine: i<items.length-1,
fontSize: opts.fs||13, color: opts.clr||DARK, fontFace:"Calibri" }
}));
sl.addText(arr, { x, y, w, h, valign:"top", margin:[5,8,4,8], ...opts });
}
function panel(sl, title, titleBg, items, x, y, w, h, opts={}) {
sl.addShape(pres.ShapeType.rect, { x, y, w, h, fill:{color:WHITE}, line:{color:LINE_CLR, width:1} });
sl.addShape(pres.ShapeType.rect, { x, y, w, h:0.42, fill:{color:titleBg} });
sl.addText(title, { x, y, w, h:0.42, fontSize:opts.tfSize||11.5, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
bullets(sl, items, x+0.08, y+0.46, w-0.15, h-0.52, opts);
}
function box(sl, label, val, x, y, w, h, bg=MID_BLUE) {
sl.addShape(pres.ShapeType.rect, { x, y, w, h, fill:{color:bg}, line:{color:bg,width:0} });
sl.addText(val, { x, y:y+0.05, w, h:h*0.55, fontSize:20, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
sl.addText(label, { x, y:y+h*0.55, w, h:h*0.43, fontSize:9.5, color:LIGHT_BLUE, fontFace:"Calibri", align:"center", valign:"top" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:NAVY} });
// Decorative circles
sl.addShape(pres.ShapeType.ellipse, { x:6.5, y:-1.2, w:5, h:5, fill:{color:BLUE}, line:{color:BLUE,width:0} });
sl.addShape(pres.ShapeType.ellipse, { x:7.2, y:-0.6, w:3.8, h:3.8, fill:{color:MID_BLUE}, line:{color:MID_BLUE,width:0} });
sl.addShape(pres.ShapeType.ellipse, { x:-1.8, y:3.2, w:4, h:4, fill:{color:BLUE}, line:{color:BLUE,width:0} });
// Accent bar
sl.addShape(pres.ShapeType.rect, { x:0.5, y:1.4, w:0.14, h:2.8, fill:{color:GOLD} });
sl.addText("NORMAL", { x:0.85, y:1.35, w:7.5, h:0.75, fontSize:22, bold:true, color:GOLD, fontFace:"Calibri", charSpacing:8 });
sl.addText("LABOUR", { x:0.85, y:2.0, w:7.5, h:1.1, fontSize:52, bold:true, color:WHITE, fontFace:"Calibri", charSpacing:4 });
sl.addShape(pres.ShapeType.rect, { x:0.85, y:3.15, w:5, h:0.05, fill:{color:ACCENT} });
sl.addText("Obstetrics & Gynaecology | MBBS Curriculum", { x:0.85, y:3.25, w:7, h:0.4, fontSize:14, color:"A8C8E8", fontFace:"Calibri", italic:true });
sl.addText([
{ text:"Topics: ", options:{bold:true, color:GOLD, fontSize:11, fontFace:"Calibri"} },
{ text:"Definition · Mechanisms · Stages · Monitoring · Management · Complications", options:{color:"A8C8E8", fontSize:11, fontFace:"Calibri"} }
], { x:0.85, y:3.75, w:8.5, h:0.4 });
sl.addText("Source: Creasy & Resnik's Maternal-Fetal Medicine, 9e | Textbook of Family Medicine, 9e", { x:0.85, y:5.1, w:8.5, h:0.3, fontSize:8.5, color:"6A8FAA", fontFace:"Calibri" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — DEFINITION & PREREQUISITES
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Definition & Prerequisites of Normal Labour", "Creasy & Resnik's Maternal-Fetal Medicine, 9e");
ftr(sl, "2");
// Definition box
sl.addShape(pres.ShapeType.rect, { x:0.25, y:1.05, w:9.5, h:1.0, fill:{color:NAVY}, line:{color:NAVY,width:0} });
sl.addText([
{ text:"Definition: ", options:{bold:true, color:GOLD, fontSize:13.5, fontFace:"Calibri"} },
{ text:"Labour is the onset of painful, regular uterine contractions associated with progressive effacement and dilatation of the cervix, leading to expulsion of the products of conception.", options:{color:WHITE, fontSize:13.5, fontFace:"Calibri"} }
], { x:0.4, y:1.1, w:9.2, h:0.85, valign:"middle" });
panel(sl, "PREREQUISITES (3 Ps)", BLUE,
["POWERS: Regular, coordinated, adequate uterine contractions + abdominal muscle effort (bearing down)",
"PASSAGE: Adequate bony pelvis (inlet, midplane, outlet) + soft tissue (cervix, vagina, perineum)",
"PASSENGER: Fetus — size, attitude, lie, presentation, position, and engagement",
"PSYCHE (4th P): Maternal emotional state, pain tolerance, preparation, and support"],
0.25, 2.1, 4.8, 3.12, {fs:12.5});
panel(sl, "NORMAL LABOUR — CRITERIA", TEAL,
["Single live fetus in vertex presentation",
"Gestational age 37–42 completed weeks",
"Spontaneous onset with no prior induction",
"No major obstetric/medical complications",
"No operative interventions required",
"Delivers spontaneously per vaginum",
"Normal blood loss (< 500 mL)"],
5.4, 2.1, 4.35, 3.12, {fs:12.5});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — ONSET & MECHANISM OF LABOR
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Onset of Labour — Mechanism & Signs", "Why does labour start?");
ftr(sl, "3");
panel(sl, "BIOCHEMICAL TRIGGERS OF LABOUR", MID_BLUE,
["↑ Oestrogen : Progesterone ratio near term → uterine sensitisation",
"Prostaglandins (PGE2, PGF2α): cervical ripening + uterine contractions",
"Oxytocin: Ferguson reflex — fetal head pressure → posterior pituitary release",
"Cortisol from fetal adrenal → DHEA → oestrogen surge",
"Inflammatory cytokines (IL-1β, IL-6, IL-8) — cervical collagen breakdown",
"Progesterone withdrawal (functional) — removes myometrial quiescence"],
0.25, 1.08, 5.7, 3.2, {fs:12.5});
panel(sl, "PREMONITORY SIGNS OF LABOUR", ACCENT,
["Lightening: fetal head descends into pelvis (primigravida ~2–4 wks before)",
"Increased frequency of Braxton Hicks contractions",
"Show: blood-tinged mucous plug expelled from cervix",
"Cervical effacement and early dilation (prelabour cervical changes)",
"Membrane rupture (PROM in 8–10% before labour onset)",
"Softening, anterior rotation, partial dilation of cervix",
"Most women labour within 72 hours of 'show'"],
6.2, 1.08, 3.55, 3.2, {fs:11.5});
// FALSE vs TRUE labor box
sl.addShape(pres.ShapeType.rect, { x:0.25, y:4.35, w:9.5, h:0.9, fill:{color:LIGHT_BLUE}, line:{color:LINE_CLR,width:1} });
sl.addText("FALSE vs TRUE LABOUR", { x:0.3, y:4.37, w:3, h:0.25, fontSize:10, bold:true, color:NAVY, fontFace:"Calibri" });
sl.addText([
{ text:"False: ", options:{bold:true, color:ACCENT, fontSize:11, fontFace:"Calibri"} },
{ text:"Irregular, non-progressive contractions; no cervical change; relieved by sedation/walking ", options:{color:DARK, fontSize:11, fontFace:"Calibri"} },
{ text:"True: ", options:{bold:true, color:GREEN, fontSize:11, fontFace:"Calibri"} },
{ text:"Regular, increasing intensity; progressive cervical change; not relieved by sedation", options:{color:DARK, fontSize:11, fontFace:"Calibri"} }
], { x:0.35, y:4.62, w:9.2, h:0.6, valign:"middle" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — STAGES OF LABOUR
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Stages of Labour", "4 stages with durations — Friedman's classification");
ftr(sl, "4");
// Stage cards
const stages = [
{ n:"STAGE I", sub:"Onset → Full Dilatation (10 cm)", col:BLUE,
pts:["LATENT PHASE: 0–6 cm\nNulligravida ≤ 20 hrs; Multigravida ≤ 14 hrs\n– Irregular, mild contractions\n– Cervical effacement predominates",
"ACTIVE PHASE: 6–10 cm\nMin progress: 1.2 cm/hr (nullip) / 1.5 cm/hr (multip)\n– Regular contractions every 2–3 min, ~60 sec\n– Fetal descent begins"],
dur:"Nullip: 8–20 hrs\nMultip: 5–14 hrs"
},
{ n:"STAGE II", sub:"Full Dilatation → Delivery of Baby", col:TEAL,
pts:["PASSIVE phase: Full dilation before urge to push",
"ACTIVE phase: Maternal expulsive effort begins",
"Nullipara: up to 3 hrs (with epidural) / 2 hrs (without)",
"Multipara: up to 2 hrs (with epidural) / 1 hr (without)",
"FHR auscultated every 5 min\nCardinal movements of fetal head occur"],
dur:"Nullip: ~50 min\nMultip: ~20 min"
},
{ n:"STAGE III", sub:"Delivery of Baby → Delivery of Placenta", col:ACCENT,
pts:["Placental separation by shearing forces as uterus contracts",
"Signs: cord lengthening, gush of blood, uterus becomes globular",
"Active management: Oxytocin 10 IU IM within 1 min",
"Controlled cord traction (Brandt-Andrews manoeuvre)",
"Inspect placenta for completeness",
"Normal duration: ≤ 30 minutes"],
dur:"≤ 30 min\n(Active mgmt)"
},
{ n:"STAGE IV", sub:"Delivery of Placenta → 1 Hour", col:NAVY,
pts:["Close monitoring for PPH (most common in 1st hour)",
"Uterine massage if boggy fundus",
"Oxytocin 20 U in IV fluids if needed",
"Check lochia, BP, pulse every 15 min",
"Repair episiotomy / perineal lacerations",
"Initiate breastfeeding within 1 hour"],
dur:"First 1 hour\npost-delivery"
}
];
stages.forEach((s, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const xPos = 0.18 + col * 4.92;
const yPos = 1.0 + row * 2.27;
sl.addShape(pres.ShapeType.rect, { x:xPos, y:yPos, w:4.65, h:2.18, fill:{color:WHITE}, line:{color:LINE_CLR,width:1} });
sl.addShape(pres.ShapeType.rect, { x:xPos, y:yPos, w:4.65, h:0.52, fill:{color:s.col} });
sl.addText(s.n, { x:xPos, y:yPos+0.01, w:3.0, h:0.27, fontSize:12.5, bold:true, color:WHITE, fontFace:"Calibri", valign:"middle", margin:[0,6,0,6] });
sl.addText(s.sub, { x:xPos, y:yPos+0.26, w:3.3, h:0.24, fontSize:8.5, color:LIGHT_BLUE, fontFace:"Calibri", margin:[0,6,0,6] });
sl.addShape(pres.ShapeType.rect, { x:xPos+3.35, y:yPos+0.01, w:1.28, h:0.5, fill:{color:"00000030"} });
sl.addText(s.dur, { x:xPos+3.35, y:yPos+0.01, w:1.28, h:0.5, fontSize:9, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
const textArr = s.pts.map((p, idx) => ({
text: p,
options: { bullet:{type:"bullet",indent:8}, breakLine: idx<s.pts.length-1, fontSize:10.5, color:DARK, fontFace:"Calibri" }
}));
sl.addText(textArr, { x:xPos+0.08, y:yPos+0.55, w:4.52, h:1.58, valign:"top", margin:[3,5,3,5] });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — CARDINAL MOVEMENTS
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Cardinal Movements of Labour (Mechanism of Labour)", "Sequential movements of the fetal head negotiating the pelvis — Vertex presentation");
ftr(sl, "5");
const moves = [
{ n:"1. ENGAGEMENT", col:NAVY,
desc:"Biparietal diameter (BPD) passes through pelvic inlet. Occurs at 0 station. In nulliparas — 2–4 wks before labour; multiparas — often during labour." },
{ n:"2. DESCENT", col:BLUE,
desc:"Continuous downward movement throughout labour. Aided by uterine contractions, maternal bearing down efforts, and straightening of fetal spine." },
{ n:"3. FLEXION", col:MID_BLUE,
desc:"Chin brought to chest. Presents smallest diameter (suboccipitobregmatic ~9.5 cm) instead of occipitofrontal (~11.5 cm). Occurs passively on meeting resistance." },
{ n:"4. INTERNAL ROTATION", col:TEAL,
desc:"Occiput rotates from transverse to AP diameter (OA position). Occurs at or below level of ischial spines (midplane). Driven by pelvic floor muscles." },
{ n:"5. EXTENSION", col:GREEN,
desc:"Head delivers by extension under pubic symphysis. Occiput, bregma, face, chin born in sequence. Mechanism: forces of uterus push downward, perineum deflects upward." },
{ n:"6. EXTERNAL ROTATION (Restitution)", col:ACCENT,
desc:"After delivery of head, it rotates back to anatomical position aligning with fetal shoulders (which rotate into AP diameter). Also called restitution." },
{ n:"7. EXPULSION", col:"8B2500",
desc:"Anterior shoulder born under pubic symphysis; posterior shoulder over perineum. Remainder of body follows with gentle traction." }
];
// Two columns
moves.forEach((m, i) => {
const isLeft = i < 4;
const xPos = isLeft ? 0.2 : 5.15;
const row = isLeft ? i : i - 4;
const yPos = 1.05 + row * 1.1;
sl.addShape(pres.ShapeType.rect, { x:xPos, y:yPos, w:4.7, h:1.02, fill:{color:WHITE}, line:{color:LINE_CLR, width:1} });
sl.addShape(pres.ShapeType.rect, { x:xPos, y:yPos, w:0.12, h:1.02, fill:{color:m.col} });
sl.addText(m.n, { x:xPos+0.18, y:yPos+0.02, w:4.4, h:0.3, fontSize:11.5, bold:true, color:m.col, fontFace:"Calibri", valign:"middle", margin:0 });
sl.addText(m.desc, { x:xPos+0.18, y:yPos+0.3, w:4.4, h:0.68, fontSize:10.5, color:DARK, fontFace:"Calibri", valign:"top", margin:[2,4,2,4] });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — BISHOP SCORE & CERVICAL ASSESSMENT
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Bishop Score & Cervical Assessment", "Pre-labour cervical scoring — used to assess readiness for induction");
ftr(sl, "6");
// Bishop score table
const headers = ["Parameter", "Score 0", "Score 1", "Score 2", "Score 3"];
const rows = [
["Dilatation (cm)", "Closed", "1–2", "3–4", "5+"],
["Effacement (%)", "0–30", "40–50", "60–70", "80+"],
["Station", "–3", "–2", "–1/0", "+1/+2"],
["Consistency", "Firm", "Medium", "Soft", "—"],
["Position", "Posterior", "Mid", "Anterior", "—"]
];
const colW = [2.5, 1.6, 1.6, 1.6, 1.6];
const xS = [0.2, 2.73, 4.36, 5.99, 7.62];
headers.forEach((h, ci) => {
sl.addShape(pres.ShapeType.rect, { x:xS[ci], y:1.05, w:colW[ci], h:0.38, fill:{color:NAVY}, line:{color:LINE_CLR,width:0.5} });
sl.addText(h, { x:xS[ci]+0.04, y:1.05, w:colW[ci]-0.06, h:0.38, fontSize:11.5, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
});
rows.forEach((row, ri) => {
const bg = ri%2===0 ? WHITE : LIGHT_BLUE;
row.forEach((cell, ci) => {
sl.addShape(pres.ShapeType.rect, { x:xS[ci], y:1.46+ri*0.38, w:colW[ci], h:0.38, fill:{color:ci===0?LIGHT_BLUE:bg}, line:{color:LINE_CLR,width:0.5} });
sl.addText(cell, { x:xS[ci]+0.04, y:1.46+ri*0.38, w:colW[ci]-0.06, h:0.38, fontSize:12, bold:ci===0, color:ci===0?NAVY:DARK, fontFace:"Calibri", align:"center", valign:"middle" });
});
});
// Score interpretation
sl.addShape(pres.ShapeType.rect, { x:0.2, y:3.42, w:9.6, h:0.04, fill:{color:GOLD} });
sl.addShape(pres.ShapeType.rect, { x:0.2, y:3.5, w:9.6, h:1.85, fill:{color:WHITE}, line:{color:LINE_CLR,width:1} });
sl.addText("INTERPRETATION", { x:0.3, y:3.52, w:3, h:0.3, fontSize:11, bold:true, color:NAVY, fontFace:"Calibri" });
const interp = [
{ score:"Score ≤ 5", meaning:"Unfavourable cervix — cervical ripening needed before induction", col:ACCENT },
{ score:"Score 6–8", meaning:"Moderate — induction likely to succeed; may need ripening", col:GOLD },
{ score:"Score ≥ 9", meaning:"Favourable cervix — induction likely to succeed with oxytocin alone", col:GREEN }
];
interp.forEach((it, i) => {
sl.addShape(pres.ShapeType.rect, { x:0.3+i*3.18, y:3.88, w:3.0, h:1.3, fill:{color:SOFT_BG}, line:{color:LINE_CLR,width:1} });
sl.addShape(pres.ShapeType.rect, { x:0.3+i*3.18, y:3.88, w:3.0, h:0.32, fill:{color:it.col} });
sl.addText(it.score, { x:0.3+i*3.18, y:3.88, w:3.0, h:0.32, fontSize:11, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
sl.addText(it.meaning, { x:0.38+i*3.18, y:4.22, w:2.84, h:0.9, fontSize:10.5, color:DARK, fontFace:"Calibri", valign:"middle", align:"center" });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — PARTOGRAM
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Partogram (Partograph) — WHO Modified", "Graphical monitoring tool for progress of labour");
ftr(sl, "7");
panel(sl, "WHAT IS A PARTOGRAM?", NAVY,
["A WHO-recommended pictorial chart for recording all observations during labour",
"Helps detect early deviations from normal — triggers timely intervention",
"Consists of three sections: Fetal condition, Labour progress, Maternal condition",
"Alert line: Expected progress of cervical dilation at 1 cm/hr from 4 cm active phase",
"Action line: 4 hours to the right of the alert line",
"If cervical dilation crosses action line → immediate review / intervention"],
0.25, 1.05, 4.7, 3.5, {fs:12.5});
panel(sl, "COMPONENTS OF PARTOGRAM", MID_BLUE,
["FETAL: FHR (every 30 min), liquor colour, moulding (0/+/++/+++), caput",
"LABOUR: Cervical dilation (cm), fetal descent (station), uterine contractions (frequency, duration, strength)",
"MATERNAL: BP (every 4 hrs), pulse (every 30 min), temperature (every 2 hrs), urine output & protein",
"DRUGS: Oxytocin dose and rate, IV fluids, medications given",
"TIME: Recorded every 30–60 minutes from admission"],
5.2, 1.05, 4.55, 3.5, {fs:12});
sl.addShape(pres.ShapeType.rect, { x:0.25, y:4.6, w:9.5, h:0.72, fill:{color:NAVY}, line:{color:NAVY,width:0} });
sl.addText([
{ text:"Moulding grades: ", options:{bold:true, color:GOLD, fontSize:11, fontFace:"Calibri"} },
{ text:"0 = Normal | + = Sutures touching | ++ = Sutures overlapping (reducible) | +++ = Sutures overlapping (non-reducible) → DANGER SIGN", options:{color:WHITE, fontSize:11, fontFace:"Calibri"} }
], { x:0.35, y:4.62, w:9.3, h:0.65, valign:"middle" });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — MANAGEMENT OF FIRST STAGE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Management of First Stage of Labour", "Latent & Active phases — monitoring, analgesia, intervention");
ftr(sl, "8");
panel(sl, "GENERAL MEASURES", BLUE,
["Admit when contractions 3–4 min apart, lasting ≥ 45 sec, with cervical change",
"Obtain detailed obstetric history, vitals baseline",
"Establish IV access; light oral liquids in latent phase",
"Abdominal examination: lie, presentation, station, FHR",
"PV examination (only when necessary — risk of infection)",
"Consent, counselling, and emotional support",
"Position: encourage ambulation in latent phase"],
0.25, 1.05, 4.65, 4.2, {fs:12});
panel(sl, "MONITORING IN ACTIVE PHASE", TEAL,
["FHR every 30 min (low risk) or continuous CTG (high risk)",
"Uterine contractions: frequency, duration, intensity",
"Cervical dilation: PV every 4 hours (or as indicated)",
"Fetal descent: head engagement and station",
"Maternal vitals: BP & pulse q2h; temp q4h",
"Urine: output, protein, ketones every void",
"Partogram documentation every 30–60 minutes"],
5.15, 1.05, 4.6, 4.2, {fs:12});
// Quick fact strip
sl.addShape(pres.ShapeType.rect, { x:0.25, y:5.27, w:9.5, h:0.16, fill:{color:GOLD} });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — FETAL HEART RATE MONITORING
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Fetal Heart Rate Monitoring", "Intrapartum assessment of fetal well-being");
ftr(sl, "9");
// Top row: Normal FHR
sl.addShape(pres.ShapeType.rect, { x:0.25, y:1.05, w:9.5, h:1.2, fill:{color:WHITE}, line:{color:LINE_CLR,width:1} });
sl.addShape(pres.ShapeType.rect, { x:0.25, y:1.05, w:9.5, h:0.38, fill:{color:GREEN} });
sl.addText("NORMAL FHR PARAMETERS (CTG)", { x:0.35, y:1.05, w:9.3, h:0.38, fontSize:12.5, bold:true, color:WHITE, fontFace:"Calibri", valign:"middle" });
sl.addText([
{ text:"Baseline: 110–160 bpm | ", options:{color:DARK} },
{ text:"Variability: 5–25 bpm | ", options:{color:DARK} },
{ text:"Accelerations: ↑ 15 bpm for ≥15 sec (reassuring) | ", options:{color:DARK} },
{ text:"No decelerations (or early decelerations only)", options:{color:DARK} }
].map(x => ({...x, options:{...x.options, fontSize:12, fontFace:"Calibri"}})), { x:0.4, y:1.46, w:9.2, h:0.75, valign:"middle" });
// Decelerations
const decels = [
{ t:"EARLY Decelerations", col:MID_BLUE,
pts:["Onset coincides with contraction onset", "Nadir at peak of contraction", "Due to head compression → vagal reflex", "BENIGN — no action required", "Uniform, mirror-image of contraction"] },
{ t:"VARIABLE Decelerations", col:GOLD,
pts:["Abrupt onset — not timed with contractions", "Due to umbilical cord compression", "V-shaped or W-shaped pattern", "Mild-moderate: usually benign", "Severe (>60 bpm drop, >60 sec): requires action"] },
{ t:"LATE Decelerations", col:ACCENT,
pts:["Onset 30 sec AFTER contraction begins", "Nadir after peak of contraction", "Due to UTEROPLACENTAL INSUFFICIENCY", "OMINOUS sign — urgent assessment", "Requires: O2, lateral position, stop oxytocin, urgent delivery if persistent"] }
];
decels.forEach((d, i) => {
const xPos = 0.25 + i * 3.2;
sl.addShape(pres.ShapeType.rect, { x:xPos, y:2.35, w:3.05, h:3.0, fill:{color:WHITE}, line:{color:LINE_CLR,width:1} });
sl.addShape(pres.ShapeType.rect, { x:xPos, y:2.35, w:3.05, h:0.4, fill:{color:d.col} });
sl.addText(d.t, { x:xPos, y:2.35, w:3.05, h:0.4, fontSize:10.5, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
bullets(sl, d.pts, xPos+0.08, 2.8, 2.9, 2.5, {fs:11.5});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — MANAGEMENT OF SECOND STAGE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Management of Second Stage of Labour", "Full dilatation to delivery of baby");
ftr(sl, "10");
panel(sl, "MANAGEMENT STEPS", BLUE,
["Confirm full dilation by PV examination",
"Position: lithotomy or left lateral (McRoberts if shoulder dystocia risk)",
"FHR every 5 minutes (continuous CTG preferred)",
"Encourage maternal expulsive efforts with contractions",
"Guide maternal breathing: push only when contracting",
"Support perineum — modified Ritgen manoeuvre as head crowns",
"Episiotomy only if: large baby, rigid perineum, imminent tear, fetal distress",
"After head delivery: feel for nuchal cord; suction if meconium",
"Deliver anterior shoulder (gentle downward traction) → posterior shoulder → body",
"Delayed cord clamping: wait 1–3 min after delivery"],
0.25, 1.05, 4.7, 4.2, {fs:12});
panel(sl, "EPISIOTOMY", TEAL,
["Surgical incision of perineum to enlarge vaginal outlet",
"Types: Mediolateral (more common in India/UK) vs. Median",
"Mediolateral: 45° from midline → less risk of 3rd/4th degree tear",
"Indications: Fetal distress, large baby, rigid perineum, operative delivery",
"Routine episiotomy is NOT recommended (ACOG/WHO)",
"Repair: chromic catgut/Vicryl — close in layers",
"Complications: haematoma, infection, dyspareunia, fistula"],
5.2, 1.05, 4.55, 4.2, {fs:12});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — MANAGEMENT OF THIRD STAGE (AMTSL)
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Management of Third Stage — AMTSL", "Active Management of Third Stage of Labour (WHO recommended)");
ftr(sl, "11");
// AMTSL steps
sl.addShape(pres.ShapeType.rect, { x:0.25, y:1.05, w:9.5, h:0.68, fill:{color:NAVY} });
sl.addText("AMTSL = 3 Steps: (1) Uterotonic drug within 1 min + (2) Controlled Cord Traction + (3) Uterine Massage", {
x:0.35, y:1.06, w:9.3, h:0.65, fontSize:13, bold:true, color:GOLD, fontFace:"Calibri", valign:"middle"
});
const cols3 = [
{ t:"STEP 1: UTEROTONIC", col:MID_BLUE,
pts:["Oxytocin 10 IU IM — FIRST CHOICE (within 1 min of delivery)",
"Ergometrine 0.2 mg IM if oxytocin unavailable (avoid in hypertension)",
"Misoprostol 600 μg PO if no injectables available",
"Carbetocin: long-acting oxytocin analogue (CS/selected cases)",
"Reduces blood loss by 40%, reduces need for additional uterotonics"] },
{ t:"STEP 2: CONTROLLED CORD TRACTION", col:TEAL,
pts:["Wait for uterine contraction before applying traction",
"Brandt-Andrews technique: counter-traction on suprapubic area",
"Apply traction in downward and backward direction",
"Do NOT pull without uterine contraction (risk of inversion)",
"Placenta may take 5–10 minutes to separate — be patient"] },
{ t:"STEP 3: UTERINE MASSAGE", col:ACCENT,
pts:["After placenta delivers — palpate and massage fundus",
"Confirm uterus is firm and contracted",
"Repeat 2-hourly for first 4 hours",
"Check completeness of placenta and membranes",
"Assess blood loss — normal <500 mL (vaginal), <1000 mL (CS)"] }
];
cols3.forEach((c, i) => {
const xPos = 0.18 + i * 3.27;
panel(sl, c.t, c.col, c.pts, xPos, 1.82, 3.1, 3.55, {fs:11.5});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — ABNORMAL LABOUR / DYSTOCIA (brief)
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Abnormalities of Labour — Dystocia", "Deviations from normal — recognition and action");
ftr(sl, "12");
const rows = [
["Prolonged latent phase", "Nullip > 20 hrs; Multip > 14 hrs", "Assess adequacy of contractions; augment with oxytocin or morphine rest"],
["Protracted active phase", "< 1.2 cm/hr (nullip); < 1.5 cm/hr (multip)", "Assess CPD, malpresentation; ARM + oxytocin augmentation"],
["Arrest of active phase", "No progress for ≥ 2 hrs in active phase", "Rule out CPD; oxytocin augment; reassess in 2 hrs; LSCS if no progress"],
["Prolonged 2nd stage", "> 2 hrs (nullip no epidural); > 3 hrs (epidural)", "Assess descent and rotation; consider instrumental delivery (forceps/vacuum)"],
["Retained placenta", "Placenta not delivered in 30 min", "Manual removal under analgesia; oxytocin IM; check for placenta accreta"],
["Shoulder dystocia", "Head delivers but shoulders impacted", "HELPERR manoeuvre: McRoberts + suprapubic pressure; episiotomy; rotation"],
["Cord prolapse", "Cord below presenting part after membrane rupture", "EMERGENCY: lift presenting part off cord; immediate LSCS"],
["Uterine rupture", "Sudden scar pain, FHR abnormality, haemorrhage", "Immediate LSCS + uterine repair or hysterectomy; blood transfusion"]
];
const cW = [2.4, 2.5, 4.85];
const xS = [0.15, 2.57, 5.1];
["ABNORMALITY","DEFINITION / LIMIT","MANAGEMENT"].forEach((h,ci) => {
sl.addShape(pres.ShapeType.rect, { x:xS[ci], y:1.05, w:cW[ci], h:0.36, fill:{color:NAVY}, line:{color:LINE_CLR,width:0.5} });
sl.addText(h, { x:xS[ci]+0.04, y:1.05, w:cW[ci]-0.06, h:0.36, fontSize:11, bold:true, color:WHITE, fontFace:"Calibri", align:"center", valign:"middle" });
});
rows.forEach((row, ri) => {
const bg = ri%2===0 ? WHITE : LIGHT_BLUE;
const emergencyRow = ri>=6;
row.forEach((cell, ci) => {
sl.addShape(pres.ShapeType.rect, { x:xS[ci], y:1.43+ri*0.53, w:cW[ci], h:0.51, fill:{color: emergencyRow&&ci===0 ? "#FFEAEA" : (ci===0 ? LIGHT_BLUE : bg)}, line:{color:LINE_CLR,width:0.5} });
sl.addText(cell, { x:xS[ci]+0.05, y:1.43+ri*0.53, w:cW[ci]-0.08, h:0.51, fontSize:9.5, bold:ci===0, color: emergencyRow&&ci===0 ? ACCENT : (ci===0 ? NAVY : DARK), fontFace:"Calibri", valign:"middle", margin:[2,3,2,3] });
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — PAIN RELIEF IN LABOUR
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Pain Relief in Labour — Analgesia Options", "Non-pharmacological and pharmacological methods");
ftr(sl, "13");
panel(sl, "NON-PHARMACOLOGICAL", GREEN,
["Psychological preparation (childbirth education / Lamaze)",
"Continuous support (doula / trained birth companion)",
"Ambulation and position changes in latent phase",
"Warm baths / hydrotherapy",
"TENS (Transcutaneous Electrical Nerve Stimulation)",
"Relaxation techniques, breathing exercises",
"Acupuncture — limited but positive evidence"],
0.25, 1.05, 3.05, 4.2, {fs:12});
panel(sl, "PHARMACOLOGICAL", BLUE,
["Nitrous oxide (Entonox 50:50): inhaled; rapid onset/offset; no neonatal depression",
"Pethidine 75–100 mg IM: commonly used; neonatal respiratory depression if given < 4 hrs before delivery",
"Tramadol / Morphine IM: less popular; similar concerns",
"Pudendal nerve block: 2nd stage, instrumental delivery",
"Paracervical block: 1st stage analgesia (limited use)"],
3.6, 1.05, 3.15, 4.2, {fs:12});
panel(sl, "EPIDURAL ANALGESIA (Gold Standard)", NAVY,
["Low-dose epidural (bupivacaine 0.1% + fentanyl) — most effective",
"Does NOT ↑ LSCS rate (ACOG 2019)",
"May prolong 2nd stage by 1 hr; increases instrument delivery slightly",
"Contraindications: coagulopathy, thrombocytopenia, local infection, patient refusal",
"Complications: hypotension, headache (dural tap), motor block, pruritus (with opioids)",
"Patient controlled epidural analgesia (PCEA) — most flexible"],
7.05, 1.05, 2.7, 4.2, {fs:11});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — KEY NUMBERS & SUMMARY TABLE
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:SOFT_BG} });
hdr(sl, "Key Numbers in Normal Labour — Quick Reference", "MBBS exam essentials");
ftr(sl, "14");
const data = [
["Parameter", "Nullipara", "Multipara"],
["Latent phase (max)", "≤ 20 hours", "≤ 14 hours"],
["Active phase progress", "≥ 1.2 cm/hr", "≥ 1.5 cm/hr"],
["2nd stage (max, no epidural)", "≤ 2 hours", "≤ 1 hour"],
["2nd stage (max, with epidural)", "≤ 3 hours", "≤ 2 hours"],
["3rd stage (max)", "≤ 30 minutes", "≤ 30 minutes"],
["Normal blood loss", "< 500 mL (vaginal)", "< 500 mL (vaginal)"],
["Normal FHR baseline", "110–160 bpm", "110–160 bpm"],
["Active phase begins at", "~6 cm", "Often earlier"],
["Head crowning station", "+4 cm from ischial spines", "+4 cm from ischial spines"],
["Cardinal movements", "7 steps (engagement → expulsion)", "Same"],
["Bishop score — favourable", "≥ 9 (or ≥ 6–8 acceptable)", "Same"],
["AMTSL oxytocin dose", "10 IU IM within 1 min of delivery", "Same"],
["Episiotomy angle (mediolateral)", "45° from midline", "Same"],
];
const cW = [3.8, 3.0, 3.0];
const xS = [0.18, 3.98, 6.98];
data.forEach((row, ri) => {
const isH = ri===0;
const bg = isH ? NAVY : (ri%2===0 ? WHITE : LIGHT_BLUE);
row.forEach((cell, ci) => {
sl.addShape(pres.ShapeType.rect, { x:xS[ci], y:1.05+ri*0.3, w:cW[ci], h:0.29, fill:{color: ci===0&&!isH ? LIGHT_BLUE : bg}, line:{color:LINE_CLR,width:0.5} });
sl.addText(cell, { x:xS[ci]+0.05, y:1.05+ri*0.3, w:cW[ci]-0.08, h:0.29, fontSize: isH?11:10, bold: isH||(ci===0), color: isH ? WHITE : (ci===0 ? NAVY : DARK), fontFace:"Calibri", valign:"middle", margin:[1,3,1,3] });
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — CLOSING
// ════════════════════════════════════════════════════════════════════════════
{
let sl = pres.addSlide();
sl.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:NAVY} });
sl.addShape(pres.ShapeType.ellipse, { x:-1.5, y:2.8, w:4.5, h:4.5, fill:{color:BLUE}, line:{color:BLUE,width:0} });
sl.addShape(pres.ShapeType.ellipse, { x:7.5, y:-1.5, w:4, h:4, fill:{color:MID_BLUE}, line:{color:MID_BLUE,width:0} });
sl.addShape(pres.ShapeType.rect, { x:0, y:2.6, w:10, h:0.07, fill:{color:GOLD} });
sl.addText("THANK YOU", { x:1, y:0.85, w:8, h:1.0, fontSize:44, bold:true, color:WHITE, fontFace:"Calibri", align:"center", charSpacing:6 });
sl.addText("Normal Labour — Obstetrics & Gynaecology | MBBS", { x:1, y:1.75, w:8, h:0.5, fontSize:15, color:GOLD, fontFace:"Calibri", align:"center", italic:true });
const refs = [
"Creasy & Resnik's Maternal-Fetal Medicine, 9th Edition",
"Textbook of Family Medicine, 9th Edition (Rakel)",
"Williams Obstetrics, 26th Edition",
"ACOG Practice Bulletins on Labor Management"
];
refs.forEach((r, i) => {
sl.addText(`• ${r}`, { x:2, y:2.9+i*0.42, w:6, h:0.38, fontSize:11.5, color:"A8C8E8", fontFace:"Calibri", align:"center" });
});
sl.addText("Topics Covered: Definition · Prerequisites · Onset · Stages · Cardinal Movements · Bishop Score · Partogram · AMTSL · Analgesia · Dystocia", {
x:0.5, y:5.05, w:9, h:0.4, fontSize:8.5, color:"5A7EA0", fontFace:"Calibri", align:"center"
});
}
// ─── SAVE ──────────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/normal-labor-ppt/Normal_Labour_OBG_MBBS.pptx" })
.then(() => console.log("✅ Saved!"))
.catch(e => console.error("Error:", e));
mkdir -p /home/daytona/workspace/normal-labor-ppt && node /home/daytona/workspac…
ls -lh /home/daytona/workspace/normal-labor-ppt/Normal_Labour_OBG_MBBS.pptx
Normal Labour OBG MBBS
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Title Slide |
| 2 | Definition & Prerequisites (3 Ps + criteria for normal labour) |
| 3 | Onset of Labour — Biochemical triggers & premonitory signs; False vs True labour |
| 4 | Stages of Labour — All 4 stages with durations (Friedman's classification) |
| 5 | Cardinal Movements of Labour — All 7 steps with descriptions |
| 6 | Bishop Score — Complete table + score interpretation (favourable/unfavourable) |
| 7 | Partogram (WHO Modified) — Components + moulding grades |
| 8 | Management of First Stage — General measures + active phase monitoring |
| 9 | Fetal Heart Rate Monitoring — Normal CTG + Early/Variable/Late decelerations |
| 10 | Management of Second Stage — Steps + Episiotomy (types, indications, repair) |
| 11 | Management of Third Stage — AMTSL (3 steps with details) |
| 12 | Dystocia / Abnormal Labour — 8-row table with definitions + management |
| 13 | Pain Relief in Labour — Non-pharma + Pharmacological + Epidural (gold standard) |
| 14 | Key Numbers Quick Reference — Exam-ready table (nullip vs multip) |
| 15 | Thank You / References |
Give answers according to distribution of marks in the form of flowcharts and table wherever its necessary by referring Paediatrics ghai mbbs textbook
| Q | Marks | Format Used |
|---|---|---|
| Q1 (Short Stature) | 10 | Table of causes + 2 Flowcharts (causes, management) |
| Q2 (Asthma) | 10 | Table of triggers + Flowchart (acute severe management) + Table (prevention steps) |
| Q3 (Febrile Seizures) | 5 | Definition + Classification table + Management flowchart |
| Q4 (Thalassemia investigations) | 5 | Investigative flowchart + Summary table |
| Q5 (AFP differential) | 5 | Flowchart + Detailed table by site of lesion |
| Q6 (Dehydration) | 5 | Assessment table + WHO Plan B management flowchart |
| Q7 (Nadas Criteria) | 5 | Table + Interpretation criteria |
| Q8 (NACP) | 5 | Table of groups and supplements + key recommendations |
| Q9 (Rotavirus Vaccine) | 5 | Full feature table |
| Q10 (Cephalhematoma) | 5 | Features + Flowchart + Comparison table (vs Caput) |
| Q11–Q20 | 3 each | Concise lists, tables, and mnemonics |