give me systematic approach plan for approach to a case of posterior uveitis, detailed seminar for pg classes
"posterior uveitis" AND diagnosis AND management
cd /home/daytona/workspace && python3 -c " import pdfplumber pdf_path = '/home/d…
cd /home/daytona/workspace && python3 -c " import pdfplumber pdf_path = '/home/d…
python3 -c " import pdfplumber pdf_path = '/home/daytona/workspace/attachments/8…
python3 << 'EOF' import pdfplumber pdf_path = '/home/daytona/workspace/attachmen…
python3 << 'EOF' import pdfplumber pdf_path = '/home/daytona/workspace/attachmen…
python3 << 'EOF' import pdfplumber pdf_path = '/home/daytona/workspace/attachmen…
python3 << 'EOF' import pdfplumber pdf_path = '/home/daytona/workspace/attachmen…
| SUN Descriptor | Definition |
|---|---|
| Onset | Sudden or insidious |
| Duration | Limited (≤3 months) or Persistent (>3 months) |
| Acute | Sudden onset, limited duration |
| Recurrent | Repeated episodes with ≥3 months of inactivity between episodes off treatment |
| Chronic | Persistent uveitis with relapse <3 months after stopping treatment |
| Inactive | Grade 0 cells |
| Remission | Inactive disease ≥3 months off all treatment |
| Symptom | Mechanism |
|---|---|
| Painless blurred vision | Retinitis/choroiditis affecting macula; macular edema |
| Floaters | Vitreous cells, vitreous debris |
| Photopsias | Retinal photoreceptor stimulation |
| Scotomas (central or peripheral) | Retinal or choroidal lesions |
| Metamorphopsia | Macular involvement, subretinal fluid |
| Nyctalopia | Diffuse rod photoreceptor dysfunction |
| Blurred vision | Refractive shift, cataract, macular edema, vitreous haze |
Key point: Posterior uveitis is characteristically painless (unlike acute anterior uveitis which causes red, painful eye with photophobia). This is why posterior uveitis may be missed or diagnosed late.
| Finding | Significance |
|---|---|
| Mutton-fat KPs, Koeppe/Busacca nodules | Granulomatous - Sarcoid, TB, VKH, SO |
| Fine diffuse stellate KPs | Fuchs, herpetic |
| Posterior synechiae | Chronic inflammation |
| Hypopyon | Behcet, HLA-B27 (mobile hypopyon = Behcet) |
| Iris heterochromia | Fuchs uveitis syndrome |
| Iris atrophy (sectoral) | Herpetic (HSV/VZV) |
| Low IOP | Active inflammation (ciliary body suppression) |
| High IOP | Trabeculitis (herpetic), steroid response, peripheral anterior synechiae |
| Band keratopathy | Chronic (JIA, sarcoid) |
| AC flare/cells | Spillover from posterior; graded per SUN system |
| Primarily Phlebitis | Primarily Arteritis | Both |
|---|---|---|
| Sarcoidosis | SLE | Behcet disease |
| MS | PAN | Toxoplasma |
| Eales disease | Syphilis | Relapsing polychondritis |
| Birdshot | HSV/VZV (ARN/BARN) | GPA |
| HIV | Susac syndrome | Frosted branch angiitis |
| Frosted branch angiitis | IRVAN |
STEP 1: ANATOMICAL → What structures are involved?
STEP 2: PATTERN → What does the lesion look like?
STEP 3: CONTEXT → Patient profile (age, sex, immune status, geography, history)
STEP 4: TESTING → Targeted investigations based on differential
| Location | Key Features | Think of |
|---|---|---|
| Primarily retina | Retinitis (white, fluffy, hemorrhagic) | CMV, HSV/VZV, toxoplasma, TB |
| Primarily choroid | Yellow/cream lesions, no vitritis unless retina also involved | Birdshot, sarcoid, TB, OHS, white dot syndromes |
| Choroid + RPE | Placoid lesions, RPE changes | APMPPE, serpiginous, MFCPU |
| Vitreous | Cells and haze | All posterior uveitis; dense = lymphoma |
| Retinal vessels | Vasculitis, sheathing, occlusion | Behcet, sarcoid, SLE, TB, viral |
| Combined retinochoroidal | Both layers | VKH, SO, toxoplasma, ARN |
| Question | Target Disease |
|---|---|
| Recurrent oral ulcers, genital ulcers, skin lesions | Behcet disease |
| Back pain, morning stiffness, sacroiliitis | HLA-B27 spondyloarthropathy |
| Shortness of breath, cough, skin lesions | Sarcoidosis |
| Headache, tinnitus, hearing loss, skin depigmentation | VKH |
| Butterfly rash, arthralgia, malar rash (young female) | SLE |
| History of penetrating eye trauma/vitreoretinal surgery | Sympathetic ophthalmia |
| Exposure to cats, raw meat | Toxoplasma gondii |
| Exposure to dogs (esp. young child), soil/sand | Toxocariasis |
| HIV risk factors, IV drug use | Opportunistic infections (CMV, toxoplasma, fungal) |
| Skin nodules, nasal/sinus disease, hemoptysis | GPA (granulomatosis with polyangiitis) |
| Focal neurologic symptoms, MS features | MS-associated uveitis |
| Coxsackie exposure (hand-foot-mouth), young patient | Acute idiopathic maculopathy |
Key rule: Syphilis testing in ALL patients with uveitis. TB screening in patients where systemic IMT will be used or where pattern suggests TB.
| Test | Indication/Disease |
|---|---|
| FTA-Abs or MHA-TP + reflex RPR/VDRL | Syphilis (ALL patients) |
| IGRA (QuantiFERON-TB Gold) | TB (preferred over PPD in BCG-vaccinated) |
| ACE + Lysozyme | Sarcoidosis (sens 61%, spec 88% combined) |
| HLA-B27 | Spondyloarthropathy, AAU |
| HLA-A29 | Birdshot chorioretinopathy (sens 96%, spec 93%) |
| ANA | SLE (only if clinically suspected - low PPV 4.4% in uveitis) |
| Anti-dsDNA, anti-Sm, antiphospholipid | SLE |
| ANCA (c- and p-) | GPA, microscopic polyangiitis |
| Toxoplasma IgG/IgM | Toxoplasmosis |
| Toxocara antibody | Toxocariasis (child with peripheral/posterior pole granuloma) |
| Bartonella serology | Cat-scratch disease (neuroretinitis) |
| Lyme ELISA | Endemic area, clinical features |
| HIV serology | Any immunocompromised or atypical pattern |
| CBC with differential | Baseline; leukemia, immune status |
| LFTs, renal function | IMT baseline monitoring |
| Disease | FA Pattern |
|---|---|
| VKH (early) | Pinpoint hyperfluorescent foci, late pooling in serous RDs; disc leakage |
| Birdshot | Early hypofluorescence/silence, late staining; retinal venular leakage; disc leakage |
| APMPPE (active) | Early blockage/hypofluorescence → late staining |
| APMPPE (healed) | Window defects |
| Serpiginous (active edge) | Early hypofluorescence → late staining/leakage at active border |
| MFCPU | Early blockage, late staining; CNV if present |
| Behcet | Early capillaritis (focal hyperfluorescence), late leakage; ferning pattern; nonperfusion |
| Sarcoid (vasculitis) | "Candlewax drippings" on veins; disc leakage; CME petalloid pattern |
| Retinal vasculitis | Vascular wall staining, capillary leakage, nonperfusion |
| ARN | Peripheral nonperfusion, arterial occlusion |
| Finding | Disease |
|---|---|
| Hypocyanescent dark dots | VKH (granulomas), birdshot, SO, sarcoid |
| Choroidal perfusion delay | VKH (early, before clinical signs) |
| "Fuzzy" choroidal vessels | Active choriocapillaritis |
| More lesions than FA shows | Sarcoid, birdshot (ICGA superior) |
| Confluent hypocyanescent spots | Birdshot (emanating from disc) |
1. Confirm absence of infection FIRST before any immunosuppression
2. Quiet inflammation with corticosteroids
3. If worsening with steroids → reconsider infectious etiology
4. Taper steroids to safe dose (≤7.5 mg/day prednisone)
5. If steroid-dependent → add systemic IMT
6. Antimetabolites are first-line IMT; biologic agents (TNF inhibitors) if severe/refractory
7. IMT takes weeks-months; bridge with local or systemic corticosteroids
8. Maintain IMT at least 1-3 years; taper only after ≥12 months quiescence
| Drug | Dose | Key Points |
|---|---|---|
| Methotrexate (MTX) | 15-25 mg/week SC/oral | + folic acid 1-2 mg/day; teratogenic; hepatotoxicity; often first choice in children |
| Mycophenolate Mofetil (MMF) | 1-1.5 g BD | Faster onset (4 months); less GI side effects; equal efficacy to MTX (FAST trial) |
| Azathioprine | 2-2.5 mg/kg/day | Check TPMT before starting; more GI side effects; effective in VKH, Behcet |
| Drug | Dose | Key Points |
|---|---|---|
| Cyclosporine | 2.5-5 mg/kg/day | Nephrotoxic, hypertension; effective in Behcet; check creatinine |
| Tacrolimus | 0.1-0.15 mg/kg/day | Similar to cyclosporine; monitor levels |
PATIENT WITH POSTERIOR UVEITIS
↓
1. SYMPTOMS (painless? blurred vision, floaters, photopsias, scotomata, metamorphopsia)
↓
2. HISTORY (demographics, systemic symptoms, immune status, medications, travel, exposures)
↓
3. EXAMINATION
- Anterior segment (KP type, AC cells/flare, synechiae, IOP)
- Vitreous (haze grade, cells, snowballs, strands)
- Fundus (retinitis vs choroiditis vs vasculitis; describe lesions systematically)
↓
4. MULTIMODAL IMAGING
- OCT (CME, SRF, choroidal thickness, ellipsoid zone)
- FA (vasculitis, CME, disc leakage, lesion staining pattern)
- ICGA (choroidal lesions, granulomas, VKH, birdshot)
- FAF (active vs inactive, RPE damage)
- B-scan (if media opacity; T-sign for posterior scleritis)
↓
5. PATTERN RECOGNITION → Working Differential (Infectious / Non-infectious / Masquerade)
↓
6. TARGETED INVESTIGATIONS
- ALL patients: Syphilis serology (FTA-Abs + RPR/VDRL)
- Most patients: IGRA/PPD, CXR
- Pattern-directed: ACE/lysozyme, HLA typing, serologies, PCR
- Intraocular fluid if needed: AC paracentesis or diagnostic vitrectomy
↓
7. DIAGNOSIS
↓
8. TREATMENT
- Infectious → Specific antimicrobials ± adjunctive steroids
- Non-infectious → Corticosteroids (local/systemic) → Taper → IMT if steroid-dependent
- Masquerade → Disease-specific (chemotherapy, radiotherapy for lymphoma)
↓
9. MONITOR (VA, vitreous haze, OCT, FA as needed, IOP, steroid side effects)
give me classification for posterior uveitis
| SUN Category | Primary Site | Includes |
|---|---|---|
| Retinitis | Retina | Focal, multifocal, geographic, diffuse |
| Choroiditis | Choroid | Focal, multifocal, geographic, diffuse |
| Chorioretinitis | Choroid → secondary retina | Choroidal lesion with retinal extension |
| Retinochoroiditis | Retina → secondary choroid | Retinal lesion with choroidal extension |
| Neuroretinitis | Retina + optic nerve | Optic disc swelling + macular star |
| Retinal vasculitis | Retinal vessels | Phlebitis, periarteritis, or combined |
Note (SUN 2021): Posterior uveitis or panuveitis must include choroidal and/or retinal lesions. Macular edema, optic disc edema, or peripheral vasculitis alone do NOT qualify.
| Descriptor | Definition |
|---|---|
| Acute | Sudden onset, limited duration (≤3 months) |
| Recurrent | Repeated episodes with ≥3 months inactive off treatment |
| Chronic | Persistent; relapses <3 months after stopping treatment |
| Insidious onset | Gradual, typically in non-infectious/autoimmune types |
| Sudden onset | More typical of infectious or vasculitic types |
| Type | Examples |
|---|---|
| Unilateral | Toxoplasma, OHS, DUSN, ARN (initially), CMV |
| Bilateral | VKH, Birdshot, Behcet, Sarcoid, Sympathetic ophthalmia |
| Bilateral asymmetric | VKH, APMPPE, Birdshot, Serpiginous |
| Alternating | Behcet (attacks may alternate) |
| Morphology | Description | Key Disease |
|---|---|---|
| Focal | Single solitary lesion | Toxoplasma, OHS, CMV |
| Multifocal | Multiple discrete lesions | Birdshot, sarcoid, TB, white dot syndromes |
| Geographic/Diffuse | Large confluent areas | Serpiginous, CMV (advanced), VKH |
| Placoid | Large flat grey-white lesions, indistinct margins | APMPPE, ampiginous choroiditis |
| Serpentine | Sharply defined, wavy borders; peripapillary origin | Serpiginous choroiditis |
| Punched-out | Round, well-demarcated atrophic scars | OHS, inactive birdshot, inactive sarcoid |
| Ovoid/cream-colored | Peripapillary, radial distribution | Birdshot chorioretinopathy |
| Necrotizing | Full-thickness retinal whitening, necrosis | ARN, PORN, CMV |
| Organism | Disease |
|---|---|
| Toxoplasma gondii | Toxoplasma chorioretinitis (most common worldwide) |
| Toxocara canis/cati | Ocular toxocariasis |
| Taenia solium | Ocular cysticercosis |
| Helminths (motile worm) | Diffuse Unilateral Subacute Neuroretinitis (DUSN) |
| Onchocerca volvulus | Onchocerciasis (river blindness) |
| Virus | Disease |
|---|---|
| HSV-1, HSV-2 | ARN (Acute Retinal Necrosis) |
| VZV | ARN, BARN, PORN (immunocompromised) |
| CMV | CMV retinitis (CD4 <50) |
| EBV | Rare retinitis/uveitis |
| HIV | Direct + opportunistic (CMV, toxoplasma, cryptococcus) |
| West Nile virus | Chorioretinitis (geographic) |
| HTLV-1 | Uveitis (Japan, Caribbean) |
| Organism | Disease |
|---|---|
| Mycobacterium tuberculosis | TB-associated posterior uveitis (serpiginous-like choroiditis, choroidal granuloma, retinal vasculitis) |
| Treponema pallidum | Syphilitic posterior uveitis - "the great imitator" |
| Bartonella henselae/quintana | Cat-scratch disease, neuroretinitis (Leber's stellate) |
| Borrelia burgdorferi | Lyme disease-associated uveitis |
| Brucella spp. | Brucellosis |
| Tropheryma whipplei | Whipple disease |
| Nocardia spp. | Nocardiosis |
| Organism | Disease |
|---|---|
| Candida albicans | Endogenous fungal endophthalmitis (IV drug users, indwelling lines) |
| Aspergillus spp. | Endogenous endophthalmitis (immunocompromised) |
| Histoplasma capsulatum | Ocular Histoplasmosis Syndrome (OHS) - endemic Ohio-Mississippi valley |
| Cryptococcus neoformans | Cryptococcal chorioretinitis (immunocompromised) |
| Pneumocystis jirovecii | Pneumocystis choroiditis (HIV, CD4 <100) |
| Coccidioides immitis | Coccidioidomycosis (endemic desert Southwest USA) |
| Disease | Key Features | HLA Association |
|---|---|---|
| Birdshot chorioretinopathy | Cream ovoid lesions, radial from disc; diffuse vasculitis; chronic | HLA-A29 (96% sensitive) |
| APMPPE | Bilateral placoid lesions; young adult; viral prodrome; self-limited | None specific |
| Serpiginous choroiditis | Serpentine peripapillary; progressive; TB must be excluded | None specific |
| Ampiginous (Relentless Placoid) Choroiditis | Multifocal placoid; more widespread than APMPPE; recurrent | None specific |
| MFCPU | Multifocal choroiditis + panuveitis; young myopic women; punched-out scars | None specific |
| PIC (Punctate Inner Choroiditis) | Small deep lesions; young myopic women; no vitritis | None specific |
| SFU (Subretinal Fibrosis and Uveitis) | Progressive subretinal fibrosis; severe | None specific |
| MEWDS | Multiple evanescent white dots; perifoveal; self-limited; unilateral | None specific |
| AZOOR | Outer retinal degeneration; zonal VF loss; photopsias; ERG abnormal | None specific |
| Acute Idiopathic Maculopathy | Coxsackie-related; turbid subretinal fluid at macula | None specific |
| Disease | Key Systemic Features | HLA |
|---|---|---|
| Sarcoidosis | Lungs (BHL), skin (EN, nodules), joints | HLA-B8 (acute), HLA-B13 (chronic) |
| VKH Syndrome | Headache, tinnitus/deafness, meningismus, vitiligo, poliosis, alopecia | HLA-DR4 (Japanese/Hispanic) |
| Sympathetic Ophthalmia | History of penetrating trauma or surgery (fellow eye) | HLA-DR4 |
| Behcet Disease | Oral/genital ulcers, skin lesions, pathergy, arthritis, CNS | HLA-B51 |
| Disease | Key Features |
|---|---|
| SLE | Retinal vasculitis (arteritis), CRA/BRA occlusions; malar rash; young woman |
| PAN (Polyarteritis nodosa) | Arteritis; ischemic changes; systemic vasculitis |
| GPA (Granulomatosis with Polyangiitis) | Chronic sinusitis, epistaxis, pulmonary involvement; c-ANCA |
| Susac Syndrome | Triad: encephalopathy + sensorineural hearing loss + branch retinal artery occlusions |
| Category | Disease |
|---|---|
| Neoplastic | Vitreoretinal (primary) lymphoma (PVRL) |
| Uveal lymphoma | |
| Systemic lymphoma with ocular involvement | |
| Leukemia | |
| Choroidal metastases | |
| Malignant melanoma | |
| Retinoblastoma (children) | |
| Paraneoplastic | Cancer-Associated Retinopathy (CAR) - anti-recoverin |
| Melanoma-Associated Retinopathy (MAR) | |
| Non-neoplastic | Retinitis pigmentosa / inherited retinal dystrophy |
| Ocular ischemic syndrome | |
| Rhegmatogenous retinal detachment | |
| Vitreous hemorrhage | |
| Drug-induced retinopathy (checkpoint inhibitors, tamoxifen) |
OUTER RETINA / RPE / CHORIOCAPILLARIS
→ White Dot Syndromes (APMPPE, serpiginous, MEWDS, AZOOR, PIC)
→ VKH (early stage)
INNER CHOROID / CHOROID
→ Birdshot chorioretinopathy
→ Multifocal choroiditis (MFCPU, PIC, SFU)
→ Sarcoidosis (choroidal granulomas)
→ TB (subretinal abscess, choroidal granuloma)
RETINA (all layers - necrotizing)
→ ARN / BARN (HSV, VZV)
→ PORN (VZV, immunocompromised)
→ CMV retinitis (immunocompromised)
→ Toxoplasma (focal, superficial to full-thickness)
RETINAL VESSELS
→ Periphlebitis: Sarcoid, TB, MS, Eales, HIV, birdshot
→ Periarteritis: SLE, PAN, ARN/BARN, Susac
→ Occlusive: Behcet, ARN, Susac, SLE
SUBRETINAL SPACE
→ VKH (exudative RDs with fibrinous septa)
→ Sympathetic ophthalmia (Dalen-Fuchs nodules)
→ MFCPU, SFU (subretinal fibrosis)
| Type | Histology | Clinical Signs | Diseases |
|---|---|---|---|
| Granulomatous | Epithelioid cells, giant cells, non-caseating granulomas | Mutton-fat KPs, Koeppe/Busacca nodules, Dalen-Fuchs nodules, yellow choroidal granulomas | Sarcoidosis, TB, VKH, Sympathetic ophthalmia, leprosy |
| Non-granulomatous | Lymphocytes and plasma cells | Fine/stellate KPs, no iris nodules | Toxoplasma, viral (CMV, HSV), Behcet, SLE, most viral causes |
Granulomatous vs non-granulomatous does NOT always predict etiology and can change with treatment stage or chronicity.
| Immune Status | Key Entities |
|---|---|
| Immunocompetent | Toxoplasma, ARN (HSV/VZV), VKH, Behcet, sarcoidosis, birdshot, white dot syndromes, TB, syphilis |
| Immunocompromised (HIV CD4 <50) | CMV retinitis, PORN, toxoplasma (bilateral, atypical), Pneumocystis choroiditis, cryptococcal chorioretinitis, Candida endophthalmitis |
| Immunocompromised (transplant, biologics) | CMV, atypical fungal, atypical TB, viral (VZV) |
| Post-biologic therapy | Paradoxical TB reactivation, sarcoid-like syndrome, VKH-like panuveitis (checkpoint inhibitors) |
| Region / Population | Common Posterior Uveitis |
|---|---|
| Developing world | TB, toxoplasma, syphilis, onchocerciasis, DUSN |
| Middle East / Mediterranean / Asian | Behcet disease (HLA-B51) |
| Japan / Hispanic | VKH (HLA-DR4) |
| Ohio-Mississippi valley USA | OHS (Histoplasma) |
| Northern Europeans | Birdshot chorioretinopathy (HLA-A29) |
| Sub-Saharan Africa / Central America | Onchocerciasis |
| HIV-endemic regions | CMV retinitis, Pneumocystis choroiditis |
| Children | Toxocariasis, JIA-associated uveitis |
| Classification Axis | Categories |
|---|---|
| Anatomical (SUN) | Retinitis / Choroiditis / Chorioretinitis / Retinochoroiditis / Neuroretinitis / Retinal vasculitis |
| Temporal (SUN) | Acute / Recurrent / Chronic |
| Etiology | Infectious / Non-infectious / Masquerade |
| Granulomatous | Granulomatous / Non-granulomatous |
| Laterality | Unilateral / Bilateral / Asymmetric |
| Layer | Outer retina-RPE / Inner choroid / Full-thickness retina / Retinal vessels / Subretinal |
| Host immunity | Immunocompetent / Immunocompromised |
| Systemic association | Isolated ocular / Associated systemic disease |
| Morphology | Focal / Multifocal / Geographic / Placoid / Serpentine / Necrotizing / Punched-out |
Create a diagnostic flowchart PDF for differentiating posterior uveitis entities
ls /home/daytona/workspace/ && python3 -c "import reportlab; print('reportlab ok…
mkdir -p /home/daytona/workspace/posterior-uveitis-flowchart
~/posterior-uveitis-flowchart/generate_flowchart.py
#!/usr/bin/env python3
"""
Diagnostic Flowchart PDF for Differentiating Posterior Uveitis Entities
AAO BCSC 2025-26 / SUN 2021 criteria based
"""
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.pdfgen import canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph
from reportlab.lib.enums import TA_CENTER, TA_LEFT
import os
OUTPUT_PATH = "/home/daytona/workspace/posterior-uveitis-flowchart/Posterior_Uveitis_Diagnostic_Flowchart.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
C_TITLE_BG = colors.HexColor("#1B3A6B") # dark navy
C_TITLE_FG = colors.white
C_START = colors.HexColor("#1B3A6B") # dark navy
C_QUESTION = colors.HexColor("#1565C0") # blue
C_INFECT = colors.HexColor("#B71C1C") # deep red
C_NONINFECT = colors.HexColor("#1B5E20") # deep green
C_MASQUERADE = colors.HexColor("#4A148C") # deep purple
C_ENTITY = colors.HexColor("#E3F2FD") # very light blue bg
C_ENTITY_BRD = colors.HexColor("#1565C0") # blue border
C_INF_BG = colors.HexColor("#FFEBEE") # light red bg
C_INF_BRD = colors.HexColor("#B71C1C")
C_NONINF_BG = colors.HexColor("#E8F5E9") # light green bg
C_NONINF_BRD = colors.HexColor("#2E7D32")
C_MASK_BG = colors.HexColor("#EDE7F6") # light purple bg
C_MASK_BRD = colors.HexColor("#6A1B9A")
C_ARROW = colors.HexColor("#37474F")
C_YES = colors.HexColor("#2E7D32")
C_NO = colors.HexColor("#B71C1C")
C_SECTION_HDR = colors.HexColor("#E3F2FD")
C_WARN = colors.HexColor("#FFF8E1")
C_WARN_BRD = colors.HexColor("#F9A825")
C_HIGHLIGHT = colors.HexColor("#FF6F00") # amber for key rule
C_FOOTER = colors.HexColor("#546E7A")
PAGE_W, PAGE_H = landscape(A3)
def rounded_rect(c, x, y, w, h, r=4*mm, fill_color=None, stroke_color=None,
stroke_width=1):
if fill_color:
c.setFillColor(fill_color)
if stroke_color:
c.setStrokeColor(stroke_color)
c.setLineWidth(stroke_width)
c.roundRect(x, y, w, h, r, fill=1 if fill_color else 0,
stroke=1 if stroke_color else 0)
def diamond(c, cx, cy, w, h, fill_color, stroke_color, stroke_width=1.5):
"""Draw a diamond shape centred at (cx, cy)."""
path = c.beginPath()
path.moveTo(cx, cy + h/2)
path.lineTo(cx + w/2, cy)
path.lineTo(cx, cy - h/2)
path.lineTo(cx - w/2, cy)
path.close()
c.setFillColor(fill_color)
c.setStrokeColor(stroke_color)
c.setLineWidth(stroke_width)
c.drawPath(path, fill=1, stroke=1)
def arrow(c, x1, y1, x2, y2, color=C_ARROW, width=1.2, label=None,
label_color=C_ARROW, label_size=7):
c.setStrokeColor(color)
c.setLineWidth(width)
c.line(x1, y1, x2, y2)
# arrowhead
import math
angle = math.atan2(y2-y1, x2-x1)
hs = 5*mm
c.setFillColor(color)
path = c.beginPath()
path.moveTo(x2, y2)
path.lineTo(x2 - hs*math.cos(angle-0.4),
y2 - hs*math.sin(angle-0.4))
path.lineTo(x2 - hs*math.cos(angle+0.4),
y2 - hs*math.sin(angle+0.4))
path.close()
c.drawPath(path, fill=1, stroke=0)
if label:
mx, my = (x1+x2)/2, (y1+y2)/2
c.setFillColor(label_color)
c.setFont("Helvetica-Bold", label_size)
c.drawCentredString(mx, my+2*mm, label)
def text_box(c, x, y, w, h, text, font="Helvetica", size=7.5,
fg=colors.black, bg=None, border=None, bw=1,
align="centre", radius=3*mm, bold_first_line=False):
if bg:
rounded_rect(c, x, y, w, h, r=radius, fill_color=bg,
stroke_color=border or bg, stroke_width=bw)
if border and not bg:
rounded_rect(c, x, y, w, h, r=radius, stroke_color=border,
stroke_width=bw)
lines = text.strip().split('\n')
line_h = size * 1.35
total_text_h = len(lines) * line_h
start_y = y + h/2 + total_text_h/2 - line_h*0.8
for i, line in enumerate(lines):
ly = start_y - i*line_h
fn = (font+"-Bold") if (bold_first_line and i == 0) else font
# clamp font name
try:
c.setFont(fn, size)
except Exception:
c.setFont("Helvetica", size)
c.setFillColor(fg)
if align == "centre":
c.drawCentredString(x + w/2, ly, line)
elif align == "left":
c.drawString(x + 3*mm, ly, line)
def section_header(c, x, y, w, h, text, bg=C_TITLE_BG, fg=C_TITLE_FG):
rounded_rect(c, x, y, w, h, r=3*mm, fill_color=bg, stroke_color=bg)
c.setFont("Helvetica-Bold", 9)
c.setFillColor(fg)
c.drawCentredString(x+w/2, y+h/2-3, text)
# ─────────────────────────────────────────────────────────────────────────────
def build_pdf():
c = canvas.Canvas(OUTPUT_PATH, pagesize=landscape(A3))
W, H = PAGE_W, PAGE_H # 420 × 297 mm
# ── PAGE 1 ── MASTER OVERVIEW FLOWCHART ───────────────────────────────
draw_page1(c, W, H)
c.showPage()
# ── PAGE 2 ── INFECTIOUS POSTERIOR UVEITIS ─────────────────────────────
draw_page2(c, W, H)
c.showPage()
# ── PAGE 3 ── NON-INFECTIOUS POSTERIOR UVEITIS ────────────────────────
draw_page3(c, W, H)
c.showPage()
# ── PAGE 4 ── INVESTIGATION & TREATMENT QUICK-REFERENCE ──────────────
draw_page4(c, W, H)
c.showPage()
c.save()
print(f"PDF saved: {OUTPUT_PATH}")
# ─────────────────────────────────────────────────────────────────────────────
# PAGE 1 — MASTER DIAGNOSTIC OVERVIEW
# ─────────────────────────────────────────────────────────────────────────────
def draw_page1(c, W, H):
M = 10*mm
# Background
c.setFillColor(colors.HexColor("#F5F7FA"))
c.rect(0, 0, W, H, fill=1, stroke=0)
# Title bar
c.setFillColor(C_TITLE_BG)
c.rect(0, H-20*mm, W, 20*mm, fill=1, stroke=0)
c.setFillColor(colors.white)
c.setFont("Helvetica-Bold", 16)
c.drawCentredString(W/2, H-13*mm, "DIAGNOSTIC FLOWCHART: DIFFERENTIATING POSTERIOR UVEITIS ENTITIES")
c.setFont("Helvetica", 8)
c.drawCentredString(W/2, H-18*mm,
"Based on AAO BCSC 2025-26 Section 9 | SUN Working Group 2021 | Kanski's Clinical Ophthalmology 10th ed.")
# KEY RULE banner
bx, by, bw, bh = M, H-33*mm, W-2*M, 9*mm
rounded_rect(c, bx, by, bw, bh, r=2*mm,
fill_color=C_WARN, stroke_color=C_HIGHLIGHT, stroke_width=2)
c.setFont("Helvetica-Bold", 8.5)
c.setFillColor(C_HIGHLIGHT)
c.drawCentredString(W/2, by+bh/2-3,
"KEY RULE: Always test ALL patients for SYPHILIS (FTA-Abs/MHA-TP + RPR/VDRL). "
"Screen for TB (IGRA) when systemic IMT planned or when TB pattern suspected.")
# ── STEP 1: PRESENTATION ──────────────────────────────────────────────
y0 = H - 45*mm
# Start oval
sw, sh = 60*mm, 10*mm
sx = W/2 - sw/2
rounded_rect(c, sx, y0, sw, sh, r=5*mm,
fill_color=C_START, stroke_color=C_START)
c.setFont("Helvetica-Bold", 9)
c.setFillColor(colors.white)
c.drawCentredString(W/2, y0+sh/2-3, "PATIENT WITH POSTERIOR UVEITIS")
arrow(c, W/2, y0, W/2, y0-8*mm, color=C_ARROW, width=1.5)
# Step boxes row 1: 4 diagnostic steps
steps = [
("STEP 1\nSYMPTOMS",
"Blurred vision (painless)\nFloaters / Photopsias\nScotoma / Metamorphopsia\nNyctalopia"),
("STEP 2\nHISTORY",
"Age / Sex / Ethnicity\nSystemic Sx & ROS\nImmune status / HIV\nTravel / Exposures / Meds"),
("STEP 3\nEXAMINATION",
"SLE: KP type, AC cells\nVitreous: haze + cells\nFundus: retinitis/choroiditis\nVasculitis / Disc / Macula"),
("STEP 4\nIMAGING",
"OCT (CME, SRF, choroid)\nFA (vasculitis, leakage)\nICGA (choroidal lesions)\nFAF / B-scan / ERG"),
]
step_y = y0 - 8*mm - 22*mm
sw2 = (W - 2*M - 9*mm) / 4
for i, (title, body) in enumerate(steps):
bx2 = M + i*(sw2 + 3*mm)
rounded_rect(c, bx2, step_y, sw2, 22*mm, r=3*mm,
fill_color=colors.HexColor("#1565C0"),
stroke_color=colors.HexColor("#0D47A1"), stroke_width=1.5)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.white)
c.drawCentredString(bx2+sw2/2, step_y+22*mm-6*mm, title.split('\n')[0])
c.setFont("Helvetica-Bold", 7.5)
c.drawCentredString(bx2+sw2/2, step_y+22*mm-11*mm, title.split('\n')[1])
lines = body.split('\n')
lh = 4.2*mm
for j, ln in enumerate(lines):
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#E3F2FD"))
c.drawCentredString(bx2+sw2/2, step_y+14*mm - j*lh, ln)
# Connect steps with horizontal arrow
for i in range(3):
ax = M + (i+1)*(sw2 + 3*mm) - 3*mm
ay = step_y + 11*mm
arrow(c, ax, ay, ax+3*mm, ay, color=colors.white, width=1)
# Down arrow to PATTERN RECOGNITION
arrow(c, W/2, step_y, W/2, step_y-8*mm, color=C_ARROW, width=1.5)
# Pattern recognition box
pr_y = step_y - 8*mm - 12*mm
pr_w = 100*mm
rounded_rect(c, W/2-pr_w/2, pr_y, pr_w, 12*mm, r=3*mm,
fill_color=colors.HexColor("#37474F"),
stroke_color=colors.HexColor("#263238"), stroke_width=1.5)
c.setFont("Helvetica-Bold", 9)
c.setFillColor(colors.white)
c.drawCentredString(W/2, pr_y+12*mm-5*mm, "STEP 5: PATTERN RECOGNITION")
c.setFont("Helvetica", 7.5)
c.drawCentredString(W/2, pr_y+4*mm, "→ Formulate working differential diagnosis")
# Arrow to 3-branch diamond
arrow(c, W/2, pr_y, W/2, pr_y-9*mm, color=C_ARROW, width=1.5)
# Diamond question
diam_cy = pr_y - 9*mm - 10*mm
diamond(c, W/2, diam_cy, 80*mm, 20*mm,
fill_color=colors.HexColor("#FFF9C4"),
stroke_color=colors.HexColor("#F57F17"), stroke_width=2)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.HexColor("#E65100"))
c.drawCentredString(W/2, diam_cy+3*mm, "Evidence of INFECTION")
c.drawCentredString(W/2, diam_cy-3*mm, "or MASQUERADE?")
# Three branches
branch_y = diam_cy - 10*mm
bx_inf = M + 5*mm
bx_noni = W/2 - 25*mm
bx_mask = W - M - 5*mm - 70*mm
# YES (infectious) → left
arrow(c, W/2 - 40*mm, diam_cy, bx_inf + 35*mm, diam_cy,
color=C_YES, width=1.5, label="YES - Infection", label_color=C_YES, label_size=7.5)
arrow(c, bx_inf + 35*mm, diam_cy, bx_inf + 35*mm, branch_y,
color=C_YES, width=1.5)
# NO (non-infectious) → centre
arrow(c, W/2, diam_cy - 10*mm, W/2, branch_y,
color=C_NO, width=1.5, label="NO", label_color=C_NO, label_size=7.5)
# MASQUERADE → right
arrow(c, W/2 + 40*mm, diam_cy, bx_mask + 35*mm, diam_cy,
color=C_MASK_BRD, width=1.5, label="?Masquerade", label_color=C_MASK_BRD, label_size=7.5)
arrow(c, bx_mask + 35*mm, diam_cy, bx_mask + 35*mm, branch_y,
color=C_MASK_BRD, width=1.5)
# Three main category boxes
cat_h = 55*mm
# INFECTIOUS
ix = M
iw = W/3 - M - 3*mm
iy = branch_y - cat_h
rounded_rect(c, ix, iy, iw, cat_h, r=4*mm,
fill_color=C_INF_BG, stroke_color=C_INF_BRD, stroke_width=2)
section_header(c, ix, iy+cat_h-10*mm, iw, 10*mm,
"INFECTIOUS POSTERIOR UVEITIS", bg=C_INFECT)
inf_items = [
("PARASITIC", "Toxoplasma (most common worldwide)"),
("", "Toxocariasis | DUSN | Cysticercosis"),
("VIRAL", "ARN/BARN/PORN (HSV, VZV)"),
("", "CMV retinitis (CD4 <50) | HIV"),
("BACTERIAL", "TB | Syphilis | Bartonella | Brucella"),
("", "Lyme | Whipple | Nocardia"),
("FUNGAL", "Candida | Aspergillus | OHS"),
("", "Cryptococcus | Pneumocystis"),
]
lh2 = 5.8*mm
for k, (cat, detail) in enumerate(inf_items):
ky = iy + cat_h - 14*mm - k*lh2
if cat:
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_INFECT)
c.drawString(ix+3*mm, ky, cat + ":")
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(ix + (22*mm if cat else 3*mm), ky, detail)
# NON-INFECTIOUS
nx = W/3 + 2*mm
nw = W/3 - 4*mm
ny = branch_y - cat_h
rounded_rect(c, nx, ny, nw, cat_h, r=4*mm,
fill_color=C_NONINF_BG, stroke_color=C_NONINF_BRD, stroke_width=2)
section_header(c, nx, ny+cat_h-10*mm, nw, 10*mm,
"NON-INFECTIOUS POSTERIOR UVEITIS", bg=C_NONINFECT)
noninf_items = [
("WHITE DOT", "Birdshot (HLA-A29)"),
("SYNDROMES", "APMPPE | Serpiginous choroiditis"),
("", "MFCPU / PIC / SFU | MEWDS | AZOOR"),
("SYSTEMIC", "Sarcoidosis | VKH syndrome"),
("ASSOC.", "Behcet disease | Sympathetic ophthalmia"),
("", "SLE | PAN | GPA | Susac syndrome"),
("IDIOPATHIC", "Undifferentiated / Idiopathic"),
("", "(after exclusion of all above)"),
]
for k, (cat, detail) in enumerate(noninf_items):
ky = ny + cat_h - 14*mm - k*lh2
if cat:
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_NONINFECT)
c.drawString(nx+3*mm, ky, cat + ":")
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(nx + (24*mm if cat else 3*mm), ky, detail)
# MASQUERADE
mx2 = 2*W/3 + 2*mm
mw = W/3 - M - 5*mm
my2 = branch_y - cat_h
rounded_rect(c, mx2, my2, mw, cat_h, r=4*mm,
fill_color=C_MASK_BG, stroke_color=C_MASK_BRD, stroke_width=2)
section_header(c, mx2, my2+cat_h-10*mm, mw, 10*mm,
"MASQUERADE SYNDROMES", bg=C_MASQUERADE)
mask_items = [
("NEOPLASTIC", "Vitreoretinal lymphoma (PVRL)"),
("", "Uveal lymphoma | Leukemia"),
("", "Choroidal metastases"),
("", "Malignant melanoma | Retinoblastoma"),
("PARANEO-", "CAR (anti-recoverin)"),
("PLASTIC", "MAR (melanoma-assoc. retinopathy)"),
("OTHER", "Retinitis pigmentosa | RD"),
("", "Ocular ischemic syndrome"),
]
for k, (cat, detail) in enumerate(mask_items):
ky = my2 + cat_h - 14*mm - k*lh2
if cat:
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_MASQUERADE)
c.drawString(mx2+3*mm, ky, cat + ":")
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(mx2 + (24*mm if cat else 3*mm), ky, detail)
# ── INVESTIGATIONS row ───────────────────────────────────────────────
arrow(c, ix+iw/2, iy, ix+iw/2, iy-7*mm, color=C_INFECT, width=1.2)
arrow(c, nx+nw/2, ny, nx+nw/2, ny-7*mm, color=C_NONINFECT, width=1.2)
arrow(c, mx2+mw/2, my2, mx2+mw/2, my2-7*mm, color=C_MASQUERADE, width=1.2)
inv_y = iy - 7*mm - 16*mm
inv_items = [
(ix, iw, C_INF_BG, C_INF_BRD, C_INFECT,
"TARGETED INVESTIGATIONS",
"Syphilis: FTA-Abs + RPR/VDRL\nIGRA / PPD | CXR\nToxoplasma IgG/IgM\nVitreous/Aqueous PCR\nHIV CD4 count\nFungal serology"),
(nx, nw, C_NONINF_BG, C_NONINF_BRD, C_NONINFECT,
"TARGETED INVESTIGATIONS",
"Syphilis + TB (exclude first!)\nHLA-A29 (Birdshot)\nACE + Lysozyme (Sarcoid)\nANA/dsDNA (SLE)\nCSF (VKH/sarcoid/lymphoma)\nERG + VF (Birdshot/AZOOR)"),
(mx2, mw, C_MASK_BG, C_MASK_BRD, C_MASQUERADE,
"TARGETED INVESTIGATIONS",
"Vitrectomy: cytology\nIL-10:IL-6 ratio (>1 = VRL)\nMYD88 mutation\nBrain MRI\nARA antibodies (CAR/MAR)\nOncology workup"),
]
for (bx3, bw3, bg3, brd3, hdr_c, hdr, body) in inv_items:
rounded_rect(c, bx3, inv_y, bw3, 16*mm, r=3*mm, fill_color=bg3,
stroke_color=brd3, stroke_width=1.5)
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(hdr_c)
c.drawCentredString(bx3+bw3/2, inv_y+16*mm-5*mm, hdr)
lines = body.split('\n')
lh3 = 3.8*mm
for j2, ln2 in enumerate(lines):
c.setFont("Helvetica", 6.5)
c.setFillColor(colors.HexColor("#37474F"))
c.drawCentredString(bx3+bw3/2, inv_y+12*mm - j2*lh3, ln2)
# Footer
c.setFont("Helvetica", 6.5)
c.setFillColor(C_FOOTER)
c.drawCentredString(W/2, 5*mm,
"Page 1 of 4 | For educational use | "
"AAO BCSC 2025-26, SUN 2021, Kanski's 10th ed. | "
"See Pages 2-4 for detailed sub-flowcharts")
# ─────────────────────────────────────────────────────────────────────────────
# PAGE 2 — INFECTIOUS POSTERIOR UVEITIS FLOWCHART
# ─────────────────────────────────────────────────────────────────────────────
def draw_page2(c, W, H):
# Background
c.setFillColor(colors.HexColor("#FFF8F8"))
c.rect(0, 0, W, H, fill=1, stroke=0)
# Title
c.setFillColor(C_INFECT)
c.rect(0, H-20*mm, W, 20*mm, fill=1, stroke=0)
c.setFont("Helvetica-Bold", 14)
c.setFillColor(colors.white)
c.drawCentredString(W/2, H-12*mm, "INFECTIOUS POSTERIOR UVEITIS — DIFFERENTIAL DIAGNOSIS FLOWCHART")
c.setFont("Helvetica", 8)
c.drawCentredString(W/2, H-17.5*mm, "AAO BCSC 2025-26 | SUN 2021")
M = 8*mm
# ── IMMUNE STATUS diamond ─────────────────────────────────────────────
arrow(c, W/2, H-20*mm, W/2, H-33*mm, color=C_ARROW)
diamond(c, W/2, H-40*mm, 80*mm, 18*mm,
fill_color=colors.HexColor("#FFF9C4"),
stroke_color=colors.HexColor("#F57F17"), stroke_width=2)
c.setFont("Helvetica-Bold", 8.5)
c.setFillColor(colors.HexColor("#E65100"))
c.drawCentredString(W/2, H-39*mm, "IMMUNOCOMPROMISED?")
c.drawCentredString(W/2, H-43.5*mm, "(HIV CD4<50 / transplant / chemotherapy)")
# YES branch (right) → immunocompromised
arrow(c, W/2+40*mm, H-40*mm, W-M-50*mm, H-40*mm,
color=C_YES, width=1.5, label="YES", label_color=C_YES)
arrow(c, W-M-50*mm, H-40*mm, W-M-50*mm, H-52*mm,
color=C_YES, width=1.5)
# NO branch (down) → immunocompetent
arrow(c, W/2, H-49*mm, W/2, H-62*mm,
color=C_NO, width=1.5, label="NO", label_color=C_NO)
# ── IMMUNOCOMPETENT branch ───────────────────────────────────────────
# Second diamond: Focal lesion adjacent to scar?
diamond(c, W/2, H-69*mm, 85*mm, 18*mm,
fill_color=colors.HexColor("#FEFDE7"),
stroke_color=colors.HexColor("#F9A825"), stroke_width=1.5)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.HexColor("#E65100"))
c.drawCentredString(W/2, H-68*mm, "FOCAL lesion adjacent")
c.drawCentredString(W/2, H-72.5*mm, "to OLD PIGMENTED SCAR?")
# YES → Toxoplasma
tx = W/2 - 42.5*mm
arrow(c, tx, H-69*mm, tx-15*mm, H-69*mm,
color=C_YES, width=1.5, label="YES", label_color=C_YES)
arrow(c, tx-15*mm, H-69*mm, tx-15*mm, H-80*mm, color=C_YES, width=1.5)
tox_bx = M
tox_w = 70*mm
tox_y = H-80*mm - 28*mm
rounded_rect(c, tox_bx, tox_y, tox_w, 28*mm, r=4*mm,
fill_color=C_INF_BG, stroke_color=C_INFECT, stroke_width=2)
section_header(c, tox_bx, tox_y+28*mm-10*mm, tox_w, 10*mm,
"TOXOPLASMA CHORIORETINITIS", bg=C_INFECT)
tox_lines = [
"Most common infect. PU worldwide",
"\"Headlight in fog\" appearance",
"Focal vitritis overlying lesion",
"Dx: Clinical; Toxoplasma IgG; AQ PCR",
"Rx: Pyrimethamine + Sulfadiazine",
"+ Folinic acid ± Prednisolone",
]
for k, ln in enumerate(tox_lines):
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(tox_bx+3*mm, tox_y+17*mm - k*3.8*mm, ln)
# NO → further questions
arrow(c, W/2, H-78*mm, W/2, H-91*mm,
color=C_NO, width=1.5, label="NO", label_color=C_NO)
# Third diamond: Necrotizing peripheral retinitis?
diamond(c, W/2, H-97*mm, 85*mm, 16*mm,
fill_color=colors.HexColor("#FEFDE7"),
stroke_color=colors.HexColor("#F9A825"), stroke_width=1.5)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.HexColor("#E65100"))
c.drawCentredString(W/2, H-96*mm, "PERIPHERAL NECROTIZING")
c.drawCentredString(W/2, H-100*mm, "RETINITIS + ARTERITIS?")
# YES → ARN
arrow(c, W/2-42.5*mm, H-97*mm, W/2-65*mm, H-97*mm,
color=C_YES, width=1.5, label="YES", label_color=C_YES)
arrow(c, W/2-65*mm, H-97*mm, W/2-65*mm, H-108*mm, color=C_YES, width=1.5)
arn_x = M
arn_w = 95*mm
arn_y = H-108*mm - 35*mm
rounded_rect(c, arn_x, arn_y, arn_w, 35*mm, r=4*mm,
fill_color=C_INF_BG, stroke_color=C_INFECT, stroke_width=2)
section_header(c, arn_x, arn_y+35*mm-10*mm, arn_w, 10*mm,
"ACUTE RETINAL NECROSIS (ARN) — HSV/VZV", bg=C_INFECT)
arn_lines = [
"ARN TRIAD: peripheral necrosis + circumferential spread",
"+ occlusive arteritis | Moderate-severe vitritis",
"VZV most common; BARN = bilateral (30% within 6wk)",
"PORN: immunocompromised, rapid, minimal vitritis",
"Dx: AQ/vitreous PCR (HSV-1/2, VZV) — highly specific",
"Rx: IV Acyclovir 10mg/kg TID x 7d → oral Valacyclovir",
" 1g TDS x 14 weeks | Prophylactic laser (RD risk 75%)",
]
for k, ln in enumerate(arn_lines):
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(arn_x+3*mm, arn_y+24*mm - k*4*mm, ln)
# NO → TB / Syphilis / Bacterial
arrow(c, W/2+42.5*mm, H-97*mm, W/2+65*mm, H-97*mm,
color=C_NO, width=1.5, label="NO", label_color=C_NO)
arrow(c, W/2+65*mm, H-97*mm, W/2+65*mm, H-108*mm, color=C_NO, width=1.5)
tbsyph_x = W/2 + 25*mm
tbsyph_w = W - M - tbsyph_x
tbsyph_y = H-108*mm - 35*mm
rounded_rect(c, tbsyph_x, tbsyph_y, tbsyph_w, 35*mm, r=4*mm,
fill_color=C_INF_BG, stroke_color=C_INFECT, stroke_width=2)
section_header(c, tbsyph_x, tbsyph_y+35*mm-10*mm, tbsyph_w, 10*mm,
"TB / SYPHILIS / BACTERIAL / FUNGAL", bg=C_INFECT)
tbsyph_lines = [
"TB: serpiginous-like / choroidal granuloma /",
" retinal vasculitis — IGRA + CXR/CT",
"SYPHILIS: \"great imitator\" — any pattern",
" FTA-Abs/MHA-TP + RPR/VDRL (all patients!)",
"BARTONELLA: neuroretinitis (stellate macular star)",
"FUNGAL: Candida (IV drug use / indwelling lines)",
" Histoplasma: OHS pattern (endemic regions)",
]
for k, ln in enumerate(tbsyph_lines):
c.setFont("Helvetica", 7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(tbsyph_x+3*mm, tbsyph_y+24*mm - k*4*mm, ln)
# ── IMMUNOCOMPROMISED branch ──────────────────────────────────────────
ic_x = W - M - 95*mm
ic_w = 95*mm
ic_y = H-52*mm - 90*mm
rounded_rect(c, ic_x, ic_y, ic_w, 90*mm, r=4*mm,
fill_color=C_INF_BG, stroke_color=C_INFECT, stroke_width=2)
section_header(c, ic_x, ic_y+90*mm-10*mm, ic_w, 10*mm,
"IMMUNOCOMPROMISED HOST", bg=C_INFECT)
ic_blocks = [
("CMV RETINITIS (CD4 <50)",
"Brush-fire border; full-thickness necrosis\n\"Pizza pie\" hemorrhage + necrosis\nDx: CD4 count; vitreous CMV PCR\nRx: IV Ganciclovir → Valganciclovir\n + HAART (most important)"),
("PORN — VZV (CD4 <50)",
"Rapid outer retinal necrosis\nMinimal vitritis; perivenous sparing\nVery poor prognosis\nRx: IV Acyclovir + Ganciclovir + HAART"),
("TOXOPLASMA (atypical)",
"Bilateral; multifocal; no old scar\nVitreous/AQ PCR; CD4 count\nRx: Pyrimethamine + Sulfa (longer course)"),
("FUNGAL (Candida/Aspergillus)",
"IV drug use; indwelling lines; TPN\nDx: Blood cultures; beta-D-glucan\nRx: Systemic antifungal + vitrectomy"),
]
blk_y = ic_y + 78*mm
for bname, btext in ic_blocks:
blk_y -= 20*mm
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_INFECT)
c.drawString(ic_x+3*mm, blk_y, "► " + bname)
lines = btext.split('\n')
for j, ln in enumerate(lines):
c.setFont("Helvetica", 6.8)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(ic_x+5*mm, blk_y-4*mm - j*3.6*mm, ln)
# Footer
c.setFont("Helvetica", 6.5)
c.setFillColor(C_FOOTER)
c.drawCentredString(W/2, 5*mm,
"Page 2 of 4 | Infectious Posterior Uveitis | "
"AAO BCSC 2025-26 | See Page 1 for Master Flowchart")
# ─────────────────────────────────────────────────────────────────────────────
# PAGE 3 — NON-INFECTIOUS POSTERIOR UVEITIS
# ─────────────────────────────────────────────────────────────────────────────
def draw_page3(c, W, H):
c.setFillColor(colors.HexColor("#F1F8E9"))
c.rect(0, 0, W, H, fill=1, stroke=0)
c.setFillColor(C_NONINFECT)
c.rect(0, H-20*mm, W, 20*mm, fill=1, stroke=0)
c.setFont("Helvetica-Bold", 13)
c.setFillColor(colors.white)
c.drawCentredString(W/2, H-12*mm,
"NON-INFECTIOUS POSTERIOR UVEITIS — DIFFERENTIAL DIAGNOSIS FLOWCHART")
c.setFont("Helvetica", 8)
c.drawCentredString(W/2, H-17.5*mm,
"AAO BCSC 2025-26 | SUN 2021 | After EXCLUDING infection (syphilis, TB, viral)")
M = 8*mm
# Important warning
bw, bh = W-2*M, 8*mm
rounded_rect(c, M, H-30*mm, bw, bh, r=2*mm,
fill_color=C_WARN, stroke_color=C_WARN_BRD, stroke_width=1.5)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.HexColor("#E65100"))
c.drawCentredString(W/2, H-30*mm+bh/2-3,
"PREREQUISITE: Exclude SYPHILIS and TB before labelling as non-infectious. "
"Serpiginous choroiditis pattern → TB MUST be excluded first.")
# ── TWO-COLUMN LAYOUT ─────────────────────────────────────────────────
# Left: WHITE DOT SYNDROMES
# Right: SYSTEMIC / VASCULITIC
col_y_top = H-42*mm
lcol_x = M
lcol_w = W*0.52 - M - 3*mm
rcol_x = W*0.52 + 3*mm
rcol_w = W - rcol_x - M
# LEFT COLUMN HEADER
section_header(c, lcol_x, col_y_top, lcol_w, 9*mm,
"WHITE DOT SYNDROMES (Usually no systemic disease)", bg=C_NONINFECT)
wds_entities = [
("BIRDSHOT CHORIORETINOPATHY",
"HLA-A29+ (96% sens) | Middle-aged | N. European\n"
"Cream ovoid lesions; radial from disc; 50-1500µm\n"
"Diffuse retinal vasculitis | Minimal AC cells\n"
"⚠ VA may be 20/20 while VF/ERG progressively worsen\n"
"Dx: HLA-A29; full-field ERG; Humphrey 24-2 VF; FA/ICGA\n"
"Rx: Long-term IMT (MTX/MMF/AZA ± TNF inhibitor)"),
("APMPPE",
"Bilateral placoid grey-white lesions; young adult; viral prodrome\n"
"FA: early blockage → late staining (choriocapillaritis)\n"
"Usually SELF-LIMITED; beware cerebrovasculitis (headache/CSF)\n"
"Dx: Clinical + FA/ICGA/FAF; rule out TB+syphilis\n"
"Rx: Observation; systemic steroids if CNS involvement"),
("SERPIGINOUS CHOROIDITIS",
"Serpentine; peripapillary origin; progressive atrophy\n"
"FA: early hypoFl → late staining at active border\n"
"⚠ TB-associated serpiginous-like choroiditis MUST be excluded\n"
"Dx: Clinical + FA + OCT; IGRA/PPD mandatory\n"
"Rx: Triple IMT (antimetabolite + T-cell inhibitor ± alkylating)"),
("MFCPU / PIC / SFU",
"Young myopic women | Multifocal punched-out scars\n"
"MFCPU: vitritis + AC cells | PIC: no vitritis\n"
"SFU: progressive subretinal fibrosis; worst prognosis\n"
"DD: Sarcoid / OHS / TB / Birdshot\n"
"Rx: Systemic IMT essential (83% reduction in complications)"),
("MEWDS",
"Young female | Unilateral | Self-limited\n"
"Perifoveal white dots; peau d'orange fovea; ↑blind spot\n"
"ERG: reversible ↓a-wave; ICGA: hypocyanescent spots\n"
"Rx: Observation; resolves in weeks"),
("AZOOR",
"Outer retinal degeneration | Photopsias; zonal VF loss\n"
"Fundus may be NORMAL at presentation\n"
"ERG: markedly abnormal | FAF: hypoAF zones\n"
"Rx: Systemic steroids/IMT; variable response"),
]
ent_y = col_y_top
ent_h_list = [25*mm, 22*mm, 22*mm, 22*mm, 18*mm, 18*mm]
for i, ((ename, ebody), eh) in enumerate(zip(wds_entities, ent_h_list)):
ent_y -= eh + 1.5*mm
if ent_y < 10*mm: break
rounded_rect(c, lcol_x, ent_y, lcol_w, eh, r=3*mm,
fill_color=C_NONINF_BG, stroke_color=C_NONINF_BRD, stroke_width=1.5)
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_NONINFECT)
c.drawString(lcol_x+3*mm, ent_y+eh-6*mm, ename)
lines = ebody.split('\n')
for j, ln in enumerate(lines):
c.setFont("Helvetica", 6.8)
c.setFillColor(colors.HexColor("#1A237E") if "⚠" in ln else colors.HexColor("#37474F"))
c.drawString(lcol_x+3*mm, ent_y+eh-11*mm - j*3.8*mm, ln)
# RIGHT COLUMN
section_header(c, rcol_x, col_y_top, rcol_w, 9*mm,
"POSTERIOR UVEITIS WITH SYSTEMIC MANIFESTATIONS", bg=C_NONINFECT)
systemic_entities = [
("VKH SYNDROME (Vogt-Koyanagi-Harada)",
"Prodrome: headache, tinnitus, dysacusis, meningismus\n"
"EARLY: bilateral granulomatous panuveitis + multiple serous RDs\n"
"LATE: sunset glow fundus, Sugiura sign, poliosis, vitiligo, alopecia\n"
"HLA-DR4 (Japanese/Hispanic) | CSF: lymphocytic pleocytosis\n"
"Dx: SUN 2021 criteria; FA (pinpoint hyper-Fl + pooling); EDI-OCT (choroidal ↑↑)\n"
"Rx: High-dose pred (1mg/kg/d) + early IMT; SLOW taper 6-12 months"),
("BEHCET DISEASE",
"Oral aphthae (≥3/yr) + genital ulcers + ocular inflammation\n"
"Occlusive retinal vasculitis (arteries + veins); chalky white retinitis\n"
"HLA-B51; mobile hypopyon (classic but rare)\n"
"FA: ferning capillaritis; non-perfusion; optic disc leakage\n"
"Dx: ISG criteria (Table); clinical; HLA-B51 supportive only\n"
"Rx: TNF inhibitors (infliximab/adalimumab) FIRST-LINE for severe PU"),
("SARCOIDOSIS",
"Multisystem granulomatous disease; lungs (90%), eyes (12-50%)\n"
"Posterior: small yellow choroidal granulomas; \"candlewax drippings\"\n"
"ICGA: hypocyanescent spots >> FA findings\n"
"Dx: CXR (BHL); ACE + lysozyme (sens 61%, spec 88% combined)\n"
" Biopsy (non-caseating granuloma) for definitive diagnosis\n"
"Rx: Local/systemic steroids; IMT (MTX/MMF/AZA); adalimumab/infliximab"),
("SYMPATHETIC OPHTHALMIA",
"BILATERAL granulomatous panuveitis after PENETRATING TRAUMA/SURGERY\n"
"Exciting eye (injured) → sympathizing eye (fellow eye)\n"
"Dalen-Fuchs nodules; multiple serous RDs; similar to VKH\n"
"DD from VKH: history of ocular trauma/surgery\n"
"Rx: High-dose steroids + IMT; enucleation of NLP traumatized eye"),
("SLE / VASCULITIDES",
"SLE: Retinal arteritis; BRA occlusions; cotton-wool spots\n"
" Young woman; ANA/anti-dsDNA/antiphospholipid antibodies\n"
"PAN: Arteritis; ischemic changes; systemic vasculitis\n"
"GPA: Scleritis; orbital involvement; c-ANCA; sinusitis\n"
"Susac: Encephalopathy + SNHL + branch retinal artery occlusions"),
]
sysh_list = [27*mm, 25*mm, 25*mm, 22*mm, 22*mm]
sys_y = col_y_top
for i, ((sname, sbody), sh2) in enumerate(zip(systemic_entities, sysh_list)):
sys_y -= sh2 + 1.5*mm
if sys_y < 10*mm: break
rounded_rect(c, rcol_x, sys_y, rcol_w, sh2, r=3*mm,
fill_color=C_NONINF_BG, stroke_color=C_NONINF_BRD, stroke_width=1.5)
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_NONINFECT)
c.drawString(rcol_x+3*mm, sys_y+sh2-6*mm, sname)
slines = sbody.split('\n')
for j, sln in enumerate(slines):
c.setFont("Helvetica", 6.8)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(rcol_x+3*mm, sys_y+sh2-11*mm - j*3.8*mm, sln)
c.setFont("Helvetica", 6.5)
c.setFillColor(C_FOOTER)
c.drawCentredString(W/2, 5*mm,
"Page 3 of 4 | Non-Infectious Posterior Uveitis | "
"AAO BCSC 2025-26 | See Page 4 for Investigations & Treatment")
# ─────────────────────────────────────────────────────────────────────────────
# PAGE 4 — INVESTIGATIONS & TREATMENT QUICK-REFERENCE
# ─────────────────────────────────────────────────────────────────────────────
def draw_page4(c, W, H):
c.setFillColor(colors.HexColor("#F3E5F5"))
c.rect(0, 0, W, H, fill=1, stroke=0)
c.setFillColor(C_TITLE_BG)
c.rect(0, H-20*mm, W, 20*mm, fill=1, stroke=0)
c.setFont("Helvetica-Bold", 13)
c.setFillColor(colors.white)
c.drawCentredString(W/2, H-12*mm,
"POSTERIOR UVEITIS — INVESTIGATIONS & TREATMENT QUICK-REFERENCE")
c.setFont("Helvetica", 8)
c.drawCentredString(W/2, H-17.5*mm,
"AAO BCSC 2025-26 | SUN 2021 | IMT = Immunomodulatory Therapy")
M = 8*mm
col_gap = 5*mm
col3_w = (W - 2*M - 2*col_gap) / 3
c1x = M
c2x = M + col3_w + col_gap
c3x = M + 2*(col3_w + col_gap)
top_y = H - 23*mm
# ── COLUMN 1: INVESTIGATIONS TABLE ────────────────────────────────────
section_header(c, c1x, top_y-8*mm, col3_w, 8*mm,
"TARGETED INVESTIGATIONS", bg=C_TITLE_BG)
inv_data = [
("ALL PATIENTS", "red",
[("Syphilis (FTA-Abs/MHA-TP)", "ALL uveitis"),
("Reflex RPR/VDRL", "ALL uveitis"),
("IGRA (QuantiFERON-TB Gold)", "IMT planned / TB pattern")]),
("SEROLOGY", "blue",
[("ACE + Lysozyme", "Sarcoidosis (61% sens combined)"),
("Toxoplasma IgG/IgM", "Toxoplasma chorioretinitis"),
("Toxocara ELISA", "Child; peripheral granuloma"),
("HIV serology", "Immunocompromised / atypical"),
("Bartonella IgG", "Neuroretinitis / cat exposure"),
("Fungal serology", "Candida/Aspergillus suspected")]),
("HLA TYPING", "purple",
[("HLA-A29", "Birdshot (96% sens, 93% spec)"),
("HLA-B27", "Spondyloarthropathy / AAU"),
("HLA-B51", "Behcet (supportive only)"),
("HLA-DR4", "VKH (Japanese/Hispanic)")]),
("AUTOIMMUNE", "green",
[("ANA", "SLE / JIA (low PPV 4.4%)"),
("Anti-dsDNA, anti-Sm", "SLE if clinically suspected"),
("Antiphospholipid Ab", "Thrombotic / vasculitic"),
("ANCA (c- and p-)", "GPA / microscopic polyangiitis")]),
("IMAGING", "navy",
[("CXR", "Sarcoidosis (BHL) / TB"),
("CT Chest", "Sarcoid / TB (if CXR equivocal)"),
("Brain MRI", "Lymphoma / Susac / VKH / MS"),
("B-scan US", "Media opacity / T-sign (scleritis)")]),
("INTRAOCULAR", "dark_red",
[("AQ/Vit PCR: HSV,VZV,CMV,Toxo", "Viral/parasitic PU; immunocomp"),
("Pan-bact 16S; Pan-fung 18S", "Endophthalmitis / bacterial"),
("Cytology + IL-10:IL-6 ratio", "Vitreoretinal lymphoma (>1)"),
("MYD88 mutation; IgH/TCR", "Vitreoretinal lymphoma"),
("Goldmann-Witmer Coeff >3", "Local ocular infection")]),
]
col_colors = {
"red": (colors.HexColor("#FFEBEE"), C_INFECT),
"blue": (C_ENTITY, C_QUESTION),
"purple": (colors.HexColor("#EDE7F6"), C_MASQUERADE),
"green": (C_NONINF_BG, C_NONINFECT),
"navy": (colors.HexColor("#E8EAF6"), colors.HexColor("#1A237E")),
"dark_red": (colors.HexColor("#FCE4EC"), colors.HexColor("#880E4F")),
}
row_y = top_y - 8*mm
for (cat, ctype, rows) in inv_data:
bg_c, hdr_c = col_colors[ctype]
cat_h = (len(rows) + 1) * 4.5*mm + 2*mm
row_y -= cat_h
if row_y < 10*mm: break
rounded_rect(c, c1x, row_y, col3_w, cat_h, r=2*mm,
fill_color=bg_c, stroke_color=hdr_c, stroke_width=1)
c.setFont("Helvetica-Bold", 7)
c.setFillColor(hdr_c)
c.drawString(c1x+2*mm, row_y+cat_h-5*mm, cat)
for rj, (test, indication) in enumerate(rows):
c.setFont("Helvetica-Bold", 6.5)
c.setFillColor(colors.HexColor("#212121"))
c.drawString(c1x+2*mm, row_y+cat_h-10*mm - rj*4.5*mm, "• " + test)
c.setFont("Helvetica", 6.2)
c.setFillColor(colors.HexColor("#546E7A"))
c.drawString(c1x+2*mm, row_y+cat_h-14*mm - rj*4.5*mm, " → " + indication)
# ── COLUMN 2: TREATMENT OVERVIEW ──────────────────────────────────────
section_header(c, c2x, top_y-8*mm, col3_w, 8*mm,
"TREATMENT FRAMEWORK", bg=C_TITLE_BG)
treat_blocks = [
("FUNDAMENTAL PRINCIPLES (AAO BCSC 2025-26)",
colors.HexColor("#E8EAF6"), colors.HexColor("#1A237E"),
["1. Confirm ABSENCE OF INFECTION before immunosuppression",
"2. Quiet inflammation with CORTICOSTEROIDS",
"3. If worsening on steroids → RECONSIDER INFECTION",
"4. Taper steroids to ≤7.5 mg/day prednisone",
"5. Steroid-dependent → Add SYSTEMIC IMT",
"6. Antimetabolites = first-line IMT",
"7. Biologics (TNF inhibitors) for severe/refractory",
"8. Maintain IMT ≥12 months quiescence before taper"]),
("LOCAL CORTICOSTEROIDS",
colors.HexColor("#E3F2FD"), colors.HexColor("#1565C0"),
["Topical: anterior spillover only",
"Sub-Tenon TA: posterior effect; peak 4wk; ~3mo duration",
"Orbital floor injection: lower ptosis/perforation risk",
"Intravitreal TA 4mg: CME; IOP↑ in >50%",
"Dexamethasone implant (Ozurdex): biodegradable;",
" FDA-approved posterior NI uveitis; ~4-6 months",
"FAi (Yutiq 0.18mg): 36 months; recurrence ↓97→28%",
"Retisert (0.59mg): surgical; ~30 mo; universal PSC cataract",
"Suprachoroidal TA (Xipere): FDA-approved 2021"]),
("SYSTEMIC IMT — ANTIMETABOLITES (1st line)",
C_NONINF_BG, C_NONINFECT,
["Methotrexate 15-25mg/wk SC/oral + folic acid 1-2mg/d",
" Full effect 3-6 months; teratogenic; hepatotoxicity",
"Mycophenolate Mofetil 1-1.5g BD",
" Onset ~4 months; GI side effects; equal to MTX (FAST)",
"Azathioprine 2-2.5mg/kg/d; check TPMT first"]),
("SYSTEMIC IMT — T-CELL INHIBITORS (2nd line)",
colors.HexColor("#F3E5F5"), C_MASQUERADE,
["Cyclosporine 2.5-5mg/kg/d: nephrotoxic, HBP",
"Tacrolimus 0.1-0.15mg/kg/d: monitor trough levels"]),
("BIOLOGICS — TNF INHIBITORS",
C_INF_BG, C_INFECT,
["ADALIMUMAB (Humira): ONLY FDA-approved biologic",
" for NI posterior segment uveitis",
" 80mg SC day 1 → 40mg day 8 → 40mg every 2 weeks",
" VISUAL I/II/III trials evidence",
" FIRST-LINE for Behcet uveitis and JIA-uveitis",
"INFLIXIMAB (Remicade): 5-10mg/kg IV",
" Effective in Behcet, sarcoid, refractory PU"]),
("ALKYLATING AGENTS (reserved for most severe)",
colors.HexColor("#FCE4EC"), colors.HexColor("#880E4F"),
["Cyclophosphamide 2mg/kg/d; Chlorambucil 0.1-0.2mg/kg/d",
"Use only when other IMT fails",
"Effective: necrotizing scleritis, serpiginous, VKH, SO",
"Risks: bladder cancer (cyclo); leukemia (chlorambucil)"]),
("PRE-IMT CHECKLIST",
C_WARN, C_HIGHLIGHT,
["□ Syphilis serology",
"□ IGRA/PPD + CXR (MANDATORY before biologics)",
"□ Hepatitis B surface Ag",
"□ CBC, LFTs, renal function",
"□ Pregnancy test; contraception counselling",
"□ Update vaccinations (live vaccines 4wk before)",
"□ MTX/MMF: stop ≥3 months before conception"]),
]
t_y = top_y - 8*mm
for (tcat, tbg, thdr, tlines) in treat_blocks:
th = (len(tlines) + 1) * 4.2*mm + 4*mm
t_y -= th
if t_y < 10*mm: break
rounded_rect(c, c2x, t_y, col3_w, th, r=2*mm,
fill_color=tbg, stroke_color=thdr, stroke_width=1)
c.setFont("Helvetica-Bold", 7)
c.setFillColor(thdr)
c.drawString(c2x+2*mm, t_y+th-5*mm, tcat)
for lj, ln in enumerate(tlines):
c.setFont("Helvetica", 6.5)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(c2x+2*mm, t_y+th-10*mm - lj*4.2*mm, ln)
# ── COLUMN 3: EXAM PEARLS + MONITORING + SUN GRADES ──────────────────
section_header(c, c3x, top_y-8*mm, col3_w, 8*mm,
"EXAM PEARLS, GRADING & MONITORING", bg=C_TITLE_BG)
# SUN Grading boxes
grade_y = top_y - 8*mm
def grade_box(cx, gy, gw, gh, title, rows_data, bg, brd):
rounded_rect(c, cx, gy-gh, gw, gh, r=2*mm,
fill_color=bg, stroke_color=brd, stroke_width=1.5)
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(brd)
c.drawString(cx+2*mm, gy-gh+gh-5.5*mm, title)
for rj, (g, txt) in enumerate(rows_data):
c.setFont("Helvetica-Bold", 6.8)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(cx+2*mm, gy-gh+gh-10*mm - rj*4.8*mm, g)
c.setFont("Helvetica", 6.5)
c.drawString(cx+14*mm, gy-gh+gh-10*mm - rj*4.8*mm, txt)
return gy - gh - 2*mm
grade_y = grade_box(c3x, grade_y, col3_w, 38*mm,
"SUN AC CELL GRADING (1×1mm high-intensity beam)",
[("0:", "<1 cell"),
("0.5+:", "1-5 cells"),
("1+:", "6-15 cells"),
("2+:", "16-25 cells"),
("3+:", "26-50 cells"),
("4+:", ">50 cells"),
("Flare:", "0=none; 1+=faint; 2+=moderate; 3+=marked; 4+=intense/fibrin")],
colors.HexColor("#E8EAF6"), colors.HexColor("#1A237E"))
grade_y = grade_box(c3x, grade_y, col3_w, 34*mm,
"SUN/NIH VITREOUS HAZE GRADING",
[("0:", "Clear fundus view"),
("0.5+:", "Trace haze"),
("1+:", "Few opacities; mild disc/vessel blur"),
("2+:", "Disc + vessels blurred but visible"),
("3+:", "Optic nerve visible; borders blurred; no vessels"),
("4+:", "Dense opacity; optic nerve obscured")],
C_ENTITY, C_QUESTION)
grade_y = grade_box(c3x, grade_y, col3_w, 22*mm,
"VITREORETINAL LYMPHOMA — RED FLAGS",
[("Age:", ">50 years; dense vitreous cells"),
("VA:", "Better than expected despite cells"),
("CME:", "Usually absent"),
("Resp:", "Poor response to corticosteroids"),
("Dx:", "Vitrectomy; IL-10:IL-6 >1; MYD88; brain MRI")],
C_MASK_BG, C_MASQUERADE)
# Exam Pearls
grade_y -= 2*mm
pearls_h = grade_y - 10*mm
if pearls_h > 0:
rounded_rect(c, c3x, 10*mm, col3_w, pearls_h, r=3*mm,
fill_color=colors.HexColor("#FFFDE7"),
stroke_color=C_HIGHLIGHT, stroke_width=2)
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_HIGHLIGHT)
c.drawString(c3x+3*mm, 10*mm+pearls_h-6*mm, "KEY EXAM PEARLS")
pearls = [
"1. Posterior uveitis = retinal/choroidal lesions; CME alone ≠ PU",
"2. Always exclude syphilis — it mimics ANYTHING",
"3. Before steroids in PU → rule out infection first",
"4. Birdshot: VA can be 20/20 while VF/ERG worsen — monitor both!",
"5. Serpiginous choroiditis → TB MUST be excluded first",
"6. VKH: treat early + aggressively; sunset glow = chronic disease",
"7. CMV retinitis: brush-fire border; full-thickness necrosis",
"8. ARN: IV Acyclovir urgent; prophylactic laser → RD risk 75%",
"9. Lymphoma masquerade: dense cells, no CME, >50 yrs, poor steroid Rx",
"10. IGRA preferred over PPD in BCG-vaccinated patients",
"11. Adalimumab = only FDA-approved biologic for NI posterior uveitis",
"12. Goldmann-Witmer coefficient >3 = local ocular infection",
"13. EDI-OCT choroidal thickness ↑ in active VKH (disease activity marker)",
"14. IL-10:IL-6 ratio >1 in vitreous = vitreoretinal lymphoma",
"15. ICGA superior to FA for choroidal lesions (sarcoid, birdshot, VKH)",
]
for pi, pearl in enumerate(pearls):
py = 10*mm + pearls_h - 12*mm - pi*4.3*mm
if py < 12*mm: break
c.setFont("Helvetica", 6.7)
c.setFillColor(colors.HexColor("#37474F"))
c.drawString(c3x+3*mm, py, pearl)
# Footer
c.setFont("Helvetica", 6.5)
c.setFillColor(C_FOOTER)
c.drawCentredString(W/2, 5*mm,
"Page 4 of 4 | Investigations & Treatment | "
"AAO BCSC 2025-26, SUN 2021, Kanski 10th ed. | For PG Ophthalmology Education")
# ─────────────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
build_pdf()
sz = os.path.getsize(OUTPUT_PATH)
print(f"File size: {sz:,} bytes ({sz/1024:.1f} KB)")
cd /home/daytona/workspace/posterior-uveitis-flowchart && python3 generate_flowc…
Posterior Uveitis Diagnostic Flowchart
PDF Document · PDF
| Page | Content |
|---|---|
| Page 1 | Master Overview Flowchart - Starting from "patient with posterior uveitis" → 4 diagnostic steps → pattern recognition → branching into Infectious / Non-infectious / Masquerade with summary boxes and investigation overview for each branch |
| Page 2 | Infectious Posterior Uveitis Flowchart - Decision tree: immunocompromised? → focal lesion with old scar (Toxoplasma)? → peripheral necrotizing retinitis (ARN/BARN/PORN)? → TB/Syphilis/Bacterial/Fungal; with separate immunocompromised branch (CMV, PORN, atypical toxo, fungal) |
| Page 3 | Non-Infectious Posterior Uveitis - Two-column layout: White Dot Syndromes (Birdshot, APMPPE, Serpiginous, MFCPU/PIC/SFU, MEWDS, AZOOR) vs Systemic entities (VKH, Behcet, Sarcoidosis, Sympathetic ophthalmia, SLE/vasculitides) with dx and Rx for each |
| Page 4 | Investigations & Treatment Quick-Reference - Tabular investigation guide by category (serology, HLA, autoimmune, imaging, intraocular), treatment framework (principles, local steroids, systemic IMT, biologics, pre-IMT checklist), SUN grading tables (AC cells, vitreous haze), VRL red flags, and 15 key exam pearls |
Create a diagnostic flowchart for differentiating posterior uveitis entities
A detailed medical diagnostic flowchart for differentiating posterior uveitis entities, suitable for postgraduate ophthalmology education. Clean professional clinical diagram on white background. The flowchart starts at the top with "POSTERIOR UVEITIS" in a dark navy box, then flows downward through a series of diamond decision nodes and rectangular entity boxes. Structure: TOP: "POSTERIOR UVEITIS" start box (navy) FIRST BRANCH (diamond): "IMMUNOCOMPROMISED? (HIV CD4<50 / transplant)" - YES (right branch, red): - CMV Retinitis: brush-fire border, pizza-pie appearance, CD4<50 - PORN (VZV): rapid outer retinal necrosis, minimal vitritis - Atypical Toxoplasma: bilateral, multifocal, no scar - Candida endophthalmitis: IV drug use, indwelling lines - NO (down branch, continues): SECOND DIAMOND: "FOCAL lesion adjacent to OLD PIGMENTED SCAR?" - YES (left, red box): TOXOPLASMA CHORIORETINITIS — headlight in fog, most common worldwide, treat with Pyrimethamine+Sulfadiazine - NO (down): THIRD DIAMOND: "PERIPHERAL NECROTIZING RETINITIS + ARTERITIS?" - YES (left, red box): ARN/BARN (HSV/VZV) — peripheral necrosis, circumferential spread, occlusive arteritis. Rx: IV Acyclovir urgent - NO (down): FOURTH DIAMOND: "BILATERAL SEROUS RETINAL DETACHMENTS + CHOROIDAL THICKENING?" - YES (left, green box): VKH SYNDROME — prodrome: headache, tinnitus, meningismus; sunset glow fundus; HLA-DR4 - NO (down): FIFTH DIAMOND: "BILATERAL SYSTEMIC: oral ulcers, genital ulcers, skin lesions?" - YES (left, green box): BEHCET DISEASE — occlusive vasculitis, chalky retinitis+hemorrhage; HLA-B51; TNF inhibitors first-line - NO (down): SIXTH DIAMOND: "GRANULOMATOUS SIGNS + BILATERAL HILAR ADENOPATHY?" - YES (left, green box): SARCOIDOSIS — candlewax drippings, choroidal granulomas; ACE+lysozyme; CXR - NO (down): SEVENTH DIAMOND: "HLA-A29+, cream ovoid lesions, radial from disc?" - YES (left, blue box): BIRDSHOT CHORIORETINOPATHY — monitor ERG+VF not just VA; long-term IMT - NO (down): EIGHTH DIAMOND: "LARGE PLACOID GREY-WHITE LESIONS, young adult, viral prodrome?" - YES (right, blue box): APMPPE — self-limited choriocapillaritis; FA early blockage→late staining - NO (down): NINTH DIAMOND: "SERPENTINE PERIPAPILLARY PROGRESSIVE LESIONS?" - YES (right, blue box): SERPIGINOUS CHOROIDITIS — exclude TB first! triple IMT - NO (down): TENTH DIAMOND: "Young myopic woman, multifocal punched-out scars, no systemic?" - YES (right, blue box): MFCPU / PIC / MEWDS / AZOOR spectrum - NO (bottom): UNDIFFERENTIATED POSTERIOR UVEITIS — re-investigate, consider vitreoretinal lymphoma masquerade KEY RULE BOX at bottom: "ALWAYS test ALL patients for SYPHILIS (FTA-Abs + RPR/VDRL) — the great imitator. Screen for TB (IGRA) before any immunosuppression." Color coding: Red boxes=Infectious, Green boxes=Non-infectious systemic, Blue boxes=White dot syndromes/non-infectious isolated, Yellow diamonds=decision points, Orange=key rules. Clear arrows with YES/NO labels. Small legend in corner. Professional ophthalmology textbook style, clear readable fonts, clean lines.

give me detailed flowchart of posterior uveitis, few ideas such as with vitritis without vitritis , site of lesion, solitory or multifocal, infectious non infectious, bilateral unilateral
A comprehensive, highly detailed medical diagnostic flowchart for posterior uveitis differentiation. Professional ophthalmology textbook style, white background, clean typography, color-coded branches. This is a multi-branch algorithmic tree. TITLE BAR (dark navy, white text): "POSTERIOR UVEITIS — SYSTEMATIC DIAGNOSTIC APPROACH" Subtitle: "Based on AAO BCSC 2025-26 | SUN 2021 | Kanski 10th ed." ═══ LEVEL 1: START ═══ Center top: Rounded rectangle (dark navy): "POSTERIOR UVEITIS" Subtitle inside: "(inflammation primarily of retina and/or choroid)" Arrow down. ═══ LEVEL 2: VITRITIS? (FIRST MAJOR SPLIT) ═══ Yellow diamond: "VITRITIS PRESENT?" Two main branches split LEFT and RIGHT — this is the FIRST key branch. ──────────────────────────────────────── LEFT BRANCH (YES — WITH VITRITIS): Header box (teal): "WITH VITRITIS" Sub-diamond: "BILATERAL or UNILATERAL?" LEFT (BILATERAL with vitritis): Small box header: "BILATERAL + VITRITIS" Sub-diamond: "INFECTIOUS or NON-INFECTIOUS?" • INFECTIOUS (red): - TB (multifocal choroidal granulomas + periphlebitis) - Syphilis (any pattern — always exclude) - Brucellosis • NON-INFECTIOUS (green): Sub-diamond: "SOLITARY or MULTIFOCAL lesions?" MULTIFOCAL: - VKH Syndrome: bilateral serous RDs, sunset-glow fundus, prodrome - Sarcoidosis: candlewax drippings, string of pearls, BHL - Birdshot CRP: HLA-A29, cream ovoid lesions, radial from disc - MFCPU: multifocal punched-out scars, young myopic women - Sympathetic Ophthalmia: history of trauma/surgery - Behcet: occlusive vasculitis, chalky retinitis, oral ulcers SOLITARY/FOCAL: - Sarcoid (large choroidal granuloma) - TB (subretinal abscess) RIGHT (UNILATERAL with vitritis): Small box header: "UNILATERAL + VITRITIS" Sub-diamond: "SOLITARY or MULTIFOCAL?" SOLITARY (adjacent to old scar?): YES → TOXOPLASMA: headlight-in-fog, pyrimethamine+sulfadiazine NO → ARN (HSV/VZV): peripheral necrotizing + arteritis; URGENT IV Acyclovir Syphilis (exclude always) MULTIFOCAL: Sub-diamond: "IMMUNOCOMPROMISED?" YES (red boxes): - CMV Retinitis: brush-fire, pizza-pie (CD4<50) - PORN (VZV): rapid, outer retinal, minimal vitritis - Atypical Toxoplasma: bilateral multifocal, no old scar NO: - MFCPU: young myopic woman - Sarcoidosis - Endogenous endophthalmitis (Candida — IV drug use) ──────────────────────────────────────── RIGHT BRANCH (NO — WITHOUT VITRITIS): Header box (purple): "WITHOUT VITRITIS (quiet vitreous)" Sub-diamond: "BILATERAL or UNILATERAL?" LEFT (BILATERAL without vitritis): Sub-diamond: "LESION TYPE?" PLACOID (large flat lesions, grey-white): - APMPPE: bilateral placoid, young adult, viral prodrome, self-limited - Serpiginous Choroiditis: serpentine peripapillary, exclude TB first! - Ampiginous Choroiditis: multifocal placoid, relentless SMALL MULTIFOCAL: - Birdshot CRP: cream ovoid lesions, radial, HLA-A29 (minimal/no vitritis early) - Choroidal metastases: known primary carcinoma - Pneumocystis choroiditis: HIV, CD4<100 - TB miliary: multiple small yellow lesions SEROUS RD (subretinal fluid): - VKH: multiloculated SRF, fibrinous septa on OCT, choroidal thickening - Posterior scleritis: T-sign on B-scan, scleral thickening - Central serous chorioretinopathy (not uveitis — but DD) RETINAL VASCULITIS ONLY: - SLE: arteritis, cotton-wool spots, branch artery occlusions - Susac Syndrome: arteritis + SNHL + encephalopathy - GPA / PAN: systemic vasculitis - Eales disease: peripheral periphlebitis, young males RIGHT (UNILATERAL without vitritis): Sub-diamond: "SOLITARY or MULTIFOCAL?" SOLITARY: - OHS (Ocular Histoplasmosis): punched-out scars, peripapillary atrophy, no vitritis - PIC (Punctate Inner Choroiditis): small deep lesions, young myopic woman, no vitritis - Choroidal melanoma (masquerade) - Choroidal metastasis (masquerade) - MEWDS: perifoveal dots, self-limited, peau d'orange fovea MULTIFOCAL: - DUSN: motile subretinal nematode, unilateral neuroretinitis - AZOOR: zonal VF loss, photopsias, normal fundus early - Autoimmune retinopathy (paraneoplastic CAR/MAR) ═══ BOTTOM CRITICAL RULES BOX ═══ Wide orange/amber box spanning full width: "⚠ UNIVERSAL RULES: (1) Test ALL patients for SYPHILIS — FTA-Abs + RPR/VDRL — it mimics any pattern (2) Screen for TB (IGRA) before any immunosuppression (3) ALWAYS consider VITREORETINAL LYMPHOMA in >50 yrs with dense vitreous cells, absent CME, poor steroid response (4) Exclude infection BEFORE starting corticosteroids" ═══ LEGEND (bottom right corner) ═══ Color legend box: 🔴 Red = Infectious 🟢 Green = Non-infectious (systemic) 🔵 Blue = White dot syndromes 🟣 Purple = Masquerade syndromes 🟡 Yellow = Decision diamonds ⚫ Navy = Starting point / headers Style: Very detailed, clean medical flowchart. Professional font. All boxes clearly labeled. Decision diamonds clearly marked. Arrows with YES/NO/LEFT/RIGHT labels. Compact but readable. Clinical ophthalmology textbook quality. No clutter. White background. Well-spaced layout.

WITH VITRITIS
│
├── BILATERAL?
│ ├── Infectious: TB, Syphilis, Brucellosis
│ └── Non-infectious:
│ ├── Multifocal → VKH, Sarcoidosis, Birdshot, MFCPU, Behcet, SO
│ └── Focal → TB abscess, large sarcoid granuloma
│
└── UNILATERAL?
├── SOLITARY + adjacent old scar → TOXOPLASMA
├── SOLITARY + no scar + peripheral necrotizing → ARN (HSV/VZV)
└── MULTIFOCAL
├── Immunocompromised → CMV, PORN, atypical Toxo, Candida
└── Immunocompetent → MFCPU, Sarcoidosis, Endogenous endophthalmitis
WITHOUT VITRITIS
│
├── BILATERAL?
│ ├── PLACOID lesions → APMPPE, Serpiginous (exclude TB!), Ampiginous
│ ├── SMALL MULTIFOCAL → Birdshot (early), TB miliary, Choroidal mets, Pneumocystis
│ ├── SEROUS RDs → VKH, Posterior scleritis
│ └── VASCULITIS ONLY → SLE, Susac, GPA/PAN, Eales disease
│
└── UNILATERAL?
├── SOLITARY → OHS (punched-out, no vitritis), PIC, MEWDS, Choroidal melanoma/mets
└── MULTIFOCAL → DUSN (motile worm), AZOOR (zonal VF loss), CAR/MAR (paraneoplastic)
| Feature | WITH Vitritis | WITHOUT Vitritis |
|---|---|---|
| Unilateral + focal + old scar | Toxoplasma | OHS |
| Unilateral + peripheral necrotizing | ARN | PORN (minimal vitritis) |
| Bilateral + placoid | APMPPE (mild vitritis possible) | Serpiginous, APMPPE |
| Bilateral + serous RDs | VKH | VKH (early), Posterior scleritis |
| Bilateral + small multifocal | Sarcoid, MFCPU, Birdshot | Birdshot, TB miliary, Mets |
| Bilateral + vasculitis | Behcet, Sarcoid, TB | SLE, Susac, GPA, Eales |
| Immunocompromised | CMV, atypical Toxo, Candida | PORN |
| Dense cells, >50yr, no CME | Vitreoretinal LYMPHOMA | - |
add all white dot syndromes, and give all examples in above flowchart
Ultra-detailed comprehensive medical diagnostic flowchart for posterior uveitis. Professional ophthalmology PG seminar quality. White background, color-coded, clean medical typography, very detailed with all disease entities named. TITLE (dark navy full-width bar): "POSTERIOR UVEITIS — COMPREHENSIVE DIAGNOSTIC FLOWCHART" Subtitle: "AAO BCSC 2025-26 | SUN 2021 | All major entities included" START (navy oval): "POSTERIOR UVEITIS" Down arrow → LEVEL 1 DIAMOND (yellow): "VITRITIS PRESENT?" ════════════════════════════════════════════════════ COLUMN A — LEFT HALF: "YES — WITH VITRITIS" (teal header bar) ════════════════════════════════════════════════════ A-Diamond1 (yellow): "BILATERAL or UNILATERAL?" ── A-LEFT: BILATERAL WITH VITRITIS ── A-Diamond2 (yellow): "INFECTIOUS?" YES (red): Red box "INFECTIOUS BILATERAL": • TB: periphlebitis, multifocal choroidal granulomas, serpiginous-like • Syphilis: any pattern — ALWAYS exclude • Brucellosis: multifocal choroiditis + vitritis • Whipple disease: rare NO (green): A-Diamond3: "LESION TYPE?" MULTIFOCAL/DIFFUSE green box: • VKH Syndrome: bilateral serous RDs, sunset-glow, prodrome (HA+tinnitus), HLA-DR4 • Sarcoidosis: candlewax drippings, string of pearls, snowballs, BHL, ACE↑ • Birdshot CRP: HLA-A29, cream ovoid lesions nasal/radial from disc, diffuse vasculitis • MFCPU: multifocal choroiditis+panuveitis, young myopic women, punched-out scars • Behcet disease: occlusive vasculitis, chalky retinitis+hemorrhage, oral/genital ulcers • Sympathetic Ophthalmia: history penetrating trauma/surgery, Dalen-Fuchs nodules • Subretinal Fibrosis & Uveitis (SFU): progressive fibrosis ── A-RIGHT: UNILATERAL WITH VITRITIS ── A-Diamond4 (yellow): "SOLITARY or MULTIFOCAL?" SOLITARY: A-Diamond5: "Adjacent to OLD PIGMENTED SCAR?" YES → Red box: "TOXOPLASMA CHORIORETINITIS" • Headlight in fog • Focal vitritis overlying lesion • IgG serology + AQ/vitreous PCR • Rx: Pyrimethamine + Sulfadiazine + Folinic acid NO: Red box: "CONSIDER:" • ARN (HSV/VZV): peripheral necrotizing, arteritis, moderate-severe vitritis URGENT: IV Acyclovir 10mg/kg TID × 7d → Valacyclovir 1g TDS × 14wk • Syphilis: any pattern, FTA-Abs+RPR/VDRL • Bartonella: neuroretinitis + stellate macular star • Endogenous bacterial endophthalmitis MULTIFOCAL: A-Diamond6: "IMMUNOCOMPROMISED?" YES (red): • CMV Retinitis (CD4<50): brush-fire, pizza-pie, IV Ganciclovir + HAART • PORN (VZV, CD4<50): rapid outer retinal, minimal vitritis • Atypical Toxoplasma: bilateral, no old scar • Candida endophthalmitis: IV drug use, indwelling lines • Aspergillus: immunocompromised • Cryptococcus: HIV NO: • MFCPU: young myopic women, punched-out scars • Sarcoidosis: unilateral presentation • Endogenous fungal endophthalmitis ════════════════════════════════════════════════════ COLUMN B — RIGHT HALF: "NO — WITHOUT VITRITIS" (purple header bar) ════════════════════════════════════════════════════ B-Diamond1 (yellow): "BILATERAL or UNILATERAL?" ── B-LEFT: BILATERAL WITHOUT VITRITIS ── B-Diamond2: "LESION MORPHOLOGY?" PLACOID (large flat grey-white) → Blue box "WHITE DOT — PLACOID": • APMPPE: bilateral placoid, young adult, viral prodrome, self-limited, choriocapillaritis FA: early blockage → late staining. Usually no vitritis. Rx: observation ± steroids • Serpiginous Choroiditis: serpentine peripapillary, progressive atrophy, EXCLUDE TB FIRST FA: early hypoFl → late staining at active border. Triple IMT needed • Ampiginous (Relentless Placoid) Choroiditis: multifocal placoid, widespread, relentless • SFU (Subretinal Fibrosis & Uveitis): progressive subretinal fibrosis SMALL MULTIFOCAL LESIONS → Blue box "WHITE DOT — MULTIFOCAL SMALL": • Birdshot CRP: HLA-A29, cream ovoid 50-1500µm, radial nasal distribution FA: diffuse retinal vasculitis. ERG: rod+cone dysfunction. MONITOR ERG+VF not just VA • Multifocal Choroiditis (MFC): variable vitritis, punched-out scars • Punctate Inner Choroiditis (PIC): small deep lesions, young myopic women, NO vitritis OCT: focal RPE elevation; CNV common complication • MEWDS: perifoveal white dots 100-200µm, peau d'orange fovea, self-limited, wreathlike ERG: reversible ↓a-wave. FAF: hyperAF. Rx: observation • TB miliary: multiple small yellow-white deep lesions • Choroidal metastases: known primary carcinoma (breast, lung) • Pneumocystis choroiditis: HIV CD4<100, multiple yellow lesions SEROUS RETINAL DETACHMENT → Green box: • VKH: multiloculated SRF, fibrinous septa on OCT, massive choroidal thickening EDI-OCT • Posterior Scleritis: T-sign on B-scan, scleral thickening, pain • Sympathetic Ophthalmia: trauma history RETINAL VASCULITIS ONLY (no choroidal/retinal lesions) → Purple box: • SLE: arteritis, BRAA/CRAA occlusions, cotton-wool spots, ANA/anti-dsDNA • Susac Syndrome: arteritis + SNHL + encephalopathy, Gass plaques • GPA / PAN: systemic vasculitis, c-ANCA/p-ANCA • Eales disease: peripheral periphlebitis, young males, India • IRVAN: idiopathic retinal vasculitis + aneurysms + neuroretinitis • Frosted branch angiitis: severe diffuse vascular sheathing ── B-RIGHT: UNILATERAL WITHOUT VITRITIS ── B-Diamond3: "SOLITARY or MULTIFOCAL?" SOLITARY / FEW LESIONS → Blue/grey box: • OHS (Ocular Histoplasmosis): punched-out scars, peripapillary atrophy, NO vitritis Endemic Ohio-Mississippi valley. Dx: clinical. CNV common complication • PIC (Punctate Inner Choroiditis): small lesions, young myopic women • MEWDS: multiple dots, self-limited, unilateral • Choroidal Melanoma (MASQUERADE): pigmented elevated lesion, B-scan • Choroidal Metastasis (MASQUERADE): known primary, creamy lesion • Acute Idiopathic Maculopathy: turbid subretinal fluid, coxsackievirus, young adult MULTIFOCAL / DIFFUSE → Blue/grey box: • AZOOR (Acute Zonal Occult Outer Retinopathy): zonal VF loss, photopsias, normal fundus early ERG: markedly abnormal. FAF: zonal hypoAF. Rx: steroids/IMT variable • DUSN (Diffuse Unilateral Subacute Neuroretinitis): motile subretinal nematode, unilateral Disc edema → optic atrophy. Rx: laser to worm • Autoimmune Retinopathy (CAR/MAR): anti-recoverin Ab, paraneoplastic, cancer workup • Acute Retinal Pigment Epitheliitis: self-limited, perifoveal RPE dots • Acute Idiopathic Maculopathy: macular SRF, coxsackie exposure ════════════════════════════════════════════════════ BOTTOM FULL-WIDTH BOXES ════════════════════════════════════════════════════ MASQUERADE SYNDROMES box (dark purple, full width): "ALWAYS CONSIDER MASQUERADE if: age>50, dense vitreous cells, no CME, poor steroid response" • Vitreoretinal Lymphoma (PVRL): IL-10:IL-6>1; MYD88 mutation; Brain MRI • Uveal Lymphoma | Leukemia | Choroidal Metastases | Retinoblastoma (child) • CAR/MAR (paraneoplastic) | Retinitis Pigmentosa | Ocular Ischemic Syndrome GOLDEN RULES box (amber/orange, full width): "⚠ RULE 1: Test ALL patients for SYPHILIS (FTA-Abs + RPR/VDRL) — mimics any pattern ⚠ RULE 2: IGRA/PPD for TB screening before any IMT ⚠ RULE 3: Exclude INFECTION before steroids ⚠ RULE 4: Serpiginous pattern → MUST exclude TB-serpiginous choroiditis first" LEGEND (bottom right): Red=Infectious | Green=Non-infectious systemic | Blue=White dot syndromes | Purple=Masquerade | Yellow=Decision point Very compact but readable. All text must be clearly legible. Professional medical flowchart quality. Clean arrows.
Detailed medical reference table/flowchart specifically for WHITE DOT SYNDROMES in posterior uveitis. Professional ophthalmology PG teaching chart. White background, color-coded rows, clean medical typography. TITLE (dark teal bar, white text): "WHITE DOT SYNDROMES — COMPLETE DIAGNOSTIC REFERENCE" Subtitle: "Non-infectious inflammatory chorioretinopathies | AAO BCSC 2025-26" OPENING BOX (light teal): "White Dot Syndromes = group of idiopathic inflammatory chorioretinopathies with multiple discrete yellow-white lesions at level of retina, RPE, choriocapillaris, or choroid" "Key features: usually NO systemic disease | Must exclude: Syphilis, TB, Sarcoidosis" Then a decision flowchart: DIAMOND 1: "VITRITIS PRESENT?" YES — WITH VITRITIS branch (left): DIAMOND: "BILATERAL or UNILATERAL?" BILATERAL: • BIRDSHOT CHORIORETINOPATHY - HLA-A29 (96% sensitive, 93% specific) - Female > Male | Age 30-70 | North European - Cream-colored ovoid lesions 50-1500µm, nasal/radial distribution from disc - Diffuse retinal vasculitis | Disc edema | Retinal phlebitis - Minimal/mild vitritis (often subtle) - FA: early hypofluorescence, late staining, venular leakage - ICGA: confluent hypocyanescent spots from disc - ERG: rod+cone dysfunction (MONITOR — VA may be 20/20!) - VF: Humphrey 24-2 — extensive loss despite preserved VA - Rx: Long-term IMT (MTX/MMF/AZA ± TNF inhibitor); bridge with steroids • MFCPU (Multifocal Choroiditis + Panuveitis) - Young myopic women (age 10-70, mean 30yr) - Multiple oval/round lesions >125µm, RPE/inner choroid, any zone - Punched-out scars with surrounding pigment - Active: AC cells + vitritis (100%), anterior uveitis 50% - OCT: RPE elevation, outer retinal disruption, subretinal hyperreflective material - FA: early blockage → late staining; CNV if present - Complication: CNV (common), macular SRF, subretinal fibrosis - Rx: Systemic IMT essential (83% reduction posterior pole complications) • SUBRETINAL FIBROSIS & UVEITIS (SFU) - Progressive subretinal fibrosis, severe prognosis - Histology: lymphocytic granulomatous infiltration + gliosis - Rx: Early aggressive IMT; rituximab (emerging evidence) UNILATERAL: • MFCPU (can present unilaterally) • PUNCTATE INNER CHOROIDITIS (PIC) — may have very mild vitritis NO — WITHOUT VITRITIS branch (right): DIAMOND: "LESION CHARACTERISTICS?" BILATERAL — PLACOID LESIONS: • APMPPE (Acute Posterior Multifocal Placoid Pigment Epitheliopathy) - Young adults (20-50), M=F | Bilateral, may be asymmetric - Viral prodrome common - Multiple flat grey-white placoid lesions, 1-2 DD, outer retina/RPE - SELF-LIMITED (usually): resolves in weeks - FA: early complete BLOCKAGE → late STAINING (pathognomonic for choriocapillaritis) - OCT: outer retinal hyperreflectivity + subretinal fluid in active lesion - FAF: hypoAF (active) → hypoAF (healed) - ICGA: hypocyanescent in all phases (choriocapillaritis) - ⚠ Beware cerebrovasculitis: headache, CSF abnormalities, stroke - Rx: Observation; systemic steroids if CNS involvement or severe • SERPIGINOUS CHOROIDITIS - Adults (20-60), M=F | Usually bilateral asymmetric - Serpentine/geographic peripapillary origin, progressive centrifugal spread - Grey-white or creamy-yellow RPE lesions → atrophy + scarring in its wake - Macular serpiginous: lesions arise primarily from macula (1/3 cases) - FA: early hypofluorescence → late staining/leakage at active border - OCT: outer retinal hyperreflectivity, choroidal thickening at active edge - FAF: hyperAF at active edge → hypoAF in scarred areas - CNV in 25% at border of old scar - ⚠ MUST EXCLUDE TB-serpiginous choroiditis (IGRA mandatory!) - Rx: Triple IMT: antimetabolite + T-cell inhibitor ± cyclophosphamide/chlorambucil • AMPIGINOUS CHOROIDITIS (Relentless Placoid Chorioretinitis) - Multifocal placoid lesions, widespread including periphery - Lesions separate and distinct (unlike serpiginous which spreads from one point) - Chronic relentless course, >50 multifocal lesions possible - Rx: Corticosteroids + IMT ± anti-VEGF for CNV BILATERAL — SMALL MULTIFOCAL: • MEWDS (Multiple Evanescent White Dot Syndrome) - Young females (mean age onset ~25yr) | Usually unilateral - Multiple discrete white-to-orange spots 100-200µm, deep retina/RPE - Perifoveal + peripapillary distribution; PEAU D'ORANGE fovea - Enlarged blind spot; photopsias; mild VF defects - FA: late-staining punctate hyperfluorescent "wreathlike" lesions - ICGA: hypocyanescent (more numerous than FA) - FAF: hyperAF lesions (visible even after clinical resolution!) - ERG: reversible ↓a-wave (outer retinal/RPE dysfunction) - SELF-LIMITED: resolves in weeks; vision recovers - Rx: Observation (usually); systemic steroids if slow resolution UNILATERAL — OUTER RETINAL ZONAL: • AZOOR (Acute Zonal Occult Outer Retinopathy) - Young-middle aged (mean 37yr), 76% female | Often unilateral initially - Prominent PHOTOPSIAS (described as pulsations, windmills, bubbles) - FUNDUS OFTEN NORMAL AT PRESENTATION (diagnosis frequently delayed!) - Later: white annular ring 3-5mm, then RPE granularity, vessel attenuation - ERG: markedly abnormal (outer retinal degeneration) - mfERG: localizes dysfunction zone - FAF: zonal hypoAF (atrophy) with hyperAF at active border - VF: temporal/superior defects corresponding to affected retina; enlarged blind spot - Rx: Systemic steroids/IMT; variable response; often progressive • ACUTE RETINAL PIGMENT EPITHELIITIS (ARPE) - Self-limited RPE condition - Perifoveal dark spots with surrounding halo on fundoscopy - OCT: small RPE disruption - Resolves spontaneously in weeks • ACUTE IDIOPATHIC MACULOPATHY (AIM) - Age 20-40yr; viral prodrome (coxsackievirus, hand-foot-mouth exposure) - Turbid yellow subretinal fluid in macula - OCT: subretinal fluid + hyperreflective debris in subretinal space - FA: early hypo/hyperFl → late RPE staining + pooling in SRD - Usually resolves spontaneously; variable prognosis BOTTOM SUMMARY TABLE (3 columns): Column 1 — "WITH VITRITIS": Birdshot, MFCPU, SFU Column 2 — "WITHOUT/MINIMAL VITRITIS": APMPPE, Serpiginous, Ampiginous, PIC, MEWDS, AZOOR, ARPE, AIM Column 3 — "KEY RULE": All WDS: exclude Syphilis + TB first. PIC: No vitritis hallmark. APMPPE: FA early blockage pathognomonic. Birdshot: Monitor ERG not just VA. BOTTOM WARNING (amber): "ALL White Dot Syndromes: Exclude SYPHILIS, TB, SARCOIDOSIS before diagnosis" Legend: Teal=with vitritis entities | Purple=without vitritis entities | Orange=key rules | Yellow=decision diamonds Professional, readable, compact. All text legible. Medical school quality reference chart.
400, message: Got more than 4194304 bytes when reading: b'data: {"candidates": [{"content": {"role": "model","parts": [{"inlineData": {"mimeType": "image/png"...'.
We encountered an error while processing your request. Please try again or reach out to us for help.
add all white dot syndromes, and give all examples in above flowchart
Comprehensive posterior uveitis diagnostic flowchart. Medical education quality. White background, color-coded, professional clinical typography. TITLE BAR (dark navy): "POSTERIOR UVEITIS — SYSTEMATIC DIAGNOSTIC FLOWCHART" subtitle: "AAO BCSC 2025-26 | SUN 2021 — All Major Entities" START (navy rounded box, top center): "POSTERIOR UVEITIS" FIRST BRANCH DIAMOND (yellow): "VITRITIS PRESENT?" LEFT HALF (teal header): "WITH VITRITIS" RIGHT HALF (purple header): "WITHOUT VITRITIS" ═══ WITH VITRITIS BRANCH ═══ Diamond: "BILATERAL?" YES-BILATERAL WITH VITRITIS: Diamond: "INFECTIOUS?" YES → RED BOX "INFECTIOUS BILATERAL": TB · Syphilis (always exclude) · Brucellosis · Whipple disease NO → GREEN BOX split into two: MULTIFOCAL green box: VKH: serous RDs, sunset glow, prodrome, HLA-DR4 Sarcoidosis: candlewax drippings, string of pearls, snowballs Birdshot CRP: HLA-A29, cream ovoid lesions radial from disc MFCPU: multifocal punched-out scars, young myopic women Behcet: occlusive vasculitis, chalky retinitis, oral/genital ulcers Sympathetic Ophthalmia: trauma/surgery history, Dalen-Fuchs nodules SFU (Subretinal Fibrosis Uveitis): progressive fibrosis UNILATERAL WITH VITRITIS: Diamond: "SOLITARY or MULTIFOCAL?" SOLITARY + old scar → TOXOPLASMA: headlight-in-fog, Rx: Pyrimethamine+Sulfa SOLITARY + no scar: ARN (HSV/VZV): peripheral necrotizing, arteritis, URGENT IV Acyclovir Syphilis · Bartonella (neuroretinitis, stellate star) MULTIFOCAL: Diamond: "IMMUNOCOMPROMISED?" YES: CMV (brush-fire, CD4<50) · PORN (VZV, rapid) · Candida (IV drug use) · Aspergillus NO: MFCPU · Sarcoidosis · Endogenous endophthalmitis ═══ WITHOUT VITRITIS BRANCH ═══ Diamond: "BILATERAL?" YES-BILATERAL WITHOUT VITRITIS: Diamond: "LESION TYPE?" PLACOID (large flat grey-white) BLUE BOX: APMPPE: bilateral placoid, young adult, viral prodrome, self-limited FA: early blockage→late staining (choriocapillaritis) Serpiginous Choroiditis: serpentine peripapillary, progressive ⚠ EXCLUDE TB FIRST — triple IMT required Ampiginous (Relentless Placoid) Choroiditis: multifocal widespread SMALL MULTIFOCAL BLUE BOX: Birdshot CRP: HLA-A29, cream ovoid 50-1500µm, radial, diffuse vasculitis ERG+VF abnormal despite 20/20 VA — monitor ERG not just VA! PIC (Punctate Inner Choroiditis): small deep lesions, young myopic, NO vitritis MEWDS: perifoveal white dots, peau d'orange, self-limited, wreathlike FA TB miliary: multiple small yellow deep lesions Choroidal metastases: known primary (breast/lung) Pneumocystis choroiditis: HIV CD4<100 SEROUS RD GREEN BOX: VKH: multiloculated SRF, fibrinous septa OCT, massive choroidal thickening Posterior Scleritis: T-sign B-scan, scleral thickening, pain Sympathetic Ophthalmia: trauma history VASCULITIS ONLY PURPLE BOX: SLE: arteritis, BRAA/CRAA occlusions, ANA/dsDNA Susac Syndrome: arteritis + SNHL + encephalopathy GPA/PAN: c-ANCA/p-ANCA, systemic vasculitis Eales disease: peripheral periphlebitis, young males IRVAN: vasculitis + aneurysms + neuroretinitis Frosted branch angiitis: diffuse vascular sheathing UNILATERAL WITHOUT VITRITIS: Diamond: "SOLITARY or MULTIFOCAL?" SOLITARY GREY-BLUE BOX: OHS: punched-out scars, peripapillary atrophy, NO vitritis, endemic PIC: small deep lesions, myopic women MEWDS: perifoveal dots, self-limited Acute Idiopathic Maculopathy: turbid SRF, coxsackievirus MASQUERADE: Choroidal Melanoma · Choroidal Metastasis MULTIFOCAL GREY-BLUE BOX: AZOOR: zonal VF loss, photopsias, NORMAL fundus early, ERG markedly abnormal DUSN: motile subretinal nematode, unilateral, disc edema→optic atrophy CAR/MAR (autoimmune retinopathy): anti-recoverin, paraneoplastic ARPE (Acute RPE Epitheliitis): self-limited, perifoveal RPE dots BOTTOM — TWO FULL-WIDTH BOXES: MASQUERADE BOX (dark purple): "ALWAYS CONSIDER MASQUERADE: age>50, dense cells, no CME, poor steroid response" Vitreoretinal Lymphoma (IL-10:IL-6>1, MYD88, brain MRI) · Uveal Lymphoma · Leukemia Choroidal Metastases · Retinoblastoma (child) · CAR/MAR · Retinitis Pigmentosa GOLDEN RULES BOX (amber): "⚠ ALL PATIENTS: Syphilis testing (FTA-Abs + RPR/VDRL) | TB screening (IGRA) before IMT ⚠ Serpiginous pattern = EXCLUDE TB first | Exclude infection BEFORE steroids" LEGEND bottom-right: Red=Infectious | Green=Non-infectious systemic | Blue=White dot syndromes | Purple=Masquerade/vasculitis | Yellow=Decision | Amber=Rules
Detailed medical reference chart for White Dot Syndromes in ophthalmology. Professional PG teaching quality. White background, color-coded rows, clean clinical typography. This is a structured comparison table and mini-flowchart combined. TITLE (dark teal bar, white text): "WHITE DOT SYNDROMES — COMPLETE CLASSIFICATION & FEATURES" Subtitle: "Non-infectious idiopathic chorioretinopathies | Exclude: Syphilis, TB, Sarcoidosis first" FIRST SECTION HEADER (teal): "GROUP 1 — WITH VITRITIS (outer retina + vitreous involved)" Three color-coded entity boxes side by side: BOX 1 (blue border): "BIRDSHOT CHORIORETINOPATHY" Demographics: Middle-aged, F>M, N.European Laterality: Bilateral, symmetric Lesions: Cream ovoid 50-1500µm, radial/nasal from disc Vitritis: Mild-moderate Key sign: HLA-A29 (96% sens) FA: Diffuse retinal vasculitis, disc leakage ICGA: Hypocyanescent spots radiate from disc ERG: Rod+cone dysfunction (monitor — VA may be 20/20!) VF: Extensive loss despite preserved VA Rx: Long-term IMT (MTX/MMF ± adalimumab) BOX 2 (teal border): "MFCPU (Multifocal Choroiditis+Panuveitis)" Demographics: Young myopic women, mean age 30yr Laterality: Bilateral (can be unilateral) Lesions: Multiple oval >125µm, any zone, punched-out scars Vitritis: YES (100%) + AC cells 50% Key: CNV common complication FA: Early blockage → late staining; hyperfluorescent if CNV OCT: RPE elevation, subretinal hyperreflective material Rx: Systemic IMT essential (83% reduced complications) Note: DD from PIC: MFCPU has vitritis; PIC has none BOX 3 (green border): "SFU (Subretinal Fibrosis & Uveitis Syndrome)" Demographics: Young women Laterality: Bilateral Lesions: Progressive creamy-white → subretinal fibrosis Vitritis: YES, panuveitis Prognosis: Worst among WDS Rx: Early aggressive IMT; emerging: rituximab SECOND SECTION HEADER (purple): "GROUP 2 — WITHOUT VITRITIS — PLACOID (large flat lesions)" BOX 4 (yellow border): "APMPPE" Age: 20-50yr, M=F | Bilateral Trigger: Viral prodrome common Lesions: Large flat grey-white placoid, 1-2DD, RPE/choriocapillaris Course: SELF-LIMITED (weeks) FA: Early complete BLOCKAGE → late STAINING (pathognomonic) ICGA: Hypocyanescent all phases OCT: Outer retinal hyperreflectivity + SRF (active) FAF: HypoAF active → hypoAF healed Complication: Cerebral vasculitis (rare) — check for headache! Rx: Observation; steroids if CNS involved BOX 5 (orange border): "SERPIGINOUS CHOROIDITIS" Age: 20-60yr, M>F | Bilateral asymmetric Origin: PERIPAPILLARY → spreads centrifugally (snake-like) Active: Grey-white RPE lesion at advancing edge Healed: Atrophy + hyperpigmentation in wake FA: Early hypoFl → late staining at active border OCT: Outer retinal hyperreflectivity at active edge FAF: HyperAF edge → hypoAF scar CNV: 25% (at scar border) WARNING: ⚠ EXCLUDE TB-SERPIGINOUS first (IGRA mandatory!) Rx: Triple IMT: antimetabolite + cyclosporine ± cyclophosphamide BOX 6 (red-orange border): "AMPIGINOUS / RELENTLESS PLACOID CHOROIDITIS" Age: Any adult | Bilateral Lesions: >50 multifocal placoid, widespread (inc periphery) Distinct from serpiginous: separate discrete lesions, not peripapillary spread Course: Chronic relentless (unlike self-limited APMPPE) Rx: Corticosteroids + IMT; anti-VEGF for CNV THIRD SECTION HEADER (blue): "GROUP 3 — WITHOUT VITRITIS — SMALL MULTIFOCAL / OUTER RETINAL" BOX 7 (sky border): "MEWDS (Multiple Evanescent White Dot Syndrome)" Demographics: Young females, mean age 25yr | Unilateral Lesions: Multiple white-orange dots 100-200µm, perifoveal/peripapillary Hallmark: PEAU D'ORANGE fovea Symptoms: Photopsias, enlarged blind spot, mild VF defect FA: Wreathlike late staining of dots ICGA: MORE lesions visible than FA (hypocyanescent) ERG: Reversible ↓a-wave (recovers with disease resolution) FAF: HyperAF lesions (persist even after clinical resolution) Course: SELF-LIMITED, resolves weeks-months Rx: Observation; usually full recovery BOX 8 (lavender border): "PIC (Punctate Inner Choroiditis)" Demographics: Young myopic women | Bilateral or unilateral Lesions: Small deep yellow-white 100-300µm, posterior pole HALLMARK: Absolutely NO vitritis, NO AC cells OCT: Focal RPE elevation + outer retinal disruption FA: Early hypofluorescence → late staining CNV: VERY COMMON complication (~40%) Rx: Anti-VEGF for CNV; IMT for recurrent disease BOX 9 (grey border): "AZOOR (Acute Zonal Occult Outer Retinopathy)" Demographics: Young-middle aged (mean 37yr), 76% female Laterality: Unilateral initially; may become bilateral Hallmark: FUNDUS OFTEN NORMAL AT PRESENTATION Symptoms: Photopsias (pulsations, bubbles, windmills) + zonal VF loss Later: Annular white ring → RPE granularity → vessel attenuation ERG: MARKEDLY ABNORMAL (outer retinal/photoreceptor degeneration) mfERG: Localizes dysfunction zone FAF: Zonal hypoAF (atrophy) + hyperAF at active border VF: Temporal/superior scotomas + enlarged blind spot Course: Progressive; often irreversible Rx: Steroids/IMT — variable, often disappointing response BOX 10 (pink border): "ARPE (Acute Retinal Pigment Epitheliitis)" Demographics: Young adults, self-limited Lesions: Perifoveal dark spots with light halo on fundoscopy OCT: Small focal RPE disruption Course: Self-limited; resolves weeks; VA recovers Rx: Observation BOX 11 (green border): "OHS (Ocular Histoplasmosis Syndrome)" Region: Ohio-Mississippi valley (endemic) Laterality: Bilateral findings, usually unilateral presentation Lesions: Punched-out chorioretinal scars + peripapillary atrophy HALLMARK: Absolutely NO vitritis (distinguishes from MFCPU) CNV: Common, macular complications Serology: Histoplasmin skin test (rarely needed clinically) Dx: Clinical + geography Rx: Anti-VEGF for CNV; IMT for recurrent inflammation (rare) BOTTOM COMPARISON TABLE (6 columns): "VITRITIS | BILATERAL | SELF-LIMITED | CNV RISK | KEY INVESTIGATION | HLA" Birdshot: Mild/Yes | Bilateral | No | Low | HLA-A29, ERG | HLA-A29 MFCPU: Yes | Bilateral | No | High | ERG, OCT | None specific SFU: Yes | Bilateral | No | Moderate | Clinical | None APMPPE: Minimal | Bilateral | YES | Rare | FA (early blockage) | None Serpiginous: None | Bilateral | No | 25% | IGRA (exclude TB!) | None Ampiginous: None | Bilateral | No | Moderate | FA, ICGA | None MEWDS: None | Unilateral | YES | None | FA wreathlike, FAF | None PIC: None | Bilateral | No | Very high | OCT, FA | None AZOOR: None | Unilateral | Usually not | None | ERG, FAF, mfERG | None ARPE: None | Unilateral | YES | None | OCT | None OHS: None | Bilateral scars | No | Yes | Clinical, geography | None BOTTOM WARNING (amber box): "All WDS: Exclude SYPHILIS (FTA-Abs+RPR) and TB (IGRA) before diagnosis. Serpiginous → TB MANDATORY." Professional ophthalmology reference chart. All text readable. Clean layout. Color-coded borders per group.
400, message: Got more than 4194304 bytes when reading: b'data: {"candidates": [{"content": {"role": "model","parts": [{"inlineData": {"mimeType": "image/png"...'.
We encountered an error while processing your request. Please try again or reach out to us for help.