Whipples procedure steps
Whipple procedure pancreaticoduodenectomy surgical steps
https://www.sciencedirect.com/science/article/pii/S258984502…
https://www.ncbi.nlm.nih.gov/books/NBK560747

| Feature | Classic Whipple | PPPD |
|---|---|---|
| Gastric division | Antrum resected | Duodenum divided 2 cm distal to pylorus |
| Gastric anastomosis | Gastrojejunostomy | Duodenojejunostomy |
| Oncologic margin | Slightly wider | Equivalent for most tumors |
| Delayed gastric emptying | Less common | More common historically |
When to do pppd and classical
pylorus preserving pancreaticoduodenectomy versus classic Whipple
PMID: 39757070
| Indication | Rationale |
|---|---|
| Tumor encroaches on D1 (first part of duodenum) or the distal stomach | A clear resection margin cannot be achieved with PPPD; antral resection is required for R0 |
| FAP (Familial Adenomatous Polyposis) with diffuse duodenal polyposis | Entire duodenum including D1 must be removed |
| Tumor invades the pylorus or gastric antrum directly | Pylorus preservation is oncologically unsafe |
| Gastric outlet obstruction from tumor | Antral resection required |
| Lymph node involvement along the lesser curvature or in the perigastric region | En bloc antral resection improves nodal clearance |
| Surgeon preference / specific anatomical factors | Historically some surgeons prefer classic; equivalent oncologic outcomes |
| Scenario | Choice |
|---|---|
| Pancreatic head cancer, pylorus uninvolved | PPPD (standard) |
| Ampullary or periampullary cancer, D1 free | PPPD (standard) |
| Chronic pancreatitis / benign lesion | PPPD preferred |
| Tumor at/near pylorus or antrum | Classic Whipple |
| FAP with duodenal polyposis | Classic Whipple |
| D1 involved or margin threatened | Classic Whipple |
| Gastric outlet obstruction from tumor | Classic Whipple |
Bailey and Love's 28e summarizes it clearly: "PPPD is the standard resection for tumours of the pancreatic head or ampulla. The Whipple procedure is now reserved for situations in which the entire duodenum has to be removed (e.g. FAP) or in which the tumour encroaches on the first part of the duodenum or distal stomach and PPPD would not achieve a clear resection margin."
Diagnotic molecular pathology
What aspect of diagnostic molecular pathology do you need? · What level of detail do you need?
Everything to write as short note
| Type | Description | Examples |
|---|---|---|
| Point mutations | Single nucleotide change in DNA; germline or somatic | TP53, KRAS mutations |
| Indels | Insertions/deletions causing frameshift | KIT mutations |
| Fusion genes | From translocations or deletions; chimeric proteins | BCR-ABL t(9;22) in CML; BCL2 t(14;18) in follicular lymphoma; TMPRSS2-ERG in prostate cancer |
| Gene amplification | Increased copy number → overexpression | HER2 in breast/gastric cancer |
| Microsatellite instability (MSI) | Instability of short tandem repeats due to MMR deficiency | Lynch syndrome, sporadic CRC |
| Epigenetic changes | DNA methylation, histone modification silencing genes | MLH1 hypermethylation in sporadic CRC |
| Abnormality | Preferred Method |
|---|---|
| Point mutations / small indels | NGS, PCR |
| Gene fusions | FISH, NGS, PCR |
| Gene amplifications | FISH, NGS |
| Tumour mutation burden (TMB) | NGS |
| MSI/dMMR | IHC (initial), PCR, NGS |
| Viral genomes (EBV, HPV, CMV) | ISH |
Rule: IHC is often a useful and sufficient initial test for many of these abnormalities before molecular testing.
| Molecular Finding | Target Drug |
|---|---|
| HER2 amplification (breast, gastric, CRC) | Trastuzumab, pertuzumab |
| KRAS/BRAF wild-type (CRC) | Anti-EGFR antibodies (cetuximab, panitumumab) |
| BRAF V600E | BRAF inhibitors (vemurafenib, dabrafenib) |
| ALK, RET, NTRK, ROS1, FGFR2 fusions | Tyrosine kinase inhibitors |
| MSI-H / high TMB | Immune checkpoint inhibitors (pembrolizumab, nivolumab) |
| BCR-ABL t(9;22) | Imatinib and other TKIs |
| PD-L1 expression | ICIs |
Convert to pdf
ls /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "ready"
~/diagnostic_molecular_pathology.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/tmp/workspace/Diagnostic_Molecular_Pathology.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2*cm,
title="Diagnostic Molecular Pathology",
author="Orris Medical"
)
styles = getSampleStyleSheet()
# Custom styles
HEADING1 = ParagraphStyle("H1", parent=styles["Normal"],
fontSize=16, fontName="Helvetica-Bold", spaceAfter=6,
spaceBefore=14, textColor=colors.HexColor("#1a3a5c"))
HEADING2 = ParagraphStyle("H2", parent=styles["Normal"],
fontSize=12, fontName="Helvetica-Bold", spaceAfter=4,
spaceBefore=10, textColor=colors.HexColor("#2e6da4"))
HEADING3 = ParagraphStyle("H3", parent=styles["Normal"],
fontSize=11, fontName="Helvetica-Bold", spaceAfter=3,
spaceBefore=8, textColor=colors.HexColor("#1a5276"))
BODY = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=9.5, fontName="Helvetica", spaceAfter=4,
spaceBefore=2, leading=14, alignment=TA_JUSTIFY)
BULLET = ParagraphStyle("Bullet", parent=styles["Normal"],
fontSize=9.5, fontName="Helvetica", spaceAfter=2,
spaceBefore=1, leading=13, leftIndent=14, bulletIndent=4)
SMALL = ParagraphStyle("Small", parent=styles["Normal"],
fontSize=8, fontName="Helvetica-Oblique", spaceAfter=3,
textColor=colors.HexColor("#555555"))
TABLE_HEADER = ParagraphStyle("TH", parent=styles["Normal"],
fontSize=9, fontName="Helvetica-Bold", textColor=colors.white, leading=12)
TABLE_CELL = ParagraphStyle("TC", parent=styles["Normal"],
fontSize=9, fontName="Helvetica", leading=12)
def h1(text): return Paragraph(text, HEADING1)
def h2(text): return Paragraph(text, HEADING2)
def h3(text): return Paragraph(text, HEADING3)
def body(text): return Paragraph(text, BODY)
def bullet(text): return Paragraph(f"• {text}", BULLET)
def sp(h=4): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.8, color=colors.HexColor("#2e6da4"), spaceAfter=4, spaceBefore=4)
def thin_hr(): return HRFlowable(width="100%", thickness=0.4, color=colors.HexColor("#aaaaaa"), spaceAfter=3, spaceBefore=3)
def make_table(headers, rows, col_widths=None):
data = [[Paragraph(h, TABLE_HEADER) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), TABLE_CELL) for c in row])
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2e6da4")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f5fa"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4de")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
return t
story = []
# ── TITLE ──────────────────────────────────────────────
story.append(sp(6))
story.append(Paragraph("DIAGNOSTIC MOLECULAR PATHOLOGY", ParagraphStyle(
"Title", parent=styles["Normal"], fontSize=20, fontName="Helvetica-Bold",
alignment=TA_CENTER, textColor=colors.HexColor("#1a3a5c"), spaceAfter=4)))
story.append(Paragraph("Short Note", ParagraphStyle(
"Sub", parent=styles["Normal"], fontSize=12, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#2e6da4"), spaceAfter=2)))
story.append(Paragraph("Source: Bailey & Love's 28e | Henry's Clinical Diagnosis 24e", ParagraphStyle(
"Src", parent=styles["Normal"], fontSize=8, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#777777"), spaceAfter=8)))
story.append(hr())
story.append(sp(6))
# ── 1. DEFINITION ──────────────────────────────────────
story.append(h1("1. Definition"))
story.append(body(
"Diagnostic molecular pathology refers to multiple tests that assess <b>molecules "
"(DNA, RNA, and proteins) in tissue</b> to provide information useful for:"
))
for item in [
"Diagnosis and tumour classification",
"Prognostic prediction",
"Identifying hereditary cancer risk",
"Determining treatment (theranostics)",
"Identifying residual disease after treatment",
]:
story.append(bullet(item))
story.append(body("<i>Note: Immunohistochemistry (IHC) is conventionally considered a separate category.</i>"))
story.append(sp(4))
# ── 2. BASIC METHODS ───────────────────────────────────
story.append(h1("2. Basic Methods"))
# ISH
story.append(h2("2.1 In Situ Hybridisation (ISH)"))
story.append(body(
"Uses a <b>labelled oligonucleotide probe</b> targeting a specific RNA or DNA sequence, allowing "
"visualisation of presence, absence, and location of nucleic acid sequences in tissue sections."
))
story.append(body("<b>Variants:</b>"))
for item in [
"<b>FISH</b> (Fluorescence ISH) – fluorescence microscopy; detects gene amplifications, translocations, deletions",
"<b>CISH</b> (Chromogenic ISH) – bright-field; combines ISH + IHC; common alternative to FISH for HER2 detection",
"<b>Radioactive ISH</b> – autoradiography (less common now)",
]:
story.append(bullet(item))
story.append(body("<b>Key applications:</b> HER2 amplification (breast, gastric, CRC), EBV, CMV, high-risk HPV detection"))
story.append(sp(4))
# PCR
story.append(h2("2.2 Polymerase Chain Reaction (PCR)"))
story.append(body(
"Amplifies DNA, yielding millions of copies from a single target sequence. "
"Can be performed on <b>fresh or formalin-fixed paraffin-embedded (FFPE)</b> tissue."
))
story.append(body("<b>Variants:</b>"))
for item in [
"<b>RT-PCR</b> (Reverse Transcriptase PCR) – amplifies RNA by converting to cDNA first",
"<b>Real-time PCR (qPCR)</b> – quantifies DNA/RNA; distinct from RT-PCR despite similar abbreviation",
]:
story.append(bullet(item))
story.append(body("<b>Applications:</b> Mutational analysis (KRAS, BRAF), clonality testing in lymphoma, MSI testing, "
"fusion gene detection (BCR-ABL), infectious agent detection"))
story.append(sp(4))
# NGS
story.append(h2("2.3 Next-Generation Sequencing (NGS)"))
story.append(body(
"Performs <b>massively parallel sequencing</b> — simultaneously examines millions of DNA/RNA fragments. "
"Works on FFPE tissue. Evaluates <b>20–500 genes in a single assay</b>."
))
story.append(body("<b>Detects:</b> point mutations, small indels, copy number variants (CNVs), gene fusions, tumour mutation burden (TMB)"))
story.append(body("<b>Advantages over Sanger:</b> greater sensitivity (detects low-frequency alleles), higher throughput, "
"simultaneous multi-gene analysis"))
story.append(sp(4))
# Sanger
story.append(h2("2.4 Sanger Sequencing / Pyrosequencing"))
story.append(body(
"Traditional targeted single-gene sequencing. Less sensitive than NGS but reliable for known hotspot mutations. "
"Still widely used for specific variant confirmation."
))
story.append(sp(6))
# ── 3. GENETIC ABNORMALITIES ───────────────────────────
story.append(h1("3. Types of Genetic Abnormalities Detected"))
story.append(make_table(
["Type", "Description", "Examples"],
[
["Point mutations", "Single nucleotide change; germline or somatic", "TP53, KRAS mutations"],
["Indels", "Insertions/deletions → frameshift", "KIT mutations"],
["Fusion genes", "From translocations/deletions; chimeric proteins", "BCR-ABL t(9;22) in CML; BCL2 t(14;18) in FL; TMPRSS2-ERG in prostate cancer"],
["Gene amplification", "Increased copy number → overexpression", "HER2 in breast/gastric/CRC"],
["MSI", "MMR deficiency → short tandem repeat instability", "Lynch syndrome, sporadic CRC (MLH1 methylation)"],
["Epigenetic changes", "DNA methylation/histone modification silencing genes", "MLH1 hypermethylation in sporadic CRC"],
],
col_widths=[3.2*cm, 7.5*cm, 6.3*cm]
))
story.append(sp(8))
# ── 4. MMR / MSI ───────────────────────────────────────
story.append(h1("4. Mismatch Repair (MMR) and Microsatellite Instability (MSI)"))
story.append(body(
"MMR genes (<b>MLH1, MSH2, MSH6, PMS2</b>) correct DNA replication errors. "
"Loss of MMR function → <b>MSI-H</b> (microsatellite instability-high) / <b>dMMR</b> (deficient MMR)."
))
story.append(h3("Causes:"))
for item in [
"<b>Germline mutation</b> = <b>Lynch syndrome</b> (autosomal dominant; risk of CRC, endometrial + other cancers at early age)",
"<b>Sporadic somatic methylation of MLH1</b> (more common, ~85% of MSI-H cases)",
]:
story.append(bullet(item))
story.append(h3("Prevalence:"))
for item in ["~15% of colorectal carcinomas (CRC)", "~30% of endometrial carcinomas"]:
story.append(bullet(item))
story.append(h3("Testing for MSI/MMR:"))
for item in [
"<b>IHC</b> – preferred initial test; loss of staining = gene abnormality",
"<b>PCR-based microsatellite testing</b>",
"<b>NGS</b>",
]:
story.append(bullet(item))
story.append(h3("Clinical Value of MSI-H:"))
story.append(make_table(
["Clinical Use", "Detail"],
[
["Phenotypic classification", "Medullary CRC typically MSI-H; right-sided, mucinous histology, BRAF V600E mutation"],
["Prognosis", "MSI-H = better overall prognosis"],
["Therapy prediction", "Responds to immune checkpoint inhibitors (ICIs); no response to 5-fluorouracil"],
["Germline screening", "Screens for Lynch syndrome"],
],
col_widths=[5*cm, 12*cm]
))
story.append(sp(8))
# ── 5. DETECTION METHOD SUMMARY ───────────────────────
story.append(h1("5. Detection Methods — Summary"))
story.append(make_table(
["Abnormality", "Preferred Method(s)"],
[
["Point mutations / small indels", "NGS, PCR"],
["Gene fusions", "FISH, NGS, PCR"],
["Gene amplifications", "FISH, NGS"],
["Tumour mutation burden (TMB)", "NGS"],
["MSI / dMMR", "IHC (initial), PCR, NGS"],
["Viral genomes (EBV, HPV, CMV)", "ISH"],
],
col_widths=[9*cm, 8*cm]
))
story.append(body("<i>Rule: IHC is often a useful and sufficient initial test for many abnormalities before molecular testing.</i>"))
story.append(sp(8))
# ── 6. THERANOSTICS ───────────────────────────────────
story.append(h1("6. Theranostics — Molecular Changes and Drug Therapy"))
story.append(body(
"An increasingly common reason for molecular testing is predicting drug response "
"('theranostics') — particularly for targeted therapies and immune checkpoint inhibitors (ICIs)."
))
story.append(make_table(
["Molecular Finding", "Tumour Type", "Target Drug"],
[
["HER2 amplification", "Breast, gastric, CRC", "Trastuzumab, pertuzumab"],
["KRAS/BRAF wild-type", "CRC", "Anti-EGFR (cetuximab, panitumumab)"],
["BRAF V600E", "Melanoma, CRC, others", "BRAF inhibitors (vemurafenib, dabrafenib)"],
["ALK, RET, NTRK, ROS1, FGFR2 fusions", "NSCLC, others", "Tyrosine kinase inhibitors (TKIs)"],
["MSI-H / high TMB", "Multiple", "ICIs (pembrolizumab, nivolumab)"],
["BCR-ABL t(9;22)", "CML", "Imatinib and other TKIs"],
["PD-L1 expression", "Multiple", "ICIs"],
],
col_widths=[5.5*cm, 4.5*cm, 7*cm]
))
story.append(h3("Tumours Responding to ICIs:"))
for t in ["Malignant melanoma", "Non-small cell lung cancer (NSCLC)", "Small cell lung cancer (SCLC)",
"Breast carcinoma", "Urothelial carcinoma", "Hepatocellular carcinoma"]:
story.append(bullet(t))
story.append(sp(8))
# ── 7. INDICATIONS ────────────────────────────────────
story.append(h1("7. Indications for Molecular Analysis of Tumour Tissue"))
for i, item in enumerate([
"Diagnosis and classification",
"Selection of therapy",
"Prognosis",
"Staging",
"Monitoring disease burden",
"Screening for germline mutations",
"Confirmation of neoplasia (e.g. clonality testing in lymphoma)",
], 1):
story.append(Paragraph(f"{i}. {item}", BULLET))
story.append(sp(8))
# ── 8. PATHWAYS ───────────────────────────────────────
story.append(h1("8. Key Pathways Disrupted in Tumorigenesis"))
story.append(make_table(
["Pathway", "Key Genes"],
[
["Signal transduction / proliferation", "KRAS, EGFR, BRAF, growth factor receptors"],
["Cell cycle control", "p16 (CDKN2A), RB"],
["DNA repair", "BRCA1/2, MMR genes (MLH1, MSH2, MSH6, PMS2)"],
["Apoptosis", "BCL2, TP53"],
],
col_widths=[7*cm, 10*cm]
))
story.append(sp(8))
# ── 9. PRACTICAL NOTES ────────────────────────────────
story.append(h1("9. Practical Notes"))
for item in [
"The pathologist assesses <b>tumour cell content (%)</b>, cellularity, and necrosis before molecular analysis",
"<b>Microdissection</b> (conventional or laser-assisted) improves tumour DNA yield from FFPE sections",
"<b>Germline mutations</b> are present in every cell of the body (e.g. BRCA1/2, Lynch syndrome MMR mutations)",
"<b>Somatic mutations</b> are confined to tumour cells only (e.g. acquired KRAS, BRAF mutations)",
"Adequate tumour DNA quality and quantity are essential — samples with high necrosis or low cellularity may fail",
]:
story.append(bullet(item))
story.append(sp(10))
story.append(thin_hr())
story.append(Paragraph(
"Sources: Bailey & Love's Short Practice of Surgery 28e, Ch. 11 | "
"Henry's Clinical Diagnosis and Management by Laboratory Methods 24e",
SMALL))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace && python diagnostic_molecular_pathology.py
Diagnostic Molecular Pathology
PDF Document · PDF
Tep and taap short note
| Zone | Location | Content |
|---|---|---|
| Zone 1 | Lateral to internal inguinal ring / spermatic vessels | Psoas muscle posteriorly; ASIS laterally |
| Zone 2 | Medial to inferior epigastric vessels | Site of direct hernias |
| Zone 3 | Between zones 1 and 2 | Inferior epigastric vessels, internal inguinal ring, spermatic cord, external iliac vessels |
Rule: No tacks, staples, or sutures lateral to the testicular vessels or below the iliopubic tract
| Feature | TEP | TAPP |
|---|---|---|
| Peritoneal entry | No | Yes |
| Working space | Smaller (preperitoneal only) | Larger (intraperitoneal view) |
| Learning curve | Steeper | Less steep |
| Visceral injury risk | Lower | Higher (trocars in abdomen) |
| Port-site hernia | No | Possible |
| Adhesion risk | None | Possible |
| Bilateral repair | Yes (no extra steps) | Yes (bilateral incisions) |
| Peritoneal closure needed | No | Yes (over mesh) |
| Prior pelvic surgery | Difficult (scarred preperitoneal space) | Better tolerated |
| Robotic platform | Not standard | Preferred |
| Recurrent hernia (after open) | Both equally recommended (IEHS Grade A) | Both equally recommended |
| Anaesthesia | GA required | GA required |
| Complication | Notes |
|---|---|
| Injury to triangle of doom | External iliac vessel injury - rare but catastrophic |
| Injury to triangle of pain | Chronic groin/thigh neuralgia |
| Seroma | Most common; usually self-limiting |
| Peritoneal rent (TEP) | Must be repaired to maintain working space |
| Port-site hernia | More common with TAPP |
| Mesh migration/folding | During desufflation in TEP if not held |
| Recurrence | ~1-2%; similar to open Lichtenstein |
| Conversion to open | Required in ~1-3% |
Generate a PDF of this TEP/TAPP short note
ls /tmp/workspace/
~/tep_tapp.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/tmp/workspace/TEP_TAPP_Short_Note.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2*cm,
title="TEP and TAPP - Laparoscopic Inguinal Hernia Repair",
author="Orris Medical"
)
# ── Styles ────────────────────────────────────────────
TITLE_S = ParagraphStyle("TitleS", fontSize=18, fontName="Helvetica-Bold",
alignment=TA_CENTER, textColor=colors.HexColor("#1a3a5c"), spaceAfter=4)
SUB_S = ParagraphStyle("SubS", fontSize=11, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#2e6da4"), spaceAfter=2)
SRC_S = ParagraphStyle("SrcS", fontSize=8, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#777777"), spaceAfter=8)
H1_S = ParagraphStyle("H1S", fontSize=13, fontName="Helvetica-Bold",
textColor=colors.HexColor("#1a3a5c"), spaceBefore=12, spaceAfter=5)
H2_S = ParagraphStyle("H2S", fontSize=11, fontName="Helvetica-Bold",
textColor=colors.HexColor("#2e6da4"), spaceBefore=9, spaceAfter=4)
H3_S = ParagraphStyle("H3S", fontSize=10, fontName="Helvetica-Bold",
textColor=colors.HexColor("#1a5276"), spaceBefore=7, spaceAfter=3)
BODY_S = ParagraphStyle("BodyS", fontSize=9.5, fontName="Helvetica",
leading=14, spaceAfter=4, spaceBefore=2, alignment=TA_JUSTIFY)
BULL_S = ParagraphStyle("BullS", fontSize=9.5, fontName="Helvetica",
leading=13, spaceAfter=2, spaceBefore=1, leftIndent=14, bulletIndent=4)
NOTE_S = ParagraphStyle("NoteS", fontSize=8.5, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#444444"), spaceAfter=4, spaceBefore=2,
leftIndent=10, leading=12)
SMALL_S = ParagraphStyle("SmallS", fontSize=8, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#555555"), spaceAfter=3)
TH_S = ParagraphStyle("THS", fontSize=9, fontName="Helvetica-Bold",
textColor=colors.white, leading=12)
TC_S = ParagraphStyle("TCS", fontSize=9, fontName="Helvetica", leading=12)
TC_B_S = ParagraphStyle("TCBS", fontSize=9, fontName="Helvetica-Bold", leading=12)
def h1(t): return Paragraph(t, H1_S)
def h2(t): return Paragraph(t, H2_S)
def h3(t): return Paragraph(t, H3_S)
def body(t):return Paragraph(t, BODY_S)
def bull(t):return Paragraph(f"• {t}", BULL_S)
def note(t):return Paragraph(f"<i>{t}</i>", NOTE_S)
def sp(h=4):return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.8,
color=colors.HexColor("#2e6da4"), spaceAfter=4, spaceBefore=4)
def thr(): return HRFlowable(width="100%", thickness=0.4,
color=colors.HexColor("#aaaaaa"), spaceAfter=3, spaceBefore=3)
def table(headers, rows, widths=None):
data = [[Paragraph(h, TH_S) for h in headers]]
for row in rows:
cells = []
for c in row:
if isinstance(c, str) and c.startswith("<b>"):
cells.append(Paragraph(c, TC_B_S))
else:
cells.append(Paragraph(str(c), TC_S))
data.append(cells)
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2e6da4")),
("ROWBACKGROUNDS", (0,1), (-1,-1),
[colors.HexColor("#eef4fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4de")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
]))
return t
W = 17*cm # usable width
story = []
# ══ TITLE BLOCK ══════════════════════════════════════════
story += [sp(6),
Paragraph("TEP & TAPP", TITLE_S),
Paragraph("Laparoscopic Inguinal Hernia Repair — Short Note", SUB_S),
Paragraph("Sources: Schwartz's Principles of Surgery 11e | Fischer's Mastery of Surgery 8e | Mulholland & Greenfield's Surgery 7e", SRC_S),
hr(), sp(4)]
# ══ 1. BACKGROUND ════════════════════════════════════════
story += [h1("1. Background")]
story.append(body(
"Laparoscopic inguinal hernia repairs have become widely popular due to noninferiority "
"to open repair, improved cosmesis, and faster recovery. The two principal laparoscopic "
"techniques are <b>TEP (Totally Extraperitoneal Repair)</b> and "
"<b>TAPP (Transabdominal Preperitoneal Repair)</b>. "
"Both involve dissection of the preperitoneal space and placement of a prosthetic mesh "
"over the myopectineal orifice, but differ in how that space is accessed."
))
for b in [
"Over <b>20 million</b> inguinal hernias repaired worldwide annually",
"Lifetime risk: <b>27% in men</b>, 3% in women",
"<b>General anaesthesia</b> required for both (patients cannot tolerate abdominal insufflation awake)",
"IEHS guidelines: <b>Grade A recommendation</b> — TEP and TAPP preferred over Lichtenstein for recurrent hernias after prior open anterior repair",
]:
story.append(bull(b))
story.append(sp(4))
# ══ 2. TEP ═══════════════════════════════════════════════
story += [h1("2. TEP — Totally Extraperitoneal Repair"), h2("Definition")]
story.append(body(
"Access to the preperitoneal space <b>without entering the peritoneal cavity</b>. "
"Dissection occurs entirely between the peritoneum and the anterior abdominal wall."
))
story.append(h2("Operative Steps"))
steps_tep = [
("1", "Infraumbilical curvilinear incision (contralateral to hernia side)"),
("2", "Dissect to anterior rectus sheath → incise fascia transversely; retract rectus muscle laterally"),
("3", "Advance dissecting balloon (or blunt laparoscope) toward pubic symphysis; inflate slowly under direct vision to develop preperitoneal space"),
("4", "Three midline trocars: 10/12 mm Hassan at umbilicus; 5 mm at 1/3 and 5 mm at 2/3 distance from umbilicus to pubic symphysis"),
("5", "Pneumopreperitoneum (CO₂) to 15 mmHg (NOT pneumoperitoneum)"),
("6", "Blunt dissection of preperitoneal fat; identify and preserve inferior epigastric vessels"),
("7", "Reduce hernia sac; skeletonise cord structures"),
("8", "Place 10×15 cm mesh over myopectineal orifice"),
("9", "Slow desufflation under direct vision — hold inferior mesh edge to prevent peritoneal flap herniation below mesh"),
("10","Close anterior rectus sheath with interrupted suture; skin closure"),
]
tep_table_data = [["Step", "Action"]]
for s, a in steps_tep:
tep_table_data.append([Paragraph(s, TC_B_S), Paragraph(a, TC_S)])
t = Table(tep_table_data, colWidths=[1.2*cm, W-1.2*cm], repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2e6da4")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef4fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4de")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
]))
story.append(t)
story.append(sp(4))
story.append(h2("Key Technical Points"))
for b in [
"<b>Peritoneal rent</b>: close immediately with absorbable endoloop or intracorporeal suture; unrepaired rent compromises field and risks small bowel obstruction",
"<b>Significant pneumoperitoneum</b>: insert Veress needle at Palmer's point to desufflate",
"No peritoneal closure required (peritoneum never formally opened)",
]:
story.append(bull(b))
story.append(h2("Advantages"))
for b in [
"No intraperitoneal entry → no risk of visceral injury from ports",
"No port-site hernia through an iatrogenic peritoneal defect",
"No intraperitoneal adhesions",
"Preferred when prior surgery creates intraperitoneal adhesions",
]:
story.append(bull(b))
story.append(h2("Disadvantages / Contraindications"))
for b in [
"Smaller working space → steeper learning curve",
"Prior pelvic surgery, radiation, or lower midline incisions → preperitoneal space may be scarred",
"Peritoneal tear significantly complicates the procedure",
]:
story.append(bull(b))
story.append(sp(6))
# ══ 3. TAPP ══════════════════════════════════════════════
story += [h1("3. TAPP — Transabdominal Preperitoneal Repair"), h2("Definition")]
story.append(body(
"Peritoneal cavity is entered first (transabdominal), preperitoneum dissected through a "
"peritoneal incision, mesh placed, and the <b>peritoneum is formally closed over the mesh</b>."
))
story.append(h2("Operative Steps"))
steps_tapp = [
("1", "Pneumoperitoneum to 15 mmHg via Veress needle or Hasson (open) technique"),
("2", "Three trocars: 10 mm camera (midline supra/infraumbilical) + two 5 mm working ports lateral and slightly inferior to umbilical port"),
("3", "Trendelenburg position; visualise bladder, umbilical ligaments, inferior epigastric vessels, external iliac vessels"),
("4", "Peritoneal incision at medial umbilical ligament, 3–4 cm superior to hernia defect, carried laterally to ASIS"),
("5", "Bilateral repair: bilateral incisions with midline bridge preserved (protects patent urachus)"),
("6", "Retract inferior peritoneal edge; bluntly dissect preperitoneal space; expose spermatic cord"),
("7", "Direct hernia sac: invert and fix to Cooper's ligament (prevents haematoma/seroma)"),
("8", "Indirect hernia sac: grasp, elevate superiorly; develop space below; dissect from cord; skeletonise cord"),
("9", "Place 10×15 cm mesh to cover myopectineal orifice"),
("10","Close peritoneum over mesh (staples, tacks, or suture) — critical to prevent mesh-bowel contact"),
("11","Desufflation, trocar removal, skin closure"),
]
tapp_table_data = [["Step", "Action"]]
for s, a in steps_tapp:
tapp_table_data.append([Paragraph(s, TC_B_S), Paragraph(a, TC_S)])
t2 = Table(tapp_table_data, colWidths=[1.2*cm, W-1.2*cm], repeatRows=1)
t2.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2e6da4")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef4fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4de")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
]))
story.append(t2)
story.append(sp(4))
story.append(h2("Robotic TAPP"))
for b in [
"All robotic inguinofemoral hernia repairs use TAPP (not TEP)",
"Camera port placed ≥2 cm supraumbilical (longer instruments need more space)",
"Two 8 mm robotic trocars in right and left midclavicular lines, 8–10 cm apart",
]:
story.append(bull(b))
story.append(h2("Advantages"))
for b in [
"Wide operative field — no technical space constraints",
"Contralateral hernia identified without additional preperitoneal dissection",
"Better for bilateral hernias, large defects, and anterior approach scarring",
"Preferred platform for robotic surgery",
"Less steep learning curve than TEP",
]:
story.append(bull(b))
story.append(h2("Disadvantages / Contraindications"))
for b in [
"Peritoneal cavity entered → risk of visceral/vascular injury",
"Risk of port-site hernia through peritoneal defect",
"Multiple prior abdominal surgeries → extensive adhesiolysis may be required",
"Peritoneum must be closed over mesh — technically critical",
]:
story.append(bull(b))
story.append(sp(6))
# ══ 4. CRITICAL ANATOMY ══════════════════════════════════
story += [h1("4. Critical Preperitoneal Anatomy")]
story.append(body("The preperitoneal space is divided into <b>3 operative zones</b>:"))
story.append(table(
["Zone", "Location", "Contents / Significance"],
[
["Zone 1", "Lateral to internal inguinal ring / spermatic vessels", "Psoas muscle posteriorly; ASIS laterally; <b>Triangle of Pain</b>"],
["Zone 2", "Medial to inferior epigastric vessels", "Site of direct hernias"],
["Zone 3", "Central — between zones 1 and 2", "Inferior epigastric vessels, internal inguinal ring, spermatic cord, external iliac vessels; <b>Triangle of Doom</b>"],
],
widths=[2*cm, 5.5*cm, W-7.5*cm]
))
story.append(sp(6))
story.append(h2("Two Danger Triangles"))
story.append(table(
["Triangle", "Zone", "Boundaries", "Contents", "Consequence of Injury"],
[
["<b>Triangle of Doom</b>", "Zone 3",
"Vas deferens (medial)\nTesticular vessels (lateral)\nPeritoneal fold (inferior)",
"External iliac artery and vein",
"Catastrophic haemorrhage"],
["<b>Triangle of Pain</b>", "Zone 1",
"Iliopubic tract (superior)\nTesticular vessels (medial)\nPeritoneal fold (inferior)",
"Lateral femoral cutaneous nerve\nGenitofemoral nerve\nFemoral nerve",
"Chronic groin/thigh neuralgia"],
],
widths=[3.2*cm, 1.5*cm, 4*cm, 4.5*cm, W-13.2*cm]
))
story.append(note(
"RULE: No tacks, staples, or sutures lateral to the testicular vessels or below the iliopubic tract."
))
story.append(sp(6))
# ══ 5. TEP vs TAPP COMPARISON ════════════════════════════
story += [h1("5. TEP vs. TAPP — Comparison")]
story.append(table(
["Feature", "TEP", "TAPP"],
[
["Peritoneal entry", "<b>No</b>", "<b>Yes</b>"],
["Working space", "Smaller (preperitoneal only)", "Larger (intraperitoneal view)"],
["Learning curve", "Steeper", "Less steep"],
["Visceral injury risk", "Lower", "Higher (trocars in abdomen)"],
["Port-site hernia", "No", "Possible"],
["Adhesion risk", "None", "Possible"],
["Bilateral repair", "Yes (no extra steps)", "Yes (bilateral incisions)"],
["Peritoneal closure", "Not required", "<b>Required</b> (over mesh)"],
["Prior pelvic surgery", "Difficult (scarred space)", "Better tolerated"],
["Robotic platform", "Not standard", "<b>Preferred</b>"],
["Recurrent hernia (post-open)", "IEHS Grade A", "IEHS Grade A"],
["Anaesthesia", "GA required", "GA required"],
],
widths=[5*cm, 6*cm, 6*cm]
))
story.append(sp(6))
# ══ 6. INDICATIONS ═══════════════════════════════════════
story += [h1("6. Indications for Laparoscopic Repair (TEP/TAPP)")]
for b in [
"Primary inguinal hernia (unilateral or bilateral)",
"<b>Bilateral inguinal hernias</b> — laparoscopic superior to open (Grade A evidence)",
"<b>Recurrent hernia after prior open anterior repair</b> — TEP/TAPP preferred (IEHS Grade A)",
"Concurrent hernia repair during another laparoscopic procedure (e.g. prostatectomy) without contamination",
"Femoral hernias (both techniques access femoral canal well)",
]:
story.append(bull(b))
story.append(sp(4))
story += [h1("7. Contraindications")]
story.append(table(
["Contraindication", "Applies To"],
[
["Inability to tolerate general anaesthesia", "Both TEP and TAPP"],
["Prior pelvic surgery / radiation / lower midline incisions", "TEP primarily"],
["Multiple prior abdominal surgeries with extensive adhesions", "TAPP primarily"],
["Uncontrolled coagulopathy", "Both"],
["Unstable cardiovascular disease", "Both"],
],
widths=[10*cm, 7*cm]
))
story.append(sp(6))
# ══ 8. COMPLICATIONS ═════════════════════════════════════
story += [h1("8. Complications of Laparoscopic Repair")]
story.append(table(
["Complication", "Notes"],
[
["Injury to triangle of doom", "External iliac vessel injury — rare but catastrophic haemorrhage"],
["Injury to triangle of pain", "Chronic groin/thigh neuralgia from nerve injury"],
["Seroma", "Most common; usually self-limiting"],
["Peritoneal rent (TEP)", "Must be repaired immediately to maintain working space"],
["Port-site hernia", "More common with TAPP through peritoneal defect"],
["Mesh migration/folding", "During desufflation in TEP if inferior edge not held"],
["Recurrence", "~1–2%; similar to open Lichtenstein"],
["Conversion to open", "Required in ~1–3%"],
],
widths=[5.5*cm, W-5.5*cm]
))
story += [sp(10), thr(),
Paragraph(
"Sources: Schwartz's Principles of Surgery 11e, Ch. 37 | "
"Fischer's Mastery of Surgery 8e, Ch. 223 | "
"Mulholland & Greenfield's Surgery 7e",
SMALL_S)]
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace && python tep_tapp.py
TEP TAPP Short Note
PDF Document · PDF
Surgery role in monkey pox
mpox monkeypox surgical management role of surgery complications 2024 2025
https://pmc.ncbi.nlm.nih.gov/articles/PMC11434558
mpox monkeypox surgery surgical complications
PMID: 40493066
PMID: 37186888
| Complication | Surgical Intervention |
|---|---|
| Cutaneous abscess (secondary bacterial superinfection of lesions) | Incision and drainage (I&D) |
| Cellulitis unresponsive to antibiotics | Wound exploration, drainage |
| Necrotising soft tissue infection (NSTI) | Urgent surgical debridement; repeated re-look operations; possible skin grafting |
| Skin exfoliation (confluent lesions forming large denuded areas) | Surgical debridement by expert + wound care; possible split-skin grafting |
| Cutaneous scarring / contracture | Reconstructive surgery (delayed) |
| System | Complication | Surgical Procedure |
|---|---|---|
| Skin/Soft tissue | Abscess | Incision and drainage |
| Skin/Soft tissue | NSTI | Debridement ± skin grafting |
| Skin/Soft tissue | Skin exfoliation | Expert debridement ± grafting |
| Anorectal | Perianal abscess | I&D ± EUA |
| Anorectal | Severe proctitis/fistula | EUA, fistulotomy |
| Anorectal | Refractory/severe disease | Defunctioning colostomy |
| Ophthalmic | Canalicular obstruction | DCR |
| Ophthalmic | Corneal scarring | Keratoplasty (delayed) |
| Urogenital | Urethral meatal obstruction | Meatotomy / catheterisation |
| Oropharyngeal | Airway compromise | Awake intubation / tracheostomy |
| Lymph nodes | Necrotising / obstructing | Surgical/interventional drainage |
| Facial | Scarring / deformity | Reconstructive surgery (delayed) |
Generate a PDF of the mpox surgery short note
~/mpox_surgery.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/tmp/workspace/Mpox_Surgery_Short_Note.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2*cm,
title="Role of Surgery in Mpox (Monkeypox)",
author="Orris Medical"
)
# ── Styles ──────────────────────────────────────────────
TITLE_S = ParagraphStyle("TitleS", fontSize=18, fontName="Helvetica-Bold",
alignment=TA_CENTER, textColor=colors.HexColor("#1a3a5c"), spaceAfter=4)
SUB_S = ParagraphStyle("SubS", fontSize=11, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#2e6da4"), spaceAfter=2)
SRC_S = ParagraphStyle("SrcS", fontSize=8, fontName="Helvetica-Oblique",
alignment=TA_CENTER, textColor=colors.HexColor("#777777"), spaceAfter=8)
H1_S = ParagraphStyle("H1S", fontSize=13, fontName="Helvetica-Bold",
textColor=colors.HexColor("#1a3a5c"), spaceBefore=12, spaceAfter=5)
H2_S = ParagraphStyle("H2S", fontSize=11, fontName="Helvetica-Bold",
textColor=colors.HexColor("#2e6da4"), spaceBefore=9, spaceAfter=4)
H3_S = ParagraphStyle("H3S", fontSize=10, fontName="Helvetica-Bold",
textColor=colors.HexColor("#1a5276"), spaceBefore=7, spaceAfter=3)
BODY_S = ParagraphStyle("BodyS", fontSize=9.5, fontName="Helvetica",
leading=14, spaceAfter=4, spaceBefore=2, alignment=TA_JUSTIFY)
BULL_S = ParagraphStyle("BullS", fontSize=9.5, fontName="Helvetica",
leading=13, spaceAfter=2, spaceBefore=1, leftIndent=14, bulletIndent=4)
NOTE_S = ParagraphStyle("NoteS", fontSize=8.8, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#333333"), spaceAfter=4, spaceBefore=3,
leftIndent=10, leading=13,
borderColor=colors.HexColor("#2e6da4"), borderWidth=0.5,
borderPadding=(4,6,4,6), backColor=colors.HexColor("#eef4fb"))
SMALL_S = ParagraphStyle("SmallS", fontSize=8, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#555555"), spaceAfter=3)
TH_S = ParagraphStyle("THS", fontSize=9, fontName="Helvetica-Bold",
textColor=colors.white, leading=12)
TC_S = ParagraphStyle("TCS", fontSize=9, fontName="Helvetica", leading=12)
TC_B_S = ParagraphStyle("TCBS", fontSize=9, fontName="Helvetica-Bold", leading=12)
def h1(t): return Paragraph(t, H1_S)
def h2(t): return Paragraph(t, H2_S)
def h3(t): return Paragraph(t, H3_S)
def body(t):return Paragraph(t, BODY_S)
def bull(t):return Paragraph(f"• {t}", BULL_S)
def note(t):return Paragraph(t, NOTE_S)
def sp(h=4):return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.8,
color=colors.HexColor("#2e6da4"), spaceAfter=4, spaceBefore=4)
def thr(): return HRFlowable(width="100%", thickness=0.4,
color=colors.HexColor("#aaaaaa"), spaceAfter=3, spaceBefore=3)
W = 17*cm
def tbl(headers, rows, widths=None):
data = [[Paragraph(h, TH_S) for h in headers]]
for row in rows:
cells = []
for c in row:
if str(c).startswith("<b>"):
cells.append(Paragraph(str(c), TC_B_S))
else:
cells.append(Paragraph(str(c), TC_S))
data.append(cells)
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2e6da4")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef4fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#b0c4de")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
return t
story = []
# ══ TITLE ════════════════════════════════════════════════
story += [
sp(6),
Paragraph("Role of Surgery in Mpox", TITLE_S),
Paragraph("(Monkeypox) — Short Note", SUB_S),
Paragraph(
"Sources: Chryssofos et al., Am Surg 2025 (PMID 40493066) | "
"Cherfan et al., Am Surg 2023 (PMID 37186888) | "
"NICD Guidelines May 2025 | WHO Living Guideline 2025 | UpToDate",
SRC_S),
hr(), sp(4),
]
# ══ 1. OVERVIEW ══════════════════════════════════════════
story += [h1("1. Overview")]
story.append(body(
"Mpox (formerly monkeypox) is an <b>orthopoxvirus</b> infection causing a self-limited "
"febrile illness with characteristic skin lesions and lymphadenopathy. "
"<b>Surgery is not part of routine mpox management</b> — primary treatment is supportive "
"care, antivirals (tecovirimat, brincidofovir), and vaccinia immune globulin (VIG) for "
"severe cases. However, surgery has a defined and increasingly recognised role in "
"<b>managing complications</b>, particularly in immunocompromised patients and those "
"with severe or refractory disease."
))
story.append(body(
"A 2025 review by Chryssofos et al. specifically targeting surgeons calls for "
"heightened awareness and preparedness, particularly with the emergence of the more "
"virulent <b>Clade Ib variant (2024)</b>, which has reached the United States and Europe."
))
story.append(sp(4))
# ══ 2. WHEN SURGERY IS NEEDED ════════════════════════════
story += [h1("2. Surgical Indications by System")]
# 2.1 Skin
story += [h2("2.1 Skin and Soft Tissue Complications")]
story.append(body(
"The most common surgical indications arise from <b>secondary bacterial superinfection</b> "
"of confluent or necrotic lesions, and from skin exfoliation forming large denuded areas."
))
story.append(tbl(
["Complication", "Surgical Intervention"],
[
["<b>Cutaneous abscess</b> (secondary bacterial superinfection)", "Incision and drainage (I&D)"],
["<b>Cellulitis</b> unresponsive to antibiotics", "Wound exploration, drainage"],
["<b>Necrotising soft tissue infection (NSTI)</b>", "Urgent surgical debridement; repeated re-look operations; possible skin grafting"],
["<b>Skin exfoliation</b> (confluent lesions, large denuded areas)", "Expert debridement (with full PPE) + wound care; split-skin grafting"],
["<b>Cutaneous scarring / contracture</b> (delayed)", "Reconstructive surgery after infection resolved"],
],
widths=[7.5*cm, W-7.5*cm]
))
story.append(note(
"NICD 2025: Debridement should NOT be performed unless by an expert wearing "
"appropriate PPE. Optimal management of skin lesions remains uncertain and needs further research."
))
story.append(sp(4))
# 2.2 Anorectal
story += [h2("2.2 Anorectal / Colorectal Manifestations")]
story.append(body(
"This is the <b>most significant and emerging surgical area</b> in mpox — particularly in "
"men who have sex with men (MSM) and HIV-positive individuals."
))
for b in [
"Mpox proctitis and perianal disease can progress to <b>perianal abscesses, fistula-in-ano, and severe proctitis</b> refractory to antiviral therapy",
"Case report (Cherfan et al., 2023): HIV-positive male on tecovirimat + VIG developed perianal abscesses requiring <b>incision and drainage</b> — surgery provided immediate relief and reduced long-term morbidity",
"In the most severe cases: <b>defunctioning colostomy</b> to divert faecal stream and allow healing",
]:
story.append(bull(b))
story.append(body("<b>Colorectal surgical procedures used:</b>"))
for b in [
"Incision and drainage of perianal abscess",
"Examination under anaesthesia (EUA)",
"Fistulotomy / seton placement",
"Defunctioning colostomy (refractory/severe cases)",
]:
story.append(bull(b))
story.append(sp(4))
# 2.3 Ophthalmic
story += [h2("2.3 Ophthalmic Manifestations")]
story.append(body(
"Mpox can cause conjunctivitis, keratitis, corneal ulceration, and <b>canalicular/nasolacrimal "
"obstruction</b>. Prompt management is required to prevent permanent vision loss."
))
for b in [
"<b>Dacryocystorhinostomy (DCR)</b> — for canalicular/nasolacrimal duct obstruction post-mpox (Felguera-García et al., Orbit 2025, PMID 39087983)",
"<b>Keratoplasty</b> — for vision-threatening corneal scarring (delayed, after resolution of active infection)",
"Conjunctival/corneal debridement for recalcitrant corneal ulcers",
]:
story.append(bull(b))
story.append(sp(4))
# 2.4 Oropharyngeal / Airway
story += [h2("2.4 Oropharyngeal and Airway Complications")]
for b in [
"Oropharyngeal mpox lesions risk <b>airway compromise</b> — critical for anaesthetic planning",
"<b>Awake fibreoptic intubation</b> preferred to avoid trauma to lesions (releasing infectious viral particles)",
"Emergency <b>surgical airway</b> (cricothyrotomy / tracheostomy) in extreme cases of airway obstruction",
"Severe tonsillar necrosis or pharyngeal lesions may warrant <b>surgical consultation</b>",
"Facial lesion scarring may require <b>delayed reconstructive surgery</b> once infection resolved",
]:
story.append(bull(b))
story.append(sp(4))
# 2.5 Lymph nodes
story += [h2("2.5 Lymph Node Complications")]
story.append(body(
"Mpox characteristically causes <b>prominent lymphadenopathy</b> "
"(a key distinguishing feature from smallpox)."
))
for b in [
"Rarely: <b>necrotising lymphadenitis</b> or obstructing lymphadenopathy (e.g. mediastinal, causing airway obstruction)",
"May require <b>surgical or interventional (CT-guided) drainage</b>",
]:
story.append(bull(b))
story.append(sp(4))
# 2.6 Urogenital
story += [h2("2.6 Urogenital Complications")]
for b in [
"<b>Balanitis / balanoposthitis</b> causing urethral meatal obstruction — meatotomy, dorsal slit, or urethral catheterisation",
"Severe genital scarring — reconstructive procedures (delayed)",
]:
story.append(bull(b))
story.append(sp(4))
# 2.7 Transplant recipients
story += [h2("2.7 Solid Organ Transplant Recipients")]
for b in [
"Highest risk group for severe mpox requiring surgery",
"Complex drug interactions between antivirals and immunosuppressants",
"Stringent isolation protocols and specialised surgical teams required",
"<b>Multidisciplinary team</b> (ID specialist + transplant surgeon + critical care) is essential",
"Delayed diagnosis due to atypical presentations in immunosuppressed patients",
]:
story.append(bull(b))
story.append(sp(6))
# ══ 3. PERIOPERATIVE CONSIDERATIONS ═════════════════════
story += [h1("3. Perioperative Considerations")]
story += [h2("3.1 General Principles")]
story.append(tbl(
["Principle", "Detail"],
[
["<b>Defer elective surgery</b>", "Until all lesions have crusted and fallen off (patient non-infectious)"],
["<b>Emergency surgery</b>", "Proceed with maximal infection control precautions"],
["<b>Preoperative screening</b>", "Assess for fever, rash, swollen lymph nodes, oropharyngeal lesions"],
["<b>Airway assessment</b>", "Mandatory — oropharyngeal lesions may complicate intubation"],
["<b>Multidisciplinary planning</b>", "ID specialist + surgeon + anaesthetist + critical care"],
],
widths=[5*cm, W-5*cm]
))
story.append(sp(4))
story += [h2("3.2 Infection Control in the Operating Room")]
for b in [
"Full <b>PPE: N95/FFP3 respirator, gown, gloves, eye/face protection</b>",
"Standard + contact + droplet + <b>airborne precautions</b> throughout",
"<b>Minimise OR traffic</b> — limit number of personnel to essential only",
"Prefer <b>single-use equipment</b>",
"<b>EPA-registered disinfectants</b> for all surfaces and equipment after the case",
"Aerosol-generating procedures (intubation, extubation, surgical diathermy on lesions) require highest level PPE",
"Surgical smoke from electrocautery on lesions may contain viable virus — use smoke evacuators",
]:
story.append(bull(b))
story.append(sp(4))
story += [h2("3.3 Anaesthetic Considerations")]
for b in [
"Pre-anaesthetic airway examination is mandatory",
"Awake fibreoptic intubation preferred if oropharyngeal lesions present",
"Rapid-sequence induction (RSI) if oropharyngeal lesions absent and airway is clear",
"Extubation in negative-pressure room if available",
"Full airborne precautions during intubation and extubation",
]:
story.append(bull(b))
story.append(sp(6))
# ══ 4. MPOX MIMICKING SURGICAL CONDITIONS ════════════════
story += [h1("4. Mpox Mimicking Surgical Conditions")]
story.append(body(
"Surgeons must consider mpox in the differential diagnosis of common surgical presentations, "
"especially in at-risk populations (MSM, HIV-positive, sexual contacts, travellers from endemic regions)."
))
story.append(tbl(
["Surgical Presentation", "Mpox Mimicry"],
[
["Perianal abscess / fistula", "Mpox perianal lesions, proctitis, abscess"],
["Inguinal lymphadenopathy / abscess", "Mpox inguinal lymphadenitis (often bilateral — clue to mpox)"],
["Pilonidal disease", "Mpox sacral / perianal lesions"],
["Cellulitis / NSTI", "Confluent infected mpox skin lesions"],
["STI-related genital ulcer", "Mpox genital lesions"],
["Dacryocystitis", "Mpox-related lacrimal duct obstruction"],
],
widths=[6*cm, W-6*cm]
))
story.append(note(
"Key diagnostic tip: Biopsy of suspicious lesions (with full PPE) can confirm mpox via PCR. "
"Bilateral lymphadenopathy is a distinguishing feature of mpox vs. most other infections."
))
story.append(sp(6))
# ══ 5. MASTER SUMMARY TABLE ══════════════════════════════
story += [h1("5. Summary — Surgical Indications in Mpox")]
story.append(tbl(
["System", "Complication", "Surgical Procedure"],
[
["Skin/Soft tissue", "Abscess", "Incision and drainage"],
["Skin/Soft tissue", "NSTI", "Debridement ± skin grafting"],
["Skin/Soft tissue", "Skin exfoliation", "Expert debridement ± grafting"],
["Skin/Soft tissue", "Scarring/contracture", "Reconstructive surgery (delayed)"],
["Anorectal", "Perianal abscess", "I&D ± examination under anaesthesia (EUA)"],
["Anorectal", "Fistula-in-ano", "EUA, fistulotomy / seton"],
["Anorectal", "Refractory proctitis", "Defunctioning colostomy"],
["Ophthalmic", "Canalicular obstruction", "Dacryocystorhinostomy (DCR)"],
["Ophthalmic", "Corneal scarring", "Keratoplasty (delayed)"],
["Urogenital", "Urethral meatal obstruction","Meatotomy / catheterisation / dorsal slit"],
["Oropharyngeal", "Airway compromise", "Awake intubation / tracheostomy"],
["Lymph nodes", "Necrotising/obstructing", "Surgical/interventional drainage"],
["Facial", "Scarring/deformity", "Reconstructive surgery (delayed)"],
],
widths=[3.5*cm, 5.5*cm, W-9*cm]
))
story.append(sp(6))
# ══ 6. KEY PRINCIPLES ════════════════════════════════════
story += [h1("6. Key Principles")]
for i, b in enumerate([
"<b>Surgery is reactive, not primary</b> — treat the infection first with antivirals and supportive care",
"<b>Immunocompromised patients</b> (HIV, transplant recipients) are at highest risk of complications requiring surgery",
"<b>Anorectal disease</b> is the most common and clinically significant surgical indication",
"<b>All surgical intervention on active mpox patients requires full PPE</b> — the virus is highly infectious via direct contact with lesions",
"<b>Defer elective surgery</b> until all lesions have fully resolved",
"<b>Mpox can mimic common surgical conditions</b> — maintain a high index of suspicion in at-risk populations",
"A <b>multidisciplinary approach</b> (surgeon + ID specialist + critical care + anaesthetist) optimises outcomes",
], 1):
story.append(Paragraph(f"{i}. {b}", BULL_S))
story += [sp(10), thr(),
Paragraph(
"Sources: Chryssofos et al., Am Surg 2025 (PMID 40493066) | "
"Cherfan et al., Am Surg 2023 (PMID 37186888) | "
"Felguera-Garcia et al., Orbit 2025 (PMID 39087983) | "
"NICD Clinical Guidelines May 2025 | WHO Living Guideline May 2025 | UpToDate",
SMALL_S)]
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace && python mpox_surgery.py
Mpox Surgery Short Note
PDF Document · PDF