I need a detailed history taking of paediatric seizures case take references from all the standard textbooks and recent guidelines in India As this is for long case presentation for a post graduate resident
IAP guidelines paediatric seizures history taking India 2023 2024
pediatric seizure history evaluation clinical
ILAE 2017 classification seizure types paediatric India IAP epilepsy history taking clinical approach
IAP textbook pediatric neurology seizure history examination approach India standard
References: Harriet Lane Handbook 23rd ed., p. 738; Kaplan & Sadock's Comprehensive Textbook of Psychiatry; ILAE 2017 Classification; IAP Expert Committee Guidelines on Childhood Epilepsy (Indian Pediatrics 2009); IAP Textbook of Pediatric Neurology (Verma & Kunju, 2019)
"Aura is the initial symptom that arises from the seizure focus and is diagnostic of focal onset."
- Rosen's Emergency Medicine 9th ed., Diagnostic Algorithm section
5 min: status epilepticus by ILAE 2015 definition (operational threshold)
30 min: established status epilepticus
"The determination that a seizure has occurred is typically based on a detailed history provided by a reliable observer. Information regarding onset, presence of aura, type of seizure, and duration of ictal and postictal periods is key."
- Rosen's Emergency Medicine, p. 176
| Feature | Details to Record |
|---|---|
| Date/time of first seizure | Age at onset |
| Total number of episodes | Frequency, clustering |
| Duration of each episode | Any SE? |
| Seizure type (ILAE 2017) | Focal/Generalized/Unknown |
| Body part involved | Laterality |
| Consciousness | Aware/Impaired |
| Post-ictal state | Duration, Todd's paralysis |
| Precipitant/trigger | Fever, sleep, light, stress |
| Diurnal variation | Morning jerks, nocturnal, on awakening |
| Any change in semiology over time | Evolution of seizures |
IAP Expert Committee: "Simple febrile seizure in a well-appearing, fully immunized child with normal neurologic examination and no meningeal signs requires no further workup."
- Harriet Lane Handbook 23rd ed., p. 739
"Beyond the standard history, ask about the pregnancy, labor and delivery and maternal risk factors for neonatal seizures."
- Pediatric Seizures, Lurie Children's Hospital EMSC module
"Many individual electroclinical syndromes have been found to be associated with a given single gene mutation — often de novo. Knowledge of the specific gene mutation (e.g., SCN1A in Dravet syndrome, SLC2A1 in GLUT1 deficiency) carries significant treatment implications."
- Kaplan & Sadock's Comprehensive Textbook of Psychiatry, p. 2072
| System | Questions |
|---|---|
| CNS | Headache, vomiting (raised ICP), focal weakness, vision changes |
| Autonomic | Pallor, sweating, cyanosis during episodes |
| Cutaneous | Depigmented patches (ash-leaf macule - TSC), cafe-au-lait spots (NF1), port-wine stain (SWS), adenoma sebaceum |
| Ophthalmology | Abnormal eye movements, nystagmus, visual field loss, fundal changes |
| Cardiac | Palpitations, syncope (to exclude cardiogenic syncope) |
| Renal | Oliguria (electrolyte imbalance causing seizures) |
| Endocrine | Polyuria/polydipsia (DI), growth, puberty |
| Behaviour | ADHD, autism, anxiety, depression (comorbidities) |
| Sleep | Snoring, sleep apnea, abnormal movements during sleep |
| Condition | Distinguishing Historical Feature |
|---|---|
| Breath-holding spells (18 mo-3 yr) | Always triggered by frustration/pain; child cries then holds breath |
| Vasovagal syncope | Postural trigger, hot environment, nausea, slow collapse, rapid recovery |
| Cardiogenic syncope | Exercise/emotion trigger, no post-ictal state, family cardiac history |
| PNES (pseudoseizures) | No post-ictal state, eyes closed during episode, prolonged duration, pelvic thrusting, emotional triggers, psychiatric comorbidity |
| Benign neonatal sleep myoclonus | Occurs ONLY during sleep, disappears on waking, normal EEG |
| Sandifer syndrome | Back arching after feeds, GERD history |
| Tics | Suppressible, no impaired consciousness, urge to perform |
| Migraine with aura | Visual aura builds up slowly over minutes (vs seizure seconds), followed by headache |
| Paroxysmal vertigo | Episodes of vertigo/vomiting/staggering in toddlers, no LOC, nystagmus |
Source: Harriet Lane Handbook 23rd ed., Table 20.3, p. 741
| Syndrome | Age | Key History Points | AED Choice |
|---|---|---|---|
| West syndrome | 3-12 months | Spasms in clusters on awakening; regression; hypsarrhythmia | ACTH/vigabatrin |
| Dravet syndrome | 1st year | Prolonged febrile or afebrile hemiclonic seizures; later myoclonic; regression; SCN1A | Avoid Na-channel blockers |
| CAE (Childhood Absence) | 4-12 yrs | Frequent brief staring spells; normal development; provoked by HV | Ethosuximide/valproate |
| BECTS/Rolandic | 3-13 yrs | Nocturnal focal facial-arm seizures; speech arrest; normal MRI/development | Often no AED needed |
| JME | 12-18 yrs | Morning myoclonic jerks; GTC on sleep deprivation; family hx | Valproate (lifelong) |
| Lennox-Gastaut | 1-7 yrs | Multiple seizure types; drop attacks; cognitive regression; slow spike-wave | Valproate/clobazam/lamotrigine |
| Neurocysticercosis epilepsy (India) | Any age | Single ring-enhancing lesion; exposure history; calcified lesions | Albendazole + AED |
| Febrile seizure plus (GEFS+) | Variable | Multiple febrile + afebrile seizures; family hx; SCN1B | Manage individually |
"[Name], a [age]-year-old [male/female] child, born of [consanguineous/non-consanguineous] parents, with [normal/abnormal] antenatal, natal and developmental history, presented with [X] episodes of [seizure type description] over [duration], classified as [focal aware/focal impaired awareness/generalized tonic-clonic/absence/myoclonic/epileptic spasms], with onset at [age], lasting [duration], associated with [fever/no fever/precipitant], [with/without] post-ictal deficit, suggestive of [febrile seizures/epilepsy syndrome/symptomatic seizures], likely etiology being [structural/genetic/metabolic/infectious/unknown], currently on [AED] at [dose mg/kg/day] with [good/poor] compliance and [controlled/uncontrolled] seizures."
Note for PG residents: In the Indian context, always ask specifically about NCC (neurocysticercosis - pork exposure, travel to endemic areas), tuberculous meningitis, pyogenic meningitis, and febrile illness-associated seizures, as these are far more prevalent in Indian practice than in Western textbook scenarios. Also probe for consanguinity, traditional remedies, and cost-related non-compliance - all of which are common examination points in Indian PG viva and long case assessments.
I need a pdf of this
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/paediatric-seizures && python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import ListFlowable, ListItem output_path = "/tmp/workspace/paediatric-seizures/Paediatric_Seizures_History_Taking.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm, title="Detailed History Taking: Paediatric Seizures", author="Orris Medical AI" ) styles = getSampleStyleSheet() # Custom styles DARK_BLUE = colors.HexColor('#1a3a5c') MED_BLUE = colors.HexColor('#2563a8') LIGHT_BLUE= colors.HexColor('#dbeafe') ACCENT = colors.HexColor('#1e40af') GOLD = colors.HexColor('#b45309') BG_GRAY = colors.HexColor('#f8fafc') TABLE_HDR = colors.HexColor('#1e3a5f') title_style = ParagraphStyle('TitleStyle', parent=styles['Title'], fontSize=20, textColor=DARK_BLUE, spaceAfter=6, spaceBefore=0, alignment=TA_CENTER, fontName='Helvetica-Bold') subtitle_style = ParagraphStyle('SubtitleStyle', parent=styles['Normal'], fontSize=12, textColor=MED_BLUE, spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Oblique') h1_style = ParagraphStyle('H1', parent=styles['Heading1'], fontSize=13, textColor=colors.white, spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold', backColor=DARK_BLUE, leftIndent=-10, rightIndent=-10, borderPad=6) h2_style = ParagraphStyle('H2', parent=styles['Heading2'], fontSize=11, textColor=DARK_BLUE, spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold', borderPad=2, borderColor=MED_BLUE, borderWidth=0, leftIndent=0) h3_style = ParagraphStyle('H3', parent=styles['Heading3'], fontSize=10, textColor=ACCENT, spaceAfter=2, spaceBefore=6, fontName='Helvetica-Bold') body_style = ParagraphStyle('Body', parent=styles['Normal'], fontSize=9, spaceAfter=4, spaceBefore=1, leading=14, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'], fontSize=9, spaceAfter=2, spaceBefore=1, leading=13, leftIndent=12, bulletIndent=0, fontName='Helvetica') note_style = ParagraphStyle('Note', parent=styles['Normal'], fontSize=8.5, textColor=GOLD, spaceAfter=3, spaceBefore=2, leading=12, leftIndent=8, fontName='Helvetica-Oblique', backColor=colors.HexColor('#fffbeb'), borderPad=4, borderColor=GOLD, borderWidth=0.5) ref_style = ParagraphStyle('Ref', parent=styles['Normal'], fontSize=8, textColor=colors.HexColor('#374151'), spaceAfter=2, leading=11, fontName='Helvetica') story = [] # ─── COVER SECTION ─────────────────────────────────────────────────────────── story.append(Spacer(1, 0.5*cm)) story.append(Paragraph("DETAILED HISTORY TAKING", title_style)) story.append(Paragraph("Paediatric Seizures", ParagraphStyle('T2', parent=styles['Title'], fontSize=22, textColor=MED_BLUE, alignment=TA_CENTER, fontName='Helvetica-Bold', spaceAfter=4))) story.append(Paragraph("Post-Graduate Long Case Presentation", subtitle_style)) story.append(Spacer(1, 0.3*cm)) story.append(HRFlowable(width="100%", thickness=2, color=DARK_BLUE)) story.append(Spacer(1, 0.15*cm)) story.append(HRFlowable(width="100%", thickness=0.5, color=MED_BLUE)) story.append(Spacer(1, 0.3*cm)) # References box ref_data = [ ["References: Harriet Lane Handbook 23rd Ed. | Rosen's Emergency Medicine 9th Ed. | Kaplan & Sadock's Psychiatry"], ["IAP Expert Committee Guidelines (Indian Pediatrics 2009) | IAP Textbook of Paediatric Neurology (Verma & Kunju, 2019)"], ["ILAE 2017/2025 Seizure Classification | Goodman & Gilman's Pharmacological Basis 13th Ed."] ] ref_table = Table(ref_data, colWidths=[17*cm]) ref_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('TEXTCOLOR', (0,0), (-1,-1), DARK_BLUE), ('FONTNAME', (0,0), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,0), (-1,-1), 7.5), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('ROWBACKGROUNDS', (0,0), (-1,-1), [LIGHT_BLUE]), ('GRID', (0,0), (-1,-1), 0.3, MED_BLUE), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ])) story.append(ref_table) story.append(Spacer(1, 0.3*cm)) def section_header(text, story): story.append(Spacer(1, 0.2*cm)) tbl = Table([[Paragraph(text, ParagraphStyle('SH', parent=styles['Normal'], fontSize=11, textColor=colors.white, fontName='Helvetica-Bold', alignment=TA_LEFT))]], colWidths=[17*cm]) tbl.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 8), ])) story.append(tbl) story.append(Spacer(1, 0.15*cm)) def sub_header(text, story): story.append(Paragraph(text, h2_style)) story.append(HRFlowable(width="100%", thickness=0.5, color=MED_BLUE, spaceAfter=3)) def sub2_header(text, story): story.append(Paragraph(text, h3_style)) def body(text, story): story.append(Paragraph(text, body_style)) def bullet(text, story, indent=0): extra = indent * 8 s = ParagraphStyle('B'+str(indent), parent=bullet_style, leftIndent=12+extra, bulletIndent=extra) story.append(Paragraph(f"• {text}", s)) def note(text, story): story.append(Paragraph(f"<i>{text}</i>", note_style)) def sp(story, h=0.2): story.append(Spacer(1, h*cm)) # ─── PRELIMINARY FRAMEWORK ─────────────────────────────────────────────────── section_header("PRELIMINARY FRAMEWORK", story) body("A <b>seizure</b> is a paroxysmal, transient, synchronized discharge of cortical neurons resulting in alteration of motor, sensory, or cognitive function. <b>Epilepsy</b> (ILAE 2014/2017 definition) requires: (1) at least two unprovoked seizures >24 hours apart, OR (2) one unprovoked seizure with recurrence probability ≥60% over 10 years, OR (3) diagnosis of an epilepsy syndrome.", story) sp(story, 0.1) body("<b>Goals of history in a PG long case:</b>", story) for pt in [ "Confirm the event WAS a seizure (not a mimic)", "Classify the seizure type (ILAE 2017)", "Identify the etiology (structural/genetic/infectious/metabolic/immune/unknown)", "Identify the epilepsy syndrome", "Guide investigations and management" ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 1 ─────────────────────────────────────────────────────────────── section_header("SECTION 1: PRESENTING COMPLAINT AND CHIEF INFORMANT", story) for pt in [ "<b>Chief informant:</b> parent (mother/father), caregiver, teacher — and their reliability", "<b>Language of the family</b> and literacy level", "<b>Exact duration of history</b> (since first episode to current presentation)", ]: bullet(pt, story) body("<i>State the complaint clearly: "Abnormal body movements / loss of consciousness / staring spells / jerking of limbs / falls — since [age/date]"</i>", story) sp(story, 0.2) # ─── SECTION 2 ─────────────────────────────────────────────────────────────── section_header("SECTION 2: HISTORY OF PRESENTING ILLNESS (HOPI)", story) body("Structure the HOPI around the <b>pre-ictal, ictal, and post-ictal</b> phases — the most critical section of the long case.", story) sp(story, 0.15) sub_header("2A. PRE-ICTAL PHASE (Before the Seizure)", story) sub2_header("State of the Child Before Onset", story) for pt in [ "Was the child <b>awake or asleep</b>? (Frontal lobe seizures cluster nocturnally; BECTS often in early morning sleep)", "Was child sitting, standing, or lying?", "Any <b>preceding illness</b> — fever, vomiting, diarrhea, head injury?", ]: bullet(pt, story) sub2_header("Precipitating Factors", story) for pt in [ "<b>Fever</b> — if yes, temperature? (Febrile seizure if 6 months–5 years, temp >38°C)", "Stress or excitement", "Sleep deprivation", "<b>Photo/visual stimulation</b> — TV, video games, sunlight flickering (photosensitive epilepsy)", "<b>Startle</b> (Startle epilepsy)", "<b>Specific activities</b> — reading, eating, playing music (reflex epilepsies)", "<b>Missed medication</b> in known cases", ]: bullet(pt, story) sub2_header("Aura (Focal Onset Indicator)", story) for pt in [ "<b>Sensory:</b> tingling, numbness, visual disturbance (occipital), epigastric rising feeling (temporal lobe)", "<b>Psychic:</b> deja vu, jamais vu, fear, hallucinations", "<b>Autonomic:</b> nausea, pallor, sweating", "<b>Motor:</b> focal twitching before generalization", "Note: Young children may not describe aura; look for behavioral change, running to parent, quiet spells", ]: bullet(pt, story) note("Aura is the initial symptom arising from the seizure focus and is diagnostic of focal onset. — Rosen's Emergency Medicine 9th Ed.", story) sp(story, 0.15) sub_header("2B. ICTAL PHASE (During the Seizure) — MOST IMPORTANT", story) body("This section determines <b>ILAE 2017 seizure type classification</b> and is the cornerstone of the case.", story) sub2_header("Onset", story) for pt in ["Sudden or gradual?", "Which part of body was affected first? (focal onset → contralateral hemisphere)", "Was there any warning (aura)?"]: bullet(pt, story) sub2_header("Motor Features — Nature of Movement", story) motor_data = [ ["Seizure Type", "Description", "Syndrome Clue"], ["Tonic", "Stiffening/rigidity of limbs or trunk", "Lennox-Gastaut, West"], ["Clonic", "Rhythmic jerking", "Febrile, perinatal"], ["Tonic-Clonic", "Stiffening then jerking (grand mal)", "Generalized epilepsy, JME"], ["Myoclonic", "Sudden brief shock-like jerks", "JME (morning jerks)"], ["Atonic", "Sudden loss of muscle tone, drop attacks", "Lennox-Gastaut"], ["Epileptic Spasms", "Brief bilateral flexion/extension clusters", "West syndrome (infants)"], ["Automatisms", "Lip smacking, chewing, hand wringing", "Temporal lobe"], ["Hyperkinetic", "Cycling, thrashing movements", "Frontal lobe (nocturnal)"], ] m_table = Table(motor_data, colWidths=[3.5*cm, 7*cm, 5.5*cm]) m_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(m_table) sp(story, 0.15) sub2_header("Laterality and Spread", story) for pt in [ "Unilateral vs bilateral; if unilateral — right or left? (contralateral hemisphere)", "Sequential spread: <b>Jacksonian march</b> (finger → hand → arm → face)?", "<b>Head and eye deviation:</b> direction? Versive seizure = frontal/temporal focus", "Eyes open or closed? (Closed eyes during convulsion → suggests PNES)", ]: bullet(pt, story) sub2_header("Consciousness / Awareness", story) for pt in [ "<b>Aware</b> (responds to name, follows commands) → Focal aware seizure", "<b>Impaired awareness</b> → Focal with impaired awareness or generalized", "In generalized seizures: consciousness impaired by definition", ]: bullet(pt, story) sub2_header("Autonomic Features", story) for pt in [ "Cyanosis (perioral/generalized), sweating, pallor, flushing", "<b>Urinary incontinence</b> — strongly suggests true seizure (not mimic)", "Fecal incontinence", "Hypersalivation (temporal lobe seizures)", "Nocturnal vomiting + eye deviation in 3–5 yr olds = Panayiotopoulos syndrome", ]: bullet(pt, story) sub2_header("Duration", story) for pt in [ "<5 min: most self-limited seizures", ">5 min: operational threshold for <b>status epilepticus</b> (ILAE 2015)", ">30 min: established status epilepticus", "Did it stop on its own or require medication?", "Tongue bite — lateral tongue bite strongly suggests tonic-clonic seizure", ]: bullet(pt, story) note("\"Information regarding onset, presence of aura, type of seizure, and duration of ictal and postictal periods is key to determining whether the seizure is similar to previous seizures.\" — Rosen's Emergency Medicine, p.176", story) sp(story, 0.15) sub_header("2C. POST-ICTAL PHASE (After the Seizure)", story) for pt in [ "How quickly did the child recover? (Immediate → absence/myoclonic; Prolonged → GTC; No post-ictal → PNES)", "<b>Todd's paralysis:</b> unilateral weakness after focal seizure — important localizing sign; duration?", "Post-ictal sleep duration?", "Headache (common post-GTC), vomiting, disorientation, agitation", "<b>Aphasia</b> after seizure — suggests dominant hemisphere focus", ]: bullet(pt, story) sp(story, 0.2) story.append(PageBreak()) # ─── SECTION 3 ─────────────────────────────────────────────────────────────── section_header("SECTION 3: CHARACTERIZATION CHECKLIST", story) chk_data = [ ["Feature", "Details to Record"], ["Date/time of first seizure", "Age at onset"], ["Total number of episodes", "Frequency, clustering"], ["Duration of each episode", "Any status epilepticus?"], ["Seizure type (ILAE 2017)", "Focal / Generalized / Unknown"], ["Body part involved", "Laterality, Jacksonian march"], ["Consciousness", "Aware / Impaired awareness"], ["Post-ictal state", "Duration, Todd's paralysis, aphasia"], ["Precipitant/trigger", "Fever, sleep deprivation, light, stress"], ["Diurnal variation", "Morning jerks, nocturnal, on awakening"], ["Change in semiology over time", "Evolution of seizures, new type"], ] chk_table = Table(chk_data, colWidths=[8*cm, 9*cm]) chk_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8.5), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 5), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ])) story.append(chk_table) sp(story, 0.2) # ─── SECTION 4 ─────────────────────────────────────────────────────────────── section_header("SECTION 4: HISTORY OF RECURRENCE", story) for pt in [ "First seizure or recurrent?", "If recurrent: <b>total number, frequency (per day/week/month)</b>", "Change in character over time? (new type = syndrome evolution or drug failure)", "<b>Cluster seizures</b> (multiple in 24 hours)?", "Longest seizure-free interval?", "Any episode of <b>status epilepticus?</b> (>5 min operational / >30 min established)", "Response to treatment: which medications, doses, compliance, side effects", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 5 ─────────────────────────────────────────────────────────────── section_header("SECTION 5: SEIZURE TYPE-SPECIFIC HISTORY", story) sub_header("Febrile Seizures (Key for Indian Context)", story) for pt in [ "Age: 6 months to 5 years for typical febrile seizures", "Temperature at time of seizure (>38°C rectal)", "<b>Simple febrile seizure:</b> generalized, <15 min, single episode in 24 hours, normal neuro exam", "<b>Complex febrile seizure:</b> focal, >15 min, recurs within 24 hours, post-ictal deficit", "Source of fever: URTI, otitis media, roseola, typhoid (India), dengue", "Family history of febrile seizures (first-degree relative — autosomal dominant tendency)", "Previous febrile seizures (risk of recurrence: 30–50%)", "Developmental status — must be normal for simple FS", ]: bullet(pt, story) note("\"Simple febrile seizure in a well-appearing, fully immunized child with normal neurological examination and no meningeal signs requires no further workup (no neuroimaging, EEG, or bloodwork).\" — Harriet Lane Handbook 23rd Ed., p.739", story) sp(story, 0.15) sub_header("Neonatal Seizures (<28 days)", story) for pt in [ "Perinatal history in detail (see Section 7)", "Day of life of onset: Day 1 = HIE/hypoglycemia; Day 2–3 = ICH/hypocalcemia; Day 3–7 = meningitis/metabolic; After day 7 = late hypocalcemia, herpes encephalitis", "<b>Subtle seizures</b> (most common): lip smacking, cycling, apnea, eye deviation — easily missed", "Focal clonic, multifocal clonic, tonic, myoclonic types", "EEG-confirmed vs clinical only (EEG now gold standard — ILAE 2023 Neonatal Seizure Task Force)", ]: bullet(pt, story) sp(story, 0.15) sub_header("West Syndrome (Infantile Spasms)", story) for pt in [ "Age of onset: 3–12 months (peak 4–6 months)", "<b>Spasm description:</b> sudden brief flexion/extension of neck, trunk, limbs", "<b>Timing: clusters on awakening</b> (key feature — ask specifically)", "EEG: hypsarrhythmia (chaotic high-amplitude slow waves with superimposed multifocal spikes)", "Developmental regression since spasm onset?", "Underlying etiology: tuberous sclerosis (ash-leaf macules), HIE, Down syndrome, lissencephaly", ]: bullet(pt, story) sp(story, 0.15) sub_header("Childhood Absence Epilepsy", story) for pt in [ "Age 4–12 years; female > male", "<b>Staring spells:</b> brief, abrupt onset and offset (<30 seconds)", "Eyelid fluttering, lip smacking, automatisms", "<b>Very frequent</b> — dozens per day; first noticed at school (teacher's complaint)", "Child unaware, no post-ictal phase — immediate return to activity", "Precipitated by <b>hyperventilation</b> or photic stimulation", "Normal development, normal MRI, EEG: 3 Hz spike-wave", ]: bullet(pt, story) sp(story, 0.15) sub_header("Juvenile Myoclonic Epilepsy (JME)", story) for pt in [ "Age 12–18 years", "<b>Bilateral myoclonic jerks in the morning</b> — spilling coffee/milk, dropping objects (often missed for years — ask specifically)", "GTC seizures precipitated by sleep deprivation, alcohol, stress, early awakening", "Family history of seizures", "Lifelong condition — discuss compliance; valproate is the drug of choice", ]: bullet(pt, story) note("JME history is often missed for years. Specifically ask: 'Does the child drop things or have jerks in the morning after waking up?'", story) sp(story, 0.2) story.append(PageBreak()) # ─── SECTION 6 ─────────────────────────────────────────────────────────────── section_header("SECTION 6: PAST HISTORY", story) for pt in [ "Any previous seizure episodes (including unrecognized staring spells, nocturnal events, morning jerks)", "Prior hospitalizations for neurological illness", "<b>CNS infections:</b> meningitis, encephalitis, Japanese encephalitis (India), cerebral malaria, neurocysticercosis", "<b>Head trauma:</b> accidental, non-accidental injury", "Previous febrile seizures", "<b>Cerebrovascular events:</b> stroke, cerebral venous thrombosis", "Metabolic disorders: hypoglycemia, liver disease", "Immunization history (DPT, MMR — address family misconceptions)", "<b>Prior AED use:</b> which drugs, doses, duration, reason for stopping", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 7 ─────────────────────────────────────────────────────────────── section_header("SECTION 7: BIRTH AND PERINATAL HISTORY", story) body("This section often reveals the <b>ETIOLOGY</b> — especially in infants and young children.", story) sub_header("Antenatal History", story) for pt in [ "Maternal health: diabetes, hypertension, infections (TORCH, CMV, toxoplasma)", "Drug exposure during pregnancy: alcohol, antiepileptics (valproate — teratogenic), recreational drugs", "Antenatal scans: any fetal abnormality noted?", "<b>Consanguinity</b> of parents (autosomal recessive metabolic disorders, genetic epilepsies — important in India)", "Fetal movements: reduced fetal movements suggest in-utero insult", ]: bullet(pt, story) sub_header("Natal History", story) for pt in [ "Mode of delivery: LSCS / NVD / Forceps / Vacuum", "Gestational age (preterm vs term); Birth weight (LBW/VLBW)", "<b>Birth asphyxia:</b> APGAR scores, need for resuscitation", "<b>Hypoxic Ischemic Encephalopathy (HIE):</b> grade, therapeutic hypothermia?", "Birth trauma: forceps marks, cephalohematoma", "<b>Neonatal NICU admission:</b> duration, reason", ]: bullet(pt, story) sub_header("Neonatal Period", story) for pt in [ "<b>Neonatal seizures:</b> any abnormal movements in the first 28 days?", "Feeding difficulties (suggests neurological compromise)", "Hypoglycemia, hypocalcemia in neonatal period", "Jaundice: severity, phototherapy/exchange transfusion (kernicterus)?", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 8 ─────────────────────────────────────────────────────────────── section_header("SECTION 8: DEVELOPMENTAL HISTORY", story) body("Essential for syndrome identification and etiology. Must be recorded in all four domains:", story) dev_data = [ ["Domain", "Key Milestones to Record", "Red Flag"], ["Motor", "Head hold (3m), sit (6m), stand (9m), walk (12–15m)", "Not walking by 18 months"], ["Language", "Cooing (2m), babbling (6m), first words (12m), sentences (24m)", "No words by 12m, no 2-word phrases by 24m"], ["Social", "Social smile (6–8 weeks), eye contact, parallel/cooperative play", "No social smile, lack of eye contact"], ["Cognitive", "School performance, learning difficulties, attention, memory", "Regression, decline in school grades"], ] dev_table = Table(dev_data, colWidths=[3.5*cm, 8.5*cm, 5*cm]) dev_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('WORDWRAP', (0,0), (-1,-1), True), ])) story.append(dev_table) sp(story, 0.1) for pt in [ "<b>Global developmental delay pre-dating seizures</b> = symptomatic/structural etiology likely", "<b>Developmental regression after seizure onset</b> = West syndrome, Landau-Kleffner, progressive neurological disease", "Loss of previously acquired skills (regression) — Rett syndrome, Dravet, LKS", "<b>Behavioral change</b> since seizure onset? (ADHD, autism comorbidities)", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 9 ─────────────────────────────────────────────────────────────── section_header("SECTION 9: FAMILY HISTORY", story) for pt in [ "Seizures in parents, siblings, grandparents, cousins; type of seizures in relatives", "Epilepsy syndrome in family", "<b>Consanguinity</b> (important in India — autosomal recessive genetic epilepsies, metabolic disorders)", "Family history of sudden unexplained death (SUDEP risk in genetic epilepsies)", "Intellectual disability, autism in family", "Neurocutaneous disorders in family (tuberous sclerosis — TSC1/TSC2)", ]: bullet(pt, story) note("\"Many electroclinical syndromes are associated with de novo single gene mutations. SCN1A (Dravet syndrome) — avoid lamotrigine. SLC2A1 (GLUT1 deficiency) — ketogenic diet responsive.\" — Kaplan & Sadock's Comprehensive Textbook of Psychiatry, p.2072", story) sp(story, 0.2) # ─── SECTION 10 ─────────────────────────────────────────────────────────────── section_header("SECTION 10: IMMUNIZATION HISTORY", story) for pt in [ "Complete immunization as per <b>Indian NIS schedule</b>", "DPT/pentavalent-related fever-triggered febrile seizures — distinguish from vaccine-related epilepsy", "Families often incorrectly attribute epilepsy to vaccination — address this systematically", "In children with known SCN1A/Dravet: live vaccines (MMR) may trigger prolonged febrile seizures; benefit outweighs risk per IAP", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 11 ─────────────────────────────────────────────────────────────── section_header("SECTION 11: NUTRITIONAL HISTORY", story) for pt in [ "Exclusively breastfed or formula-fed?", "<b>Vitamin D and Calcium status</b> — hypocalcemic seizures in exclusively breastfed infants (low sun exposure, dark skin — common in India)", "<b>Late-onset hypocalcemia</b> in bottle-fed infants (high phosphate load)", "Pyridoxine (B6) deficiency — rare but treatable neonatal/infantile seizure cause", "Biotin deficiency (multiple carboxylase deficiency — biotin-responsive)", "<b>GLUT1 deficiency:</b> seizures worsened after prolonged fasting — ask feeding history", ]: bullet(pt, story) sp(story, 0.2) # ─── SECTION 12 ─────────────────────────────────────────────────────────────── section_header("SECTION 12: SOCIAL HISTORY AND DRUG HISTORY", story) sub_header("Social History", story) for pt in [ "School attendance and performance (absences, attention, learning)", "Impact of seizures on daily activities — supervision needs: swimming, bathing, cycling", "Driving in adolescents (important medicolegal issue)", "Psychosocial impact on family; economic burden of disease and medications", ]: bullet(pt, story) sub_header("Drug History", story) for pt in [ "Current AEDs: drug name, dose (mg/kg/day), duration, <b>compliance</b>", "<b>Indian context:</b> generic vs branded medications (bioavailability differences may affect control)", "Drug interactions; side effects reported", "Other medications: antibiotics (carbapenems lower seizure threshold), antihistamines, theophylline", "<b>Traditional/herbal medicines</b> (kala ghoda, tribal remedies — commonly used in India)", "<b>Non-compliance reasons:</b> cost, side effects, stigma, family beliefs", ]: bullet(pt, story) sp(story, 0.2) story.append(PageBreak()) # ─── SECTION 13 ─────────────────────────────────────────────────────────────── section_header("SECTION 13: REVIEW OF SYSTEMS", story) ros_data = [ ["System", "Key Questions"], ["CNS", "Headache, vomiting (raised ICP), focal weakness, vision changes, regression"], ["Autonomic", "Pallor, sweating, cyanosis during episodes"], ["Cutaneous", "Ash-leaf macules (TSC), cafe-au-lait spots (NF1), port-wine stain (SWS), adenoma sebaceum"], ["Ophthalmology", "Abnormal eye movements, nystagmus, visual field loss, fundal changes"], ["Cardiac", "Palpitations, syncope (exclude cardiogenic syncope — cardiac history, ECG)"], ["Renal", "Oliguria, polyuria (electrolyte imbalance causing seizures)"], ["Endocrine", "Polyuria/polydipsia (DI), growth retardation, puberty"], ["Behaviour", "ADHD, autism, anxiety, depression (common comorbidities)"], ["Sleep", "Snoring, sleep apnea, abnormal movements only during sleep"], ] ros_table = Table(ros_data, colWidths=[3.5*cm, 13.5*cm]) ros_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8.5), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 5), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(ros_table) sp(story, 0.2) # ─── SECTION 14 ─────────────────────────────────────────────────────────────── section_header("SECTION 14: DIFFERENTIAL DIAGNOSIS ON HISTORY ALONE", story) body("Part of the PG long case is demonstrating ability to distinguish seizures from mimics on history alone.", story) dd_data = [ ["Condition", "Distinguishing Historical Feature"], ["Breath-holding spells (18m–3y)", "Always triggered by frustration/pain; child cries then holds breath; cyanosis then LOC"], ["Vasovagal syncope", "Postural trigger, hot environment, nausea; slow collapse, rapid recovery; no postictal phase"], ["Cardiogenic syncope", "Exercise/emotion trigger, no post-ictal state, family cardiac history, abnormal ECG"], ["PNES (pseudoseizures)", "No post-ictal state; eyes closed during event; prolonged >20 min; forward pelvic thrusting; psychological stressor; no EEG changes"], ["Benign neonatal sleep myoclonus", "Occurs ONLY during sleep; disappears immediately on waking; completely normal EEG"], ["Sandifer syndrome", "Back arching after feeds in infants; GERD history; not associated with LOC"], ["Tics", "Suppressible; no impaired consciousness; preceded by urge sensation; no post-ictal phase"], ["Migraine with aura", "Visual aura builds slowly over minutes (seizure aura: seconds); followed by headache; family history"], ["Paroxysmal vertigo (toddler)", "Episodes of vertigo/vomiting/staggering; no LOC; nystagmus present; normal EEG"], ["Narcolepsy-cataplexy", "Cataplexy triggered by strong emotion (laughter); excessive daytime sleepiness; hypnagogic hallucinations"], ] dd_table = Table(dd_data, colWidths=[5*cm, 12*cm]) dd_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('WORDWRAP', (0,0), (-1,-1), True), ])) story.append(dd_table) note("Source: Harriet Lane Handbook 23rd Ed., Table 20.3, p.741; Rosen's Emergency Medicine 9th Ed., Box 14.2", story) sp(story, 0.2) # ─── SECTION 15 ─────────────────────────────────────────────────────────────── section_header("SECTION 15: EPILEPSY SYNDROME IDENTIFICATION (India-Relevant)", story) body("Attempt to identify an epilepsy syndrome — provides prognosis and guides AED selection. Roughly <b>50% of children</b> can be assigned a syndrome diagnosis based on history, exam, and EEG. — Kaplan & Sadock, p.2071", story) syn_data = [ ["Syndrome", "Age", "Key History Points", "AED Choice"], ["West Syndrome", "3–12 months", "Spasms in clusters on awakening; regression; hypsarrhythmia", "ACTH / Vigabatrin"], ["Dravet Syndrome", "1st year", "Prolonged febrile/afebrile hemiclonic seizures; later myoclonic; regression; SCN1A mutation", "Avoid Na-channel blockers; Valproate/Clobazam"], ["CAE (Childhood Absence)", "4–12 yrs", "Frequent brief staring spells; normal development; provoked by hyperventilation", "Ethosuximide / Valproate"], ["BECTS/Rolandic", "3–13 yrs", "Nocturnal focal facial-arm seizures; speech arrest; normal MRI; normal development", "Often no AED needed"], ["JME", "12–18 yrs", "Morning myoclonic jerks; GTC on sleep deprivation; family hx; alcohol trigger", "Valproate (lifelong)"], ["Lennox-Gastaut", "1–7 yrs", "Multiple seizure types; drop attacks; cognitive regression; slow spike-wave <2.5 Hz", "Valproate / Clobazam / Lamotrigine"], ["NCC Epilepsy (India)", "Any age", "Single ring-enhancing lesion; pork exposure; village/travel history; calcified lesions", "Albendazole + AED"], ["GEFS+", "Variable", "Multiple febrile + afebrile seizures; strong family history; SCN1B/SCN1A", "Manage individually"], ] syn_table = Table(syn_data, colWidths=[3.5*cm, 2*cm, 7.5*cm, 4*cm]) syn_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('WORDWRAP', (0,0), (-1,-1), True), ])) story.append(syn_table) sp(story, 0.2) # ─── SECTION 16 ─────────────────────────────────────────────────────────────── section_header("SECTION 16: ETIOLOGY CLASSIFICATION (ILAE 2017)", story) body("After completing history, classify etiology as per <b>ILAE 2017</b> (must be stated in the PG long case summary):", story) etio_data = [ ["Etiology", "Key Examples in Indian Context"], ["Structural", "HIE, stroke, cortical dysplasia, polymicrogyria, lissencephaly, tumor, NCC (neurocysticercosis), trauma"], ["Genetic", "Dravet (SCN1A), GLUT1 (SLC2A1), TSC (TSC1/TSC2), Angelman syndrome, Rett syndrome"], ["Infectious", "Bacterial meningitis, viral encephalitis, TB meningitis, NCC, cerebral malaria, Japanese encephalitis"], ["Metabolic", "Hypoglycemia, hypocalcemia, hyponatremia, pyridoxine dependency, organic acidemias, urea cycle defects"], ["Immune", "NMDAR encephalitis, VGKC-complex antibodies — consider in new onset refractory seizures with behavioral change"], ["Unknown", "No identifiable cause after complete evaluation — most common category overall"], ] etio_table = Table(etio_data, colWidths=[3.5*cm, 13.5*cm]) etio_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), TABLE_HDR), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8.5), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 5), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('WORDWRAP', (0,0), (-1,-1), True), ])) story.append(etio_table) sp(story, 0.2) story.append(PageBreak()) # ─── SECTION 17: SUMMARY STATEMENT ─────────────────────────────────────────── section_header("SECTION 17: FINAL SUMMARY STATEMENT FOR LONG CASE", story) body("After completing history, present a structured summary statement:", story) sp(story, 0.1) summ_box = Table([[Paragraph( "<i><b>\"[Name]</b>, a <b>[age]</b>-year-old [male/female] child, born of [consanguineous/non-consanguineous] parents, " "with [normal/abnormal] antenatal, natal and developmental history, presented with [X] episodes of " "<b>[seizure type description]</b> over [duration], classified as " "[focal aware / focal impaired awareness / generalized tonic-clonic / absence / myoclonic / epileptic spasms], " "with onset at [age], lasting [duration], associated with [fever/no fever/precipitant], " "[with/without] post-ictal deficit, suggestive of [febrile seizures / epilepsy syndrome / symptomatic seizures], " "likely etiology being [structural / genetic / metabolic / infectious / unknown], currently on [AED] at [dose mg/kg/day] " "with [good/poor] compliance and [controlled/uncontrolled] seizures.\"</i>", ParagraphStyle('SummBox', parent=styles['Normal'], fontSize=9, leading=14, fontName='Helvetica', textColor=DARK_BLUE))]], colWidths=[17*cm]) summ_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('GRID', (0,0), (-1,-1), 1, MED_BLUE), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ])) story.append(summ_box) sp(story, 0.2) # ─── MNEMONIC ───────────────────────────────────────────────────────────────── section_header("QUICK MEMORY AID — Mnemonic: \"FIVE PHASES\"", story) mnem_data = [ ["F", "First episode details", "Date, age of onset, precipitant, duration"], ["I", "Ictal semiology", "Pre-ictal / ictal / post-ictal phases in detail"], ["V", "Vital details", "Duration, frequency, type classification (ILAE 2017)"], ["E", "Etiology clues", "Birth history, developmental history, family history"], ["", "", ""], ["P", "Past history", "CNS infections, prior AEDs, trauma, metabolic illness"], ["H", "History of development", "Milestones in all domains; regression?"], ["A", "Antenatal & perinatal", "Consanguinity, HIE, NICU, neonatal seizures"], ["S", "Social, school, drug hx", "Compliance, traditional medicines, cost, stigma"], ["E", "Epilepsy syndrome", "Identify syndrome — West / Dravet / CAE / JME / LGS"], ["S", "Summary statement", "Working diagnosis, etiology, treatment plan"], ] mnem_table = Table(mnem_data, colWidths=[1*cm, 4.5*cm, 11.5*cm]) mnem_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (0,-1), colors.HexColor('#dbeafe')), ('FONTNAME', (0,0), (0,-1), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('TEXTCOLOR', (0,0), (0,-1), DARK_BLUE), ('FONTNAME', (0,1), (1,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (0,1), (1,-1), DARK_BLUE), ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.white, BG_GRAY]), ('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 5), ('ALIGN', (0,0), (0,-1), 'CENTER'), ('BACKGROUND', (0,4), (-1,4), colors.white), # spacer row ])) story.append(mnem_table) sp(story, 0.2) # ─── INDIAN CONTEXT NOTE ─────────────────────────────────────────────────────── section_header("SPECIAL NOTE: INDIAN CLINICAL CONTEXT", story) note("In the Indian context, always ask specifically about: (1) Neurocysticercosis — pork exposure, travel to endemic areas, calcified lesions on CT; (2) Tuberculous meningitis — contact history, BCG scar, prolonged fever; (3) Pyogenic meningitis — preceding URTI, bulging fontanelle, neck stiffness; (4) Febrile illness-associated seizures (typhoid, dengue, malaria); (5) Consanguinity (autosomal recessive genetic epilepsies); (6) Traditional remedies — kala ghoda, herbal antiepileptics; (7) Cost-related non-compliance (generic vs branded AEDs). These are all common PG viva and long case examination points in India.", story) sp(story, 0.2) # ─── REFERENCES ─────────────────────────────────────────────────────────────── section_header("KEY REFERENCES", story) refs = [ "1. IAP Expert Committee on Pediatric Epilepsy. Guidelines for Diagnosis and Management of Childhood Epilepsy. Indian Pediatrics 2009; 46: 681-698.", "2. Verma A, Kunju PAM. IAP Textbook of Pediatric Neurology. Jaypee Brothers, 2019. Chapters 18, 19, 24, 25, 26.", "3. The Johns Hopkins Hospital. Harriet Lane Handbook, 23rd Edition. Chapter 20, pp. 738-742.", "4. Marx JA et al. Rosen's Emergency Medicine: Concepts and Clinical Practice, 9th Ed. Chapter 14: Seizures, pp. 175-176.", "5. Kaplan HI, Sadock BJ. Kaplan & Sadock's Comprehensive Textbook of Psychiatry. Seizures and Epilepsy Syndromes in Children, pp. 2071-2072.", "6. Fisher RS et al. Operational Classification of Seizure Types by the ILAE. Epilepsia 2017; 58(4): 522-530.", "7. Beniczky S et al. Updated Classification of Epileptic Seizures: ILAE Position Paper 2025. (ilae.org)", "8. Fisher RS et al. A Practical Clinical Definition of Epilepsy. Epilepsia 2014; 55(4): 475-482.", "9. IAP Chapter. Evaluation and Management of Status Epilepticus in Children. iapindia.org.", "10. Brunton LL et al. Goodman & Gilman's The Pharmacological Basis of Therapeutics, 13th Ed. Seizures in Infants and Young Children.", "11. Pressler RM et al. Treatment of Seizures in the Neonate: Guidelines and Consensus — ILAE Task Force on Neonatal Seizures. Epilepsia 2023 Oct. [PMID: 37655702]", ] for r in refs: story.append(Paragraph(r, ref_style)) sp(story, 0.15) story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#94a3b8'))) sp(story, 0.1) story.append(Paragraph( "Generated by Orris Medical AI | For educational and PG training purposes only | July 2026", ParagraphStyle('Footer', parent=styles['Normal'], fontSize=7.5, textColor=colors.HexColor('#94a3b8'), alignment=TA_CENTER))) # Build PDF doc.build(story) print("PDF created successfully:", output_path) PYEOF
~/paediatric-seizures/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, PageBreak)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
output_path = "/tmp/workspace/paediatric-seizures/Paediatric_Seizures_History_Taking.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm,
title="Detailed History Taking: Paediatric Seizures",
author="Orris Medical AI"
)
styles = getSampleStyleSheet()
DARK_BLUE = colors.HexColor('#1a3a5c')
MED_BLUE = colors.HexColor('#2563a8')
LIGHT_BLUE = colors.HexColor('#dbeafe')
ACCENT = colors.HexColor('#1e40af')
GOLD = colors.HexColor('#b45309')
BG_GRAY = colors.HexColor('#f8fafc')
TABLE_HDR = colors.HexColor('#1e3a5f')
title_style = ParagraphStyle('TitleStyle', parent=styles['Title'],
fontSize=20, textColor=DARK_BLUE, spaceAfter=6, spaceBefore=0,
alignment=TA_CENTER, fontName='Helvetica-Bold')
subtitle_style = ParagraphStyle('SubtitleStyle', parent=styles['Normal'],
fontSize=12, textColor=MED_BLUE, spaceAfter=4, alignment=TA_CENTER,
fontName='Helvetica-Oblique')
h2_style = ParagraphStyle('H2', parent=styles['Heading2'],
fontSize=11, textColor=DARK_BLUE, spaceAfter=3, spaceBefore=8,
fontName='Helvetica-Bold')
h3_style = ParagraphStyle('H3', parent=styles['Heading3'],
fontSize=10, textColor=ACCENT, spaceAfter=2, spaceBefore=6,
fontName='Helvetica-Bold')
body_style = ParagraphStyle('Body', parent=styles['Normal'],
fontSize=9, spaceAfter=4, spaceBefore=1,
leading=14, alignment=TA_JUSTIFY, fontName='Helvetica')
bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'],
fontSize=9, spaceAfter=2, spaceBefore=1,
leading=13, leftIndent=12, fontName='Helvetica')
note_style = ParagraphStyle('Note', parent=styles['Normal'],
fontSize=8.5, textColor=GOLD, spaceAfter=3, spaceBefore=2,
leading=12, leftIndent=8, fontName='Helvetica-Oblique',
backColor=colors.HexColor('#fffbeb'), borderPad=4,
borderColor=GOLD, borderWidth=0.5)
ref_style = ParagraphStyle('Ref', parent=styles['Normal'],
fontSize=8, textColor=colors.HexColor('#374151'), spaceAfter=2,
leading=11, fontName='Helvetica')
story = []
def section_header(text, story):
story.append(Spacer(1, 0.2*cm))
tbl = Table([[Paragraph(text, ParagraphStyle('SH', parent=styles['Normal'],
fontSize=11, textColor=colors.white, fontName='Helvetica-Bold',
alignment=TA_LEFT))]], colWidths=[17*cm])
tbl.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 8),
]))
story.append(tbl)
story.append(Spacer(1, 0.15*cm))
def sub_header(text, story):
story.append(Paragraph(text, h2_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=MED_BLUE, spaceAfter=3))
def sub2_header(text, story):
story.append(Paragraph(text, h3_style))
def body(text, story):
story.append(Paragraph(text, body_style))
def bullet(text, story, indent=0):
extra = indent * 8
s = ParagraphStyle('B'+str(indent), parent=bullet_style, leftIndent=12+extra)
story.append(Paragraph('• ' + text, s))
def note(text, story):
story.append(Paragraph('<i>' + text + '</i>', note_style))
def sp(story, h=0.2):
story.append(Spacer(1, h*cm))
def make_table(data, col_widths, story):
tbl = Table(data, colWidths=col_widths)
tbl.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), TABLE_HDR),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, BG_GRAY]),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 4),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(tbl)
# COVER
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("DETAILED HISTORY TAKING", title_style))
story.append(Paragraph("Paediatric Seizures", ParagraphStyle('T2',
parent=styles['Title'], fontSize=22, textColor=MED_BLUE,
alignment=TA_CENTER, fontName='Helvetica-Bold', spaceAfter=4)))
story.append(Paragraph("Post-Graduate Long Case Presentation", subtitle_style))
story.append(Spacer(1, 0.3*cm))
story.append(HRFlowable(width="100%", thickness=2, color=DARK_BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(HRFlowable(width="100%", thickness=0.5, color=MED_BLUE))
story.append(Spacer(1, 0.3*cm))
ref_data = [
["References: Harriet Lane Handbook 23rd Ed. | Rosen's Emergency Medicine 9th Ed. | Kaplan and Sadock's Psychiatry"],
["IAP Expert Committee Guidelines (Indian Pediatrics 2009) | IAP Textbook of Paediatric Neurology (Verma and Kunju, 2019)"],
["ILAE 2017/2025 Seizure Classification | Goodman and Gilman's Pharmacological Basis 13th Ed."]
]
ref_table = Table(ref_data, colWidths=[17*cm])
ref_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
('TEXTCOLOR', (0,0), (-1,-1), DARK_BLUE),
('FONTNAME', (0,0), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,0), (-1,-1), 7.5),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('GRID', (0,0), (-1,-1), 0.3, MED_BLUE),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(ref_table)
story.append(Spacer(1, 0.3*cm))
# SECTION 1: PRELIMINARY FRAMEWORK
section_header("PRELIMINARY FRAMEWORK", story)
body("A <b>seizure</b> is a paroxysmal, transient, synchronized discharge of cortical neurons resulting in alteration of motor, sensory, or cognitive function. <b>Epilepsy</b> (ILAE 2014/2017) requires: (1) at least two unprovoked seizures >24 hours apart, OR (2) one unprovoked seizure with recurrence probability >=60% over 10 years, OR (3) diagnosis of an epilepsy syndrome.", story)
sp(story, 0.1)
body("<b>Goals of history in a PG long case:</b>", story)
for pt in [
"Confirm the event WAS a seizure (not a mimic)",
"Classify the seizure type (ILAE 2017)",
"Identify the etiology (structural/genetic/infectious/metabolic/immune/unknown)",
"Identify the epilepsy syndrome",
"Guide investigations and management"
]:
bullet(pt, story)
sp(story, 0.2)
# SECTION 2
section_header("SECTION 1: PRESENTING COMPLAINT AND CHIEF INFORMANT", story)
for pt in [
"<b>Chief informant:</b> parent (mother/father), caregiver, teacher -- and their reliability",
"<b>Language of the family</b> and literacy level",
"<b>Exact duration of history</b> (since first episode to current presentation)",
]:
bullet(pt, story)
body("<i>State the complaint clearly: 'Abnormal body movements / loss of consciousness / staring spells / jerking of limbs / falls -- since [age/date]'</i>", story)
sp(story, 0.2)
# HOPI
section_header("SECTION 2: HISTORY OF PRESENTING ILLNESS (HOPI)", story)
body("Structure the HOPI around the <b>pre-ictal, ictal, and post-ictal</b> phases. This is the most critical section of the long case.", story)
sp(story, 0.15)
sub_header("2A. PRE-ICTAL PHASE (Before the Seizure)", story)
sub2_header("State of the Child Before Onset", story)
for pt in [
"Was the child <b>awake or asleep?</b> (Frontal lobe seizures cluster nocturnally; BECTS often in early morning sleep)",
"Was child sitting, standing, or lying?",
"Any <b>preceding illness</b> -- fever, vomiting, diarrhea, head injury?",
]:
bullet(pt, story)
sub2_header("Precipitating Factors", story)
for pt in [
"<b>Fever</b> -- if yes, temperature? (Febrile seizure if 6 months-5 years, temp >38 degrees C)",
"Stress or excitement; Sleep deprivation",
"<b>Photo/visual stimulation</b> -- TV, video games, sunlight flickering (photosensitive epilepsy)",
"<b>Startle</b> (Startle epilepsy); Specific activities -- reading, eating, music (reflex epilepsies)",
"<b>Missed medication</b> in known cases",
]:
bullet(pt, story)
sub2_header("Aura (Focal Onset Indicator)", story)
for pt in [
"<b>Sensory:</b> tingling, numbness, visual disturbance (occipital), epigastric rising feeling (temporal lobe)",
"<b>Psychic:</b> deja vu, jamais vu, fear, hallucinations",
"<b>Autonomic:</b> nausea, pallor, sweating",
"<b>Motor:</b> focal twitching before generalization",
"Note: Young children may not describe aura; look for behavioral change, running to parent, quiet spells",
]:
bullet(pt, story)
note("Aura is the initial symptom arising from the seizure focus and is diagnostic of focal onset. -- Rosen's Emergency Medicine 9th Ed.", story)
sp(story, 0.15)
sub_header("2B. ICTAL PHASE (During the Seizure) -- MOST IMPORTANT", story)
body("This section determines <b>ILAE 2017 seizure type classification</b> and is the cornerstone of the case.", story)
sub2_header("Onset", story)
for pt in ["Sudden or gradual?",
"Which part of body was affected first? (focal onset = contralateral hemisphere)",
"Was there any warning (aura)?"]:
bullet(pt, story)
sub2_header("Motor Features", story)
motor_data = [
["Seizure Type", "Description", "Syndrome Clue"],
["Tonic", "Stiffening/rigidity of limbs or trunk", "Lennox-Gastaut, West"],
["Clonic", "Rhythmic jerking", "Febrile, perinatal"],
["Tonic-Clonic", "Stiffening then jerking (grand mal)", "Generalized epilepsy, JME"],
["Myoclonic", "Sudden brief shock-like jerks", "JME (morning jerks)"],
["Atonic", "Sudden loss of muscle tone, drop attacks", "Lennox-Gastaut"],
["Epileptic Spasms", "Brief bilateral flexion/extension clusters", "West syndrome (infants)"],
["Automatisms", "Lip smacking, chewing, hand wringing", "Temporal lobe"],
["Hyperkinetic", "Cycling, thrashing movements", "Frontal lobe (nocturnal)"],
]
make_table(motor_data, [3.5*cm, 7*cm, 5.5*cm], story)
sp(story, 0.15)
sub2_header("Laterality and Spread", story)
for pt in [
"Unilateral vs bilateral; if unilateral -- right or left? (contralateral hemisphere)",
"Sequential spread: <b>Jacksonian march</b> (finger to hand to arm to face)?",
"<b>Head and eye deviation:</b> direction? Versive seizure = frontal/temporal focus",
"Eyes open or closed? (Closed eyes during convulsion suggests PNES)",
]:
bullet(pt, story)
sub2_header("Consciousness / Awareness", story)
for pt in [
"<b>Aware</b> (responds to name, follows commands) = Focal aware seizure",
"<b>Impaired awareness</b> = Focal with impaired awareness or generalized",
"In generalized seizures: consciousness impaired by definition",
]:
bullet(pt, story)
sub2_header("Autonomic Features", story)
for pt in [
"Cyanosis (perioral/generalized), sweating, pallor, flushing",
"<b>Urinary incontinence</b> -- strongly suggests true seizure (not mimic)",
"Fecal incontinence; Hypersalivation (temporal lobe seizures)",
"Nocturnal vomiting + eye deviation in 3-5 yr olds = Panayiotopoulos syndrome",
]:
bullet(pt, story)
sub2_header("Duration", story)
for pt in [
"<5 min: most self-limited seizures",
">5 min: operational threshold for <b>status epilepticus</b> (ILAE 2015)",
">30 min: established status epilepticus",
"Did it stop on its own or require medication?",
"Lateral tongue bite strongly suggests tonic-clonic seizure",
]:
bullet(pt, story)
note("\"Information regarding onset, presence of aura, type of seizure, and duration of ictal and postictal periods is key.\" -- Rosen's Emergency Medicine, p.176", story)
sp(story, 0.15)
sub_header("2C. POST-ICTAL PHASE (After the Seizure)", story)
for pt in [
"How quickly did the child recover? (Immediate = absence/myoclonic; Prolonged = GTC; No post-ictal = PNES)",
"<b>Todd's paralysis:</b> unilateral weakness after focal seizure -- important localizing sign; duration?",
"Post-ictal sleep duration? Headache, vomiting, disorientation, agitation",
"<b>Aphasia</b> after seizure -- suggests dominant hemisphere focus",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 3: Checklist
section_header("SECTION 3: CHARACTERIZATION CHECKLIST", story)
chk_data = [
["Feature", "Details to Record"],
["Date/time of first seizure", "Age at onset"],
["Total number of episodes", "Frequency, clustering"],
["Duration of each episode", "Any status epilepticus?"],
["Seizure type (ILAE 2017)", "Focal / Generalized / Unknown"],
["Body part involved", "Laterality, Jacksonian march"],
["Consciousness", "Aware / Impaired awareness"],
["Post-ictal state", "Duration, Todd's paralysis, aphasia"],
["Precipitant/trigger", "Fever, sleep deprivation, light, stress"],
["Diurnal variation", "Morning jerks, nocturnal, on awakening"],
["Change in semiology over time", "Evolution of seizures, new type"],
]
make_table(chk_data, [8*cm, 9*cm], story)
sp(story, 0.2)
# Section 4
section_header("SECTION 4: HISTORY OF RECURRENCE", story)
for pt in [
"First seizure or recurrent?",
"If recurrent: <b>total number, frequency (per day/week/month)</b>",
"Change in character over time? (new type = syndrome evolution or drug failure)",
"<b>Cluster seizures</b> (multiple in 24 hours)?",
"Longest seizure-free interval?",
"Any episode of <b>status epilepticus?</b> (>5 min operational / >30 min established)",
"Response to treatment: which medications, doses, compliance, side effects",
]:
bullet(pt, story)
sp(story, 0.2)
story.append(PageBreak())
# Section 5
section_header("SECTION 5: SEIZURE TYPE-SPECIFIC HISTORY", story)
sub_header("5A. Febrile Seizures (Key for Indian Context)", story)
for pt in [
"Age: 6 months to 5 years for typical febrile seizures",
"Temperature at time of seizure (>38 degrees C rectal)",
"<b>Simple febrile seizure:</b> generalized, <15 min, single episode in 24 hours, normal neuro exam",
"<b>Complex febrile seizure:</b> focal, >15 min, recurs within 24 hours, post-ictal deficit",
"Source of fever: URTI, otitis media, roseola, typhoid (India), dengue",
"Family history of febrile seizures (first-degree relative -- autosomal dominant tendency)",
"Previous febrile seizures (recurrence risk: 30-50%)",
"Developmental status -- must be normal for simple FS",
]:
bullet(pt, story)
note("\"Simple febrile seizure in a well-appearing, fully immunized child with normal neurological examination and no meningeal signs requires no further workup (no neuroimaging, EEG, or bloodwork).\" -- Harriet Lane Handbook 23rd Ed., p.739", story)
sp(story, 0.15)
sub_header("5B. Neonatal Seizures (<28 days)", story)
for pt in [
"Perinatal history in detail (see Section 7)",
"Day of life onset: Day 1 = HIE/hypoglycemia; Day 2-3 = ICH/hypocalcemia; Day 3-7 = meningitis/metabolic",
"After day 7 = late hypocalcemia, herpes encephalitis",
"<b>Subtle seizures</b> (most common): lip smacking, cycling, apnea, eye deviation -- easily missed",
"Focal clonic, multifocal clonic, tonic, myoclonic types",
"EEG now gold standard for neonatal seizure confirmation (ILAE 2023 Neonatal Seizure Task Force)",
]:
bullet(pt, story)
sp(story, 0.15)
sub_header("5C. West Syndrome (Infantile Spasms)", story)
for pt in [
"Age of onset: 3-12 months (peak 4-6 months)",
"<b>Spasm description:</b> sudden brief flexion/extension of neck, trunk, limbs",
"<b>Timing: clusters on awakening</b> -- ask specifically",
"EEG: hypsarrhythmia (chaotic high-amplitude slow waves + multifocal spikes)",
"Developmental regression since spasm onset?",
"Underlying etiology: tuberous sclerosis (ash-leaf macules), HIE, Down syndrome, lissencephaly",
]:
bullet(pt, story)
sp(story, 0.15)
sub_header("5D. Childhood Absence Epilepsy (CAE)", story)
for pt in [
"Age 4-12 years; female > male",
"<b>Staring spells:</b> brief, abrupt onset and offset (<30 seconds)",
"Eyelid fluttering, lip smacking, automatisms",
"<b>Very frequent</b> -- dozens per day; first noticed at school (teacher's complaint)",
"Child unaware, no post-ictal phase -- immediate return to activity",
"Precipitated by <b>hyperventilation</b> or photic stimulation",
"Normal development, normal MRI, EEG: 3 Hz spike-wave",
]:
bullet(pt, story)
sp(story, 0.15)
sub_header("5E. Juvenile Myoclonic Epilepsy (JME)", story)
for pt in [
"Age 12-18 years",
"<b>Bilateral myoclonic jerks in the morning</b> -- spilling coffee/milk, dropping objects",
"Often missed for years -- <b>ask specifically:</b> 'Does the child drop things in the morning?'",
"GTC seizures precipitated by sleep deprivation, alcohol, stress, early awakening",
"Lifelong condition; valproate is the drug of choice; compliance is a major issue",
]:
bullet(pt, story)
note("JME history is commonly missed for years. Specifically ask: 'Does the child drop things or have jerks in the morning after waking up?'", story)
sp(story, 0.2)
# Section 6
section_header("SECTION 6: PAST HISTORY", story)
for pt in [
"Any previous seizure episodes (including unrecognized staring spells, nocturnal events, morning jerks)",
"Prior hospitalizations for neurological illness",
"<b>CNS infections:</b> meningitis, encephalitis, Japanese encephalitis, cerebral malaria, neurocysticercosis (India)",
"<b>Head trauma:</b> accidental, non-accidental injury",
"Previous febrile seizures; Cerebrovascular events: stroke, cerebral venous thrombosis",
"Metabolic disorders: hypoglycemia, liver disease",
"Immunization history (DPT, MMR -- address family misconceptions about vaccines causing epilepsy)",
"<b>Prior AED use:</b> which drugs, doses, duration, reason for stopping",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 7
section_header("SECTION 7: BIRTH AND PERINATAL HISTORY (REVEALS ETIOLOGY)", story)
sub_header("Antenatal History", story)
for pt in [
"Maternal health: diabetes, hypertension, TORCH infections (CMV, toxoplasma)",
"Drug exposure during pregnancy: alcohol, antiepileptics (valproate -- teratogenic), recreational drugs",
"Antenatal scans: any fetal abnormality noted?",
"<b>Consanguinity</b> of parents (autosomal recessive metabolic disorders, genetic epilepsies -- important in India)",
"Reduced fetal movements -- suggest in-utero insult",
]:
bullet(pt, story)
sub_header("Natal History", story)
for pt in [
"Mode of delivery: LSCS / NVD / Forceps / Vacuum; Gestational age; Birth weight (LBW/VLBW)",
"<b>Birth asphyxia:</b> APGAR scores (at 1 and 5 minutes), need for resuscitation",
"<b>Hypoxic Ischemic Encephalopathy (HIE):</b> grade (Sarnat staging), therapeutic hypothermia?",
"Birth trauma: forceps marks, cephalohematoma; <b>NICU admission:</b> duration, reason",
]:
bullet(pt, story)
sub_header("Neonatal Period", story)
for pt in [
"<b>Neonatal seizures:</b> any abnormal movements in the first 28 days?",
"Feeding difficulties (suggests neurological compromise)",
"Hypoglycemia, hypocalcemia in neonatal period",
"Jaundice: severity, phototherapy/exchange transfusion needed (kernicterus)?",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 8
section_header("SECTION 8: DEVELOPMENTAL HISTORY", story)
body("Essential for syndrome identification and etiology. Record milestones in all four domains:", story)
dev_data = [
["Domain", "Key Milestones to Record", "Red Flag"],
["Motor", "Head hold 3m, sit 6m, stand 9m, walk 12-15m", "Not walking by 18 months"],
["Language", "Cooing 2m, babble 6m, first words 12m, sentences 24m", "No words by 12m, no 2-word phrases by 24m"],
["Social", "Social smile 6-8 weeks, eye contact, cooperative play", "No social smile, lack of eye contact"],
["Cognitive", "School performance, learning, attention, memory", "Regression, decline in school grades"],
]
make_table(dev_data, [3.5*cm, 8.5*cm, 5*cm], story)
sp(story, 0.1)
for pt in [
"<b>Global developmental delay pre-dating seizures</b> = symptomatic/structural etiology likely",
"<b>Developmental regression after seizure onset</b> = West syndrome, Landau-Kleffner, progressive neurological disease",
"Loss of previously acquired skills -- Rett syndrome, Dravet, LKS",
"<b>Behavioral change</b> since seizure onset? (ADHD, autism as comorbidities)",
]:
bullet(pt, story)
sp(story, 0.2)
story.append(PageBreak())
# Section 9
section_header("SECTION 9: FAMILY HISTORY", story)
for pt in [
"Seizures in parents, siblings, grandparents, cousins; type of seizures in relatives",
"Epilepsy syndrome in family",
"<b>Consanguinity</b> (important in India -- autosomal recessive genetic epilepsies, metabolic disorders)",
"Family history of sudden unexplained death (SUDEP risk in genetic epilepsies)",
"Intellectual disability, autism in family",
"Neurocutaneous disorders: tuberous sclerosis (TSC1/TSC2), neurofibromatosis in family",
]:
bullet(pt, story)
note("\"Many electroclinical syndromes have specific gene mutations. SCN1A (Dravet syndrome) -- avoid lamotrigine. SLC2A1 (GLUT1 deficiency) -- ketogenic diet responsive.\" -- Kaplan and Sadock's Comprehensive Textbook of Psychiatry, p.2072", story)
sp(story, 0.2)
# Section 10
section_header("SECTION 10: IMMUNIZATION HISTORY", story)
for pt in [
"Complete immunization as per <b>Indian NIS schedule</b>",
"DPT/pentavalent-related fever-triggered febrile seizures -- distinguish from vaccine-related epilepsy",
"Families often incorrectly attribute epilepsy to vaccination -- address systematically",
"In known SCN1A/Dravet: live vaccines (MMR) may trigger prolonged febrile seizures; benefit outweighs risk per IAP recommendations",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 11
section_header("SECTION 11: NUTRITIONAL HISTORY", story)
for pt in [
"Exclusively breastfed or formula-fed?",
"<b>Vitamin D and Calcium status</b> -- hypocalcemic seizures in exclusively breastfed infants (low sun exposure, dark skin -- common in India)",
"<b>Late-onset hypocalcemia</b> in bottle-fed infants (high phosphate load)",
"Pyridoxine (B6) deficiency -- rare but treatable neonatal/infantile seizure cause",
"Biotin deficiency (multiple carboxylase deficiency -- biotin-responsive)",
"<b>GLUT1 deficiency:</b> seizures worsened after prolonged fasting -- ask feeding history",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 12
section_header("SECTION 12: SOCIAL HISTORY AND DRUG HISTORY", story)
sub_header("Social History", story)
for pt in [
"School attendance and performance (absences, attention, learning difficulties)",
"Impact of seizures on daily activities -- supervision needs: swimming, bathing, cycling",
"Driving in adolescents (important medicolegal issue)",
"Psychosocial impact on family; economic burden of disease and medications",
]:
bullet(pt, story)
sub_header("Drug History", story)
for pt in [
"Current AEDs: drug name, dose (mg/kg/day), duration, <b>compliance</b>",
"<b>Indian context:</b> generic vs branded medications (bioavailability differences may affect seizure control)",
"Drug interactions; side effects reported by family",
"Other medications: antibiotics (carbapenems lower seizure threshold), antihistamines, theophylline",
"<b>Traditional/herbal medicines</b> (kala ghoda, tribal remedies -- commonly used in India; ask specifically)",
"<b>Non-compliance reasons:</b> cost, side effects, stigma, family beliefs about AEDs",
]:
bullet(pt, story)
sp(story, 0.2)
# Section 13
section_header("SECTION 13: REVIEW OF SYSTEMS", story)
ros_data = [
["System", "Key Questions"],
["CNS", "Headache, vomiting (raised ICP), focal weakness, vision changes, regression"],
["Autonomic", "Pallor, sweating, cyanosis during episodes"],
["Cutaneous", "Ash-leaf macules (TSC), cafe-au-lait spots (NF1), port-wine stain (SWS), adenoma sebaceum"],
["Ophthalmology", "Abnormal eye movements, nystagmus, visual field loss, fundal changes"],
["Cardiac", "Palpitations, syncope (exclude cardiogenic -- exercise-induced LOC, family cardiac hx, ECG)"],
["Renal", "Oliguria, polyuria (electrolyte imbalance)"],
["Endocrine", "Polyuria/polydipsia (DI), growth retardation, puberty"],
["Behaviour", "ADHD, autism, anxiety, depression (common comorbidities)"],
["Sleep", "Snoring, sleep apnea, abnormal movements only during sleep"],
]
make_table(ros_data, [3.5*cm, 13.5*cm], story)
sp(story, 0.2)
story.append(PageBreak())
# Section 14
section_header("SECTION 14: DIFFERENTIAL DIAGNOSIS ON HISTORY ALONE", story)
body("Demonstrating ability to distinguish seizures from mimics on history alone is a key PG examination skill.", story)
dd_data = [
["Condition", "Distinguishing Historical Feature"],
["Breath-holding spells (18m-3y)", "Always triggered by frustration/pain; child cries then holds breath; cyanosis then LOC"],
["Vasovagal syncope", "Postural trigger, hot environment, nausea; slow collapse, rapid recovery; no post-ictal phase"],
["Cardiogenic syncope", "Exercise/emotion trigger, no post-ictal state, family cardiac history, abnormal ECG"],
["PNES (pseudoseizures)", "No post-ictal state; eyes closed during event; prolonged >20 min; forward pelvic thrusting; psychological stressor"],
["Benign neonatal sleep myoclonus", "Occurs ONLY during sleep; disappears immediately on waking; completely normal EEG"],
["Sandifer syndrome", "Back arching after feeds in infants; GERD history; no loss of consciousness"],
["Tics", "Suppressible; no impaired consciousness; preceded by urge sensation; no post-ictal phase"],
["Migraine with aura", "Visual aura builds slowly over minutes (seizure aura: seconds); followed by headache; family history"],
["Paroxysmal vertigo (toddler)", "Episodes of vertigo/vomiting/staggering; no LOC; nystagmus; normal EEG"],
["Narcolepsy-cataplexy", "Cataplexy triggered by strong emotion (laughter); excessive daytime sleepiness; hypnagogic hallucinations"],
]
make_table(dd_data, [5*cm, 12*cm], story)
note("Source: Harriet Lane Handbook 23rd Ed., Table 20.3, p.741; Rosen's Emergency Medicine 9th Ed., Box 14.2", story)
sp(story, 0.2)
# Section 15
section_header("SECTION 15: EPILEPSY SYNDROME IDENTIFICATION (India-Relevant)", story)
body("Attempt to identify an epilepsy syndrome -- provides prognosis and guides AED selection. Roughly <b>50% of children</b> can be assigned a syndrome diagnosis based on history, exam, and EEG. -- Kaplan and Sadock, p.2071", story)
syn_data = [
["Syndrome", "Age", "Key History Points", "AED Choice"],
["West Syndrome", "3-12 months", "Spasms in clusters on awakening; regression; hypsarrhythmia on EEG", "ACTH / Vigabatrin"],
["Dravet Syndrome", "1st year", "Prolonged febrile/afebrile hemiclonic seizures; later myoclonic; regression; SCN1A mutation", "Avoid Na-channel blockers; Valproate/Clobazam"],
["CAE", "4-12 yrs", "Frequent brief staring spells; normal development; provoked by hyperventilation; 3Hz SW on EEG", "Ethosuximide / Valproate"],
["BECTS/Rolandic", "3-13 yrs", "Nocturnal focal facial-arm seizures; speech arrest; normal MRI and development; centrotemporal spikes", "Often no AED needed"],
["JME", "12-18 yrs", "Morning myoclonic jerks; GTC on sleep deprivation; family hx; alcohol trigger; lifelong", "Valproate (lifelong)"],
["Lennox-Gastaut", "1-7 yrs", "Multiple seizure types; drop attacks; cognitive regression; slow spike-wave <2.5 Hz", "Valproate / Clobazam / Lamotrigine"],
["NCC Epilepsy (India)", "Any age", "Single ring-enhancing lesion; pork exposure; village/travel history; calcified lesions on CT", "Albendazole + AED"],
["GEFS+", "Variable", "Multiple febrile + afebrile seizures; strong family history; SCN1B/SCN1A mutation", "Manage individually"],
]
make_table(syn_data, [3.5*cm, 2*cm, 7.5*cm, 4*cm], story)
sp(story, 0.2)
# Section 16
section_header("SECTION 16: ETIOLOGY CLASSIFICATION (ILAE 2017) -- FOR LONG CASE SUMMARY", story)
etio_data = [
["Etiology", "Key Examples in Indian Context"],
["Structural", "HIE, stroke, cortical dysplasia, polymicrogyria, lissencephaly, tumor, NCC, trauma"],
["Genetic", "Dravet (SCN1A), GLUT1 (SLC2A1), TSC (TSC1/TSC2), Angelman syndrome, Rett syndrome"],
["Infectious", "Bacterial meningitis, viral encephalitis, TB meningitis, NCC, cerebral malaria, Japanese encephalitis"],
["Metabolic", "Hypoglycemia, hypocalcemia, hyponatremia, pyridoxine dependency, organic acidemias, urea cycle defects"],
["Immune", "NMDAR encephalitis, VGKC-complex antibodies -- consider in new onset refractory seizures with behavioral change"],
["Unknown", "No identifiable cause after complete evaluation -- most common category overall"],
]
make_table(etio_data, [3.5*cm, 13.5*cm], story)
sp(story, 0.2)
# Section 17: Summary Statement
section_header("SECTION 17: FINAL SUMMARY STATEMENT FOR LONG CASE", story)
body("After completing history, present a structured summary statement:", story)
sp(story, 0.1)
summ_box = Table([[Paragraph(
"<i><b>[Name]</b>, a <b>[age]</b>-year-old [male/female] child, born of [consanguineous/non-consanguineous] parents, "
"with [normal/abnormal] antenatal, natal and developmental history, presented with [X] episodes of "
"<b>[seizure type description]</b> over [duration], classified as [focal aware / focal impaired awareness / "
"generalized tonic-clonic / absence / myoclonic / epileptic spasms], with onset at [age], lasting [duration], "
"associated with [fever/no fever/precipitant], [with/without] post-ictal deficit, suggestive of "
"[febrile seizures / epilepsy syndrome / symptomatic seizures], likely etiology being "
"[structural / genetic / metabolic / infectious / unknown], currently on [AED] at [dose mg/kg/day] "
"with [good/poor] compliance and [controlled/uncontrolled] seizures.</i>",
ParagraphStyle('SummBox', parent=styles['Normal'], fontSize=9, leading=14, fontName='Helvetica',
textColor=DARK_BLUE))]], colWidths=[17*cm])
summ_box.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
('GRID', (0,0), (-1,-1), 1, MED_BLUE),
('TOPPADDING', (0,0), (-1,-1), 8),
('BOTTOMPADDING', (0,0), (-1,-1), 8),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 10),
]))
story.append(summ_box)
sp(story, 0.2)
# Mnemonic
section_header("QUICK MEMORY AID -- Mnemonic: 'FIVE PHASES'", story)
mnem_data = [
["F", "First episode details", "Date, age of onset, precipitant, duration"],
["I", "Ictal semiology", "Pre-ictal / ictal / post-ictal phases in detail"],
["V", "Vital details", "Duration, frequency, type classification (ILAE 2017)"],
["E", "Etiology clues", "Birth history, developmental history, family history"],
["P", "Past history", "CNS infections, prior AEDs, trauma, metabolic illness"],
["H", "History of development", "Milestones in all domains; regression?"],
["A", "Antenatal and perinatal", "Consanguinity, HIE, NICU, neonatal seizures"],
["S", "Social, school, drug history", "Compliance, traditional medicines, cost, stigma"],
["E", "Epilepsy syndrome", "Identify syndrome -- West / Dravet / CAE / JME / LGS"],
["S", "Summary statement", "Working diagnosis, etiology, treatment plan"],
]
mnem_table = Table(mnem_data, colWidths=[1*cm, 4.5*cm, 11.5*cm])
mnem_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,-1), LIGHT_BLUE),
('FONTNAME', (0,0), (0,-1), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 9),
('TEXTCOLOR', (0,0), (0,-1), DARK_BLUE),
('FONTNAME', (0,0), (1,-1), 'Helvetica-Bold'),
('TEXTCOLOR', (0,0), (1,-1), DARK_BLUE),
('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.white, BG_GRAY]),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor('#cbd5e1')),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 5),
('ALIGN', (0,0), (0,-1), 'CENTER'),
]))
story.append(mnem_table)
sp(story, 0.2)
# Indian context note
section_header("SPECIAL NOTE: INDIAN CLINICAL CONTEXT", story)
note("In the Indian context, always ask specifically about: (1) Neurocysticercosis -- pork exposure, travel to endemic areas, calcified lesions on CT; (2) Tuberculous meningitis -- contact history, BCG scar, prolonged fever; (3) Pyogenic meningitis -- preceding URTI, bulging fontanelle, neck stiffness; (4) Febrile illness-associated seizures (typhoid, dengue, malaria); (5) Consanguinity (autosomal recessive genetic epilepsies); (6) Traditional remedies -- kala ghoda, herbal antiepileptics; (7) Cost-related non-compliance (generic vs branded AEDs). These are all common PG viva and long case examination points in India.", story)
sp(story, 0.2)
# References
section_header("KEY REFERENCES", story)
refs = [
"1. IAP Expert Committee on Pediatric Epilepsy. Guidelines for Diagnosis and Management of Childhood Epilepsy. Indian Pediatrics 2009; 46: 681-698.",
"2. Verma A, Kunju PAM. IAP Textbook of Pediatric Neurology. Jaypee Brothers, 2019. Chapters 18, 19, 24, 25, 26.",
"3. The Johns Hopkins Hospital. Harriet Lane Handbook, 23rd Edition. Chapter 20, pp. 738-742.",
"4. Marx JA et al. Rosen's Emergency Medicine: Concepts and Clinical Practice, 9th Ed. Chapter 14: Seizures, pp. 175-176.",
"5. Kaplan HI, Sadock BJ. Kaplan and Sadock's Comprehensive Textbook of Psychiatry. Seizures and Epilepsy Syndromes in Children, pp. 2071-2072.",
"6. Fisher RS et al. Operational Classification of Seizure Types by the ILAE. Epilepsia 2017; 58(4): 522-530.",
"7. Beniczky S et al. Updated Classification of Epileptic Seizures: ILAE Position Paper 2025. (ilae.org)",
"8. Fisher RS et al. A Practical Clinical Definition of Epilepsy. Epilepsia 2014; 55(4): 475-482.",
"9. IAP Chapter. Evaluation and Management of Status Epilepticus in Children. iapindia.org.",
"10. Brunton LL et al. Goodman and Gilman's The Pharmacological Basis of Therapeutics, 13th Ed. Seizures in Infants and Young Children.",
"11. Pressler RM et al. Treatment of Seizures in the Neonate -- ILAE Task Force on Neonatal Seizures. Epilepsia 2023 Oct. [PMID: 37655702]",
]
for r in refs:
story.append(Paragraph(r, ref_style))
sp(story, 0.15)
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#94a3b8')))
sp(story, 0.1)
story.append(Paragraph(
"Generated by Orris Medical AI | For educational and PG training purposes only | July 2026",
ParagraphStyle('Footer', parent=styles['Normal'], fontSize=7.5,
textColor=colors.HexColor('#94a3b8'), alignment=TA_CENTER)))
doc.build(story)
print("PDF created successfully:", output_path)
python3 /tmp/workspace/paediatric-seizures/generate_pdf.py
ls -lh /tmp/workspace/paediatric-seizures/Paediatric_Seizures_History_Taking.pdf
Paediatric Seizures History Taking
PDF Document · PDF