Teach me Spina Bidfidia in depth as a neonatologist
"spina bifida" AND "neonatal management"
"myelomeningocele" AND "newborn" AND "management"
| Type | Core Feature | Neurologic Risk |
|---|---|---|
| Spina bifida occulta | Failure of vertebral arch fusion; no sac; covered by skin | Usually none (~10% of normal adults have it incidentally at L5/S1) |
| Meningocele | Meninges + CSF herniate through bony defect; spinal cord in normal position; skin-covered | Low to moderate |
| Myelomeningocele (MMC) | Spinal cord AND nerve roots herniate into the meningeal sac; neural tissue exposed | Severe, level-dependent |
| Lipomeningocele | Spinal cord protrudes into a fat-filled subcutaneous sac | Variable |
| Meroencephaly / Anencephaly | Severe MMC + absent calvaria + absent brain; associated with cranial anomalies | Fatal |
Neonatology pearl: The moment you receive a delivery notification for a fetus with spina bifida, the lesion type, level, and degree of skin coverage determine your entire initial management algorithm. Commit that to memory.
| Category | Risk Factor |
|---|---|
| Genetic | Family history: 1 affected sibling = 20-50x increased maternal risk; individual with spina bifida = 40x normal risk |
| Nutritional | Folate deficiency (most modifiable risk factor) |
| Medications | Valproic acid, carbamazepine (folate antagonists) - highest pharmacologic risk |
| Maternal disease | Pregestational diabetes, obesity (BMI ≥35) |
| Environmental | Hyperthermia (fever/flu in first trimester), passive smoking |
| Demographic | Young or advanced maternal age, low socioeconomic status |

| Ultrasound Sign | Description | Sensitivity |
|---|---|---|
| "Lemon sign" | Concave/scalloped shape of frontal calvaria | Present in ~98% of fetuses with open spinal defect before 24 weeks |
| "Banana sign" | Obliteration of cisterna magna; abnormal anterior curvature of cerebellum | Present in ~95% of spina bifida cases (does NOT resolve with gestation) |
| Ventriculomegaly | Secondary to CSF obstruction | Common |
| Microcephaly | Small posterior fossa | Common |
| Loss of intracranial translucency | First-trimester sign; early compression of 4th ventricle | Can be seen in T1 screening |
| Symptom | Mechanism |
|---|---|
| Apnea + bradycardia | Medullary compression of respiratory centers |
| Stridor | Vocal cord paresis (abductor weakness) |
| Swallowing dysfunction + aspiration | Lower cranial nerve involvement (IX, X, XII) |
| Opisthotonos | Cervical cord compression |
| Spasticity | Upper motor neuron involvement |
| Sleep-disordered breathing | Brainstem dysfunction |
Critical neonatology pearl: If you see apnea or stridor in an MMC baby, think Chiari II first. This carries a mortality rate of 35% among symptomatic patients. - Barash's Clinical Anesthesia
| Outcome | Prenatal Surgery | Postnatal Surgery |
|---|---|---|
| Death or need for shunt | 68% | 98% |
| Actual shunt placement | 40% | 82% |
| Mean gestational age at delivery | 34 1/7 weeks | 37 3/7 weeks |
| Preterm delivery <30 weeks | 13% | 0% |
| Mental development + motor score | Significantly better | Standard |
| Lesion Level | Motor Function | Ambulation Prognosis |
|---|---|---|
| Thoracic | No voluntary lower limb movement | Wheelchair-dependent; hip flexors absent |
| L1-L2 | Hip flexion only | Community mobility with KAFO; often wheelchair |
| L3-L4 | Quadriceps function (L4 key level) | Ambulation possible with bracing; community ambulator with AFO |
| L5 | Ankle dorsiflexion | Good prognosis, independent ambulation with bracing |
| S1-S2 | Good foot and ankle function | Near-normal ambulation |
The L4 Rule: L4 is the most clinically relevant functional level for neonatologists and orthopedic surgeons. Presence of quadriceps function (knee extension) = patient has a reasonable chance of community ambulation.
| System | Anomaly to Look For |
|---|---|
| CNS | Chiari II (near-universal), hydrocephalus, syringomyelia, tethered cord (later), polymicrogyria |
| Spine | Kyphosis, scoliosis (especially with thoracic-level MMC) |
| Orthopedic | Clubfoot (talipes equinovarus), hip dislocations, joint contractures, limb deformities |
| Urologic | Neurogenic bladder, VUR, hydronephrosis |
| GI | Neurogenic bowel, constipation, anal sphincter dysfunction |
| Skin | Pressure injuries (insensate skin = no protective sensation) |
| Metabolic | Obesity risk in long-term survivors |
| Cognitive | IQ >80 in >70% of long-term survivors, but non-verbal learning disabilities are common |

| Feature | Key Point |
|---|---|
| Most common open NTD | Myelomeningocele (MMC) |
| Incidence | ~1:2,875 births |
| Primary prevention | Folic acid 400 mcg/day preconceptually |
| Recurrence supplement | 4 mg/day in next pregnancy |
| Teratogenic drug risk | Valproic acid, carbamazepine |
| Prenatal US signs | Lemon sign, banana sign, ventriculomegaly |
| Nearly universal brain anomaly | Chiari II malformation |
| Hydrocephalus rate | 80-90% of MMC |
| Timing of postnatal closure | Within 24-48h |
| Prenatal repair benefit | 40% vs 82% shunt rate (MOMS trial) |
| Critical latex rule | Latex-free environment from birth |
| Key neurologic level | L4 = quadriceps = ambulation predictor |
| Universal urologic concern | Neurogenic bladder; begin CIC early |
| Cognitive prognosis | IQ >80 in >70%; 37% independent adults |
Generate a quick reference PDF summarizing neonatal Chiari II warning signs and emergency management
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace …
mkdir -p /home/daytona/workspace/chiari2-quickref && echo "dir created"
~/chiari2-quickref/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.platypus.flowables import HRFlowable
from reportlab.lib.colors import HexColor
import os
OUTPUT = "/home/daytona/workspace/chiari2-quickref/Neonatal_ChiariII_Quick_Reference.pdf"
# ─── Colour Palette ─────────────────────────────────────────────────────────
RED_ALERT = HexColor("#C0392B")
RED_LIGHT = HexColor("#FADBD8")
ORANGE = HexColor("#E67E22")
ORANGE_LIGHT= HexColor("#FDEBD0")
YELLOW = HexColor("#F1C40F")
YELLOW_LIGHT= HexColor("#FEF9E7")
TEAL = HexColor("#1A7A8A")
TEAL_LIGHT = HexColor("#D1ECF1")
NAVY = HexColor("#1B2A4A")
NAVY_MID = HexColor("#2C3E6B")
GREY_LIGHT = HexColor("#F4F6F9")
GREY_MID = HexColor("#BDC3C7")
WHITE = colors.white
GREEN_DARK = HexColor("#1E8449")
GREEN_LIGHT = HexColor("#D5F5E3")
PURPLE = HexColor("#6C3483")
PURPLE_LIGHT= HexColor("#E8DAEF")
# ─── Document ────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=14*mm, rightMargin=14*mm,
topMargin=12*mm, bottomMargin=12*mm
)
W, H = A4
content_width = W - 28*mm
story = []
# ─── Styles ──────────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
sBase = S("base", fontName="Helvetica", fontSize=8.5, leading=12, textColor=NAVY)
sSmall = S("small", fontName="Helvetica", fontSize=7.5, leading=11, textColor=NAVY)
sBold = S("bold", fontName="Helvetica-Bold", fontSize=8.5, leading=12, textColor=NAVY)
sTitle = S("title", fontName="Helvetica-Bold", fontSize=18, leading=22, textColor=WHITE, alignment=TA_CENTER)
sSubtitle = S("subtitle", fontName="Helvetica", fontSize=10, leading=14, textColor=WHITE, alignment=TA_CENTER)
sSectionH = S("sectionH", fontName="Helvetica-Bold", fontSize=10, leading=13, textColor=WHITE)
sRedHdr = S("redHdr", fontName="Helvetica-Bold", fontSize=9.5, leading=12, textColor=WHITE)
sCellH = S("cellH", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=WHITE, alignment=TA_CENTER)
sCellB = S("cellB", fontName="Helvetica", fontSize=8, leading=11, textColor=NAVY)
sCellBold = S("cellBold", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=NAVY)
sCellRed = S("cellRed", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=RED_ALERT)
sFooter = S("footer", fontName="Helvetica-Oblique", fontSize=7, leading=10, textColor=GREY_MID, alignment=TA_CENTER)
sBullet = S("bullet", fontName="Helvetica", fontSize=8.5, leading=12, textColor=NAVY, leftIndent=10, bulletIndent=0)
sNote = S("note", fontName="Helvetica-Oblique", fontSize=7.5, leading=11, textColor=TEAL)
# ─── Helper: section header bar ─────────────────────────────────────────────
def section_header(text, bg=NAVY_MID, text_style=None):
if text_style is None:
text_style = sSectionH
tbl = Table([[Paragraph(text, text_style)]], colWidths=[content_width])
tbl.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", [3]),
]))
return tbl
def red_header(text):
return section_header(text, bg=RED_ALERT, text_style=sRedHdr)
def orange_header(text):
return section_header(text, bg=ORANGE, text_style=sRedHdr)
def teal_header(text):
return section_header(text, bg=TEAL, text_style=sSectionH)
def green_header(text):
return section_header(text, bg=GREEN_DARK, text_style=sSectionH)
def purple_header(text):
return section_header(text, bg=PURPLE, text_style=sSectionH)
# ─── 1. TITLE BANNER ─────────────────────────────────────────────────────────
title_tbl = Table([
[Paragraph("NEONATAL CHIARI II MALFORMATION", sTitle)],
[Paragraph("Warning Signs & Emergency Management — Quick Reference Card", sSubtitle)],
[Paragraph("For use in Neonatal Intensive Care Units & Delivery Suites | Compiled from Barash's Clinical Anesthesia, Bradley & Daroff's Neurology, Creasy & Resnik's MFM", sSubtitle)],
], colWidths=[content_width])
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4]),
]))
story.append(title_tbl)
story.append(Spacer(1, 5*mm))
# ─── 2. DEFINITION BOX ───────────────────────────────────────────────────────
story.append(KeepTogether([
teal_header("WHAT IS CHIARI II MALFORMATION?"),
Spacer(1, 2),
Table([[
Paragraph(
"<b>Chiari II</b> is a complex hindbrain anomaly that occurs in <b>virtually ALL infants</b> born with "
"myelomeningocele (MMC). It results from the failure of adequate CSF accumulation in the developing "
"posterior fossa — due to the open spinal defect acting as a CSF \"drain\" — leaving the posterior fossa "
"too small to contain the growing cerebellum and brainstem. These structures are forced downward through "
"the foramen magnum.",
sBase)
]], colWidths=[content_width])
]))
story.append(Spacer(1, 1*mm))
# anatomy table
anatomy_data = [
[Paragraph("ANATOMICAL FEATURE", sCellH), Paragraph("CHIARI II FINDING", sCellH)],
[Paragraph("Cerebellar vermis", sCellBold), Paragraph("Herniated caudally through foramen magnum", sCellB)],
[Paragraph("Medulla oblongata", sCellBold), Paragraph("Caudal displacement + kinking (\"medullary kink\")", sCellB)],
[Paragraph("4th ventricle", sCellBold), Paragraph("Small or obliterated; compressed", sCellB)],
[Paragraph("Cisterna magna", sCellBold), Paragraph("Absent / obliterated", sCellB)],
[Paragraph("Posterior fossa", sCellBold), Paragraph("Small; unable to accommodate hindbrain contents", sCellB)],
[Paragraph("Cerebral cortex", sCellBold), Paragraph("Polymicrogyria in some patients", sCellB)],
[Paragraph("Brainstem", sCellBold), Paragraph("Cervical cord compression; abnormal function", sCellB)],
]
anatomy_tbl = Table(anatomy_data, colWidths=[60*mm, content_width - 60*mm])
anatomy_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("BACKGROUND", (0,1), (-1,1), TEAL_LIGHT),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), TEAL_LIGHT),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), TEAL_LIGHT),
("BACKGROUND", (0,6), (-1,6), WHITE),
("BACKGROUND", (0,7), (-1,7), TEAL_LIGHT),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(anatomy_tbl)
story.append(Spacer(1, 4*mm))
# ─── 3. WARNING SIGNS ────────────────────────────────────────────────────────
story.append(KeepTogether([
red_header("SECTION 1 — WARNING SIGNS: RECOGNISE CHIARI II BRAINSTEM DYSFUNCTION"),
Spacer(1, 2),
Paragraph(
"<b>Only ~20% of MMC infants show clinical brainstem symptoms</b> — but when present, mortality is 35%. "
"Recognise these early.",
sNote),
Spacer(1, 2),
]))
signs_data = [
[Paragraph("WARNING SIGN", sCellH), Paragraph("MECHANISM", sCellH), Paragraph("URGENCY", sCellH)],
[Paragraph("<b>Apnea</b> (central, non-obstructive)", sCellB),
Paragraph("Medullary respiratory centre compression", sCellB),
Paragraph("CRITICAL", S("urg", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=RED_ALERT))],
[Paragraph("<b>Bradycardia</b> (+ apnea = classic pair)", sCellB),
Paragraph("Vagal nucleus compression in medulla", sCellB),
Paragraph("CRITICAL", S("urg2", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=RED_ALERT))],
[Paragraph("<b>Stridor</b> (high-pitched inspiratory)", sCellB),
Paragraph("Vocal cord paresis — abductor weakness (RLN / nucleus ambiguus)", sCellB),
Paragraph("HIGH", S("urg3", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=ORANGE))],
[Paragraph("<b>Swallowing dysfunction / aspiration</b>", sCellB),
Paragraph("CN IX, X, XII involvement; bulbar palsy", sCellB),
Paragraph("HIGH", S("urg4", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=ORANGE))],
[Paragraph("<b>Opisthotonos</b> (back-arching)", sCellB),
Paragraph("Cervical cord or brainstem compression", sCellB),
Paragraph("HIGH", S("urg5", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=ORANGE))],
[Paragraph("<b>Upper limb spasticity / weakness</b>", sCellB),
Paragraph("Corticospinal tract compression at foramen magnum", sCellB),
Paragraph("MODERATE", S("urg6", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=YELLOW))],
[Paragraph("<b>Poor feeding / weak suck</b>", sCellB),
Paragraph("Brainstem feeding centre + hypoglossal dysfunction", sCellB),
Paragraph("MODERATE", S("urg7", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=YELLOW))],
[Paragraph("<b>Sleep-disordered breathing</b>", sCellB),
Paragraph("Central + obstructive components; brainstem autonomic dysfunction", sCellB),
Paragraph("MODERATE", S("urg8", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=YELLOW))],
[Paragraph("<b>Nystagmus / abnormal eye movements</b>", sCellB),
Paragraph("Cranial nerve nuclei (VI, VIII) or cerebellar dysfunction", sCellB),
Paragraph("LOW-MOD", S("urg9", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=TEAL))],
[Paragraph("<b>Increasing head circumference</b>", sCellB),
Paragraph("Hydrocephalus secondary to impaired CSF flow through 4th ventricle", sCellB),
Paragraph("HIGH", S("urg10", fontName="Helvetica-Bold", fontSize=8, leading=11, textColor=ORANGE))],
]
c_widths = [65*mm, content_width - 65*mm - 22*mm, 22*mm]
signs_tbl = Table(signs_data, colWidths=c_widths)
signs_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED_ALERT),
("BACKGROUND", (0,1), (-1,2), RED_LIGHT),
("BACKGROUND", (0,3), (-1,5), ORANGE_LIGHT),
("BACKGROUND", (0,6), (-1,8), YELLOW_LIGHT),
("BACKGROUND", (0,9), (-1,9), TEAL_LIGHT),
("BACKGROUND", (0,10),(-1,10), ORANGE_LIGHT),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("ALIGN", (2,0), (2,-1), "CENTER"),
]))
story.append(signs_tbl)
story.append(Spacer(1, 4*mm))
# ─── 4. DIFFERENTIATING FROM SHUNT MALFUNCTION ───────────────────────────────
story.append(KeepTogether([
orange_header("SECTION 2 — DIFFERENTIATING CHIARI II SYMPTOMS FROM SHUNT MALFUNCTION"),
Spacer(1, 2),
Paragraph(
"Both Chiari II brainstem dysfunction and raised ICP from shunt failure can cause apnea, bradycardia, "
"and altered tone. Distinguish them — management differs critically.",
sNote),
Spacer(1, 2),
]))
diff_data = [
[Paragraph("FEATURE", sCellH), Paragraph("CHIARI II BRAINSTEM DYSFUNCTION", sCellH), Paragraph("SHUNT FAILURE / RAISED ICP", sCellH)],
[Paragraph("Primary cause", sCellBold), Paragraph("Brainstem / CN compression at foramen magnum", sCellB), Paragraph("VP shunt blockage / malfunction", sCellB)],
[Paragraph("Apnea pattern", sCellBold), Paragraph("Central; may be positional (worse supine)", sCellB), Paragraph("Central; associated with bradycardia", sCellB)],
[Paragraph("Stridor", sCellBold), Paragraph("<b>YES</b> — vocal cord paresis; inspiratory", sCellB), Paragraph("Uncommon", sCellB)],
[Paragraph("Fontanelle", sCellBold), Paragraph("Variable; may be normal", sCellB), Paragraph("<b>Tense / bulging</b>", sCellB)],
[Paragraph("Head circumference", sCellBold), Paragraph("Variable", sCellB), Paragraph("<b>Accelerated growth</b>", sCellB)],
[Paragraph("Sunset sign", sCellBold), Paragraph("Uncommon", sCellB), Paragraph("<b>Present</b>", sCellB)],
[Paragraph("Response to shunting", sCellBold), Paragraph("Partial (shunt first; PFD if no improvement)", sCellB), Paragraph("<b>Full improvement expected</b>", sCellB)],
[Paragraph("Cranial ultrasound", sCellBold), Paragraph("May be normal or mild ventriculomegaly", sCellB), Paragraph("<b>Enlarged ventricles</b>", sCellB)],
[Paragraph("Definitive imaging", sCellBold), Paragraph("MRI brain/posterior fossa + spinal cord", sCellB), Paragraph("Head US or CT; shunt series X-ray", sCellB)],
[Paragraph("Urgent intervention", sCellBold), Paragraph("Posterior fossa decompression (if shunt fails)", sCellB), Paragraph("Shunt revision / tap", sCellB)],
]
diff_tbl = Table(diff_data, colWidths=[38*mm, (content_width-38*mm)/2, (content_width-38*mm)/2])
diff_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), ORANGE),
("BACKGROUND", (0,1), (-1,1), ORANGE_LIGHT),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), ORANGE_LIGHT),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), ORANGE_LIGHT),
("BACKGROUND", (0,6), (-1,6), WHITE),
("BACKGROUND", (0,7), (-1,7), ORANGE_LIGHT),
("BACKGROUND", (0,8), (-1,8), WHITE),
("BACKGROUND", (0,9), (-1,9), ORANGE_LIGHT),
("BACKGROUND", (0,10),(-1,10), WHITE),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(diff_tbl)
story.append(Spacer(1, 4*mm))
# ─── 5. EMERGENCY MANAGEMENT ALGORITHM ───────────────────────────────────────
story.append(KeepTogether([
red_header("SECTION 3 — EMERGENCY MANAGEMENT ALGORITHM"),
Spacer(1, 2),
]))
# Step boxes as a vertical flow
steps = [
("STEP 1 — CALL FOR HELP", RED_ALERT,
"Activate neonatal emergency. Call Neurosurgery STAT. Ensure Anesthesia is available. "
"Assign roles: Airway lead | IV/drugs | Documentation."),
("STEP 2 — SECURE AIRWAY & BREATHING", ORANGE,
"If apnea/stridor: Jaw thrust first. Avoid neck extension — can worsen foramen magnum compression. "
"Intubate (RSI preferred; awake if compromised). Bag-mask ventilation with neutral/slight flexion. "
"Avoid succinylcholine if hyperkalemia risk (>48h post-placode exposure)."),
("STEP 3 — CIRCULATION & ACCESS", TEAL,
"IV/IO access x2. Attach continuous ECG, SpO2, BP. Treat bradycardia (atropine 0.02 mg/kg IV if symptomatic). "
"Maintain MAP appropriate for gestational age."),
("STEP 4 — NEUROIMAGING (URGENT)", NAVY_MID,
"Cranial ultrasound at bedside FIRST (rapid, no radiation). Look for: ventricular size, midline shift. "
"Head CT if US unavailable or inconclusive. "
"MRI brain + posterior fossa + full spine when stable — definitive assessment of Chiari II anatomy."),
("STEP 5 — TREAT HYDROCEPHALUS FIRST", TEAL,
"If ventricles enlarged / shunt present: Urgent shunt tap (neurosurgery). "
"If no shunt yet: emergent VP shunt placement. "
"80-90% of MMC infants have hydrocephalus. Relieving it may fully resolve brainstem symptoms."),
("STEP 6 — IF NO IMPROVEMENT AFTER SHUNTING", RED_ALERT,
"Persistent apnea / stridor / opisthotonos despite patent shunt = TRUE Chiari II brainstem dysfunction. "
"Neurosurgical consultation for POSTERIOR FOSSA DECOMPRESSION (suboccipital craniectomy + C1 laminectomy). "
"This is a surgical emergency."),
("STEP 7 — SUPPORTIVE NICU CARE", GREEN_DARK,
"Prone / 30 degree head-up positioning. Latex-free environment (high IgE sensitization in MMC). "
"NG feeds if swallowing unsafe. Respiratory support as needed. "
"Commence clean intermittent catheterization (neurogenic bladder). "
"Monitor daily head circumference. Serial cranial US every 24-48h."),
]
for title, bg, body in steps:
step_tbl = Table([
[Paragraph(title, sRedHdr)],
[Paragraph(body, sBase)],
], colWidths=[content_width])
step_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), bg),
("BACKGROUND", (0,1), (-1,1), GREY_LIGHT),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("BOX", (0,0), (-1,-1), 0.5, GREY_MID),
]))
story.append(step_tbl)
story.append(Spacer(1, 1.5*mm))
story.append(Spacer(1, 3*mm))
# ─── 6. DRUGS ────────────────────────────────────────────────────────────────
story.append(KeepTogether([
purple_header("SECTION 4 — EMERGENCY DRUG REFERENCE (NEONATE)"),
Spacer(1, 2),
]))
drug_data = [
[Paragraph("DRUG", sCellH), Paragraph("DOSE", sCellH), Paragraph("ROUTE", sCellH), Paragraph("INDICATION", sCellH)],
[Paragraph("Atropine", sCellBold), Paragraph("0.02 mg/kg (min 0.1 mg)", sCellB), Paragraph("IV / IO", sCellB), Paragraph("Symptomatic bradycardia", sCellB)],
[Paragraph("Epinephrine", sCellBold), Paragraph("0.01 mg/kg (1:10,000)", sCellB), Paragraph("IV / IO / ETT", sCellB), Paragraph("Cardiac arrest / severe bradycardia", sCellB)],
[Paragraph("Fentanyl (RSI)", sCellBold), Paragraph("1-4 mcg/kg", sCellB), Paragraph("IV slow", sCellB), Paragraph("Analgesia/sedation for intubation", sCellB)],
[Paragraph("Ketamine (RSI)", sCellBold), Paragraph("1-2 mg/kg", sCellB), Paragraph("IV", sCellB), Paragraph("Induction (haemodynamically stable)", sCellB)],
[Paragraph("Rocuronium", sCellBold), Paragraph("1 mg/kg", sCellB), Paragraph("IV", sCellB), Paragraph("Neuromuscular blockade for intubation", sCellB)],
[Paragraph("Morphine", sCellBold), Paragraph("0.05-0.1 mg/kg", sCellB), Paragraph("IV slow", sCellB), Paragraph("Post-intubation sedation/analgesia", sCellB)],
[Paragraph("Midazolam", sCellBold), Paragraph("0.05-0.1 mg/kg", sCellB), Paragraph("IV", sCellB), Paragraph("Sedation (use cautiously; respiratory depression)", sCellB)],
[Paragraph("Mannitol", sCellBold), Paragraph("0.5-1 g/kg over 20 min", sCellB), Paragraph("IV", sCellB), Paragraph("Acute ICP crisis (rare in neonate)", sCellB)],
[Paragraph("Ampicillin", sCellBold), Paragraph("50 mg/kg q12h (term)", sCellB), Paragraph("IV", sCellB), Paragraph("Meningitis prophylaxis/treatment", sCellB)],
[Paragraph("Gentamicin", sCellBold), Paragraph("4-5 mg/kg q24h", sCellB), Paragraph("IV", sCellB), Paragraph("Cover gram-negative organisms (meningitis)", sCellB)],
]
col_w = [35*mm, 42*mm, 20*mm, content_width - 35*mm - 42*mm - 20*mm]
drug_tbl = Table(drug_data, colWidths=col_w)
drug_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), PURPLE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LIGHT, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(drug_tbl)
story.append(Spacer(1, 2*mm))
story.append(Paragraph(
"* All doses are approximate guidelines. Always verify with your institution's formulary and adjust for gestational age, postnatal age, and renal function.",
sNote))
story.append(Spacer(1, 4*mm))
# ─── 7. MONITORING ───────────────────────────────────────────────────────────
story.append(KeepTogether([
teal_header("SECTION 5 — ONGOING MONITORING IN THE NICU"),
Spacer(1, 2),
]))
monitor_left = [
[Paragraph("PARAMETER", sCellH), Paragraph("FREQUENCY", sCellH)],
[Paragraph("Head circumference", sCellBold), Paragraph("Daily", sCellB)],
[Paragraph("Cranial ultrasound", sCellBold), Paragraph("Every 24-48h (or per neurosurgery)", sCellB)],
[Paragraph("Fontanelle assessment", sCellBold), Paragraph("At every nursing assessment", sCellB)],
[Paragraph("Respiratory pattern", sCellBold), Paragraph("Continuous monitoring + apnea monitor", sCellB)],
[Paragraph("Heart rate (bradycardia)", sCellBold), Paragraph("Continuous ECG monitoring", sCellB)],
[Paragraph("SpO2", sCellBold), Paragraph("Continuous", sCellB)],
[Paragraph("Neurological exam", sCellBold), Paragraph("Minimum twice daily", sCellB)],
[Paragraph("Urine output / CIC", sCellBold), Paragraph("Every 4-6 hours; document each void", sCellB)],
[Paragraph("Wound site (placode)", sCellBold), Paragraph("Each dressing change q4-6h", sCellB)],
[Paragraph("Temperature", sCellBold), Paragraph("Continuous rectal / axillary", sCellB)],
[Paragraph("Blood cultures / CBC / CRP", sCellBold), Paragraph("If infection suspected; 48h post-op", sCellB)],
]
monitor_tbl = Table(monitor_left, colWidths=[60*mm, content_width - 60*mm])
monitor_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [TEAL_LIGHT, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(monitor_tbl)
story.append(Spacer(1, 4*mm))
# ─── 8. SURGICAL OPTIONS ─────────────────────────────────────────────────────
story.append(KeepTogether([
green_header("SECTION 6 — SURGICAL OPTIONS AT A GLANCE"),
Spacer(1, 2),
]))
surg_data = [
[Paragraph("PROCEDURE", sCellH), Paragraph("TIMING", sCellH), Paragraph("INDICATION", sCellH), Paragraph("NOTE", sCellH)],
[Paragraph("MMC closure", sCellBold),
Paragraph("Within 24-48h of birth", sCellB),
Paragraph("All open MMC defects", sCellB),
Paragraph("Latex-free field; primary closure vs. flap", sCellB)],
[Paragraph("VP Shunt", sCellBold),
Paragraph("With closure or when symptomatic", sCellB),
Paragraph("Hydrocephalus (80-90% of MMC)", sCellB),
Paragraph("50% will have shunt complication in year 1", sCellB)],
[Paragraph("ETV + CPC", sCellBold),
Paragraph("Elective; after stabilisation", sCellB),
Paragraph("Alternative to VP shunt; avoids hardware", sCellB),
Paragraph(">70% success rate; similar neuro outcomes", sCellB)],
[Paragraph("Posterior Fossa Decompression", sCellBold),
Paragraph("URGENT — when symptomatic Chiari II persists after shunting", sCellB),
Paragraph("Stridor, apnea, opisthotonos not improved by shunting", sCellB),
Paragraph("Suboccipital craniectomy + C1 laminectomy", sCellB)],
[Paragraph("Prenatal MMC repair", sCellBold),
Paragraph("19-26 weeks gestation", sCellB),
Paragraph("Planned fetal intervention (MOMS criteria)", sCellB),
Paragraph("Shunt rate 40% vs 82% postnatal (MOMS trial)", sCellB)],
]
surg_tbl = Table(surg_data, colWidths=[33*mm, 38*mm, 50*mm, content_width - 33*mm - 38*mm - 50*mm])
surg_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREEN_DARK),
("ROWBACKGROUNDS",(0,1), (-1,-1), [GREEN_LIGHT, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(surg_tbl)
story.append(Spacer(1, 4*mm))
# ─── 9. KEY STATISTICS BOX ────────────────────────────────────────────────────
story.append(KeepTogether([
section_header("KEY STATISTICS TO KNOW", bg=NAVY_MID),
Spacer(1, 2),
]))
stats = [
("~100%", "of MMC infants have Chiari II malformation (anatomy)"),
("~20%", "of MMC infants develop SYMPTOMATIC brainstem dysfunction"),
("35%", "mortality among symptomatic Chiari II patients"),
("80-90%","of MMC infants require treatment for hydrocephalus"),
("50%", "of infants have shunt complication within the first year of life"),
("40% vs 82%", "shunt placement rate: prenatal vs. postnatal MMC repair (MOMS)"),
("35%", "mean GA at delivery in prenatal repair group (vs 37+ weeks postnatal)"),
(">70%", "of long-term MMC survivors have IQ >80"),
]
stat_rows = []
for i in range(0, len(stats), 2):
row = []
for j in range(2):
if i+j < len(stats):
num, txt = stats[i+j]
cell_content = Paragraph(
f'<font color="#{TEAL.hexval()[2:]}" size="13"><b>{num}</b></font> '
f'<font size="8">{txt}</font>', sBase)
row.append(cell_content)
else:
row.append(Paragraph("", sBase))
stat_rows.append(row)
stats_tbl = Table(stat_rows, colWidths=[content_width/2 - 1*mm, content_width/2 - 1*mm], hAlign='CENTER')
stats_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GREY_LIGHT),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(stats_tbl)
story.append(Spacer(1, 4*mm))
# ─── 10. LATEX WARNING BOX ───────────────────────────────────────────────────
latex_tbl = Table([[
Paragraph(
"<b>LATEX ALLERGY WARNING:</b> All MMC patients have high risk of IgE-mediated latex sensitization "
"due to repeated mucosal exposures. Use <b>LATEX-FREE</b> gloves, IV lines, airways, and all equipment "
"from birth onward. Failure to do so risks life-threatening anaphylaxis intraoperatively.",
S("latexNote", fontName="Helvetica", fontSize=8.5, leading=12, textColor=NAVY))
]], colWidths=[content_width])
latex_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), YELLOW_LIGHT),
("BOX", (0,0), (-1,-1), 1.5, YELLOW),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(latex_tbl)
story.append(Spacer(1, 4*mm))
# ─── FOOTER ──────────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_MID))
story.append(Spacer(1, 1*mm))
story.append(Paragraph(
"Sources: Barash's Clinical Anesthesia 9e | Bradley & Daroff's Neurology in Clinical Practice | "
"Creasy & Resnik's Maternal-Fetal Medicine | Campbell Walsh Wein Urology | "
"Campbell's Operative Orthopaedics 15e | MOMS Trial (PMID: 21306277) | "
"Kunpalin et al. meta-analysis 2025 (PMID: 40492626) | Generated by Orris AI — July 2026 | "
"For educational purposes only. Always apply clinical judgement and local protocols.",
sFooter))
# ─── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
cd /home/daytona/workspace/chiari2-quickref && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/chiari2-quickref/Neonatal_ChiariII_Quick_Referenc…
Neonatal ChiariII Quick Reference
PDF Document · PDF
| Section | Content |
|---|---|
| What is Chiari II? | Anatomy table — all 7 structural features and their abnormal findings |
| Warning Signs | 10 clinical signs with urgency level (CRITICAL / HIGH / MODERATE) color-coded red-orange-yellow |
| Chiari II vs Shunt Failure | Side-by-side differential diagnosis table — critical for deciding your next intervention |
| Emergency Management | 7-step algorithm: Call for help → Airway → Circulation → Imaging → Shunt → PFD → NICU care |
| Drug Reference | 11 emergency drugs with neonatal doses, routes, and indications |
| Monitoring | 12 parameters with frequencies; Surgical options with timing and indications; Key statistics box |