Sepsis in pregnancy and puerperiumlong answer
"sepsis" AND "pregnancy" AND "puerperium"
"maternal sepsis" AND "pregnancy"
| Region | Period | Incidence (severe sepsis/100,000) | Mortality (per 100,000) |
|---|---|---|---|
| Netherlands | 1993-2006 | 21 | 1.64 |
| United Kingdom | 2011-12 | 47 | 0.64 |
| United States | 2013-16 | 49 | 6.9 |
| System | Manifestation |
|---|---|
| CNS | Altered mental status |
| Cardiovascular | Hypotension, myocardial dysfunction, circulatory collapse |
| Lungs | ARDS |
| GI tract | Paralytic ileus |
| Liver | Hepatic failure, abnormal transaminases |
| Kidneys | Oliguria, acute renal failure |
| Haematologic | Thrombocytopenia, DIC |
| Endocrine | Abnormal glucose handling, adrenal dysfunction |
| Parameter | Score 0 | Score 1 |
|---|---|---|
| Systolic BP | >90 mmHg | <90 mmHg |
| Respiratory rate | <25/min | >25/min |
| Altered mental status | Alert | Not alert |
| System | Score 0 | Score 1 | Score 2 |
|---|---|---|---|
| Respiratory (PaO2/FiO2) | >400 | 300-399 | <300 |
| Coagulation (platelets) | >150,000/μL | 100-150 | <100 |
| Hepatic (bilirubin) | <1.2 mg/dL | 1.2-1.9 mg/dL | >1.9 mg/dL |
| Cardiovascular (MAP mmHg) | >70 | <70 | Vasopressors required |
| CNS | Alert | Rousable to voice | Rousable to pain |
| Renal (creatinine) | <1.0 mg/dL | 1.0-1.4 mg/dL | >1.4 mg/dL |
| Action | Detail |
|---|---|
| Measure serum lactate | Repeat if >2 mmol/L |
| Obtain blood cultures | Before antibiotics |
| Administer broad-spectrum antibiotics | Within 1 hour of recognition |
| Rapid IV fluid administration | 30 mL/kg crystalloid if hypotensive or lactate >4 mmol/L (use cautiously in pregnancy) |
| Vasopressors | If hypotension persists after fluid; target MAP >65 mmHg (may be lower in young pregnant women) |
| Complication | Notes |
|---|---|
| Septic shock | Hypotension unresponsive to fluid; vasopressors required |
| ARDS | Bilateral pulmonary infiltrates, hypoxaemia; mechanical ventilation needed |
| Acute kidney injury | Oliguria, rising creatinine |
| DIC | Coagulopathy, haemorrhage |
| Multi-organ failure | Hepatic, renal, cardiac, CNS |
| Maternal death | GAS sepsis is a leading cause in developed nations |
| Intrauterine fetal death | |
| Preterm labour | Inflammatory mediators stimulate uterine contractions |
Recent evidence note: A 2025 systematic review and meta-analysis (PMID: 40056980) examined the global incidence of maternal sepsis - clinicians should consult this for updated global burden estimates, as data presented here largely predate this publication.
Generate a quick reference PDF for sepsis bundles in pregnancy
ls -la /tmp/workspace/ 2>/dev/null || echo "workspace does not exist yet"
mkdir -p /tmp/workspace/sepsis-pregnancy-pdf
~/sepsis-pregnancy-pdf/generate_pdf.py
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm, mm
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/tmp/workspace/sepsis-pregnancy-pdf/Sepsis_Bundles_Pregnancy_Quick_Reference.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
RED_DARK = colors.HexColor("#C0392B")
RED_LIGHT = colors.HexColor("#FADBD8")
BLUE_DARK = colors.HexColor("#1A5276")
BLUE_MED = colors.HexColor("#2E86C1")
BLUE_LIGHT = colors.HexColor("#D6EAF8")
TEAL = colors.HexColor("#148F77")
TEAL_LIGHT = colors.HexColor("#D1F2EB")
ORANGE = colors.HexColor("#D35400")
ORANGE_LT = colors.HexColor("#FAE5D3")
GREY_DARK = colors.HexColor("#2C3E50")
GREY_LIGHT = colors.HexColor("#F2F3F4")
WHITE = colors.white
YELLOW_LT = colors.HexColor("#FEF9E7")
# ── Page setup ───────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.5*cm, leftMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="Sepsis Bundles in Pregnancy – Quick Reference",
author="Orris Medical AI",
)
W, H = A4
CONTENT_W = W - 3*cm
styles = getSampleStyleSheet()
# Custom styles
def S(name, **kw):
return ParagraphStyle(name, **kw)
style_title = S("Title2",
fontSize=20, leading=24, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=0)
style_subtitle = S("Subtitle2",
fontSize=10, leading=13, textColor=colors.HexColor("#D6EAF8"),
fontName="Helvetica", alignment=TA_CENTER, spaceAfter=0)
style_section = S("Section",
fontSize=11, leading=14, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT,
spaceBefore=4, spaceAfter=2)
style_body = S("Body2",
fontSize=8.5, leading=11.5, textColor=GREY_DARK,
fontName="Helvetica", alignment=TA_LEFT,
spaceBefore=1, spaceAfter=1)
style_body_bold = S("BodyBold",
fontSize=8.5, leading=11.5, textColor=GREY_DARK,
fontName="Helvetica-Bold", alignment=TA_LEFT)
style_bullet = S("Bullet",
fontSize=8.5, leading=12, textColor=GREY_DARK,
fontName="Helvetica", leftIndent=10, bulletIndent=0,
spaceBefore=1, spaceAfter=1)
style_small = S("Small",
fontSize=7, leading=10, textColor=colors.HexColor("#7F8C8D"),
fontName="Helvetica-Oblique", alignment=TA_CENTER)
style_warn = S("Warn",
fontSize=8, leading=11, textColor=colors.HexColor("#7B241C"),
fontName="Helvetica-Bold", alignment=TA_CENTER)
style_cell_hdr = S("CellHdr",
fontSize=8.5, leading=11, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
style_cell = S("Cell",
fontSize=8, leading=11, textColor=GREY_DARK,
fontName="Helvetica", alignment=TA_LEFT)
style_cell_bold = S("CellBold",
fontSize=8, leading=11, textColor=GREY_DARK,
fontName="Helvetica-Bold", alignment=TA_LEFT)
style_note = S("Note",
fontSize=7.5, leading=10.5, textColor=colors.HexColor("#6E2F1A"),
fontName="Helvetica-Oblique", alignment=TA_LEFT)
# ── Helper: section header bar ───────────────────────────────────────────────
def section_header(text, bg=BLUE_DARK, icon=""):
full = f"{icon} {text}" if icon else text
data = [[Paragraph(full, style_section)]]
t = Table(data, colWidths=[CONTENT_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [4,4,4,4]),
]))
return t
def B(text):
return f"<b>{text}</b>"
def bullet_para(text, style=style_bullet):
return Paragraph(f"• {text}", style)
def note_box(text):
data = [[Paragraph(text, style_note)]]
t = Table(data, colWidths=[CONTENT_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), ORANGE_LT),
("BOX", (0,0), (-1,-1), 0.5, ORANGE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
return t
# ── Build elements list ───────────────────────────────────────────────────────
elems = []
# ═══════════════════════════════════════════════════════════════════════════════
# HEADER BANNER
# ═══════════════════════════════════════════════════════════════════════════════
header_data = [[
Paragraph("SEPSIS IN PREGNANCY & PUERPERIUM", style_title),
Paragraph("Quick Reference Card | Based on Surviving Sepsis Campaign 2021 & SOMANZ Guidelines", style_subtitle),
]]
header_table = Table([[
Paragraph("SEPSIS IN PREGNANCY & PUERPERIUM", style_title),
], [
Paragraph("Quick Reference Card • Surviving Sepsis Campaign 2021 (SSC) & SOMANZ Guidelines 2017", style_subtitle),
]], colWidths=[CONTENT_W])
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), BLUE_DARK),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
elems.append(header_table)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# DEFINITIONS ROW
# ═══════════════════════════════════════════════════════════════════════════════
elems.append(section_header("DEFINITIONS", bg=BLUE_DARK, icon="📋"))
elems.append(Spacer(1, 3))
def_data = [
[
Paragraph(B("Maternal Sepsis"), style_cell_bold),
Paragraph("Life-threatening organ dysfunction from infection during pregnancy, childbirth, post-abortion, or postpartum period (WHO 2017 / Sepsis-3)", style_cell),
],
[
Paragraph(B("Puerperal Sepsis"), style_cell_bold),
Paragraph("Infection of the genital tract within <b>3 weeks</b> of delivery with fever, tachycardia, foul-smelling lochia, lower abdominal pain/tenderness", style_cell),
],
[
Paragraph(B("Septic Shock"), style_cell_bold),
Paragraph("Sepsis + persisting hypotension requiring vasopressors to maintain MAP ≥65 mmHg AND serum lactate >2 mmol/L despite adequate fluid resuscitation", style_cell),
],
]
def_table = Table(def_data, colWidths=[3.5*cm, CONTENT_W - 3.5*cm])
def_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), BLUE_LIGHT),
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#A9CCE3")),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#AED6F1")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 7),
("RIGHTPADDING", (0,0), (-1,-1), 7),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elems.append(def_table)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# SCORING: omqSOFA + omSOFA side by side
# ═══════════════════════════════════════════════════════════════════════════════
elems.append(section_header("OBSTETRIC SCREENING SCORES (SOMANZ 2017)", bg=TEAL, icon="📊"))
elems.append(Spacer(1, 3))
COL_HALF = (CONTENT_W - 4) / 2
# omqSOFA
qsofa_data = [
[Paragraph("omqSOFA — SCREEN (≥2 = consider sepsis)", style_cell_hdr)],
[Paragraph(B("Parameter")+" | "+B("Normal")+" | "+B("Abnormal (score 1)"), style_cell_bold)],
[Paragraph("Systolic BP | >90 mmHg | <b><90 mmHg</b>", style_cell)],
[Paragraph("Respiratory rate | <25/min | <b>>25/min</b>", style_cell)],
[Paragraph("Mental status | Alert | <b>Not alert</b>", style_cell)],
[Paragraph("<i>Note: Higher RR & lower SBP thresholds than standard qSOFA to account for normal pregnancy physiology</i>", style_note)],
]
qsofa_t = Table(qsofa_data, colWidths=[COL_HALF])
qsofa_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), TEAL),
("BACKGROUND", (0,1), (0,1), TEAL_LIGHT),
("BACKGROUND", (0,2), (0,4), WHITE),
("BACKGROUND", (0,5), (0,5), YELLOW_LT),
("BOX", (0,0), (-1,-1), 0.8, TEAL),
("LINEBELOW", (0,0), (-1,-2), 0.3, colors.HexColor("#A2D9CE")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 7),
]))
# omSOFA
sofa_data = [
[Paragraph("omSOFA — ICU (increase ≥2 = sepsis)", style_cell_hdr)],
[Paragraph(B("System")+" | "+B("Score 0")+" | "+B("Score 1")+" | "+B("Score 2"), style_cell_bold)],
[Paragraph("Resp (PaO₂/FiO₂) | >400 | 300-399 | <b><300</b>", style_cell)],
[Paragraph("Platelets (×10³) | >150 | 100-150 | <b><100</b>", style_cell)],
[Paragraph("Bilirubin (mg/dL) | <1.2 | 1.2-1.9 | <b>>1.9</b>", style_cell)],
[Paragraph("MAP (mmHg) | >70 | <70 | <b>Vasopressors</b>", style_cell)],
[Paragraph("CNS | Alert | Voice | <b>Pain</b>", style_cell)],
[Paragraph("Creatinine (mg/dL) | <1.0 | 1.0-1.4 | <b>>1.4</b>", style_cell)],
]
sofa_t = Table(sofa_data, colWidths=[COL_HALF])
sofa_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), TEAL),
("BACKGROUND", (0,1), (0,1), TEAL_LIGHT),
("BACKGROUND", (0,2), (0,7), WHITE),
("BOX", (0,0), (-1,-1), 0.8, TEAL),
("LINEBELOW", (0,0), (-1,-2), 0.3, colors.HexColor("#A2D9CE")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 7),
]))
score_row = Table([[qsofa_t, Spacer(4,1), sofa_t]],
colWidths=[COL_HALF, 4, COL_HALF])
score_row.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 0),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
elems.append(score_row)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# HOUR-1 BUNDLE
# ═══════════════════════════════════════════════════════════════════════════════
elems.append(section_header("HOUR-1 BUNDLE (start immediately on recognition)", bg=RED_DARK, icon="⏱"))
elems.append(Spacer(1, 3))
h1_data = [
[Paragraph("STEP", style_cell_hdr), Paragraph("ACTION", style_cell_hdr), Paragraph("PREGNANCY NOTES", style_cell_hdr)],
[
Paragraph(B("1. Cultures"), style_cell_bold),
Paragraph("Blood cultures ×2 sets before antibiotics; urine MC&S; HVS/wound swabs as indicated", style_cell),
Paragraph("Do NOT delay antibiotics >45 min for culture collection", style_note),
],
[
Paragraph(B("2. Lactate"), style_cell_bold),
Paragraph("Serum lactate STAT\n• >2 mmol/L = hypoperfusion\n• >4 mmol/L = high risk; remeasure at 2 h", style_cell),
Paragraph("Lactate not affected by pregnancy; use standard thresholds", style_note),
],
[
Paragraph(B("3. Antibiotics"), style_cell_bold),
Paragraph("Broad-spectrum IV within <b>1 hour</b> of recognition\n(see Antibiotic Guide below)", style_cell),
Paragraph("Choose agents safe in pregnancy; narrow once sensitivities known", style_note),
],
[
Paragraph(B("4. Fluids"), style_cell_bold),
Paragraph("30 mL/kg IV balanced crystalloid (Ringer's Lactate preferred) if:\n• Hypotension (SBP <90) OR\n• Lactate ≥4 mmol/L", style_cell),
Paragraph("⚠ Cautious in pregnancy: lower colloid oncotic pressure → higher pulmonary oedema risk. Assess fluid responsiveness. Consider passive leg raise test.", style_note),
],
[
Paragraph(B("5. Vasopressors"), style_cell_bold),
Paragraph("Start if MAP <65 despite fluids\n<b>1st line: Norepinephrine</b>\n2nd line: Vasopressin (if NE dose high)\nAvoid dopamine", style_cell),
Paragraph("Norepinephrine studied in pregnancy and appears safe. Target MAP may be lower in young healthy gravidas.", style_note),
],
[
Paragraph(B("6. Source control"), style_cell_bold),
Paragraph("Identify focus within 6–12 h:\n• Retained POC → curettage\n• Abscess → percutaneous drainage\n• Necrotising fasciitis → urgent debridement", style_cell),
Paragraph("Most obstetric sepsis foci are uterine and easily accessible. Delivery ≠ automatic source control unless uterus is source.", style_note),
],
]
h1_col_w = [2.8*cm, CONTENT_W*0.48, CONTENT_W*0.35]
h1_table = Table(h1_data, colWidths=h1_col_w, repeatRows=1)
h1_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED_DARK),
("BACKGROUND", (0,1), (-1,1), RED_LIGHT),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), RED_LIGHT),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), RED_LIGHT),
("BACKGROUND", (0,6), (-1,6), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#F1948A")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
]))
elems.append(h1_table)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# ANTIBIOTIC GUIDE
# ═══════════════════════════════════════════════════════════════════════════════
elems.append(section_header("EMPIRIC ANTIBIOTIC GUIDE (IV, narrow when cultures return)", bg=BLUE_MED, icon="💊"))
elems.append(Spacer(1, 3))
abx_data = [
[
Paragraph("SOURCE", style_cell_hdr),
Paragraph("FIRST-LINE REGIMEN", style_cell_hdr),
Paragraph("ALTERNATIVE", style_cell_hdr),
Paragraph("SAFETY", style_cell_hdr),
],
[
Paragraph(B("Uterine / Genital\n(endometritis, chorioamnionitis)"), style_cell_bold),
Paragraph("Ampicillin 2g q6h IV\n+ Gentamicin 5mg/kg/day IV\n+ Metronidazole 500mg q8h IV", style_cell),
Paragraph("Pip-Tazo 4.5g q8h IV", style_cell),
Paragraph("Penicillins: safe\nGentamicin: use with TDM; avoid prolonged use\nMetronidazole: safe (avoid 1st trimester if possible)", style_note),
],
[
Paragraph(B("Urinary tract\n(pyelonephritis)"), style_cell_bold),
Paragraph("Ceftriaxone 2g od IV", style_cell),
Paragraph("Gentamicin 5mg/kg/day IV\nPip-Tazo if resistant", style_cell),
Paragraph("Cephalosporins: safe in all trimesters", style_note),
],
[
Paragraph(B("Unknown source\n(sepsis of unknown origin)"), style_cell_bold),
Paragraph("Pip-Tazo 4.5g q6h IV\n± Vancomycin if MRSA suspected", style_cell),
Paragraph("Meropenem 1g q8h if\nmulti-resistant suspected", style_cell),
Paragraph("Carbapenems: use only if necessary; considered safe", style_note),
],
[
Paragraph(B("Group A Strep (GAS)\npuerperal sepsis"), style_cell_bold),
Paragraph("Benzylpenicillin 2.4g q4h IV\n+ Clindamycin 900mg q8h IV\n(toxin suppression)", style_cell),
Paragraph("Ampicillin + Clindamycin", style_cell),
Paragraph("Penicillin + Clindamycin: safe\nAvoid chloramphenicol, tetracyclines", style_note),
],
[
Paragraph(B("Necrotising fasciitis"), style_cell_bold),
Paragraph("Pip-Tazo 4.5g q6h IV\n+ Clindamycin 900mg q8h IV\n+ Gentamicin\n→ URGENT surgical debridement", style_cell),
Paragraph("Meropenem + Clindamycin", style_cell),
Paragraph("Surgical debridement is mandatory; antibiotics alone insufficient", style_note),
],
]
abx_col_w = [3.2*cm, CONTENT_W*0.33, CONTENT_W*0.25, CONTENT_W*0.27]
abx_table = Table(abx_data, colWidths=abx_col_w, repeatRows=1)
abx_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), BLUE_MED),
("BACKGROUND", (0,1), (0,-1), colors.HexColor("#D6EAF8")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#EBF5FB"), WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AED6F1")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
elems.append(abx_table)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# RISK FACTORS | COMMON ORGANISMS side by side
# ═══════════════════════════════════════════════════════════════════════════════
COL3 = (CONTENT_W - 6) / 2
# Risk Factors
rf_hdr = Table([[Paragraph("RISK FACTORS", style_section)]],
colWidths=[COL3])
rf_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), ORANGE),
("TOPPADDING", (0,0),(-1,-1),5), ("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
rf_content = [
Paragraph(B("Stronger Risk (OR ≥2):"), style_cell_bold),
bullet_para("Caesarean section (OR 2–8)"),
bullet_para("Cerclage (OR 3.4–9.8)"),
bullet_para("Assisted reproductive technology (~OR 5)"),
bullet_para("HIV infection (OR 3.2–4.2)"),
bullet_para("Transfusion (OR 10.9)"),
bullet_para("Peripartum hysterectomy (OR 56)"),
bullet_para("Chronic renal disease (OR 33)"),
bullet_para("Chronic liver disease (OR 55)"),
bullet_para("Congestive heart failure (OR 135)"),
Spacer(1,3),
Paragraph(B("Moderate Risk:"), style_cell_bold),
bullet_para("Retained products of conception"),
bullet_para("Preterm prelabour ROM"),
bullet_para("Multiple pregnancy"),
bullet_para("Nulliparity, Age >35, African ancestry"),
bullet_para("Pregestational diabetes"),
]
rf_body = Table([[p] for p in rf_content], colWidths=[COL3])
rf_body.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), ORANGE_LT),
("TOPPADDING", (0,0),(-1,-1),2),
("BOTTOMPADDING", (0,0),(-1,-1),2),
("LEFTPADDING", (0,0),(-1,-1),6),
("RIGHTPADDING", (0,0),(-1,-1),6),
("BOX", (0,0),(-1,-1), 0.5, ORANGE),
]))
# Common Organisms
org_hdr = Table([[Paragraph("COMMON ORGANISMS", style_section)]],
colWidths=[COL3])
org_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#6C3483")),
("TOPPADDING", (0,0),(-1,-1),5), ("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
ORG_BG = colors.HexColor("#E8DAEF")
ORG_BORDER = colors.HexColor("#9B59B6")
org_content = [
Paragraph(B("Most Common:"), style_cell_bold),
bullet_para("E. coli — UTI/pyelonephritis, bacteraemia"),
bullet_para("Group A Streptococcus (S. pyogenes) — puerperal sepsis, toxic shock"),
bullet_para("Group B Streptococcus (S. agalactiae) — historic first cause"),
Spacer(1,3),
Paragraph(B("Also important:"), style_cell_bold),
bullet_para("Staphylococcus aureus (incl. MRSA) — wound/skin"),
bullet_para("Anaerobes — polymicrobial endometritis"),
bullet_para("Klebsiella, Proteus — urinary"),
bullet_para("Clostridium perfringens — post-abortion"),
Spacer(1,3),
Paragraph(B("Special features:"), style_cell_bold),
bullet_para("Blood cultures negative in ~2/3 of sepsis cases"),
bullet_para("No organism identified in ~16% of maternal sepsis"),
bullet_para("Polymicrobial in 15% of fatal cases"),
Paragraph("<i>GAS: presents WITHOUT tachycardia or leukocytosis — do not be falsely reassured</i>", style_note),
]
org_body = Table([[p] for p in org_content], colWidths=[COL3])
org_body.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), ORG_BG),
("TOPPADDING", (0,0),(-1,-1),2),
("BOTTOMPADDING", (0,0),(-1,-1),2),
("LEFTPADDING", (0,0),(-1,-1),6),
("RIGHTPADDING", (0,0),(-1,-1),6),
("BOX", (0,0),(-1,-1), 0.5, ORG_BORDER),
]))
two_col = Table(
[[rf_hdr, Spacer(6,1), org_hdr],
[rf_body, Spacer(6,1), org_body]],
colWidths=[COL3, 6, COL3]
)
two_col.setStyle(TableStyle([
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1),0),
("BOTTOMPADDING", (0,0),(-1,-1),0),
("LEFTPADDING", (0,0),(-1,-1),0),
("RIGHTPADDING", (0,0),(-1,-1),0),
]))
elems.append(two_col)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# FLUID RESUSCITATION & VASOPRESSORS
# ═══════════════════════════════════════════════════════════════════════════════
elems.append(section_header("HAEMODYNAMIC MANAGEMENT", bg=colors.HexColor("#117A65"), icon="🩺"))
elems.append(Spacer(1,3))
hd_data = [
[
Paragraph(B("Fluid responsiveness assessment:"), style_cell_bold),
Paragraph("• Passive leg raise 45° for 2–3 min → improved HR/BP = fluid responder (easy, reversible)\n"
"• POCUS: IVC <1.5 cm collapsibility = fluid responsive; IVC >2.5 cm = avoid loading\n"
"• Only ~50% of hypotensive septic patients are fluid responders\n"
"• ⚠ Supine IVC compressed by gravid uterus — ensure LEFT LATERAL TILT when assessing", style_cell),
],
[
Paragraph(B("Vasopressors:"), style_cell_bold),
Paragraph("• 1st line: <b>Norepinephrine</b> — start if MAP <65 despite 30 mL/kg fluid\n"
"• 2nd line: <b>Vasopressin</b> 0.03 u/min — add if NE dose escalating\n"
"• 3rd line: <b>Epinephrine</b> — severe refractory shock\n"
"• Avoid <b>dopamine</b> (higher arrhythmia risk)\n"
"• MAP target: ≥65 mmHg (may accept slightly lower in young healthy gravidas)", style_cell),
],
[
Paragraph(B("Steroids:"), style_cell_bold),
Paragraph("Consider <b>Hydrocortisone 200 mg/day IV</b> (50 mg q6h or infusion) if septic shock refractory to fluids + vasopressors (relative adrenal insufficiency)", style_cell),
],
]
hd_col_w = [3.5*cm, CONTENT_W - 3.5*cm]
hd_table = Table(hd_data, colWidths=hd_col_w)
hd_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), TEAL_LIGHT),
("BACKGROUND", (0,0),(0,-1), colors.HexColor("#A2D9CE")),
("GRID", (0,0),(-1,-1), 0.4, TEAL),
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1),5),
("BOTTOMPADDING", (0,0),(-1,-1),5),
("LEFTPADDING", (0,0),(-1,-1),6),
("RIGHTPADDING", (0,0),(-1,-1),6),
]))
elems.append(hd_table)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# FETAL CONSIDERATIONS + SUPPORTIVE CARE side by side
# ═══════════════════════════════════════════════════════════════════════════════
COL4 = (CONTENT_W - 6) / 2
fetal_items = [
Paragraph(B("Monitoring:"), style_cell_bold),
bullet_para("Continuous CTG — fetal tachycardia often first sign of maternal fever"),
bullet_para("Maternal stabilisation is priority over immediate delivery"),
Spacer(1,3),
Paragraph(B("Delivery decisions:"), style_cell_bold),
bullet_para("Delivery does NOT automatically improve maternal sepsis"),
bullet_para("If chorioamnionitis at term → expedite delivery (vaginal preferred)"),
bullet_para("If uterus is septic focus and not controllable — consider delivery"),
bullet_para("Neonatal team alert if GAS/GBS maternal sepsis → neonatal sepsis screen"),
Spacer(1,3),
Paragraph(B("IUFD:"), style_cell_bold),
bullet_para("Intrauterine fetal death possible with severe maternal sepsis"),
]
supp_items = [
Paragraph(B("Supportive care bundle:"), style_cell_bold),
bullet_para("O₂: maintain SpO₂ ≥94%"),
bullet_para("Mechanical ventilation if ARDS (tidal vol 6 mL/kg IBW)"),
bullet_para("Blood glucose: target 7.8–10 mmol/L (140–180 mg/dL)"),
bullet_para("LMWH thromboprophylaxis when haemostasis secure"),
bullet_para("PPI for stress ulcer prophylaxis"),
bullet_para("RBC transfusion if Hb <7 g/dL (unless cardiac ischaemia/shock)"),
bullet_para("Serum lactate clearance: remeasure at 2 h; target >10% clearance"),
bullet_para("Urinary catheter — hourly urine output (target >0.5 mL/kg/h)"),
Spacer(1,3),
Paragraph(B("Do NOT use:"), style_cell_bold),
bullet_para("Activated Protein C (no mortality benefit — withdrawn)"),
bullet_para("Dopamine as vasopressor"),
]
def mini_box(items, bg_hdr, bg_body, border_col, title):
hdr = Table([[Paragraph(title, style_section)]], colWidths=[COL4])
hdr.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),bg_hdr),
("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
body = Table([[i] for i in items], colWidths=[COL4])
body.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),bg_body),
("TOPPADDING",(0,0),(-1,-1),2),("BOTTOMPADDING",(0,0),(-1,-1),2),
("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
("BOX",(0,0),(-1,-1),0.5,border_col),
]))
return hdr, body
fhdr, fbody = mini_box(fetal_items, colors.HexColor("#1F618D"), colors.HexColor("#D6EAF8"),
colors.HexColor("#2E86C1"), "FETAL CONSIDERATIONS")
shdr, sbody = mini_box(supp_items, colors.HexColor("#117A65"), TEAL_LIGHT,
TEAL, "SUPPORTIVE CARE")
two_col2 = Table(
[[fhdr, Spacer(6,1), shdr],
[fbody, Spacer(6,1), sbody]],
colWidths=[COL4, 6, COL4]
)
two_col2.setStyle(TableStyle([
("VALIGN",(0,0),(-1,-1),"TOP"),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0),
("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
]))
elems.append(two_col2)
elems.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════════════════════════════
# WARNING BOXES
# ═══════════════════════════════════════════════════════════════════════════════
warn_data = [
[
Paragraph("⚠ KEY PREGNANCY-SPECIFIC PITFALLS", style_warn),
],
[
Table([
[
Paragraph("• Normal pregnancy OVERLAPS with SIRS criteria (tachycardia, leukocytosis, ↓PaCO₂, ↑RR) — use omqSOFA thresholds", style_cell),
Paragraph("• GAS sepsis: fever + pain + hypotension — but NO tachycardia or leukocytosis", style_cell),
Paragraph("• Pulmonary oedema risk higher — cautious fluid bolus; reassess frequently", style_cell),
]
], colWidths=[CONTENT_W/3-4, CONTENT_W/3-4, CONTENT_W/3-4])
]
]
warn_table = Table(warn_data, colWidths=[CONTENT_W])
warn_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), colors.HexColor("#C0392B")),
("BACKGROUND", (0,1),(0,1), colors.HexColor("#FDEDEC")),
("BOX", (0,0),(-1,-1), 1.0, colors.HexColor("#C0392B")),
("TOPPADDING", (0,0),(-1,-1),5),
("BOTTOMPADDING", (0,0),(-1,-1),5),
("LEFTPADDING", (0,0),(-1,-1),8),
("RIGHTPADDING", (0,0),(-1,-1),8),
]))
elems.append(warn_table)
elems.append(Spacer(1, 5))
# ═══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ═══════════════════════════════════════════════════════════════════════════════
footer_data = [[
Paragraph(
"Sources: Surviving Sepsis Campaign 2021 (survivingsepsis.org) • SOMANZ Sepsis Guidelines 2017 • "
"Creasy & Resnik's Maternal-Fetal Medicine 9e • Goldman-Cecil Medicine • WHO Maternal Sepsis Definition 2017 | "
"Generated by Orris Medical AI • July 2026 • For educational/clinical support use. Always verify against local protocols.",
style_small
)
]]
footer_table = Table(footer_data, colWidths=[CONTENT_W])
footer_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), GREY_DARK),
("TOPPADDING", (0,0),(-1,-1),6),
("BOTTOMPADDING", (0,0),(-1,-1),6),
("LEFTPADDING", (0,0),(-1,-1),8),
("RIGHTPADDING", (0,0),(-1,-1),8),
]))
# Override text color for footer
style_small_white = S("SmallW",
fontSize=7, leading=10, textColor=WHITE,
fontName="Helvetica-Oblique", alignment=TA_CENTER)
footer_data2 = [[
Paragraph(
"Sources: Surviving Sepsis Campaign 2021 (survivingsepsis.org) • SOMANZ Sepsis Guidelines 2017 • "
"Creasy & Resnik's Maternal-Fetal Medicine 9e • Goldman-Cecil Medicine • WHO Maternal Sepsis Definition 2017 | "
"Generated by Orris Medical AI • July 2026 • For educational/clinical support use only.",
style_small_white
)
]]
footer_table2 = Table(footer_data2, colWidths=[CONTENT_W])
footer_table2.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), GREY_DARK),
("TOPPADDING", (0,0),(-1,-1),6),
("BOTTOMPADDING", (0,0),(-1,-1),6),
("LEFTPADDING", (0,0),(-1,-1),8),
("RIGHTPADDING", (0,0),(-1,-1),8),
]))
elems.append(footer_table2)
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(elems)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/sepsis-pregnancy-pdf && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/sepsis-pregnancy-pdf/
Sepsis Bundles Pregnancy Quick Reference
PDF Document · PDF
| Section | Content |
|---|---|
| Definitions | Maternal sepsis (WHO 2017/Sepsis-3), Puerperal sepsis, Septic shock |
| Screening scores | omqSOFA + full obstetrically modified SOFA (SOMANZ 2017) side by side |
| Hour-1 Bundle | 6 steps with pregnancy-specific notes for each (cultures, lactate, antibiotics, fluids, vasopressors, source control) |
| Empiric antibiotics | 5 source-specific regimens (uterine, UTI, unknown, GAS, necrotising fasciitis) with safety notes |
| Risk factors | Stratified by OR strength (modest → OR ≥135 for CCF) |
| Common organisms | GAS, E. coli, GBS, MRSA, anaerobes with clinical pearls |
| Haemodynamic management | Fluid responsiveness assessment, vasopressor ladder, steroids |
| Fetal considerations | CTG monitoring, delivery decision algorithm |
| Supportive care | O₂, ventilation, glucose, DVT, stress ulcer, transfusion thresholds |
| Key pitfalls box | Pregnancy-SIRS overlap, GAS no-tachycardia trap, pulmonary oedema risk |
Samm in obster short notes
The term "near-miss" was borrowed from aviation safety culture and formalised for obstetrics by the WHO in 2009. Some guidelines use "serious acute maternal morbidity (SAMM)" interchangeably.
| Domain | Examples |
|---|---|
| Clinical markers | Acute cyanosis, gasping, respiratory rate <6 or >40/min, shock (pulse >150 or BP <90 systolic for >60 min) |
| Laboratory markers | pH <7.1, lactate >5 mmol/L, severe acute thrombocytopenia (<50,000 platelets), severe hyperbilirubinaemia |
| Management-based markers | Continuous use of vasoactive agents, hysterectomy for infection/haemorrhage, dialysis for acute renal failure, intubation and ventilation unrelated to anaesthesia, transfusion of ≥5 units pRBC |
Pregnancy → Complication → SAMM / Near-miss → Maternal Death
↑
SAMM zone
| Category | Risk Factor |
|---|---|
| Demographic | Black/ethnic minority (5-fold higher risk in Black vs White women - UK data), age extremes, low socioeconomic status |
| Obstetric | Caesarean section, multiple pregnancy, nulliparity, assisted conception |
| Medical | Pre-existing cardiac/renal/liver disease, diabetes, HIV, obesity |
| Iatrogenic | Peripartum hysterectomy (OR 56), transfusion, cerclage |
| Index | Formula | Interpretation |
|---|---|---|
| Maternal near-miss ratio | Near-miss cases per 1000 live births | ↑ = poor care quality |
| Maternal near-miss mortality ratio | Near-miss : maternal deaths | ↑ = better care (more survived) |
| Mortality index | Deaths ÷ (deaths + near-misses) × 100% | ↓ = better survival |
| Severe maternal outcome ratio | (Near-miss + deaths) per 1000 live births | Overall burden |
| Bundle | Components |
|---|---|
| Obstetric Haemorrhage Bundle | Active management of 3rd stage, oxytocin, uterotonic step-up, massive transfusion protocol, surgical options |
| Severe Hypertension Bundle | Antihypertensives within 30-60 min of severe BP, MgSO4 for seizure prophylaxis, delivery planning |
| Sepsis Bundle | Blood cultures, IV antibiotics within 1 hour, source control, fluids, vasopressors (SSC/SOMANZ) |
| VTE Bundle | Risk assessment, LMWH, TED stockings, mobilisation |
| Peripartum Cardiomyopathy | Echo, guideline-directed heart failure therapy, delivery planning |
| Feature | Detail |
|---|---|
| Definition | Life-threatening condition in pregnancy/puerperium from which woman survives |
| Synonym | Maternal near-miss |
| WHO criteria | Clinical + lab + management-based markers |
| Main causes | Haemorrhage, hypertension, sepsis, VTE, cardiac |
| Key audit tool | Maternal near-miss ratio, mortality index |
| UK surveillance | MBRRACE-UK, UKOSS, ICNARC |
| US surveillance | CDC SMM indicators, AIM bundles |
| Prevention | Safety bundles, early warning systems, MDT care, racial equity initiatives |
| Preventable fraction | 40-70% of cases |