Explain
python -m markitdown "/home/daytona/workspace/attachments/e5dbbb63-cb14-4b98-a74…
cd /home/daytona/workspace && python3 -c " from pptx import Presentation from pp…
pip install --user python-pptx -q && python3 -c " from pptx import Presentation …
| Feature | BRVO | Non-ischaemic CRVO | Ischaemic CRVO | BRAO | CRAO |
|---|---|---|---|---|---|
| Vision loss | Sectoral (if macula involved) | Moderate | Severe (CF or worse) | Sectoral/altitudinal | Profound |
| RAPD | Variable | Absent/mild | Present | Often present | Profound |
| Haemorrhages | Quadrant only | All quadrants (mild) | All quadrants (severe) | Sector | All quadrants |
| Cherry-red spot | No | No | No | No | Yes |
| NVI risk | Low | Low | ~50% | No | Rarely |
| Prognosis | Moderate | ~50% good | Very poor | Variable | Very poor |
Create a quick reference PDF comparing CRVO vs BRVO vs retinal artery occlusions
mkdir -p /home/daytona/workspace/retinal-occlusion-pdf && python3 -c "from repor…
~/retinal-occlusion-pdf/build_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/retinal-occlusion-pdf/Retinal_Occlusion_Quick_Reference.pdf"
# ─── Colour palette ───────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0D2B4E")
TEAL = colors.HexColor("#0A7B8C")
CRIMSON = colors.HexColor("#A81C2E")
ORANGE = colors.HexColor("#D4640A")
GOLD = colors.HexColor("#E8A820")
LTBLUE = colors.HexColor("#D6EAF8")
LTRED = colors.HexColor("#FADBD8")
LTORANGE = colors.HexColor("#FDEBD0")
LTGREEN = colors.HexColor("#D5F5E3")
LTGRAY = colors.HexColor("#F2F3F4")
WHITE = colors.white
DARKGRAY = colors.HexColor("#2C3E50")
# ─── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
leftMargin=1.2*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.2*cm
)
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_style = S("Title", fontSize=18, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=2)
subtitle_style = S("Sub", fontSize=10, textColor=LTBLUE, fontName="Helvetica",
alignment=TA_CENTER, spaceAfter=4)
section_style = S("Sec", fontSize=11, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER)
cell_head = S("CH", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=11)
cell_body = S("CB", fontSize=7.8, textColor=DARKGRAY, fontName="Helvetica",
alignment=TA_LEFT, leading=10)
cell_body_c = S("CBC", fontSize=7.8, textColor=DARKGRAY, fontName="Helvetica",
alignment=TA_CENTER, leading=10)
cell_bold = S("CBB", fontSize=7.8, textColor=DARKGRAY, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=10)
bullet_style = S("BL", fontSize=7.5, textColor=DARKGRAY, fontName="Helvetica",
alignment=TA_LEFT, leading=10, leftIndent=8, firstLineIndent=-8)
def P(text, style=None):
if style is None:
style = cell_body_c
return Paragraph(text, style)
def PL(text):
return Paragraph(u"\u2022 " + text, bullet_style)
def bold(text):
return f"<b>{text}</b>"
# ─── Build story ──────────────────────────────────────────────────────────────
story = []
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 1 – COMPARISON TABLE
# ══════════════════════════════════════════════════════════════════════════════
# Title banner
title_table = Table(
[[Paragraph("RETINAL VASCULAR OCCLUSION | Quick Reference", title_style)],
[Paragraph("CRVO (Non-ischaemic & Ischaemic) • BRVO • BRAO • CRAO", subtitle_style)]],
colWidths=[27.6*cm]
)
title_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,0), 10),
("BOTTOMPADDING", (0,-1), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [6,6,6,6]),
]))
story.append(title_table)
story.append(Spacer(1, 0.3*cm))
# ── Main comparison table ─────────────────────────────────────────────────────
COL = [3.5*cm, 4.3*cm, 4.3*cm, 4.3*cm, 4.2*cm, 4.2*cm] # total ~24.8
HDR_BG = [TEAL, CRIMSON, CRIMSON, CRIMSON, NAVY, NAVY]
ROW_COLS = [LTBLUE, LTRED, LTRED, LTRED, LTORANGE, LTORANGE]
ALT_COLS = [colors.HexColor("#EBF5FB"), colors.HexColor("#FDEDEC"),
colors.HexColor("#FDEDEC"), colors.HexColor("#FDEDEC"),
colors.HexColor("#FEF9E7"), colors.HexColor("#FEF9E7")]
headers = [
P("FEATURE", cell_head),
P("Non-ischaemic\nCRVO", cell_head),
P("Ischaemic\nCRVO", cell_head),
P("BRVO", cell_head),
P("BRAO", cell_head),
P("CRAO", cell_head),
]
data = [headers]
rows = [
("Pathology",
"Partial venous stasis;\ncapillaries intact",
"Severe capillary\nclosure; retinal hypoxia",
"Occlusion at AV\ncrossing or disc branch",
"Embolic/thrombotic\nocclusion of branch\narterial supply",
"Embolic/thrombotic\nocclusion of central\nretinal artery"),
("Onset",
"Sudden, painless\nmonocular vision loss",
"Sudden, severe,\npainless (pain if NVG)",
"Sectoral vision loss\n(may be unnoticed)",
"Sudden painless\naltitudinal/sectoral\nfield loss",
"Sudden profound\npainless loss\n(painful in GCA)"),
("Visual Acuity",
"Variable; 6/60 or\nbetter (mostly)",
"CF or worse;\nextremely poor\nprognosis",
"Affected only if\nmacula involved",
"Variable; poor if\ncentral vision lost",
"Severely reduced;\npreserved if patent\ncilioretinal artery"),
("RAPD",
"Absent or mild",
"Present",
"Variable",
"Often present",
"Profound / total\n(amaurotic pupil)"),
("Haemorrhages",
"Dot, blot, flame\nin ALL quadrants\n(mild-moderate)",
"Extensive blot &\nflame in ALL\nquadrants (severe)",
"Restricted to\nAFFECTED quadrant\nonly",
"None typically\n(occasionally small)",
"Occasional small\nhaemorrhage\n(20% show emboli)"),
("Other Fundus\nSigns",
"Venous tortuosity,\nCWS, disc/macular\noedema; PIRW in\nyoung patients",
"Severe venous\ntortuosity, disc\nswelling; CWS\nprominent",
"Venous tortuosity,\nCWS, oedema in\naffected segment",
"'Cattle trucking'\n/ boxcarring;\nground-glass retina\nin ischaemic sector",
"Cherry-red spot\nat macula; pale\nswollen retina;\nperipapillary swelling"),
("NVI / NVG Risk",
"Low",
"~50% develop\nrubeosis iridis\n(2-4 months;\n'100-day glaucoma')",
"Low (~1/3 get\nchronic macular\noedema or NV)",
"None",
"Rare"),
("Key\nComplications",
"Macular oedema;\n~50% recover vision;\n~30% progress to\nischaemic CRVO",
"Macular ischaemia;\nNVG; NVI in 50%;\nblindness",
"Macular oedema;\nneovascularization\n(~1/3 cases)",
"Permanent visual\nfield defect;\nrarely recovers",
"Irreversible vision\nloss; very poor\nprognosis without\nurgent treatment"),
("Aetiology /\nRisk Factors",
"HTN, glaucoma,\nhyperlipidaemia,\nDM, age >65",
"Same as non-isch;\nmore severe vascular\ndisease",
"HTN (most common),\nOCP (young women),\nsmoking, age",
"Carotid emboli,\ncardiac emboli,\natherosclerosis",
"Emboli (Hollenhorst\nplaque, calcific,\nplatelet-fibrin),\natherosclerosis,\nGCA"),
("Investigations",
"BP, FBC, ESR/PV,\nglucose, lipids,\nprotein electrophoresis",
"Same + gonioscopy\nat each review",
"BP, FBC, ESR/PV,\nglucose, lipids",
"Carotid Doppler,\nECHO, ECG, BP,\nlipids, glucose",
"URGENT: carotid\nDoppler, ECHO,\nECG, ESR/CRP\n(exclude GCA)"),
("Treatment\n(Macular Oedema)",
"Anti-VEGF or\nOzurdex implant;\ntarget VA <6/9;\nOCT guided",
"Anti-VEGF;\nOzurdex implant;\nlaser NOT effective\nfor VA",
"Anti-VEGF or\nOzurdex implant;\nlaser NOT effective\nfor VA",
"No specific Rx;\nmonitor 3 months",
"N/A (arterial,\nnot oedema)"),
("Treatment\n(Neovascularization\n/ Ischaemia)",
"Monitor; PRP if\nprogresses to\nischaemic",
"PRP without delay\nif NVI/angle NV;\nAnti-VEGF adjunct\nevery 6 weeks",
"PRP if NV;\nAnti-VEGF adjunct",
"N/A",
"N/A"),
("EMERGENCY\nTreatment",
"Not emergency",
"Urgent if NVG",
"Not emergency",
"EMERGENCY:\nocular massage,\nAC paracentesis,\nIOP lowering,\ncarbogen, mannitol",
"EMERGENCY:\nsame as BRAO +\nmore aggressive;\nthrombolysis;\nsupine posture"),
("Prognosis",
"~50% return to\nnormal/near-normal\nvision",
"Generally extremely\npoor; macular\nischaemia usual",
"Variable; good if\nmacula spared",
"Poor if central\nvision involved;\nfield defect persists",
"Very poor;\npreserved only if\ncilioretinal artery\npatent"),
]
for i, (feat, c1, c2, c3, c4, c5) in enumerate(rows):
row = [
P(bold(feat), cell_bold),
P(c1, cell_body_c),
P(c2, cell_body_c),
P(c3, cell_body_c),
P(c4, cell_body_c),
P(c5, cell_body_c),
]
data.append(row)
tbl = Table(data, colWidths=COL, repeatRows=1)
ts = TableStyle([
# Header row
("BACKGROUND", (0, 0), (0, 0), TEAL),
("BACKGROUND", (1, 0), (3, 0), CRIMSON),
("BACKGROUND", (4, 0), (5, 0), NAVY),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 8.5),
("ALIGN", (0, 0), (-1, 0), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 4),
("RIGHTPADDING", (0, 0), (-1, -1), 4),
# Feature col background
("BACKGROUND", (0, 1), (0, -1), LTBLUE),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
# Grid
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#BDC3C7")),
("LINEBELOW", (0, 0), (-1, 0), 1.5, WHITE),
# Alternating row bands
])
# Alternating rows
for i in range(1, len(data)):
bg = LTGRAY if i % 2 == 0 else WHITE
ts.add("BACKGROUND", (1, i), (3, i), colors.HexColor("#FDEDEC") if i % 2 == 0 else colors.HexColor("#FEF5F5"))
ts.add("BACKGROUND", (4, i), (5, i), colors.HexColor("#FEF9E7") if i % 2 == 0 else colors.HexColor("#FFFDF0"))
tbl.setStyle(ts)
story.append(tbl)
story.append(Spacer(1, 0.2*cm))
# footnote
fn = P("<i>Abbreviations: CRVO = Central Retinal Vein Occlusion | BRVO = Branch Retinal Vein Occlusion | "
"CRAO = Central Retinal Artery Occlusion | BRAO = Branch Retinal Artery Occlusion | "
"CWS = Cotton Wool Spots | NVI = Neovascularisation of Iris | NVG = Neovascular Glaucoma | "
"PRP = Panretinal Photocoagulation | GCA = Giant Cell Arteritis | PIRW = Perivenular Ischaemic Retinal Whitening | "
"HTN = Hypertension | OCP = Oral Contraceptive Pill | CF = Counting Fingers | RAPD = Relative Afferent Pupillary Defect</i>",
S("fn", fontSize=6.5, textColor=colors.HexColor("#7F8C8D"), fontName="Helvetica",
alignment=TA_LEFT, leading=8))
story.append(fn)
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 2 – Key Points & Management Flowcharts
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
# Title strip
title2 = Table([[P("KEY CLINICAL PEARLS & MANAGEMENT ALGORITHMS", title_style)]],
colWidths=[27.6*cm])
title2.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 9),
("BOTTOMPADDING", (0,0), (-1,-1), 9),
]))
story.append(title2)
story.append(Spacer(1, 0.35*cm))
# ── Four panels ───────────────────────────────────────────────────────────────
panel_w = 6.7*cm
def panel(title_text, bg, items):
rows = [[P(title_text, S("pt", fontSize=9.5, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER))]]
for item in items:
rows.append([PL(item)])
t = Table(rows, colWidths=[panel_w])
st = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), bg),
("BACKGROUND", (0, 1), (-1, -1), colors.HexColor("#FAFAFA")),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 3),
("LEFTPADDING", (0, 0), (-1, -1), 5),
("RIGHTPADDING", (0, 0), (-1, -1), 5),
("BOX", (0, 0), (-1, -1), 0.8, bg),
("GRID", (0, 1), (-1, -1), 0.3, colors.HexColor("#DDDDDD")),
("VALIGN", (0, 0), (-1, -1), "TOP"),
])
t.setStyle(st)
return t
p1 = panel("CRVO – Diagnosis & Monitoring", TEAL, [
"Haemorrhages in ALL 4 quadrants = key distinguisher from BRVO",
"Non-ischaemic → ischaemic conversion in ~30%: monthly review for 6 months",
"VA worse than 6/60 → suspect ischaemia; check for RAPD",
"PIRW (perivenular whitening) = early sign in young non-ischaemic CRVO",
"Ischaemic: gonioscopy at EVERY visit (NVI risk ~50% by 4 months)",
"'Hundred-day glaucoma' = NVG developing 2-4 months after ischaemic CRVO",
"OCT macular thickness >250 µm → treat oedema",
"Anti-VEGF / Ozurdex for oedema; PRP urgently for NVI/NVG",
"SCORE trial: triamcinolone 1 mg effective for macular oedema in CRVO",
"GENEVA trial: Ozurdex superior to triamcinolone",
])
p2 = panel("BRVO – Diagnosis & Management", CRIMSON, [
"Haemorrhages RESTRICTED to affected quadrant only",
"Most common occlusion type; usually at AV crossing",
"Vision affected ONLY if macula involved",
"Inferotemporal vein most commonly affected",
"Chronic macular oedema + neovascularization in ~1/3",
"Anti-VEGF (bevacizumab/ranibizumab) or Ozurdex for macular oedema",
"Laser photocoagulation: anatomical improvement but NOT visual benefit",
"PRP for retinal neovascularization",
"Most common risk factor = hypertension (control is paramount)",
"OCP: most common cause in young women → advise discontinuation",
])
p3 = panel("BRAO – Diagnosis & Acute Rx", ORANGE, [
"Sudden painless SECTORAL or ALTITUDINAL field loss",
"May be asymptomatic if central vision spared",
"'Cattle trucking' / boxcarring = sludging in vessels",
"Ground-glass (white) retina in ischaemic sector",
"FA: delayed filling + hypofluorescence in sector",
"Embolus visible over disc in inferotemporal occlusion",
"Visual field defect rarely recovers",
"Investigate: carotid Doppler, ECHO, ECG, lipids, glucose",
"Manage like TIA/stroke – high early stroke risk",
"Review at 3 months; antiplatelet therapy",
])
p4 = panel("CRAO – EMERGENCY Management", NAVY, [
"Cherry-red spot = pathognomonic; results from choroid contrast vs pale retina",
"Profound/total RAPD (amaurotic pupil)",
"If cilioretinal artery patent → partial macular sparing",
"Absence of light perception → suspect GCA or ophthalmic artery occlusion",
"URGENT ESR/CRP to exclude GCA (if GCA → IV methylprednisolone)",
"Ocular massage: 10-15s pressure, release, x3-5 min (dislodge embolus)",
"AC paracentesis: 0.1-0.2 mL aqueous via 27G needle (controversial)",
"IOP lowering: apraclonidine 1%, timolol 0.5%, IV acetazolamide 500 mg",
"Carbogen (95% O2 + 5% CO2) → vasodilation + retards ischaemia",
"Supine posture, sublingual isosorbide dinitrate, mannitol",
"Carotid endarterectomy if stenosis >70%",
])
panels_row = Table([[p1, p2, p3, p4]], colWidths=[panel_w+0.2*cm]*4)
panels_row.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
]))
story.append(panels_row)
story.append(Spacer(1, 0.35*cm))
# ── Embolus types + systemic management side by side ─────────────────────────
embolus_data = [
[P("EMBOLUS TYPES IN RETINAL ARTERIAL OCCLUSION", S("eht", fontSize=9, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER))],
[Table([
[P(bold("Type"), cell_head), P(bold("Appearance"), cell_head),
P(bold("Origin"), cell_head), P(bold("Clinical Note"), cell_head)],
[P("Cholesterol\n(Hollenhorst plaque)", cell_body_c),
P("Refractile, orange/yellow", cell_body_c),
P("Carotid artery atheroma", cell_body_c),
P("At vessel bifurcations; often asymptomatic", cell_body_c)],
[P("Calcific", cell_body_c), P("White, dense", cell_body_c),
P("Cardiac valves", cell_body_c),
P("Larger; more likely to cause CRAO", cell_body_c)],
[P("Platelet-fibrin", cell_body_c), P("Dull white, elongated", cell_body_c),
P("Carotid artery atheroma", cell_body_c),
P("May cause retinal TIA (amaurosis fugax); transient", cell_body_c)],
], colWidths=[3.2*cm, 3.2*cm, 3.5*cm, 5.5*cm],
style=TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("BACKGROUND", (0,1), (-1,1), colors.HexColor("#EAF4F4")),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), colors.HexColor("#EAF4F4")),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BDC3C7")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
]
]
emb_tbl = Table(embolus_data, colWidths=[15.6*cm])
emb_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TOPPADDING", (0,0), (-1,0), 6),
("BOTTOMPADDING", (0,0), (-1,0), 6),
("BOX", (0,0), (-1,-1), 0.8, TEAL),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
systemic_data = [
[P("SYSTEMIC MANAGEMENT (ALL RVO/RAO)", S("sht", fontSize=9, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER))],
]
sys_items = [
"BP control – treat hypertension aggressively",
"Lipid management – statin therapy if hyperlipidaemia",
"Diabetes – optimise glycaemic control (HbA1c target)",
"Stop smoking – immediate cessation advised",
"OCP – discontinue in females with RVO",
"Antiplatelet therapy (aspirin) after arterial occlusion",
"Oral anticoagulation (warfarin) in selected cases",
"Carotid Doppler ultrasound – screen for stenosis",
"ECG + ECHO – exclude cardiac source of emboli / arrhythmia",
"Plasma protein electrophoresis – exclude myeloma",
"Thrombophilia screen in young patients (<50 years)",
"Carotid endarterectomy if symptomatic stenosis >70%",
"Urgent physician referral for cardiac arrhythmia",
"High stroke risk in first days after RAO – urgent neurology",
]
for item in sys_items:
systemic_data.append([PL(item)])
sys_tbl = Table(systemic_data, colWidths=[11.6*cm])
sys_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,-1), colors.HexColor("#FAFAFA")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("BOX", (0,0), (-1,-1), 0.8, NAVY),
("GRID", (0,1), (-1,-1), 0.3, colors.HexColor("#DDDDDD")),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
bottom_row = Table([[emb_tbl, Spacer(0.4*cm, 1), sys_tbl]],
colWidths=[15.6*cm, 0.4*cm, 11.6*cm])
bottom_row.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
story.append(bottom_row)
# ── Footer ────────────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.2*cm))
footer = P("<i>Based on: Kanski's Clinical Ophthalmology & Class 3-2 Lecture Notes | "
"For educational use only | Always verify with current clinical guidelines</i>",
S("ft", fontSize=6, textColor=colors.HexColor("#95A5A6"), fontName="Helvetica",
alignment=TA_CENTER))
story.append(footer)
doc.build(story)
print("PDF created:", OUTPUT)
python3 /home/daytona/workspace/retinal-occlusion-pdf/build_pdf.py
Retinal Occlusion Quick Reference
PDF Document · PDF
Crvo and Crao
| Feature | Non-ischaemic CRVO | Ischaemic CRVO | CRAO |
|---|---|---|---|
| Type | Venous occlusion | Venous occlusion | Arterial occlusion |
| Pathology | Partial venous stasis; capillaries intact | Severe capillary closure; retinal hypoxia | Embolic/thrombotic block of central retinal artery |
| Most Common Cause | Hypertension, glaucoma, age | Same, more severe vascular disease | Emboli (Hollenhorst, calcific, platelet-fibrin); atherosclerosis; GCA |
| Onset | Sudden, painless, monocular VA loss | Sudden, severe, painless (pain if NVG develops) | Sudden, profound, painless (painful if GCA) |
| Visual Acuity | Variable; often 6/60 or better | Counting fingers (CF) or worse | Severely reduced; may be preserved if cilioretinal artery is patent |
| RAPD | Absent or mild | Present | Profound / total (amaurotic pupil) |
| Haemorrhages | Dot, blot, flame in ALL 4 quadrants (mild-moderate) | Extensive blot + flame in ALL 4 quadrants (severe) | Occasional small haemorrhage; emboli visible in 20% |
| Venous Changes | Tortuosity + dilatation of all CRV branches | Severe tortuosity + engorgement of all branches | No venous changes (arterial disease) |
| Cotton Wool Spots | Present, generally mild | Prominent | Not typical |
| Disc | Mild disc oedema | Swollen, hyperaemic disc | Peripapillary retina swollen and opaque |
| Macular | Macular oedema (mild-moderate) | Macular ischaemia (major cause of blindness) | Pale oedematous retina |
| Pathognomonic Sign | PIRW (perivenular ischaemic retinal whitening) in young patients | - | Cherry-red spot at macula |
| NVI / Rubeosis Iridis | Absent | ~50% by 2-4 months ("100-day glaucoma") | Rare |
| Neovascular Glaucoma | Low risk | High risk | Rare |
| Gonioscopy | Not routine | Required at EVERY follow-up visit | Not routine |
| Resolution Time | Signs resolve over months | Acute signs resolve over 9-12 months | Infarction complete within hours |
| Prognosis | ~50% return to normal/near-normal vision | Extremely poor; macular ischaemia usual | Very poor unless treated within hours |
| Emergency? | No | Urgent if NVG develops | YES - ocular emergency |
| Treatment - Macular | Anti-VEGF or Ozurdex implant | Anti-VEGF or Ozurdex implant; laser NOT effective | N/A (not an oedema condition) |
| Treatment - NV | PRP if progresses to ischaemic | PRP without delay for NVI/NVG + Anti-VEGF adjunct | N/A |
| Emergency Treatment | - | Urgent PRP / anti-VEGF if NVG | Ocular massage, AC paracentesis, IOP lowering (timolol, apraclonidine, IV acetazolamide), carbogen, mannitol, supine posture, thrombolysis |
| Systemic Rx | BP, lipids, glucose, ESR, FBC | Same + gonioscopy monitoring | URGENT carotid Doppler, ECHO, ECG; ESR/CRP (exclude GCA); antiplatelet; carotid endarterectomy if stenosis >70% |
| Stroke Risk | Low | Low | HIGH in first few days |
| Key Investigations | BP, FBC, ESR/PV, glucose, lipids, protein electrophoresis | Same + gonioscopy at each visit | Add: urgent carotid Doppler, ECHO, ECG, ESR/CRP |
| CRVO | CRAO | |
|---|---|---|
| Vessel | Vein | Artery |
| Blood | Too much (haemorrhages everywhere) | Too little (pale retina) |
| Classic sign | Dilated tortuous veins in all quadrants | Cherry-red spot |
| Worst fear | 100-day glaucoma (NVG from rubeosis) | Irreversible infarction within hours |
| Time pressure | Days-weeks for NV monitoring | Minutes-hours for reperfusion |
| GCA link | No | Yes - always exclude |