Compile whole psychiatry in a glimpse pdf format neet pg with mnemonics flowchart imp. One liners images etc in pdf format
mkdir -p /tmp/workspace/psychiatry-neet-pdf && ls /tmp/workspace/psychiatry-neet-pdf/
~/psychiatry-neet-pdf/generate_pdf.py
#!/usr/bin/env python3
"""
NEET PG Psychiatry - At a Glance PDF Generator
Comprehensive revision material with mnemonics, flowcharts, tables, one-liners
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.platypus.flowables import Flowable
from reportlab.lib.colors import HexColor
import os
OUTPUT_PATH = "/tmp/workspace/psychiatry-neet-pdf/Psychiatry_NEET_PG_AtAGlance.pdf"
# ─── COLOR PALETTE ──────────────────────────────────────────────────────────
C_NAVY = HexColor("#1A237E")
C_TEAL = HexColor("#00695C")
C_PURPLE = HexColor("#6A1B9A")
C_ORANGE = HexColor("#E65100")
C_RED = HexColor("#B71C1C")
C_PINK = HexColor("#AD1457")
C_LBLUE = HexColor("#E3F2FD")
C_LGREEN = HexColor("#E8F5E9")
C_LYELLOW = HexColor("#FFFDE7")
C_LORANGE = HexColor("#FFF3E0")
C_LPURPLE = HexColor("#F3E5F5")
C_LRED = HexColor("#FFEBEE")
C_LTEAL = HexColor("#E0F2F1")
C_LGREY = HexColor("#F5F5F5")
C_DGREY = HexColor("#424242")
C_MGREY = HexColor("#757575")
C_GOLD = HexColor("#F9A825")
C_WHITE = colors.white
C_BLACK = colors.black
# ─── STYLES ─────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def make_style(name, parent='Normal', **kwargs):
return ParagraphStyle(name=name, parent=styles[parent], **kwargs)
H1 = make_style('H1', 'Normal',
fontSize=22, fontName='Helvetica-Bold', textColor=C_WHITE,
alignment=TA_CENTER, spaceAfter=4, spaceBefore=4, leading=26)
H2 = make_style('H2', 'Normal',
fontSize=14, fontName='Helvetica-Bold', textColor=C_WHITE,
alignment=TA_LEFT, spaceAfter=2, spaceBefore=2, leading=18)
H3 = make_style('H3', 'Normal',
fontSize=12, fontName='Helvetica-Bold', textColor=C_NAVY,
alignment=TA_LEFT, spaceAfter=3, spaceBefore=6, leading=15)
H4 = make_style('H4', 'Normal',
fontSize=10, fontName='Helvetica-Bold', textColor=C_PURPLE,
alignment=TA_LEFT, spaceAfter=2, spaceBefore=4, leading=13)
BODY = make_style('BODY', 'Normal',
fontSize=8.5, fontName='Helvetica', textColor=C_DGREY,
spaceAfter=3, spaceBefore=0, leading=12)
BODY_SM = make_style('BODY_SM', 'Normal',
fontSize=7.5, fontName='Helvetica', textColor=C_DGREY,
spaceAfter=2, spaceBefore=0, leading=10)
MNEMONIC = make_style('MNEMONIC', 'Normal',
fontSize=9, fontName='Helvetica-Bold', textColor=C_ORANGE,
spaceAfter=2, spaceBefore=2, leading=12)
BULLET = make_style('BULLET', 'Normal',
fontSize=8.5, fontName='Helvetica', textColor=C_DGREY,
spaceAfter=2, spaceBefore=0, leading=11, leftIndent=10,
bulletIndent=2)
ONE_LINER = make_style('ONE_LINER', 'Normal',
fontSize=8, fontName='Helvetica-BoldOblique', textColor=C_TEAL,
spaceAfter=2, spaceBefore=1, leading=11, leftIndent=8)
CAPTION = make_style('CAPTION', 'Normal',
fontSize=7.5, fontName='Helvetica', textColor=C_MGREY,
alignment=TA_CENTER, spaceAfter=2, spaceBefore=0, leading=10)
# ─── HELPER FLOWABLES ───────────────────────────────────────────────────────
def section_header(title, color=C_NAVY, width=None):
"""Colored section header bar"""
data = [[Paragraph(title, H2)]]
t = Table(data, colWidths=[170*mm if width is None else width])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), color),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
('ROUNDEDCORNERS', [4,4,4,4]),
]))
return t
def mnemonic_box(title, content, bg=C_LYELLOW, border=C_GOLD):
"""Highlighted mnemonic box"""
inner = [[
Paragraph(f"🔑 {title}", make_style('mn_title','Normal',
fontSize=8.5, fontName='Helvetica-Bold', textColor=C_ORANGE, leading=11)),
Paragraph(content, make_style('mn_body','Normal',
fontSize=8.5, fontName='Helvetica', textColor=C_DGREY, leading=11))
]]
t = Table(inner, colWidths=[40*mm, 125*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('BOX', (0,0), (-1,-1), 1, border),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
def key_box(text, bg=C_LRED):
"""Red key-point box"""
data = [[Paragraph(f"⚡ {text}", make_style('kp','Normal',
fontSize=8.5, fontName='Helvetica-Bold', textColor=C_RED, leading=11))]]
t = Table(data, colWidths=[170*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('BOX', (0,0), (-1,-1), 1.2, C_RED),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 8),
]))
return t
def two_col_table(headers, rows, col_widths=None, bg_header=C_NAVY):
"""Generic two-column comparison table"""
if col_widths is None:
col_widths = [85*mm, 85*mm]
h_style = make_style('th','Normal',
fontSize=8, fontName='Helvetica-Bold', textColor=C_WHITE, leading=10)
d_style = make_style('td','Normal',
fontSize=7.5, fontName='Helvetica', textColor=C_DGREY, leading=10)
table_data = [[Paragraph(h, h_style) for h in headers]]
for row in rows:
table_data.append([Paragraph(str(c), d_style) for c in row])
t = Table(table_data, colWidths=col_widths)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), bg_header),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_WHITE, C_LGREY]),
('GRID', (0,0), (-1,-1), 0.4, colors.grey),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
def multi_col_table(headers, rows, col_widths, bg_header=C_NAVY):
h_style = make_style('th2','Normal',
fontSize=8, fontName='Helvetica-Bold', textColor=C_WHITE, leading=10)
d_style = make_style('td2','Normal',
fontSize=7.5, fontName='Helvetica', textColor=C_DGREY, leading=10)
table_data = [[Paragraph(h, h_style) for h in headers]]
for row in rows:
table_data.append([Paragraph(str(c), d_style) for c in row])
t = Table(table_data, colWidths=col_widths)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), bg_header),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_WHITE, C_LGREY]),
('GRID', (0,0), (-1,-1), 0.4, colors.grey),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 4),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
def flowchart_box(steps, title, color=C_TEAL, width=170*mm):
"""Simple vertical flowchart"""
step_style = make_style('fc_step','Normal',
fontSize=8, fontName='Helvetica-Bold', textColor=C_WHITE,
alignment=TA_CENTER, leading=10)
arrow_style = make_style('fc_arr','Normal',
fontSize=12, fontName='Helvetica', textColor=color,
alignment=TA_CENTER, leading=12)
rows = []
for i, step in enumerate(steps):
bg = color if i % 2 == 0 else C_TEAL if color == C_PURPLE else C_PURPLE
rows.append([Table([[Paragraph(step, step_style)]],
colWidths=[width - 20*mm],
style=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),
('ROUNDEDCORNERS',[3,3,3,3]),
]))])
if i < len(steps) - 1:
rows.append([Paragraph("▼", arrow_style)])
t = Table(rows, colWidths=[width])
t.setStyle(TableStyle([
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('TOPPADDING',(0,0),(-1,-1),1),
('BOTTOMPADDING',(0,0),(-1,-1),1),
]))
return t
def info_grid(items, cols=2, bg=C_LBLUE):
"""Grid of colored info boxes"""
style_item = make_style('ig','Normal',
fontSize=8, fontName='Helvetica', textColor=C_DGREY, leading=10)
rows_data = []
row = []
for i, item in enumerate(items):
row.append(Paragraph(item, style_item))
if len(row) == cols:
rows_data.append(row)
row = []
if row:
while len(row) < cols:
row.append(Paragraph("", style_item))
rows_data.append(row)
cw = [170*mm/cols] * cols
t = Table(rows_data, colWidths=cw)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('GRID', (0,0), (-1,-1), 0.5, colors.lightgrey),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 5),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
sp = lambda h=4: Spacer(1, h)
hr = lambda: HRFlowable(width="100%", thickness=0.5, color=colors.lightgrey)
# ─── COVER PAGE ─────────────────────────────────────────────────────────────
def cover_page(story):
story.append(Spacer(1, 60))
cover_data = [[Paragraph("PSYCHIATRY", make_style('cov_main','Normal',
fontSize=40, fontName='Helvetica-Bold', textColor=C_WHITE,
alignment=TA_CENTER, leading=46))],
[Paragraph("AT A GLANCE", make_style('cov_sub','Normal',
fontSize=20, fontName='Helvetica', textColor=HexColor("#B2EBF2"),
alignment=TA_CENTER, leading=24))],
[Paragraph("NEET PG | USMLE | MD ENTRANCE", make_style('cov_tag','Normal',
fontSize=12, fontName='Helvetica-BoldOblique', textColor=HexColor("#FFE082"),
alignment=TA_CENTER, leading=16))]]
t = Table(cover_data, colWidths=[170*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), C_NAVY),
('TOPPADDING', (0,0), (-1,-1), 14),
('BOTTOMPADDING', (0,0), (-1,-1), 14),
('ROUNDEDCORNERS', [8,8,8,8]),
]))
story.append(t)
story.append(sp(16))
highlights = [
["📋 DSM-5 Criteria", "💊 Pharmacology", "🧠 Mnemonics", "📊 Comparison Tables"],
["🔄 Flowcharts", "⚡ High-Yield One-Liners", "🎯 NEET Favorites", "📌 Side-Effect Profiles"],
]
for row in highlights:
hd = [[Paragraph(h, make_style('hl','Normal',
fontSize=9, fontName='Helvetica-Bold', textColor=C_NAVY,
alignment=TA_CENTER, leading=12)) for h in row]]
ht = Table(hd, colWidths=[42.5*mm]*4)
ht.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), C_LBLUE),
('GRID', (0,0), (-1,-1), 0.5, C_NAVY),
('TOPPADDING', (0,0), (-1,-1), 7),
('BOTTOMPADDING', (0,0), (-1,-1), 7),
('ROUNDEDCORNERS', [3,3,3,3]),
]))
story.append(ht)
story.append(sp(6))
story.append(sp(10))
story.append(Paragraph("Compiled from Kaplan & Sadock's Synopsis of Psychiatry • DSM-5 • Stahl's Psychopharmacology",
make_style('src','Normal', fontSize=8, textColor=C_MGREY, alignment=TA_CENTER)))
story.append(PageBreak())
# ─── TOPIC: NEUROTRANSMITTERS ───────────────────────────────────────────────
def neuro_section(story):
story.append(KeepTogether([
section_header("1. NEUROTRANSMITTERS & RECEPTORS — Quick Reference", C_NAVY),
sp(6),
multi_col_table(
["NT", "Key Pathway", "↑ Effect", "↓ Effect", "Clinical Relevance"],
[
["Dopamine (DA)", "Mesolimbic, Mesocortical, Nigrostriatal, Tuberoinfundibular",
"Psychosis, pleasure, reward", "Anhedonia, Parkinsonism", "D2 excess → schizophrenia +ve sx"],
["Serotonin (5-HT)", "Raphe nuclei → cortex/limbic", "Anxiety, OCD features", "Depression, aggression, impulsivity", "5-HT2A block → atypical antipsychotic"],
["Norepinephrine (NE)", "Locus coeruleus → cortex", "Anxiety, alertness, BP↑", "Depression, hypotension", "SNRI/TCA mechanism"],
["GABA", "Widespread inhibitory", "Sedation, anxiolysis", "Anxiety, seizures", "BZD, phenobarbital target"],
["Glutamate", "Corticostriatal", "Excitotoxicity, learning", "Negative sx (NMDA block)", "NMDA hypo → schizophrenia?"],
["Acetylcholine (ACh)", "Basal forebrain → cortex", "Cognition, memory", "Alzheimer's, anticholinergic", "AChEI for dementia"],
["Histamine (H1)", "Hypothalamus", "Alertness", "Sedation, weight gain", "H1 block = antihistamine SE"],
],
[18*mm, 45*mm, 35*mm, 35*mm, 37*mm],
bg_header=C_NAVY
),
]))
story.append(sp(8))
story.append(mnemonic_box(
"DA Pathways",
"MATIN: Mesolimbic (reward/pleasure), meso-cAxis (cognition/affect), Tuberoinfundibular (prolactin), "
"Incertohypothalamic, Nigrostriatal (motor). "
"Block D2 in mesolimbic → antipsychotic effect. Block D2 in nigrostriatal → EPS. Block D2 in tuberoinfundibular → hyperprolactinemia."
))
story.append(sp(4))
story.append(key_box("Dopamine hypothesis of schizophrenia: Hyperactive D2 in mesolimbic (positive sx) + Hypo DA in mesocortical (negative/cognitive sx)"))
story.append(PageBreak())
# ─── TOPIC: SCHIZOPHRENIA ───────────────────────────────────────────────────
def schizophrenia_section(story):
story.append(section_header("2. SCHIZOPHRENIA SPECTRUM DISORDERS", C_NAVY))
story.append(sp(6))
story.append(Paragraph("DSM-5 Criteria (NEET Favorite)", H3))
story.append(mnemonic_box(
"5 Symptoms - DHNBB",
"<b>D</b>elusions | <b>H</b>allucinations | <b>N</b>egative symptoms | <b>B</b>izarre behaviour | "
"<b>B</b>arrely audible (disorganised speech) — Need ≥2, ≥1 from first 3 (D/H/disorganized speech). "
"Duration: 6 months total (≥1 month active phase). Functional decline required."
))
story.append(sp(4))
story.append(two_col_table(
["Positive Symptoms", "Negative Symptoms"],
[
["Hallucinations (auditory most common)", "Alogia (poverty of speech)"],
["Delusions (persecutory most common)", "Avolition (lack of motivation)"],
["Disorganized speech/thought", "Anhedonia"],
["Disorganized/catatonic behaviour", "Affective flattening"],
["Formal thought disorder", "Asociality"],
],
[85*mm, 85*mm]
))
story.append(sp(6))
story.append(Paragraph("Schizophrenia Spectrum - Quick Comparison", H3))
story.append(multi_col_table(
["Disorder", "Duration", "Mood episode?", "Key Feature"],
[
["Schizophrenia", "≥6 months", "Absent/brief", "Full criteria ≥1 month"],
["Schizophreniform", "1-6 months", "Absent", "Same criteria, shorter"],
["Brief Psychotic Disorder", "<1 month", "Absent", "Sudden onset, good prognosis"],
["Schizoaffective", "≥6 months", "Present (>half time)", "Psychosis + mood; 2-week psychosis alone"],
["Delusional Disorder", "≥1 month", "Absent/brief", "Non-bizarre delusions, functioning intact"],
["Shared Psychotic Disorder", "Variable", "Absent", "Folie à deux - induced by dominant person"],
],
[40*mm, 28*mm, 28*mm, 74*mm]
))
story.append(sp(6))
story.append(Paragraph("Schneider's First Rank Symptoms (FRS)", H3))
story.append(mnemonic_box(
"FRS Mnemonic - ABCDE",
"<b>A</b>uditory hallucinations (3rd person, running commentary) | "
"<b>B</b>roadcasting of thought | <b>C</b>ontrolled feelings (made acts/impulses) | "
"<b>D</b>elusional perception | <b>E</b>cho de la pensee (thought echo) + thought insertion/withdrawal. "
"FRS not pathognomonic but highly specific for schizophrenia."
))
story.append(sp(4))
story.append(Paragraph("Good vs Poor Prognostic Factors", H3))
story.append(two_col_table(
["Good Prognosis", "Poor Prognosis"],
[
["Late onset", "Early onset (esp. childhood)"],
["Female sex", "Male sex"],
["Acute/precipitating factors", "Insidious onset"],
["Good premorbid functioning", "Poor premorbid functioning"],
["Positive symptoms predominant", "Negative symptoms predominant"],
["Married/social support", "Single/isolated"],
["Family history of mood disorder", "Family history of schizophrenia"],
["No structural brain changes", "Ventricular enlargement on CT/MRI"],
]
))
story.append(sp(4))
story.append(key_box("Most common hallucination in schizophrenia: AUDITORY (third-person, running commentary). Visual hallucinations → think ORGANIC cause"))
story.append(PageBreak())
# ─── TOPIC: MOOD DISORDERS ──────────────────────────────────────────────────
def mood_section(story):
story.append(section_header("3. MOOD DISORDERS", C_PURPLE))
story.append(sp(6))
story.append(Paragraph("Major Depressive Episode (MDE) - DSM-5", H3))
story.append(mnemonic_box(
"SIGECAPS (+D)",
"<b>S</b>leep disturbance | <b>I</b>nterest loss (anhedonia) | <b>G</b>uilt/worthlessness | "
"<b>E</b>nergy loss | <b>C</b>oncentration impaired | <b>A</b>ppetite change | "
"<b>P</b>sychomotor agitation/retardation | <b>S</b>uicidality + <b>D</b>epressed mood. "
"Need ≥5 symptoms, ≥1 = depressed mood OR anhedonia. Duration ≥2 weeks."
))
story.append(sp(4))
story.append(Paragraph("Manic Episode - DSM-5", H3))
story.append(mnemonic_box(
"DIG FAST",
"<b>D</b>istractibility | <b>I</b>rritability/Impulsivity | <b>G</b>randiosity | "
"<b>F</b>light of ideas | <b>A</b>ctivity increase | <b>S</b>leep decreased | "
"<b>T</b>alkativeness (pressured speech). Duration ≥7 days (or any duration if hospitalized). "
"Hypomanic: ≥4 days, no hospitalization/psychosis."
))
story.append(sp(4))
story.append(multi_col_table(
["Disorder", "Duration", "Polarity", "Key Features"],
[
["MDD", "≥2 wks", "Depressed only", "≥5 SIGECAPS sx; no manic/hypomanic hx"],
["Bipolar I", "Mania ≥7 days", "Mania + depression", "Full manic episode required (1 lifetime)"],
["Bipolar II", "Hypomania ≥4 days", "Hypomania + depression", "No full mania; hypomania = BPII"],
["Cyclothymia", "≥2 years", "Mild highs + lows", "Never full MDE or manic episode; subsyndromal"],
["Dysthymia (PDD)", "≥2 years", "Depressed only", "Chronic low mood; 'double depression' = MDE+DD"],
["Seasonal (SAD)", "Seasonal pattern", "Winter depression", "Responds to light therapy; recurrent"],
],
[35*mm, 30*mm, 35*mm, 70*mm]
))
story.append(sp(6))
story.append(two_col_table(
["Specifiers in Mood Disorders", "Clinical Tip"],
[
["With melancholic features", "Anhedonia + morning worsening + early waking + psychomotor changes → TCA/ECT"],
["With atypical features", "Mood reactivity + hypersomnia + hyperphagia + leaden paralysis + interpersonal rejection sensitivity → MAOI"],
["With psychotic features", "Mood-congruent vs incongruent psychosis; severity marker; need antipsychotic"],
["With catatonic features", "Motor immobility, excessive motor activity, extreme negativism → Benzodiazepine/ECT"],
["With peripartum onset", "Within 4 weeks postpartum (DSM) or 6 weeks (ICD); PPD vs baby blues vs postpartum psychosis"],
]
))
story.append(sp(4))
story.append(key_box("Baby blues (day 1-3) vs PPD (>2 weeks) vs Postpartum Psychosis (24-72 hrs, emergency, infanticide risk)"))
story.append(PageBreak())
# ─── TOPIC: ANXIETY DISORDERS ───────────────────────────────────────────────
def anxiety_section(story):
story.append(section_header("4. ANXIETY & RELATED DISORDERS", C_TEAL))
story.append(sp(6))
story.append(multi_col_table(
["Disorder", "Core Feature", "Duration", "Treatment of Choice"],
[
["GAD", "Excessive worry ≥3 areas, hard to control", "≥6 months", "SSRI/SNRI + Buspirone (no dependence); CBT"],
["Panic Disorder", "Recurrent unexpected panic attacks + anticipatory anxiety", "Attacks peak <10 min", "SSRI (1st), TCA (2nd), BZD (acute); avoid caffeine"],
["Social Anxiety Disorder", "Fear of social scrutiny, embarrassment", "≥6 months", "SSRI/SNRI; Propranolol (performance); CBT"],
["Specific Phobia", "Marked fear of specific object/situation", "≥6 months", "Systematic desensitization / Exposure therapy"],
["Agoraphobia", "Fear of open/crowded places, escape impossible", "≥6 months", "SSRI + CBT; may accompany panic"],
["Separation Anxiety", "Fear of separation from attachment figure", "≥4 wks (child) / ≥6 months (adult)", "CBT; SSRI if severe"],
],
[30*mm, 50*mm, 28*mm, 62*mm]
))
story.append(sp(4))
story.append(Paragraph("Panic Attack Symptoms (≥4 required)", H3))
story.append(mnemonic_box(
"STUDENTS FEAR 3 Cs",
"<b>S</b>weating | <b>T</b>rembling | <b>U</b>nsteadiness/dizzy | <b>D</b>erealization | "
"<b>E</b>xtreme heart pounding (palpitations) | <b>N</b>ausea | <b>T</b>ingling (paresthesia) | "
"<b>S</b>hortness of breath | <b>F</b>ear of dying | <b>E</b>xtreme sweating | "
"<b>A</b>ngina-like chest pain | <b>R</b>estlessness (choking) + <b>C</b>hills/<b>C</b>old flushes/<b>C</b>raw-skin"
))
story.append(sp(6))
story.append(section_header("5. OBSESSIVE-COMPULSIVE & RELATED DISORDERS", C_TEAL))
story.append(sp(6))
story.append(multi_col_table(
["Disorder", "Obsession/Focus", "Compulsion", "Treatment"],
[
["OCD", "Ego-dystonic thoughts (contamination, symmetry, harm)", "Washing, checking, counting", "SSRI (high dose) + ERP; Clomipramine"],
["Body Dysmorphic Disorder", "Imagined/slight defect in appearance", "Mirror checking, camouflaging", "SSRI + CBT"],
["Trichotillomania", "Urge to pull hair", "Hair pulling → alopecia", "CBT (HRT); N-acetylcysteine; clomipramine"],
["Excoriation (Skin Picking)", "Urge to pick skin", "Repetitive skin picking → lesions", "CBT; SSRI"],
["Hoarding Disorder", "Difficulty discarding possessions", "Accumulation; distress if discarded", "CBT; SSRI"],
],
[35*mm, 45*mm, 40*mm, 50*mm]
))
story.append(sp(4))
story.append(key_box("OCD: Ego-DYSTONIC (patient distressed by thoughts). Obsessive Personality: Ego-SYNTONIC (patient considers it normal)"))
story.append(PageBreak())
# ─── TOPIC: TRAUMA & STRESSOR-RELATED ──────────────────────────────────────
def trauma_section(story):
story.append(section_header("6. TRAUMA & STRESSOR-RELATED DISORDERS", C_RED))
story.append(sp(6))
story.append(multi_col_table(
["Disorder", "Onset After Trauma", "Duration", "Key Features"],
[
["Acute Stress Disorder", "Within 4 weeks", "3 days - 1 month", "Dissociation, intrusion, avoidance, hyperarousal; 9 of 14 sx from 5 clusters"],
["PTSD", ">1 month", "≥1 month", "4 clusters: Intrusion, Avoidance, Cognition/mood changes, Arousal/reactivity"],
["Adjustment Disorder", "Within 3 months of stressor", "≤6 months after stressor ends", "Emotional/behavioral sx disproportionate; no full MDE/PTSD sx"],
["Reactive Attachment Disorder", "Before age 5", "Persistent", "Inhibited: withdrawal, minimal social/emotional response (neglect/abuse)"],
["Disinhibited SAD", "Before age 5", "Persistent", "Disinhibited: indiscriminate approach to strangers; culturally inappropriate"],
],
[38*mm, 32*mm, 30*mm, 70*mm]
))
story.append(sp(4))
story.append(Paragraph("PTSD - 4 Criterion Clusters (DSM-5)", H3))
story.append(flowchart_box(
[
"Criterion A: Exposure to actual/threatened death, sexual violence, serious injury",
"Criterion B: INTRUSION - Flashbacks, nightmares, intrusive memories, dissociative reactions",
"Criterion C: AVOIDANCE - Avoid trauma-related thoughts, feelings, external reminders",
"Criterion D: Negative COGNITION/MOOD - Amnesia, negative beliefs, distorted blame, persistent negative emotion, anhedonia",
"Criterion E: AROUSAL/REACTIVITY - Irritability, reckless behavior, hypervigilance, exaggerated startle, sleep disturbance, concentration problems",
"Duration >1 month + Significant distress/impairment → PTSD diagnosis"
],
"PTSD Criteria Flowchart",
color=C_RED
))
story.append(sp(4))
story.append(key_box("PTSD Treatment: 1st Line = Trauma-focused CBT (TF-CBT) + SSRI (Sertraline, Paroxetine FDA approved). EMDR also evidence-based"))
story.append(PageBreak())
# ─── TOPIC: PERSONALITY DISORDERS ──────────────────────────────────────────
def personality_section(story):
story.append(section_header("7. PERSONALITY DISORDERS", C_PINK))
story.append(sp(6))
story.append(multi_col_table(
["Cluster", "Disorder", "Core Feature", "Mnemonic / Association"],
[
["A - Odd/Eccentric", "Paranoid", "Distrust, suspiciousness, bears grudges", "Like schizophrenia but NO psychosis"],
["A - Odd/Eccentric", "Schizoid", "Detachment, restricted affect, loner, no desire for relationships", "Loner: no friends, no interest in sex, flat affect"],
["A - Odd/Eccentric", "Schizotypal", "Magical thinking, ideas of reference, odd perceptions, eccentric", "Mini-schizophrenia; highest genetic link to schizophrenia"],
["B - Dramatic", "Antisocial (ASPD)", "Disregard for others, violates rights, deceitful, impulsive, ≥18 yo (conduct disorder before 15)", "Con artists, criminals; callous/remorseless"],
["B - Dramatic", "Borderline (BPD)", "Unstable relationships, identity, affect; impulsivity; self-harm; fear of abandonment", "DBT (Dialectical Behaviour Therapy) = Treatment of choice"],
["B - Dramatic", "Histrionic", "Excessive emotionality, attention-seeking, seductive, dramatic", "PRAISE mnemonic: Provocative/seductive, Relationships superficial..."],
["B - Dramatic", "Narcissistic", "Grandiosity, need for admiration, lack empathy, entitlement", "Fragile self-esteem underneath"],
["C - Anxious", "Avoidant", "Social inhibition, inadequacy, hypersensitive to criticism, wants relationships (unlike schizoid)", "Wants friends but too scared of rejection"],
["C - Anxious", "Dependent", "Submissive, clinging, fear of abandonment, difficulty with decisions", "Reassurance-seeking; lets others make decisions"],
["C - Anxious", "OCPD", "Perfectionism, rigidity, orderliness, control (ego-syntonic)", "Unlike OCD: ego-syntonic, no true obsessions/compulsions"],
],
[22*mm, 24*mm, 60*mm, 64*mm]
))
story.append(sp(4))
story.append(mnemonic_box(
"Cluster A-B-C",
"Cluster A = <b>W</b>eird (schizophrenia spectrum) | Cluster B = <b>W</b>ild (dramatic, impulsive) | "
"Cluster C = <b>W</b>orried (anxious, fearful). "
"'<b>MAD, BAD, SAD</b>' = Cluster A (mad), B (bad), C (sad)"
))
story.append(sp(4))
story.append(key_box("BPD: Self-mutilation (wrist cutting) ≠ suicidal intent usually; 'splitting' (all good or all bad); identity diffusion. TOC = DBT"))
story.append(PageBreak())
# ─── TOPIC: ANTIPSYCHOTICS ──────────────────────────────────────────────────
def antipsychotic_section(story):
story.append(section_header("8. ANTIPSYCHOTIC DRUGS", C_NAVY))
story.append(sp(6))
story.append(Paragraph("Typical (1st Generation) vs Atypical (2nd Generation)", H3))
story.append(multi_col_table(
["Drug", "Type", "Unique Feature / Side Effect", "NEET High-Yield Point"],
[
["Haloperidol", "Typical (High potency)", "High EPS, low sedation/anticholinergic", "DOC acute psychosis (IM), D2 blocker, QTc prolongation"],
["Chlorpromazine", "Typical (Low potency)", "High sedation, anticholinergic, low EPS", "First antipsychotic; corneal/lens deposits; photosensitivity"],
["Fluphenazine", "Typical (High potency)", "Depot (long-acting injection)", "DOC non-compliant schizophrenia"],
["Clozapine", "Atypical", "Agranulocytosis (monitor WBC!); lowest EPS; weight gain++", "DOC treatment-resistant schizophrenia; unique 5-HT2A + D4 block; CLUE: clozaril = WBC monitoring mandatory"],
["Olanzapine", "Atypical", "Maximum metabolic SE (weight, DM, lipids)", "Highest weight gain of all antipsychotics; sedation++"],
["Risperidone", "Atypical", "High EPS (dose-dependent); highest prolactin elevation", "Atypical with highest EPS; DOC childhood psychosis; also used in autism"],
["Quetiapine", "Atypical", "Sedation, low EPS, low prolactin", "Used in Parkinson's psychosis + schizophrenia + bipolar"],
["Aripiprazole", "Atypical (Partial D2 agonist)", "Minimal weight gain, no prolactin elevation, low metabolic SE", "Partial D2 agonist/antagonist = stabilizer; activating effect; akathisia"],
["Ziprasidone", "Atypical", "QTc prolongation; must give with food", "Lowest metabolic SE; avoid in cardiac disease"],
["Amisulpride", "Atypical", "Selective D2/D3; high prolactin; low metabolic SE", "For negative symptoms at low dose; positive at high dose"],
],
[28*mm, 22*mm, 62*mm, 58*mm]
))
story.append(sp(6))
story.append(Paragraph("Extrapyramidal Side Effects (EPS) - Timing & Treatment", H3))
story.append(multi_col_table(
["EPS Type", "Onset", "Features", "Treatment"],
[
["Acute Dystonia", "Hours-4 days", "Sudden painful muscle spasm; oculogyric crisis, torticollis; more common in young males", "IV/IM Benztropine or Diphenhydramine (immediate)"],
["Akathisia", "Days-weeks", "Subjective restlessness, unable to sit still; most distressing; suicide risk", "Propranolol (1st), BZD, dose reduction; anticholinergics less effective"],
["Parkinsonism (Drug-induced)", "Weeks", "Bradykinesia, rigidity, tremor, mask facies", "Anticholinergics (Benztropine, Trihexyphenidyl), Amantadine"],
["Tardive Dyskinesia (TD)", "Months-years", "Choreiform movements; lip smacking; irreversible!", "STOP drug or switch to clozapine; Valbenazine/Deutetrabenazine (FDA approved for TD)"],
],
[32*mm, 25*mm, 60*mm, 53*mm]
))
story.append(sp(4))
story.append(key_box("Neuroleptic Malignant Syndrome (NMS): Hyperthermia + Rigidity + Altered consciousness + Autonomic instability + ↑CK. Rx: STOP drug, Dantrolene, Bromocriptine, DA agonist"))
story.append(PageBreak())
# ─── TOPIC: ANTIDEPRESSANTS ─────────────────────────────────────────────────
def antidepressant_section(story):
story.append(section_header("9. ANTIDEPRESSANTS & MOOD STABILIZERS", C_PURPLE))
story.append(sp(6))
story.append(multi_col_table(
["Class", "Examples", "MOA", "Key Side Effects / High-Yield"],
[
["SSRI", "Fluoxetine, Sertraline, Paroxetine, Escitalopram, Citalopram, Fluvoxamine",
"Selective serotonin reuptake inhibition", "Nausea, sexual dysfunction (most common reason for discontinuation), jitteriness, serotonin syndrome risk; SAFE in pregnancy (Sertraline preferred)"],
["SNRI", "Venlafaxine, Duloxetine, Desvenlafaxine",
"5-HT + NE reuptake inhibition", "HTN (dose-dependent), nausea; Duloxetine = pain + depression + incontinence; Venlafaxine highest discontinuation syndrome"],
["TCA", "Amitriptyline, Clomipramine, Imipramine, Nortriptyline",
"5-HT + NE reuptake inhibition; anticholinergic, antihistamine, alpha-1 block",
"3 Cs: Cardiac (QTc), Coma, Convulsions in OD. Anticholinergic: dry mouth, constipation, urinary retention, blurred vision. Clomipramine = DOC OCD"],
["MAOI", "Phenelzine, Tranylcypromine, Selegiline (patch)",
"Irreversible MAO-A+B inhibition (phenelzine/tranyl); MAO-B (selegiline low dose)",
"TYRAMINE crisis (hypertensive crisis): cheese, wine, cured meats. Serotonin syndrome with SSRI/meperidine. DOC atypical depression"],
["Mirtazapine", "Mirtazapine",
"Alpha-2 antagonist (↑ 5-HT + NE); H1 block",
"Sedation + weight gain (antihistamine); NO sexual dysfunction; good for depression + insomnia + anorexia"],
["Bupropion", "Bupropion",
"NE + DA reuptake inhibition (NDRI)",
"NO sexual dysfunction; NO weight gain (weight loss); Smoking cessation; AVOID in eating disorders/seizure history (lowers seizure threshold)"],
["Trazodone", "Trazodone",
"5-HT2 antagonist + weak SSRI",
"Priapism (rare but NEET classic); sedation; used for insomnia"],
["Vortioxetine", "Vortioxetine",
"Multi-modal: SSRI + 5-HT receptor modulation",
"Pro-cognitive effects; less sexual dysfunction; FDA approved for MDD"],
],
[22*mm, 30*mm, 38*mm, 80*mm]
))
story.append(sp(6))
story.append(Paragraph("Mood Stabilizers", H3))
story.append(multi_col_table(
["Drug", "Therapeutic Level", "Indications", "Key Toxicity / Monitoring"],
[
["Lithium", "0.6-1.2 mEq/L (acute: up to 1.4)", "Bipolar (acute + maintenance), augmentation of AD, SIADH-like effect",
"Narrow therapeutic index! Toxicity: tremor→coarse tremor→confusion→seizure→coma. REGULAR monitoring. SE: hypothyroidism, diabetes insipidus (nephrogenic), polyuria, polydipsia, acne, psoriasis, teratogen (Ebstein anomaly). AVOID NSAIDs/diuretics (raise lithium levels)"],
["Valproate", "50-125 μg/mL", "Bipolar (esp. mixed/rapid cycling), epilepsy, migraine prophylaxis",
"Hepatotoxicity (esp. <2 yrs age), thrombocytopenia, pancreatitis, hair loss, weight gain. Neural tube defects (spina bifida) - teratogenic. PCOS-like syndrome. Monitor LFT + CBC"],
["Carbamazepine", "4-12 μg/mL", "Bipolar, trigeminal neuralgia, epilepsy",
"Aplastic anemia/agranulocytosis, SIADH (hyponatremia), ataxia, diplopia. Teratogen (neural tube defects). Enzyme inducer → drug interactions. Monitor CBC + Na"],
["Lamotrigine", "N/A (clinical)", "Bipolar depression (maintenance), bipolar II, epilepsy",
"Stevens-Johnson syndrome (if titrated too fast). Titrate slowly! Best for bipolar depression without mania induction"],
],
[25*mm, 28*mm, 45*mm, 72*mm]
))
story.append(sp(4))
story.append(mnemonic_box(
"Serotonin Syndrome",
"HUNTER Criteria: Serotonergic drug + [Clonus / Agitation / Diaphoresis / Tremor / Hyperreflexia / Hyperthermia]. "
"Triad: Altered mental status + Neuromuscular abnormalities (clonus, hyperreflexia, tremor) + Autonomic instability. "
"Onset within 24 hrs. Rx: STOP drug, Cyproheptadine (5-HT2 antagonist), supportive care, BZD. "
"Distinguish from NMS: NMS=rigidity+hyporeflexia, slow onset; SS=clonus+hyperreflexia, fast onset."
))
story.append(PageBreak())
# ─── TOPIC: SUBSTANCE USE ───────────────────────────────────────────────────
def substance_section(story):
story.append(section_header("10. SUBSTANCE USE DISORDERS", C_ORANGE))
story.append(sp(6))
story.append(multi_col_table(
["Substance", "Intoxication", "Withdrawal", "Treatment"],
[
["Alcohol", "Disinhibition, slurred speech, ataxia, coma (high dose)",
"6-24h: anxiety, tremor, sweats, tachycardia\n24-72h: SEIZURES\n72-96h: DELIRIUM TREMENS (DTs) = hallucinations, autonomic instability, FATAL if untreated",
"Acute: BZD (Diazepam/Lorazepam - CIWA protocol)\nMaintenance: Naltrexone (craving↓), Acamprosate (relapse prevention), Disulfiram (deterrent - aldehyde syndrome)"],
["Opioids", "Euphoria, miosis (pinpoint pupils), respiratory depression, constipation",
"Yawning, lacrimation, rhinorrhoea, piloerection, myalgia, diarrhoea (OPPOSITE of intoxication). NOT life-threatening",
"Acute OD: NALOXONE (IV/IM/intranasal)\nMaintenance: Methadone (full agonist), Buprenorphine/Naloxone (Suboxone - partial agonist), Naltrexone"],
["Cocaine/Amphetamine", "Euphoria, mydriasis, tachycardia, HTN, hyperthermia, paranoia, psychosis",
"Crash: fatigue, hypersomnia, hyperphagia, dysphoria (no medical emergency)",
"No FDA-approved pharmacotherapy. Symptomatic. CBT. Propranolol for HTN/tachycardia acutely"],
["Cannabis", "Euphoria, relaxation, conjunctival injection, dry mouth, ↑appetite, tachycardia, perceptual distortions",
"Irritability, anxiety, insomnia, decreased appetite (mild, not life-threatening)",
"Supportive. CBT for use disorder. No approved pharmacotherapy"],
["Benzodiazepines", "Sedation, slurred speech, ataxia, amnesia",
"DANGEROUS: anxiety, insomnia, tremor, SEIZURES, hallucinations, delirium (similar to alcohol withdrawal)",
"Slow taper with long-acting BZD (e.g. Diazepam); NEVER abrupt cessation"],
["PCP (Phencyclidine)", "Vertical/rotatory nystagmus, aggression, analgesia, psychosis, dissociation",
"Not clearly defined",
"Quiet room; Benzodiazepines; Haloperidol if needed. AVOID phenothiazines"],
["LSD/Hallucinogens", "Illusions, hallucinations (visual), synesthesia; pupils dilated; tachycardia",
"No physical withdrawal; HPPD (flashbacks) possible",
"Quiet room (talk-down); BZD for anxiety; avoid antipsychotics if possible"],
],
[22*mm, 42*mm, 52*mm, 54*mm]
))
story.append(sp(4))
story.append(key_box("Wernicke-Korsakoff Syndrome: Triad of WE = Confusion + Ataxia + Ophthalmoplegia (ANY alcohol patient → IV THIAMINE BEFORE glucose!). Korsakoff = amnesia + confabulation (irreversible)"))
story.append(PageBreak())
# ─── TOPIC: SLEEP DISORDERS ─────────────────────────────────────────────────
def sleep_section(story):
story.append(section_header("11. SLEEP DISORDERS", C_TEAL))
story.append(sp(6))
story.append(multi_col_table(
["Disorder", "Sleep Stage", "Features", "Treatment"],
[
["Insomnia Disorder", "Difficulty initiating/maintaining", "≥3 nights/week, ≥3 months; daytime dysfunction", "CBT-I (1st line); Zolpidem/Eszopiclone (short-term); Melatonin"],
["Narcolepsy", "REM onset SOREMP, REM intrusion", "EDS + Cataplexy (NT-1) + Sleep paralysis + Hypnagogic hallucinations; orexin/hypocretin deficiency", "Modafinil/Armodafinil (EDS); Sodium oxybate (cataplexy + EDS); Methylphenidate"],
["Obstructive Sleep Apnea", "N/A (obstructive)", "Snoring, witnessed apneas, unrefreshing sleep, morning headache; ↑BMI, neck circumference", "CPAP (gold standard); Uvulopalatopharyngoplasty (surgery); weight loss"],
["Sleep Terror", "NREM Stage 3 (slow wave)", "Sudden terror, screaming, autonomic arousal; no memory of episode; child usually", "Usually resolves; reassure parents; rarely BZD"],
["Sleepwalking (Somnambulism)", "NREM Stage 3", "Complex behaviors during sleep; no memory", "Safety measures; BZD/Clonazepam"],
["REM Sleep Behavior Disorder", "REM sleep", "Acting out vivid dreams; violent movements; associated with Parkinson's/LBD/MSA (synucleinopathies)", "Clonazepam; Melatonin; safety measures"],
["Restless Legs Syndrome", "Presleep (NREM)", "Urge to move legs, worse at night/rest, relieved by movement; dopamine deficiency", "Pramipexole, Ropinirole (dopamine agonists); Iron if deficient"],
],
[30*mm, 28*mm, 58*mm, 54*mm]
))
story.append(sp(4))
story.append(mnemonic_box(
"Narcolepsy Tetrad",
"CHESS: <b>C</b>ataplexy (emotion-triggered sudden loss of muscle tone) + <b>H</b>ypnagogic hallucinations "
"(onset of sleep) + <b>E</b>xcessive daytime sleepiness + <b>S</b>leep paralysis + <b>S</b>OREMPs "
"(Sleep-Onset REM Periods <15 min on MSLT). Low CSF Hypocretin-1 = Type 1 Narcolepsy"
))
story.append(PageBreak())
# ─── TOPIC: CHILDHOOD DISORDERS ─────────────────────────────────────────────
def child_section(story):
story.append(section_header("12. CHILD & ADOLESCENT PSYCHIATRY", C_PINK))
story.append(sp(6))
story.append(multi_col_table(
["Disorder", "Age of Onset", "Key Features", "Treatment"],
[
["ADHD", "Before 12 yrs; symptoms in 2+ settings",
"Inattention (≥6 sx) AND/OR Hyperactivity-Impulsivity (≥6 sx). 3 types: Combined, Predominantly Inattentive, Predominantly Hyperactive-Impulsive",
"Stimulants (Methylphenidate, Amphetamine salts) = 1st line ≥6 yrs. Non-stimulant: Atomoxetine (SNRI, esp. if tics/substance abuse), Guanfacine/Clonidine"],
["Autism Spectrum Disorder (ASD)", "Early childhood (before 3 yrs typical)",
"Social communication deficits + Restricted, repetitive behaviors. Sensory abnormalities. Intellectual disability in ~30%. ADOS gold standard",
"ABA (Applied Behavior Analysis); PECS; Risperidone/Aripiprazole (FDA approved for irritability in ASD); No cure"],
["Intellectual Disability (ID)", "During developmental period",
"IQ <70 + adaptive functioning deficits in ≥2 domains (conceptual, social, practical). IQ 50-70=Mild, 35-50=Moderate, 20-35=Severe, <20=Profound",
"Mild: Education, vocational training. Behavioral therapy. Address comorbidities"],
["Conduct Disorder (CD)", "<18 yrs", "Aggression, destruction, deceitfulness, rule violations in ≥3/15 criteria for ≥12 months. Callous-unemotional traits", "CBT; Parent Management Training; Multisystemic Therapy"],
["ODD", "Childhood", "Angry/irritable mood, argumentative/defiant behavior, vindictiveness ≥6 months", "Parent Management Training; CBT"],
["Tourette Disorder", "Before 18 yrs", "Multiple motor + ≥1 vocal tic for ≥1 year; wax and wane; associated with OCD, ADHD", "Mild: reassurance. Clonidine/Guanfacine (mild tics). Haloperidol/Fluphenazine/Pimozide (severe). Habit Reversal Training"],
["Enuresis", "≥5 yrs", "Repeated bedwetting ≥2x/week for ≥3 months. Primary vs Secondary (regression after 6 months dry)", "Bell-and-pad (conditioning); DDAVP (Desmopressin) at night; Imipramine (2nd line)"],
["Encopresis", "≥4 yrs", "Repeated defecation in inappropriate places ≥1x/month for ≥3 months", "Laxatives + behavioral training; address constipation"],
["Separation Anxiety", "Childhood", "Excessive anxiety about separation from home/attachment figures; school refusal; somatic complaints", "CBT (exposure); SSRI if severe; school reintegration plan"],
["Selective Mutism", "Childhood (school age)", "Consistent failure to speak in specific social situations despite speaking elsewhere; school most common", "CBT + SSRI; exposure therapy; behavioral shaping"],
],
[28*mm, 25*mm, 60*mm, 57*mm]
))
story.append(sp(4))
story.append(key_box("ADHD: Methylphenidate blocks DA + NE reuptake (not release). Amphetamine RELEASES DA + NE. Both work! Strattera (Atomoxetine) is NON-stimulant, non-scheduled, safe in tics"))
story.append(PageBreak())
# ─── TOPIC: DEMENTIA & COGNITIVE ────────────────────────────────────────────
def dementia_section(story):
story.append(section_header("13. NEUROCOGNITIVE DISORDERS (DEMENTIA)", C_NAVY))
story.append(sp(6))
story.append(multi_col_table(
["Type", "Pathology", "Classic Features", "Treatment"],
[
["Alzheimer's Disease (Most common)", "↓ ACh, Amyloid plaques (Aβ), Neurofibrillary tangles (tau), Neuritic plaques. APOE4 risk gene",
"Gradual onset, progressive memory loss (episodic first). Visuospatial later. Behavioral symptoms late. Brain: global atrophy, hippocampal first",
"AChEI (Donepezil, Rivastigmine, Galantamine) for mild-moderate. Memantine (NMDA antagonist) for moderate-severe. Combo: Donepezil + Memantine"],
["Vascular Dementia (2nd most common)", "Multiple infarcts/white matter changes; stepwise decline",
"Stepwise (not gradual) progression; focal neurological signs; risk factors = HTN, DM, smoking, AF",
"Control vascular risk factors; Aspirin; AChEI may help (Donepezil)"],
["Lewy Body Dementia (DLB)", "Alpha-synuclein Lewy bodies in cortex",
"Triad: Fluctuating cognition + Recurrent visual hallucinations + Parkinsonism. REM Sleep Behavior Disorder early. Sensitivity to antipsychotics!",
"AChEI (Rivastigmine preferred); AVOID typical antipsychotics (fatal sensitivity); Levodopa cautiously"],
["Frontotemporal Dementia (FTD)", "Tau/TDP-43; Pick bodies (Pick's disease subset)",
"Early behavioral/personality changes; disinhibition; apathy; preserved memory early. Language variants: PNFA, semantic dementia",
"No approved therapy; Behavioral: SSRI for disinhibition; avoid cholinesterase inhibitors (may worsen)"],
["Parkinson's Dementia (PDD)", "Dopamine deficiency + Lewy bodies; PD for ≥1 yr before dementia",
"Dementia after established PD (≥1 yr). Similar to DLB but PD first. Hallucinations, executive dysfunction",
"AChEI (Rivastigmine FDA approved for PDD); AVOID antipsychotics (use Quetiapine if needed)"],
],
[25*mm, 40*mm, 55*mm, 50*mm]
))
story.append(sp(4))
story.append(Paragraph("Delirium vs Dementia - Quick Differentiation", H3))
story.append(two_col_table(
["Delirium", "Dementia"],
[
["Acute onset (hours-days)", "Gradual onset (months-years)"],
["Fluctuating consciousness", "Consciousness preserved (early)"],
["REVERSIBLE (treat cause!)", "Usually irreversible"],
["Attention severely impaired", "Attention relatively preserved (early)"],
["Psychomotor disturbance", "Usually absent early"],
["Sleep-wake cycle disrupted", "Sundowning in later stages"],
["Cause: infection, drugs, metabolic", "Cause: neurodegeneration, vascular"],
]
))
story.append(sp(4))
story.append(key_box("Delirium = WHHHHIMP: Withdrawal, Hypoxia, Hypoglycemia/Hyperglycemia, Head trauma, HTN encephalopathy, Infection, Metabolic, Poisons/drugs"))
story.append(PageBreak())
# ─── TOPIC: FORENSIC PSYCHIATRY ─────────────────────────────────────────────
def forensic_section(story):
story.append(section_header("14. FORENSIC PSYCHIATRY & LEGAL CONCEPTS", C_RED))
story.append(sp(6))
story.append(multi_col_table(
["Concept", "Definition / Key Points", "NEET Focus"],
[
["McNaughton Rules (Insanity Defense)", "Not guilty by reason of insanity IF: 1) Laboring under defect of reason 2) Due to disease of mind 3) Did not know nature/quality of act OR did not know it was wrong",
"4 components; Cognitive test only (not volitional)"],
["Fitness to Stand Trial", "Ability to understand proceedings and assist in own defense at time of trial (not at time of crime)",
"Competency (present) vs Insanity (past - time of offense)"],
["Durham Rule", "'Product Rule': Crime is product of mental disease or defect",
"Broader than McNaughton; abandoned in US"],
["Irresistible Impulse Test", "Unable to control behavior even if knew it was wrong (volitional prong)",
"Addendum to McNaughton in some jurisdictions"],
["Informed Consent", "3 elements: Disclosure (adequate info) + Competency (decision-making capacity) + Voluntariness (no coercion)",
"Capacity assessment = 4 Cs: Communicate, Comprehend, Compare, Conclude"],
["Confidentiality Exceptions", "Tarasoff duty: Duty to warn/protect identifiable third party from credible threat. Mandatory reporting: child abuse, elder abuse, infectious diseases",
"Psychotherapist-patient privilege broken by: Tarasoff, child abuse, court order"],
["Involuntary Hospitalization", "Criteria: Danger to self OR danger to others OR gravely disabled. Usually 72-hour emergency hold (5150 in California)",
"Civil commitment = least restrictive alternative"],
],
[35*mm, 85*mm, 50*mm]
))
story.append(sp(8))
story.append(section_header("15. ECT, PSYCHOTHERAPY & MISCELLANEOUS", C_TEAL))
story.append(sp(6))
story.append(two_col_table(
["ECT (Electroconvulsive Therapy)", "Psychotherapy Types"],
[
["Absolute contraindications: NONE (relative: raised ICP, recent MI/stroke, pheochromocytoma)",
"CBT: Cognitive + Behavioral; evidence-based for depression, anxiety, OCD, PTSD"],
["Indications: Severe depression + suicidal, treatment-resistant, psychotic depression, catatonia, mania refractory, Parkinson's",
"DBT: Dialectical Behavior Therapy; Linehan; BPD treatment of choice; skills: mindfulness, distress tolerance, emotion regulation, interpersonal effectiveness"],
["Mechanism: seizure activity (not electricity per se); bilateral > right unilateral for efficacy; right unilateral = fewer cognitive SE",
"Psychoanalysis: Freud; free association, transference, countertransference, dream analysis"],
["SE: Memory impairment (retrograde + anterograde), confusion, headache, nausea; MOST COMMON reversible cognitive SE",
"Behavioral therapy: Classical (Pavlov) + Operant (Skinner) conditioning; systematic desensitization, flooding, token economy, biofeedback"],
["Premedication: Atropine (dry secretions) + Short-acting barbiturate (Methohexital anesthesia) + Succinylcholine (muscle relaxant)",
"Supportive therapy: Non-directive; empathy, unconditional positive regard; Rogers client-centered"],
]
))
story.append(sp(4))
story.append(key_box("ECT: DOC for Catatonic Schizophrenia + Severe Suicidal Depression + Pregnant patient with severe depression (safe in pregnancy)"))
story.append(PageBreak())
# ─── TOPIC: ONE-LINERS & HIGH YIELD ─────────────────────────────────────────
def oneliners_section(story):
story.append(section_header("16. HIGH-YIELD ONE-LINERS & NEET CLASSICS", C_ORANGE))
story.append(sp(6))
oneliners = [
"1. De Clérambault syndrome = Erotomania (delusion that famous person loves you) - type of delusional disorder",
"2. Capgras syndrome = Familiar person replaced by impostor (reduplicative paramnesia) - fronto-temporal or right hemisphere lesion",
"3. Cotard's syndrome = Nihilistic delusion (patient believes they are dead or organs missing) - severe depression",
"4. Fregoli syndrome = Unfamiliar person is actually familiar person in disguise (opposite of Capgras)",
"5. Ganser syndrome = Approximate answers (Vorbeireden) - dissociative; prison inmates, malingering differential",
"6. Othello syndrome = Morbid jealousy / Pathological jealousy; delusion of infidelity",
"7. Ekbom syndrome = Delusional parasitosis / Formication - insects crawling under skin",
"8. Folie à deux = Shared delusion between two people (induced delusional disorder) - separate them!",
"9. Kluver-Bucy syndrome = Bilateral temporal lobe damage: Hypersexuality + Hyperorality + Visual agnosia + Flat affect + Docility",
"10. Wendigo psychosis = Cannibalistic delusion; cultural-bound in Algonquian tribes",
"11. Latah = Hyperstartle + echolalia + echopraxia (Malaysia)",
"12. Amok = Dissociative fury/running amok (Malaysia)",
"13. Koro = Fear of penis retracting into abdomen (Southeast Asia)",
"14. Dhat syndrome = Semen loss anxiety (South Asia)",
"15. Hwa-Byung = Suppressed anger syndrome (Korea) - somatic symptoms",
"16. Susto = Fright sickness with soul loss (Latin America)",
"17. Windshield test = Pseudodementia (depression) vs dementia: In depression, patient says 'I don't know'; in dementia, patient confabulates",
"18. Double depression = MDD superimposed on Dysthymia (PDD)",
"19. First-rank symptoms of schizophrenia (Schneider): Thought echo, insertion, withdrawal, broadcasting; made acts/impulses/feelings; delusional perception; third-person commentary hallucinations",
"20. Hallucinations: Auditory (schizophrenia), Visual (organic/LSD/Delirium), Olfactory (TLE/depression), Gustatory, Tactile (cocaine bugs/delirium)",
"21. Tricyclic antidepressants in overdose: 3 Cs - Cardiac toxicity (QRS widening), Coma, Convulsions. Treat with IV Sodium bicarbonate",
"22. Most common side effect of SSRIs = Sexual dysfunction (anorgasmia/ejaculation delay). Switch to Bupropion or Mirtazapine if problematic",
"23. SSRI discontinuation syndrome: FINISH mnemonic - Flu-like, Insomnia, Nausea, Imbalance, Sensory disturbances (electric shocks), Hyperarousal",
"24. Lithium toxic > 1.5 mEq/L; Emergency > 2.0 mEq/L → hemodialysis. Thyroid/kidney monitoring every 6 months",
"25. Agranulocytosis monitoring for Clozapine: Weekly WBC x 6 months → Every 2 weeks x 6 months → Monthly. Stop if ANC <1000/mm3",
"26. Methadone: Long-acting opioid; QTc prolongation; drug-drug interactions; prevents withdrawal; requires daily clinic attendance",
"27. Buprenorphine ceiling effect on respiratory depression (partial agonist) makes it safer than methadone in overdose",
"28. Disulfiram (Antabuse): Inhibits aldehyde dehydrogenase → acetaldehyde accumulates → flushing, vomiting, hypotension with alcohol",
"29. Motivational Interviewing: Non-confrontational, client-centered counseling for behavior change; OARS: Open questions, Affirmation, Reflective listening, Summary",
"30. Defense Mechanisms: Mature (humor, sublimation, altruism, suppression) → Neurotic (repression, intellectualization, rationalization, displacement) → Immature (projection, splitting, acting out, denial) → Psychotic (distortion, denial of external reality)",
"31. Splitting = BPD hallmark; person is all good or all bad (black/white thinking). Tx: DBT",
"32. Conversion Disorder: La belle indifference (lack of concern about symptoms); glove-and-stocking anesthesia; non-anatomical distribution; under stress",
"33. Illness Anxiety Disorder (Hypochondriasis): Fear of having serious illness despite reassurance; excessive health-related behaviors or avoidance",
"34. Factitious Disorder (Munchausen): Intentional feigning of symptoms for sick role (internal motivation). FD by proxy = perpetrated on child by caregiver",
"35. Malingering: Intentional feigning for external gain (money, avoiding legal issues). External motivation differentiates from factitious",
]
for ol in oneliners:
story.append(Paragraph(ol, ONE_LINER))
story.append(sp(1))
story.append(sp(6))
story.append(section_header("17. RAPID-FIRE DRUG MNEMONICS", C_PURPLE))
story.append(sp(6))
story.append(mnemonic_box(
"SSRI Memory",
"Fluoxetine <b>F</b>at (long half-life 2-6 days, no discontinuation syndrome). "
"Paroxetine = <b>P</b>regnancy risk (neonatal adaptation syndrome), most anticholinergic SSRI, highest discontinuation syndrome. "
"Sertraline = <b>S</b>afest in pregnancy (preferred). "
"Fluvoxamine = OCD + social anxiety. Citalopram/Escitalopram = most selective, highest QTc risk"
))
story.append(sp(4))
story.append(mnemonic_box(
"WIRES",
"Antidepressants causing WEIGHT GAIN: <b>W</b>orse offenders: Mirtazapine >> Paroxetine > TCAs > MAOIs. "
"Weight NEUTRAL: Sertraline, Fluoxetine. Weight LOSS: <b>Bupropion</b> (smoking cessation), Fluoxetine (early)"
))
story.append(sp(4))
story.append(mnemonic_box(
"Prolactin Elevation",
"Antipsychotics raising prolactin most: <b>Risperidone > Haloperidol > Amisulpride</b>. "
"Least/no prolactin rise: Clozapine, Quetiapine, Aripiprazole (partial agonist actually LOWERS prolactin if high). "
"Symptoms of hyperprolactinemia: Galactorrhea, amenorrhea, gynecomastia, sexual dysfunction, osteoporosis"
))
story.append(sp(4))
story.append(mnemonic_box(
"QTc Prolongation",
"Psychiatric drugs with HIGH QTc risk: Thioridazine (highest!) > Ziprasidone > Haloperidol > Pimozide > Citalopram (high dose) > Methadone. "
"Avoid combinations. Baseline ECG before starting"
))
story.append(PageBreak())
# ─── LAST PAGE: FLOWCHART SUMMARIES ─────────────────────────────────────────
def flowcharts_section(story):
story.append(section_header("18. CLINICAL FLOWCHARTS — DECISION ALGORITHMS", C_TEAL))
story.append(sp(8))
story.append(Paragraph("Approach to Psychosis", H3))
story.append(flowchart_box([
"Patient presents with Psychosis (delusions / hallucinations / disorganized behavior)",
"STEP 1: Rule out ORGANIC causes (delirium, medical illness, drugs, toxins, metabolic) → Brain imaging, blood tests, urine toxicology",
"STEP 2: Is there a mood episode (depression/mania) accounting for most of illness? → Consider MOOD DISORDER WITH PSYCHOSIS",
"STEP 3: Has psychosis lasted <1 month? → BRIEF PSYCHOTIC DISORDER. 1-6 months? → SCHIZOPHRENIFORM",
"STEP 4: Is there a mood episode ≥half the total duration AND ≥2 weeks psychosis without mood sx? → SCHIZOAFFECTIVE DISORDER",
"STEP 5: Meets 6-month duration + 2 criteria? → SCHIZOPHRENIA. Non-bizarre delusion only + intact function? → DELUSIONAL DISORDER",
"TREATMENT: Antipsychotic (typical or atypical) + Psychosocial intervention + Monitor response"
], "Psychosis Algorithm", color=C_NAVY))
story.append(sp(12))
story.append(Paragraph("Approach to Depression Treatment", H3))
story.append(flowchart_box([
"Confirm MDD diagnosis (SIGECAPS ≥5 sx ≥2 weeks; rule out bipolar)",
"STEP 1 (Mild-Moderate): Psychotherapy (CBT, IPT) ± SSRI. Educate patient: 2-4 weeks to see effect",
"STEP 2 (No response after 4-8 weeks at adequate dose): Switch SSRI or augment (add bupropion, lithium, atypical AP, T3)",
"STEP 3 (2nd antidepressant fails): Consider SNRI, TCA, MAOI, or MAOI + SSRI NEVER (serotonin syndrome!)",
"STEP 4 (Treatment-Resistant Depression / TRD): ECT (most effective), Ketamine/Esketamine (intranasal, rapid), TMS, MAOIs",
"Maintenance: Continue antidepressant 1 year after 1st episode, 2+ years after 2nd, LIFETIME after 3rd episode"
], "Depression Algorithm", color=C_PURPLE))
story.append(sp(8))
story.append(key_box("Remember: Esketamine (Spravato) nasal spray = 1st FDA-approved ketamine derivative for treatment-resistant depression and MDD with suicidal ideation"))
story.append(PageBreak())
# ─── FINAL PAGE: QUICK REFERENCE CARDS ──────────────────────────────────────
def quick_ref_section(story):
story.append(section_header("19. EXAMINATION QUICK-REFERENCE CARDS", C_NAVY))
story.append(sp(6))
story.append(Paragraph("Rating Scales (NEET Favorites)", H3))
story.append(multi_col_table(
["Scale", "Measures", "Key Feature"],
[
["PANSS", "Positive & Negative Syndrome Scale", "Schizophrenia severity (30 items: 7 positive, 7 negative, 16 general)"],
["BPRS", "Brief Psychiatric Rating Scale", "18 items; quick overall psychopathology assessment"],
["HDRS/HAM-D", "Hamilton Depression Rating Scale", "Clinician-rated; 17/21 items; depression severity"],
["MADRS", "Montgomery-Asberg Depression Rating Scale", "10 items; clinician-rated; sensitive to change; use in drug trials"],
["YMRS", "Young Mania Rating Scale", "11 items; clinician-rated; mania severity"],
["GAF", "Global Assessment of Functioning", "0-100 scale; overall psychological/social/occupational functioning"],
["CGI", "Clinical Global Impression", "Severity + improvement; simple 7-point scales"],
["BDI", "Beck Depression Inventory", "Self-rated; 21 items; depression screening"],
["PHQ-9", "Patient Health Questionnaire-9", "Primary care depression screening; ≥10 = moderate depression"],
["AUDIT", "Alcohol Use Disorders Identification Test", "10 items; alcohol screening; ≥8 = hazardous use"],
["CAGE", "CAGE Questionnaire", "4 items for alcohol: Cut down, Annoyed, Guilty, Eye-opener; ≥2 = problematic"],
["MMSE", "Mini-Mental State Examination", "Cognitive screening; max 30; ≤23 = cognitive impairment"],
["MoCA", "Montreal Cognitive Assessment", "More sensitive than MMSE for MCI; max 30; ≤25 = MCI"],
["CDRS-R", "Children's Depression Rating Scale-Revised", "Children aged 6-12; depression severity"],
],
[18*mm, 55*mm, 97*mm]
))
story.append(sp(6))
story.append(Paragraph("Critical Drug Monitoring Summary", H3))
story.append(multi_col_table(
["Drug", "Must Monitor", "Stop if"],
[
["Clozapine", "WBC + ANC (weekly → biweekly → monthly)", "ANC <1000/mm3 (agranulocytosis)"],
["Lithium", "Serum Li level, TFTs, renal function (BUN/Cr), ECG", "Level >2 mEq/L or renal failure"],
["Valproate", "LFTs, CBC (platelets), serum level, ammonia", "Severe hepatotoxicity, pancreatitis, thrombocytopenia"],
["Carbamazepine", "CBC, Na, serum level, LFTs", "Agranulocytosis, aplastic anemia, SIADH"],
["TCAs", "ECG (QTc), BP (orthostatic)", "QRS >100ms, hypotension"],
["MAOIs", "BP monitoring", "Hypertensive crisis (tyramine exposure)"],
],
[28*mm, 65*mm, 77*mm]
))
story.append(sp(6))
story.append(Paragraph("Teratogenicity Summary", H3))
story.append(multi_col_table(
["Drug", "Teratogenic Risk", "Use in Pregnancy"],
[
["Lithium", "Ebstein anomaly (tricuspid valve; rare)", "Use with caution; 1st trimester highest risk; benefit > risk in severe bipolar"],
["Valproate", "Neural tube defects (spina bifida) 1-2%, craniofacial, cardiac", "AVOID; use folic acid 5mg if unavoidable"],
["Carbamazepine", "Neural tube defects, craniofacial, cardiac", "AVOID in 1st trimester; folic acid supplementation"],
["SSRIs (Paroxetine)", "Cardiac defects (VSD) with Paroxetine; neonatal adaptation syndrome", "AVOID Paroxetine; Sertraline preferred in pregnancy"],
["Benzodiazepines", "Floppy infant, cleft palate (controversial)", "AVOID; use if absolutely necessary with risk counseling"],
["ECT", "No known teratogenic risk", "Safest option for severe psychosis/depression in pregnancy"],
],
[28*mm, 60*mm, 82*mm]
))
story.append(sp(6))
story.append(key_box("Pregnancy safe antidepressant = Sertraline (most studied). Safest antipsychotic = Haloperidol (most data). ECT = safest for severe conditions in pregnancy"))
# ─── BUILD DOCUMENT ──────────────────────────────────────────────────────────
def build_pdf():
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
rightMargin=20*mm,
leftMargin=20*mm,
topMargin=20*mm,
bottomMargin=20*mm,
)
story = []
cover_page(story)
neuro_section(story)
schizophrenia_section(story)
mood_section(story)
anxiety_section(story)
trauma_section(story)
personality_section(story)
antipsychotic_section(story)
antidepressant_section(story)
substance_section(story)
sleep_section(story)
child_section(story)
dementia_section(story)
forensic_section(story)
flowcharts_section(story)
quick_ref_section(story)
doc.build(story)
print(f"PDF saved to: {OUTPUT_PATH}")
import os
size = os.path.getsize(OUTPUT_PATH) / 1024
print(f"File size: {size:.1f} KB")
if __name__ == "__main__":
build_pdf()
cd /tmp/workspace/psychiatry-neet-pdf && python generate_pdf.py 2>&1
python3 -c " from pypdf import PdfReader reader = PdfReader('/tmp/workspace/psychiatry-neet-pdf/Psychiatry_NEET_PG_AtAGlance.pdf') print(f'Total pages: {len(reader.pages)}') print('First page text sample:') print(reader.pages[0].extract_text()[:300]) "
Psychiatry NEET PG AtAGlance
PDF Document · PDF
| # | Section | Highlights |
|---|---|---|
| 1 | Neurotransmitters & Receptors | Full DA pathways table, MATIN mnemonic, dopamine hypothesis |
| 2 | Schizophrenia Spectrum | DSM-5 DHNBB mnemonic, FRS Schneider's ABCDE, good/poor prognosis table, spectrum comparison |
| 3 | Mood Disorders | SIGECAPS for depression, DIG FAST for mania, full spectrum table (MDD/BPI/BPII/Cyclothymia), postpartum triad |
| 4 | Anxiety & OCD | GAD/Panic/Social/Phobia comparison, STUDENTS FEAR mnemonic for panic, OCD vs OCPD |
| 5 | Trauma & PTSD | 4-criterion PTSD flowchart, ASD vs PTSD vs Adjustment disorder |
| 6 | Personality Disorders | All 10 PDs in cluster A-B-C table, MAD-BAD-SAD mnemonic, BPD/DBT |
| 7 | Antipsychotics | All typical + atypical drugs with unique SEs, EPS timing + treatment table, NMS key box |
| 8 | Antidepressants & Mood Stabilizers | All classes (SSRI/SNRI/TCA/MAOI/Mirtazapine/Bupropion), Lithium/Valproate/Carbamazepine monitoring |
| 9 | Substance Use | Alcohol/Opioid/Cocaine/BZD/PCP comparison, Wernicke-Korsakoff key point |
| 10 | Sleep Disorders | Narcolepsy CHESS mnemonic, REM vs NREM parasomnias, CPAP for OSA |
| 11 | Child Psychiatry | ADHD, ASD, ID, Tourette, Enuresis - full table with treatments |
| 12 | Dementia | Alzheimer/Vascular/DLB/FTD comparison, Delirium vs Dementia table |
| 13 | Forensic Psychiatry + ECT | McNaughton, Tarasoff, CBT/DBT/Psychoanalysis summary |
| 14 | 35 High-Yield One-Liners | Eponymous syndromes, culture-bound, drug SE classics |
| 15 | Clinical Flowcharts | Psychosis algorithm, Depression treatment stepwise |
| 16 | Quick Reference Cards | 14 rating scales, drug monitoring table, teratogenicity guide |