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
case sheet documentation after NVD normal vaginal delivery labour ward postpartum notes what to write
https://www.d.umn.edu/medweb/Modules/OB-Long/DeliveryNote.pd…
| Drug | Usual dose | Route | When given |
|---|---|---|---|
| Oxytocin | 10 IU | IM or slow IV | Immediately after baby delivery |
| Lignocaine 1% | 5-10 mL | Local infiltration | Before episiotomy / repair |
| IV fluids (RL/NS) | volume in mL | IV | During labour |
| Analgesics (if given) | dose | IM/IV | During Stage I/II |
| Antibiotics (if given) | dose | IV | Intrapartum if indicated (e.g. GBS, PROM) |
| Misoprostol (if used) | 600 mcg | Oral/PR | Post-delivery if oxytocin not available |
| Anti-D (if Rh negative) | 300 mcg | IM | Within 72 hrs (note plan) |
Create a case sheet template document for NVD deliveries
mkdir -p /tmp/workspace/nvd-case-sheet && ls /tmp/workspace/nvd-case-sheet/
~/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}")
cd /tmp/workspace/nvd-case-sheet && python3 create_nvd_case_sheet.py
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)) "
NVD Case Sheet Template
Word Document · DOCX
| Section | Contents |
|---|---|
| 1 | Patient Identification (Name, IP No., Ward, Consultant) |
| 2 | Obstetric History (G/P/A/L, EDD, Blood Group, HIV/VDRL/HBsAg) |
| 3 | Admission Findings (vitals, cervical OS, FHR, membranes, liquor) |
| 4 | Stage I Labour Events (onset, augmentation, IV fluids, analgesia, FHR monitoring) |
| 5 | Stage II - Delivery of Baby (mode, episiotomy, Apgar, birth weight, baby shifted to) |
| 6 | Stage III - Placenta & AMTSL (Oxytocin 10 IU, cord traction, placenta completeness, EBL) |
| 7 | Perineum & Repair (laceration degree, suture material, lignocaine) |
| 8 | Drugs & IV Fluids Chart (name, dose, route, time, indication - pre-filled with common NVD drugs) |
| 9 | 4th Stage Monitoring (BP/Pulse at 0, 15, 30, 60, 120 min; breastfeeding) |
| 10 | Delivery Summary & Outcome |
| 11 | Signatures (Doctor + Nurse/Midwife) |