Give me a one month schedule for ENT PG examination starting from 15/07/26 with all the high yeild topics from scott brown textbook (considering 10-12 hours study time per day)
Scott Brown's Otorhinolaryngology Head Neck Surgery high yield topics ENT PG exam
| Session | Time | Purpose |
|---|---|---|
| Morning Block | 7:00 AM - 1:00 PM | New topic study (6 hrs) |
| Afternoon Block | 2:00 PM - 6:00 PM | Practice MCQs + case vignettes (4 hrs) |
| Evening Block | 7:00 PM - 9:00 PM | Revision + notes (2 hrs) |
| Classification | Topic |
|---|---|
| House-Brackmann I-VI | Facial nerve grading |
| Chandler I-V | Orbital complications of sinusitis |
| Cotton-Myer Grade I-IV | Subglottic stenosis |
| Koos Grade I-IV | Vestibular schwannoma |
| Fisch A-D | Glomus jugulare |
| Glasscock-Jackson I-IV | Glomus tympanicum/jugulare |
| Shamblin I-III | Carotid body tumour |
| Kadish A-C | Olfactory neuroblastoma |
| Lund-Mackay (0-24) | CT scoring of CRS |
| Cottle Areas 1-5 | DNS severity |
| Jahrsdoerfer 0-10 | Atresia repair candidacy |
| Bailey I-IV | Branchial cyst |
| AJCC TNM 8th Ed. | All H&N cancers |
| Wullstein Types I-V | Tympanoplasty |
| Nagata | Microtia |
Schedule starting from today(9/6/26) With a first reading of 10 days (High yeild) Followed by three 5-5-5 days quick revision of the Whole ENT portions Compile it in a pdf format
mkdir -p /home/daytona/workspace/ent-schedule && ls /home/daytona/workspace/ent-schedule/
~/ent-schedule/generate_schedule.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, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
from reportlab.lib.colors import HexColor
# ─── Color Palette ───────────────────────────────────────────────────────────
DARK_BLUE = HexColor('#1A3A5C')
MED_BLUE = HexColor('#2E6DA4')
LIGHT_BLUE = HexColor('#D6E8F7')
TEAL = HexColor('#0E7490')
TEAL_LIGHT = HexColor('#CCEFF6')
GREEN = HexColor('#166534')
GREEN_LIGHT = HexColor('#DCFCE7')
ORANGE = HexColor('#C2410C')
ORANGE_LIGHT = HexColor('#FEF3C7')
PURPLE = HexColor('#5B21B6')
PURPLE_LIGHT = HexColor('#EDE9FE')
RED = HexColor('#991B1B')
RED_LIGHT = HexColor('#FEE2E2')
GREY_LIGHT = HexColor('#F1F5F9')
GREY_MED = HexColor('#CBD5E1')
BLACK = HexColor('#0F172A')
WHITE = colors.white
# ─── Styles ──────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def make_style(name, parent='Normal', **kwargs):
s = ParagraphStyle(name, parent=styles[parent], **kwargs)
return s
COVER_TITLE = make_style('CoverTitle', fontSize=28, textColor=WHITE, alignment=TA_CENTER, spaceAfter=6, fontName='Helvetica-Bold', leading=34)
COVER_SUB = make_style('CoverSub', fontSize=14, textColor=LIGHT_BLUE, alignment=TA_CENTER, spaceAfter=4, fontName='Helvetica', leading=18)
COVER_INFO = make_style('CoverInfo', fontSize=11, textColor=GREY_LIGHT, alignment=TA_CENTER, spaceAfter=3, fontName='Helvetica', leading=14)
SEC_HEADER = make_style('SecHeader', fontSize=16, textColor=WHITE, alignment=TA_LEFT, spaceAfter=4, spaceBefore=6, fontName='Helvetica-Bold', leading=20)
DAY_HEADER = make_style('DayHeader', fontSize=12, textColor=WHITE, alignment=TA_LEFT, spaceAfter=2, spaceBefore=2, fontName='Helvetica-Bold', leading=16)
SESS_LABEL = make_style('SessLabel', fontSize=10, textColor=DARK_BLUE, alignment=TA_LEFT, spaceAfter=1, spaceBefore=2, fontName='Helvetica-Bold', leading=13)
BULLET = make_style('Bullet', fontSize=8.5, textColor=BLACK, alignment=TA_LEFT, spaceAfter=0, spaceBefore=0, fontName='Helvetica', leading=12, leftIndent=10)
BULLET_BOLD = make_style('BulletBold', fontSize=8.5, textColor=DARK_BLUE, alignment=TA_LEFT, spaceAfter=0, spaceBefore=0, fontName='Helvetica-Bold', leading=12, leftIndent=10)
SMALL_ITALIC = make_style('SmallItalic', fontSize=8, textColor=TEAL, alignment=TA_LEFT, spaceAfter=0, spaceBefore=0, fontName='Helvetica-Oblique', leading=11)
FOOTER_STYLE = make_style('Footer', fontSize=7.5, textColor=GREY_MED, alignment=TA_CENTER, fontName='Helvetica')
TABLE_HDR = make_style('TblHdr', fontSize=8.5, textColor=WHITE, alignment=TA_CENTER, fontName='Helvetica-Bold', leading=11)
TABLE_CELL = make_style('TblCell', fontSize=8, textColor=BLACK, alignment=TA_LEFT, fontName='Helvetica', leading=11)
TABLE_CELL_C = make_style('TblCellC', fontSize=8, textColor=BLACK, alignment=TA_CENTER, fontName='Helvetica', leading=11)
NOTE_STYLE = make_style('Note', fontSize=8.5, textColor=ORANGE, alignment=TA_LEFT, fontName='Helvetica-Oblique', leading=12, leftIndent=6)
# ─── Helper: page background ─────────────────────────────────────────────────
def header_footer(canvas, doc):
canvas.saveState()
w, h = A4
# thin top bar
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, h - 0.55*cm, w, 0.55*cm, fill=1, stroke=0)
# bottom bar
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, w, 0.55*cm, fill=1, stroke=0)
# page number
canvas.setFont('Helvetica', 7.5)
canvas.setFillColor(WHITE)
canvas.drawCentredString(w/2, 0.15*cm, f"ENT PG Exam Study Schedule | Scott-Brown's Otorhinolaryngology | Page {doc.page}")
canvas.restoreState()
def cover_page(canvas, doc):
canvas.saveState()
w, h = A4
# Deep gradient background
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, w, h, fill=1, stroke=0)
# accent strip at top
canvas.setFillColor(MED_BLUE)
canvas.rect(0, h*0.78, w, h*0.22, fill=1, stroke=0)
# decorative bottom strip
canvas.setFillColor(TEAL)
canvas.rect(0, 0, w, 1.8*cm, fill=1, stroke=0)
canvas.restoreState()
# ─── Helper builders ─────────────────────────────────────────────────────────
def colored_bar(text, bg_color, text_color=WHITE, style=SEC_HEADER):
data = [[Paragraph(text, ParagraphStyle('_tmp', parent=style, textColor=text_color))]]
t = Table(data, colWidths=[17.5*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg_color),
('ROWPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('ROUNDEDCORNERS', [4]),
]))
return t
def session_box(label, emoji, bg, items, label_color=WHITE):
"""Build one session block (Morning/Afternoon/Evening)."""
content = []
# Session label row
hdr_data = [[Paragraph(f"{emoji} {label}", ParagraphStyle('_sh', parent=SESS_LABEL, textColor=label_color, fontName='Helvetica-Bold', fontSize=9))]]
hdr = Table(hdr_data, colWidths=[17.5*cm])
hdr.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('LEFTPADDING', (0,0), (-1,-1), 8),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
content.append(hdr)
for item in items:
content.append(Paragraph(f"• {item}", BULLET))
content.append(Spacer(1, 4))
return content
def make_table(headers, rows, col_widths, bg_color=MED_BLUE):
hdr_row = [Paragraph(h, TABLE_HDR) for h in headers]
data = [hdr_row]
for row in rows:
data.append([Paragraph(str(c), TABLE_CELL_C if i == 0 else TABLE_CELL) for i, c in enumerate(row)])
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), bg_color),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREY_LIGHT]),
('GRID', (0,0), (-1,-1), 0.3, GREY_MED),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
# ─── Schedule Data ───────────────────────────────────────────────────────────
PHASE1_DAYS = [
{
"day": "DAY 1", "date": "Mon, 9 Jun 2026", "phase_color": MED_BLUE,
"title": "EAR - Anatomy, Embryology & Physiology of Hearing",
"morning": [
"Embryology: branchial apparatus, 1st & 2nd arch derivatives, otic placode",
"External ear, tympanic membrane anatomy (layers, quadrants, landmarks)",
"Middle ear: ossicular chain, Prussak's space, sinus tympani, facial recess",
"Eustachian tube anatomy and function; mastoid air cells",
"Cochlear anatomy: basilar membrane, organ of Corti, inner vs outer hair cells",
"Vestibular anatomy: semicircular canals, utricle, saccule, ampulla",
"Facial nerve in temporal bone: 5 segments, distances, relationships",
],
"afternoon": [
"Physiology of hearing: travelling wave theory (von Bekesy), tonotopic map",
"Hair cell transduction: tip links, stereocilia, endolymph (K+-rich), K+ channels",
"Cochlear amplifier: outer hair cells, prestin, electromotility",
"Tuning fork tests: Weber, Rinne, Schwabach, Bing, ABC test - interpretation table",
"Vestibular physiology: cupula deflection, VOR, VSR, cervico-ocular reflex",
"MCQs: 40 questions on ear anatomy & physiology",
],
"evening": [
"Revision: blood supply of ear (ext. carotid, stylomastoid, labyrinthine arteries)",
"Nerve supply summary chart",
"Key landmarks for surgery: Trautmann's triangle, Dorello's canal, Donaldson's line",
],
},
{
"day": "DAY 2", "date": "Tue, 10 Jun 2026", "phase_color": MED_BLUE,
"title": "Audiology - Pure Tone, Impedance, OAE, ABR/BERA",
"morning": [
"Pure tone audiogram (PTA): frequencies, bone vs air conduction, masking",
"Audiogram patterns: conductive, SNHL, mixed; speech banana",
"Impedance audiometry: tympanogram Types A, B, C, As, Ad - each with causes",
"Acoustic reflex: ipsilateral, contralateral; reflex decay (retrocochlear)",
"Otoacoustic emissions (TEOAE, DPOAE): generation, clinical uses, newborn screening",
"ABR/BERA: waves I-V, generators, latency norms, wave V interaural latency difference",
"Electrocochleography (ECoG): SP/AP ratio >0.4 = endolymphatic hydrops",
],
"afternoon": [
"VEMP: cervical VEMP (saccule, IVN) vs ocular VEMP (utricle, SVN)",
"Caloric test: Fitzgerald-Hallpike protocol, COWS, canal paresis, directional preponderance",
"Video head impulse test (vHIT): catch-up saccades in canal hypofunction",
"Speech audiometry: SRT, WRS, PB max; rollover index (retrocochlear)",
"MCQs: 40 questions on audiology investigations",
],
"evening": [
"Summary table: test vs finding vs diagnosis",
"Universal Newborn Hearing Screening (UNHS) algorithm: OAE → ABR",
"Audiological criteria for cochlear implantation",
],
},
{
"day": "DAY 3", "date": "Wed, 11 Jun 2026", "phase_color": MED_BLUE,
"title": "Chronic Otitis Media, Cholesteatoma & Mastoiditis",
"morning": [
"CSOM classification: tubotympanic (safe/mucosal) vs atticoantral (unsafe/squamosal)",
"Tubotympanic: central perforation, types of perforations, granulation tissue, polyp",
"Cholesteatoma: congenital (white mass anteromedial to malleus, intact TM) vs acquired",
"Acquired cholesteatoma: primary (Shrapnell's/pars flaccida) vs secondary (pars tensa marginal)",
"Pathogenesis theories: invagination, metaplasia, basal cell hyperplasia, immigration",
"Dangers: erosion of ossicles, dehiscent Fallopian canal, tegmen, sigmoid sinus",
"Complications of CSOM - Extracranial: mastoiditis, Bezold's, Citelli's, subperiosteal abscess",
"Complications - Intracranial: meningitis, brain abscess, lateral sinus thrombophlebitis, extradural abscess, subdural empyema, otitic hydrocephalus",
"Gradenigo's syndrome (petrous apicitis): triad = abducens palsy + retroorbital pain + otorrhoea",
],
"afternoon": [
"Myringoplasty: underlay vs overlay technique, graft materials, success rates",
"Tympanoplasty: Wullstein classification Types I-V",
"Mastoidectomy types: cortical, modified radical (MRM), radical (Bondy's) - indications",
"Canal wall up (CWU) vs canal wall down (CWD): pros, cons, recurrence rates",
"MCQs: 45 questions on CSOM, cholesteatoma, mastoiditis",
],
"evening": [
"Complication pathways map: danger ear → route → complication",
"Bezold's (SCM groove) vs Citelli's (posterior digastric) vs Luc's abscess (temporal region)",
"Cholesteatoma matrix vs debris: keratinising stratified squamous epithelium",
],
},
{
"day": "DAY 4", "date": "Thu, 12 Jun 2026", "phase_color": MED_BLUE,
"title": "Otosclerosis, Facial Nerve, SNHL & Ototoxicity",
"morning": [
"Otosclerosis: pathology (enchondral bone remodelling), histology (blue mantles of Manasse)",
"Schwartze sign (flamingo pink hue), audiogram: Carhart's notch at 2kHz, negative Rinne + type As tympanogram",
"Treatment: stapedectomy vs stapedotomy, KTP laser, sodium fluoride, hearing aids",
"Facial nerve grading: House-Brackmann I-VI (know each grade criterion)",
"Bell's palsy: diagnosis (exclusion), treatment = oral prednisolone within 72 hrs ± antivirals",
"Ramsay Hunt syndrome (HZO): triad = facial palsy + otalgia + vesicles in EAC/pinna",
"Traumatic facial palsy: ENoG >90% degeneration within 14 days = surgical exploration",
"SNHL: noise-induced (4 kHz notch/C5 dip), TTS vs PTS",
"Ototoxicity: aminoglycosides (gentamicin/tobramycin = vestibulotoxic; streptomycin/neomycin = cochleotoxic; amikacin = both)",
"Cisplatin ototoxicity: high frequency first, irreversible; loop diuretics (furosemide) potentiate aminoglycoside toxicity",
],
"afternoon": [
"Sudden SNHL: definition (<30dB loss at 3 consecutive frequencies in <72 hrs), etiology",
"Treatment: systemic steroids (prednisolone 1mg/kg) + intratympanic steroids",
"Presbycusis types: sensory (basal turn hair cell loss), neural, metabolic/strial, mechanical (cochlear conductive)",
"Autoimmune inner ear disease (AIED): rapidly progressive bilateral SNHL, steroids, methotrexate",
"MCQs: 40 questions on otosclerosis, facial nerve, SNHL",
],
"evening": [
"House-Brackmann grading table (memorise all 6 grades)",
"ENoG parameters and timing of surgery in traumatic facial palsy",
"Aminoglycoside toxicity spectrum table",
],
},
{
"day": "DAY 5", "date": "Fri, 13 Jun 2026", "phase_color": MED_BLUE,
"title": "Vertigo, Meniere's Disease & Vestibular Schwannoma",
"morning": [
"Peripheral vs central vertigo: key differences (fatigability, nystagmus direction, fixation, HINTS exam)",
"HINTS exam: Head Impulse (abnormal = peripheral), Nystagmus (unidirectional = peripheral), Test of Skew (positive = central)",
"BPPV: canalolithiasis vs cupulolithiasis; posterior (most common) > horizontal > superior canal",
"Dix-Hallpike test, Epley maneuver (for posterior canal BPPV)",
"Horizontal canal BPPV: supine roll test (Pagnini-McClure), Barbecue roll, Gufoni maneuver",
"Meniere's disease: endolymphatic hydrops, classic triad (episodic vertigo + fluctuating SNHL + tinnitus)",
"Lermoyez variant (hearing improves when vertigo begins), Tumarkin crisis (otolithic catastrophe)",
"Treatment of Meniere's: betahistine, low-salt diet, diuretics, intratympanic gentamicin, endolymphatic sac surgery",
"Vestibular neuritis vs labyrinthitis: differences, HINTS, MRI exclusion",
"Superior canal dehiscence (Minor's syndrome): Tullio phenomenon, autophony, HRCT, occlusion",
],
"afternoon": [
"Vestibular schwannoma: CNVIII (superior vestibular division), unilateral SNHL + tinnitus",
"Koos grading I-IV: relates to CPA involvement and brainstem compression",
"Approaches: translabyrinthine (no hearing), retrosigmoid (hearing preservation possible), middle fossa (intracanalicular)",
"NF2: bilateral vestibular schwannomas, chromosome 22, merlin/schwannomin protein loss",
"Other CPA tumours: meningioma (dural tail, calcification), epidermoid cyst (DWI restriction), facial nerve schwannoma",
"Radiosurgery (Gamma Knife): < 3cm tumour, serviceable hearing, frail patients",
"MCQs: 45 questions on vertigo and schwannoma",
],
"evening": [
"Peripheral vs central vertigo comparison table",
"BPPV maneuvers step-by-step with canal diagrams in notes",
"Koos grading and surgical approach selection chart",
],
},
{
"day": "DAY 6", "date": "Sat, 14 Jun 2026", "phase_color": TEAL,
"title": "Nasal Anatomy, Sinusitis, Epistaxis & Nasal Polyps",
"morning": [
"External nose anatomy: nasal bones, upper lateral cartilages (ULC), lower lateral cartilages (LLC/alar), septal cartilage",
"Nasal septum: perpendicular plate of ethmoid + vomer + maxillary crest + palatine + septal cartilage",
"Lateral nasal wall: inferior, middle, superior turbinates; infundibulum, hiatus semilunaris, ethmoidal bulla, uncinate process",
"Ostiomeatal complex (OMC): key to rhinosinusitis; obstruction → recurrent sinusitis",
"Blood supply of nose: Kiesselbach's plexus (Little's area - anterior epistaxis) and Woodruff's plexus (posterior - sphenopalatine branches)",
"Sphenopalatine artery: terminal branch of maxillary artery, main blood supply to lateral nasal wall",
"Anterior and posterior ethmoidal arteries from ophthalmic artery (from ICA)",
"Rhinosinusitis classification: ARS <12 wks, CRS >12 wks, CRS with/without polyps",
"Acute sinusitis organisms: S. pneumoniae, H. influenzae, M. catarrhalis",
"EPOS 2020 treatment algorithm for ARS and CRS",
],
"afternoon": [
"Complications of sinusitis - Orbital: Chandler classification I-V (periorbital oedema → orbital abscess)",
"Complications - Intracranial: meningitis, brain abscess, Pott's puffy tumour (frontal osteomyelitis), cavernous sinus thrombosis",
"FESS principles: Stammberger, Messerklinger techniques; uncinectomy first step",
"Lund-Mackay CT scoring (0-2 per sinus, max 24); Lund-Kennedy endoscopy score",
"Nasal polyps: eosinophilic CRS, Samter's triad (asthma + ASA sensitivity + polyps)",
"Nasal polyps associations: cystic fibrosis (young patient + bilateral polyps), EGPA/Churg-Strauss",
"Polyp grading: Meltzer Grade 0-4; treatment = intranasal steroids, systemic steroids, surgery, dupilumab",
"Epistaxis management: BIPP pack, Foley catheter, SPA ligation (endoscopic), anterior ethmoidal artery ligation, embolisation",
"HHT (Rendu-Osler-Weber): autosomal dominant, telangiectasias, recurrent epistaxis, AVM",
"MCQs: 45 questions on rhinology",
],
"evening": [
"Chandler classification orbital complications table",
"Kiesselbach's plexus arterial contributors (5 arteries): superior labial, sphenopalatine, anterior ethmoidal, greater palatine, facial",
"FESS steps in order: uncinectomy → maxillary antrostomy → anterior ethmoidectomy → posterior ethmoidectomy → sphenoidotomy → frontal recess work",
],
},
{
"day": "DAY 7", "date": "Sun, 15 Jun 2026", "phase_color": TEAL,
"title": "Allergic Rhinitis, DNS, Turbinates & Nasal Tumours",
"morning": [
"Allergic rhinitis: ARIA classification (intermittent vs persistent; mild vs moderate-severe)",
"Pathophysiology: IgE-mediated, early phase (mast cells: histamine, prostaglandins) vs late phase (eosinophils, IL-4, IL-5, IL-13)",
"Investigations: skin prick test, specific IgE (RAST/ImmunoCAP), nasal cytology",
"Treatment: allergen avoidance, 2nd-gen antihistamines (non-sedating), intranasal corticosteroids (first-line for persistent), leukotriene antagonists, SCIT/SLIT immunotherapy",
"Non-allergic rhinitis: vasomotor, NARES (nasal eosinophilia), hormonal (pregnancy), drug-induced (rhinitis medicamentosa = rebound from topical decongestants)",
"Atrophic rhinitis: primary (Klebsiella ozaenae) vs secondary; young females; anosmia, fetor, crusting",
"Atrophic rhinitis treatment: Young's operation (surgical closure of nostrils), saline douching, oestrogen drops",
"DNS: Cottle's classification (5 areas of nasal septum), types of deviation",
"Septoplasty: after age 17, Killian's incision vs hemitransfixation incision, SMR vs septoplasty",
"Inferior turbinate hypertrophy: medical (steroids, antihistamines) vs surgical (submucosal diathermy, microdebrider turbinoplasty, SMR of turbinate)",
],
"afternoon": [
"Juvenile Nasopharyngeal Angiofibroma (JNA): adolescent males only, fibrovascular tumour",
"JNA: Holman-Miller sign on angiography (anterior bowing of posterior wall of maxillary sinus = Holman-Miller/antral sign)",
"JNA Fisch classification (I-IV), Andrews/Sessions staging; pre-op embolisation (ECA feeders)",
"Inverted papilloma: Schneiderian/sinonasal type; 10% malignant transformation; HPV 6/11; lateral nasal wall",
"Krouse classification (T1-T4) for inverted papilloma; treatment = medial maxillectomy (endoscopic or open)",
"Olfactory neuroblastoma (Esthesioneuroblastoma): Kadish staging A-C (+ Morita D for LN)",
"Sinonasal SCC: most common malignant sinonasal tumour; adenocarcinoma (woodworkers - ethmoid sinus)",
"Maxillary sinus carcinoma: Öhngren's line (medial canthus to angle of mandible divides into antrosuperior-bad vs inferolateral-good prognosis)",
"MCQs: 40 questions on rhinitis, DNS, tumours",
],
"evening": [
"ARIA classification revision table",
"JNA vs inverted papilloma comparison",
"Sinonasal malignancies: site, cell type, special associations (woodworkers, nickel/chromium workers)",
],
},
{
"day": "DAY 8", "date": "Mon, 16 Jun 2026", "phase_color": GREEN,
"title": "Larynx, Voice Disorders, Laryngeal Carcinoma & Neck Dissection",
"morning": [
"Laryngeal anatomy: thyroid, cricoid, epiglottis, arytenoids, corniculate, cuneiform cartilages",
"Ligaments: quadrangular membrane (upper boundary = aryepiglottic fold), conus elasticus/cricovocal membrane (upper free edge = vocal ligament)",
"Cricoarytenoid joint (synovial), cricothyroid joint (synovial) - movements",
"Intrinsic muscles: PCA = ONLY abductor (posterior cricoarytenoid); TA, LCA, IA = adductors; cricothyroid = tensor",
"SLN: internal branch (sensory supraglottis), external branch (cricothyroid); RLN (all other intrinsic muscles)",
"Vocal fold layers: epithelium, superficial LP (Reinke's space), intermediate LP, deep LP, vocalis muscle",
"Voice disorders: nodules (bilateral, junction anterior 1/3 and posterior 2/3), polyp (unilateral), Reinke's oedema (smokers)",
"Laryngeal papillomatosis (RRP): HPV 6/11; juvenile onset (< 5 yr) vs adult; microdebrider, KTP laser, bevacizumab, HPV vaccine",
"Laryngeal Ca: glottic (most common, late LN spread), supraglottic (bilateral LN spread, worse prognosis), subglottic (rare)",
"AJCC 8th Ed. TNM: T1 = one subsite, normal mobility; T2 = two subsites or impaired mobility; T3 = fixed cord / pre-epiglottic space; T4 = cartilage invasion / extralaryngeal spread",
],
"afternoon": [
"Organ preservation in laryngeal Ca: RTOG 91-11 trial (conc. cisplatin-RT superior to induction + RT for laryngeal preservation)",
"Surgical options: TLM (transoral laser microsurgery) for T1-T2, supraglottic laryngectomy, total laryngectomy",
"Voice rehabilitation after TL: tracheoesophageal puncture (TEP) with Blom-Singer valve (preferred), electrolarynx, oesophageal speech",
"Neck levels I-VII (Memorial Sloan Kettering classification): know which level drains which site",
"Neck dissection types: RND, MRND (Type I II III), SND (supraomohyoid I-III, lateral II-IV, central VI, posterolateral II-V)",
"Elective neck dissection: N0 neck with >20% risk of occult metastasis → SND",
"Tracheostomy: anatomy (cricothyroid membrane vs trachea), surgical steps, complications (innominate artery haemorrhage, tracheomalacia, TOF, stomal stenosis)",
"MCQs: 45 questions on larynx, voice, laryngeal Ca, neck",
],
"evening": [
"Laryngeal subsite anatomy diagram in notes",
"TNM staging for glottic vs supraglottic vs subglottic (differences)",
"Neck levels diagram and drainage patterns",
],
},
{
"day": "DAY 9", "date": "Tue, 17 Jun 2026", "phase_color": GREEN,
"title": "Head & Neck Oncology: Oral, Oropharynx, Hypopharynx, Salivary Glands, Thyroid",
"morning": [
"Oral cavity SCC: floor of mouth (highest risk of occult N+), tongue most common site; risk factors (tobacco + alcohol + betel nut)",
"Pre-malignant lesions: leukoplakia (Pindborg), erythroplakia (highest malignant potential ~40%), oral submucous fibrosis",
"HPV-positive oropharyngeal SCC: HPV16, p16 surrogate marker, younger non-smokers, better prognosis",
"Separate AJCC 8th Ed. staging for HPV+ vs HPV- oropharynx (important exam point)",
"Reconstruction: radial forearm free flap (thin, pliable, oral lining), fibula free flap (bone + skin for mandible), ALT (large defects), PMMC (pedicled regional flap), jejunum (circumferential pharyngeal defect)",
"Hypopharynx: piriform sinus (most common site, most advanced presentation), postcricoid (Paterson-Brown-Kelly/Plummer-Vinson association)",
"Plummer-Vinson/Paterson-Brown-Kelly syndrome: iron deficiency anaemia + postcricoid web + dysphagia; middle-aged women; risk of postcricoid SCC",
"Salivary gland tumours: '10s rule' (80% parotid, 80% benign, 80% = pleomorphic adenoma; 80% of malignant parotid = MEC or ACC)",
"Pleomorphic adenoma: pseudopodia, satellite nodules, risk of malignant transformation ~5-10%; treatment = superficial parotidectomy (not enucleation)",
"Adenoid cystic carcinoma: perineural invasion (facial pain/palsy), skip lesions, late lung mets, cribriform histology, poor long-term prognosis",
],
"afternoon": [
"Mucoepidermoid carcinoma: most common malignant salivary tumour; low/intermediate/high grade",
"Frey's syndrome: auriculotemporal nerve (auriculotemporal nerve → parotid pre-op, post-op re-routes to sweat glands); treatment = botulinum toxin",
"Sjögren's syndrome: primary (sicca syndrome) vs secondary; anti-SSA/Ro, anti-SSB/La antibodies; increased risk of MALT lymphoma",
"Thyroid cancer: papillary (most common, psammoma bodies, Orphan Annie nuclei, RET/PTC rearrangement), follicular (vascular + capsular invasion, haematogenous spread)",
"Medullary thyroid cancer: RET proto-oncogene mutation, MEN 2A/2B, calcitonin marker, amyloid stroma",
"Anaplastic thyroid cancer: worst prognosis, older patients, rapid progression",
"Bethesda system: Categories I-VI; surgical threshold at IV-VI",
"RLN: unilateral injury (hoarseness, BOL cord position) vs bilateral (bilateral adductor paralysis = stridor, requires tracheostomy)",
"Parathyroid: superior from 4th pouch, inferior from 3rd pouch (travels with thymus); primary HPT = adenoma 85%",
"MCQs: 45 questions on H&N oncology, salivary glands, thyroid",
],
"evening": [
"Salivary gland tumour comparison table",
"Bethesda categories and recommended management",
"MEN 2A vs MEN 2B comparison (MEN 2A = MTC + phaeochromocytoma + primary HPT; MEN 2B = MTC + phaeochromocytoma + marfanoid + mucosal neuromas)",
],
},
{
"day": "DAY 10", "date": "Wed, 18 Jun 2026", "phase_color": GREEN,
"title": "Paediatric ENT, Skull Base, Cochlear Implants & Tinnitus",
"morning": [
"Cochlear implants: bilateral profound SNHL, no benefit from hearing aids, patent cochlea, auditory nerve present",
"CI candidacy in children: threshold criterion, age of implantation (earlier = better outcomes), bilateral simultaneous preferred",
"Connexin 26 (GJB2) mutation: most common cause of hereditary SNHL in developed countries, autosomal recessive, DFNB1",
"Large vestibular aqueduct syndrome (LVAS): SLC26A4/Pendrin mutation, Pendred syndrome (+ goitre), progressive fluctuating SNHL",
"Mondini deformity: incomplete partition type II, 1.5 turns cochlea, CI feasible",
"Paediatric airway: laryngomalacia (most common neonatal stridor, supraglottoplasty)",
"Subglottic stenosis: Cotton-Myer grades I-IV (<50%, 51-70%, 71-99%, complete obstruction); congenital vs acquired (post-intubation #1)",
"Croup (LTB): parainfluenza 1, steeple sign on AP X-ray, nebulised adrenaline + dexamethasone",
"Epiglottitis: H. influenzae type B (now rare due to vaccine), thumb sign on lateral X-ray, emergency airway (do not examine)",
"Choanal atresia: CHARGE syndrome; bony 90% + membranous 10%; neonatal emergency; endoscopic transnasal repair",
],
"afternoon": [
"Skull base: Anterior (endoscopic transnasal approaches - pituitary, clivus, olfactory groove)",
"Middle fossa approach: IAC, petrous apex, tegmen repair; facial nerve decompression",
"Translabyrinthine approach: sacrifices hearing; best access to IAC and CPA; facial nerve monitoring",
"Retrosigmoid approach: hearing preservation possible; posterior fossa",
"Glomus tumours: Fisch classification (A-D for glomus jugulare), Glasscock-Jackson for glomus tympanicum",
"Glomus tympanicum: pulsatile tinnitus, Brown's sign (blanching on +ve pressure), reddish mass behind TM",
"Cholesterol granuloma of petrous apex: blue-domed cyst, T1 hyperintense MRI, drainage",
"Tinnitus: subjective vs objective; causes; investigations; management (TRT, CBT, sound masking)",
"Branchial anomalies: 1st (EAC/parotid region), 2nd (most common - anterior SCM border), 3rd/4th (thyroid region)",
"MCQs: 45 questions on paediatric ENT, skull base, CI",
],
"evening": [
"10-day Phase 1 overview revision: all topics summarised",
"Landmark classifications masterlist (create a single revision card)",
"Weakest topics identified from MCQ performance → prioritise in Phase 2",
],
},
]
REVISION_BLOCKS = [
{
"phase": "REVISION BLOCK 1 (5 Days)",
"dates": "19 – 23 Jun 2026",
"focus": "EAR: Anatomy, Audiology, Otitis Media, Otosclerosis, Facial Nerve, SNHL, Vertigo, Schwannoma, CI",
"color": MED_BLUE,
"bg": LIGHT_BLUE,
"days": [
{
"day": "Day 11", "date": "Thu, 19 Jun", "topic": "Ear Anatomy + Audiology",
"am": ["Re-read notes on surgical anatomy (Prussak's space, facial recess, sinus tympani, Donaldson's line)",
"Tuning fork test revision + audiogram interpretation drill (10 audiograms)",
"Impedance tympanogram types + acoustic reflex patterns"],
"pm": ["ABR/BERA wave latency revision", "VEMP (cVEMP vs oVEMP) + caloric test (COWS formula)", "50 MCQs ear anatomy + audiology"],
"eve": ["Create one-page flashcard: all audiology tests at a glance"],
},
{
"day": "Day 12", "date": "Fri, 20 Jun", "topic": "CSOM + Cholesteatoma + Mastoiditis",
"am": ["Cholesteatoma pathogenesis theories (all 4)", "Complication pathways: dangerous ear → complication name",
"Surgical options: CWU vs CWD debate, when to choose which"],
"pm": ["Wullstein Types I-V revision", "Bezold/Citelli/Luc/Mouret's abscess locations", "45 MCQs on CSOM and complications"],
"eve": ["Complication flowchart from memory (draw and check)"],
},
{
"day": "Day 13", "date": "Sat, 21 Jun", "topic": "Otosclerosis + Facial Nerve + Ototoxicity",
"am": ["Otosclerosis histology, Carhart's notch at 2 kHz, stapedectomy steps",
"House-Brackmann grading: write all 6 grades from memory",
"Bell's palsy vs Ramsay Hunt: management differences"],
"pm": ["Aminoglycoside ototoxicity table (vestibulotoxic vs cochleotoxic)",
"Sudden SNHL management (oral + IT steroids criteria)", "40 MCQs facial nerve + otosclerosis"],
"eve": ["ENoG interpretation and surgery timing (>90% degeneration in 14 days)"],
},
{
"day": "Day 14", "date": "Sun, 22 Jun", "topic": "Vertigo + Meniere's + BPPV",
"am": ["HINTS exam criteria and INFARCT mnemonic for central causes",
"BPPV: Dix-Hallpike, Epley, Semont, Barbecue roll - perform mentally step by step",
"Meniere's: endolymphatic hydrops, Lermoyez, Tumarkin crisis, treatment ladder"],
"pm": ["Superior canal dehiscence: Tullio, autophony, CT diagnosis",
"Vestibular migraine diagnostic criteria",
"45 MCQs on vertigo syndromes"],
"eve": ["Central vs peripheral nystagmus comparison table from memory"],
},
{
"day": "Day 15", "date": "Mon, 23 Jun", "topic": "Vestibular Schwannoma + CI + Skull Base Review",
"am": ["Koos grading + surgical approach selection (translabyrinthine/retrosigmoid/middle fossa)",
"NF2: genetics, management, ABI indication",
"Cochlear implant candidacy criteria (bilateral profound, <70 dB WRS)"],
"pm": ["Glomus jugulare vs tympanicum: Fisch vs Glasscock-Jackson classification",
"Petrous apex lesions: cholesterol granuloma (T1 bright) vs effusion vs cholesteatoma",
"50 MCQs Block 1 final test: ear + audiology + skull base"],
"eve": ["Block 1 performance analysis; identify weak chapters"],
},
],
},
{
"phase": "REVISION BLOCK 2 (5 Days)",
"dates": "24 – 28 Jun 2026",
"focus": "NOSE & SINUSES + LARYNX + VOICE + PHARYNX + TONSILS + OESOPHAGUS",
"color": TEAL,
"bg": TEAL_LIGHT,
"days": [
{
"day": "Day 16", "date": "Tue, 24 Jun", "topic": "Rhinology: Anatomy, Epistaxis, Sinusitis",
"am": ["Lateral nasal wall landmarks in order: draw from memory (inferior turbinate, uncinate, hiatus semilunaris, ethmoidal bulla, middle turbinate)",
"Blood supply of nose: Little's area (5 arteries) + Woodruff's plexus + SPA anatomy",
"EPOS 2020 algorithm: ARS and CRS treatment stepwise"],
"pm": ["Chandler classification orbital complications (write all 5 stages)",
"FESS steps in order (uncinectomy first); Lund-Mackay scoring practice",
"45 MCQs on rhinology anatomy + sinusitis"],
"eve": ["Complications of sinusitis: orbital vs intracranial, management per stage"],
},
{
"day": "Day 17", "date": "Wed, 25 Jun", "topic": "Allergic Rhinitis + Polyps + DNS + Tumours",
"am": ["ARIA classification from memory (4 quadrants: intermittent/persistent x mild/moderate-severe)",
"Samter's triad mechanism: COX-1 inhibition → excess LTC4, LTD4 → aspirin desensitisation protocol",
"JNA: Fisch stages, Holman-Miller sign, treatment (embolisation + endoscopic/transpalatal surgery)"],
"pm": ["Inverted papilloma: Krouse T1-T4, HPV association, medial maxillectomy",
"Esthesioneuroblastoma: Kadish A-C stages, craniofacial resection + RT",
"DNS: Cottle areas 1-5; septoplasty vs SMR comparison",
"45 MCQs on rhinitis, polyps, DNS, tumours"],
"eve": ["ARIA table + Samter's mechanism from memory"],
},
{
"day": "Day 18", "date": "Thu, 26 Jun", "topic": "Laryngology: Anatomy, Voice, Laryngeal Ca",
"am": ["Intrinsic laryngeal muscles: name, action, nerve supply (all 8 pairs + cricothyroid)",
"Vocal fold histology: Reinke's space - superficial LP, clinical significance (oedema in smokers)",
"RRP: HPV 6/11, treatment options in 2026 (microdebrider, KTP, bevacizumab, HPV vaccine off-label)"],
"pm": ["Laryngeal Ca TNM staging: glottic T1a/b, T2, T3, T4a, T4b",
"RTOG 91-11 trial summary: concurrent chemoRT = gold standard for laryngeal preservation",
"Voice rehabilitation: TEP > electrolarynx > oesophageal speech",
"45 MCQs on larynx, voice disorders, laryngeal Ca"],
"eve": ["Intrinsic laryngeal muscles from memory + RLN unilateral vs bilateral injury consequences"],
},
{
"day": "Day 19", "date": "Fri, 27 Jun", "topic": "Pharynx: Tonsils, Adenoids, Hypopharynx, Dysphagia",
"am": ["Tonsil blood supply (5 arteries - main = tonsillar branch of facial artery)",
"Paradise criteria: 7/yr or 5/yr x2 or 3/yr x3 (with constitutional symptoms)",
"Peritonsillar abscess: aspiration (1st line) vs I&D; interval tonsillectomy at 6 weeks",
"Deep space neck infections: retropharyngeal, parapharyngeal, Ludwig's angina"],
"pm": ["Plummer-Vinson syndrome: complete features, postcricoid carcinoma risk, iron replacement",
"Zenker's diverticulum: Killian's dehiscence, cricopharyngeal achalasia, endoscopic stapling vs open",
"LPR: RSI and RFS scores, treatment (PPI, alginate, dietary modifications)",
"45 MCQs on pharynx, tonsils, hypopharynx, dysphagia"],
"eve": ["Deep space neck infection: routes of spread, management"],
},
{
"day": "Day 20", "date": "Sat, 28 Jun", "topic": "Block 2 Comprehensive Test + Weak Area Drill",
"am": ["75 MCQs: mixed nose + larynx + pharynx (timed 45 minutes)",
"Identify and list all incorrect answers",
"Re-read relevant sections for incorrect answers"],
"pm": ["Weak chapter re-revision (1.5 hrs each for 2 weakest topics)",
"Classification systems revision: Chandler, Cottle, Kadish, Krouse, Holman-Miller"],
"eve": ["Block 2 performance log; note pattern of recurring errors"],
},
],
},
{
"phase": "REVISION BLOCK 3 (5 Days)",
"dates": "29 Jun – 3 Jul 2026",
"focus": "HEAD & NECK ONCOLOGY + PAEDIATRIC ENT + MOCK EXAMS + FINAL CONSOLIDATION",
"color": GREEN,
"bg": GREEN_LIGHT,
"days": [
{
"day": "Day 21", "date": "Sun, 29 Jun", "topic": "Head & Neck Cancer: Oral, Oropharynx, Reconstruction",
"am": ["Oral cavity SCC: staging (T1 <2cm, T2 2-4cm, T3 >4cm, T4a bone/skin, T4b encases ICA),",
"HPV+ oropharyngeal SCC AJCC 8th Ed staging: separate N classification (N1 = single ipsilateral ≤3cm)",
"Elective neck dissection: N0 oral tongue with depth of invasion > 4mm → SND (I-III)"],
"pm": ["Free flap selection: radial forearm vs fibula vs ALT vs jejunum - when to use each",
"PMMC flap: indications, blood supply (thoracoacromial artery, pectoral branch), complications",
"Sentinel lymph node biopsy in oral cancer: technique, learning curve",
"45 MCQs on oral cavity, oropharynx, reconstruction"],
"eve": ["Reconstruction algorithm: defect type → flap choice from memory"],
},
{
"day": "Day 22", "date": "Mon, 30 Jun", "topic": "Salivary Glands + Thyroid + Neck Dissection Review",
"am": ["Salivary gland tumours: 10s rule, WHO classification 2022 (MEC, ACC, SCC, polymorphous adenocarcinoma)",
"Neck dissection: levels I-VII, SND nomenclature by AAOHNS 2002/2008",
"Unknown primary workup: EUA + ipsilateral tonsillectomy + tongue base biopsy + PET-CT"],
"pm": ["Bethesda categories I-VI: management for each",
"Parathyroid embryology (3rd vs 4th pouch) and their final positions - why inferior glands are ectopic",
"Osteoradionecrosis: Marx staging, HBO therapy, sequestrectomy",
"45 MCQs on salivary glands, thyroid, neck"],
"eve": ["Comparison: MEN 2A vs 2B from memory; RET codon mutations"],
},
{
"day": "Day 23", "date": "Tue, 1 Jul", "topic": "Paediatric ENT Comprehensive Review",
"am": ["Congenital hearing loss causes: TORCH (CMV = most common viral), connexin 26, LVAS, Mondini",
"UNHS algorithm and audiological management of infants with hearing loss",
"Cochlear implantation in children: criteria, bilateral vs unilateral, age of implantation",
"Laryngomalacia: pathophysiology (short aryepiglottic folds), diagnosis (awake FNLS), supraglottoplasty indications"],
"pm": ["SGS Cotton-Myer grading + surgical management ladder",
"CHARGE syndrome: all 8 components (C-H-A-R-G-E)",
"Croup vs epiglottitis vs bacterial tracheitis: complete comparison table",
"Paediatric OSA: PSG criteria (AHI >1 in children), adenotonsillectomy first-line",
"45 MCQs on paediatric ENT"],
"eve": ["Stridor in neonates: differential by site (supraglottic, glottic, subglottic, tracheal)"],
},
{
"day": "Day 24", "date": "Wed, 2 Jul", "topic": "Mock Exam Day 1 + Targeted Revision",
"am": ["100-question timed mock exam: all ENT topics (60 minutes)",
"Strict exam conditions: no books, no notes"],
"pm": ["Analysis: topic-wise performance breakdown",
"Targeted revision of all incorrect answers (read relevant sections)",
"Classification systems speed drill: 15 minutes, all systems from memory"],
"eve": ["Identify final 3 weakest topics for Day 25 consolidation"],
},
{
"day": "Day 25", "date": "Thu, 3 Jul", "topic": "Mock Exam Day 2 + Final Consolidation",
"am": ["75-question timed mock exam: focused on H&N + paediatric ENT (45 minutes)",
"Cross-check with answer key; note pattern changes from Day 24"],
"pm": ["Focused revision of final 3 weak topics (45 min each)",
"Scott-Brown's 'Key Points' and 'Best Clinical Practice' boxes: rapid skim all volumes",
"High-yield one-liners and mnemonics final revision"],
"eve": ["Full mnemonic list revision (CHARGE, HINTS, COWS, Samter's, etc.)",
"Exam-day logistics and confidence review"],
},
],
},
]
CLASSIFICATION_TABLE = [
["House-Brackmann I-VI", "Facial nerve palsy grading"],
["Chandler I-V", "Orbital complications of sinusitis"],
["Wullstein I-V", "Tympanoplasty types"],
["Cotton-Myer I-IV", "Subglottic stenosis grading"],
["Koos I-IV", "Vestibular schwannoma (CPA extension)"],
["Fisch A-D", "Glomus jugulare extent"],
["Glasscock-Jackson I-IV", "Glomus tympanicum/jugulare"],
["Shamblin I-III", "Carotid body tumour"],
["Kadish A-C (+D)", "Olfactory neuroblastoma"],
["Krouse T1-T4", "Inverted papilloma staging"],
["Fisch I-IV (JNA)", "Juvenile nasopharyngeal angiofibroma"],
["Lund-Mackay (0-24)", "CT staging of chronic rhinosinusitis"],
["Cottle Areas 1-5", "Deviated nasal septum areas"],
["Jahrsdoerfer 0-10", "Aural atresia repair candidacy"],
["Nagata I-IV", "Microtia classification"],
["Bailey I-IV", "Branchial cyst classification"],
["ARIA 2x2", "Allergic rhinitis severity + duration"],
["AJCC 8th Ed. TNM", "All H&N cancers (separate for HPV+ OP)"],
["Ann Arbor I-IV", "Lymphoma staging"],
["Bethesda I-VI", "Thyroid cytology (FNA) classification"],
["Paradise criteria", "Tonsillectomy indications"],
["Meltzer 0-4", "Nasal polyp grading"],
]
MNEMONIC_TABLE = [
["CHARGE", "Coloboma, Heart defects, Atresia choanae, Retardation, Genital, Ear anomalies"],
["HINTS", "Head Impulse (N) + Nystagmus (unidirectional) + Test of Skew (N) = Peripheral"],
["COWS", "Cold Opposite, Warm Same (caloric nystagmus direction)"],
["Samter's Triad", "Asthma + Aspirin sensitivity + Nasal polyps (COX-1 → excess LTC4/D4)"],
["PCA = Abductor", "Posterior CricoArytenoid = ONLY abductor of vocal folds"],
["Gradenigo's Triad", "Petrous apicitis: VI nerve palsy + retroorbital pain + otorrhoea"],
["Plummer-Vinson / PBK", "Iron deficiency + postcricoid web + dysphagia + middle-aged woman"],
["Bezold's abscess", "Mastoiditis → tracks along SCM, points below mastoid tip"],
["Citelli's abscess", "Mastoiditis → posterior digastric region"],
["Frey's syndrome", "Post-parotidectomy gustatory sweating (auriculotemporal nerve re-routing)"],
["10s rule (salivary)", "80% in parotid; 80% parotid tumours benign; 80% benign = pleomorphic adenoma"],
["RRP HPV 6/11", "Recurrent respiratory papillomatosis — also same types as genital warts"],
["Carhart's notch", "2 kHz bone conduction dip in otosclerosis (mechanical, not true SNHL)"],
["Holman-Miller sign", "Anterior bowing of posterior maxillary sinus wall on angiography — JNA"],
["MEN 2A", "MTC + phaeochromocytoma + primary hyperparathyroidism (RET codon 634)"],
["MEN 2B", "MTC + phaeochromocytoma + marfanoid + mucosal neuromas (RET codon 918)"],
]
# ─── Document assembly ───────────────────────────────────────────────────────
def build_pdf(output_path):
doc = BaseDocTemplate(
output_path,
pagesize=A4,
leftMargin=1.8*cm,
rightMargin=1.8*cm,
topMargin=1.8*cm,
bottomMargin=1.4*cm,
)
frame_normal = Frame(
doc.leftMargin, doc.bottomMargin,
doc.width, doc.height,
leftPadding=0, rightPadding=0,
topPadding=0, bottomPadding=0,
)
frame_cover = Frame(
0, 0, A4[0], A4[1],
leftPadding=1.8*cm, rightPadding=1.8*cm,
topPadding=2*cm, bottomPadding=1*cm,
)
doc.addPageTemplates([
PageTemplate(id='Cover', frames=[frame_cover], onPage=cover_page),
PageTemplate(id='Normal', frames=[frame_normal], onPage=header_footer),
])
story = []
# ── COVER PAGE ────────────────────────────────────────────────────────────
story.append(Spacer(1, 3.2*cm))
story.append(Paragraph("ENT PG EXAMINATION", COVER_TITLE))
story.append(Paragraph("STUDY SCHEDULE", ParagraphStyle('_cs2', parent=COVER_TITLE, fontSize=22, leading=28)))
story.append(Spacer(1, 0.6*cm))
story.append(HRFlowable(width='70%', thickness=1.5, color=TEAL, spaceAfter=12, spaceBefore=0, hAlign='CENTER'))
story.append(Paragraph("Based on Scott-Brown's Otorhinolaryngology, Head & Neck Surgery (8th Ed.)", COVER_SUB))
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("10-Day First Reading (High Yield) + 3 × 5-Day Rapid Revision Blocks", COVER_INFO))
story.append(Paragraph("10 – 12 Hours Study Per Day", COVER_INFO))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width='40%', thickness=0.5, color=GREY_MED, spaceAfter=12, spaceBefore=0, hAlign='CENTER'))
story.append(Paragraph("Schedule Period: 9 June 2026 – 3 July 2026 (25 Days)", COVER_INFO))
story.append(Spacer(1, 2.0*cm))
# Schedule overview table on cover
overview = [
[Paragraph("PHASE", TABLE_HDR), Paragraph("DATES", TABLE_HDR), Paragraph("FOCUS", TABLE_HDR), Paragraph("DAYS", TABLE_HDR)],
[Paragraph("Phase 1: First Reading", TABLE_CELL_C), Paragraph("9 – 18 Jun 2026", TABLE_CELL_C),
Paragraph("High-Yield Topics: Ear (Days 1-5), Nose (Days 6-7), Larynx/H&N (Days 8-10)", TABLE_CELL), Paragraph("10", TABLE_CELL_C)],
[Paragraph("Revision Block 1", TABLE_CELL_C), Paragraph("19 – 23 Jun 2026", TABLE_CELL_C),
Paragraph("Complete Ear: Anatomy, Audiology, CSOM, Otosclerosis, Facial Nerve, Vertigo, CI", TABLE_CELL), Paragraph("5", TABLE_CELL_C)],
[Paragraph("Revision Block 2", TABLE_CELL_C), Paragraph("24 – 28 Jun 2026", TABLE_CELL_C),
Paragraph("Nose, Sinuses, Larynx, Voice, Pharynx, Tonsils, Hypopharynx, Oesophagus", TABLE_CELL), Paragraph("5", TABLE_CELL_C)],
[Paragraph("Revision Block 3", TABLE_CELL_C), Paragraph("29 Jun – 3 Jul 2026", TABLE_CELL_C),
Paragraph("H&N Oncology, Paediatric ENT, Mock Exams, Final Consolidation", TABLE_CELL), Paragraph("5", TABLE_CELL_C)],
]
ov_table = Table(overview, colWidths=[3.5*cm, 3.2*cm, 8.0*cm, 1.5*cm])
ov_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), DARK_BLUE),
('ROWBACKGROUNDS', (0,1), (-1,-1), [HexColor('#1e4a7a'), HexColor('#1a3d6e')]),
('GRID', (0,0), (-1,-1), 0.3, HexColor('#2d5f9a')),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TEXTCOLOR', (0,1), (-1,-1), WHITE),
]))
story.append(ov_table)
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("Daily Schedule: 07:00–13:00 Morning Block (6 hrs) | 14:00–18:00 Afternoon Block (4 hrs) | 19:00–21:00 Evening Block (2 hrs)",
ParagraphStyle('_ci2', parent=COVER_INFO, fontSize=9, textColor=GREY_LIGHT)))
# Switch to normal template
story.append(PageBreak())
story.append(NextPageTemplate_hack := type('_NPT', (), {'__class__': type})())
# Manually insert next-page template switch using a Flowable trick
from reportlab.platypus import ActionFlowable
story[-1] = ActionFlowable(('nextPageTemplate', 'Normal'))
# ── DAILY TIME BLOCK LEGEND ───────────────────────────────────────────────
story.append(colored_bar("DAILY STUDY BLOCK STRUCTURE", DARK_BLUE))
story.append(Spacer(1, 6))
block_data = [
[Paragraph("Block", TABLE_HDR), Paragraph("Time", TABLE_HDR), Paragraph("Duration", TABLE_HDR), Paragraph("Purpose", TABLE_HDR)],
[Paragraph("Morning", TABLE_CELL_C), Paragraph("07:00 – 13:00", TABLE_CELL_C), Paragraph("6 hours", TABLE_CELL_C), Paragraph("New topic study / deep reading from Scott-Brown's", TABLE_CELL)],
[Paragraph("Break", TABLE_CELL_C), Paragraph("13:00 – 14:00", TABLE_CELL_C), Paragraph("1 hour", TABLE_CELL_C), Paragraph("Lunch + rest — do NOT skip this", TABLE_CELL)],
[Paragraph("Afternoon", TABLE_CELL_C), Paragraph("14:00 – 18:00", TABLE_CELL_C), Paragraph("4 hours", TABLE_CELL_C), Paragraph("MCQ practice + case vignettes + classification revision", TABLE_CELL)],
[Paragraph("Break", TABLE_CELL_C), Paragraph("18:00 – 19:00", TABLE_CELL_C), Paragraph("1 hour", TABLE_CELL_C), Paragraph("Dinner + exercise (15-20 min walk recommended)", TABLE_CELL)],
[Paragraph("Evening", TABLE_CELL_C), Paragraph("19:00 – 21:00", TABLE_CELL_C), Paragraph("2 hours", TABLE_CELL_C), Paragraph("Rapid revision + notes consolidation + flashcard review", TABLE_CELL)],
]
story.append(make_table(["Block","Time","Duration","Purpose"], block_data[1:], [2.5*cm, 3.0*cm, 2.0*cm, 10.0*cm]))
story.append(Spacer(1, 10))
story.append(Paragraph("NOTE: MCQ targets are minimum. Aim for 50-75% of daily study time actively engaging with clinical scenarios, not passive reading.", NOTE_STYLE))
story.append(Spacer(1, 10))
# ── PHASE 1: 10-DAY FIRST READING ────────────────────────────────────────
story.append(PageBreak())
story.append(colored_bar("PHASE 1: 10-DAY FIRST READING — HIGH YIELD TOPICS (9–18 Jun 2026)", DARK_BLUE))
story.append(Paragraph("Focus: Build strong conceptual foundation across all ENT domains. Read Scott-Brown's actively — do not skip Key Points boxes.", NOTE_STYLE))
story.append(Spacer(1, 8))
for d in PHASE1_DAYS:
# Day header bar
day_bar_data = [[
Paragraph(f"{d['day']} | {d['date']}", DAY_HEADER),
Paragraph(d['title'], ParagraphStyle('_dts', parent=DAY_HEADER, fontSize=10, alignment=1))
]]
day_bar = Table(day_bar_data, colWidths=[4.5*cm, 13.0*cm])
day_bar.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), d['phase_color']),
('LEFTPADDING', (0,0), (-1,-1), 8),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 8),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
blocks = [day_bar, Spacer(1, 3)]
for blk_label, emoji, bg, key in [
("Morning Block (07:00 – 13:00) | Deep Study", "☀", LIGHT_BLUE, 'morning'),
("Afternoon Block (14:00 – 18:00) | MCQs + Application", "📚", ORANGE_LIGHT, 'afternoon'),
("Evening Block (19:00 – 21:00) | Rapid Revision", "🌙", PURPLE_LIGHT, 'evening'),
]:
for item in session_box(blk_label, emoji, bg, d[key], DARK_BLUE):
blocks.append(item)
blocks.append(HRFlowable(width='100%', thickness=0.4, color=GREY_MED, spaceAfter=6, spaceBefore=4))
story.append(KeepTogether(blocks[:8])) # keep day header + morning together
for b in blocks[8:]:
story.append(b)
# ── REVISION BLOCKS ───────────────────────────────────────────────────────
for blk in REVISION_BLOCKS:
story.append(PageBreak())
story.append(colored_bar(f"{blk['phase']} | {blk['dates']}", blk['color']))
story.append(Paragraph(f"Focus: {blk['focus']}", ParagraphStyle('_rf', parent=NOTE_STYLE, textColor=blk['color'])))
story.append(Spacer(1, 8))
for d in blk['days']:
# Day header
day_bar_data = [[
Paragraph(f"{d['day']} | {d['date']}", DAY_HEADER),
Paragraph(d['topic'], ParagraphStyle('_dts2', parent=DAY_HEADER, fontSize=10, alignment=1))
]]
day_bar = Table(day_bar_data, colWidths=[3.8*cm, 13.7*cm])
day_bar.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), blk['color']),
('LEFTPADDING', (0,0), (-1,-1), 8),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('RIGHTPADDING', (0,0), (-1,-1), 8),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(day_bar)
story.append(Spacer(1, 3))
for item in session_box("Morning Block (07:00–13:00)", "☀", blk['bg'], d['am'], blk['color']):
story.append(item)
for item in session_box("Afternoon Block (14:00–18:00)", "📚", ORANGE_LIGHT, d['pm'], blk['color']):
story.append(item)
for item in session_box("Evening Block (19:00–21:00)", "🌙", PURPLE_LIGHT, d['eve'], blk['color']):
story.append(item)
story.append(HRFlowable(width='100%', thickness=0.4, color=GREY_MED, spaceAfter=4, spaceBefore=3))
# ── CLASSIFICATION SYSTEMS ────────────────────────────────────────────────
story.append(PageBreak())
story.append(colored_bar("MASTER CLASSIFICATION SYSTEMS — HIGH YIELD FOR PG EXAM", DARK_BLUE))
story.append(Spacer(1, 6))
cls_data = [[Paragraph("Classification / System", TABLE_HDR), Paragraph("Topic / Application", TABLE_HDR)]]
for row in CLASSIFICATION_TABLE:
cls_data.append([Paragraph(row[0], ParagraphStyle('_cb', parent=TABLE_CELL, fontName='Helvetica-Bold', textColor=DARK_BLUE)),
Paragraph(row[1], TABLE_CELL)])
cls_t = Table(cls_data, colWidths=[6.5*cm, 11.0*cm], repeatRows=1)
cls_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), DARK_BLUE),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREY_LIGHT]),
('GRID', (0,0), (-1,-1), 0.3, GREY_MED),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
story.append(cls_t)
# ── MNEMONICS ─────────────────────────────────────────────────────────────
story.append(Spacer(1, 14))
story.append(colored_bar("HIGH-YIELD MNEMONICS & KEY FACTS", TEAL))
story.append(Spacer(1, 6))
mn_data = [[Paragraph("Mnemonic / Eponym", TABLE_HDR), Paragraph("Meaning / Clinical Relevance", TABLE_HDR)]]
for row in MNEMONIC_TABLE:
mn_data.append([Paragraph(row[0], ParagraphStyle('_mb', parent=TABLE_CELL, fontName='Helvetica-Bold', textColor=TEAL)),
Paragraph(row[1], TABLE_CELL)])
mn_t = Table(mn_data, colWidths=[4.5*cm, 13.0*cm], repeatRows=1)
mn_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), TEAL),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, TEAL_LIGHT]),
('GRID', (0,0), (-1,-1), 0.3, GREY_MED),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
story.append(mn_t)
# ── SCOTT-BROWN PRIORITY CHAPTERS ────────────────────────────────────────
story.append(PageBreak())
story.append(colored_bar("SCOTT-BROWN'S — PRIORITY CHAPTERS BY VOLUME", GREEN))
story.append(Spacer(1, 8))
vol_data = [
("Volume 2: Otology & Audiology", MED_BLUE, [
"Anatomy of the ear (external, middle, inner) — surgical landmarks",
"Physiology of hearing and balance",
"Acute and chronic otitis media, cholesteatoma",
"Otosclerosis and tympanosclerosis",
"Facial nerve anatomy, pathology and surgical rehabilitation",
"Sensorineural hearing loss: causes, investigations, management",
"BPPV, Meniere's disease, vestibular neuritis, SSC dehiscence",
"Vestibular schwannoma: diagnosis, Koos grading, surgical approaches",
"Cochlear implants, BAHA, middle ear implants",
"Newborn hearing screening",
]),
("Volume 1: Basic Sciences, Rhinology, Laryngology", TEAL, [
"Applied anatomy: nose, paranasal sinuses, larynx, pharynx",
"Allergic rhinitis (ARIA classification), immunotherapy",
"Chronic rhinosinusitis + FESS (Stammberger, Draf procedures)",
"Nasal polyps: medical and surgical management, biologics",
"Epistaxis: management algorithm, SPA ligation",
"Sinonasal tumours: JNA, inverted papilloma, esthesioneuroblastoma",
"Voice disorders: nodules, polyps, RRP, Reinke's oedema",
"Laryngeal carcinoma: staging, organ preservation, rehabilitation",
"Dysphagia: Zenker's diverticulum, LPR, swallowing evaluation",
]),
("Volume 3: Head & Neck Surgery + Paediatric ENT", GREEN, [
"Oral cavity and oropharyngeal SCC (HPV+ vs HPV- staging)",
"Neck dissection: classification, indications, surgical anatomy",
"Salivary gland tumours (pleomorphic adenoma, ACC, MEC)",
"Thyroid cancer (Bethesda, papillary/follicular/medullary/anaplastic)",
"Skull base surgery: approaches, glomus tumours, petrous apex",
"Free flap reconstruction: selection, anatomy, monitoring",
"Paediatric hearing loss: genetics, cochlear implants",
"Paediatric airway: laryngomalacia, SGS, croup, epiglottitis, CHARGE",
"Branchial anomalies, thyroglossal cyst, neck masses in children",
"Paediatric OSA: adenotonsillectomy, CPAP",
]),
]
for title, color, items in vol_data:
vol_bar = colored_bar(title, color)
story.append(vol_bar)
for item in items:
story.append(Paragraph(f"• {item}", BULLET))
story.append(Spacer(1, 8))
# ── BACK COVER NOTE ────────────────────────────────────────────────────────
story.append(Spacer(1, 10))
story.append(HRFlowable(width='100%', thickness=0.5, color=GREY_MED))
story.append(Spacer(1, 6))
story.append(Paragraph(
"This schedule is structured around Scott-Brown's Otorhinolaryngology Head & Neck Surgery (8th Ed.), "
"the primary reference for ENT PG examinations. Supplement MCQ practice with a dedicated question bank "
"(e.g. Logan Turner, FRCS ORL-HNS question banks, or Samy's ENT). Every Key Points box in Scott-Brown's "
"is exam-relevant — do not skip them during the first reading.",
ParagraphStyle('_fn', parent=BULLET, fontSize=8.5, textColor=HexColor('#334155'), leading=13)
))
doc.build(story)
print(f"PDF generated: {output_path}")
if __name__ == '__main__':
build_pdf('/home/daytona/workspace/ent-schedule/ENT_PG_Study_Schedule.pdf')
Give me the format
Create a Word document version instead of PDF