Make me pdf on splenectomy for PG exam based on standard textbooks
mkdir -p /home/daytona/workspace/splenectomy && ls /home/daytona/workspace/splen…
~/splenectomy/splenectomy_pg.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib.colors import HexColor, white, black
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem
# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1a3a5c")
MID_BLUE = HexColor("#2563a8")
ACCENT = HexColor("#e8f0fa")
LIGHT_GREY = HexColor("#f5f5f5")
GREEN = HexColor("#166534")
GREEN_BG = HexColor("#dcfce7")
RED_BG = HexColor("#fef2f2")
RED = HexColor("#991b1b")
YELLOW_BG = HexColor("#fefce8")
YELLOW = HexColor("#854d0e")
TABLE_HEAD = HexColor("#1e40af")
TABLE_ALT = HexColor("#eff6ff")
BORDER = HexColor("#cbd5e1")
W, H = A4
MARGIN = 2*cm
# ── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
"/home/daytona/workspace/splenectomy/Splenectomy_PG_Exam.pdf",
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=2.2*cm, bottomMargin=2*cm,
title="Splenectomy – PG Exam Review",
author="Orris Medical"
)
# ── Styles ────────────────────────────────────────────────────────────────────
SS = getSampleStyleSheet()
def s(name, **kw):
base = SS[name]
return ParagraphStyle(name+"_custom", parent=base, **kw)
TITLE_S = s("Title", fontSize=24, textColor=white, alignment=TA_CENTER, spaceAfter=4)
SUB_S = s("Normal", fontSize=13, textColor=HexColor("#bfdbfe"), alignment=TA_CENTER)
H1 = s("Heading1", fontSize=15, textColor=white, spaceBefore=0, spaceAfter=4, leading=18)
H2 = s("Heading2", fontSize=12, textColor=DARK_BLUE, spaceBefore=10, spaceAfter=3, leading=15)
H3 = s("Heading3", fontSize=10.5, textColor=MID_BLUE, spaceBefore=6, spaceAfter=2)
BODY = s("Normal", fontSize=9.5, leading=14, spaceBefore=2, spaceAfter=2, alignment=TA_JUSTIFY)
BULLET = s("Normal", fontSize=9.5, leading=13, leftIndent=14, spaceBefore=1)
BOLD_BODY = s("Normal", fontSize=9.5, leading=14, fontName="Helvetica-Bold")
CAPTION = s("Normal", fontSize=8, textColor=HexColor("#64748b"), alignment=TA_CENTER, spaceBefore=2)
KEY_STYLE = s("Normal", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE)
BOX_S = s("Normal", fontSize=9.5, leading=14, alignment=TA_JUSTIFY)
SOURCE = s("Normal", fontSize=7.5, textColor=HexColor("#64748b"), alignment=TA_RIGHT, spaceAfter=0)
WARN_S = s("Normal", fontSize=9.5, textColor=RED, fontName="Helvetica-Bold")
def bullet(text, color=MID_BLUE, indent=14):
return Paragraph(f'<bullet bulletIndent="{indent}" bulletOffsetY="1"><font color="#{color.hexval()[2:]}">•</font></bullet>{text}', BULLET)
def h1_block(text):
"""Full-width dark-blue heading bar."""
t = Table([[Paragraph(text, H1)]], colWidths=[W - 2*MARGIN])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
return t
def callout(title, items, bg=ACCENT, title_color=MID_BLUE):
rows = [[Paragraph(f'<font color="#{title_color.hexval()[2:]}" size="10"><b>{title}</b></font>', BODY)]]
for i in items:
rows.append([bullet(i)])
t = Table(rows, colWidths=[W - 2*MARGIN - 0.6*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (0,0), 6),
("BOTTOMPADDING",(0,-1), (-1,-1), 6),
("TOPPADDING", (1,0), (-1,-1), 1),
("BOX", (0,0), (-1,-1), 0.5, BORDER),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
return t
def two_col_table(headers, rows, col_widths=None, alt=True):
total = W - 2*MARGIN
if col_widths is None:
col_widths = [total/len(headers)] * len(headers)
data = [[Paragraph(f'<font color="white"><b>{h}</b></font>', BODY) for h in headers]]
for i, r in enumerate(rows):
data.append([Paragraph(str(c), BODY) for c in r])
ts = TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("GRID", (0,0), (-1,-1), 0.3, BORDER),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
])
if alt:
for i in range(1, len(data)):
if i % 2 == 0:
ts.add("BACKGROUND", (0,i), (-1,i), TABLE_ALT)
return Table(data, colWidths=col_widths, style=ts, repeatRows=1)
# ═══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER PAGE ──────────────────────────────────────────────────────────────
cover = Table(
[[
Paragraph("SPLENECTOMY", TITLE_S),
Spacer(1, 0.3*cm),
Paragraph("A Comprehensive Review for PG Surgery Examinations", SUB_S),
Spacer(1, 0.5*cm),
Paragraph('<font color="#93c5fd" size="10">Based on: Bailey & Love\'s 28e · Schwartz\'s 11e · Current Surgical Therapy 14e<br/>'
'Fischer\'s Mastery 8e · Goldman-Cecil 2e · Sabiston · Harrison\'s 22e</font>',
s("Normal", fontSize=10, textColor=HexColor("#93c5fd"), alignment=TA_CENTER)),
Spacer(1, 0.4*cm),
HRFlowable(width="80%", color=HexColor("#3b82f6"), thickness=1.5),
Spacer(1, 0.3*cm),
Paragraph('<font color="#bfdbfe" size="9">Orris Medical · May 2026</font>',
s("Normal", textColor=HexColor("#bfdbfe"), alignment=TA_CENTER, fontSize=9)),
]],
colWidths=[W - 2*MARGIN]
)
cover.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("TOPPADDING", (0,0), (-1,-1), 30),
("BOTTOMPADDING", (0,0), (-1,-1), 30),
("ROUNDEDCORNERS", (0,0), (-1,-1), [8,8,8,8]),
]))
story.append(Spacer(1, 0.5*cm))
story.append(cover)
story.append(Spacer(1, 0.8*cm))
# Quick-reference tags row
tags_data = [["ANAT", "PHYSIO", "INDICATIONS", "TECHNIQUE", "COMPLICATIONS", "POST-OP CARE"]]
tags = Table(tags_data, colWidths=[(W-2*MARGIN)/6]*6)
tags.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), MID_BLUE),
("BACKGROUND", (1,0), (1,0), HexColor("#7c3aed")),
("BACKGROUND", (2,0), (2,0), HexColor("#0f766e")),
("BACKGROUND", (3,0), (3,0), HexColor("#b45309")),
("BACKGROUND", (4,0), (4,0), HexColor("#be123c")),
("BACKGROUND", (5,0), (5,0), HexColor("#166534")),
("TEXTCOLOR", (0,0), (-1,-1), white),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("FONTNAME", (0,0), (-1,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
story.append(tags)
story.append(Spacer(1, 0.6*cm))
# ═══════════════════════════════════════════════════════════════════════════════
# 1. ANATOMY & EMBRYOLOGY
# ═══════════════════════════════════════════════════════════════════════════════
story.append(h1_block("1. ANATOMY AND EMBRYOLOGY"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Embryology", H2))
story.append(Paragraph(
"The spleen arises from the <b>primitive mesoderm</b> as an outgrowth of the left side of the dorsal "
"mesogastrium. It is visible by the <b>5th week of gestation</b> in an embryo 8 mm long. "
"Development begins through the <b>splanchnic mesodermal plate</b> at embryonic day 12. "
"The embryonic spleen is first colonized by erythroid and myeloid progenitor cells at 2 weeks of gestation. "
"The spleen serves as an important <b>haematopoietic organ until the 5th month of gestation</b>. "
"After birth, splenic erythropoietic function may persist in some haematological disorders.",
BODY))
story.append(Paragraph("Anatomical Dimensions", H2))
anat_data = [
["Parameter", "Normal Value"],
["Length", "7–11 cm"],
["Weight", "150 g (range 70–250 g)"],
["Position", "Left hypochondrium, behind 9th–11th ribs"],
["Diaphragmatic surface", "Faces posterosuperiorly against left lung/pleura"],
["Visceral surface", "Shows gastric, colic, renal, pancreatic impressions"],
]
story.append(two_col_table(["Parameter", "Normal Value"], anat_data[1:], col_widths=[8*cm, 9.2*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Suspensory Ligaments", H2))
lig_rows = [
["Gastrosplenic", "Contains short gastric vessels and left gastroepiploic vessels"],
["Splenorenal (lienorenal)", "Contains splenic artery, vein, tail of pancreas"],
["Splenocolic", "Connects splenic flexure to spleen – avascular"],
["Splenophrenic (phrenosplenic)", "Connects spleen to diaphragm – avascular"],
["Phrenicocolic (sustentaculum lienis)", "Supports the lower pole of spleen"],
]
story.append(two_col_table(["Ligament", "Contents / Notes"], lig_rows, col_widths=[6.5*cm, 10.7*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Vascular Supply", H2))
story.append(Paragraph(
"The <b>splenic artery</b> arises from the coeliac trunk and runs along the superior border of the pancreas. "
"It divides into 4–5 segmental branches at the hilum; there are no collaterals between segments. "
"The <b>splenic vein</b> joins the superior mesenteric vein to form the portal vein. "
"The <b>short gastric arteries</b> (3–7 in number) arise from the splenic artery near the hilum and run in the gastrosplenic ligament.",
BODY))
story.append(Paragraph("Accessory Spleen", H2))
story.append(Paragraph(
"Present in <b>up to 20%</b> of the population, and up to 30% of patients with haematological disease. "
"Must be sought and removed during splenectomy for haematological conditions, otherwise the condition may recur. "
"Locations (in order of frequency):", BODY))
acc_data = [
["Location", "Frequency"],
["Splenic hilum", "54%"],
["Splenic pedicle/vascular pedicle", "25%"],
["Tail of pancreas", "6%"],
["Greater omentum", "12%"],
["Gastrocolic ligament", "~2%"],
["Splenocolic ligament", "~2%"],
["Small/large bowel mesentery", "0.5%"],
["Left broad ligament / left spermatic cord", "0.5%"],
]
story.append(two_col_table(["Location", "Frequency"], acc_data[1:], col_widths=[10*cm, 7.2*cm]))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph('<i>Source: Schwartz\'s Principles of Surgery 11e, Bailey & Love 28e</i>', SOURCE))
# ═══════════════════════════════════════════════════════════════════════════════
# 2. PHYSIOLOGY
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("2. PHYSIOLOGY OF THE SPLEEN"))
story.append(Spacer(1, 0.3*cm))
physio_rows = [
["Function", "Details"],
["Haematopoiesis",
"Primary haematopoietic organ in fetal life (up to 5th month). In adults, extramedullary haematopoiesis occurs in myeloproliferative disorders."],
["Filtration (culling)",
"Removes senescent, abnormal RBCs and parasites. Pits inclusions (Howell-Jolly bodies, Heinz bodies, siderotic granules) from RBCs – seen post-splenectomy."],
["Immunological",
"Produces IgM, properdin (factor P), and tuftsin. Primary site of antibody production against encapsulated organisms (S. pneumoniae, H. influenzae, N. meningitidis). Major site for phagocytosis of opsonised bacteria."],
["Storage",
"Stores 30–40% of platelet pool; 30% of marginated neutrophils. Iron recycled from degraded haemoglobin."],
["Reservoir",
"Contains ~300 mL blood; contracts during exercise/haemorrhage in some species (minor in humans)."],
]
story.append(two_col_table(["Function", "Details"], physio_rows[1:], col_widths=[4.5*cm, 12.7*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(callout("Post-Splenectomy Blood Film Changes (EXAM FAVOURITE)",
[
"<b>Howell-Jolly bodies</b> – nuclear remnants in RBCs (most reliable marker of asplenia)",
"<b>Heinz bodies</b> – denatured haemoglobin (seen with vital stains only)",
"<b>Pappenheimer (siderotic) granules</b> – iron deposits in RBCs",
"<b>Target cells (codocytes)</b>",
"<b>Thrombocytosis</b> – peak at day 5–10, may exceed 10 × 10⁶/μL",
"<b>Leucocytosis</b> – especially lymphocytosis and monocytosis",
],
bg=YELLOW_BG, title_color=YELLOW))
# ═══════════════════════════════════════════════════════════════════════════════
# 3. INDICATIONS FOR SPLENECTOMY
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("3. INDICATIONS FOR SPLENECTOMY"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("3A. Haematological Indications", H2))
# ITP
story.append(Paragraph("Idiopathic Thrombocytopenic Purpura (ITP)", H3))
story.append(Paragraph(
"ITP is the <b>most common elective indication</b> for splenectomy. The spleen is the primary site of "
"anti-platelet IgG production and platelet destruction. Splenectomy is the most durable treatment, "
"producing a <b>complete response in 65–70%</b> of patients with <b>partial response in 80–85%</b>.",
BODY))
story.append(callout("Indications for Splenectomy in ITP",
[
"Failure of first-line therapy (corticosteroids) after 6 weeks",
"Platelet count <30,000/μL despite corticosteroids for 3–6 months",
"Relapse after tapering steroids requiring unacceptably high doses",
"Contraindication to steroids",
"Chronic ITP (>12 months) with symptomatic thrombocytopenia",
], bg=GREEN_BG, title_color=GREEN))
# Hereditary Spherocytosis
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Hereditary Spherocytosis (HS)", H3))
story.append(Paragraph(
"HS is the <b>most common haemolytic anaemia</b> requiring splenectomy. Results from deficiency/dysfunction "
"of erythrocyte membrane proteins (alpha/beta spectrin, ankyrin, band 3, protein 4.2). Inherited in "
"<b>autosomal dominant</b> fashion (70–80%). Spherocytic RBCs are sequestered and destroyed in the spleen.",
BODY))
hs_rows = [
["Severity", "Haemoglobin", "Reticulocytes", "Management"],
["Mild", ">11 g/dL", "<6%", "Observation; splenectomy debatable"],
["Moderate", "8–11 g/dL", "6–10%", "Splenectomy recommended"],
["Severe", "<8 g/dL", ">10%", "Splenectomy + cholecystectomy if cholelithiasis"],
]
story.append(two_col_table(["Severity", "Haemoglobin", "Reticulocytes", "Management"], hs_rows[1:],
col_widths=[3.5*cm, 3.5*cm, 3.5*cm, 6.7*cm]))
story.append(Paragraph(
"<b>Timing:</b> Delay splenectomy until age ≥6 years (preferably) to preserve immune function. "
"Perform simultaneously with cholecystectomy if gallstones present.",
BODY))
# AIHA
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Autoimmune Haemolytic Anaemia (AIHA)", H3))
story.append(Paragraph(
"Warm-antibody AIHA (IgG-mediated) responds best to splenectomy – <b>60–80% initial response rate</b>. "
"Cold-antibody AIHA (IgM-mediated, complement-dependent) responds poorly; splenectomy is not recommended.",
BODY))
# TTP
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Thrombotic Thrombocytopenic Purpura (TTP)", H3))
story.append(Paragraph(
"Splenectomy is no longer first-line for TTP. It is reserved for <b>refractory or relapsing</b> TTP "
"as an adjunct after plasma exchange.",
BODY))
# Thalassaemia / Sickle cell
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Thalassaemia Major", H3))
story.append(Paragraph(
"Splenectomy indicated for: <b>hypersplenism</b> causing transfusion requirements >200–250 mL/kg/year, "
"or symptomatic massive splenomegaly. Should be deferred until age ≥5 years.",
BODY))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Sickle Cell Disease", H3))
story.append(Paragraph(
"Auto-splenectomy occurs by 6 years of age due to repeated infarcts. Surgical splenectomy indicated for "
"<b>acute splenic sequestration</b> (second episode) or persistent hypersplenism.",
BODY))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("3B. Haematological Malignancies", H2))
malign_rows = [
["Condition", "Indication", "Response"],
["Hairy Cell Leukaemia (HCL)", "Symptomatic splenomegaly, hypersplenism (now superseded by cladribine)", "Excellent palliation; cladribine preferred"],
["Chronic Lymphocytic Leukaemia (CLL)", "Hypersplenism, refractory autoimmune cytopenias", "Palliative; 40–70% response"],
["Hodgkin Lymphoma", "Staging laparotomy (now obsolete); bulk disease", "Historically for staging"],
["Chronic Myeloid Leukaemia (CML)", "Massive symptomatic splenomegaly", "Palliative"],
["Myelofibrosis (AMM)", "Symptomatic splenomegaly, intractable anaemia, portal hypertension", "76% palliation at 1 year; 28% complication rate"],
["Splenic Marginal Zone Lymphoma", "Primary treatment when confined to spleen", "Potentially curative"],
]
story.append(two_col_table(["Condition", "Indication", "Response"], malign_rows[1:],
col_widths=[4.5*cm, 6.2*cm, 6.5*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("3C. Splenic Trauma", H2))
story.append(Paragraph(
"The spleen is the <b>most commonly injured solid organ</b> in blunt abdominal trauma. "
"The AAST Organ Injury Scale grades splenic injury from I–V.",
BODY))
trauma_rows = [
["Grade", "Description", "Management"],
["I", "Subcapsular haematoma <10% surface; laceration <1 cm depth", "Non-operative (NOM) if haemodynamically stable"],
["II", "Subcapsular haematoma 10–50%; laceration 1–3 cm", "NOM; splenic artery embolisation (SAE) if blush"],
["III", "Subcapsular haematoma >50% or expanding; laceration >3 cm; intraparenchymal haematoma >5 cm", "NOM with SAE; operative if unstable"],
["IV", "Laceration of segmental/hilar vessels with devascularisation >25%", "SAE or operative intervention"],
["V", "Completely shattered spleen; hilar devascularisation", "Operative (splenectomy)"],
]
story.append(two_col_table(["Grade", "Description", "Management"], trauma_rows[1:],
col_widths=[1.5*cm, 9.5*cm, 6.2*cm]))
story.append(Paragraph(
"<b>Indications for operative intervention:</b> Haemodynamic instability unresponsive to resuscitation, "
"Grade IV–V injury, failure of NOM (20% of cases), suspected hollow viscus injury, peritonitis. "
"<b>Success of NOM: ~90%</b> at centres routinely screening for pseudoaneurysm with SAE.",
BODY))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("3D. Oncological Indications", H2))
story.append(Paragraph(
"Splenectomy is performed as part of <b>en bloc resection</b> in radical gastrectomy (Siewert type II/III) "
"and total/distal pancreatectomy. Diagnostic splenectomy for isolated splenic masses undiagnosable by biopsy.",
BODY))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("3E. Miscellaneous Indications (with Expected Response)", H2))
misc_rows = [
["Condition", "Indication", "Response"],
["Splenic abscess", "Multiloculated, or unilocular failing conservative management", "Curative"],
["Splenic artery aneurysm", "Distal lesions near hilum; symptomatic; >2 cm in women of childbearing age", "Curative"],
["Wandering spleen", "Abdominal pain or venous congestion", "Curative"],
["Symptomatic non-parasitic cysts", "Large cysts; unroofing vs partial splenectomy", "Curative"],
["Symptomatic parasitic cysts (hydatid)", "Therapy of choice; avoid spillage", "Curative"],
["Gaucher's disease", "Hypersplenism", "Improves cytopenias; does not correct underlying disease"],
["Felty's syndrome", "Neutropenia", "80% durable response"],
["Sarcoidosis", "Hypersplenism or symptomatic splenomegaly", "Improves symptoms and cytopenias"],
["Portal hypertension / sinistral HTN", "Splenic vein thrombosis, symptomatic splenomegaly", "Palliative"],
]
story.append(two_col_table(["Condition", "Indication", "Response"], misc_rows,
col_widths=[4.5*cm, 6.5*cm, 6.2*cm]))
story.append(Paragraph('<i>Source: Schwartz\'s 11e Table 34-1c; Bailey & Love 28e; Current Surgical Therapy 14e</i>', SOURCE))
# ═══════════════════════════════════════════════════════════════════════════════
# 4. PREOPERATIVE PREPARATION
# ═══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(h1_block("4. PREOPERATIVE PREPARATION"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Vaccinations (MOST IMPORTANT EXAM POINT)", H2))
story.append(callout("Pre-splenectomy Vaccination Protocol",
[
"<b>S. pneumoniae</b> (Pneumovax 23 / PCV13): Ideally ≥2 weeks before elective splenectomy",
"<b>H. influenzae type b (Hib)</b>: Single dose ≥2 weeks pre-op",
"<b>N. meningitidis</b> (MenACWY + MenB): ≥2 weeks pre-op",
"If emergency splenectomy: vaccinate at discharge (10–14 days post-op)",
"<b>Annual influenza vaccine</b> – increases risk of secondary pneumococcal infection",
"<b>Revaccination</b>: Pneumococcal every 5 years; meningococcal every 5 years",
], bg=YELLOW_BG, title_color=YELLOW))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Haematological Optimisation", H2))
story.append(Paragraph(
"Coagulation profiles should be as near-normal as possible. Provide <b>blood, FFP, cryoprecipitate, "
"and platelets</b> as needed. Platelet transfusion for patients with thrombocytopenia should be "
"available during operation and early postoperative period.", BODY))
story.append(Paragraph("DVT Prophylaxis", H2))
story.append(Paragraph(
"All patients undergoing splenectomy should receive <b>sequential compression devices (SCDs)</b> and "
"subcutaneous heparin pre-operatively. DVT/portal vein thrombosis occurs in <b>up to 50% of "
"myeloproliferative disorder patients</b>. LMWH on discharge for high-risk patients.",
BODY))
story.append(Paragraph("Splenic Artery Embolisation (Pre-operative)", H2))
story.append(Paragraph(
"Pre-operative splenic artery embolisation (SAE) in <b>massive splenomegaly</b> reduces intraoperative "
"blood loss. Performed 24–72 hours before surgery. Risk of post-embolisation syndrome (fever, pain).",
BODY))
story.append(Paragraph("Imaging", H2))
story.append(Paragraph(
"<b>Ultrasound</b>: First-line for size, cysts, vascularity. "
"<b>CT abdomen</b> (gold standard): Size, vascular anatomy, tumour, accessory spleens. "
"<b>MRI</b>: Soft tissue characterisation. "
"<b>Nuclear scan (Tc-99m sulphur colloid / heat-damaged RBC scan)</b>: Accessory splenic tissue detection "
"post-splenectomy for persistent/relapsed ITP.",
BODY))
# ═══════════════════════════════════════════════════════════════════════════════
# 5. SURGICAL TECHNIQUE
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("5. SURGICAL TECHNIQUE"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("5A. Open Splenectomy", H2))
story.append(Paragraph("<b>Position:</b> Supine on operating table. Nasogastric tube after induction.", BODY))
story.append(Paragraph(
"<b>Incision:</b> Left subcostal incision preferred for elective cases (2 fingerbreadths below costal margin). "
"Upper midline for trauma or massive splenomegaly. Thoracoabdominal incision rarely for massively adherent spleen.",
BODY))
story.append(Paragraph("Steps – Elective Open Splenectomy (Medial to Lateral):", H3))
open_steps = [
("1", "Open lesser sac via gastrosplenic or gastrohepatic attachments."),
("2", "In massive splenomegaly: early ligation of splenic artery at superior border of pancreas before full mobilisation."),
("3", "Divide splenocolic ligament."),
("4", "Open gastrosplenic ligament and individually ligate short gastric vessels (LigaSure, clips or ties). Care: avoid greater curve of stomach."),
("5", "Incise lateral peritoneal attachments (splenophrenic ligament); retract spleen into midline."),
("6", "Individual ligation: splenic artery first, then splenic vein. Beware of tail of pancreas."),
("7", "Divide posterior leaf of lienorenal ligament with long curved scissors – delivers spleen medially."),
("8", "Remove spleen. Search for accessory spleens (hilum, gastrocolic, pancreatic tail, greater omentum)."),
("9", "Meticulous haemostasis; irrigation. NG tube to decompress stomach overnight."),
]
step_data = [[Paragraph(f'<b>{s[0]}.</b>', BODY), Paragraph(s[1], BODY)] for s in open_steps]
step_t = Table(step_data, colWidths=[0.8*cm, W-2*MARGIN-0.8*cm])
step_t.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(step_t)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Steps – Trauma Splenectomy (Lateral to Medial – Emergency):", H3))
story.append(Paragraph(
"In haemodynamically unstable trauma, quick hilar control is the priority. "
"The <b>back of a pronated hand</b> is placed in the left upper quadrant and extended superolaterally "
"toward the diaphragm. Bluntly dissect splenophrenic and splenorenal ligaments. "
"Retract spleen and tail of pancreas superomedially. Place <b>large clamp across splenic hilum</b> "
"(as close to spleen as possible – avoid pancreatic tail). Second clamp across gastrosplenic ligament "
"containing short gastrics (close to spleen – avoid greater curve). Spleen divided and passed off. "
"Then individually ligate splenic artery, vein, and short gastric arteries.",
BODY))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("5B. Laparoscopic Splenectomy (Gold Standard for Elective Cases)", H2))
story.append(Paragraph(
"Laparoscopic splenectomy is the <b>gold standard</b> for elective splenectomy in patients with "
"normal-sized spleens. Associated with decreased blood loss, shorter hospital stay, and lower "
"overall morbidity vs. open splenectomy.",
BODY))
story.append(Paragraph("Position and Port Placement:", H3))
lap_rows = [
["Approach", "Details"],
["Patient position", "Right lateral decubitus (lateral approach) – preferred. Supine for anterior approach."],
["Port configuration", "4 trocars: 10-12mm camera port, 2 working ports (surgeon), 1 assistant port"],
["Port placement", "1 cm from costal margin at left MCL (insufflation); trocar near xiphoid; 12-mm port at posterior axillary line"],
]
story.append(two_col_table(["Approach", "Details"], lap_rows[1:], col_widths=[4*cm, 13.2*cm]))
story.append(Paragraph("Key Steps:", H3))
lap_steps = [
"Divide splenocolic ligament – access to lower pole.",
"Separate spleen from kidney and diaphragm.",
"Enlarge gap between splenic hilum and pancreatic tail.",
"Elevate spleen to expose hilum.",
"Secure and divide hilum with <b>endoscopic vascular stapler</b> (2–3 applications).",
"Divide short gastric vessels.",
"Divide remaining diaphragmatic attachments.",
"Introduce self-retaining retrieval bag; morcellate and remove spleen.",
]
for step in lap_steps:
story.append(bullet(step))
story.append(Spacer(1, 0.2*cm))
story.append(callout("Relative Contraindications to Laparoscopic Splenectomy",
[
"Massive splenomegaly (>20 cm) – consider hand-assisted approach",
"Previous left upper quadrant surgery",
"Portal hypertension with coagulopathy",
"Haemodynamic instability (trauma)",
"Pregnancy (relative)",
], bg=RED_BG, title_color=RED))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("5C. Other Approaches", H2))
other_rows = [
["Approach", "Key Feature", "Indication"],
["Hand-assisted laparoscopic", "Hand port device; tactile feedback maintained", "Splenomegaly (>20 cm); difficult dissection"],
["Single-incision laparoscopic (SILS)", "Single umbilical port; cosmetically superior", "Small/normal spleen; experienced centres"],
["Robotic splenectomy", "Articulated instruments; 3D vision; longer operative time", "Complex anatomy; training centres"],
["Partial splenectomy", "Preserve ≥25% splenic tissue; immunological protection maintained", "Children with benign disease; small cysts; trauma splenic conservation"],
]
story.append(two_col_table(["Approach", "Key Feature", "Indication"], other_rows[1:],
col_widths=[4.5*cm, 6.5*cm, 6.2*cm]))
story.append(Paragraph('<i>Source: Current Surgical Therapy 14e; Schwartz\'s 11e; Bailey & Love 28e</i>', SOURCE))
# ═══════════════════════════════════════════════════════════════════════════════
# 6. COMPLICATIONS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(h1_block("6. COMPLICATIONS OF SPLENECTOMY"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("6A. Intraoperative Complications", H2))
intra_rows = [
["Complication", "Cause / Comment"],
["Haemorrhage", "Slipped ligature; venous injury; diaphragmatic vessel. Most feared. Treat with direct pressure, re-ligation."],
["Pancreatic injury", "Tail of pancreas in lienorenal ligament. Causes pancreatitis, fistula, abscess."],
["Gastric injury", "Short gastric ligation; diathermy injury. Can cause gastric fistula."],
["Colonic injury", "Splenocolic ligament division. Rare."],
["Diaphragmatic injury", "Splenophrenic ligament division; causes pneumothorax."],
]
story.append(two_col_table(["Complication", "Cause / Comment"], intra_rows[1:], col_widths=[5*cm, 12.2*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("6B. Immediate Postoperative Complications", H2))
imm_rows = [
["Complication", "Comment"],
["Haemorrhage", "Slipped ligature; retroperitoneal ooze. Re-explore if significant."],
["Left basal atelectasis", "Very common; splinting of diaphragm. Physiotherapy important."],
["Left pleural effusion", "Common; usually resolves spontaneously."],
["Gastric distension", "NG tube prevents."],
["Pancreatic fistula", "Tail injury during hilar ligation; drain amylase-rich fluid."],
["Subphrenic abscess", "Post-haematoma infection. Fever day 5–7, left shoulder tip pain."],
["Thrombocytosis", "Peak day 5–10; may exceed 10 × 10⁶/μL; thrombosis risk."],
]
story.append(two_col_table(["Complication", "Comment"], imm_rows[1:], col_widths=[5*cm, 12.2*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("6C. Late Complications", H2))
story.append(callout("OPSI – Overwhelming Post-Splenectomy Infection (MOST IMPORTANT LATE COMPLICATION)",
[
"Lifetime risk: <b>1–3%</b> (highest in first 2 years post-splenectomy)",
"Mortality: <b>50–80%</b> if untreated; death can occur within <b>12–24 hours</b> of symptom onset",
"Most common organism: <b>Streptococcus pneumoniae</b> (50–90% of cases)",
"Other organisms: <i>H. influenzae</i> type b, <i>N. meningitidis</i>, <i>E. coli</i>, Capnocytophaga",
"<b>Clinical features</b>: Prodrome (fever, rigors, myalgia) → rapid deterioration → DIC, adrenal haemorrhage (Waterhouse-Friderichsen), multi-organ failure",
"<b>Management</b>: Emergency IV penicillin/amoxicillin immediately. If penicillin-allergic: cefotaxime or chloramphenicol",
"<b>Prevention</b>: Vaccination (pneumococcal, Hib, meningococcal) + long-term penicillin V prophylaxis",
], bg=RED_BG, title_color=RED))
story.append(Spacer(1, 0.3*cm))
late_rows = [
["Complication", "Details"],
["DVT / Portal vein thrombosis", "DVT in up to 50% myeloproliferative disorder patients. LMWH prophylaxis essential."],
["Thromboembolic events", "Thrombocytosis (>10 × 10⁶) increases risk; antiplatelet therapy if >1000 × 10³/μL."],
["Splenosis", "Autotransplantation of splenic tissue after trauma/rupture; may cause recurrent disease."],
["Residual/regrowth of accessory spleen", "Causes relapse of ITP/AIHA if missed; detected by Tc-99m scan."],
["Adhesions and bowel obstruction", "Post-operative adhesions; small bowel obstruction."],
["Increased susceptibility to malaria/babesiosis", "Intraerythrocytic parasites not cleared post-splenectomy."],
]
story.append(two_col_table(["Complication", "Details"], late_rows[1:], col_widths=[5.5*cm, 11.7*cm]))
story.append(Paragraph('<i>Source: Bailey & Love 28e; Schwartz\'s 11e; Fischer\'s Mastery 8e; Current Surgical Therapy 14e</i>', SOURCE))
# ═══════════════════════════════════════════════════════════════════════════════
# 7. POST-SPLENECTOMY CARE AND LONG-TERM MANAGEMENT
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("7. POST-SPLENECTOMY CARE AND LONG-TERM MANAGEMENT"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Antibiotic Prophylaxis", H2))
story.append(Paragraph(
"<b>Penicillin V (phenoxymethylpenicillin) 250 mg BD</b> (500 mg BD in high-risk) is the standard "
"long-term prophylaxis. Amoxicillin 250 mg OD is an alternative. "
"Duration: Lifelong in high-risk (children, immunosuppressed, haematological malignancy). "
"Minimum 2 years (some guidelines: lifelong) for all asplenic patients.",
BODY))
story.append(Paragraph("Patient Education", H2))
story.append(callout("Key Patient Education Points",
[
"Carry a <b>medical alert card/bracelet</b> indicating asplenic status",
"Seek <b>immediate medical attention</b> for any febrile illness; do not wait for investigation results",
"Keep a supply of <b>emergency antibiotics</b> (amoxicillin-clavulanate) for empirical self-administration if unable to access medical care",
"Avoid <b>animal bites</b> (Capnocytophaga risk from dog/cat bites) – treat immediately",
"Advise regarding <b>malaria prophylaxis</b> when travelling to endemic areas",
"Avoid <b>tick bites</b> (Babesia transmission)",
"Pneumococcal revaccination every <b>5 years</b>",
], bg=ACCENT, title_color=MID_BLUE))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Haematological Monitoring", H2))
story.append(Paragraph(
"Monitor FBC: Thrombocytosis peaking at day 5–10 post-splenectomy. "
"Antiplatelet therapy (aspirin) if platelet count exceeds <b>600–800 × 10³/μL</b> to prevent thrombosis. "
"Howell-Jolly bodies confirm functional asplenia on blood film.",
BODY))
# ═══════════════════════════════════════════════════════════════════════════════
# 8. SPLENOMEGALY
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("8. SPLENOMEGALY AND HYPERSPLENISM"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Classification of Splenomegaly", H2))
splenodata = [
["Massive Splenomegaly (Tropical Big Spleen)", "Moderate Splenomegaly", "Mild Splenomegaly"],
["Visceral leishmaniasis (Kala-azar)\n– most common cause worldwide",
"Haemolytic anaemias (HS, AIHA, thalassaemia, sickle cell)",
"Infections (EBV, CMV, SBE, typhoid)"],
["Chronic malaria", "Portal hypertension (cirrhosis)", "Autoimmune (SLE, RA)"],
["Myelofibrosis (AMM)", "Haematological malignancy (CML, CLL, lymphoma)", "Metabolic (Gaucher's)"],
["Gaucher's disease", "Storage disorders", "Congestive cardiac failure"],
["CML (massive)", "Myeloproliferative disorders", ""],
]
sp_t = Table(
[[Paragraph(f'<font color="white"><b>{h}</b></font>', BODY) for h in splenodata[0]]] +
[[Paragraph(c or "–", BODY) for c in row] for row in splenodata[1:]],
colWidths=[(W-2*MARGIN)/3]*3
)
sp_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("GRID", (0,0), (-1,-1), 0.3, BORDER),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(sp_t)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Hypersplenism", H2))
story.append(Paragraph(
"Hypersplenism is characterised by: (1) splenomegaly, (2) cytopenias in one or more cell lines, "
"(3) compensatory bone marrow hyperplasia, (4) correction by splenectomy. "
"It may be <b>primary</b> (no cause found) or <b>secondary</b> (to portal hypertension, infections, "
"haematological disorders, storage diseases).",
BODY))
# ═══════════════════════════════════════════════════════════════════════════════
# 9. HIGH-YIELD EXAM SUMMARY
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("9. HIGH-YIELD EXAM SUMMARY TABLE"))
story.append(Spacer(1, 0.3*cm))
exam_rows = [
["Topic", "Key Fact"],
["Most common elective indication", "ITP (Idiopathic Thrombocytopenic Purpura)"],
["Most common organ injured in blunt trauma", "Spleen"],
["Gold standard for elective splenectomy", "Laparoscopic splenectomy"],
["Accessory spleen location (most common)", "Splenic hilum (54%) → pedicle (25%)"],
["Ligament containing splenic artery + vein", "Splenorenal (lienorenal) ligament"],
["Ligament containing short gastric vessels", "Gastrosplenic ligament"],
["Most reliable marker of asplenia on blood film", "Howell-Jolly bodies"],
["Most common organism in OPSI", "Streptococcus pneumoniae (50–90%)"],
["Mortality of untreated OPSI", "50–80%"],
["Post-splenectomy thrombocytosis peaks", "Day 5–10 post-op"],
["ITP splenectomy response rate (complete)", "65–70% complete; 80–85% partial"],
["Timing of vaccines (elective splenectomy)", "≥2 weeks before surgery"],
["Minimum age for elective splenectomy (HS)", "5–6 years (to preserve immune function)"],
["Haemolytic anaemia best responding to splenectomy", "Hereditary Spherocytosis (100% response)"],
["AIHA responding best to splenectomy", "Warm-antibody (IgG-mediated) AIHA"],
["Trauma NOM success rate (with SAE)", "~90%"],
["Portal vein thrombosis rate (myeloproliferative)", "Up to 50% post-splenectomy"],
["Antibiotic prophylaxis drug", "Penicillin V 250–500 mg BD (lifelong in high-risk)"],
["Spleen blood supply", "Splenic artery (coeliac trunk branch)"],
["Size of adult spleen", "7–11 cm length, 150 g weight"],
["Nuclear scan for accessory spleen", "Tc-99m heat-damaged RBC scan"],
["Partial splenectomy benefit", "Preserves immune function; ≥25% residual tissue required"],
]
story.append(two_col_table(["Topic", "Key Fact"], exam_rows[1:], col_widths=[7.2*cm, 10*cm]))
# ═══════════════════════════════════════════════════════════════════════════════
# 10. MNEMONICS & QUICK RECALLS
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 0.5*cm))
story.append(h1_block("10. MNEMONICS AND QUICK RECALLS"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph('"SPLENIC" – Functions of the Spleen', H2))
mn_rows = [
["S", "Sequestration and destruction of old RBCs"],
["P", "Phagocytosis of bacteria (opsonised encapsulated organisms)"],
["L", "Lymphocyte production; immune surveillance"],
["E", "Extramedullary haematopoiesis (fetal; disease states)"],
["N", "Natural killer cell activity; NK-cell reservoir"],
["I", "IgM and properdin production"],
["C", "Culling of abnormal/parasitised RBCs; complement activation"],
]
mn_t = Table(
[[Paragraph(f'<b><font color="#{MID_BLUE.hexval()[2:]}">{r[0]}</font></b>', BODY), Paragraph(r[1], BODY)] for r in mn_rows],
colWidths=[0.6*cm, W-2*MARGIN-0.6*cm]
)
mn_t.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(mn_t)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph('"OPSI" – Organisms in Overwhelming Post-Splenectomy Infection', H2))
opsi_rows = [
["O", "Organism: Streptococcus pneumoniae (main, 50–90%)"],
["P", "Plus H. influenzae type b, N. meningitidis"],
["S", "Sudden onset: prodrome → DIC → death within 24 hours"],
["I", "Immediate penicillin + vaccination prevention"],
]
opsi_t = Table(
[[Paragraph(f'<b><font color="#{RED.hexval()[2:]}">{r[0]}</font></b>', BODY), Paragraph(r[1], BODY)] for r in opsi_rows],
colWidths=[0.6*cm, W-2*MARGIN-0.6*cm]
)
opsi_t.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BACKGROUND", (0,0), (-1,-1), RED_BG),
]))
story.append(opsi_t)
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("Ligaments – What Is in What?", H2))
story.append(callout("Key Ligament Contents (EXAM FAVOURITE)",
[
"<b>Gastrosplenic ligament</b>: Short gastric vessels + left gastroepiploic vessels",
"<b>Splenorenal ligament</b>: Splenic artery, splenic vein, tail of pancreas",
"<b>Splenocolic ligament</b>: Avascular",
"<b>Splenophrenic ligament</b>: Avascular (but may have vessels in pathological states)",
"<b>Phrenicocolic ligament</b>: Avascular (supports lower pole – sustentaculum lienis)",
], bg=ACCENT, title_color=MID_BLUE))
# ── REFERENCES ───────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=0.5, color=BORDER))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>References (Standard Textbooks)</b>", H2))
refs = [
"Bailey & Love's Short Practice of Surgery, 28th Edition (2024). Chapter 70: The Spleen.",
"Schwartz's Principles of Surgery, 11th Edition. Chapter 34: The Spleen. Park et al.",
"Current Surgical Therapy, 14th Edition. Splenectomy; Splenectomy Techniques.",
"Fischer's Mastery of Surgery, 8th Edition. Chapter 275: Splenectomy.",
"Goldman-Cecil Medicine, International Edition (2024). Spleen, Hypersplenism.",
"Sabiston Textbook of Surgery: The Biological Basis of Modern Surgical Practice.",
"Harrison's Principles of Internal Medicine, 22nd Edition (2025, McGraw-Hill).",
"Mulholland & Greenfield's Surgery: Scientific Principles and Practice, 7th Edition.",
]
for r in refs:
story.append(Paragraph(f'• {r}', s("Normal", fontSize=8.5, leading=13, leftIndent=10)))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph(
'<font color="#64748b"><i>This document is a PG exam study aid compiled from standard surgical and medical textbooks by Orris Medical AI (May 2026). '
'Always cross-reference with current clinical guidelines for patient care decisions.</i></font>',
s("Normal", fontSize=7.5, textColor=HexColor("#64748b"), alignment=TA_CENTER)))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF generated successfully!")
cd /home/daytona/workspace/splenectomy && python splenectomy_pg.py 2>&1
~/splenectomy/splenectomy_pg.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/splenectomy/splenectomy_pg.py'
cd /home/daytona/workspace/splenectomy && python splenectomy_pg.py 2>&1
ls -lh /home/daytona/workspace/splenectomy/Splenectomy_PG_Exam.pdf
Splenectomy PG Exam
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Anatomy & Embryology | Embryological origin, dimensions, all 5 suspensory ligaments + contents, vascular supply, accessory spleen locations with frequencies |
| 2. Physiology | 5 splenic functions; post-splenectomy blood film changes (Howell-Jolly, Heinz, target cells, thrombocytosis) |
| 3. Indications | ITP, Hereditary Spherocytosis, AIHA, thalassaemia, sickle cell; haematological malignancies table; AAST trauma grading (I–V) with management; oncological; miscellaneous (12 conditions with expected responses) |
| 4. Pre-op Preparation | Vaccination protocol (pneumococcal, Hib, meningococcal, timing); haematological optimisation; DVT prophylaxis; pre-op SAE |
| 5. Surgical Technique | Open (elective medial-to-lateral vs. trauma lateral-to-medial); laparoscopic (gold standard, port placement, steps); hand-assisted, SILS, robotic, partial splenectomy |
| 6. Complications | Intraoperative, immediate, and late; OPSI (mortality 50–80%, organisms, treatment) in a highlighted callout |
| 7. Post-op Care | Antibiotic prophylaxis (Pen V), patient education, haematological monitoring |
| 8. Splenomegaly | Massive vs. moderate vs. mild causes; hypersplenism definition |
| 9. High-yield Exam Summary | 22-point rapid-reference table |
| 10. Mnemonics | "SPLENIC" for functions; "OPSI" recall; ligament contents callout |