Shoul I mention labour ward events or drugs given in ot room for NVD. What should I write In case sheet after delivery of baby

Reading File
Finding Sources
Searching the Web

case sheet documentation after NVD normal vaginal delivery labour ward postpartum notes what to write

Finding Sources
Reading Web Page

https://www.d.umn.edu/medweb/Modules/OB-Long/DeliveryNote.pd…

Finding Sources
Yes - you should absolutely document everything that happened in the labour ward AND every drug given, even for a straightforward NVD. The case sheet after delivery is a medico-legal document and must be complete.
Here is a structured guide for what to write:

Post-Delivery Case Sheet Documentation for NVD

1. Patient Identification & Admission Details

  • Name, Age, IP No., Ward
  • Date & time of admission, Date & time of delivery
  • Gravida/Para/Abortion (G_P_A_L_)
  • Gestational age at delivery

2. Labour Events (Labour Ward Summary)

Stage I of Labour:
  • Time of onset of labour (spontaneous / induced)
  • Duration of Stage I
  • Rupture of membranes - spontaneous or artificial (AROM), time of rupture, colour of liquor (clear / meconium-stained)
  • Cervical dilatation at admission and progress
  • FHR monitoring - whether normal, any decelerations noted
  • IV access established - cannula size, IV fluids given (type and volume)
  • Any analgesics given (e.g. Tramadol, Pentazocine - dose, route, time)
  • Induction / augmentation: if Oxytocin drip used - concentration, units, rate, total dose
Stage II of Labour:
  • Duration of Stage II
  • Mode of delivery: spontaneous / assisted (vacuum/forceps - mention instrument used)
  • Position of presenting part at delivery (e.g. OA, OP)
  • Episiotomy - given or not; if yes: mediolateral / median; infiltration with lignocaine (dose)
  • Delivery of baby:
    • Time of delivery
    • Sex of baby
    • Birth weight
    • Apgar score at 1 min and 5 min
    • Cord blood - sent or not
    • Resuscitation needed - yes/no; if yes, what was done
    • Baby handed to: (mother / NICU)

3. Stage III - Placenta and Drugs Given

  • Duration of Stage III
  • Active Management of Third Stage of Labour (AMTSL):
    • Oxytocin 10 IU IM (or IV slow) given within 1 minute of baby delivery - must be written
    • Controlled cord traction used - yes/no
    • Uterine massage done
  • Mode of placental delivery: spontaneous / manual removal
  • Placenta: complete / incomplete; cotyledons - all present
  • Membranes: complete / ragged
  • Cord: 3-vessel or 2-vessel
  • Estimated blood loss (EBL): in mL

4. Perineum and Repair

  • Perineum: intact / laceration (degree: 1st, 2nd, 3rd, 4th) / episiotomy
  • Repair done: suture material used (e.g. 2-0 Vicryl / chromic catgut), technique (continuous / interrupted)
  • Local anaesthesia for repair: Lignocaine 1% - dose given
  • Any vault/cervical tear inspection done

5. Drugs Given - Complete List (This is Very Important)

Write every drug with: name, dose, route, time
Commonly used drugs in NVD that must be documented:
DrugUsual doseRouteWhen given
Oxytocin10 IUIM or slow IVImmediately after baby delivery
Lignocaine 1%5-10 mLLocal infiltrationBefore episiotomy / repair
IV fluids (RL/NS)volume in mLIVDuring labour
Analgesics (if given)doseIM/IVDuring Stage I/II
Antibiotics (if given)doseIVIntrapartum if indicated (e.g. GBS, PROM)
Misoprostol (if used)600 mcgOral/PRPost-delivery if oxytocin not available
Anti-D (if Rh negative)300 mcgIMWithin 72 hrs (note plan)

6. Immediate Postpartum (First Hour / 4th Stage)

  • Vital signs: BP, Pulse, Temperature
  • Uterus: well contracted / not contracted
  • Bleeding: normal lochia / excessive
  • Bladder: voided / catheterized
  • Mother's condition: stable / any complaints
  • Breastfeeding: initiated - yes/no; skin-to-skin done
  • Baby: on mother's chest / shifted

7. Condition at the End

  • Mother: condition at end of delivery (stable, shifted to postnatal ward)
  • Baby: condition, handed to mother or shifted to NICU
  • Signature of the attending doctor / nurse

Key Points to Remember

  • Every drug given in the labour ward must be written - oxytocin, lignocaine, IV fluids, analgesics, antibiotics - all of it. This is medico-legal documentation.
  • If the delivery happened in an OT room (even for NVD), write "Delivery conducted in OT" and document all OT drugs separately in the OT notes as well.
  • Do not leave any column blank - write "Nil" if nothing was given.
  • Time of each event should be written accurately.
  • The case sheet serves as a permanent record for audits, maternal death reviews, and medicolegal purposes.
If your hospital has a partograph, attach it or transcribe the key data from it into the case sheet summary.

Create a case sheet template document for NVD deliveries

Reading File
Running Command

mkdir -p /tmp/workspace/nvd-case-sheet && ls /tmp/workspace/nvd-case-sheet/

Writing File

~/nvd-case-sheet/create_nvd_case_sheet.py

from docx import Document
from docx.shared import Pt, Inches, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import copy

doc = Document()

# ── Page margins ──────────────────────────────────────────────────────────────
section = doc.sections[0]
section.page_height = Cm(29.7)
section.page_width  = Cm(21.0)
section.top_margin    = Cm(1.5)
section.bottom_margin = Cm(1.5)
section.left_margin   = Cm(1.8)
section.right_margin  = Cm(1.8)

# ── Default font ──────────────────────────────────────────────────────────────
normal_style = doc.styles["Normal"]
normal_style.font.name = "Arial"
normal_style.font.size = Pt(10)

# ── Helpers ───────────────────────────────────────────────────────────────────
def set_cell_bg(cell, hex_color):
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()
    shd = OxmlElement("w:shd")
    shd.set(qn("w:val"), "clear")
    shd.set(qn("w:color"), "auto")
    shd.set(qn("w:fill"), hex_color)
    tcPr.append(shd)

def set_cell_borders(cell, top=True, bottom=True, left=True, right=True, color="888888"):
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()
    tcBorders = OxmlElement("w:tcBorders")
    for side, enabled in [("top", top), ("bottom", bottom), ("left", left), ("right", right)]:
        el = OxmlElement(f"w:{side}")
        if enabled:
            el.set(qn("w:val"), "single")
            el.set(qn("w:sz"), "4")
            el.set(qn("w:space"), "0")
            el.set(qn("w:color"), color)
        else:
            el.set(qn("w:val"), "none")
        tcBorders.append(el)
    tcPr.append(tcBorders)

def cell_para(cell, text, bold=False, size=10, color=None, align=WD_ALIGN_PARAGRAPH.LEFT):
    cell.text = ""
    p = cell.paragraphs[0]
    p.alignment = align
    run = p.add_run(text)
    run.font.name = "Arial"
    run.font.size = Pt(size)
    run.font.bold = bold
    if color:
        run.font.color.rgb = RGBColor.from_string(color)
    return p

def add_section_heading(doc, text):
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(8)
    p.paragraph_format.space_after  = Pt(2)
    run = p.add_run(f"  {text}  ")
    run.font.name = "Arial"
    run.font.size = Pt(10)
    run.font.bold = True
    run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
    # shade the paragraph - add highlight via XML on the run
    rPr = run._r.get_or_add_rPr()
    # set background on paragraph via paragraph shading
    pPr = p._p.get_or_add_pPr()
    shd = OxmlElement("w:shd")
    shd.set(qn("w:val"), "clear")
    shd.set(qn("w:color"), "auto")
    shd.set(qn("w:fill"), "2E4057")
    pPr.append(shd)
    return p

def add_table(doc, rows, cols, col_widths=None, header_row=None, data_rows=None):
    """Generic table helper. data_rows: list of list of (text, bold, bg_color)"""
    table = doc.add_table(rows=rows, cols=cols)
    table.style = "Table Grid"
    if col_widths:
        for i, col in enumerate(table.columns):
            col.width = Inches(col_widths[i])
    return table

def field_row(table, row_idx, label, value_placeholder="", label_bg="EEF2F7", span=False):
    row = table.rows[row_idx]
    c0 = row.cells[0]
    cell_para(c0, label, bold=True, size=9.5)
    set_cell_bg(c0, label_bg)
    if not span:
        c1 = row.cells[1]
        cell_para(c1, value_placeholder, size=9.5)
        set_cell_bg(c1, "FFFFFF")

# ══════════════════════════════════════════════════════════════════════════════
#  HEADER
# ══════════════════════════════════════════════════════════════════════════════
p_title = doc.add_paragraph()
p_title.alignment = WD_ALIGN_PARAGRAPH.CENTER
p_title.paragraph_format.space_before = Pt(0)
p_title.paragraph_format.space_after  = Pt(2)
r = p_title.add_run("NORMAL VAGINAL DELIVERY (NVD) — CASE SHEET")
r.font.name = "Arial"
r.font.size = Pt(14)
r.font.bold = True
r.font.color.rgb = RGBColor(0x2E, 0x40, 0x57)

p_sub = doc.add_paragraph()
p_sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
p_sub.paragraph_format.space_before = Pt(0)
p_sub.paragraph_format.space_after  = Pt(6)
rs = p_sub.add_run("Department of Obstetrics & Gynaecology")
rs.font.name = "Arial"
rs.font.size = Pt(10)
rs.font.color.rgb = RGBColor(0x55, 0x55, 0x55)

# horizontal rule
hr_p = doc.add_paragraph()
hr_p.paragraph_format.space_before = Pt(0)
hr_p.paragraph_format.space_after  = Pt(6)
pPr = hr_p._p.get_or_add_pPr()
pb = OxmlElement("w:pBdr")
bot = OxmlElement("w:bottom")
bot.set(qn("w:val"), "single"); bot.set(qn("w:sz"), "8")
bot.set(qn("w:space"), "1"); bot.set(qn("w:color"), "2E4057")
pb.append(bot); pPr.append(pb)

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1: PATIENT IDENTIFICATION
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 1 — PATIENT IDENTIFICATION")

t = doc.add_table(rows=5, cols=4)
t.style = "Table Grid"
col_w = [1.2, 1.8, 1.2, 1.8]
for i, col in enumerate(t.columns):
    col.width = Inches(col_w[i])

rows_data = [
    ("Patient Name", "", "IP / OPD No.", ""),
    ("Age", "", "Ward / Bed No.", ""),
    ("Address", "", "Date of Admission", ""),
    ("Date of Delivery", "", "Time of Delivery", ""),
    ("Referred From", "", "Consultant", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows_data):
    row = t.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2: OBSTETRIC HISTORY
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 2 — OBSTETRIC HISTORY")

t2 = doc.add_table(rows=3, cols=4)
t2.style = "Table Grid"
for i, col in enumerate(t2.columns):
    col.width = Inches(col_w[i])

rows2 = [
    ("Gravida (G)", "", "Para (P)", ""),
    ("Abortion (A)", "", "Living (L)", ""),
    ("Gestational Age", "", "LMP / EDD", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows2):
    row = t2.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# Antenatal details
t2b = doc.add_table(rows=2, cols=4)
t2b.style = "Table Grid"
for i, col in enumerate(t2b.columns):
    col.width = Inches(col_w[i])
rows2b = [
    ("ANC Booked", "Yes / No", "No. of ANC visits", ""),
    ("Blood Group & Rh", "", "VDRL / HIV / HBsAg", "NR / R"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows2b):
    row = t2b.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3: ADMISSION FINDINGS
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 3 — ADMISSION FINDINGS")

t3 = doc.add_table(rows=4, cols=6)
t3.style = "Table Grid"
cw3 = [0.7, 0.95, 0.7, 0.95, 0.9, 0.95]
for i, col in enumerate(t3.columns):
    col.width = Inches(cw3[i])

rows3 = [
    ("BP", "", "Pulse", "", "Temp (°F)", ""),
    ("Oedema", "Yes/No", "Height (cm)", "", "Weight (kg)", ""),
    ("Presentation", "", "FHR (bpm)", "", "Engagement", "Yes/No"),
    ("Contractions", "Freq/strength", "Cervical OS", "", "Effacement", ""),
]
for r_idx, row_data in enumerate(rows3):
    row = t3.rows[r_idx]
    for c_idx, txt in enumerate(row_data):
        cell = row.cells[c_idx]
        is_label = c_idx % 2 == 0
        cell_para(cell, txt, bold=is_label, size=9)
        set_cell_bg(cell, "EEF2F7" if is_label else "FFFFFF")

doc.add_paragraph()

# ROM
t3b = doc.add_table(rows=2, cols=4)
t3b.style = "Table Grid"
for i, col in enumerate(t3b.columns):
    col.width = Inches(col_w[i])
rows3b = [
    ("Membranes", "Intact / Ruptured", "Time of ROM", ""),
    ("Liquor Colour", "Clear / Meconium / Blood-stained", "Liquor Amount", "Adequate / Reduced"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows3b):
    row = t3b.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4: LABOUR EVENTS — STAGE I
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 4 — STAGE I OF LABOUR")

t4 = doc.add_table(rows=6, cols=4)
t4.style = "Table Grid"
for i, col in enumerate(t4.columns):
    col.width = Inches(col_w[i])

rows4 = [
    ("Onset of Labour", "Spontaneous / Induced", "Time of Onset", ""),
    ("Duration of Stage I", "", "AROM done (if any)", "Yes / No  —  Time: ____"),
    ("Oxytocin Augmentation", "Yes / No", "Dose / Rate", ""),
    ("IV Access", "Cannula size: ___", "IV Fluids Given", "Type: ___ Vol: ___mL"),
    ("Analgesic Given", "Drug: ___  Dose: ___", "Route & Time", ""),
    ("FHR Monitoring", "Intermittent / Continuous", "FHR Pattern", "Normal / Deceleration"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows4):
    row = t4.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5: STAGE II — DELIVERY OF BABY
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 5 — STAGE II: DELIVERY OF BABY")

t5 = doc.add_table(rows=7, cols=4)
t5.style = "Table Grid"
for i, col in enumerate(t5.columns):
    col.width = Inches(col_w[i])

rows5 = [
    ("Duration of Stage II", "", "Mode of Delivery", "Spontaneous / Assisted"),
    ("Presentation at Delivery", "OA / OP / Other", "Instrument Used", "None / Vacuum / Forceps"),
    ("Episiotomy", "Yes / No", "Type", "Mediolateral / Median"),
    ("Lignocaine (Episiotomy)", "1%  Vol: ___ mL  IM/Local", "Time Given", ""),
    ("Time of Baby Delivery", "", "Sex of Baby", "Male / Female"),
    ("Birth Weight", "___ grams", "Apgar Score", "1 min: ___   5 min: ___"),
    ("Cord Around Neck", "Yes / No", "Cord Blood Sent", "Yes / No"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows5):
    row = t5.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# Baby resus
t5b = doc.add_table(rows=2, cols=4)
t5b.style = "Table Grid"
for i, col in enumerate(t5b.columns):
    col.width = Inches(col_w[i])
rows5b = [
    ("Resuscitation Needed", "Yes / No", "Resuscitation Details", ""),
    ("Baby Shifted To", "Mother / NICU / Nursery", "Skin-to-Skin / Breastfeeding", "Yes / No"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows5b):
    row = t5b.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6: STAGE III — PLACENTA & AMTSL
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 6 — STAGE III: PLACENTA & ACTIVE MANAGEMENT (AMTSL)")

t6 = doc.add_table(rows=6, cols=4)
t6.style = "Table Grid"
for i, col in enumerate(t6.columns):
    col.width = Inches(col_w[i])

rows6 = [
    ("Duration of Stage III", "", "Placental Delivery", "Spontaneous / Manual"),
    ("Oxytocin (AMTSL)", "10 IU  IM / IV  Time: ___", "Controlled Cord Traction", "Yes / No"),
    ("Uterine Massage Done", "Yes / No", "Uterus After Delivery", "Well contracted / Atonic"),
    ("Placenta", "Complete / Incomplete", "Cotyledons", "All present / Missing: ___"),
    ("Membranes", "Complete / Ragged / Incomplete", "Cord Vessels", "3-vessel / 2-vessel"),
    ("Estimated Blood Loss", "___ mL", "Placenta Weight", "___ grams"),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows6):
    row = t6.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 7: PERINEUM & REPAIR
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 7 — PERINEUM & REPAIR")

t7 = doc.add_table(rows=4, cols=4)
t7.style = "Table Grid"
for i, col in enumerate(t7.columns):
    col.width = Inches(col_w[i])

rows7 = [
    ("Perineum Status", "Intact / Episiotomy / Laceration", "Degree of Laceration", "1st / 2nd / 3rd / 4th"),
    ("Vault / Cervical Tear", "Yes / No  —  Details: ___", "Repair Done", "Yes / No"),
    ("Suture Material", "2-0 Vicryl / Chromic catgut", "Technique", "Continuous / Interrupted"),
    ("Local Anaesthesia", "Lignocaine 1%  Vol: ___ mL", "Any Complications", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows7):
    row = t7.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 8: DRUGS CHART
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 8 — DRUGS & IV FLUIDS GIVEN (Labour Ward / OT Room)")

# header row
t8 = doc.add_table(rows=10, cols=5)
t8.style = "Table Grid"
cw8 = [0.4, 1.6, 1.1, 0.8, 2.3]
for i, col in enumerate(t8.columns):
    col.width = Inches(cw8[i])

headers8 = ["S.No", "Drug Name & Dose", "Route", "Time Given", "Indication / Remarks"]
hrow = t8.rows[0]
for i, h in enumerate(headers8):
    cell_para(hrow.cells[i], h, bold=True, size=9.5, color="FFFFFF", align=WD_ALIGN_PARAGRAPH.CENTER)
    set_cell_bg(hrow.cells[i], "2E4057")

drugs_data = [
    ("1", "Oxytocin 10 IU", "IM / IV slow", "", "AMTSL — given within 1 min of delivery"),
    ("2", "Lignocaine 1%  ___ mL", "Local infiltration", "", "Episiotomy / Perineal repair"),
    ("3", "IV Fluids (RL / NS)  ___ mL", "IV", "", "Labour maintenance"),
    ("4", "Oxytocin Drip  ___ IU in 500 mL", "IV drip", "", "Augmentation (if used)"),
    ("5", "Analgesic: ___  Dose: ___", "", "", ""),
    ("6", "Antibiotic: ___  Dose: ___", "", "", ""),
    ("7", "Anti-D 300 mcg (if Rh-ve)", "IM", "", "Within 72 hrs post-delivery"),
    ("8", "Misoprostol 600 mcg (if used)", "Oral / PR", "", "Uterotonic"),
    ("9", "", "", "", ""),
]
for r_idx, row_data in enumerate(drugs_data):
    row = t8.rows[r_idx + 1]
    for c_idx, txt in enumerate(row_data):
        cell_para(row.cells[c_idx], txt, size=9.5)
        set_cell_bg(row.cells[c_idx], "FFFFFF" if r_idx % 2 == 0 else "F7F9FC")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 9: 4TH STAGE — IMMEDIATE POSTPARTUM
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 9 — 4th STAGE: IMMEDIATE POSTPARTUM (First 1–2 Hours)")

t9 = doc.add_table(rows=5, cols=6)
t9.style = "Table Grid"
cw9 = [0.7, 0.95, 0.7, 0.95, 0.9, 0.95]
for i, col in enumerate(t9.columns):
    col.width = Inches(cw9[i])

rows9 = [
    ("Time", "0 min", "15 min", "30 min", "60 min", "120 min"),
    ("BP (mmHg)", "", "", "", "", ""),
    ("Pulse (/min)", "", "", "", "", ""),
    ("Uterus", "Contracted /\nAtonic", "", "", "", ""),
    ("Bleeding", "Normal /\nExcessive", "", "", "", ""),
]
for r_idx, row_data in enumerate(rows9):
    row = t9.rows[r_idx]
    for c_idx, txt in enumerate(row_data):
        is_label = c_idx == 0
        is_header = r_idx == 0
        if is_header:
            cell_para(row.cells[c_idx], txt, bold=True, size=9.5, color="FFFFFF", align=WD_ALIGN_PARAGRAPH.CENTER)
            set_cell_bg(row.cells[c_idx], "4A7C9E")
        elif is_label:
            cell_para(row.cells[c_idx], txt, bold=True, size=9.5)
            set_cell_bg(row.cells[c_idx], "EEF2F7")
        else:
            cell_para(row.cells[c_idx], txt, size=9.5)
            set_cell_bg(row.cells[c_idx], "FFFFFF")

doc.add_paragraph()

t9b = doc.add_table(rows=3, cols=4)
t9b.style = "Table Grid"
for i, col in enumerate(t9b.columns):
    col.width = Inches(col_w[i])
rows9b = [
    ("Urine Output", "Voided spontaneously / Catheterized", "Urine Amount", "___ mL"),
    ("Breastfeeding Initiated", "Yes / No", "Skin-to-Skin Contact", "Yes / No"),
    ("Mother Shifted To", "Postnatal Ward / ICU", "Time of Shift", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows9b):
    row = t9b.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 10: DELIVERY SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 10 — DELIVERY SUMMARY & OUTCOME")

t10 = doc.add_table(rows=4, cols=4)
t10.style = "Table Grid"
for i, col in enumerate(t10.columns):
    col.width = Inches(col_w[i])

rows10 = [
    ("Total Duration of Labour", "Stage I: ___  Stage II: ___  Stage III: ___", "Total EBL", "___ mL"),
    ("Complications (Mother)", "", "Complications (Baby)", ""),
    ("Condition of Mother", "Stable / Unstable", "Condition of Baby", "Good / NICU"),
    ("Special Notes / Remarks", "", "", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows10):
    row = t10.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

doc.add_paragraph()

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 11: SIGNATURES
# ══════════════════════════════════════════════════════════════════════════════
add_section_heading(doc, "SECTION 11 — SIGNATURES")

t11 = doc.add_table(rows=3, cols=4)
t11.style = "Table Grid"
for i, col in enumerate(t11.columns):
    col.width = Inches(col_w[i])

rows11 = [
    ("Conducted By (Doctor)", "", "Staff Nurse / Midwife", ""),
    ("Signature", "", "Signature", ""),
    ("Date & Time", "", "Date & Time", ""),
]
for r_idx, (l1, v1, l2, v2) in enumerate(rows11):
    row = t11.rows[r_idx]
    cell_para(row.cells[0], l1, bold=True, size=9.5); set_cell_bg(row.cells[0], "EEF2F7")
    cell_para(row.cells[1], v1, size=9.5);            set_cell_bg(row.cells[1], "FFFFFF")
    cell_para(row.cells[2], l2, bold=True, size=9.5); set_cell_bg(row.cells[2], "EEF2F7")
    cell_para(row.cells[3], v2, size=9.5);            set_cell_bg(row.cells[3], "FFFFFF")

# ── Footer note ───────────────────────────────────────────────────────────────
doc.add_paragraph()
note = doc.add_paragraph()
note.paragraph_format.space_before = Pt(4)
rn = note.add_run(
    "⚠  Medico-legal document — All entries must be completed in full. "
    "Write 'Nil' where not applicable. Every drug must be recorded with Name, Dose, Route, and Time."
)
rn.font.name = "Arial"
rn.font.size = Pt(8.5)
rn.font.italic = True
rn.font.color.rgb = RGBColor(0xAA, 0x00, 0x00)

# ── Save ──────────────────────────────────────────────────────────────────────
out_path = "/tmp/workspace/nvd-case-sheet/NVD_Case_Sheet_Template.docx"
doc.save(out_path)
print(f"Saved: {out_path}")
Running Command

cd /tmp/workspace/nvd-case-sheet && python3 create_nvd_case_sheet.py

Running Command

python3 -c " from docx import Document doc = Document('/tmp/workspace/nvd-case-sheet/NVD_Case_Sheet_Template.docx') headings = [p.text for p in doc.paragraphs if p.text.strip()] for h in headings: print(h) print('Tables:', len(doc.tables)) "

Your NVD case sheet template is ready to download:

NVD Case Sheet Template

Word Document · DOCX


The document contains 11 sections across 15 tables, covering everything needed for a complete NVD case record:
SectionContents
1Patient Identification (Name, IP No., Ward, Consultant)
2Obstetric History (G/P/A/L, EDD, Blood Group, HIV/VDRL/HBsAg)
3Admission Findings (vitals, cervical OS, FHR, membranes, liquor)
4Stage I Labour Events (onset, augmentation, IV fluids, analgesia, FHR monitoring)
5Stage II - Delivery of Baby (mode, episiotomy, Apgar, birth weight, baby shifted to)
6Stage III - Placenta & AMTSL (Oxytocin 10 IU, cord traction, placenta completeness, EBL)
7Perineum & Repair (laceration degree, suture material, lignocaine)
8Drugs & IV Fluids Chart (name, dose, route, time, indication - pre-filled with common NVD drugs)
94th Stage Monitoring (BP/Pulse at 0, 15, 30, 60, 120 min; breastfeeding)
10Delivery Summary & Outcome
11Signatures (Doctor + Nurse/Midwife)
A red warning note at the bottom reminds: "Medico-legal document - Write 'Nil' where not applicable. Every drug must be recorded with Name, Dose, Route, and Time."
You can open it in MS Word and type directly into the white cells, or print it as a fill-in paper form.
This is a shared conversation. Sign in to Orris to start your own chat.