Detailed extensive lecture seminar ppt on normal labour

Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Running Command

mkdir -p /tmp/workspace/normal-labour-ppt && ls /tmp/workspace/normal-labour-ppt/

Writing File

~/normal-labour-ppt/build_ppt.py

#!/usr/bin/env python3
"""
Extensive Lecture Seminar PPT on Normal Labour
"""

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import copy

# ── Colour Palette ──────────────────────────────────────────────────────────
NAVY      = RGBColor(0x0D, 0x2B, 0x55)   # slide backgrounds / headers
TEAL      = RGBColor(0x00, 0x7B, 0x83)   # accent boxes
GOLD      = RGBColor(0xE8, 0xA8, 0x00)   # highlight / bullets
WHITE     = RGBColor(0xFF, 0xFF, 0xFF)
LIGHT_BG  = RGBColor(0xF0, 0xF6, 0xF8)  # content area BG
DARK_TEXT = RGBColor(0x1A, 0x1A, 0x2E)
MID_GREY  = RGBColor(0x55, 0x66, 0x77)
RED_ACC   = RGBColor(0xC0, 0x39, 0x2B)
GREEN_ACC = RGBColor(0x1A, 0x7A, 0x4A)

W = Inches(13.333)
H = Inches(7.5)

prs = Presentation()
prs.slide_width  = W
prs.slide_height = H
blank = prs.slide_layouts[6]

# ── Helpers ──────────────────────────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_color, border_color=None, border_pt=0):
    from pptx.util import Pt as UPt
    shape = slide.shapes.add_shape(1, x, y, w, h)  # MSO_SHAPE_TYPE.RECTANGLE = 1
    shape.fill.solid()
    shape.fill.fore_color.rgb = fill_color
    if border_color:
        shape.line.color.rgb = border_color
        shape.line.width = UPt(border_pt)
    else:
        shape.line.fill.background()
    return shape

def add_text(slide, text, x, y, w, h, font_name="Calibri", font_size=18,
             bold=False, italic=False, color=WHITE, align=PP_ALIGN.LEFT,
             wrap=True, v_anchor=MSO_ANCHOR.TOP):
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.vertical_anchor = v_anchor
    tf.margin_left  = Inches(0.05)
    tf.margin_right = Inches(0.05)
    tf.margin_top   = Inches(0.02)
    tf.margin_bottom= Inches(0.02)
    p = tf.paragraphs[0]
    p.alignment = align
    run = p.add_run()
    run.text = text
    run.font.name  = font_name
    run.font.size  = Pt(font_size)
    run.font.bold  = bold
    run.font.italic= italic
    run.font.color.rgb = color
    return tb

def add_multi_para(slide, lines, x, y, w, h, font_name="Calibri", font_size=16,
                   bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT,
                   bullet_char="", line_spacing_pt=None):
    """lines = list of (text, bold_override, size_override, color_override, indent)"""
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left  = Inches(0.08)
    tf.margin_right = Inches(0.05)
    tf.margin_top   = Inches(0.04)
    tf.margin_bottom= Inches(0.04)
    first = True
    for item in lines:
        if isinstance(item, str):
            txt = item; b = bold; sz = font_size; clr = color; indent = 0
        else:
            txt  = item[0]
            b    = item[1] if len(item) > 1 else bold
            sz   = item[2] if len(item) > 2 else font_size
            clr  = item[3] if len(item) > 3 else color
            indent = item[4] if len(item) > 4 else 0
        if first:
            p = tf.paragraphs[0]
            first = False
        else:
            p = tf.add_paragraph()
        p.alignment = align
        if line_spacing_pt:
            from pptx.util import Pt as UPt
            p.line_spacing = UPt(line_spacing_pt)
        if indent:
            from pptx.util import Inches as UI
            p.level = indent
        run = p.add_run()
        run.text = (bullet_char + txt) if (bullet_char and not txt.startswith("  ")) else txt
        run.font.name  = font_name
        run.font.size  = Pt(sz)
        run.font.bold  = b
        run.font.color.rgb = clr
    return tb

def header_band(slide, title, subtitle=None):
    """Dark navy top band with title"""
    add_rect(slide, 0, 0, W, Inches(1.3), NAVY)
    add_rect(slide, 0, Inches(1.3), W, Inches(0.06), GOLD)
    add_text(slide, title, Inches(0.35), Inches(0.12), Inches(12.5), Inches(0.8),
             font_size=28, bold=True, color=WHITE, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)
    if subtitle:
        add_text(slide, subtitle, Inches(0.35), Inches(0.82), Inches(12.5), Inches(0.4),
                 font_size=15, italic=True, color=GOLD, align=PP_ALIGN.LEFT)

def content_bg(slide):
    add_rect(slide, 0, Inches(1.36), W, Inches(6.14), LIGHT_BG)

def footer(slide, text="Normal Labour — Lecture Seminar"):
    add_rect(slide, 0, Inches(7.2), W, Inches(0.3), NAVY)
    add_text(slide, text, Inches(0.3), Inches(7.21), Inches(10), Inches(0.28),
             font_size=10, color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.LEFT)
    add_text(slide, "© 2026", Inches(12.5), Inches(7.21), Inches(0.8), Inches(0.28),
             font_size=10, color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.RIGHT)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 1 — TITLE SLIDE
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, NAVY)
add_rect(s, 0, Inches(0), W, Inches(0.08), GOLD)
add_rect(s, 0, Inches(7.42), W, Inches(0.08), GOLD)
# Decorative teal block left
add_rect(s, 0, Inches(0.08), Inches(0.18), Inches(7.34), TEAL)
# Central white card
add_rect(s, Inches(0.5), Inches(1.5), Inches(12.33), Inches(4.8),
         RGBColor(0xFF,0xFF,0xFF), border_color=GOLD, border_pt=1.5)
add_text(s, "NORMAL LABOUR",
         Inches(0.7), Inches(1.75), Inches(11.9), Inches(1.3),
         font_name="Calibri", font_size=52, bold=True, color=NAVY,
         align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
add_rect(s, Inches(2.5), Inches(3.0), Inches(8.33), Inches(0.06), TEAL)
add_text(s, "A Comprehensive Lecture Seminar",
         Inches(0.7), Inches(3.12), Inches(11.9), Inches(0.5),
         font_size=22, italic=True, color=TEAL,
         align=PP_ALIGN.CENTER)
add_text(s, "Definition  •  Causes of Onset  •  Stages & Mechanisms  •  Management  •  Complications",
         Inches(0.7), Inches(3.72), Inches(11.9), Inches(0.5),
         font_size=14, color=MID_GREY, align=PP_ALIGN.CENTER)
add_text(s, "Department of Obstetrics & Gynaecology",
         Inches(0.7), Inches(5.0), Inches(11.9), Inches(0.35),
         font_size=16, bold=True, color=NAVY, align=PP_ALIGN.CENTER)
add_text(s, "Lecture Seminar  |  2026",
         Inches(0.7), Inches(5.38), Inches(11.9), Inches(0.3),
         font_size=13, color=MID_GREY, align=PP_ALIGN.CENTER)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 2 — LEARNING OBJECTIVES
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Learning Objectives", "By the end of this seminar, participants will be able to:")
footer(s)
objs = [
    ("Define normal labour and distinguish it from abnormal labour", False, 17, DARK_TEXT, 0),
    ("Describe the causes / theories for the onset of labour", False, 17, DARK_TEXT, 0),
    ("Explain the 3 stages of labour with their clinical features and timings", False, 17, DARK_TEXT, 0),
    ("Describe the cardinal movements (mechanism) of labour", False, 17, DARK_TEXT, 0),
    ("Outline the management of each stage of labour (Active Management)", False, 17, DARK_TEXT, 0),
    ("Discuss the powers, passages, and passenger (3 P's)", False, 17, DARK_TEXT, 0),
    ("Identify and manage complications of normal labour", False, 17, DARK_TEXT, 0),
    ("Apply AMTSL (Active Management of Third Stage of Labour)", False, 17, DARK_TEXT, 0),
]
lines = []
for i, o in enumerate(objs, 1):
    lines.append((f"{i}.  {o[0]}", o[1], o[2], o[3], o[4]))
add_multi_para(s, lines,
               Inches(0.5), Inches(1.5), Inches(12.3), Inches(5.7),
               font_size=17, line_spacing_pt=26)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 3 — DEFINITION OF NORMAL LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Definition of Normal Labour")
footer(s)

# Gold definition box
add_rect(s, Inches(0.4), Inches(1.5), Inches(12.53), Inches(1.4),
         RGBColor(0xFF,0xF3,0xCC), border_color=GOLD, border_pt=2)
add_text(s, '"Normal labour (eutocia) is spontaneous onset at term (37–42 weeks), with a single fetus in vertex presentation, '
            'progressing to full dilation and effacement, culminating in vaginal delivery of the fetus and placenta within '
            '18 hours, without undue risk to mother or baby."',
         Inches(0.6), Inches(1.55), Inches(12.1), Inches(1.3),
         font_size=15, italic=True, color=DARK_TEXT, align=PP_ALIGN.LEFT, wrap=True)
add_text(s, "— WHO / Williams Obstetrics",
         Inches(0.6), Inches(2.75), Inches(12.1), Inches(0.3),
         font_size=12, italic=True, color=TEAL)

criteria = [
    ("Spontaneous onset", "No induction; uterine contractions begin without medical intervention"),
    ("Term gestation", "37 completed weeks to 42 weeks (259–294 days)"),
    ("Single fetus", "Singleton pregnancy"),
    ("Vertex presentation", "Fetal head presenting first (occiput anterior)"),
    ("Progressive dilation", "Cervical dilation proceeds at ≥1 cm/hr in active phase"),
    ("Vaginal delivery", "Delivery of fetus AND placenta vaginally"),
    ("Duration ≤18 hrs", "Primigravida ≤18 h; Multigravida ≤12 h"),
    ("No complications", "No serious risk to mother or neonate"),
]
col1_x = Inches(0.4);  col2_x = Inches(3.8)
row_h = Inches(0.43); start_y = Inches(3.15)
for i, (k, v) in enumerate(criteria):
    y = start_y + i * row_h
    if i % 2 == 0:
        add_rect(s, Inches(0.35), y, Inches(12.63), row_h, RGBColor(0xE8,0xF4,0xF8))
    add_text(s, k, col1_x, y + Inches(0.04), Inches(3.2), row_h - Inches(0.06),
             font_size=13, bold=True, color=TEAL)
    add_text(s, v, col2_x, y + Inches(0.04), Inches(9.3), row_h - Inches(0.06),
             font_size=13, color=DARK_TEXT)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 4 — CAUSES / THEORIES OF ONSET OF LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Causes / Theories of Onset of Labour")
footer(s)

theories = [
    ("Uterine Distension Theory", TEAL,
     "Overdistension of uterus triggers contraction. Seen in twins, polyhydramnios."),
    ("Progesterone Withdrawal Theory", NAVY,
     "Fall in progesterone (functional withdrawal) removes uterine quiescence → prostaglandin synthesis ↑."),
    ("Oestrogen Dominance", TEAL,
     "Rising oestrogen:progesterone ratio → ↑ oxytocin receptors, ↑ gap junctions, ↑ PG synthesis."),
    ("Oxytocin Theory", NAVY,
     "Ferguson reflex: fetal head pressure on cervix → posterior pituitary → oxytocin release. Oxytocin receptors ↑ 100-fold at term."),
    ("Prostaglandin Theory", TEAL,
     "PGE₂ & PGF₂α (from decidua, fetal membranes) → cervical ripening + uterine contractions. Inhibition by NSAIDs delays labour."),
    ("Fetal Cortisol Theory", NAVY,
     "Maturation of fetal HPA axis → DHEAS → placental oestrogen → labour initiation. (Major theory in humans)"),
    ("CRH Theory", TEAL,
     "Placental CRH rises exponentially near term → stimulates PG and oxytocin; acts as a 'placental clock'."),
    ("Mechanical Factors", NAVY,
     "Stretching of lower segment, presenting part pressure, Braxton Hicks escalation."),
]

cols = 2; rows = 4
box_w = Inches(6.1); box_h = Inches(1.3)
gap_x = Inches(0.2); gap_y = Inches(0.18)
start_x = Inches(0.3); start_y = Inches(1.52)

for i, (title, clr, desc) in enumerate(theories):
    row = i // cols; col = i % cols
    x = start_x + col * (box_w + gap_x)
    y = start_y + row * (box_h + gap_y)
    add_rect(s, x, y, box_w, box_h, clr)
    add_rect(s, x, y, box_w, Inches(0.32), RGBColor(
        min(clr[0]+40,255), min(clr[1]+40,255), min(clr[2]+40,255)))
    add_text(s, title, x + Inches(0.1), y + Inches(0.02),
             box_w - Inches(0.2), Inches(0.28),
             font_size=13, bold=True, color=WHITE)
    add_text(s, desc, x + Inches(0.1), y + Inches(0.34),
             box_w - Inches(0.2), box_h - Inches(0.38),
             font_size=12, color=WHITE, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 5 — THE 3 P's OF LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "The 3 P's of Labour", "Powers · Passenger · Passage")
footer(s)

# Three columns
cols_data = [
    ("POWERS", TEAL, [
        "Primary Powers:",
        "• Uterine contractions",
        "  - Frequency: 3–5 / 10 min",
        "  - Duration: 45–60 sec",
        "  - Intensity: >50 mmHg",
        "  - Montevideo units: >200",
        "",
        "Secondary Powers:",
        "• Voluntary bearing-down effort",
        "• Valsalva manoeuvre",
        "• Diaphragm & abdominal muscles",
    ]),
    ("PASSENGER", NAVY, [
        "Fetus:",
        "• Fetal attitude: flexion",
        "• Fetal lie: longitudinal",
        "• Presentation: vertex (cephalic)",
        "• Position: LOA / LOT (most common)",
        "• Station: relationship to ischial spines",
        "",
        "Fetal head:",
        "• Suboccipitobregmatic: 9.5 cm",
        "• Bitemporal: 8.0 cm",
        "• Biparietal: 9.5 cm",
        "• Occipitomental: 13.5 cm",
    ]),
    ("PASSAGE", RED_ACC, [
        "Bony Pelvis:",
        "• Pelvic inlet (AP): 11 cm",
        "• Transverse inlet: 13 cm",
        "• Obstetric conjugate: ≥10 cm",
        "• Interspinous: 10.5 cm",
        "• Intertuberous: 11 cm",
        "• Sub-pubic angle: 90–100°",
        "",
        "Soft Tissues:",
        "• Cervix — effacement & dilation",
        "• Pelvic floor muscles",
        "• Vaginal walls & perineum",
    ]),
]
box_w = Inches(4.0); start_x = Inches(0.3); start_y = Inches(1.5)
box_h = Inches(5.7)
for i, (title, clr, items) in enumerate(cols_data):
    x = start_x + i * (box_w + Inches(0.22))
    add_rect(s, x, start_y, box_w, box_h, clr)
    add_text(s, title, x, start_y, box_w, Inches(0.5),
             font_size=20, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
             v_anchor=MSO_ANCHOR.MIDDLE)
    lines = [(it, False, 12, WHITE, 0) for it in items]
    add_multi_para(s, lines, x + Inches(0.1), start_y + Inches(0.55),
                   box_w - Inches(0.2), box_h - Inches(0.6),
                   font_size=12, color=WHITE, line_spacing_pt=18)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 6 — STAGES OF LABOUR (OVERVIEW)
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Stages of Labour — Overview")
footer(s)

stages = [
    ("FIRST STAGE", TEAL,
     "Onset of true labour → Full cervical dilation (10 cm)",
     [("Latent phase", "0–3 cm; ≤8 h (P) / ≤6 h (M)"),
      ("Active phase", "3–10 cm; ≥1 cm/hr"),
      ("Transition", "8–10 cm; most intense")]),
    ("SECOND STAGE", NAVY,
     "Full dilation → Delivery of the baby",
     [("Passive phase", "Rotation, descent"),
      ("Active phase", "Bearing down begins"),
      ("Duration", "≤2 h (P) / ≤1 h (M)")]),
    ("THIRD STAGE", RED_ACC,
     "Delivery of baby → Expulsion of placenta & membranes",
     [("Duration", "≤30 min (active) / ≤1 h (expectant)"),
      ("Signs of separation", "Schultze / Matthews Duncan"),
      ("AMTSL", "Key intervention")]),
    ("FOURTH STAGE", GREEN_ACC,
     "First 1–2 hours post-delivery — critical monitoring period",
     [("Vital signs", "BP, pulse, uterine tone"),
      ("PPH watch", "Blood loss <500 mL (vaginal)"),
      ("Bonding", "Skin-to-skin, breastfeeding initiation")]),
]

box_w = Inches(3.0); bh = Inches(5.7); sx = Inches(0.2); sy = Inches(1.52)
for i, (title, clr, desc, pts) in enumerate(stages):
    x = sx + i * (box_w + Inches(0.15))
    add_rect(s, x, sy, box_w, bh, clr)
    add_text(s, title, x, sy, box_w, Inches(0.5),
             font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
             v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x, sy + Inches(0.5), box_w, Inches(0.04),
             RGBColor(255,255,255))
    add_text(s, desc, x + Inches(0.1), sy + Inches(0.58),
             box_w - Inches(0.2), Inches(0.8),
             font_size=11.5, italic=True, color=RGBColor(0xDD,0xEE,0xFF),
             wrap=True)
    for j, (k, v) in enumerate(pts):
        yy = sy + Inches(1.45) + j * Inches(0.55)
        add_rect(s, x + Inches(0.1), yy, box_w - Inches(0.2), Inches(0.5),
                 RGBColor(255,255,255))
        add_text(s, k, x + Inches(0.15), yy + Inches(0.02),
                 box_w - Inches(0.3), Inches(0.22),
                 font_size=11, bold=True, color=clr)
        add_text(s, v, x + Inches(0.15), yy + Inches(0.24),
                 box_w - Inches(0.3), Inches(0.22),
                 font_size=10.5, color=DARK_TEXT)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 7 — FIRST STAGE OF LABOUR (DETAILED)
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "First Stage of Labour", "Onset of true labour → Full cervical dilation (10 cm)")
footer(s)

# Left column — phases
add_rect(s, Inches(0.3), Inches(1.5), Inches(6.0), Inches(5.7), TEAL)
add_text(s, "PHASES", Inches(0.3), Inches(1.5), Inches(6.0), Inches(0.42),
         font_size=16, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
         v_anchor=MSO_ANCHOR.MIDDLE)

phase_data = [
    ("Latent Phase", "0 – 3 cm",
     ["Irregular contractions becoming regular",
      "Cervical effacement (thinning) predominates",
      "Duration: Primigravida ≤8 h; Multigravida ≤6 h",
      "Prolonged latent phase: >20 h (P) / >14 h (M)"]),
    ("Active Phase", "3 – 10 cm",
     ["Regular contractions: 3–5 / 10 min, 45–60 s",
      "Cervical dilation: ≥1 cm/hr (Friedman curve)",
      "Show: blood-stained mucus plug",
      "Membranes may rupture (ARM or SROM)",
      "Partograph monitoring mandatory"]),
    ("Transition", "8 – 10 cm",
     ["Most intense phase; urge to push may begin",
      "Complete effacement occurs",
      "Duration: 30–60 min"]),
]
py = Inches(1.98)
for title, dil, pts in phase_data:
    add_rect(s, Inches(0.4), py, Inches(5.8), Inches(0.32),
             RGBColor(0,100,110))
    add_text(s, f"{title}  ({dil})", Inches(0.5), py + Inches(0.02),
             Inches(5.6), Inches(0.28), font_size=13, bold=True, color=WHITE)
    py += Inches(0.34)
    for pt in pts:
        add_text(s, f"• {pt}", Inches(0.5), py, Inches(5.6), Inches(0.28),
                 font_size=11.5, color=WHITE)
        py += Inches(0.28)
    py += Inches(0.1)

# Right column — key concepts
add_rect(s, Inches(6.5), Inches(1.5), Inches(6.5), Inches(5.7), LIGHT_BG)
right_items = [
    ("True vs False Labour", TEAL, [
        "True: Regular, ↑ freq & intensity, cervical change, not relieved by sedation",
        "False: Irregular, no cervical change (Braxton Hicks)",
    ]),
    ("Show & ROM", TEAL, [
        "Bloody show: cervical mucus + blood",
        "SROM: spontaneous rupture of membranes",
        "ARM: artificial (amniotomy)",
        "PROM / PPROM: premature / preterm",
    ]),
    ("Partograph", TEAL, [
        "WHO partograph: monitor labour progress",
        "Alert line: 1 cm/hr from active phase",
        "Action line: 4 hrs to the right of alert",
        "Records: FHR, contractions, dilation, descent, BP, urine",
    ]),
    ("Fetal Monitoring", TEAL, [
        "Intermittent auscultation (low risk)",
        "CTG / EFM (high risk, augmented labour)",
        "Normal FHR: 110–160 bpm",
        "Late decels / variable decels = fetal distress",
    ]),
]
ry = Inches(1.55)
for title, clr, pts in right_items:
    add_rect(s, Inches(6.55), ry, Inches(6.3), Inches(0.3), clr)
    add_text(s, title, Inches(6.65), ry + Inches(0.02),
             Inches(6.1), Inches(0.26), font_size=13, bold=True, color=WHITE)
    ry += Inches(0.32)
    for pt in pts:
        add_text(s, f"  • {pt}", Inches(6.65), ry, Inches(6.1), Inches(0.26),
                 font_size=11, color=DARK_TEXT)
        ry += Inches(0.26)
    ry += Inches(0.08)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 8 — CARDINAL MOVEMENTS OF LABOUR (MECHANISM)
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Cardinal Movements (Mechanism) of Labour",
            "Vertex Presentation — Left Occiput Anterior (LOA)")
footer(s)

movements = [
    ("1", "Engagement",       TEAL,    "BPD passes through pelvic inlet. Presenting part at/below ischial spines (0 station). Occurs before labour in primigravida, during labour in multigravida."),
    ("2", "Descent",          NAVY,    "Continuous throughout labour. Driven by uterine contractions + bearing down. Measured in fifths abdominally or stations vaginally."),
    ("3", "Flexion",          TEAL,    "Chin contacts chest. Smallest diameter presents (suboccipitobregmatic 9.5 cm). Occurs passively as head meets pelvic floor resistance."),
    ("4", "Internal Rotation",NAVY,    "Occiput rotates anteriorly from LOT/LOA → OA (under pubic symphysis). Driven by levator ani muscles. Completes at level of ischial spines."),
    ("5", "Extension",        TEAL,    "Head extends under symphysis pubis. Occiput, bregma, face, chin born in sequence. Nape of neck acts as hypomochlion (fulcrum)."),
    ("6", "Restitution",      NAVY,    "Head rotates 45° back to its original relationship with shoulders (LOA → left). Untwisting of neck after internal rotation."),
    ("7", "External Rotation",TEAL,    "Shoulders rotate to AP diameter. Head rotates a further 45° (total 90°). Anterior shoulder now under symphysis."),
    ("8", "Expulsion",        NAVY,    "Anterior shoulder born under pubis → posterior shoulder born over perineum → trunk and lower limbs follow by lateral flexion."),
]

bw = Inches(5.9); bh = Inches(0.72); sx = Inches(0.3); sy = Inches(1.5)
for i, (num, title, clr, desc) in enumerate(movements):
    col = i % 2; row = i // 2
    x = sx + col * (bw + Inches(0.3))
    y = sy + row * (bh + Inches(0.1))
    add_rect(s, x, y, Inches(0.5), bh, clr)
    add_text(s, num, x, y, Inches(0.5), bh,
             font_size=18, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
             v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x + Inches(0.5), y, bw - Inches(0.5), bh, LIGHT_BG)
    add_text(s, title, x + Inches(0.55), y + Inches(0.02),
             bw - Inches(0.6), Inches(0.28),
             font_size=13, bold=True, color=clr)
    add_text(s, desc, x + Inches(0.55), y + Inches(0.3),
             bw - Inches(0.6), bh - Inches(0.32),
             font_size=10.5, color=DARK_TEXT, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 9 — SECOND STAGE OF LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Second Stage of Labour",
            "Full cervical dilation → Delivery of the fetus")
footer(s)

# Left box — clinical features
add_rect(s, Inches(0.3), Inches(1.5), Inches(5.8), Inches(5.7), NAVY)
add_text(s, "CLINICAL FEATURES", Inches(0.3), Inches(1.5), Inches(5.8), Inches(0.42),
         font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
         v_anchor=MSO_ANCHOR.MIDDLE)
cf_items = [
    "Signs of full dilation:",
    "• Strong, expulsive urge to push",
    "• Gaping of anus / anal dilatation",
    "• Perineal bulging",
    "• Presenting part visible at introitus",
    "• Involuntary bearing-down efforts",
    "",
    "Duration:",
    "• Primigravida: up to 2 hours",
    "  (3 hrs with epidural)",
    "• Multigravida: up to 1 hour",
    "  (2 hrs with epidural)",
    "",
    "Fetal monitoring:",
    "• FHR after every contraction",
    "• Target: 110–160 bpm",
    "• Continuous CTG if high-risk",
]
py2 = Inches(1.98)
for item in cf_items:
    add_text(s, item, Inches(0.45), py2, Inches(5.5), Inches(0.27),
             font_size=12, color=WHITE, bold=item.endswith(":"))
    py2 += Inches(0.27)

# Middle box — maternal pushing
add_rect(s, Inches(6.2), Inches(1.5), Inches(3.2), Inches(5.7), TEAL)
add_text(s, "MATERNAL PUSHING", Inches(6.2), Inches(1.5), Inches(3.2), Inches(0.42),
         font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
         v_anchor=MSO_ANCHOR.MIDDLE)
push_items = [
    "Position options:",
    "• Lithotomy (most common)",
    "• Left lateral (Sims)",
    "• Squatting",
    "• Upright / supported",
    "",
    "Pushing technique:",
    "• Closed glottis (Valsalva)",
    "• Open glottis (preferred)",
    "• 3–4 pushes / contraction",
    "• Push with contraction peaks",
    "",
    "Perineal support:",
    "• Modified Ritgen manoeuvre",
    "• Warm compresses",
    "• Slow controlled delivery of head",
    "",
    "Episiotomy:",
    "• NOT routine (WHO 2018)",
    "• Selective: fetal distress,",
    "  shoulder dystocia, instrumental",
    "• Mediolateral preferred",
]
py3 = Inches(1.98)
for item in push_items:
    add_text(s, item, Inches(6.3), py3, Inches(3.0), Inches(0.26),
             font_size=11, color=WHITE, bold=item.endswith(":"))
    py3 += Inches(0.26)

# Right box — delivery steps
add_rect(s, Inches(9.5), Inches(1.5), Inches(3.5), Inches(5.7), RED_ACC)
add_text(s, "DELIVERY STEPS", Inches(9.5), Inches(1.5), Inches(3.5), Inches(0.42),
         font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
         v_anchor=MSO_ANCHOR.MIDDLE)
del_items = [
    "1. Head delivery:",
    "   Extension under pubis",
    "   Support perineum",
    "   Check for cord around neck",
    "",
    "2. Restitution & ext. rotation",
    "   Head returns to LOA",
    "",
    "3. Shoulder delivery:",
    "   Gentle downward traction",
    "   Anterior shoulder first",
    "   Then upward for posterior",
    "",
    "4. Trunk & legs:",
    "   Lateral flexion",
    "   Support infant",
    "",
    "5. Immediate newborn care:",
    "   Dry & stimulate",
    "   APGAR at 1 & 5 min",
    "   Delayed cord clamping",
    "   (1–3 min if vigorous)",
    "   Skin-to-skin contact",
]
py4 = Inches(1.98)
for item in del_items:
    add_text(s, item, Inches(9.6), py4, Inches(3.3), Inches(0.25),
             font_size=10.5, color=WHITE, bold=item.endswith(":"))
    py4 += Inches(0.25)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 10 — THIRD STAGE OF LABOUR (AMTSL)
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Third Stage of Labour & AMTSL",
            "Delivery of baby → Expulsion of placenta & membranes")
footer(s)

# Signs of placental separation
add_rect(s, Inches(0.3), Inches(1.5), Inches(6.0), Inches(2.3), LIGHT_BG,
         border_color=TEAL, border_pt=1.5)
add_rect(s, Inches(0.3), Inches(1.5), Inches(6.0), Inches(0.38), TEAL)
add_text(s, "Signs of Placental Separation", Inches(0.35), Inches(1.52),
         Inches(5.9), Inches(0.34), font_size=14, bold=True, color=WHITE)
sep_signs = [
    "Calkin's sign: Uterus becomes globular & firm",
    "Vaginal gush of blood (retroplacental clot)",
    "Cord lengthens outside vulva (Küstner's sign)",
    "Uterus rises in abdomen (as placenta drops into lower segment)",
    "Uterus no longer pushed up on suprapubic pressure",
]
sy2 = Inches(1.93)
for sg in sep_signs:
    add_text(s, f"• {sg}", Inches(0.45), sy2, Inches(5.7), Inches(0.26),
             font_size=11.5, color=DARK_TEXT)
    sy2 += Inches(0.27)

# Schultze vs Matthews Duncan
add_rect(s, Inches(0.3), Inches(3.9), Inches(6.0), Inches(1.5), LIGHT_BG,
         border_color=NAVY, border_pt=1.5)
add_rect(s, Inches(0.3), Inches(3.9), Inches(6.0), Inches(0.38), NAVY)
add_text(s, "Modes of Placental Expulsion", Inches(0.35), Inches(3.92),
         Inches(5.9), Inches(0.34), font_size=14, bold=True, color=WHITE)
modes = [
    ("Schultze (80%)", "Fetal surface first; central separation; cleaner"),
    ("Matthews Duncan (20%)", "Maternal surface first; edge separation; may bleed more"),
]
my = Inches(4.33)
for k, v in modes:
    add_text(s, f"• {k}: {v}", Inches(0.45), my, Inches(5.7), Inches(0.28),
             font_size=12, color=DARK_TEXT)
    my += Inches(0.28)

# AMTSL box
add_rect(s, Inches(6.5), Inches(1.5), Inches(6.5), Inches(5.7),
         RGBColor(0xFF,0xF3,0xCC), border_color=GOLD, border_pt=2)
add_rect(s, Inches(6.5), Inches(1.5), Inches(6.5), Inches(0.5), GOLD)
add_text(s, "Active Management of Third Stage (AMTSL)", Inches(6.55), Inches(1.52),
         Inches(6.4), Inches(0.46), font_size=14, bold=True, color=NAVY,
         align=PP_ALIGN.CENTER)

amtsl = [
    ("STEP 1", TEAL,
     "Oxytocin 10 IU IM (within 1 min of delivery)\n"
     "• First-line uterotonic\n"
     "• Misoprostol 600 mcg SL if oxytocin unavailable\n"
     "• Carbetocin 100 mcg IM/IV in resource-rich settings"),
    ("STEP 2", NAVY,
     "Controlled Cord Traction (CCT)\n"
     "• Brandt-Andrews manoeuvre\n"
     "• One hand suprapubic (counter-pressure)\n"
     "• Steady downward traction on cord\n"
     "• Only after signs of separation"),
    ("STEP 3", TEAL,
     "Uterine Massage after delivery of placenta\n"
     "• Massage fundus until firm\n"
     "• Ensure uterus remains contracted\n"
     "• Sustained massage NOT recommended routinely"),
    ("PLACENTA INSPECTION", RED_ACC,
     "• Check cotyledons complete (15–20)\n"
     "• Membranes intact\n"
     "• 3-vessel cord (2 arteries, 1 vein)\n"
     "• Abnormal if retained fragments"),
]
ay = Inches(2.08)
for title, clr, text in amtsl:
    add_rect(s, Inches(6.55), ay, Inches(6.3), Inches(0.28), clr)
    add_text(s, title, Inches(6.6), ay + Inches(0.02),
             Inches(6.2), Inches(0.24), font_size=12, bold=True, color=WHITE)
    ay += Inches(0.3)
    for line in text.split('\n'):
        add_text(s, line, Inches(6.65), ay, Inches(6.1), Inches(0.24),
                 font_size=11, color=DARK_TEXT)
        ay += Inches(0.24)
    ay += Inches(0.1)

# Blood loss
add_rect(s, Inches(0.3), Inches(5.5), Inches(6.0), Inches(0.9),
         RGBColor(0xFF,0xEE,0xEE), border_color=RED_ACC, border_pt=1.5)
add_text(s, "Normal Blood Loss: ≤500 mL (vaginal) / ≤1000 mL (CS)",
         Inches(0.4), Inches(5.55), Inches(5.8), Inches(0.35),
         font_size=13, bold=True, color=RED_ACC)
add_text(s, "PPH = >500 mL (vaginal) | Severe PPH = >1000 mL",
         Inches(0.4), Inches(5.87), Inches(5.8), Inches(0.28),
         font_size=12, color=DARK_TEXT)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 11 — FOURTH STAGE & IMMEDIATE POSTPARTUM CARE
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Fourth Stage of Labour & Immediate Postpartum Care",
            "First 1–2 hours after delivery — highest risk for PPH")
footer(s)

fp_data = [
    ("MATERNAL MONITORING", TEAL, [
        "• BP & pulse every 15 min × 1st hour, then every 30 min",
        "• Uterine tone: fundus firm & midline at umbilicus",
        "• Lochia: moderate red (rubra), no clots >golf ball",
        "• Bladder: full bladder → uterine atony → encourage void",
        "• Perineum: inspect for haematoma, lacerations",
        "• Temperature: baseline measurement",
        "• IV access maintained ×1 hour minimum",
    ]),
    ("PERINEAL REPAIR", NAVY, [
        "• 1st degree: skin only — may not need suture",
        "• 2nd degree: skin + perineal muscles — suture",
        "• 3rd degree (sphincter): 3a <50%, 3b >50%, 3c both",
        "• 4th degree: extends into rectal mucosa",
        "• Repair under adequate analgesia/anaesthesia",
        "• Interrupted or continuous absorbable sutures",
        "• Rectal exam post-repair to exclude suture through mucosa",
    ]),
    ("NEWBORN CARE", RED_ACC, [
        "• APGAR score: 1 & 5 min (7–10 normal)",
        "• Delayed cord clamping: ≥1 min (preterm 30–60 sec)",
        "• Skin-to-skin contact (kangaroo care)",
        "• Initiate breastfeeding within first hour",
        "• Eye prophylaxis (0.5% erythromycin ointment)",
        "• Vitamin K 1 mg IM (haemorrhagic disease prophylaxis)",
        "• Thermoregulation: avoid hypothermia",
    ]),
    ("BREASTFEEDING INIT.", GREEN_ACC, [
        "• Early initiation reduces newborn mortality 22%",
        "• Colostrum rich in IgA, lactoferrin, growth factors",
        "• Stimulates oxytocin → uterine involution",
        "• Correct latch technique education",
        "• Rooming-in encouraged",
        "• No prelacteal feeds",
        "• Exclusive breastfeeding target: 6 months",
    ]),
]
bw2 = Inches(3.1); bh2 = Inches(5.65); sx2 = Inches(0.25); sy3 = Inches(1.52)
for i, (title, clr, items) in enumerate(fp_data):
    x = sx2 + i * (bw2 + Inches(0.15))
    add_rect(s, x, sy3, bw2, bh2, LIGHT_BG, border_color=clr, border_pt=1.5)
    add_rect(s, x, sy3, bw2, Inches(0.4), clr)
    add_text(s, title, x + Inches(0.05), sy3 + Inches(0.02),
             bw2 - Inches(0.1), Inches(0.36),
             font_size=12, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
    py5 = sy3 + Inches(0.46)
    for item in items:
        add_text(s, item, x + Inches(0.08), py5,
                 bw2 - Inches(0.12), Inches(0.34),
                 font_size=10.5, color=DARK_TEXT, wrap=True)
        py5 += Inches(0.36)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 12 — PARTOGRAPH
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "The Partograph", "WHO Tool for Monitoring Labour Progress")
footer(s)

# Left — what it records
add_rect(s, Inches(0.3), Inches(1.5), Inches(5.8), Inches(5.7), LIGHT_BG,
         border_color=TEAL, border_pt=1.5)
add_rect(s, Inches(0.3), Inches(1.5), Inches(5.8), Inches(0.42), TEAL)
add_text(s, "What the Partograph Records", Inches(0.35), Inches(1.52),
         Inches(5.7), Inches(0.38), font_size=14, bold=True, color=WHITE)
parto_items = [
    ("Fetal Condition", [
        "• FHR every 30 min (normal 110–160)",
        "• Liquor: clear (C), blood (B), meconium (M)",
        "• Moulding: 0, +, ++, +++",
    ]),
    ("Progress of Labour", [
        "• Cervical dilation (cm) — plotted against time",
        "• Descent: fifths of head palpable abdominally",
        "• Contractions: frequency, duration, strength",
    ]),
    ("Maternal Condition", [
        "• BP: every 4 hours (high risk: 1–2 hrs)",
        "• Pulse: every 30 min",
        "• Temperature: every 4 hours",
        "• Urine output, protein, acetone",
        "• Drugs, IV fluids, oxytocin",
    ]),
    ("Alert & Action Lines", [
        "• Alert line: 1 cm/hr from active phase onset",
        "• Action line: 4 hours to the right of alert line",
        "• Plotting to the right of action line → intervention",
    ]),
]
py6 = Inches(1.98)
for sect, pts in parto_items:
    add_text(s, sect, Inches(0.45), py6, Inches(5.5), Inches(0.28),
             font_size=13, bold=True, color=TEAL)
    py6 += Inches(0.3)
    for pt in pts:
        add_text(s, pt, Inches(0.5), py6, Inches(5.5), Inches(0.26),
                 font_size=11.5, color=DARK_TEXT)
        py6 += Inches(0.27)
    py6 += Inches(0.08)

# Right — decision making
add_rect(s, Inches(6.3), Inches(1.5), Inches(6.7), Inches(5.7), LIGHT_BG,
         border_color=NAVY, border_pt=1.5)
add_rect(s, Inches(6.3), Inches(1.5), Inches(6.7), Inches(0.42), NAVY)
add_text(s, "Clinical Decision Making with Partograph",
         Inches(6.35), Inches(1.52), Inches(6.6), Inches(0.38),
         font_size=14, bold=True, color=WHITE)

decisions = [
    (TEAL, "Normal Progress (left of alert line)",
     ["Continue expectant management",
      "Reassure patient",
      "Maintain hydration"]),
    (GOLD, "Between Alert & Action Lines",
     ["Identify cause of slow progress",
      "Consider amniotomy if intact membranes",
      "Reassess in 2 hours",
      "Prepare for possible augmentation"]),
    (RED_ACC, "At or Beyond Action Line",
     ["Full reassessment — CPD? Malposition?",
      "Oxytocin augmentation if no CPD",
      "Consider operative delivery: ventouse/forceps",
      "C-section if vaginal delivery not possible"]),
    (NAVY, "Fetal Distress on Partograph",
     ["FHR <110 or >160 — act immediately",
      "Meconium-stained liquor — NICU alert",
      "Severe moulding (+++) — CPD likely",
      "Expedite delivery"]),
]
dy = Inches(1.98)
for clr, title, pts in decisions:
    add_rect(s, Inches(6.35), dy, Inches(6.55), Inches(0.28), clr)
    add_text(s, title, Inches(6.45), dy + Inches(0.02),
             Inches(6.3), Inches(0.24), font_size=12, bold=True, color=WHITE)
    dy += Inches(0.3)
    for pt in pts:
        add_text(s, f"• {pt}", Inches(6.5), dy, Inches(6.3), Inches(0.26),
                 font_size=11.5, color=DARK_TEXT)
        dy += Inches(0.27)
    dy += Inches(0.12)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 13 — PAIN RELIEF IN LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Pain Relief in Labour", "Analgesia Options — Evidence-Based Approach")
footer(s)

pain_options = [
    ("NON-PHARMACOLOGICAL", TEAL, [
        "• Breathing techniques (Lamaze, HypnoBirthing)",
        "• Continuous labour support (doula/midwife)",
        "• Hydrotherapy (warm bath / shower)",
        "• Massage & counterpressure (sacral pressure)",
        "• Transcutaneous electrical nerve stimulation (TENS)",
        "• Ambulation / position changes",
        "• Heat packs",
        "• Acupuncture / acupressure",
    ]),
    ("SYSTEMIC OPIOIDS", NAVY, [
        "• Pethidine (meperidine) 50–100 mg IM",
        "  - Avoid if delivery expected in <4 hrs",
        "  - Neonatal respiratory depression → naloxone",
        "• Morphine — less commonly used",
        "• Fentanyl IV PCA — better titratable",
        "• Remifentanil PCA — short-acting, effective",
        "• Entonox (50% N₂O/O₂) — inhalational",
        "  - Self-administered, quick onset/offset",
    ]),
    ("REGIONAL ANALGESIA", RED_ACC, [
        "• Epidural (gold standard):",
        "  - Lumbar epidural L3–L4 space",
        "  - Bupivacaine 0.1% + fentanyl 2 mcg/mL",
        "  - May prolong 2nd stage; may ↑ instrumental rate",
        "• Combined Spinal-Epidural (CSE):",
        "  - Faster onset, smaller dose intrathecal",
        "• Pudendal nerve block:",
        "  - Perineal analgesia for 2nd stage / repair",
        "• Paracervical block (rarely used now)",
    ]),
]
bw3 = Inches(4.1); bh3 = Inches(5.65); sx3 = Inches(0.3); sy4 = Inches(1.52)
for i, (title, clr, items) in enumerate(pain_options):
    x = sx3 + i * (bw3 + Inches(0.2))
    add_rect(s, x, sy4, bw3, bh3, LIGHT_BG, border_color=clr, border_pt=1.5)
    add_rect(s, x, sy4, bw3, Inches(0.42), clr)
    add_text(s, title, x + Inches(0.1), sy4 + Inches(0.04),
             bw3 - Inches(0.2), Inches(0.34),
             font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
    py7 = sy4 + Inches(0.48)
    for item in items:
        add_text(s, item, x + Inches(0.1), py7,
                 bw3 - Inches(0.15), Inches(0.34),
                 font_size=11.5, color=DARK_TEXT, wrap=True)
        py7 += Inches(0.35)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 14 — COMPLICATIONS OF LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Complications of Labour", "Recognition & Initial Management")
footer(s)

comps = [
    ("PROLONGED LABOUR", RED_ACC, [
        "Def: 1st stage >18 h (P) / >12 h (M)",
        "Causes: 3 P's — abnormal Powers, Passage, Passenger",
        "Mx: Reassess, amniotomy, augment, C-section if CPD",
    ]),
    ("FETAL DISTRESS", NAVY, [
        "FHR <110 or >160; late/variable decels; meconium",
        "Scalp pH <7.20 (acidosis); FBS for confirmation",
        "Mx: Left lateral, O₂, stop oxytocin, expedite delivery",
    ]),
    ("POSTPARTUM HAEMORRHAGE", RED_ACC, [
        "Primary PPH: >500 mL within 24 h of delivery",
        "4 T's: Tone (80%), Tissue, Trauma, Thrombin",
        "Mx: HAEMOSTASIS mnemonic; bimanual compression; uterotonics",
    ]),
    ("CORD PROLAPSE", NAVY, [
        "Cord precedes presenting part → compression → ischemia",
        "Risk: PROM, multiparity, transverse lie, prematurity",
        "Mx: Elevate presenting part, left lateral, emergency LSCS",
    ]),
    ("SHOULDER DYSTOCIA", RED_ACC, [
        "Anterior shoulder impacted behind pubic symphysis after head birth",
        "HELPERR: Help, Episiotomy, Legs (McRoberts), Pressure (suprapubic),",
        "Enter (Rubin II/Woods screw), Remove arm, Roll (Gaskin all-4s)",
    ]),
    ("UTERINE RUPTURE", NAVY, [
        "Catastrophic; previous scar, obstructed labour, grand multiparity",
        "Signs: sudden pain, FHR abnormal, recession of presenting part",
        "Mx: Immediate laparotomy, resuscitation, repair or hysterectomy",
    ]),
    ("AMNIOTIC FLUID EMBOLISM", RED_ACC, [
        "Rare but fatal: cardiovascular collapse, DIC, bronchospasm",
        "Triggers: strong contractions, cervical trauma",
        "Mx: Supportive — ICU, ventilation, FFP/cryoprecipitate",
    ]),
    ("MECONIUM-STAINED LIQUOR", NAVY, [
        "Thin/green/thick; thick = significant risk of MAS",
        "NICU team at delivery; suction only if not vigorous",
        "Avoid routine intubation if baby vigorous (NRP 2016+)",
    ]),
]

cols2 = 2; box_w2 = Inches(6.3); box_h2 = Inches(0.85)
sx5 = Inches(0.3); sy5 = Inches(1.52)
for i, (title, clr, pts) in enumerate(comps):
    col = i % cols2; row = i // cols2
    x = sx5 + col * (box_w2 + Inches(0.3))
    y = sy5 + row * (box_h2 + Inches(0.1))
    add_rect(s, x, y, box_w2, box_h2, LIGHT_BG, border_color=clr, border_pt=1.5)
    add_rect(s, x, y, box_w2, Inches(0.3), clr)
    add_text(s, title, x + Inches(0.1), y + Inches(0.02),
             box_w2 - Inches(0.2), Inches(0.26), font_size=12, bold=True, color=WHITE)
    py8 = y + Inches(0.33)
    for pt in pts:
        add_text(s, f"• {pt}", x + Inches(0.1), py8,
                 box_w2 - Inches(0.15), Inches(0.22),
                 font_size=10, color=DARK_TEXT, wrap=True)
        py8 += Inches(0.22)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 15 — SPECIAL TOPICS: INDUCTION & AUGMENTATION
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Induction & Augmentation of Labour",
            "When and How Labour is Initiated or Assisted")
footer(s)

# Left — Induction
add_rect(s, Inches(0.3), Inches(1.52), Inches(6.1), Inches(5.65), LIGHT_BG,
         border_color=TEAL, border_pt=1.5)
add_rect(s, Inches(0.3), Inches(1.52), Inches(6.1), Inches(0.42), TEAL)
add_text(s, "INDUCTION OF LABOUR (IOL)", Inches(0.35), Inches(1.54),
         Inches(6.0), Inches(0.38), font_size=14, bold=True, color=WHITE)

ind_sects = [
    ("Indications", [
        "• Post-dates (>41 wks): ↓ perinatal mortality",
        "• Pre-eclampsia / gestational hypertension",
        "• Fetal growth restriction with compromise",
        "• Gestational diabetes (uncontrolled)",
        "• PROM at term (>37 wks)",
        "• Cholestasis of pregnancy",
        "• Maternal medical disease",
    ]),
    ("Contraindications", [
        "• Previous classical C-section scar",
        "• Placenta praevia / vasa praevia",
        "• Active genital herpes (HSV)",
        "• Cord presentation",
        "• Transverse lie",
    ]),
    ("Bishop Score", [
        "• 0–13: rates dilation, effacement, station, consistency, position",
        "• Score ≥8 = favourable cervix (similar to spontaneous labour)",
        "• Score <6 = unfavourable → cervical ripening first",
    ]),
    ("Methods", [
        "• Cervical ripening: PGE₂ gel / misoprostol / Foley balloon",
        "• Amniotomy (ARM) ± oxytocin infusion",
        "• IV oxytocin: titrate from 1–2 mIU/min",
        "• Membrane sweeping (36–40 wks)",
    ]),
]
iy = Inches(2.0)
for sect, pts in ind_sects:
    add_text(s, sect + ":", Inches(0.45), iy, Inches(5.7), Inches(0.26),
             font_size=13, bold=True, color=TEAL)
    iy += Inches(0.28)
    for pt in pts:
        add_text(s, pt, Inches(0.5), iy, Inches(5.7), Inches(0.24),
                 font_size=11, color=DARK_TEXT)
        iy += Inches(0.25)
    iy += Inches(0.06)

# Right — Augmentation
add_rect(s, Inches(6.6), Inches(1.52), Inches(6.4), Inches(5.65), LIGHT_BG,
         border_color=NAVY, border_pt=1.5)
add_rect(s, Inches(6.6), Inches(1.52), Inches(6.4), Inches(0.42), NAVY)
add_text(s, "AUGMENTATION OF LABOUR", Inches(6.65), Inches(1.54),
         Inches(6.3), Inches(0.38), font_size=14, bold=True, color=WHITE)

aug_sects = [
    ("Definition", [
        "Stimulation of uterine contractions after spontaneous labour onset when progress is inadequate",
    ]),
    ("Indications", [
        "• Slow progress in active phase (dysfunctional labour)",
        "• Hypotonic uterine dysfunction",
        "• Prolonged latent or active phase",
    ]),
    ("Oxytocin Protocol", [
        "• Start: 1–2 mIU/min IV infusion",
        "• Increase by 1–2 mIU every 30 min",
        "• Target: 3 contractions/10 min, each 45–60 s",
        "• Maximum: 20–40 mIU/min (unit protocol)",
        "• CTG monitoring mandatory",
    ]),
    ("Risks of Augmentation", [
        "• Uterine hyperstimulation / tachysystole",
        "• Fetal distress (late decelerations)",
        "• Uterine rupture (esp. scarred uterus)",
        "• Water intoxication (prolonged high doses)",
    ]),
    ("Amniotomy", [
        "• Accelerates labour by 1–2 hrs",
        "• ↑ prostaglandin release from decidua",
        "• Check for cord prolapse post-ARM",
        "• Often combined with oxytocin",
    ]),
]
ay2 = Inches(2.0)
for sect, pts in aug_sects:
    add_text(s, sect + ":", Inches(6.75), ay2, Inches(6.1), Inches(0.26),
             font_size=13, bold=True, color=NAVY)
    ay2 += Inches(0.28)
    for pt in pts:
        add_text(s, pt, Inches(6.8), ay2, Inches(6.1), Inches(0.24),
                 font_size=11, color=DARK_TEXT)
        ay2 += Inches(0.25)
    ay2 += Inches(0.06)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 16 — OPERATIVE VAGINAL DELIVERY
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Operative Vaginal Delivery",
            "Ventouse (Vacuum) & Forceps — Indications, Prerequisites, Complications")
footer(s)

cols_ovd = [
    ("VENTOUSE (VACUUM)", TEAL, [
        ("Mechanism", "Negative pressure cup on fetal scalp → traction with contractions"),
        ("Indications", "Maternal exhaustion, fetal distress (2nd stage), prolonged 2nd stage, push not effective"),
        ("Prerequisites", "Full dilation, engaged head, vertex, ruptured membranes, known position, empty bladder, adequate analgesia, willingness for C-section if fails"),
        ("Cup types", "Silastic/soft: OA positions. Rigid metal (Kiwi): OP/OT"),
        ("Traction", "Only with contractions and maternal pushing; maximum 3 pulls, 3 detachments"),
        ("Complications", "Caput/chignon, cephalhaematoma, subgaleal haematoma (rare but serious), scalp lacerations, neonatal jaundice"),
        ("Failure rate", "~20%; if failed → forceps or C-section"),
    ]),
    ("FORCEPS", NAVY, [
        ("Types", "Outlet: Wrigley's. Low cavity: Neville-Barnes/Simpson. Mid-cavity: Kjelland's (rotational)"),
        ("Indications", "Same as ventouse + maternal contraindication to pushing (cardiac, CVA)"),
        ("Prerequisites", "As ventouse + episiotomy usually required"),
        ("Application", "Left blade first, then right; check position, apply traction"),
        ("Advantage over ventouse", "Faster; can apply when ventouse fails in some cases"),
        ("Complications", "Maternal: perineal trauma, 3rd/4th degree tears, bladder injury. Neonatal: bruising, facial nerve palsy, intracranial haem (rare)"),
        ("Contraindications", "Face presentation (mentovertical), hydrocephalus, unengaged head, unknown position"),
    ]),
]
bw4 = Inches(6.1)
for i, (title, clr, rows) in enumerate(cols_ovd):
    x = Inches(0.3) + i * (bw4 + Inches(0.5))
    y = Inches(1.52)
    add_rect(s, x, y, bw4, Inches(0.42), clr)
    add_text(s, title, x + Inches(0.1), y + Inches(0.04),
             bw4 - Inches(0.2), Inches(0.34), font_size=15, bold=True, color=WHITE)
    ry = y + Inches(0.48)
    for k, v in rows:
        add_rect(s, x, ry, bw4, Inches(0.24), clr)
        add_text(s, k, x + Inches(0.1), ry + Inches(0.02),
                 Inches(1.8), Inches(0.2), font_size=11, bold=True, color=WHITE)
        add_rect(s, x + Inches(1.92), ry, bw4 - Inches(1.92), Inches(0.24),
                 RGBColor(0xE8,0xF4,0xF8))
        add_text(s, v, x + Inches(2.0), ry + Inches(0.02),
                 bw4 - Inches(2.05), Inches(0.2),
                 font_size=10, color=DARK_TEXT, wrap=True)
        ry += Inches(0.68)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 17 — KEY DRUGS IN LABOUR
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Key Drugs Used in Labour Management")
footer(s)

drugs = [
    ("Oxytocin\n(Syntocinon)", TEAL,
     "Augmentation / IOL: 1–40 mIU/min IV drip\nAMTSL: 10 IU IM stat after delivery\nSide effects: water retention, hypotension, uterine hyperstimulation"),
    ("Misoprostol\n(PGE₁)", NAVY,
     "Cervical ripening: 25–50 mcg PV/SL q4–6h\nPPH (if oxytocin unavailable): 600 mcg SL\nC/I: previous CS (↑ rupture risk)"),
    ("Dinoprostone\n(PGE₂)", TEAL,
     "Cervical ripening: gel 0.5 mg intracervical\nPropess (controlled-release vaginal insert)\nC/I: asthma, glaucoma, previous CS"),
    ("Pethidine\n(Meperidine)", NAVY,
     "Labour analgesia: 50–100 mg IM\nAnti-cholinergic: nausea/vomiting common\nAntidote for neonate: naloxone 0.1 mg/kg IM/IV"),
    ("Atosiban\n(Tractocile)", TEAL,
     "Tocolysis (preterm labour): oxytocin receptor antagonist\n6.75 mg IV bolus → 18 mg/h × 3h → 6 mg/h × 45h\nFewer maternal side effects than ritodrine"),
    ("Nifedipine", NAVY,
     "Tocolysis: 10–20 mg oral loading\nMaintenance: 10–20 mg q4–6h\nSide effects: headache, flushing, tachycardia"),
    ("MgSO₄", TEAL,
     "Eclampsia: 4–6 g IV loading, 1–2 g/hr\nNeuroprotection preterm <34 wks\nToxicity: loss of DTRs (serum >5 mEq/L), resp paralysis\nAntidote: Ca gluconate 1 g IV"),
    ("Carboprost\n(PGF₂α)", NAVY,
     "PPH refractory to oxytocin: 250 mcg IM q15–90 min\nMax 8 doses (2 mg)\nC/I: asthma"),
    ("Tranexamic Acid", TEAL,
     "PPH treatment: 1 g IV over 10 min (repeat ×1 if needed)\nWithin 3 hrs of delivery (WOMAN trial)\nAntifibrinolytic; reduces PPH mortality"),
    ("Betamethasone", NAVY,
     "Fetal lung maturity (preterm <34 wks): 12 mg IM × 2 doses 24 h apart\nReduces RDS, IVH, NEC in preterm\nNOT in normal term labour (FYI)"),
]

cols3 = 2; bw5 = Inches(6.2); bh5 = Inches(0.78)
sx6 = Inches(0.3); sy6 = Inches(1.52)
for i, (name, clr, desc) in enumerate(drugs):
    col = i % cols3; row = i // cols3
    x = sx6 + col * (bw5 + Inches(0.3))
    y = sy6 + row * (bh5 + Inches(0.07))
    add_rect(s, x, y, Inches(1.6), bh5, clr)
    add_text(s, name, x + Inches(0.05), y + Inches(0.08),
             Inches(1.5), bh5 - Inches(0.1),
             font_size=11, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
             v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x + Inches(1.6), y, bw5 - Inches(1.6), bh5, LIGHT_BG)
    add_text(s, desc, x + Inches(1.68), y + Inches(0.04),
             bw5 - Inches(1.72), bh5 - Inches(0.08),
             font_size=10, color=DARK_TEXT, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 18 — SUMMARY & KEY TAKEAWAYS
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
content_bg(s)
header_band(s, "Summary & Key Takeaways", "Normal Labour — High-Yield Points")
footer(s)

takeaways = [
    (TEAL, "Definition",
     "Normal labour: spontaneous onset at term, vertex presentation, progressive dilation, vaginal delivery within 18h, no complications"),
    (NAVY, "Onset",
     "Multifactorial: functional progesterone withdrawal + oestrogen dominance + prostaglandins + fetal cortisol/CRH axis"),
    (TEAL, "3 P's",
     "Powers (contractions + bearing down), Passenger (flexed vertex, OA), Passage (adequate pelvis + soft tissues)"),
    (NAVY, "Cardinal Movements",
     "8 steps: Engagement → Descent → Flexion → Internal rotation → Extension → Restitution → External rotation → Expulsion"),
    (TEAL, "Stages",
     "1st (onset → 10 cm), 2nd (10 cm → delivery), 3rd (delivery → placenta), 4th (first 1–2 h postpartum)"),
    (NAVY, "AMTSL",
     "Oxytocin 10 IU IM + controlled cord traction + uterine massage — reduces PPH by 60%"),
    (TEAL, "Partograph",
     "Mandatory monitoring tool: alert line (1 cm/hr), action line (4 hrs after alert); plot left of alert = normal"),
    (NAVY, "Pain Relief",
     "Non-pharmacological first; systemic opioids; epidural = gold standard with detailed counselling on effects"),
    (TEAL, "Complications",
     "4 T's of PPH, HELPERR for shoulder dystocia, HAEMOSTASIS mnemonic, emergency protocols for cord prolapse"),
    (NAVY, "WHO Recommendations",
     "No routine episiotomy, delayed cord clamping ≥1 min, skin-to-skin, breastfeeding within 1st hour, AMTSL universal"),
]

bw6 = Inches(6.1); bh6 = Inches(0.56); cols4 = 2
sx7 = Inches(0.3); sy7 = Inches(1.52)
for i, (clr, key, val) in enumerate(takeaways):
    col = i % cols4; row = i // cols4
    x = sx7 + col * (bw6 + Inches(0.3))
    y = sy7 + row * (bh6 + Inches(0.08))
    add_rect(s, x, y, Inches(1.8), bh6, clr)
    add_text(s, key, x + Inches(0.08), y + Inches(0.06),
             Inches(1.65), bh6 - Inches(0.1),
             font_size=12, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x + Inches(1.8), y, bw6 - Inches(1.8), bh6, LIGHT_BG)
    add_text(s, val, x + Inches(1.88), y + Inches(0.04),
             bw6 - Inches(1.9), bh6 - Inches(0.08),
             font_size=10.5, color=DARK_TEXT, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 19 — REFERENCES & CLOSING
# ════════════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, W, H, NAVY)
add_rect(s, 0, Inches(0), W, Inches(0.08), GOLD)
add_rect(s, 0, Inches(7.42), W, Inches(0.08), GOLD)
add_rect(s, 0, Inches(0.08), Inches(0.18), Inches(7.34), TEAL)

add_text(s, "References & Further Reading", Inches(0.4), Inches(0.2),
         Inches(12.5), Inches(0.7),
         font_size=26, bold=True, color=WHITE)
add_rect(s, Inches(0.3), Inches(0.95), Inches(12.7), Inches(0.05), GOLD)

refs = [
    "1. Williams Obstetrics, 26th Edition — Cunningham FG et al. (2022). McGraw-Hill.",
    "2. Creasy & Resnik's Maternal-Fetal Medicine, 8th Edition (2022). Elsevier.",
    "3. DC Dutta's Textbook of Obstetrics, 10th Edition — Konar H (2023). Jaypee Brothers.",
    "4. NICE Guideline NG235: Inducing Labour (2021). National Institute for Health and Care Excellence.",
    "5. WHO Recommendations: Intrapartum Care for a Positive Childbirth Experience (2018). World Health Organization.",
    "6. WHO Active Management of Third Stage of Labour: New WHO Recommendations (2012).",
    "7. RCOG Green-top Guideline No. 26: Operative Vaginal Delivery (2011, updated 2020).",
    "8. Friedman E. (1955). Primigravid labor: a graphicostatistical analysis. Obstet Gynecol 6(6):567-89.",
    "9. Hofmeyr GJ et al. (2009). Tranexamic acid for preventing postpartum haemorrhage. Cochrane Database.",
    "10. WOMAN Trial Collaborators (2017). Effect of tranexamic acid on PPH mortality. Lancet 389(10084):2105-16.",
    "11. American College of Obstetricians & Gynecologists (ACOG) Practice Bulletins on Labour (2019–2024).",
    "12. FIGO Safe Motherhood and Newborn Health Committee: Management of PPH Guidelines (2022).",
]
ry2 = Inches(1.1)
for ref in refs:
    add_text(s, ref, Inches(0.5), ry2, Inches(12.3), Inches(0.34),
             font_size=12, color=RGBColor(0xCC,0xDD,0xFF))
    ry2 += Inches(0.35)

add_rect(s, Inches(2.5), Inches(5.8), Inches(8.33), Inches(0.06), GOLD)
add_text(s, "Thank You — Questions Welcome",
         Inches(0.4), Inches(5.9), Inches(12.5), Inches(0.6),
         font_size=28, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
add_text(s, "Normal Labour | Lecture Seminar | Department of Obstetrics & Gynaecology",
         Inches(0.4), Inches(6.5), Inches(12.5), Inches(0.4),
         font_size=14, italic=True, color=MID_GREY, align=PP_ALIGN.CENTER)


# ════════════════════════════════════════════════════════════════════════════
# SAVE
# ════════════════════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/normal-labour-ppt/Normal_Labour_Lecture_Seminar.pptx"
prs.save(out_path)
print(f"Saved: {out_path}")
print(f"Slides: {len(prs.slides)}")
Running Command

cd /tmp/workspace/normal-labour-ppt && python build_ppt.py 2>&1

Running Command

python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/normal-labour-ppt/Normal_Labour_Lecture_Seminar.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t and len(t) > 3: texts.append(t[:60]) print(f'Slide {i}: {\" | \".join(texts[:3])}') "

Your presentation is ready:

Normal Labour Lecture Seminar

Presentation · PPTX


What's inside — 19 slides, fully designed

#Slide TitleKey Content
1Title SlideDepartment branding, topic overview
2Learning Objectives8 structured objectives
3DefinitionWHO/Williams definition, 8-criterion table
4Theories of Onset8 theories (distension, progesterone withdrawal, oestrogen, oxytocin, PG, fetal cortisol, CRH, mechanical)
5The 3 P'sPowers, Passenger, Passage — full 3-column layout
6Stages Overview1st–4th stage timeline with durations
7First Stage (Detailed)Latent/active/transition phases; partograph; true vs false labour
8Cardinal MovementsAll 8 movements with numbered boxes and clinical descriptions
9Second StageClinical features, maternal pushing, episiotomy, delivery steps
10Third Stage & AMTSLSigns of separation, Schultze vs Matthews Duncan, full AMTSL protocol
11Fourth StageMaternal monitoring, perineal repair grading, newborn care, breastfeeding
12PartographWhat it records, alert/action lines, clinical decision making
13Pain ReliefNon-pharmacological, opioids, epidural/CSE/pudendal in 3 columns
14ComplicationsPPH (4T's), fetal distress, cord prolapse, shoulder dystocia (HELPERR), uterine rupture, AFE
15Induction & AugmentationBishop score, IOL indications, oxytocin protocol, amniotomy
16Operative Vaginal DeliveryVentouse vs forceps — indications, prerequisites, complications
17Key Drugs10 drugs — oxytocin, misoprostol, carboprost, TXA, MgSO₄, pethidine, atosiban, nifedipine, betamethasone, dinoprostone
18Summary & Key Takeaways10 high-yield points in visual grid
19References12 authoritative references (Williams, Creasy, NICE, WHO, ACOG, FIGO, Lancet WOMAN trial)
Design: Navy/teal/gold colour scheme, 16:9 widescreen, consistent headers, footer on every slide, fully editable in PowerPoint.

Search for clinical images of fetal positions and cardinal movements of labour

Searching the Web

fetal positions labour vertex presentation clinical diagram LOA LOT

Searching the Web

cardinal movements of labour mechanism obstetrics clinical illustration engagement descent flexion internal rotation

Finding Sources
Loading Image
Finding Sources
Searching the Web

fetal positions obstetrics diagram LOA ROA LOP ROP LOT ROT occiput anterior posterior transverse medical

Loading Image
Reading Web Page

https://oacapps.med.jhmi.edu/OBGYN-101/Text/Abnormal%20L&D/f…

Finding Sources
Reading File
Loading Image
Searching the Web

cardinal movements labour williams obstetrics diagram engagement flexion internal rotation extension site:radiopaedia.org OR site:teach.obs.nhs.uk OR site:acog.org

Loading Image
Reading File
I have two excellent clinical images and rich textbook content. Let me compile everything into a comprehensive, well-structured answer.

Clinical Images: Fetal Positions & Cardinal Movements of Labour

Here are the best clinical images found, with full explanations:

IMAGE 1 — Cardinal Movements of Labour (Illustrated)

Cardinal Movements of Labour — Engagement, Descent, Flexion, Internal Rotation, Extension, External Rotation, Expulsion
This illustration shows all 7 cardinal movements in sequence: Engagement → Descent → Flexion → Internal Rotation → Extension → External Rotation → Expulsion. Each panel depicts the fetal position within the maternal pelvis as it navigates the birth canal.

IMAGE 2 — Vertex Presentation (Cleveland Clinic, 2023)

Vertex Presentation — fetus in cephalic (head-down) position, labelled: uterus, placenta, cervix, vagina
This annotated clinical illustration shows the normal vertex (cephalic) presentation — the fetus in a longitudinal lie, head down, in the occiput anterior position. Structures labelled: uterus, placenta, cervix, vagina.

VIDEO — Mechanism of Labour (Full Animation, 7 Cardinal Movements)


Fetal Positions — Full Reference Guide

Based on Creasy & Resnik's Maternal-Fetal Medicine and the Johns Hopkins OBGYN-101 resource:

Position Nomenclature (3-Letter System)

LetterMeaningOptions
1stSide of maternal pelvisL (Left) or R (Right)
2ndFetal landmarkO (Occiput/vertex), S (Sacrum/breech), M (Mentum/face), Sc (Scapula)
3rdDirection fetal landmark facesA (Anterior), P (Posterior), T (Transverse)

All Vertex Positions with Clinical Significance

PositionFull NameClinical Notes
OADirect Occiput AnteriorEasiest delivery; optimal position
LOALeft Occiput AnteriorMost common; optimal; easy delivery
ROARight Occiput AnteriorNormal; slightly less common than LOA
LOTLeft Occiput TransverseCommon in early active labour; usually rotates to LOA
ROTRight Occiput TransverseCommon early; rotates to ROA or OA
LOPLeft Occiput Posterior"Sunny side up"; longer labour, backache
ROPRight Occiput PosteriorAs above; may need rotation or instrumental delivery
OPDirect Occiput PosteriorMost difficult; face-to-pubis delivery or rotation needed
Key clinical point: In OP positions, at 0 station the BPD is still 1–2 cm above the pelvic inlet — so the head is NOT fully engaged even though the station reads 0. This is because the longer occipitofrontal diameter (11.5 cm) rather than the shorter suboccipitobregmatic (9.5 cm) is presenting.

The 8 Cardinal Movements — Clinical Detail

From Tintinalli's Emergency Medicine and Creasy & Resnik's Maternal-Fetal Medicine:
#MovementClinical Mechanism
1EngagementBPD passes through pelvic inlet; head at or below 0 station. Occurs before labour in primigravidae, during labour in multigravidae
2DescentContinuous throughout 1st and 2nd stages; driven by contractions + bearing down; measured in stations (−5 to +5)
3FlexionChin to chest; smallest diameter (suboccipitobregmatic 9.5 cm) presents; passive, from pelvic floor resistance
4Internal RotationOcciput rotates from LOT/LOA → OA; driven by levator ani; completed at ischial spines level
5ExtensionHead extends under pubic symphysis; nape of neck is the fulcrum (hypomochlion); occiput, bregma, face, chin born sequentially
6RestitutionHead rotates 45° back to its pre-rotation alignment with shoulders; untwisting of neck
7External RotationFurther 45° rotation (total 90°) as shoulders align with AP diameter of outlet
8ExpulsionAnterior shoulder under pubis → posterior shoulder over perineum → trunk and legs by lateral flexion
Mnemonic: Every Day Fine Infants Enter Eager and Excited (Engagement, Descent, Flexion, Internal rotation, Extension, External rotation, Expulsion)

Useful Reference Sites for More Images

50 or more slides detail seminar on normal labour from oxorn foote and other srandard books

Finding Sources
Finding Sources
Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Loading Image
Reading File
Finding Sources

Please make it fast

This is a shared conversation. Sign in to Orris to start your own chat.