Odontogenic tumor viva questions
| Category | Examples |
|---|---|
| Epithelial only | Ameloblastoma, Squamous odontogenic tumor, Calcifying epithelial odontogenic tumor (CEOT/Pindborg), AOT, KCOT, Calcifying cystic odontogenic tumor |
| Mixed epithelial + mesenchymal | Ameloblastic fibroma, Ameloblastic fibro-odontoma, Odontoma, Odontoameloblastoma |
| Mesenchymal only | Odontogenic myxoma, Cementoblastoma, Ossifying fibroma |
| Malignant | Malignant ameloblastoma, Ameloblastic carcinoma, Clear cell odontogenic carcinoma, Malignant CEOT |
| Tumor | Age | Site | Radiograph | Histology hallmark | Treatment |
|---|---|---|---|---|---|
| Ameloblastoma | 37 mean | Mandible (molar-ramus) 80% | Soap bubble/honeycomb | Reverse polarity, stellate reticulum | Resection 1 cm margin |
| AOT | <20, female | Anterior maxilla (2/3s) | Unilocular + calcifications | Duct-like structures, rosettes | Enucleation |
| CEOT (Pindborg) | 30-50 | Mandible | Driven snow calcifications | Liesegang rings, amyloid, Congo red+ | Resection with margin |
| KCOT/OKC | 2nd-3rd decade | Mandible 3rd molar | Scalloping, bowing | Parakeratotic, 6-8 layers, no rete ridges | Enucleation + curettage; Carnoy's |
| CCOT (Gorlin cyst) | 4th decade | Anterior jaws | Mixed / snowdrift | Ghost cells | Enucleation |
| Odontoma | Young | Anterior (compound), posterior (complex) | Radiopaque + lucent halo | Hamartoma - all tooth tissues | Enucleation |
| Ameloblastic fibroma | <30 male | Posterior mandible | Radiolucent | Epi + primitive mesenchyme | Conservative excision |
| Odontogenic myxoma | Any | Mandible posterior | Tennis racket septa | Myxoid stroma, no capsule | Resection |
| Cementoblastoma | <25 | Mandible 1st molar | Radiopaque mass fused to root | True cementum, root resorption | Tooth + tumor extraction |
Convert to pdf
ls /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
~/odontogenic_tumor_viva.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm
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/Odontogenic_Tumor_Viva.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=18*mm, leftMargin=18*mm,
topMargin=18*mm, bottomMargin=18*mm,
title="Odontogenic Tumor - Viva Questions & Answers",
author="Orris Medical"
)
styles = getSampleStyleSheet()
# Custom styles
TEAL = colors.HexColor("#006B6B")
LIGHT_TEAL = colors.HexColor("#E0F4F4")
DARK = colors.HexColor("#1A1A2E")
ACCENT = colors.HexColor("#FF6B35")
BG_LIGHT = colors.HexColor("#F7FAFA")
title_style = ParagraphStyle(
"Title", parent=styles["Title"],
fontSize=20, textColor=TEAL,
spaceAfter=4, spaceBefore=0,
alignment=TA_CENTER, fontName="Helvetica-Bold"
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=10, textColor=colors.grey,
spaceAfter=8, alignment=TA_CENTER
)
h1_style = ParagraphStyle(
"H1", parent=styles["Heading1"],
fontSize=13, textColor=colors.white,
spaceBefore=10, spaceAfter=4,
fontName="Helvetica-Bold", backColor=TEAL,
leftIndent=-4, rightIndent=-4,
borderPadding=(4, 8, 4, 8),
)
h2_style = ParagraphStyle(
"H2", parent=styles["Heading2"],
fontSize=11, textColor=TEAL,
spaceBefore=7, spaceAfter=3,
fontName="Helvetica-Bold",
borderPadding=(2, 0, 2, 0),
)
h3_style = ParagraphStyle(
"H3", parent=styles["Heading3"],
fontSize=10, textColor=DARK,
spaceBefore=5, spaceAfter=2,
fontName="Helvetica-BoldOblique",
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=9.5, textColor=DARK,
spaceAfter=3, spaceBefore=1,
leading=13, alignment=TA_JUSTIFY,
fontName="Helvetica"
)
bullet_style = ParagraphStyle(
"Bullet", parent=styles["Normal"],
fontSize=9.5, textColor=DARK,
spaceAfter=2, spaceBefore=1,
leading=13, leftIndent=12,
bulletIndent=2, fontName="Helvetica",
bulletText="\u2022"
)
sub_bullet_style = ParagraphStyle(
"SubBullet", parent=styles["Normal"],
fontSize=9, textColor=DARK,
spaceAfter=1, spaceBefore=0,
leading=12, leftIndent=24,
bulletIndent=14, fontName="Helvetica",
bulletText="\u25e6"
)
highlight_style = ParagraphStyle(
"Highlight", parent=styles["Normal"],
fontSize=9.5, textColor=DARK,
spaceAfter=3, spaceBefore=2,
leading=13, leftIndent=8, rightIndent=8,
backColor=LIGHT_TEAL, borderPadding=(4, 6, 4, 6),
fontName="Helvetica"
)
mnemonic_style = ParagraphStyle(
"Mnemonic", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#7B0000"),
spaceAfter=3, spaceBefore=2,
leading=13, leftIndent=8, rightIndent=8,
backColor=colors.HexColor("#FFF3E0"),
borderPadding=(4, 6, 4, 6),
fontName="Helvetica-BoldOblique"
)
def H1(text): return Paragraph(text, h1_style)
def H2(text): return Paragraph(text, h2_style)
def H3(text): return Paragraph(text, h3_style)
def P(text): return Paragraph(text, body_style)
def B(text): return Paragraph(text, bullet_style)
def SB(text): return Paragraph(text, sub_bullet_style)
def HL(text): return Paragraph(text, highlight_style)
def MN(text): return Paragraph(text, mnemonic_style)
def SP(h=4): return Spacer(1, h*mm)
def HR(): return HRFlowable(width="100%", thickness=0.5, color=TEAL, spaceAfter=3*mm, spaceBefore=1*mm)
story = []
# Title
story += [
SP(2),
Paragraph("Odontogenic Tumors", title_style),
Paragraph("Viva Questions & Answers | ENT / Oral & Maxillofacial Surgery", subtitle_style),
Paragraph("Sources: Cummings Otolaryngology | Scott-Brown's ORL | KJ Lee's Essential Otolaryngology | Robbins Pathology", subtitle_style),
HR(),
SP(2),
]
# Q1 - Classification
story += [
H1("Q1. What are Odontogenic Tumors? How are they classified?"),
SP(2),
P("Odontogenic tumors are neoplasms derived from the epithelial and mesenchymal components of the tooth-forming apparatus — dental lamina, enamel organ, dental papilla, and dental follicle. They range from hamartomas (odontoma) to benign neoplasms to malignant carcinomas."),
SP(2),
H2("WHO Classification (Modified)"),
]
cls_data = [
["Category", "Examples"],
["Epithelial only", "Ameloblastoma, Squamous odontogenic tumor (SOT),\nCalcifying epithelial odontogenic tumor (CEOT/Pindborg),\nAOT, KCOT, Calcifying cystic odontogenic tumor (CCOT)"],
["Mixed Epithelial + Mesenchymal", "Ameloblastic fibroma, Ameloblastic fibro-odontoma,\nOdontoma, Odontoameloblastoma"],
["Mesenchymal only", "Odontogenic myxoma, Cementoblastoma, Ossifying fibroma"],
["Malignant", "Malignant ameloblastoma, Ameloblastic carcinoma,\nClear cell odontogenic carcinoma, Malignant CEOT"],
]
cls_table = Table(cls_data, colWidths=[55*mm, 115*mm])
cls_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("BACKGROUND", (0,1), (-1,1), LIGHT_TEAL),
("BACKGROUND", (0,3), (-1,3), LIGHT_TEAL),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story += [cls_table, SP(3)]
story += [
H2("Most Common Odontogenic Tumors"),
HL("<b>Odontoma</b> = most common overall (~1/3 of all OTs; considered a hamartoma).<br/><b>Ameloblastoma</b> = most common true neoplasm (as common as all other neoplasms combined)."),
SP(3),
]
# Q2 - Ameloblastoma
story += [
H1("Q2. Ameloblastoma — Complete Viva Answer"),
SP(2),
H2("Origin"),
P("Neoplasm of the <b>enamel organ</b>, recapitulating cells for tooth crown development. Arises from lining of odontogenic cysts, reduced enamel epithelium, dental lamina rests, or epithelial rests of Malassez."),
SP(2),
H2("Subtypes (Clinical/Prognostic Classification)"),
B("<b>Solid/Multicystic (Conventional)</b> — most common; most aggressive; M:F = 1.2:1; mean age 37 years"),
B("<b>Unicystic</b> — 5–15% of all ameloblastomas; subtypes: luminal, intraluminal, intramural"),
B("<b>Peripheral (extra-osseous)</b> — arises in gingival soft tissue; least aggressive"),
B("<b>Desmoplastic</b> — more common in maxilla and anterior jaws; mixed radiolucent/radiopaque XR"),
SP(2),
H2("Site"),
HL("<b>80% in mandible</b> (molar-ramus region most common). Mandible:Maxilla ratio ~5:1.<br/>Maxillary lesions are more dangerous — thin cortical barrier, proximity to skull base and orbit."),
SP(2),
H2("Radiographic Features"),
B("<b>Small lesion:</b> Unilocular radiolucency with well-demarcated corticated borders"),
B("<b>Large lesion:</b> \"Soap bubble\" or \"Honeycomb\" — multilocular radiolucency"),
B("Root resorption of adjacent teeth in long-standing lesions"),
B("Desmoplastic type: mixed radiolucent/radiopaque"),
SP(2),
H2("Histology — Vickers and Gorlin Features (KEY VIVA)"),
MN("Mnemonic: Reverse Polarity Helps Surgical Visualisation (RP-HSV)\n— Reversed polarity | Palisading | Hyperchromatism | Stellate reticulum | Vacuolization (subnuclear)"),
SP(2),
B("<b>Reverse polarity</b> — nuclei of basal cells polarized AWAY from basement membrane (reversed from normal)"),
B("<b>Palisading</b> of columnar basal cells"),
B("<b>Hyperchromatism</b> of basal cell nuclei"),
B("<b>Subnuclear vacuolization</b> of cytoplasm of basal cells"),
B("<b>Stellate reticulum-like cells</b> above the basal layer — loosely aggregated, resembling developing tooth stellate reticulum"),
SP(2),
H3("Histologic Variants (pathologist interest; NO therapeutic significance):"),
P("Follicular, Plexiform, Granular cell, Acanthomatous, Desmoplastic, Basal cell, Keratinizing"),
SP(2),
H2("Behavior (Gardner's Two Factors)"),
B("(1) Ability to <b>infiltrate medullary (cancellous) bone</b> but relative inability to infiltrate compact bone"),
B("(2) <b>Location</b> — near vital structures (orbit, skull base) = worst prognosis"),
P("Dense cortical bone (inferior border mandible/ramus) = first-line barrier. Periosteum = backup barrier. Posterior maxilla is most dangerous — thin cortical plate, proximity to skull base; mortality up to 60% if recurs."),
SP(2),
H2("Treatment"),
B("<b>Gold standard: En bloc resection with 1 cm margin</b> past radiographic limits of tumor"),
B("Recurrence after adequate resection: 10–15%"),
B("Simple enucleation alone: NOT standard of care (high recurrence — tumor infiltrates trabeculae)"),
B("Unicystic <i>luminal/intraluminal</i>: conservative approach acceptable (enucleation + curettage)"),
B("<b>Unicystic intramural type:</b> behaves like solid ameloblastoma — requires resection"),
B("All maxillary lesions: aggressive radical treatment"),
SP(3),
]
# Q3 - AOT
story += [
H1("Q3. Adenomatoid Odontogenic Tumor (AOT) — \"The 2/3 Tumor\""),
SP(2),
MN("Rule of 2/3: 2/3 Female | 2/3 Maxilla (anterior) | 2/3 Associated with impacted CANINE | 2/3 in Teenagers (<20 yrs)"),
SP(2),
H2("Clinical Features"),
B("Most common age: <b><20 years</b>; rare after 30"),
B("<b>Female predominance</b>"),
B("Site: <b>Anterior maxilla</b> — classically associated with unerupted/impacted canine"),
B("Slow-growing, relatively asymptomatic"),
SP(2),
H2("Radiographic Features"),
B("Unilocular radiolucency, well-demarcated, corticated border"),
B("May contain <b>small calcifications</b> — key differentiator from dentigerous cyst"),
B("Often in dentigerous relationship with impacted tooth"),
SP(2),
H2("Histology"),
B("Spindle-shaped epithelial cells in <b>whorled masses or rosettes</b>"),
B("Classic: <b>duct-like structures</b> lined by cuboidal or columnar cells"),
B("Foci of amyloid in rosette areas; variable mineralized material"),
SP(2),
H2("Treatment"),
HL("<b>Enucleation only</b> — very well encapsulated; no recurrence. Tooth can be retained for eventual eruption."),
SP(3),
]
# Q4 - CEOT
story += [
H1("Q4. Calcifying Epithelial Odontogenic Tumor (CEOT) — Pindborg Tumor"),
SP(2),
H2("Clinical Features"),
B("Age: <b>30–50 years</b>"),
B("<b>Mandible > Maxilla</b> (opposite of AOT)"),
B("Painless, slowly progressive swelling; associated with impacted teeth (~50%)"),
SP(2),
H2("Radiographic Features"),
B("Radiolucent, well-demarcated; may be multilocular"),
B("Classic: <b>\"Driven snow\" appearance</b> — scattered calcifications within radiolucency"),
SP(2),
H2("Histology — KEY VIVA"),
B("Sheets of polyhedral epithelial cells with <b>nuclear pleomorphism</b> (benign!)"),
B("Large areas of <b>amyloid-like extracellular material</b>"),
B("<b>Liesegang ring calcifications</b> — concentric calcified rings"),
HL("<b>Congo red staining positive</b> for amyloid material — pathognomonic finding"),
SP(2),
H2("Treatment"),
B("Resection with small margin of normal bone"),
B("Good prognosis; locally aggressive"),
SP(3),
]
# Q5 - KCOT
story += [
H1("Q5. Keratocystic Odontogenic Tumor (KCOT) / Odontogenic Keratocyst (OKC)"),
SP(2),
H2("Classification Controversy"),
B("First described by <b>Philipsen in 1956</b>"),
B("2005 WHO: reclassified as <b>tumor</b> (KCOT) due to neoplastic behavior"),
B("2017 WHO: reverted to \"odontogenic keratocyst\"; but ICD-11 retains tumor classification"),
SP(2),
H2("Clinical Features"),
B("Peak: <b>2nd and 3rd decades</b>"),
B("<b>Mandible > Maxilla</b>; mandibular 3rd molar area most common"),
B("Swelling, pain, trismus, sensory deficits, infection; may be incidental finding"),
SP(2),
H2("Radiographic Features"),
B("Unilocular or multilocular radiolucency"),
B("Classic: <b>Scalloping</b> of borders; bowing of inferior border of mandible"),
B("Well-defined, corticated borders"),
SP(2),
H2("Histology"),
B("<b>Parakeratinized stratified squamous epithelium</b> — thin, uniform, 6–8 cell layers"),
B("<b>Palisaded, hyperchromatic, columnar basal cells</b> with reversed polarity"),
B("Flat epithelial-connective tissue interface — <b>no rete ridges</b>"),
B("Daughter/satellite cysts in fibrous wall"),
SP(2),
H2("Recurrence (HIGH — key viva point)"),
HL("Recurrence up to <b>62.5% with enucleation alone</b> (older reports). Modern rate with enucleation + curettage: <10%."),
SP(2),
H3("Reasons for High Recurrence:"),
B("Thin, fragile lining — tears during surgery leaving remnants"),
B("Daughter/satellite cysts left behind"),
B("Dental lamina rests in overlying mucosa"),
B("Collagenase activity of cyst wall promoting bone resorption"),
B("Prostaglandin-induced bone resorption"),
B("Increased mitotic activity (supports neoplastic nature)"),
SP(2),
H2("Gorlin-Goltz Syndrome"),
HL("<b>Multiple OKCTs</b> + Bifid rib + Calcified falx cerebri + Basal cell nevi (Nevoid Basal Cell Carcinoma Syndrome)<br/><b>Gene: PTCH1</b> mutation (tumor suppressor gene)"),
SP(2),
H2("Treatment"),
B("Enucleation + aggressive curettage (peripheral ostectomy with rotary bur)"),
B("<b>Carnoy's solution</b> applied to bony walls — destroys satellite cysts/lamina rests"),
B("Marsupialization as adjunct for very large cysts prior to enucleation"),
B("Resection for large/recurrent lesions"),
SP(3),
]
# Q6 - CCOT
story += [
H1("Q6. Calcifying Cystic Odontogenic Tumor (CCOT) — Gorlin Cyst"),
SP(2),
P("First described by <b>Gorlin et al. in 1962</b>. Also called the Gorlin cyst. Shares the cyst-vs-tumor nomenclature debate with KCOT."),
SP(2),
H2("Clinical Features"),
B("Mean age: 4th decade; peak: 2nd–3rd decades"),
B("Slight maxillary predominance; anterior jaws more common"),
B("Commonly associated with <b>odontomas</b> (especially in young adults)"),
SP(2),
H2("Radiographic Features"),
B("Usually unilocular radiolucency"),
B("Mixed radiolucent/radiopaque when calcifications present — <b>\"snowdrifting\"</b> (peripherally located calcifications)"),
SP(2),
H2("Histology — KEY VIVA"),
HL("<b>Ghost cells</b> = classic hallmark. Anucleate, eosinophilic shadow cells derived from odontogenic epithelium that may undergo dystrophic calcification.<br/>Note: Ghost cells are NOT pathognomonic — can occur in odontomas, ameloblastic fibro-odontomas, and ameloblastomas."),
B("Ameloblastoma-like basal cell layer"),
SP(2),
H2("Treatment"),
B("Purely cystic form: Enucleation"),
B("Solid form (dentinogenic ghost cell tumor): Resection"),
SP(3),
]
# Q7 - Odontoma
story += [
H1("Q7. Odontoma"),
SP(2),
HL("<b>Most common odontogenic tumor overall.</b> Considered a hamartoma (not a true neoplasm)."),
SP(2),
H2("Two Types"),
B("<b>Compound odontoma:</b> Multiple small, recognizable tooth-like structures (denticles) — organized pattern. Site: <b>Anterior jaws</b>. More common type."),
B("<b>Complex odontoma:</b> Haphazard mass of enamel, dentin, cementum, pulp — no recognizable tooth structure. Site: <b>Posterior jaws</b>."),
SP(2),
H2("Radiograph"),
B("Radiopaque mass with a thin surrounding <b>radiolucent halo</b>"),
B("Compound: multiple small tooth-like radiopacities | Complex: amorphous radiopaque mass"),
SP(2),
H2("Treatment"),
B("Enucleation — excellent prognosis; no recurrence"),
SP(3),
]
# Q8 - Ameloblastic Fibroma
story += [
H1("Q8. Ameloblastic Fibroma"),
SP(2),
B("Age: <b><30 years</b> (mean ~14 years); <b>male predominance</b>"),
B("Site: <b>Posterior mandible</b> most common"),
B("Radiolucent, unilocular or multilocular, well-demarcated"),
H2("Histology"),
B("Odontogenic epithelium within <b>primitive-appearing (cell-rich) ectomesenchyme</b> resembling dental papilla"),
B("No dental hard tissue formation — unlike ameloblastic fibro-odontoma"),
H2("Behavior"),
HL("Can recur after conservative excision. May undergo <b>malignant transformation to ameloblastic fibrosarcoma</b>."),
B("Treatment: Conservative excision with follow-up"),
SP(3),
]
# Q9 - Odontogenic Myxoma
story += [
H1("Q9. Odontogenic Myxoma"),
SP(2),
B("Purely <b>mesenchymal</b> odontogenic tumor — no epithelium"),
B("Site: <b>Posterior mandible</b> most common; no capsule — infiltrates widely"),
SP(2),
H2("Radiograph — KEY VIVA"),
HL("<b>\"Tennis racket\" pattern</b> — multilocular radiolucency with fine, intersecting bony septa arranged at right angles (90°). Also described as \"soap bubble\" or \"honeycomb.\""),
SP(2),
H2("Histology"),
B("Stellate/spindle cells in loose <b>myxomatous (gelatinous) stroma</b>"),
B("Resembles the dental papilla — supports odontogenic origin"),
B("<b>No capsule</b> — explains infiltrative behavior and high recurrence with conservative treatment"),
SP(2),
H2("Treatment"),
B("<b>Resection</b> (wide local excision) — high recurrence with enucleation/curettage"),
SP(3),
]
# Q10 - Cementoblastoma
story += [
H1("Q10. Cementoblastoma"),
SP(2),
HL("<b>Only true neoplasm of cementum.</b>"),
SP(2),
B("Age: usually <b><25 years</b>; slight male predominance"),
B("Site: <b>Mandibular 1st molar root</b> most common"),
B("<b>Tooth vitality PRESERVED</b> — mass is attached to root, tooth remains vital (distinguishes from other jaw lesions)"),
B("<b>Pain present</b> — important distinguishing feature"),
SP(2),
H2("Radiograph — KEY VIVA"),
HL("<b>Radiopaque mass fused to root</b> with a thin surrounding radiolucent halo. Root resorption present. Tooth vital."),
SP(2),
H2("Treatment"),
B("<b>Extraction of tooth and tumor together</b> (tooth + attached tumor as one specimen) — recurrence if tooth left"),
SP(3),
]
# Q11 - Summary Table
story += [
H1("Quick-Reference Summary Table"),
SP(2),
]
summary_data = [
["Tumor", "Age", "Site", "X-Ray", "Histology Hallmark", "Treatment"],
["Ameloblastoma\n(Solid/Multicystic)", "Mean 37 y\nM:F 1.2:1", "Mandible\nmolar-ramus\n(80%)", "Soap bubble/\nHoneycomb", "Reverse polarity,\nstellate reticulum,\nVickers-Gorlin", "En bloc resection\n1 cm margin"],
["AOT", "<20 y\nFemale", "Ant. maxilla\n(2/3 rule)", "Unilocular +\ncalcifications", "Duct-like structures,\nrosettes", "Enucleation only"],
["CEOT\n(Pindborg)", "30–50 y", "Mandible", "Driven snow\ncalcifications", "Liesegang rings,\namyloid, Congo red+", "Resection\nwith margin"],
["KCOT/OKC", "2nd–3rd\ndecade", "Mandible\n3rd molar", "Scalloping,\nbowing of\ninferior border", "Parakeratotic 6-8\nlayers, no rete\nridges, daughter cysts", "Enucleation +\ncurettage + Carnoy's"],
["CCOT\n(Gorlin cyst)", "4th decade\npeak 2–3rd", "Ant. jaws", "Mixed / snowdrift\ncalcifications", "Ghost cells,\nanucleate shadow\ncells", "Enucleation"],
["Odontoma", "Young", "Ant. (compound)\nPost. (complex)", "Radiopaque\n+ lucent halo", "Hamartoma —\nall tooth tissues\ndisorganized", "Enucleation"],
["Ameloblastic\nFibroma", "<30 y\nMale", "Post. mandible", "Radiolucent\nunilocular/\nmultilocular", "Epi + primitive\ncell-rich\nmesenchyme", "Conservative\nexcision"],
["Odontogenic\nMyxoma", "Any", "Post. mandible", "Tennis racket\n(right-angle septa)", "Myxoid stroma,\nno capsule,\nstellate cells", "Resection\n(wide excision)"],
["Cementoblastoma", "<25 y\nMale", "Mandible\n1st molar root", "Radiopaque mass\nFUSED to root\n+ lucent halo", "True cementum,\nroot resorption,\ntooth VITAL", "Extract tooth\n+ tumor together"],
]
col_widths = [28*mm, 20*mm, 24*mm, 28*mm, 42*mm, 32*mm]
sum_table = Table(summary_data, colWidths=col_widths, repeatRows=1)
sum_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 8.5),
("FONTSIZE", (0,1), (-1,-1), 8),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("BACKGROUND", (0,1), (-1,1), LIGHT_TEAL),
("BACKGROUND", (0,3), (-1,3), LIGHT_TEAL),
("BACKGROUND", (0,5), (-1,5), LIGHT_TEAL),
("BACKGROUND", (0,7), (-1,7), LIGHT_TEAL),
("BACKGROUND", (0,9), (-1,9), LIGHT_TEAL),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("ALIGN", (0,0), (-1,0), "CENTER"),
]))
story += [sum_table, SP(4)]
# Q12 - Must-Know Points
story += [
H1("Q11. \"Asked in Every Viva\" — Must-Know Points"),
SP(2),
]
mustknow = [
("<b>Most common OT overall</b>", "Odontoma (hamartoma)"),
("<b>Most common true neoplasm</b>", "Ameloblastoma"),
("<b>\"2/3 tumor\"</b>", "Adenomatoid odontogenic tumor (AOT)"),
("<b>Liesegang rings + Congo red + Amyloid</b>", "CEOT (Pindborg tumor)"),
("<b>Ghost cells</b>", "CCOT (Gorlin cyst) / Dentinogenic ghost cell tumor"),
("<b>Reverse polarity of nuclei</b>", "Ameloblastoma — Vickers-Gorlin feature"),
("<b>Soap bubble / Honeycomb XR</b>", "Ameloblastoma (also odontogenic myxoma)"),
("<b>Tennis racket XR</b>", "Odontogenic myxoma (right-angle bony septa)"),
("<b>Radiopaque mass fused to root, vital tooth</b>", "Cementoblastoma"),
("<b>KCOT associated syndrome</b>", "Gorlin-Goltz syndrome (PTCH1 mutation) — multiple OKCTs + bifid rib + calcified falx + basal cell nevi"),
("<b>Carnoy's solution</b>", "Used as adjunct in KCOT to destroy satellite cysts"),
("<b>Highest recurrence rate</b>", "KCOT (up to 62.5% with enucleation alone)"),
("<b>Desmoplastic ameloblastoma XR</b>", "Mixed radiolucent/radiopaque — most atypical; anterior maxilla"),
("<b>Tumor with malignant potential</b>", "Ameloblastic fibroma → Ameloblastic fibrosarcoma"),
("<b>Only true cementum neoplasm</b>", "Cementoblastoma"),
("<b>Philipsen (1956)</b>", "First described OKC/KCOT"),
("<b>Gorlin et al. (1962)</b>", "First described CCOT (Gorlin cyst)"),
("<b>Gardner's two factors</b>", "Ameloblastoma behavior: (1) infiltrates cancellous not compact bone; (2) location"),
]
mk_data = [["Key Fact", "Answer"]] + mustknow
mk_table = Table(mk_data, colWidths=[70*mm, 104*mm])
mk_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BACKGROUND", (0,1), (-1,1), LIGHT_TEAL),
("BACKGROUND", (0,3), (-1,3), LIGHT_TEAL),
("BACKGROUND", (0,5), (-1,5), LIGHT_TEAL),
("BACKGROUND", (0,7), (-1,7), LIGHT_TEAL),
("BACKGROUND", (0,9), (-1,9), LIGHT_TEAL),
("BACKGROUND", (0,11), (-1,11), LIGHT_TEAL),
("BACKGROUND", (0,13), (-1,13), LIGHT_TEAL),
("BACKGROUND", (0,15), (-1,15), LIGHT_TEAL),
("BACKGROUND", (0,17), (-1,17), LIGHT_TEAL),
]))
story += [mk_table, SP(4)]
# Footer note
story += [
HR(),
Paragraph("Orris Medical | Compiled from Cummings Otolaryngology, Scott-Brown's ORL, KJ Lee's Essential Otolaryngology, Robbins & Kumar Basic Pathology", subtitle_style),
]
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace && python odontogenic_tumor_viva.py
Odontogenic Tumor Viva
PDF Document · PDF