Essay answer on sinonasal undifferentiated carcinoma
"sinonasal undifferentiated carcinoma"
PMID: 39162231
PMID: 39489553
| Marker | SNUC | ENB | SNEC |
|---|---|---|---|
| Cytokeratin (CK) | Positive | Negative | Positive |
| EMA | Positive | Focal | Positive |
| NSE | Weak positive | Positive | Positive |
| Chromogranin/Synaptophysin | Negative | Strongly positive | Positive (diffuse) |
| S100 | Negative | Positive (sustentacular) | Variable |
| p63/p40 | Negative | Negative | Negative |
Can you please make this into pdf
ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/snuc-essay
~/snuc-essay/generate_pdf.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 = "/home/daytona/workspace/snuc-essay/SNUC_Essay.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2.5*cm,
rightMargin=2.5*cm,
topMargin=2.5*cm,
bottomMargin=2.5*cm,
title="Sinonasal Undifferentiated Carcinoma",
author="Orris Medical",
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"CustomTitle",
parent=styles["Title"],
fontSize=20,
leading=26,
textColor=colors.HexColor("#1a3a5c"),
spaceAfter=6,
alignment=TA_CENTER,
)
subtitle_style = ParagraphStyle(
"Subtitle",
parent=styles["Normal"],
fontSize=10,
leading=14,
textColor=colors.HexColor("#555555"),
spaceAfter=12,
alignment=TA_CENTER,
)
h1_style = ParagraphStyle(
"H1",
parent=styles["Heading1"],
fontSize=13,
leading=17,
textColor=colors.HexColor("#1a3a5c"),
spaceBefore=16,
spaceAfter=4,
borderPad=2,
)
h2_style = ParagraphStyle(
"H2",
parent=styles["Heading2"],
fontSize=11,
leading=15,
textColor=colors.HexColor("#2c5f8a"),
spaceBefore=10,
spaceAfter=3,
)
body_style = ParagraphStyle(
"Body",
parent=styles["Normal"],
fontSize=10,
leading=15,
textColor=colors.HexColor("#222222"),
spaceAfter=6,
alignment=TA_JUSTIFY,
)
bullet_style = ParagraphStyle(
"Bullet",
parent=styles["Normal"],
fontSize=10,
leading=14,
textColor=colors.HexColor("#222222"),
leftIndent=16,
spaceAfter=3,
bulletIndent=4,
)
ref_style = ParagraphStyle(
"Ref",
parent=styles["Normal"],
fontSize=9,
leading=13,
textColor=colors.HexColor("#444444"),
leftIndent=10,
spaceAfter=3,
)
story = []
# Title
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Sinonasal Undifferentiated Carcinoma", title_style))
story.append(Paragraph("A Comprehensive Essay", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor("#1a3a5c"), spaceAfter=14))
# ─── INTRODUCTION ───────────────────────────────────────────────────────────
story.append(Paragraph("Introduction", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"Sinonasal undifferentiated carcinoma (SNUC) is a rare, highly aggressive malignant epithelial "
"neoplasm of the nasal cavity and paranasal sinuses. It was first recognised as a distinct "
"clinicopathological entity by Mills and colleagues in 1987 and is defined by the absence of "
"squamous, glandular, or neuroendocrine differentiation on light microscopy. Because of its "
"rarity, most clinical data derive from retrospective series spanning decades and small "
"institutional cohorts. Despite multimodal treatment advances, SNUC carries one of the worst "
"prognoses among all sinonasal malignancies.",
body_style
))
# ─── EPIDEMIOLOGY ────────────────────────────────────────────────────────────
story.append(Paragraph("Epidemiology and Aetiology", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"SNUC is exceedingly rare, accounting for fewer than 5% of all sinonasal malignancies. "
"It shows a male predominance (approximately 2:1) and most commonly presents in the fifth "
"to sixth decade of life. Unlike sinonasal squamous cell carcinoma, there is no established "
"causative link with occupational exposures (nickel, chromium, hardwood dust), tobacco, or "
"EBV infection. The aetiology remains largely unknown.",
body_style
))
story.append(Paragraph(
"Recent genomic studies have substantially reshaped the classification of undifferentiated "
"sinonasal tumours. Several molecularly distinct entities — previously grouped under the SNUC "
"umbrella — have been delineated:",
body_style
))
for item in [
"<b>IDH2-mutant SNUC</b> — carries somatic IDH2 hotspot mutations and a distinctive histomorphology",
"<b>SMARCA4-deficient sinonasal carcinoma</b> — loss of SWI/SNF chromatin remodelling complex subunit",
"<b>NUT (nuclear protein in testis) midline carcinoma</b> — defined by NUT gene rearrangement; extremely aggressive",
"<b>SMARCB1-deficient sinonasal carcinoma</b>",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph(
"This means that historical series may actually describe heterogeneous tumour populations, "
"complicating the interpretation of outcomes data. Modern pathological re-review with "
"molecular profiling is therefore essential.",
body_style
))
# ─── PATHOLOGY ───────────────────────────────────────────────────────────────
story.append(Paragraph("Pathology", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph("Gross Features", h2_style))
story.append(Paragraph(
"Tumours are bulky, fleshy masses that are locally destructive and frequently involve multiple "
"sinonasal subsites simultaneously at presentation. The nasal cavity, ethmoid sinuses, and "
"maxillary sinuses are the most common primary sites.",
body_style
))
story.append(Paragraph("Histology", h2_style))
story.append(Paragraph(
"SNUC is composed of <b>small round blue cells</b> arranged in nests, sheets, trabeculae, "
"or ribbons with prominent necrosis and a high mitotic index. There is no squamous pearl "
"formation, mucin production, or Homer Wright rosette formation. Pleomorphism is moderate "
"to marked.",
body_style
))
story.append(Paragraph("Immunohistochemistry (IHC)", h2_style))
story.append(Paragraph(
"The IHC profile is critical for distinguishing SNUC from related small round cell tumours:",
body_style
))
# IHC Table
ihc_data = [
["Marker", "SNUC", "ENB", "SNEC"],
["Cytokeratin (CK)", "Positive", "Negative", "Positive"],
["EMA", "Positive", "Focal", "Positive"],
["NSE", "Weak +", "Positive", "Positive (diffuse)"],
["Chromogranin", "Negative", "Strongly +", "Positive"],
["Synaptophysin", "Negative", "Strongly +", "Positive"],
["S100", "Negative", "Sustentacular +", "Variable"],
["p63/p40", "Negative", "Negative", "Negative"],
]
ihc_table = Table(ihc_data, colWidths=[4.5*cm, 3.5*cm, 3.5*cm, 4.5*cm])
ihc_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, -1), 9),
("ALIGN", (0, 0), (-1, -1), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#f0f4f8"), colors.white]),
("GRID", (0, 0), (-1, -1), 0.5, colors.HexColor("#aaaaaa")),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
]))
story.append(ihc_table)
story.append(Spacer(1, 4))
story.append(Paragraph(
"<i>ENB = esthesioneuroblastoma; SNEC = sinonasal neuroendocrine carcinoma. "
"Source: K.J. Lee's Essential Otolaryngology.</i>",
ref_style
))
story.append(Paragraph("Differential Diagnosis", h2_style))
diffs = [
"<b>Esthesioneuroblastoma (ENB)</b> — CK negative, S100-positive sustentacular cells, Homer Wright rosettes",
"<b>Sinonasal neuroendocrine carcinoma (SNEC)</b> — CK positive but diffusely expresses neuroendocrine markers",
"<b>NUT carcinoma</b> — requires FISH or IHC for NUT protein; extremely aggressive",
"<b>Lymphoma</b> — CD45+, CK negative",
"<b>Rhabdomyosarcoma</b> — desmin, myogenin positive",
"<b>Mucosal melanoma</b> — HMB-45, Melan-A, S100 positive",
"<b>Nasopharyngeal carcinoma (NPC)</b> — EBER in situ hybridisation positive",
]
for d in diffs:
story.append(Paragraph(f"• {d}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph(
"A 2024 review by Tandon & Kakkar emphasises that histologic features overlap considerably, "
"and that IHC, in situ hybridisation, and molecular testing are all necessary for a definitive "
"diagnosis (Surg Pathol Clin, PMID 39489553).",
body_style
))
# ─── CLINICAL FEATURES ───────────────────────────────────────────────────────
story.append(Paragraph("Clinical Features", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"SNUC typically presents at an advanced stage — approximately 80% of patients have T4 disease "
"at initial presentation. Presenting symptoms are non-specific and include:",
body_style
))
clinical = [
"<b>Unilateral nasal obstruction</b> and epistaxis (most common)",
"<b>Facial pain</b> and swelling",
"<b>Proptosis, diplopia, epiphora</b> — orbital involvement",
"<b>Trismus</b> — pterygoid/infratemporal fossa involvement",
"<b>Cranial nerve palsies</b> — skull base involvement (CN II, V, VI most common)",
"<b>Headache</b> — intracranial extension",
]
for c in clinical:
story.append(Paragraph(f"• {c}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Symptom overlap with chronic rhinosinusitis frequently leads to diagnostic delay.",
body_style
))
# ─── STAGING ─────────────────────────────────────────────────────────────────
story.append(Paragraph("Staging", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"SNUC is staged using the AJCC/UICC TNM system for nasal cavity and paranasal sinus primaries:",
body_style
))
staging = [
["T Stage", "Description"],
["T1", "Confined to one subsite, without bony erosion"],
["T2", "Extension to adjacent subsite or adjacent region"],
["T3", "Extension to medial orbital floor/wall, maxillary sinus, palate, or cribriform plate"],
["T4a", "Anterior skull base, orbital contents, pterygoid plates, frontal/sphenoid sinuses"],
["T4b", "Orbital apex, dura, brain, CN involvement (very advanced, unresectable)"],
]
staging_table = Table(staging, colWidths=[2.5*cm, 13.5*cm])
staging_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#2c5f8a")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, -1), 9),
("ALIGN", (0, 0), (0, -1), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#f0f4f8"), colors.white]),
("GRID", (0, 0), (-1, -1), 0.5, colors.HexColor("#aaaaaa")),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
]))
story.append(staging_table)
story.append(Spacer(1, 6))
story.append(Paragraph(
"Regional (cervical) nodal involvement is present in 10–30% at diagnosis. Distant metastases "
"(lungs, bone, liver) are common even after local control.",
body_style
))
# ─── IMAGING ─────────────────────────────────────────────────────────────────
story.append(Paragraph("Imaging", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph("CT", h2_style))
story.append(Paragraph(
"CT is essential for delineating bony destruction. Findings typically show an aggressive "
"soft-tissue mass with extensive bone erosion across multiple sinuses and the skull base.",
body_style
))
story.append(Paragraph("MRI", h2_style))
story.append(Paragraph(
"MRI is superior for assessing soft-tissue extent — orbital, dural, and brain invasion. "
"SNUC typically demonstrates intermediate T1 signal, intermediate-to-low T2 signal "
"(reflecting high cellularity), avid heterogeneous contrast enhancement, and "
"<b>restricted diffusion on DWI</b> (low apparent diffusion coefficient/ADC) owing to "
"its hypercellular architecture.",
body_style
))
story.append(Paragraph("PET-CT", h2_style))
story.append(Paragraph(
"PET-CT is valuable for detecting occult nodal metastases (including retropharyngeal nodes), "
"distant metastatic disease, and for assessing treatment response.",
body_style
))
# ─── MANAGEMENT ──────────────────────────────────────────────────────────────
story.append(Paragraph("Management", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"Given the rarity of SNUC, there are no prospective randomised trials. Management is based "
"on retrospective series, institutional protocols, and meta-analyses, and must be conducted "
"in a multidisciplinary setting.",
body_style
))
story.append(Paragraph("Surgery", h2_style))
story.append(Paragraph(
"Complete gross surgical resection confers the best local control. In a UCSF series, "
"5-year local control was <b>74% for gross total resection vs. 24% for subtotal resection</b>, "
"underscoring the critical importance of achieving negative margins "
"(Cummings Otolaryngology Head and Neck Surgery).",
body_style
))
story.append(Paragraph("Surgical approaches include:", body_style))
for item in [
"<b>Craniofacial resection (CFR)</b> — historical gold standard; combined transfacial and frontal craniotomy for en-bloc resection with pericranial flap reconstruction. Mortality ~4.7%, morbidity 33–36%",
"<b>Endoscopic endonasal approach (EEA)</b> — increasingly favoured; avoids facial incisions and craniotomy, provides excellent magnification. Suitable for select cases without significant lateral or orbital extension",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Paragraph("Radiation Therapy", h2_style))
story.append(Paragraph(
"Radiation is an essential component of treatment. <b>IMRT</b> is the standard technique, "
"enabling high-dose conformal delivery while sparing adjacent critical structures (optic "
"apparatus, brainstem, temporal lobes). <b>Proton beam therapy</b> offers a dosimetric "
"advantage in skull base lesions through the Bragg peak effect, reducing integral dose to "
"surrounding tissues.",
body_style
))
story.append(Paragraph("Chemotherapy", h2_style))
story.append(Paragraph(
"SNUC is chemosensitive. Platinum-based regimens (cisplatin ± 5-fluorouracil; or cisplatin "
"+ etoposide) are used in two settings:",
body_style
))
for item in [
"<b>Induction (neoadjuvant) chemotherapy</b> — followed by concurrent chemoradiation or surgery",
"<b>Concurrent chemoradiation</b> — for unresectable disease or organ preservation strategy",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph(
"A landmark 2024 meta-analysis by Burggraf et al. (Head Neck, PMID 39162231) — analysing "
"192 patients with individual patient data — demonstrated <b>5-year OS of 72.6% in patients "
"receiving induction chemotherapy vs. 44.5% without induction chemotherapy</b>, concluding "
"that induction chemotherapy should be considered in every patient diagnosed with SNUC.",
body_style
))
story.append(Paragraph("Trimodality Therapy", h2_style))
story.append(Paragraph(
"Multiple studies support trimodality therapy (induction chemotherapy + chemoradiation + "
"surgery) as the most effective approach:",
body_style
))
for item in [
"Rischin et al.: 2-year OS of 64% with induction platinum/5-FU → concurrent platinum-based chemoRT",
"Rosenthal et al. (MD Anderson, n=18): 5-year OS of 64.2% with combination therapy",
"Mourad et al.: improved local control and freedom from distant metastasis with trimodality vs. single/dual modality",
"Morand et al. meta-analysis (29 series, 390 patients): single-modality therapy associated with nearly 3-fold increased risk of death (HR 2.97 vs. dual; HR 2.80 vs. triple modality). Best outcomes with surgery + radiation",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Paragraph("Neck Management", h2_style))
story.append(Paragraph(
"Elective neck treatment is warranted even in clinically N0 patients. The Morand meta-analysis "
"found 27% of patients experienced regional failure at 2 years. Elective neck irradiation "
"(approximately 50 Gy equivalent) is incorporated into radiotherapy planning as standard practice.",
body_style
))
# ─── PROGNOSIS ───────────────────────────────────────────────────────────────
story.append(Paragraph("Prognosis", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"SNUC carries a poor prognosis, particularly with single-modality therapy:",
body_style
))
prog_data = [
["Series / Study", "5-year OS"],
["International collaborative study (n=14 undifferentiated)", "0%"],
["University of Michigan (single-institution)", "22%"],
["Modern multimodal treatment series", "44–65%"],
["Burggraf et al. 2024 meta-analysis (pooled, 13 studies)", "43.8%"],
["With induction chemotherapy (Burggraf 2024)", "72.6%"],
["Without induction chemotherapy (Burggraf 2024)", "44.5%"],
]
prog_table = Table(prog_data, colWidths=[11*cm, 5*cm])
prog_table.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, -1), 9),
("ALIGN", (1, 0), (1, -1), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#f0f4f8"), colors.white]),
("GRID", (0, 0), (-1, -1), 0.5, colors.HexColor("#aaaaaa")),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
]))
story.append(prog_table)
story.append(Spacer(1, 6))
story.append(Paragraph("Principal modes of treatment failure:", body_style))
for item in [
"<b>Locoregional recurrence</b> — especially in incompletely resected or unresected disease",
"<b>Distant metastases</b> — lungs, bone, liver; common even after local control",
]:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Adverse prognostic factors include advanced T stage, skull base/dural invasion, nodal "
"metastasis, incomplete resection, and absence of chemotherapy.",
body_style
))
# ─── MOLECULAR ───────────────────────────────────────────────────────────────
story.append(Paragraph("Molecular Subtypes and Targeted Therapy", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
story.append(Paragraph(
"The recognition of IDH2-mutant SNUC is clinically important: IDH2 mutations are potentially "
"targetable with inhibitors (e.g., enasidenib). These tumours may carry a more favourable "
"biology compared to IDH-wild-type SNUC. Molecular profiling of all newly diagnosed cases is "
"increasingly recommended to:",
body_style
))
for item in [
"Identify actionable mutations (IDH2, FGFR, etc.)",
"Correctly classify tumours within the spectrum of sinonasal undifferentiated/poorly differentiated carcinomas",
"Stratify patients for clinical trial enrolment",
"Guide targeted therapy, particularly for SMARCA4-deficient and NUT-rearranged tumours",
]:
story.append(Paragraph(f"• {item}", bullet_style))
# ─── SUMMARY ─────────────────────────────────────────────────────────────────
story.append(Paragraph("Summary", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
summary_points = [
"Rare, highly lethal sinonasal malignancy first described in 1987",
"Presents at advanced stage (T4 in ~80%); high rates of distant metastasis",
"Histology: small round blue cells, CK+, EMA+, neuroendocrine marker negative",
"Mandatory exclusion of ENB, SNEC, NUT carcinoma, and other small round cell tumours via IHC and molecular testing",
"Multimodal treatment is essential: induction chemotherapy improves 5-year OS to ~72.6% vs. 44.5% without (Burggraf 2024)",
"5-year OS near zero with single modality; ~44–73% with modern multimodal approaches",
"Elective neck treatment warranted due to 27% regional failure rate",
"Emerging molecular classification (IDH2, SMARCA4, NUT) reshaping nosology and opening targeted therapy avenues",
]
for point in summary_points:
story.append(Paragraph(f"• {point}", bullet_style))
# ─── REFERENCES ──────────────────────────────────────────────────────────────
story.append(Paragraph("Key References", h1_style))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6))
refs = [
"Cummings Otolaryngology Head and Neck Surgery, 7th edition — Skull Base chapter (pp. 2277–2278)",
"K.J. Lee's Essential Otolaryngology, 10th edition — Skull Base Malignancies (pp. 593, 599)",
"Burggraf M et al. Contemporary treatment and outcome of sinonasal undifferentiated carcinoma: A meta-analysis. Head Neck. 2024 Nov. [PMID: 39162231]",
"Tandon A, Kakkar A. Sinonasal Undifferentiated and Poorly Differentiated Carcinomas: An Update. Surg Pathol Clin. 2024 Dec. [PMID: 39489553]",
"Morand GB et al. Meta-analysis of 29 case series encompassing 390 SNUC patients.",
"Rischin D et al. Promising results with chemoradiation in SNUC. Head Neck. 2004;26:435–441.",
"Rosenthal DI et al. MD Anderson Cancer Center — trimodality SNUC series.",
]
for i, r in enumerate(refs, 1):
story.append(Paragraph(f"{i}. {r}", ref_style))
# Footer note
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor("#1a3a5c"), spaceAfter=6))
story.append(Paragraph(
"<i>Generated by Orris Medical Assistant · May 2026</i>",
ParagraphStyle("Footer", parent=styles["Normal"], fontSize=8,
textColor=colors.HexColor("#888888"), alignment=TA_CENTER)
))
doc.build(story)
print(f"PDF generated: {OUTPUT}")
python /home/daytona/workspace/snuc-essay/generate_pdf.py
SNUC Essay
PDF Document · PDF
Explain in detail surgical management of nose and pns tumors , surgical technique used for different tnm stages of maxilla , ethmoid and nasal cavity
| T Stage | Criteria |
|---|---|
| T1 | Tumour limited to maxillary sinus mucosa, no bony erosion or destruction |
| T2 | Tumour causing bone erosion/destruction including extension to hard palate and/or middle nasal meatus, except posterior wall of maxillary sinus and pterygoid plates |
| T3 | Tumour invades any of: posterior wall of maxillary sinus, subcutaneous tissues, floor or medial wall of orbit, pterygoid fossa, ethmoid sinuses |
| T4a | Moderately advanced: invades anterior orbital contents, skin of cheek, pterygoid plates, infratemporal fossa, cribriform plate, sphenoid or frontal sinuses |
| T4b | Very advanced: invades orbital apex, dura, brain, middle cranial fossa, cranial nerves other than V2, nasopharynx, or clivus |
| T Stage | Criteria |
|---|---|
| T1 | Tumour restricted to any one subsite, with or without bony invasion |
| T2 | Tumour invades two subsites in a single region or extends to an adjacent region within the nasoethmoid complex, with or without bony invasion |
| T3 | Tumour extends to medial orbital wall/floor, maxillary sinus, palate, or cribriform plate |
| T4a | Moderately advanced: invades anterior orbital contents, skin of nose or cheek, anterior cranial fossa (minimal extension), pterygoid plates, sphenoid or frontal sinuses |
| T4b | Very advanced: orbital apex, dura, brain, middle cranial fossa, cranial nerves other than V2, nasopharynx, or clivus |
| Feature | Open | Endoscopic |
|---|---|---|
| Exposure | Superior; en bloc resection | High-definition magnified view; no craniofacial dissection |
| Best for | Advanced disease, lateral/orbital/skull base extension | Medial, superior, endoluminal disease without soft tissue extension |
| Limitations | Cosmetic morbidity; facial incisions; retraction injury | Not suited for facial/orbital soft tissue extension, palatal involvement, dural involvement beyond mid-pupillary line |
| Principle | Strict oncologic margins | Strict oncologic margins |
| Stage | Surgical Procedure |
|---|---|
| T1 | Endoscopic medial maxillectomy (if medial wall); or Caldwell-Luc/sublabial for small anteroinferior lesions |
| T2 | Open medial maxillectomy via lateral rhinotomy; or infrastructural maxillectomy (alveolus/hard palate involvement) |
| T3 | Subtotal maxillectomy (Weber-Ferguson ± subciliary) preserving orbital floor if possible; or total maxillectomy if orbital floor is involved. Consider CFR if ethmoid/cribriform involved |
| T4a | Total maxillectomy + orbital exenteration for anterior orbital content invasion; ± craniofacial resection for skull base/anterior cranial fossa extension |
| T4b | Generally considered unresectable (orbital apex, dura with brain invasion, clivus, carotid involvement); primary chemoradiation or induction chemotherapy → reassess resectability |
| Stage | Surgical Procedure |
|---|---|
| T1 | Endoscopic resection (partial endoscopic ethmoidectomy or nasal resection); lateral rhinotomy for anterior lesions |
| T2 | Open medial maxillectomy or extended endoscopic resection depending on subsite involvement |
| T3 | Medial maxillectomy + orbital floor/medial wall resection; or combined endoscopic-open approach for cribriform involvement |
| T4a | Craniofacial resection ± orbital exenteration |
| T4b | Unresectable; chemoradiation ± palliative surgery |
| Stage | Surgical Procedure |
|---|---|
| T1 | Endoscopic total ethmoidectomy |
| T2 | Extended endoscopic ethmoidectomy ± medial maxillectomy |
| T3 | CFR (limited: ethmoid + cribriform plate) or endoscopic endonasal skull base resection at experienced centres; medial orbital wall resection if orbital invasion present |
| T4a | CFR with orbital exenteration for anterior orbital contents involvement; extended endoscopic approach at expert centres |
| T4b | Unresectable; chemoradiation primary |
| Defect Class | Reconstruction |
|---|---|
| I–IIb (≤half lateral alveolus and palate) | Obturator OR radial forearm fasciocutaneous free flap |
| III (orbital support needed) | Fibula free flap (bone + soft tissue) or scapular free flap |
| IV (with orbital exenteration) | Rectus abdominis or anterolateral thigh (ALT) free flap; prosthetic eye |
| Skull base | Pericranial flap (CFR) or nasoseptal (Hadad) flap (endoscopic) |
Create pdf
mkdir -p /home/daytona/workspace/sinonasal-surgery
~/sinonasal-surgery/generate_pdf.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, PageBreak
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/sinonasal-surgery/Sinonasal_Surgery_TNM.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2.2*cm,
rightMargin=2.2*cm,
topMargin=2.5*cm,
bottomMargin=2.5*cm,
title="Surgical Management of Nose and PNS Tumours",
author="Orris Medical",
)
styles = getSampleStyleSheet()
NAVY = colors.HexColor("#1a3a5c")
BLUE = colors.HexColor("#2c5f8a")
LTBLUE = colors.HexColor("#dce8f5")
GRAY = colors.HexColor("#f4f6f9")
DKGRAY = colors.HexColor("#333333")
MID = colors.HexColor("#555555")
RULE = colors.HexColor("#c0cfe0")
title_style = ParagraphStyle("T", parent=styles["Title"],
fontSize=19, leading=25, textColor=NAVY, alignment=TA_CENTER, spaceAfter=4)
subtitle_style = ParagraphStyle("Sub", parent=styles["Normal"],
fontSize=10, leading=14, textColor=MID, alignment=TA_CENTER, spaceAfter=14)
h1 = ParagraphStyle("H1", parent=styles["Heading1"],
fontSize=13, leading=17, textColor=NAVY,
spaceBefore=16, spaceAfter=4, fontName="Helvetica-Bold")
h2 = ParagraphStyle("H2", parent=styles["Heading2"],
fontSize=11, leading=15, textColor=BLUE,
spaceBefore=10, spaceAfter=3, fontName="Helvetica-Bold")
h3 = ParagraphStyle("H3", parent=styles["Heading3"],
fontSize=10, leading=14, textColor=BLUE,
spaceBefore=6, spaceAfter=2, fontName="Helvetica-Bold")
body = ParagraphStyle("Body", parent=styles["Normal"],
fontSize=9.5, leading=14.5, textColor=DKGRAY,
spaceAfter=5, alignment=TA_JUSTIFY)
bul = ParagraphStyle("Bul", parent=styles["Normal"],
fontSize=9.5, leading=14, textColor=DKGRAY,
leftIndent=14, spaceAfter=3, bulletIndent=4)
subbul = ParagraphStyle("SubBul", parent=styles["Normal"],
fontSize=9, leading=13, textColor=DKGRAY,
leftIndent=26, spaceAfter=2, bulletIndent=14)
note = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=8.5, leading=12, textColor=MID,
leftIndent=8, spaceAfter=3, fontName="Helvetica-Oblique")
ref_style = ParagraphStyle("Ref", parent=styles["Normal"],
fontSize=8.5, leading=12, textColor=MID, leftIndent=10, spaceAfter=3)
footer_style = ParagraphStyle("Footer", parent=styles["Normal"],
fontSize=8, textColor=colors.HexColor("#999999"), alignment=TA_CENTER)
def rule(sp_before=0, sp_after=6):
return HRFlowable(width="100%", thickness=0.5, color=RULE,
spaceBefore=sp_before, spaceAfter=sp_after)
def h1rule(sp_after=6):
return HRFlowable(width="100%", thickness=1.5, color=NAVY, spaceAfter=sp_after)
def bullets(items, style=bul, marker="•"):
els = []
for item in items:
els.append(Paragraph(f"{marker} {item}", style))
return els
def table(data, col_widths, header_color=NAVY, stripe=True):
t = Table(data, colWidths=col_widths)
style_cmds = [
("BACKGROUND", (0,0), (-1,0), header_color),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING",(0,0),(-1,-1),5),
]
if stripe:
for i in range(1, len(data)):
bg = GRAY if i % 2 == 1 else colors.white
style_cmds.append(("BACKGROUND", (0,i), (-1,i), bg))
t.setStyle(TableStyle(style_cmds))
return t
# ── Build story ──────────────────────────────────────────────────────────────
story = []
# Title block
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Surgical Management of Nose and Paranasal Sinus Tumours", title_style))
story.append(Paragraph("Surgical Techniques by TNM Stage — Maxilla, Ethmoid & Nasal Cavity", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2.5, color=NAVY, spaceAfter=14))
# ── I. OVERVIEW ──────────────────────────────────────────────────────────────
story.append(KeepTogether([
Paragraph("I. Overview and Principles", h1), h1rule(),
Paragraph(
"The primary treatment goal for sinonasal malignancies is <b>complete surgical "
"resection with negative margins</b>. Surgery is typically combined with postoperative "
"radiotherapy (and increasingly chemotherapy), forming the cornerstone of curative treatment. "
"The type of procedure is governed by tumour location, T-stage, histology, and surgeon experience.",
body),
Paragraph("Key determinants of surgical approach:", body),
]))
story += bullets([
"Tumour <b>location and subsite</b> (maxillary sinus, nasal cavity, ethmoid, frontal, sphenoid)",
"<b>T-stage</b> — specifically, invasion of adjacent subsites and vital structures",
"<b>Histology</b> (SCC, adenocarcinoma, SNUC, olfactory neuroblastoma, etc.)",
"<b>Surgeon experience</b> and institutional capacity",
])
story.append(Spacer(1,4))
story.append(KeepTogether([
Paragraph("Ohngren's Line", h3),
Paragraph(
"An imaginary plane from the <b>medial canthus to the angle of the jaw</b>. "
"<b>Infrastructural lesions</b> (anterior/inferior) present earlier and are more likely "
"to be completely resected. <b>Suprastructural lesions</b> (posterior/superior) more "
"frequently involve the orbit, skull base, and carotid artery, conferring a markedly "
"worse prognosis.", body),
]))
# ── II. TNM — MAXILLARY SINUS ────────────────────────────────────────────────
story.append(Paragraph("II. AJCC TNM Staging (8th Ed.) — Maxillary Sinus", h1))
story.append(h1rule())
mx_data = [
["T Stage", "Criteria"],
["T1", "Tumour limited to maxillary sinus mucosa; no bony erosion or destruction"],
["T2", "Bone erosion/destruction including hard palate and/or middle nasal meatus; excludes posterior wall and pterygoid plates"],
["T3", "Invades posterior wall of maxillary sinus, subcutaneous tissues, floor/medial wall of orbit, pterygoid fossa, ethmoid sinuses"],
["T4a", "Moderately advanced: anterior orbital contents, skin of cheek, pterygoid plates, infratemporal fossa, cribriform plate, sphenoid/frontal sinuses"],
["T4b", "Very advanced: orbital apex, dura, brain, middle cranial fossa, CN other than V2, nasopharynx, clivus"],
]
story.append(table(mx_data, [2*cm, 13.6*cm]))
# ── III. TNM — NASAL CAVITY & ETHMOID ────────────────────────────────────────
story.append(Paragraph("III. AJCC TNM Staging (8th Ed.) — Nasal Cavity & Ethmoid Sinus", h1))
story.append(h1rule())
nc_data = [
["T Stage", "Criteria"],
["T1", "Restricted to any one subsite, with or without bony invasion"],
["T2", "Invades two subsites in a single region or extends to adjacent region within nasoethmoid complex, ± bony invasion"],
["T3", "Extends to medial orbital wall/floor, maxillary sinus, palate, or cribriform plate"],
["T4a", "Moderately advanced: anterior orbital contents, skin of nose/cheek, anterior cranial fossa (minimal), pterygoid plates, sphenoid/frontal sinuses"],
["T4b", "Very advanced: orbital apex, dura, brain, middle cranial fossa, CN other than V2, nasopharynx, clivus"],
]
story.append(table(nc_data, [2*cm, 13.6*cm]))
# ── IV. PREOPERATIVE ─────────────────────────────────────────────────────────
story.append(Paragraph("IV. Preoperative Assessment", h1))
story.append(h1rule())
pre_items = [
"<b>Biopsy</b> — Transnasal biopsy is first-line. MRI must exclude encephalocele or vascular tumour beforehand. Avoid Caldwell-Luc biopsy — may contaminate cheek soft tissue planes",
"<b>CT scan</b> — Defines bony architecture, extent of erosion, lymph node metastases",
"<b>MRI</b> — Superior for soft tissue invasion, orbital/dural/brain involvement, perineural invasion along V2/V3, medullary bone",
"<b>PET-CT</b> — Detects distant metastases and occult nodal disease; sinonasal inflammation causes false-positive FDG uptake",
"<b>MDT tumour board</b> — Mandatory before treatment initiation",
"<b>Dental evaluation & prosthodontic planning</b> — Prefabricated obturators prepared pre-operatively",
"<b>Nutritional assessment</b> — Gastrostomy tube consultation for anticipated prolonged dysphagia",
]
story += bullets(pre_items)
# ── V. OPEN vs ENDOSCOPIC ────────────────────────────────────────────────────
story.append(Paragraph("V. Open vs. Endoscopic Approaches", h1))
story.append(h1rule())
cmp_data = [
["Feature", "Open", "Endoscopic"],
["Exposure", "Superior; en bloc resection", "High-definition magnified view"],
["Facial incisions", "Required", "None"],
["Brain retraction", "May be required (CFR)", "None"],
["Best for", "Advanced; lateral/orbital/skull base extension", "Medial, superior, endoluminal disease"],
["Limitations", "Cosmetic morbidity; potential retraction injury",
"Not for facial/orbital soft tissue, palatal involvement,\ndural extension beyond mid-pupillary line"],
["Oncologic principle", "Strict negative margins", "Strict negative margins"],
]
story.append(table(cmp_data, [3.5*cm, 6.5*cm, 5.6*cm], header_color=BLUE))
# ── VI. SURGICAL TECHNIQUES ──────────────────────────────────────────────────
story.append(Paragraph("VI. Surgical Techniques in Detail", h1))
story.append(h1rule())
# A. Caldwell-Luc
story.append(KeepTogether([
Paragraph("A. Caldwell-Luc (Sublabial) Approach", h2),
rule(),
Paragraph("<b>Indications:</b> Small, limited infrastructural malignancies — upper alveolar ridge, anterior nasal cavity, hard palate, anterolateral maxillary sinus.", body),
Paragraph("<b>Technique:</b>", body),
]))
story += bullets([
"Incision through ipsilateral gingivobuccal mucosa, leaving an inferior cuff for closure",
"Can be extended bilaterally for a degloving approach",
"Obturator prefabricated if maxillary sinus entry is anticipated",
"For limited alveolar ridge lesions: alveolectomy with prefabricated denture",
])
# B. Lateral Rhinotomy
story.append(KeepTogether([
Paragraph("B. Lateral Rhinotomy", h2),
rule(),
Paragraph("<b>Indications:</b> Lesions not involving the orbit or palate — nasal cavity, medial maxillary wall, ethmoid sinuses.", body),
Paragraph("<b>Technique:</b>", body),
]))
story += bullets([
"Incision from philtrum → nasal floor → lateral nasal ala → nasal sidewall junction → medial canthus",
"Modified variation hugs lateral alar groove to reduce ectropion and alar distortion",
])
story.append(Paragraph("<b>Extensions:</b>", body))
ext_data = [
["Extension", "Added Access"],
["Lynch (up to medial eyebrow)", "Medial orbital wall, lacrimal apparatus"],
["Subciliary (lower eyelid crease → zygoma)", "Orbital floor"],
["Weber-Ferguson (+ upper lip split)", "Hard palate, infraorbital access for total maxillectomy"],
]
story.append(table(ext_data, [7*cm, 8.6*cm], header_color=BLUE))
# C. Medial Maxillectomy
story.append(KeepTogether([
Paragraph("C. Medial Maxillectomy", h2),
rule(),
Paragraph(
"<b>Indications:</b> Lesions involving entire lateral nasal wall, NOT extending to orbit, "
"anterior cranial fossa, lateral maxilla, or alveolus. Typically T1–T2 nasal cavity/ethmoid.", body),
Paragraph("<b>Resection:</b> Middle and inferior turbinates + ethmoid contents + maxillary sinus contents + entire medial maxillary wall.", body),
Paragraph("<b>Technique (open):</b>", body),
]))
story += bullets([
"Extended lateral rhinotomy; upper cheek flap raised",
"Anterior maxillary sinus wall burred out for exposure",
"Medial wall periosteum incised; elevated off orbital rim and lamina papyracea",
"Medial canthal ligament transected and tagged for reattachment",
"Lacrimal sac and duct elevated; duct transected flush at orbital rim",
"Anterior and posterior ethmoid arteries ligated",
"Curved osteotome frees medial maxillary wall parallel to nasal floor",
"Posterior attachments divided near choanae with angled scissors",
"Closure: nasolacrimal duct stented; medial canthal ligament resutured to nasal bone; two-layer closure",
])
# D. Infrastructural Maxillectomy
story.append(KeepTogether([
Paragraph("D. Infrastructural Maxillectomy", h2),
rule(),
Paragraph(
"<b>Indications:</b> T2 maxillary tumours — hard palate, alveolar ridge, inferior "
"maxillary sinus without orbital floor involvement.", body),
Paragraph("<b>Resection:</b> Dentition + alveolar ridge + hard palate (builds on medial maxillectomy).", body),
Paragraph("<b>Approach:</b> Weber-Ferguson incision or sublabial.", body),
]))
# VII. SUBTOTAL AND TOTAL MAXILLECTOMY
story.append(PageBreak())
story.append(Paragraph("VII. Subtotal and Total Maxillectomy", h1))
story.append(h1rule())
story.append(Paragraph("A. Subtotal Maxillectomy", h2))
story.append(rule())
story.append(Paragraph(
"<b>Indications:</b> T2–T3 maxillary tumours — extensive antral disease, hard palate, "
"medial orbital floor/wall, pterygoid fossa; <b>orbital floor preserved</b> if possible.",
body))
story.append(Paragraph("<b>Approach:</b> Weber-Ferguson incision with subciliary extension.", body))
story.append(Paragraph("<b>Technique:</b>", body))
story += bullets([
"Upper cheek flap raised; lower eyelid delicately elevated off orbicularis oculi",
"Flap taken 1 cm beyond lateral canthus",
"Orbit dissected off inferior orbital rim in subperiosteal fashion; elevated to orbital apex",
"Masseter attachment to inferior zygoma divided",
"<b>Intraoral:</b> mucosal incision lateral incisor–canine → midline hard palate → soft palate junction → maxillary tubercle → gingivobuccal sulcus; medial pterygoid cut",
"Nasal cavity entered at piriform recess",
"<b>Osteotomies:</b> premaxilla into nasal cavity; nasal process + medial orbital rim; anterior maxilla preserving orbital floor; zygomatic arch; lateral maxillary wall; pterygoid plates via hamulus (large curved osteotome)",
"Specimen removed en bloc",
"<b>Reconstruction:</b> obturator (skin graft + Xeroform, prefabricated dental obturator) OR microvascular free flap",
])
story.append(Spacer(1,8))
story.append(Paragraph("B. Total Maxillectomy", h2))
story.append(rule())
story.append(Paragraph(
"<b>Indications:</b> T3 maxillary tumours with orbital floor invasion (infrastructure + suprastructure).",
body))
story += bullets([
"Same steps as subtotal maxillectomy with <b>additional resection of the orbital floor</b>",
"Orbital contents retracted superiorly; floor osteotomised and included with specimen",
"Periorbita (orbital periosteum) assessed — if intact and uninvaded, globe preserved",
"<b>Reconstruction:</b> titanium mesh, bone graft, or free flap to reconstruct orbital floor and prevent enophthalmos/diplopia",
])
story.append(Spacer(1,8))
# VIII. ORBITAL EXENTERATION
story.append(Paragraph("VIII. Total Maxillectomy with Orbital Exenteration", h1))
story.append(h1rule())
story.append(Paragraph(
"<b>Indications:</b> T4a disease — periorbita breached with tumour infiltration of orbital fat, "
"extraocular muscles, or optic nerve. Globe cannot be preserved once periorbita is infiltrated.",
body))
story.append(Paragraph("<b>Contraindications to globe preservation:</b>", body))
story += bullets([
"Periorbita invasion; adherence to extraocular muscles",
"Orbital fat infiltration",
"Decreased preoperative visual acuity due to tumour compression",
])
story.append(Paragraph("<b>Technique (after standard total maxillectomy steps):</b>", body))
story += bullets([
"Eyelids sewn together with running suture",
"Circumferential skin incision around orbital rim; periorbita incised at rim",
"Periorbita dissected free of all orbital walls",
"Optic nerve and ophthalmic vessels divided deep at orbital apex (heavy scissors or cutting stapler)",
"Entire orbital contents removed en bloc with maxillary specimen",
"Defect lined with split-thickness skin graft or filled with free flap (rectus abdominis or ALT)",
"Eyelid skin fashioned into socket lining; prosthetic eye fitted postoperatively",
])
# IX. CFR
story.append(Paragraph("IX. Craniofacial Resection (CFR)", h1))
story.append(h1rule())
story.append(Paragraph(
"<b>Indications:</b> T3–T4a ethmoid and nasal cavity disease with cribriform plate or anterior "
"skull base involvement; olfactory neuroblastoma; SNUC with intracranial extension. "
"CFR is the <b>historical gold standard</b> for skull base malignancies — overall 5-year survival ~50%.",
body))
cfr_stats = [
["Outcome", "Value"],
["Operative mortality", "~4.7%"],
["Overall morbidity", "33–36%"],
["Wound complications", "~20%"],
["Systemic complications", "~5%"],
["Orbital complications", "~1.5%"],
["Overall 5-year survival (all sinonasal CFR)", "~50%"],
]
story.append(table(cfr_stats, [7*cm, 8.6*cm], header_color=BLUE))
story.append(Spacer(1,6))
story.append(Paragraph("<b>Technique:</b>", body))
story += bullets([
"<b>Transcranial (neurosurgical):</b> Bicoronal scalp incision → frontal craniotomy → frontal lobe retraction → inspect dura (resect if involved) → cribriform plate and olfactory bulbs resected under direct intracranial vision → anterior skull base osteotomised",
"<b>Transfacial (rhinological):</b> Lateral rhinotomy / midfacial degloving / Weber-Ferguson depending on extent → sinonasal tumour mobilised from below",
"Specimen delivered <b>en bloc</b>: nasal cavity + ethmoid complex + cribriform plate ± adherent dura",
"<b>Reconstruction:</b> Pericranial flap turned down to reconstruct skull base and dural defect; supported from below with Xeroform packing; scalp closed primarily",
])
story.append(Paragraph("<b>Variants by extent:</b>", body))
story += bullets([
"Limited CFR: ethmoid complex + cribriform plate",
"Extended CFR: adds orbital exenteration and/or additional skull base",
"Combined CFR + maxillectomy for maxilloethmoid tumours",
])
# X. ENDOSCOPIC
story.append(PageBreak())
story.append(Paragraph("X. Endoscopic Approaches", h1))
story.append(h1rule())
story.append(Paragraph("A. Endoscopic Medial Maxillectomy / Partial Resection", h2))
story.append(rule())
story.append(Paragraph(
"<b>Indications:</b> T1–T2 nasal cavity and ethmoid tumours without orbital, palatal, "
"anterolateral frontal sinus, or facial soft tissue extension; inverted papilloma with "
"focal malignant transformation; select low-grade adenocarcinomas.",
body))
story.append(Paragraph("<b>Absolute contraindications:</b>", body))
story += bullets([
"Facial or orbital soft tissue extension",
"Significant palatal involvement",
"Anterolateral frontal sinus involvement",
"Dural extension beyond the mid-pupillary line",
"Tumours requiring strict en bloc margins",
], style=bul, marker="✕")
story.append(Paragraph("<b>Technique:</b>", body))
story += bullets([
"0° and 45° telescopes; posterior 2/3 of nasal septum removed for bilateral access",
"Wide sphenoidotomy with intersinus septectomy for posterior exposure",
"Sequential resection: tumour origin identified → gradual debulking → progressive margin exposure",
"Inferior turbinate removed; medial maxillary wall resected under direct vision via uncinectomy + wide antrostomy",
"Frozen section margin assessment intraoperatively",
])
story.append(Spacer(1,8))
story.append(Paragraph("B. Endoscopic Endonasal Approach (EEA) for Skull Base", h2))
story.append(rule())
story.append(Paragraph(
"<b>Indications:</b> Select T3–T4a ethmoid/nasal cavity lesions with cribriform plate "
"involvement but without significant frontal lobe involvement. Increasingly replacing CFR at "
"expert centres with equivalent oncological outcomes and reduced morbidity.",
body))
story += bullets([
"Bilateral wide sphenoidotomy; intersinus septectomy; posterior nasal septum resected",
"Complete ethmoidectomy; skull base exposed",
"Anterior and posterior ethmoid arteries ligated",
"Cribriform plate and olfactory bulbs resected under endoscopic vision",
"Dural entry if involved → reconstruction with <b>nasoseptal (Hadad-Bassagastellys) flap</b>",
])
# XI. STAGE-SPECIFIC TABLES
story.append(Paragraph("XI. Stage-Specific Surgical Decision Framework", h1))
story.append(h1rule())
story.append(Paragraph("A. Maxillary Sinus", h2))
story.append(rule())
max_surg = [
["Stage", "Surgical Procedure"],
["T1", "Endoscopic medial maxillectomy (medial wall lesions); Caldwell-Luc/sublabial for small anteroinferior lesions"],
["T2", "Open medial maxillectomy (lateral rhinotomy); or infrastructural maxillectomy if alveolus/hard palate involved"],
["T3", "Subtotal maxillectomy (Weber-Ferguson ± subciliary) preserving orbital floor if possible; Total maxillectomy if orbital floor invaded; ± CFR if cribriform involved"],
["T4a", "Total maxillectomy + orbital exenteration for anterior orbital invasion; ± CFR for skull base/anterior cranial fossa extension"],
["T4b", "Generally unresectable; primary chemoradiation or induction chemotherapy → reassess resectability"],
]
story.append(table(max_surg, [2*cm, 13.6*cm]))
story.append(Spacer(1,8))
story.append(Paragraph("B. Nasal Cavity", h2))
story.append(rule())
nc_surg = [
["Stage", "Surgical Procedure"],
["T1", "Endoscopic resection (partial ethmoidectomy or nasal resection); lateral rhinotomy for anterior lesions"],
["T2", "Open medial maxillectomy or extended endoscopic resection depending on subsite"],
["T3", "Medial maxillectomy + orbital floor/medial wall resection; combined endoscopic-open for cribriform involvement"],
["T4a", "Craniofacial resection ± orbital exenteration"],
["T4b", "Unresectable; primary chemoradiation ± palliative surgery"],
]
story.append(table(nc_surg, [2*cm, 13.6*cm]))
story.append(Spacer(1,8))
story.append(Paragraph("C. Ethmoid Sinus", h2))
story.append(rule())
eth_surg = [
["Stage", "Surgical Procedure"],
["T1", "Endoscopic total ethmoidectomy"],
["T2", "Extended endoscopic ethmoidectomy ± medial maxillectomy"],
["T3", "CFR (limited: ethmoid + cribriform) or endoscopic endonasal skull base resection at expert centres; medial orbital wall resection if indicated"],
["T4a", "CFR with orbital exenteration for anterior orbital contents; extended endoscopic at expert centres"],
["T4b", "Unresectable; primary chemoradiation"],
]
story.append(table(eth_surg, [2*cm, 13.6*cm]))
# XII. NECK MANAGEMENT
story.append(Paragraph("XII. Neck Management", h1))
story.append(h1rule())
story.append(Paragraph(
"Regional lymph node metastasis is uncommon at presentation (10–30%) but cervical failure "
"contributes significantly to poor outcomes. Elective neck treatment is recommended for:",
body))
story += bullets([
"High-risk histologies (SCC, undifferentiated carcinoma)",
"T3–T4 primary tumours",
"Ipsilateral levels I–III most commonly at risk",
"Therapeutic neck dissection (selective or comprehensive) for clinically positive nodes",
])
# XIII. RECONSTRUCTION
story.append(PageBreak())
story.append(Paragraph("XIII. Reconstruction", h1))
story.append(h1rule())
story.append(Paragraph("Brown-Shaw Classification of Maxillectomy Defects", h2))
story.append(rule())
story.append(Paragraph(
"<b>Vertical (numbered I–VI):</b> I = no oronasal fistula → IV = orbital exenteration → "
"V = orbitomaxillary → VI = nasomaxillary. "
"<b>Horizontal (lettered A–D):</b> A = palate only → D = >half maxillectomy.",
body))
story.append(Spacer(1,4))
recon_data = [
["Defect Class", "Reconstruction Options"],
["I–IIb (≤ half lateral alveolus/palate)", "Obturator OR radial forearm fasciocutaneous free flap"],
["III (orbital support needed)", "Fibula free flap (bone + soft tissue) or scapular free flap"],
["IV (with orbital exenteration)", "Rectus abdominis or anterolateral thigh (ALT) free flap; prosthetic eye"],
["Skull base (after CFR)", "Pericranial flap (turned-down vascularised flap)"],
["Skull base (after EEA)", "Nasoseptal (Hadad-Bassagastellys) flap"],
]
story.append(table(recon_data, [5.8*cm, 9.8*cm]))
story.append(Spacer(1,6))
story.append(Paragraph(
"Microvascular free flap reconstruction is the standard of care for complex defects: "
"it restores facial contour, supports the orbital floor, accepts dental implants, and "
"withstands postoperative radiation. Speech intelligibility and swallowing outcomes are "
"superior to obturation for palatal defects involving >50% of the palate.",
body))
# XIV. SPECIAL CONSIDERATIONS
story.append(Paragraph("XIV. Special Considerations", h1))
story.append(h1rule())
story.append(Paragraph("Orbital Preservation Decision", h2))
story.append(rule())
story += bullets([
"<b>Preserve globe if:</b> periorbita (orbital periosteum) is intact despite bony wall destruction — postoperative radiation covers residual microscopic disease",
"<b>Exenterate if:</b> periorbita breached with infiltration of orbital fat or extraocular muscles; optic nerve involvement; decreased preoperative visual acuity",
])
story.append(Spacer(1,4))
story.append(Paragraph("Perineural Invasion (PNI)", h2))
story.append(rule())
story += bullets([
"Most commonly affected nerves (in order): V2 (maxillary), hypoglossal, V3, facial nerve",
"Mandates wider resection along the nerve back to the Gasserian ganglion for V2/V3",
"MRI findings: widened neural foramina, enhancement, loss of fat planes around named nerves",
"Associated with 3-fold increase in locoregional recurrence",
])
story.append(Spacer(1,4))
story.append(Paragraph("Unresectability Criteria", h2))
story.append(rule())
story += bullets([
"Bilateral orbital apex involvement (bilateral blindness)",
"Brain parenchyma invasion beyond the dura",
"Carotid artery encasement",
"Clivus or nasopharyngeal prevertebral muscle involvement (prevertebral fascia fixation)",
"Bilateral cavernous sinus involvement",
], style=bul, marker="✕")
# XV. SUMMARY TABLE
story.append(Paragraph("XV. Summary: Approach Selection at a Glance", h1))
story.append(h1rule())
summary_data = [
["Approach", "Indication", "T-Stage Range"],
["Caldwell-Luc (sublabial)", "Small anteroinferior maxillary/alveolar lesions", "T1–T2 (limited)"],
["Lateral rhinotomy", "Nasal cavity, medial maxilla without orbit/palate involvement", "T1–T2"],
["Medial maxillectomy (open)", "Lateral nasal wall, ethmoid, medial maxilla", "T1–T2"],
["Infrastructural maxillectomy", "Alveolus, hard palate, inferior antrum", "T2"],
["Subtotal maxillectomy", "Extensive antrum, sparing orbital floor", "T2–T3"],
["Total maxillectomy", "Antrum + orbital floor invasion", "T3"],
["Total maxillectomy + exenteration", "Anterior orbital contents invaded", "T4a"],
["Craniofacial resection (CFR)", "Cribriform/anterior skull base, ethmoid", "T3–T4a"],
["Endoscopic (EEA)", "Medial/superior disease, no soft tissue extension", "T1–T3 (select)"],
["Chemoradiation (primary)", "Unresectable disease", "T4b"],
]
story.append(table(summary_data, [4.2*cm, 7*cm, 4.4*cm]))
# References
story.append(Paragraph("References", h1))
story.append(h1rule())
refs = [
"Cummings Otolaryngology Head and Neck Surgery, 7th ed., Chapter 94 — Paranasal Sinus Cancer and Skull Base Surgery (pp. 1735–1760)",
"K.J. Lee's Essential Otolaryngology, 10th ed. — Skull Base Malignancies (pp. 593–600)",
"AJCC Cancer Staging Manual, 8th Edition — Nasal Cavity, Maxillary Sinus, and Ethmoid Sinus",
"Brown JS, Shaw RJ. Reconstruction of the maxilla and midface: introducing a new classification. Lancet Oncol. 2010;11:1001–1008",
"Ohngren LG. Malignant tumours of the maxillo-ethmoidal region. Acta Otolaryngol Suppl. 1933;19:1–476",
]
for i, r in enumerate(refs, 1):
story.append(Paragraph(f"{i}. {r}", ref_style))
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=1, color=NAVY, spaceAfter=6))
story.append(Paragraph("<i>Generated by Orris Medical Assistant · May 2026</i>", footer_style))
doc.build(story)
print(f"PDF saved: {OUTPUT}")
python /home/daytona/workspace/sinonasal-surgery/generate_pdf.py
Sinonasal Surgery TNM
PDF Document · PDF