maternal changes in pregnancy in each system
| Parameter | Change |
|---|---|
| Cardiac output | +40% at term |
| Stroke volume | +30% |
| Heart rate | +20% |
| Blood volume | +35% (total) |
| Plasma volume | +55% |
| Systolic BP | -5% |
| Diastolic BP | -15% |
| Peripheral vascular resistance | -15% |
| Pulmonary vascular resistance | -30% |
| Parameter | Change |
|---|---|
| Oxygen consumption | +20 to 50% |
| Minute ventilation | +50% |
| Tidal volume | +40% |
| Respiratory rate | +15% |
| PaO₂ | slightly increased |
| PaCO₂ | decreased to 28-32 mmHg (-15%) |
| HCO₃ | -15% (compensatory) |
| FRC | -20% |
| Airway resistance | -35% |
| Vital capacity | minimally affected |
| Parameter | Change |
|---|---|
| Haemoglobin | -20% (dilutional) |
| Platelets | -10% (3rd trimester) |
| Clotting factors | +30-250% |
| WBC | up to 21,000/µL (leukocytosis) |
| Parameter | Change |
|---|---|
| GFR | +50% |
| Renal plasma flow | increased |
| Serum creatinine | decreased (as low as 0.5 mg/dL) |
| BUN | decreased (as low as 9 mg/dL) |
| Plasma osmolality | -8 to 10 mOsm/kg |
| System | Key Changes |
|---|---|
| Cardiovascular | CO +40%, plasma volume +55%, BP slightly decreased, HR +20%, dilutional anaemia |
| Respiratory | Minute ventilation +50%, FRC -20%, chronic resp. alkalosis (PaCO₂ 28-32 mmHg) |
| Haematological | Hypercoagulable, dilutional anaemia, leukocytosis, thrombocytopaenia (mild) |
| Renal | GFR +50%, creatinine/BUN decreased, glycosuria & mild proteinuria (normal) |
| GI | Gastric reflux risk, reduced motility, aspiration risk, gallstone predisposition |
| Hepatic | Alk phos elevated (placental), albumin reduced, pseudocholinesterase -25-30% |
| Metabolic/Endocrine | Insulin resistance, thyroid enlargement (euthyroid), gestational diabetes risk |
| CNS | MAC -40%, regional anaesthetic requirements reduced, enhanced sensitivity |
| Musculoskeletal | Joint laxity (relaxin), lumbar lordosis, back pain |
| Skin | Melasma, linea nigra, spider naevi, striae |
Create a summary document on pregnancy physiology for quick reference
mkdir -p /home/daytona/workspace/pregnancy-physiology && ls /home/daytona/worksp…
~/pregnancy-physiology/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/pregnancy-physiology/Pregnancy_Physiology_Quick_Reference.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DEEP_TEAL = colors.HexColor("#1A5C6B")
MID_TEAL = colors.HexColor("#2A7D8C")
LIGHT_TEAL = colors.HexColor("#D6EFF3")
ACCENT_PINK = colors.HexColor("#C0507A")
LIGHT_PINK = colors.HexColor("#FAE6EE")
GOLD = colors.HexColor("#D4A017")
LIGHT_GOLD = colors.HexColor("#FDF5DC")
GREY_BG = colors.HexColor("#F4F6F8")
DARK_TEXT = colors.HexColor("#1E1E2E")
MID_GREY = colors.HexColor("#6B7280")
WHITE = colors.white
# ── Styles ───────────────────────────────────────────────────────────────────
base_styles = getSampleStyleSheet()
def make_style(name, parent="Normal", **kwargs):
return ParagraphStyle(name, parent=base_styles[parent], **kwargs)
title_style = make_style("DocTitle",
fontSize=26, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4, leading=32)
subtitle_style = make_style("DocSubtitle",
fontSize=12, textColor=colors.HexColor("#B2DDE6"),
alignment=TA_CENTER, fontName="Helvetica", spaceAfter=2, leading=16)
section_heading = make_style("SecHeading",
fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
leading=18, spaceAfter=0, spaceBefore=0)
sub_heading = make_style("SubHeading",
fontSize=10, textColor=DEEP_TEAL, fontName="Helvetica-Bold",
leading=14, spaceAfter=2, spaceBefore=4)
body_style = make_style("Body",
fontSize=9, textColor=DARK_TEXT, fontName="Helvetica",
leading=13, spaceAfter=2, spaceBefore=1)
bullet_style = make_style("Bullet",
fontSize=9, textColor=DARK_TEXT, fontName="Helvetica",
leading=13, spaceAfter=1, spaceBefore=0,
leftIndent=10, firstLineIndent=-8)
key_style = make_style("KeyPoint",
fontSize=9, textColor=colors.HexColor("#7B2D52"),
fontName="Helvetica-BoldOblique", leading=13, spaceAfter=2,
leftIndent=6)
table_header_style = ParagraphStyle("TH",
parent=base_styles["Normal"],
fontSize=8.5, textColor=WHITE,
fontName="Helvetica-Bold", leading=12, alignment=TA_CENTER)
table_cell_style = ParagraphStyle("TC",
parent=base_styles["Normal"],
fontSize=8.5, textColor=DARK_TEXT,
fontName="Helvetica", leading=12, alignment=TA_LEFT)
table_cell_center = ParagraphStyle("TCC",
parent=base_styles["Normal"],
fontSize=8.5, textColor=DARK_TEXT,
fontName="Helvetica", leading=12, alignment=TA_CENTER)
change_up = ParagraphStyle("Up",
parent=base_styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#166534"),
fontName="Helvetica-Bold", leading=12, alignment=TA_CENTER)
change_dn = ParagraphStyle("Dn",
parent=base_styles["Normal"],
fontSize=8.5, textColor=colors.HexColor("#991B1B"),
fontName="Helvetica-Bold", leading=12, alignment=TA_CENTER)
change_nc = ParagraphStyle("NC",
parent=base_styles["Normal"],
fontSize=8.5, textColor=MID_GREY,
fontName="Helvetica", leading=12, alignment=TA_CENTER)
# ── Helpers ──────────────────────────────────────────────────────────────────
def section_header(title, icon=""):
data = [[Paragraph(f"{icon} {title}" if icon else title, section_heading)]]
t = Table(data, colWidths=[17.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), MID_TEAL),
("ROUNDEDCORNERS", [4, 4, 4, 4]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return t
def bullet(text):
return Paragraph(f"• {text}", bullet_style)
def key_point(text):
return Paragraph(f"★ {text}", key_style)
def small_hr():
return HRFlowable(width="100%", thickness=0.5,
color=colors.HexColor("#D1D5DB"), spaceAfter=4, spaceBefore=4)
def mini_table(headers, rows, col_widths=None):
"""Build a styled mini-table."""
data = [[Paragraph(h, table_header_style) for h in headers]]
for row in rows:
styled = []
for cell in row:
if isinstance(cell, str):
if cell.startswith("+"):
styled.append(Paragraph(cell, change_up))
elif cell.startswith("-") or cell.startswith("↓"):
styled.append(Paragraph(cell, change_dn))
elif cell in ("Unchanged", "Normal", "—"):
styled.append(Paragraph(cell, change_nc))
else:
styled.append(Paragraph(cell, table_cell_center))
else:
styled.append(cell)
data.append(styled)
if col_widths is None:
col_widths = [17.5*cm / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), DEEP_TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_BG]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#D1D5DB")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
])
t.setStyle(style)
return t
def sp(n=6):
return Spacer(1, n)
# ── Cover banner ─────────────────────────────────────────────────────────────
def cover_banner():
banner_data = [[
Paragraph("MATERNAL PHYSIOLOGY IN PREGNANCY", title_style),
Paragraph("Quick Reference Guide for Medical Students", subtitle_style),
Paragraph("Sources: Morgan & Mikhail's Clinical Anesthesiology 7e | Guyton & Hall Medical Physiology | Creasy & Resnik's Maternal-Fetal Medicine", subtitle_style),
]]
banner = Table([[Paragraph("MATERNAL PHYSIOLOGY IN PREGNANCY", title_style)],
[Paragraph("Quick Reference Guide • Medical Students", subtitle_style)],
[Paragraph("Sources: Morgan & Mikhail 7e | Guyton & Hall | Creasy & Resnik", subtitle_style)]],
colWidths=[17.5*cm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_TEAL),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 16),
("RIGHTPADDING", (0,0), (-1,-1), 16),
]))
return banner
# ── Master numeric summary table ──────────────────────────────────────────────
def master_table():
headers = ["System / Parameter", "Change", "Value / Detail"]
rows = [
# Cardiovascular
["CARDIOVASCULAR", "", ""],
["Cardiac output", "+40%", "At term; mainly 1st trimester"],
["Plasma volume", "+55%", "Exceeds RBC mass rise (+45%)"],
["Blood volume", "+35%", "+1,000-1,500 mL total"],
["Stroke volume", "+30%", ""],
["Heart rate", "+20%", "~15 bpm increase"],
["Systolic BP", "-5%", "Nadir mid-2nd trimester"],
["Diastolic BP", "-15%", "Nadir mid-2nd trimester"],
["Peripheral resistance", "-15%", "Progesterone + prostacyclin"],
["Pulmonary resistance", "-30%", ""],
["CVP / PCWP", "Unchanged", "Despite raised CO"],
# Respiratory
["RESPIRATORY", "", ""],
["Minute ventilation", "+50%", "Progesterone drives this"],
["Tidal volume", "+40%", "Primary mechanism"],
["Respiratory rate", "+15%", ""],
["O2 consumption", "+20-50%", ""],
["FRC", "-20%", "Returns to normal 48h post-delivery"],
["Airway resistance", "-35%", ""],
["PaO2", "+10%", "Mild hyperventilation effect"],
["PaCO2", "-15%", "28-32 mmHg at term"],
["HCO3", "-15%", "Compensatory; ~20 mEq/L"],
# Haematological
["HAEMATOLOGICAL", "", ""],
["Haemoglobin", "-20%", "Min >11 g/dL (dilutional)"],
["Platelets", "-10%", "3rd trimester; gestational thrombocytopaenia"],
["Clotting factors", "+30-250%", "Factors VII, VIII, IX, X, XII"],
["WBC", "+", "Up to 21,000/uL (leukocytosis)"],
# Renal
["RENAL", "", ""],
["GFR", "+50%", ""],
["Serum creatinine", "-", "As low as 0.5 mg/dL"],
["BUN", "-", "As low as 9 mg/dL"],
["Plasma osmolality", "-", "-8 to 10 mOsm/kg"],
# CNS / Anaesthesia
["CNS / ANAESTHESIA", "", ""],
["MAC (volatiles)", "-40%", "Returns to normal day 3 post-delivery"],
["Epidural LA dose", "-30%", "Engorgement of epidural veins"],
# Metabolic
["METABOLIC / ENDOCRINE", "", ""],
["Insulin resistance", "+", "hPL causes peripheral resistance"],
["Thyroid (total T4/T3)", "+", "Free T4/T3/TSH remain normal"],
["Pseudocholinesterase", "-25-30%", "Rarely clinically significant"],
]
col_w = [7.5*cm, 3*cm, 7*cm]
data = [[Paragraph(h, table_header_style) for h in headers]]
for row in rows:
param, change, detail = row
# Section separator rows (ALL CAPS, no change)
if change == "" and detail == "":
data.append([
Paragraph(param, ParagraphStyle("SecRow",
parent=base_styles["Normal"],
fontSize=8.5, textColor=WHITE,
fontName="Helvetica-Bold", leading=12)),
Paragraph("", table_cell_center),
Paragraph("", table_cell_center),
])
else:
if change.startswith("+"):
ch_p = Paragraph(change, change_up)
elif change.startswith("-"):
ch_p = Paragraph(change, change_dn)
elif change == "Unchanged":
ch_p = Paragraph(change, change_nc)
else:
ch_p = Paragraph(change, table_cell_center)
data.append([
Paragraph(param, table_cell_style),
ch_p,
Paragraph(detail, table_cell_style),
])
t = Table(data, colWidths=col_w, repeatRows=1)
# Base style
ts = TableStyle([
("BACKGROUND", (0,0), (-1,0), DEEP_TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_BG]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#D1D5DB")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
])
# Colour the section separator rows
sep_indices = [i+1 for i, row in enumerate(rows) if row[1] == "" and row[2] == ""]
for idx in sep_indices:
ts.add("BACKGROUND", (0, idx), (-1, idx), MID_TEAL)
ts.add("SPAN", (0, idx), (-1, idx))
t.setStyle(ts)
return t
# ── Build document ────────────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="Maternal Physiology in Pregnancy – Quick Reference",
author="Orris AI",
)
story = []
# ── Cover ──
story.append(cover_banner())
story.append(sp(10))
# ── Master numeric table ──
story.append(section_header("MASTER SUMMARY TABLE", ""))
story.append(sp(6))
story.append(master_table())
story.append(sp(14))
# ── PAGE 2 onwards: System-by-system ──
story.append(PageBreak())
# ===== 1. CARDIOVASCULAR =====
story.append(section_header("1. CARDIOVASCULAR SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("Haemodynamic Changes", sub_heading),
bullet("CO rises 40% at term; mainly due to SV (+30%) and HR (+20%)"),
bullet("Plasma volume rises 55%; RBC mass rises 45% → dilutional anaemia (Hb rarely <11 g/dL)"),
bullet("Total blood volume +1,000–1,500 mL; reaches ~90 mL/kg at term"),
bullet("Systolic BP falls ~5%, diastolic BP falls ~15% (nadir mid-2nd trimester)"),
bullet("Peripheral vascular resistance -15%; pulmonary vascular resistance -30%"),
bullet("CVP, PAP, and PCWP remain unchanged despite elevated CO"),
sp(4),
Paragraph("Structural Changes", sub_heading),
bullet("Cardiac chambers enlarge; myocardial hypertrophy on echo"),
bullet("Diaphragm elevation shifts heart leftward → left axis deviation and T-wave changes on ECG"),
bullet("Chest X-ray: prominent vascular markings, apparent cardiac enlargement"),
sp(4),
Paragraph("Aortocaval Compression (supine after week 20)", sub_heading),
bullet("Gravid uterus compresses IVC → impeded venous return → reduced CO"),
bullet("~5% develop supine hypotension syndrome (pallor, sweating, nausea)"),
bullet("Treatment: left lateral tilt (>15 degree wedge under right hip)"),
bullet("Chronic compression → venous stasis, oedema, varicosities, distended epidural veins"),
sp(4),
key_point("Blood loss at delivery: 200–500 mL (vaginal) vs 800–1,000 mL (C-section). Expanded volume provides safety margin."),
]))
story.append(sp(8))
# ===== 2. RESPIRATORY =====
story.append(section_header("2. RESPIRATORY SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("Ventilation", sub_heading),
bullet("Minute ventilation +50% (tidal volume +40%, RR +15%)"),
bullet("Progesterone sensitises respiratory centre to CO2 → hyperventilation"),
bullet("PaCO2 falls to 28–32 mmHg; compensatory HCO3 excretion (renal) → serum HCO3 ~20 mEq/L"),
bullet("Chronic respiratory alkalosis is NORMAL in pregnancy"),
sp(4),
Paragraph("Lung Volumes", sub_heading),
bullet("FRC falls 20% at term (mainly reduced expiratory reserve volume)"),
bullet("Vital capacity and closing capacity are minimally affected"),
bullet("Returns to normal within 48 h post-delivery"),
sp(4),
Paragraph("Oxygen Delivery", sub_heading),
bullet("O2 consumption +20–50%; PaO2 slightly increased"),
bullet("2,3-DPG elevated → P50 shifts from 27 to 30 mmHg (rightward shift) → enhanced O2 offloading to tissues"),
bullet("Increased CO amplifies total O2 delivery despite lower Hb"),
sp(4),
Paragraph("Airway", sub_heading),
bullet("Airway resistance -35% (progesterone-mediated bronchodilation)"),
bullet("Mucosal engorgement → risk of trauma, bleeding, and obstruction during intubation"),
bullet("Use smaller ETT (6.0–6.5 mm) for general anaesthesia"),
sp(4),
key_point("CRITICAL: Decreased FRC + increased O2 consumption = rapid desaturation during apnoea. Pre-oxygenation before GA is MANDATORY."),
]))
story.append(sp(8))
# ===== 3. HAEMATOLOGICAL =====
story.append(section_header("3. HAEMATOLOGICAL SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("Anaemia", sub_heading),
bullet("Dilutional anaemia: plasma volume +55% vs RBC mass +45%"),
bullet("Hb rarely falls below 11 g/dL; this is physiological"),
bullet("Iron stores often inadequate (fetus needs 375 mg + mother needs 600 mg extra)"),
bullet("Folate supplementation essential to prevent megaloblastic anaemia"),
sp(4),
Paragraph("Hypercoagulability (adaptive)", sub_heading),
bullet("Fibrinogen and factors VII, VIII, IX, X, XII all increase (+30 to +250%)"),
bullet("Factor XI may decrease"),
bullet("Accelerated fibrinolysis appears in late 3rd trimester"),
bullet("DVT risk increased: hypercoagulability + venous stasis from IVC compression"),
sp(4),
Paragraph("Other", sub_heading),
bullet("Leukocytosis up to 21,000/uL in 3rd trimester (normal; do not over-interpret)"),
bullet("Platelet count -10% (gestational thrombocytopaenia; usually benign)"),
]))
story.append(sp(8))
# ===== 4. RENAL =====
story.append(section_header("4. RENAL SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
bullet("GFR +50%; renal plasma flow also increased"),
bullet("Serum creatinine as low as 0.5 mg/dL; BUN as low as 9 mg/dL"),
bullet("A 'normal' creatinine of 1.0 mg/dL may indicate significant renal impairment in pregnancy"),
bullet("Reduced renal tubular thresholds → glycosuria (1–10 g/day) and proteinuria (<300 mg/day) are normal"),
bullet("Plasma osmolality reset -8 to 10 mOsm/kg (new normal set point)"),
bullet("Na/Cl/water reabsorption capacity +50% (aldosterone + oestrogen)"),
bullet("Urinary stasis (ureteral dilation from progesterone + mechanical) → increased UTI risk"),
sp(4),
key_point("Normal serum creatinine in pregnancy is 0.4–0.6 mg/dL. A value of 0.9 mg/dL may already signal dysfunction."),
]))
story.append(sp(8))
# ===== 5. GI =====
story.append(section_header("5. GASTROINTESTINAL SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("Reflux and Aspiration Risk", sub_heading),
bullet("Progesterone relaxes lower oesophageal sphincter → GORD and oesophagitis very common"),
bullet("Uterus displaces stomach upward/anteriorly → mechanical incompetence of LOS"),
bullet("Gastric motility reduced (progesterone)"),
bullet("Gastric volume and acidity NOT significantly changed"),
bullet("Opioids and anticholinergics worsen reflux risk"),
sp(4),
key_point("HIGH aspiration risk (Mendelson syndrome) in parturients under GA. Rapid-sequence induction + cricoid pressure indicated."),
sp(4),
Paragraph("Gallbladder", sub_heading),
bullet("Progesterone inhibits cholecystokinin → incomplete gallbladder emptying"),
bullet("Altered bile acid composition + stasis → predisposition to cholesterol gallstones"),
sp(4),
Paragraph("Other", sub_heading),
bullet("Constipation from reduced motility and uterine compression"),
bullet("Nausea and vomiting of pregnancy (NVP): peaks at 8–10 weeks; driven by hCG"),
]))
story.append(sp(8))
# ===== 6. HEPATIC =====
story.append(section_header("6. HEPATIC SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
bullet("Overall hepatic blood flow and synthetic function: UNCHANGED"),
bullet("Minor AST, ALT, LDH elevation in 3rd trimester may be seen (mild)"),
bullet("Alkaline phosphatase elevated (placental isoform — NOT pathological)"),
bullet("Serum albumin mildly decreased (plasma volume dilution) → reduced colloid oncotic pressure → dependent oedema"),
bullet("Pseudocholinesterase (butyrylcholinesterase) activity -25 to 30% at term"),
bullet("Does not normalise until ~6 weeks postpartum; rarely causes clinically significant prolongation of succinylcholine"),
bullet("High progesterone → incomplete gallbladder emptying → cholestasis/gallstone risk"),
sp(4),
key_point("Elevated ALP is normal in pregnancy (placental secretion). Elevated transaminases are not — investigate further."),
]))
story.append(sp(8))
# ===== 7. METABOLIC / ENDOCRINE =====
story.append(section_header("7. METABOLIC AND ENDOCRINE SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("Carbohydrate Metabolism", sub_heading),
bullet("Human placental lactogen (hPL / hCS) causes peripheral insulin resistance"),
bullet("Pregnancy is a DIABETOGENIC state; insulin levels rise throughout"),
bullet("Pancreatic beta cell hyperplasia occurs in response"),
bullet("Between meals: low blood glucose + low amino acids; elevated FFAs, ketones, triglycerides"),
bullet("These 'accelerated starvation' changes prioritise fetal nutrition"),
sp(4),
Paragraph("Thyroid", sub_heading),
bullet("hCG (structural TSH homology) + oestrogens → thyroid enlargement + increased TBG"),
bullet("Total T3 and T4 are elevated (increased TBG-bound fraction)"),
bullet("Free T4, free T3, and TSH remain NORMAL — mother is euthyroid"),
sp(4),
Paragraph("Calcium", sub_heading),
bullet("Total serum calcium decreases (due to lower albumin)"),
bullet("Ionised calcium (physiologically active) remains normal"),
sp(4),
Paragraph("Adrenal", sub_heading),
bullet("Aldosterone and oestrogen elevated → enhanced renal Na/water retention"),
bullet("Cortisol levels increase but most is bound; free cortisol only modestly elevated"),
]))
story.append(sp(8))
# ===== 8. CNS =====
story.append(section_header("8. CENTRAL NERVOUS SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
Paragraph("General Anaesthesia", sub_heading),
bullet("MAC for all volatile agents decreases up to 40% at term"),
bullet("Progesterone (up to 20x normal at term) is the main mechanism; beta-endorphins during labour also contribute"),
bullet("MAC returns to normal by day 3 post-delivery"),
sp(4),
Paragraph("Regional Anaesthesia", sub_heading),
bullet("Enhanced sensitivity to local anaesthetics; epidural dose requirements reduced up to 30%"),
bullet("IVC compression distends epidural venous plexus → decreased spinal CSF volume and epidural space volume"),
bullet("Cephalad spread of LA solutions is enhanced"),
bullet("Epidural pressure may be positive (rather than usual negative)"),
bullet("Engorged epidural veins → increased risk of intravascular catheter placement"),
sp(4),
key_point("Minimum local analgesic concentration (MLAC) = EC50 for spinal analgesia. Used in obstetric anaesthesia to compare potencies."),
]))
story.append(sp(8))
# ===== 9. MUSCULOSKELETAL =====
story.append(section_header("9. MUSCULOSKELETAL SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
bullet("Relaxin (from placenta and endometrium) softens cervix, inhibits uterine contractions, relaxes pubic symphysis and pelvic joints"),
bullet("Ligamentous laxity of the spine → increased back injury risk"),
bullet("Lumbar lordosis increases to compensate for shifting centre of gravity"),
bullet("Back pain is one of the most common musculoskeletal complaints of pregnancy"),
bullet("Carpal tunnel syndrome: fluid retention and oedema compress median nerve at wrist"),
]))
story.append(sp(8))
# ===== 10. SKIN =====
story.append(section_header("10. SKIN AND INTEGUMENTARY SYSTEM"))
story.append(sp(6))
story.append(KeepTogether([
mini_table(
["Finding", "Location / Description", "Mechanism"],
[
["Melasma (Chloasma)", "Face — 'mask of pregnancy'", "Elevated MSH + oestrogen"],
["Linea nigra", "Midline abdomen", "Elevated MSH"],
["Spider angiomata", "Face, upper trunk", "Elevated oestrogen (vasodilation)"],
["Palmar erythema", "Palms", "Elevated oestrogen"],
["Striae gravidarum", "Abdomen, breasts, thighs", "Mechanical stretching + cortisol"],
["Increased hair growth", "Hirsutism in some", "Elevated androgens"],
["Telogen effluvium", "Post-partum hair loss", "Hormone withdrawal"],
],
col_widths=[5*cm, 6*cm, 6.5*cm]
),
]))
story.append(sp(12))
# ===== CLINICAL PEARLS PAGE =====
story.append(PageBreak())
story.append(section_header("CLINICAL PEARLS FOR EXAMS AND PRACTICE"))
story.append(sp(8))
pearls = [
("Rapid desaturation on apnoea",
"Decreased FRC + increased O2 demand. Pre-oxygenate BEFORE induction of GA. A healthy pregnant patient can desaturate within 60 seconds of apnoea."),
("Aspiration risk",
"Reduced LOS tone + delayed gastric emptying + mechanical stomach displacement. Rapid-sequence induction (RSI) is standard for GA in pregnancy after 16–20 weeks."),
("Supine hypotension",
"After 20 weeks, always tilt patient left (or wedge right hip). IVC compression reduces CO and uteroplacental perfusion."),
("Aortocaval compression vs vasovagal",
"Supine hypotension in late pregnancy is aortocaval compression until proven otherwise. Left tilt fixes it immediately."),
("Dilutional anaemia — do not over-treat",
"Hb 10–11 g/dL is physiological. Transfuse only if symptomatic anaemia or if there is evidence of iron/folate deficiency."),
("Renal function — re-calibrate norms",
"Normal creatinine in pregnancy is 0.4–0.6 mg/dL. Any creatinine approaching 1.0 mg/dL warrants investigation."),
("Glycosuria in pregnancy",
"Usually physiological (reduced tubular threshold). Diagnose gestational diabetes by OGTT — not by urine glucose."),
("Alkaline phosphatase elevation",
"Normal in pregnancy (placental isoform). Elevated transaminases are not normal — consider HELLP, intrahepatic cholestasis, viral hepatitis."),
("Hypercoagulability",
"Prophylactic LMWH is considered in high-risk pregnancies. Immobility, bed rest, and caesarean section further amplify DVT risk."),
("MAC reduction",
"Use 40% less volatile agent in pregnant patients. Progesterone is the main mechanism. Important for GA of non-obstetric surgery in pregnancy."),
("Epidural LA doses",
"Reduce epidural dose by 30% compared to non-pregnant patients. IVC compression distends epidural veins, reducing epidural space and enhancing drug spread."),
("Free thyroid hormones",
"Total T3/T4 are elevated (increased TBG), but FREE T4, FREE T3, and TSH are NORMAL. Always use free hormones to assess thyroid status in pregnancy."),
]
for i, (title_text, body_text) in enumerate(pearls):
bg = LIGHT_TEAL if i % 2 == 0 else LIGHT_PINK
title_p = Paragraph(title_text, ParagraphStyle("PearlTitle",
parent=base_styles["Normal"],
fontSize=9.5, textColor=DEEP_TEAL,
fontName="Helvetica-Bold", leading=13))
body_p = Paragraph(body_text, ParagraphStyle("PearlBody",
parent=base_styles["Normal"],
fontSize=9, textColor=DARK_TEXT,
fontName="Helvetica", leading=13))
pearl_data = [[title_p, body_p]]
pearl_t = Table(pearl_data, colWidths=[5.5*cm, 12*cm])
pearl_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LINEBELOW", (0,0), (-1,-1), 0.5, WHITE),
]))
story.append(pearl_t)
story.append(sp(14))
# ===== FOOTER =====
story.append(small_hr())
story.append(Paragraph(
"Compiled from: Morgan & Mikhail's Clinical Anesthesiology 7e | Guyton & Hall Textbook of Medical Physiology | "
"Creasy & Resnik's Maternal-Fetal Medicine | Barash Clinical Anesthesia 9e",
ParagraphStyle("Footer", parent=base_styles["Normal"],
fontSize=7.5, textColor=MID_GREY,
alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=11)))
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
if __name__ == "__main__":
build()
cd /home/daytona/workspace/pregnancy-physiology && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/pregnancy-physiology/
Pregnancy Physiology Quick Reference
PDF Document · PDF