Tell me some pedogogy topics for final year postgraduates

Here are some relevant pedagogy topics well-suited for final year postgraduate students:

Core Theoretical Frameworks

  1. Constructivism and Social Learning Theory - Vygotsky's Zone of Proximal Development, scaffolding, and collaborative knowledge construction
  2. Transformative Learning Theory - Mezirow's model; how critical reflection changes learners' frames of reference
  3. Andragogy vs. Pedagogy - Malcolm Knowles' principles of adult learning and their application in higher education
  4. Communities of Practice - Lave & Wenger; situated learning and legitimate peripheral participation

Curriculum Design & Assessment

  1. Backward Design (Understanding by Design) - Wiggins & McTighe's framework: start with desired outcomes, then plan instruction
  2. Competency-Based Education (CBE) - Designing curricula around demonstrated skills rather than seat time
  3. Authentic Assessment - Real-world tasks, portfolios, rubrics, and performance-based evaluation
  4. Bloom's Taxonomy (Revised) - Aligning learning objectives, instruction, and assessment across cognitive levels
  5. Constructive Alignment - Biggs' model ensuring learning activities and assessments align with intended outcomes

Advanced Instructional Strategies

  1. Problem-Based Learning (PBL) - Ill-structured problems as the starting point for inquiry
  2. Flipped Classroom Models - Pre-class content delivery and in-class active learning
  3. Inquiry-Based and Discovery Learning - Learner-driven exploration over direct instruction
  4. Differentiated Instruction - Meeting diverse learner needs through varied content, process, and product
  5. Universal Design for Learning (UDL) - Building inclusive curricula for all learner profiles

Higher Education Specific Topics

  1. Research-Led and Research-Informed Teaching - Integrating disciplinary research into teaching practice
  2. Doctoral Pedagogy - Supervising postgraduate research; the supervisor-student relationship
  3. Threshold Concepts - Meyer & Land; "troublesome knowledge" that transforms disciplinary understanding
  4. Academic Literacies - Lea & Street's model; how students learn to write and think in academic disciplines
  5. Critical Pedagogy - Freire's work; education as a tool for social justice and empowerment

Technology & Contemporary Issues

  1. Technology-Enhanced Learning (TEL) - Learning management systems, AI tools, and digital pedagogy
  2. Heutagogy (Self-Determined Learning) - Beyond andragogy; learner-directed study in complex domains
  3. Open Educational Resources (OER) & Open Pedagogy - Remix, reuse, and co-creation with students
  4. Learning Analytics - Using data to understand and improve student learning outcomes
  5. AI in Education - Ethics, opportunities, and risks of generative AI tools in postgraduate learning

Reflective Practice & Professional Development

  1. Reflective Practice - Schon's reflective practitioner; reflection-in-action vs. reflection-on-action
  2. Scholarship of Teaching and Learning (SoTL) - Systematic inquiry into one's own teaching practice
  3. Mentoring and Coaching in Academic Contexts - Distinct roles and their impact on learner development
  4. Academic Identity Development - How postgraduates transition from student to researcher/professional

These topics span theory, practice, technology, and professional development - giving final year PG students a strong foundation for careers in research, academia, or professional training. Would you like a deeper dive into any particular area, or a reading list for specific topics?

for ms general surgery practical’s exams

Here are key pedagogy topics specifically for MS General Surgery practical/clinical examinations for final year postgraduate students:

1. Clinical Assessment Methods

  • Long Case & Short Case Examination - Structured approach to history, examination, differential diagnosis, and management plan
  • Objective Structured Clinical Examination (OSCE) - Station-based assessment of surgical skills, clinical reasoning, and communication
  • Direct Observation of Procedural Skills (DOPS) - Real-time assessment of technical procedures (suturing, catheterization, chest drain, etc.)
  • Mini-Clinical Evaluation Exercise (Mini-CEX) - Snapshot assessment of clinical encounters in outpatient, ward, or emergency settings
  • Case-Based Discussion (CBD) - In-depth exploration of clinical reasoning using actual patient cases

2. Surgical Skills Assessment

  • Operative Competency Assessment Tool (OCAT) - Evaluating intraoperative performance on specific procedures
  • Procedure-Based Assessment (PBA) - Grading surgical trainees on defined index operations (appendectomy, herniorrhaphy, thyroidectomy, etc.)
  • Simulation-Based Assessment - Box trainers, laparoscopic simulators, cadaveric labs; assessing skills before live patient exposure
  • Technical Skills Rubrics - Economy of motion, tissue handling, instrument use, decision-making under pressure
  • Global Rating Scales (e.g., OSATS) - Objective Structured Assessment of Technical Skills for operative competency

3. Viva Voce (Oral Examination) Pedagogy

  • Structured Oral Examination design - Framing questions to probe knowledge depth, not just recall
  • Probing vs. Leading Questions - Techniques examiners use to assess reasoning and clinical judgment
  • Standardization of Viva Marking - Inter-examiner reliability, anchor statements, and structured marking schemes
  • Candidate preparation strategies - Thinking aloud, handling uncertainty, systematic answering frameworks

4. Competency-Based Surgical Education (CBME)

  • Entrustable Professional Activities (EPAs) - Core surgical activities a trainee can perform unsupervised (e.g., emergency laparotomy, bowel resection)
  • Milestone-Based Progression - Defining observable behaviors at each stage of surgical training
  • Formative vs. Summative Assessment - Continuous workplace-based assessment vs. high-stakes final examination
  • Portfolio Assessment - Logbooks, case records, reflective practice entries as evidence of competence

5. Clinical Reasoning in Surgery

  • Hypothetico-Deductive Reasoning - How surgeons generate and test diagnostic hypotheses
  • Pattern Recognition vs. Analytical Thinking - Dual process theory applied to surgical diagnosis
  • Surgical Decision-Making Frameworks - Teaching trainees when to operate, when to watch, when to refer
  • Situational Awareness - Recognizing deteriorating patients, intraoperative crises, and team dynamics

6. Teaching in the Operating Theatre

  • Cognitive Task Analysis (CTA) - Breaking down complex operative steps for explicit teaching
  • See One, Do One, Teach One (SODOTO) - Limitations and modern alternatives
  • Deliberate Practice - Focused, goal-directed repetition with feedback in surgical training
  • Intraoperative Teaching Techniques - Talk-through, hand-on-hand, progressive autonomy models
  • The "Surgical Apprenticeship" Model - Historical context and its evolution toward structured supervision

7. Feedback in Surgical Training

  • Structured Feedback Models - Pendleton's rules, SET-GO framework, R2C2 model applied to surgery
  • Feedback Culture in Surgery - Addressing hierarchical barriers to honest feedback
  • Video-Assisted Feedback - Using recorded operative footage for debriefing and self-assessment
  • Self-Assessment Accuracy - Why surgical trainees often overestimate or underestimate their own competence

8. Examiner Training & Standard Setting

  • Blueprint Development - Mapping exam content to the surgical curriculum (e.g., NBE/MCI regulations in India)
  • Standard Setting Methods - Angoff method, borderline regression for pass/fail decisions
  • Examiner Bias and Calibration - Halo effect, stringency/leniency bias in viva and OSCE
  • Blueprinting for Practical Exams - Ensuring all surgical domains (GI, hepatobiliary, breast, endocrine, trauma, etc.) are covered

9. Professionalism & Communication

  • Breaking Bad News (SPIKES Protocol) - Teaching trainees to communicate cancer diagnoses, operative complications
  • Informed Consent as a Teaching Tool - Assessing understanding of procedure, risks, alternatives
  • Surgical Ethics in Assessment - Futility, refusal of surgery, end-of-life decisions as exam scenarios
  • Team Communication (SBAR, Handover) - Assessing structured communication in surgical handover scenarios

10. Curriculum Mapping for MS General Surgery

  • MCI/NBE Competency Framework - Mapping practical exam content to the Indian postgraduate surgical curriculum
  • Index Procedure Lists - Defining minimum operative numbers and case mix for certification
  • Logbook Verification as Assessment - Ensuring authenticity, quality over quantity
  • Integrated Theory-Practice Assessment - Connecting written paper performance with clinical competence

Quick Reference: Common MS Surgery Practical Exam Stations

StationKey Assessment Focus
Long caseHistory, examination, diagnosis, management plan
Short casesFocused clinical signs (hernia, thyroid, varicose veins, etc.)
Operative surgery vivaSteps, anatomy, complications, decision-making
Instruments/specimensIdentification, indications, technique
X-ray/imagingSystematic interpretation, surgical relevance
Suturing/skillsTechnique, knot-tying, wound closure
Radiology/histopathologyIntegration with clinical context

Would you like help designing specific exam stations, marking rubrics, question banks, or a full OSCE blueprint for any of these areas?

Generate a study guide PDF for MS surgery OSCE stations

Reading File
Running Command

mkdir -p /tmp/workspace/ms-surgery-osce && ls /tmp/workspace/ms-surgery-osce/

Writing File

~/ms-surgery-osce/generate_guide.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    PageBreak, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.pdfgen import canvas as canv_module

OUTPUT = "/tmp/workspace/ms-surgery-osce/MS_Surgery_OSCE_Study_Guide.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1B3A6B")
MED_BLUE    = colors.HexColor("#2E6DA4")
LIGHT_BLUE  = colors.HexColor("#D6E4F0")
ACCENT_RED  = colors.HexColor("#C0392B")
ACCENT_GREEN= colors.HexColor("#1A7F4B")
GOLD        = colors.HexColor("#D4AC0D")
LIGHT_GREY  = colors.HexColor("#F4F6F7")
MID_GREY    = colors.HexColor("#BDC3C7")
WHITE       = colors.white
BLACK       = colors.black

# ── Page numbering ───────────────────────────────────────────────────────────
class NumberedCanvas(canv_module.Canvas):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_number(num_pages)
            canv_module.Canvas.showPage(self)
        canv_module.Canvas.save(self)

    def draw_page_number(self, page_count):
        self.setFont("Helvetica", 8)
        self.setFillColor(MID_GREY)
        self.drawRightString(A4[0] - 1.5*cm, 1*cm,
                             f"Page {self._pageNumber} of {page_count}")
        self.drawString(1.5*cm, 1*cm,
                        "MS General Surgery - OSCE Study Guide 2026")

# ── Header/Footer on each page ───────────────────────────────────────────────
def header_footer(canvas, doc):
    canvas.saveState()
    # Top bar
    canvas.setFillColor(DARK_BLUE)
    canvas.rect(0, A4[1] - 1.2*cm, A4[0], 1.2*cm, fill=1, stroke=0)
    canvas.setFont("Helvetica-Bold", 10)
    canvas.setFillColor(WHITE)
    canvas.drawString(1.5*cm, A4[1] - 0.85*cm,
                      "MS General Surgery  |  OSCE Clinical Study Guide")
    canvas.restoreState()

# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

title_style = ParagraphStyle("Title", parent=styles["Title"],
    fontSize=28, textColor=WHITE, alignment=TA_CENTER,
    fontName="Helvetica-Bold", spaceAfter=8)

subtitle_style = ParagraphStyle("Subtitle", parent=styles["Normal"],
    fontSize=14, textColor=LIGHT_BLUE, alignment=TA_CENTER,
    fontName="Helvetica", spaceAfter=6)

h1 = ParagraphStyle("H1", parent=styles["Heading1"],
    fontSize=16, textColor=WHITE, fontName="Helvetica-Bold",
    spaceBefore=14, spaceAfter=6, backColor=MED_BLUE,
    leftIndent=-10, rightIndent=-10, borderPadding=(6, 10, 6, 10))

h2 = ParagraphStyle("H2", parent=styles["Heading2"],
    fontSize=13, textColor=DARK_BLUE, fontName="Helvetica-Bold",
    spaceBefore=10, spaceAfter=4, borderPadding=(0,0,2,0),
    borderColor=DARK_BLUE, borderWidth=0)

h3 = ParagraphStyle("H3", parent=styles["Heading3"],
    fontSize=11, textColor=MED_BLUE, fontName="Helvetica-Bold",
    spaceBefore=8, spaceAfter=3)

body = ParagraphStyle("Body", parent=styles["Normal"],
    fontSize=9.5, textColor=BLACK, fontName="Helvetica",
    leading=14, spaceAfter=4, alignment=TA_JUSTIFY)

bullet = ParagraphStyle("Bullet", parent=styles["Normal"],
    fontSize=9.5, textColor=BLACK, fontName="Helvetica",
    leading=13, spaceAfter=3, leftIndent=14,
    bulletIndent=4)

small = ParagraphStyle("Small", parent=styles["Normal"],
    fontSize=8.5, textColor=colors.HexColor("#555555"),
    fontName="Helvetica-Italic", leading=12)

tip_style = ParagraphStyle("Tip", parent=styles["Normal"],
    fontSize=9, textColor=ACCENT_GREEN, fontName="Helvetica-Bold",
    leading=13, leftIndent=10)

warn_style = ParagraphStyle("Warn", parent=styles["Normal"],
    fontSize=9, textColor=ACCENT_RED, fontName="Helvetica-Bold",
    leading=13, leftIndent=10)

# ── Helper builders ──────────────────────────────────────────────────────────
def section_header(text):
    return [
        Spacer(1, 0.3*cm),
        Table([[Paragraph(text, ParagraphStyle("SH", parent=h1,
                fontSize=14, textColor=WHITE, fontName="Helvetica-Bold",
                alignment=TA_LEFT, spaceBefore=0, spaceAfter=0))]],
              colWidths=[17*cm],
              style=TableStyle([
                  ("BACKGROUND", (0,0), (-1,-1), MED_BLUE),
                  ("TOPPADDING",  (0,0), (-1,-1), 7),
                  ("BOTTOMPADDING",(0,0), (-1,-1), 7),
                  ("LEFTPADDING", (0,0), (-1,-1), 12),
                  ("ROWBACKGROUNDS", (0,0), (-1,-1), [MED_BLUE]),
              ])),
        Spacer(1, 0.2*cm),
    ]

def sub_header(text):
    return [
        Spacer(1, 0.15*cm),
        Paragraph(text, h2),
        HRFlowable(width="100%", thickness=1.5, color=MED_BLUE, spaceAfter=4),
    ]

def b(text):
    return Paragraph(f"<b>{text}</b>", body)

def bp(text):
    return Paragraph(f"&#8226;  {text}", bullet)

def tip(text):
    return Table([[Paragraph(f"&#9989;  EXAMINER TIP: {text}", tip_style)]],
                 colWidths=[17*cm],
                 style=TableStyle([
                     ("BACKGROUND",(0,0),(-1,-1), colors.HexColor("#E9F7EF")),
                     ("TOPPADDING",(0,0),(-1,-1),5),
                     ("BOTTOMPADDING",(0,0),(-1,-1),5),
                     ("LEFTPADDING",(0,0),(-1,-1),10),
                     ("BOX",(0,0),(-1,-1),1,ACCENT_GREEN),
                 ]))

def warn(text):
    return Table([[Paragraph(f"&#9888;  WATCH OUT: {text}", warn_style)]],
                 colWidths=[17*cm],
                 style=TableStyle([
                     ("BACKGROUND",(0,0),(-1,-1), colors.HexColor("#FDEDEC")),
                     ("TOPPADDING",(0,0),(-1,-1),5),
                     ("BOTTOMPADDING",(0,0),(-1,-1),5),
                     ("LEFTPADDING",(0,0),(-1,-1),10),
                     ("BOX",(0,0),(-1,-1),1,ACCENT_RED),
                 ]))

def make_table(headers, rows, col_widths=None):
    data = [[Paragraph(f"<b>{h}</b>",
             ParagraphStyle("TH", parent=body, fontSize=9,
                            textColor=WHITE, fontName="Helvetica-Bold"))
             for h in headers]]
    for row in rows:
        data.append([Paragraph(str(c),
                     ParagraphStyle("TD", parent=body, fontSize=9))
                     for c in row])
    if col_widths is None:
        col_widths = [17*cm / len(headers)] * len(headers)
    t = Table(data, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle([
        ("BACKGROUND",   (0,0), (-1,0),  DARK_BLUE),
        ("ROWBACKGROUNDS",(0,1),(-1,-1), [LIGHT_GREY, WHITE]),
        ("GRID",         (0,0), (-1,-1), 0.4, MID_GREY),
        ("TOPPADDING",   (0,0), (-1,-1), 5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 5),
        ("LEFTPADDING",  (0,0), (-1,-1), 6),
        ("VALIGN",       (0,0), (-1,-1), "TOP"),
    ]))
    return t

# ════════════════════════════════════════════════════════════════════════════
# CONTENT
# ════════════════════════════════════════════════════════════════════════════
story = []

# ── COVER PAGE ───────────────────────────────────────────────────────────────
cover_table = Table([[
    Paragraph("MS GENERAL SURGERY", title_style),
    ]],
    colWidths=[17*cm])
cover_table.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), DARK_BLUE),
    ("TOPPADDING",(0,0),(-1,-1),30),
    ("BOTTOMPADDING",(0,0),(-1,-1),10),
    ("LEFTPADDING",(0,0),(-1,-1),20),
    ("RIGHTPADDING",(0,0),(-1,-1),20),
    ("BOX",(0,0),(-1,-1),2,GOLD),
]))
story.append(Spacer(1, 3.5*cm))
story.append(cover_table)
story.append(Spacer(1, 0.4*cm))

sub_box = Table([[
    Paragraph("OSCE CLINICAL EXAMINATION", subtitle_style),
    Paragraph("Comprehensive Study Guide for Final Year Postgraduates", subtitle_style),
    Paragraph("2026 Edition", ParagraphStyle("Ed", parent=subtitle_style,
              fontSize=11, textColor=GOLD)),
]],colWidths=[17*cm])
sub_box.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1),MED_BLUE),
    ("TOPPADDING",(0,0),(-1,-1),8),
    ("BOTTOMPADDING",(0,0),(-1,-1),10),
    ("LEFTPADDING",(0,0),(-1,-1),20),
]))
story.append(sub_box)
story.append(Spacer(1, 1.5*cm))

# Quick info box
info_data = [
    ["Examination", "MS General Surgery Practical Examination"],
    ["Guide Coverage", "10 Core OSCE Station Types"],
    ["Standard", "NBE / University PG Curriculum"],
    ["Year", "Final Year (3rd Year MS)"],
]
info_t = Table(info_data, colWidths=[5*cm, 12*cm])
info_t.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(0,-1),LIGHT_BLUE),
    ("ROWBACKGROUNDS",(1,0),(1,-1),[WHITE, LIGHT_GREY]*5),
    ("GRID",(0,0),(-1,-1),0.5,MID_GREY),
    ("FONTNAME",(0,0),(0,-1),"Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1),9.5),
    ("TOPPADDING",(0,0),(-1,-1),7),
    ("BOTTOMPADDING",(0,0),(-1,-1),7),
    ("LEFTPADDING",(0,0),(-1,-1),10),
]))
story.append(info_t)
story.append(PageBreak())

# ── HOW TO USE THIS GUIDE ────────────────────────────────────────────────────
story += section_header("How to Use This Guide")
story.append(Paragraph(
    "This study guide covers the <b>10 core OSCE station types</b> you will encounter in the "
    "MS General Surgery final examination. Each station section includes: the clinical scenario "
    "format, a structured response framework, key clinical content, examiner tips, and common "
    "pitfalls to avoid. Use this alongside your operative logbook and case-based revision.", body))
story.append(Spacer(1, 0.3*cm))

overview_data = [
    ["#", "Station Type", "Duration", "Marks"],
    ["1", "Long Case - History & Clinical Examination", "30 min", "30"],
    ["2", "Short Cases - Clinical Signs", "5-7 min each", "20"],
    ["3", "Operative Surgery Viva", "10-15 min", "20"],
    ["4", "Surgical Instruments & Specimens", "5 min", "10"],
    ["5", "Radiology / Imaging Interpretation", "5-7 min", "10"],
    ["6", "Procedural Skills / Suturing", "10 min", "15"],
    ["7", "Histopathology Specimens", "5 min", "10"],
    ["8", "Pre-operative Assessment Station", "5-7 min", "10"],
    ["9", "Communication & Consent Station", "7-10 min", "10"],
    ["10","Emergency Scenario / Critical Appraisal", "10 min", "15"],
]
story.append(make_table(overview_data[0], overview_data[1:],
             col_widths=[1*cm, 8.5*cm, 3.5*cm, 4*cm]))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 1: LONG CASE
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 1: Long Case - History & Clinical Examination")
story.append(Paragraph(
    "The long case is the cornerstone of the MS Surgery practical. You are given 30 minutes "
    "alone with the patient, followed by 15-20 minutes of examination by two examiners. "
    "It tests integrated clinical skills: history-taking, physical examination, differential "
    "diagnosis, investigation planning, and surgical management.", body))

story += sub_header("Structured Approach: SOAP Framework")
soap = [
    ["S - Subjective", "Chief complaint, history of presenting illness, past surgical/medical history, drug history, family history, social history"],
    ["O - Objective", "General examination, vital signs, systemic examination, local surgical examination (inspection, palpation, percussion, auscultation)"],
    ["A - Assessment", "Most likely diagnosis, differential diagnoses ranked by probability, complications present"],
    ["P - Plan", "Investigations needed, pre-op workup, surgical options, perioperative care, prognosis"],
]
story.append(make_table(["Component", "What to Cover"], soap, col_widths=[4*cm, 13*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Common Long Case Conditions")
lc_conditions = [
    "Carcinoma of the colon / rectum - staging, management algorithm",
    "Carcinoma of the stomach - presentation, TNM staging, surgical options",
    "Carcinoma of the thyroid - types, workup (FNAC, TFTs, USG), surgery",
    "Carcinoma of the breast - triple assessment, staging, modified radical mastectomy",
    "Portal hypertension / cirrhosis with complications",
    "Obstructive jaundice - benign vs malignant causes, Whipple's procedure",
    "Chronic pancreatitis / pancreatic pseudocyst",
    "Large bowel obstruction / pseudo-obstruction",
    "Peripheral arterial disease / critical limb ischaemia",
    "Diabetic foot - Wagner grading, vascular vs neuropathic, management",
]
for c in lc_conditions:
    story.append(bp(c))
story.append(Spacer(1, 0.3*cm))
story.append(tip("Always present your case as if to a senior colleague: 'I reviewed a 55-year-old male with a 3-month history of altered bowel habits and weight loss. On examination...' Structure saves marks."))
story.append(Spacer(1,0.2*cm))
story.append(warn("Never skip the RECTAL EXAMINATION in colorectal cases. Examiners will specifically ask if you performed it."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 2: SHORT CASES
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 2: Short Cases - Clinical Signs")
story.append(Paragraph(
    "Short cases test your ability to rapidly identify and describe surgical signs. "
    "You will be shown 4-6 patients/models and asked to examine a specific region and "
    "give a diagnosis with brief management. Time is limited - be systematic and fast.", body))

story += sub_header("High-Yield Short Case Topics by System")

sc_data = [
    ["System", "Key Short Case Topics"],
    ["Neck & Thyroid", "Goitre (solitary nodule vs MNG), thyroglossal cyst, branchial cyst, cervical lymphadenopathy, carotid body tumour"],
    ["Breast", "Fibroadenoma, breast abscess, carcinoma (skin tethering, peau d'orange), Paget's disease of nipple"],
    ["Hernia", "Inguinal (direct vs indirect), femoral, umbilical, incisional, Spigelian hernia"],
    ["Abdomen", "Hepatomegaly, splenomegaly, ascites, abdominal mass (kidney vs other), stomas"],
    ["Peripheral Vascular", "Varicose veins (Trendelenburg test, tourniquet test), arterial ulcer vs venous ulcer, DVT signs"],
    ["Skin & Soft Tissue", "Sebaceous cyst, lipoma, dermoid cyst, ganglion, pyogenic granuloma, malignant melanoma"],
    ["Anorectal", "Haemorrhoids, fissure-in-ano, fistula-in-ano, pilonidal sinus, rectal prolapse"],
    ["Scrotum", "Hydrocele, epididymo-orchitis, testicular tumour, varicocele, epididymal cyst"],
    ["Paediatric", "Inguinal hernia in child, undescended testis, hypospadias, Hirschsprung's disease"],
]
story.append(make_table(sc_data[0], sc_data[1:], col_widths=[4.5*cm, 12.5*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Short Case Response Template")
for step in [
    "<b>Step 1 - General inspection:</b> 'On inspection, I see a swelling in the right groin region, approximately 4x3 cm, with no overlying skin changes...'",
    "<b>Step 2 - Specific findings:</b> Describe site, size, shape, surface, edge, consistency, reducibility, transillumination, pulsatility, bruit",
    "<b>Step 3 - Diagnosis:</b> 'My diagnosis is an indirect inguinal hernia based on...'",
    "<b>Step 4 - Differentials:</b> Offer 1-2 alternatives with reasoning",
    "<b>Step 5 - Management outline:</b> 'I would manage this with...' (conservative / surgical)",
]:
    story.append(bp(step))
story.append(Spacer(1,0.2*cm))
story.append(tip("For any neck swelling - always say you would assess MOVEMENT WITH SWALLOWING and ON TONGUE PROTRUSION before touching the patient."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 3: OPERATIVE VIVA
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 3: Operative Surgery Viva")
story.append(Paragraph(
    "The operative viva assesses your theoretical and practical knowledge of standard surgical "
    "procedures. Questions follow a standard pattern: indications, anatomy, steps of operation, "
    "complications, and postoperative care. You must know your index procedures perfectly.", body))

story += sub_header("Index Procedures - Must Know in Full Detail")
ops_data = [
    ["Operation", "Key Points to Know"],
    ["Appendicectomy (open & lap)", "McBurney's incision, layers, stump handling, normal appendix - what to do"],
    ["Inguinal hernia repair (Lichtenstein)", "Anatomy of inguinal canal, mesh placement, ilioinguinal nerve, recurrence"],
    ["Cholecystectomy (laparoscopic)", "Critical view of safety, Calot's triangle, bile duct injury, port sites"],
    ["Whipple's (Pancreaticoduodenectomy)", "Indications, resection, 3 anastomoses, complications (POPF, DGE)"],
    ["Right hemicolectomy", "Landmarks, high ligation of ileocolic vessels, lymphadenectomy, anastomosis"],
    ["Anterior resection of rectum", "Total mesorectal excision (TME), autonomic nerve preservation, anastomosis"],
    ["Thyroidectomy (total/hemi)", "RLN identification, parathyroid preservation, Berry's ligament"],
    ["Modified Radical Mastectomy", "Patey vs Madden, axillary dissection levels, serratus anterior"],
    ["Splenectomy", "Short gastric vessels, tail of pancreas, overwhelming post-splenectomy infection (OPSI)"],
    ["Hartmann's procedure", "Indications (perforated sigmoid), reversal considerations"],
]
story.append(make_table(ops_data[0], ops_data[1:], col_widths=[6*cm, 11*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Operative Viva Answer Framework - '5-Step Template'")
for s in [
    "<b>1. Indications:</b> 'This operation is indicated for...' (include elective and emergency)",
    "<b>2. Pre-operative preparation:</b> Consent, anaesthesia type, patient positioning, bowel prep if needed",
    "<b>3. Steps of the operation:</b> Incision - exposure - key anatomy - critical steps - closure",
    "<b>4. Complications:</b> Intraoperative / early postoperative / late (use this classification always)",
    "<b>5. Post-operative care:</b> Drains, diet, DVT prophylaxis, discharge criteria, follow-up",
]:
    story.append(bp(s))
story.append(Spacer(1,0.2*cm))
story.append(tip("When asked about complications, classify as: Immediate (0-24h), Early (1-30 days), Late (>30 days). Examiners love this structured answer."))
story.append(warn("Never say 'I would cut here' - always use anatomical landmarks. 'I would divide at the level of the inferior mesenteric artery origin' scores better."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 4: INSTRUMENTS & SPECIMENS
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 4: Surgical Instruments & Specimens")
story.append(Paragraph(
    "You will be shown 5-10 instruments or surgical specimens and asked to identify, describe, "
    "and discuss their clinical use. Answer in a structured format: name, type, material, "
    "specific features, uses, and technique.", body))

story += sub_header("High-Yield Instruments by Category")
instr_data = [
    ["Category", "Key Instruments"],
    ["Retractors", "Langenbeck, Deaver, Morris, Self-retaining (Balfour, Weitlaner, Travers), Doyen"],
    ["Artery Forceps", "Kocher's, Dunhill, Spencer Wells, Roberts, Mosquito, Mixter right-angle"],
    ["Bowel Clamps", "Lane's, Doyen intestinal, Kocher crushing clamp"],
    ["Thyroid Surgery", "Lahey's thyroid forceps, Maingot artery forceps"],
    ["Anorectal", "Proctoscope, sigmoidoscope, Parks retractor, Lockhart-Mummery fistula probe"],
    ["Vascular", "Bulldog clamp, Satinsky clamp, vascular needle holders"],
    ["Laparoscopic", "Veress needle, trocar & cannula, clip applicator, harmonic scalpel"],
    ["Sutures", "Prolene, Vicryl, PDS, Monocryl, Nylon - know absorbable vs non-absorbable"],
    ["Miscellaneous", "Ryles tube, Foley catheter, chest drain, Sengstaken-Blakemore tube"],
]
story.append(make_table(instr_data[0], instr_data[1:], col_widths=[4.5*cm, 12.5*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Specimen Identification Framework")
for s in [
    "<b>Organ:</b> Name the organ and part (e.g., 'This is a segment of large bowel, likely sigmoid colon')",
    "<b>Pathology:</b> Describe the lesion - ulcerating/proliferating/infiltrating, size, location in wall",
    "<b>Staging clue:</b> Note any lymph nodes in the mesentery, depth of invasion visible",
    "<b>Operation:</b> Name the operation this would come from",
    "<b>Important associations:</b> Mention relevant management (e.g., adjuvant chemotherapy for Dukes C)",
]:
    story.append(bp(s))
story.append(Spacer(1,0.2*cm))
story.append(tip("Pick up every instrument confidently and state: 'This is a [name], it is a [type] made of [material], with [specific feature], used for [purpose].'"))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 5: RADIOLOGY
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 5: Radiology & Imaging Interpretation")
story.append(Paragraph(
    "Imaging stations assess your ability to identify key radiological findings and correlate "
    "them with clinical management. Always use a systematic approach - never jump straight "
    "to the diagnosis without stating patient details and image quality.", body))

story += sub_header("Systematic Reporting Template")
for s in [
    "<b>1. Type of study:</b> 'This is a [PA chest X-ray / CT abdomen with contrast / USG abdomen]'",
    "<b>2. Patient demographics:</b> 'Taken of a [adult/child], [date if visible]'",
    "<b>3. Technical adequacy:</b> Rotation, exposure, inspiratory effort (for CXR)",
    "<b>4. Systematic review:</b> Go through all zones methodically",
    "<b>5. Diagnosis:</b> 'The main finding is... consistent with a diagnosis of...'",
    "<b>6. Surgical relevance:</b> 'This would require...' (immediate management / operation)",
]:
    story.append(bp(s))

story += sub_header("High-Yield Imaging Findings")
rad_data = [
    ["Modality", "Finding", "Diagnosis", "Surgical Action"],
    ["CXR", "Air under diaphragm", "Hollow viscus perforation", "Emergency laparotomy"],
    ["CXR", "Mediastinal widening", "Aortic dissection / oesophageal perforation", "CT aortogram / surgery"],
    ["CT Abdomen", "Double bubble sign (paeds)", "Duodenal atresia", "Duodeno-duodenostomy"],
    ["CT Abdomen", "Target sign in bowel wall", "Intussusception", "Barium reduction / surgery"],
    ["CT Abdomen", "Whirlpool sign", "Volvulus (sigmoid/caecal)", "Emergency laparotomy"],
    ["CT Abdomen", "Portal venous gas", "Mesenteric ischaemia", "Emergency laparotomy"],
    ["USG Abdomen", "Dilated CBD >8mm + stones", "Choledocholithiasis", "ERCP + LC"],
    ["USG Abdomen", "Non-compressible tubular structure in RIF", "Appendicitis", "Appendicectomy"],
    ["CECT Abdomen", "Pancreatic necrosis >30%", "Severe acute pancreatitis", "ITU, delayed necrosectomy"],
    ["Barium Enema", "Apple-core deformity", "Carcinoma colon", "Hemicolectomy"],
    ["IVU/CT Urogram", "Filling defect in pelvis", "Renal pelvis TCC", "Nephroureterectomy"],
    ["Angiogram", "Pooling of contrast in bowel", "GI haemorrhage", "Embolization / surgery"],
]
story.append(make_table(rad_data[0], rad_data[1:],
             col_widths=[3.5*cm, 4.5*cm, 4.5*cm, 4.5*cm]))
story.append(Spacer(1,0.2*cm))
story.append(tip("For CT scans, always mention: 'I note the scan is [with/without contrast], and I would ideally review all three phases (arterial, portal venous, delayed) for a complete assessment.'"))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 6: PROCEDURAL SKILLS
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 6: Procedural Skills & Suturing")
story.append(Paragraph(
    "Procedural stations test your technical skills on models or simulators. You will be "
    "assessed on your sterile technique, instrument handling, efficiency, and communication "
    "with the 'scrub nurse'. Common stations include wound closure, drain insertion, "
    "and catheterisation.", body))

story += sub_header("Suturing: Key Techniques")
suture_data = [
    ["Technique", "Type", "Use", "Key Feature"],
    ["Simple interrupted", "Non-continuous", "Skin closure, tension sutures", "Easy to remove; infection containment"],
    ["Mattress suture (vertical/horizontal)", "Non-continuous", "Wound under tension", "Reduces dead space"],
    ["Continuous over-and-over", "Continuous", "Subcuticular closure", "Cosmetic result"],
    ["Figure-of-eight", "Non-continuous", "Fascia closure, haemostasis", "Strong hold"],
    ["Purse-string suture", "Continuous", "Appendix stump, colostomy", "Invaginates tissue"],
    ["Connell suture", "Continuous inverting", "Bowel anastomosis inner layer", "Mucosal inversion"],
    ["Lembert suture", "Interrupted inverting", "Bowel seromuscular layer", "Serosal apposition"],
    ["Subcuticular suture", "Continuous intradermal", "Skin closure", "No stitch marks"],
]
story.append(make_table(suture_data[0], suture_data[1:],
             col_widths=[4*cm, 3.5*cm, 5*cm, 4.5*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Knot-Tying Principles")
for s in [
    "Always use a <b>square knot</b> (reef knot) - never a granny knot",
    "Minimum <b>3 throws</b> for synthetic monofilament; 2 for braided sutures",
    "Keep suture taut during tying - avoid slack between throws",
    "Cut suture tails to <b>3-5 mm</b> for deep sutures; 2-3 mm subcuticular",
    "For laparoscopic knots: intracorporeal or extracorporeal (Roeder's knot)",
]:
    story.append(bp(s))
story.append(Spacer(1,0.2*cm))
story.append(tip("Before starting any procedure station: state 'I would confirm patient identity, obtain consent, ensure sterile field, and wear appropriate PPE.' This alone earns process marks."))
story.append(warn("Never cut the needle off the suture before finishing - keep the needle holder, suture, and needle organised on the trolley at all times."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 7: HISTOPATHOLOGY
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 7: Histopathology Specimens")
story.append(Paragraph(
    "Histopathology stations test your ability to identify gross pathological specimens "
    "and discuss their microscopic features, staging, and management implications. "
    "You may be shown wet specimens, photographs, or actual histology slides.", body))

story += sub_header("High-Yield Histopathology Specimens")
histo_data = [
    ["Specimen", "Key Gross Features", "Histology", "Staging/Grade"],
    ["Colorectal carcinoma", "Ulcerating annular lesion, 'rolled everted edges'", "Adenocarcinoma (mucin-secreting)", "Dukes / TNM staging"],
    ["Carcinoma stomach", "Linitis plastica OR fungating growth at cardia/antrum", "Intestinal or diffuse type (Lauren)", "Siewert classification for GOJ"],
    ["Carcinoma thyroid", "Papillary: sand-like calcified nodule; Follicular: encapsulated", "Orphan Annie nuclei (papillary)", "MACIS score; TNM"],
    ["Carcinoma breast", "Irregular, spiculate, gritty on cut section", "IDC (ductal) vs ILC (lobular)", "Nottingham Grade I-III"],
    ["Cholecystitis/gallstones", "Thickened wall, pigment/cholesterol stones", "Chronic inflammatory infiltrate", "Rokitansky-Aschoff sinuses"],
    ["Appendix", "Faecalith, gangrenous tip, perforation", "Neutrophilic infiltrate of muscularis", "Note: carcinoid at tip (1%)"],
    ["Hydatid cyst (liver)", "Daughter cysts, germinal layer, pericyst", "Laminated membrane, scolices", "WHO classification"],
    ["HCC", "Cirrhotic background, greenish tumour", "Trabecular or acinar pattern, AFP", "Barcelona (BCLC) staging"],
]
story.append(make_table(histo_data[0], histo_data[1:],
             col_widths=[4*cm, 4.5*cm, 4.5*cm, 4*cm]))
story.append(Spacer(1,0.2*cm))
story.append(tip("Always mention: 'I would correlate with the patient's clinical presentation, tumour markers, and radiology before finalising the diagnosis and management plan.'"))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 8: PRE-OPERATIVE ASSESSMENT
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 8: Pre-operative Assessment")
story.append(Paragraph(
    "This station presents a patient scenario (or actor) requiring pre-operative evaluation. "
    "You must demonstrate systematic assessment of fitness for surgery, risk stratification, "
    "and optimisation planning.", body))

story += sub_header("Pre-operative Assessment Framework")
for s in [
    "<b>History:</b> Functional capacity (METs), co-morbidities (cardiac, respiratory, renal, DM), medications, allergies, previous anaesthesia",
    "<b>Examination:</b> Airway assessment (Mallampati), cardiorespiratory status, BMI, peripheral access",
    "<b>Investigations:</b> Stratify by ASA and procedure risk (low/intermediate/high)",
    "<b>Risk scoring:</b> ASA classification, POSSUM score, Lee's Revised Cardiac Risk Index, P-POSSUM",
    "<b>Optimisation:</b> HbA1c <8.5%, BP control, anaemia correction, prehabilitation",
    "<b>Consent discussion:</b> Operation, alternatives, specific risks, anaesthetic risks",
]:
    story.append(bp(s))
story.append(Spacer(1, 0.3*cm))

asa_data = [
    ["ASA Class", "Definition", "Example"],
    ["ASA I", "Normal healthy patient", "Young adult, no co-morbidities"],
    ["ASA II", "Mild systemic disease", "Controlled DM, mild HTN, smoker"],
    ["ASA III", "Severe systemic disease", "Poorly controlled DM, COPD, obesity BMI>40"],
    ["ASA IV", "Life-threatening disease", "Recent MI, severe CHF, liver failure"],
    ["ASA V", "Moribund - not expected to survive", "Ruptured AAA, massive stroke"],
    ["ASA VI", "Brain-dead for organ donation", "Donor surgery"],
    ["E suffix", "Emergency operation", "Any above class + E (e.g., ASA IIE)"],
]
story.append(make_table(asa_data[0], asa_data[1:], col_widths=[3*cm, 7*cm, 7*cm]))
story.append(Spacer(1,0.2*cm))
story.append(tip("Quote ACTUAL numbers: 'A patient with HbA1c of 11% would have an elevated risk of surgical site infection. Optimisation to <8.5% reduces SSI by approximately 50%.'"))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 9: COMMUNICATION & CONSENT
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 9: Communication & Consent")
story.append(Paragraph(
    "This station uses a standardised patient (actor) and tests your ability to communicate "
    "complex surgical information clearly, obtain valid informed consent, and handle "
    "difficult conversations. It is worth significant marks and is often underprepped.", body))

story += sub_header("SPIKES Protocol - Breaking Bad News")
spikes = [
    ["S", "Setting Up", "Private room, tissues, supportive person present, no bleeps"],
    ["P", "Perception", "'What do you already know about your condition?'"],
    ["I", "Invitation", "'Would you like me to share the results with you now?'"],
    ["K", "Knowledge", "Use plain language; avoid jargon; give in small chunks"],
    ["E", "Emotions", "Acknowledge, name, and validate: 'That must be very hard to hear'"],
    ["S", "Strategy & Summary", "Plan next steps; offer written info; arrange follow-up"],
]
story.append(make_table(["Letter", "Step", "Key Action"], spikes, col_widths=[1.5*cm, 4.5*cm, 11*cm]))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Valid Informed Consent - Legal Requirements")
for s in [
    "<b>Voluntariness:</b> Patient must consent freely without coercion",
    "<b>Capacity:</b> Patient must understand, retain, weigh, and communicate the decision (Mental Capacity Act criteria)",
    "<b>Information:</b> Procedure, expected benefits, significant/common risks (>1%), alternatives including no treatment",
    "<b>Documentation:</b> Signed consent form PLUS verbal discussion recorded in notes",
    "<b>Who can consent:</b> The operating surgeon should ideally take consent; can be delegated to a trained trainee",
]:
    story.append(bp(s))
story.append(Spacer(1, 0.3*cm))

story += sub_header("Common Consent Scenarios in OSCE")
consent_data = [
    ["Scenario", "Key Risks to Mention"],
    ["Laparoscopic cholecystectomy", "Bile duct injury (0.3-0.5%), conversion to open, bleeding, visceral injury, port site hernia"],
    ["Total thyroidectomy", "RLN injury (1-2%), hypoparathyroidism (1-2%), bleeding/haematoma, hypothyroidism (permanent)"],
    ["Inguinal hernia repair", "Recurrence (1-2% mesh), chronic pain, ischaemic orchitis (0.3%), ilioinguinal nerve damage"],
    ["Anterior resection", "Anastomotic leak (5-10%), temporary stoma, bowel dysfunction, sexual dysfunction, permanent stoma"],
    ["Mastectomy", "Lymphoedema, seroma, numbness, body image issues, reconstruction options"],
]
story.append(make_table(consent_data[0], consent_data[1:], col_widths=[5*cm, 12*cm]))
story.append(Spacer(1,0.2*cm))
story.append(tip("In communication stations: maintain eye contact with the actor, not your notes. Use open-ended questions. Pause and give silence when the patient is emotional."))
story.append(warn("Never dismiss a patient's fears as trivial. Even if a risk is rare, if the patient considers it significant (e.g., hoarse voice in a singer) it MUST be discussed."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# STATION 10: EMERGENCY SCENARIOS
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Station 10: Emergency Scenarios & Critical Appraisal")
story.append(Paragraph(
    "Emergency stations present an acute surgical scenario and test your ability to "
    "prioritise, resuscitate, investigate, and manage a critically unwell patient. "
    "Always start with ABCDE before jumping to diagnosis.", body))

story += sub_header("ABCDE Resuscitation Framework (Mandatory Starting Point)")
for s in [
    "<b>A - Airway:</b> Patent? Stridor? Jaw thrust / chin lift / intubation if needed",
    "<b>B - Breathing:</b> RR, SpO2, chest movement, added sounds - O2 15L via NRB mask",
    "<b>C - Circulation:</b> HR, BP, CRT, skin colour - 2 large bore IVs, fluid bolus, bloods",
    "<b>D - Disability:</b> GCS, AVPU, blood glucose, pupils",
    "<b>E - Exposure:</b> Full examination, temperature, look for source of sepsis / bleeding",
]:
    story.append(bp(s))
story.append(Spacer(1, 0.3*cm))

story += sub_header("High-Yield Emergency Scenarios")
em_data = [
    ["Scenario", "Immediate Action", "Key Investigation", "Definitive Treatment"],
    ["Ruptured AAA", "O negative blood, vascular surgery team", "FAST USS / CECT (if stable)", "Emergency EVAR or open repair"],
    ["Acute mesenteric ischaemia", "Anticoagulate, resuscitate", "CT angiogram", "Laparotomy, bowel resection"],
    ["Perforated peptic ulcer", "NGT, urinary catheter, IV PPI+ABx", "Erect CXR (air under diaphragm)", "Laparoscopic/open repair (Graham patch)"],
    ["Sigmoid volvulus", "Rigid sigmoidoscopy + flatus tube", "AXR (coffee bean sign)", "Elective sigmoid resection"],
    ["Obstructed + strangulated hernia", "Resuscitate, NBM, Foley", "Clinical diagnosis", "Emergency hernia repair +/- bowel resection"],
    ["Massive lower GI bleed", "Resuscitate, cross-match 6 units", "CT angiogram (active bleed)", "Interventional radiology / surgery"],
    ["Acute pancreatitis", "Fluids 250-500ml/hr, analgesia, NBM", "CT severity index (Balthazar)", "ITU if severe; ERCP if gallstone"],
    ["Postoperative haemorrhage", "Check drain, BP trend, Hb", "Bedside USS, return to OT", "Surgical re-exploration"],
]
story.append(make_table(em_data[0], em_data[1:],
             col_widths=[4*cm, 4.5*cm, 4*cm, 4.5*cm]))
story.append(Spacer(1,0.2*cm))
story.append(tip("Examiners want to hear: 'I would activate the Major Haemorrhage Protocol / call for senior help IMMEDIATELY' - showing you know your limitations is a POSITIVE attribute."))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# QUICK REFERENCE: SURGICAL SCORES & CLASSIFICATIONS
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Quick Reference: Surgical Scores & Classifications")

story += sub_header("Essential Scoring Systems")
score_data = [
    ["Score/Classification", "Used For", "Key Parameters"],
    ["Ranson's Criteria", "Acute pancreatitis severity", "5 at admission + 6 at 48h; >3 = severe"],
    ["BISAP Score", "Acute pancreatitis mortality", "BUN, Impaired sensorium, SIRS, Age>60, Pleural effusion"],
    ["TNM Staging", "All solid tumours", "T (tumour), N (nodes), M (metastasis)"],
    ["Dukes Classification", "Colorectal cancer", "A (mucosa), B (muscularis/pericolorectal), C (nodes), D (distant)"],
    ["Child-Pugh Score", "Liver cirrhosis surgical risk", "Bilirubin, Albumin, PT, Ascites, Encephalopathy"],
    ["MELD Score", "Liver disease mortality / transplant listing", "Creatinine, Bilirubin, INR"],
    ["Clavien-Dindo", "Surgical complication grading", "Grade I-V (V = death)"],
    ["Wagner Grade", "Diabetic foot ulcer depth", "Grade 0-5"],
    ["Rutherford Classification", "Peripheral arterial disease", "Category 0-6"],
    ["ASA Classification", "Anaesthetic risk", "Class I-VI"],
    ["P-POSSUM", "Operative mortality prediction", "Physiological + Operative severity score"],
    ["Glasgow Blatchford", "Upper GI bleed - need for intervention", "BUN, Hb, SBP, HR, melena, syncope"],
    ["Nottingham Grade", "Breast cancer histology", "Tubule formation + nuclear pleomorphism + mitosis (Grade 1-3)"],
]
story.append(make_table(score_data[0], score_data[1:],
             col_widths=[5.5*cm, 5.5*cm, 6*cm]))
story.append(PageBreak())

# ════════════════════════════════════════════════════════════════════════════
# EXAM DAY TIPS
# ════════════════════════════════════════════════════════════════════════════
story += section_header("Exam Day Strategy & Final Tips")

story += sub_header("The 5 Golden Rules")
golden = [
    "Always <b>THINK ALOUD</b> - examiners cannot mark what they cannot hear. Narrate your clinical reasoning.",
    "Never say <b>'I don't know'</b> without an attempt. Say: 'I would approach this systematically by...'",
    "<b>Admit uncertainty gracefully:</b> 'I would seek senior advice for this intraoperative finding' is safer than guessing.",
    "Be <b>patient-centred</b> in communication stations. Use the patient's name. Sit at eye level.",
    "Dress professionally, maintain <b>eye contact</b> with examiners, and project confidence - even when unsure.",
]
for g in golden:
    story.append(bp(g))
story.append(Spacer(1,0.3*cm))

story += sub_header("Last-Week Revision Checklist")
checklist_data = [
    ["Task", "Done?"],
    ["Revise all 10 index operations with steps + complications", "[ ]"],
    ["Practice knot-tying and suturing on a pad or model", "[ ]"],
    ["Review 20 plain X-rays (CXR + AXR) and 10 CT abdomen scans", "[ ]"],
    ["Identify 30 surgical instruments by sight", "[ ]"],
    ["Practice one full long case with a colleague (30 min + 15 min viva)", "[ ]"],
    ["Review consent discussion for top 5 operations", "[ ]"],
    ["Memorise Ranson's, Child-Pugh, TNM for colon, thyroid, breast", "[ ]"],
    ["Review your operative logbook - know your case numbers", "[ ]"],
    ["Practice ABCDE approach out loud for 3 emergency scenarios", "[ ]"],
    ["Read NICE/NBE guidelines summary for hernia, gallstones, colorectal cancer", "[ ]"],
]
story.append(make_table(checklist_data[0], checklist_data[1:], col_widths=[14*cm, 3*cm]))
story.append(Spacer(1, 0.3*cm))

# Final encouragement box
final_box = Table([[
    Paragraph(
        "Best of luck with your MS General Surgery examination. "
        "Systematic preparation, clinical exposure, and confident communication "
        "are the three pillars of success. You have trained for 3 years - trust your knowledge.",
        ParagraphStyle("Final", parent=body, fontSize=10,
                       textColor=DARK_BLUE, fontName="Helvetica-Bold",
                       alignment=TA_CENTER))
]], colWidths=[17*cm])
final_box.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1),LIGHT_BLUE),
    ("BOX",(0,0),(-1,-1),2,DARK_BLUE),
    ("TOPPADDING",(0,0),(-1,-1),15),
    ("BOTTOMPADDING",(0,0),(-1,-1),15),
    ("LEFTPADDING",(0,0),(-1,-1),20),
    ("RIGHTPADDING",(0,0),(-1,-1),20),
]))
story.append(Spacer(1, 0.5*cm))
story.append(final_box)

# ── Build PDF ────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=2*cm, rightMargin=2*cm,
    topMargin=2*cm, bottomMargin=1.8*cm,
    title="MS General Surgery OSCE Study Guide",
    author="Orris AI",
    subject="OSCE Clinical Examination Study Guide",
)
doc.build(story, onFirstPage=header_footer, onLaterPages=header_footer,
          canvasmaker=NumberedCanvas)
print(f"PDF generated: {OUTPUT}")
Running Command

cd /tmp/workspace/ms-surgery-osce && python generate_guide.py 2>&1

Running Command

ls -lh /tmp/workspace/ms-surgery-osce/MS_Surgery_OSCE_Study_Guide.pdf

Your study guide is ready! Here's the download link:

MS Surgery OSCE Study Guide

PDF Document · PDF


What's inside (10 fully detailed stations):

StationContent
1. Long CaseSOAP framework, common conditions (CRC, thyroid, breast, PAD), presentation tips
2. Short CasesSystem-by-system topic list, 5-step response template
3. Operative Viva10 index operations, 5-step answer framework, complications classification
4. Instruments & SpecimensCategorised instrument list, specimen identification framework
5. RadiologySystematic reporting template, 12 high-yield imaging findings with actions
6. Procedural SkillsSuturing techniques table, knot-tying principles
7. Histopathology8 key specimens with gross features, histology, and staging
8. Pre-op AssessmentASA classification table, optimisation targets
9. Communication & ConsentSPIKES protocol, legal consent requirements, 5 consent scenarios with specific risks
10. Emergency ScenariosABCDE framework, 8 emergency conditions with immediate actions
Plus a surgical scoring systems quick reference and an exam-day checklist at the end.

Investigations for Ranula

Reading File
Finding Sources
Finding Sources
Searching Images

ranula sublingual cyst oral floor of mouth

Clinical photograph of a pediatric patient's oral cavity showing a simple ranula. The image displays a large, well-circumscribed sublingual mass located on the floor of the mouth, originating from the base of the tongue near the midline. The mass is characterized by a distinctive translucent, bluish hue, indicative of an underlying mucocele or fluid collection, specifically a mucous extravasation cyst arising from the sublingual gland. The overlying mucosa appears thin but otherwise intact and non-inflamed. The tongue is visibly elevated and displaced superiorly by the cyst's volume. A white arrow points to the lateral aspect of the lesion, highlighting its tense, cystic morphology and significant size relative to the oral space. This visual serves as a classic diagnostic example of a ranula in an adolescent, illustrating the hallmark physical findings that differentiate sublingual cystic lesions from other floor-of-the-mouth pathologies.

Clinical photograph of a pediatric patient's oral cavity showing a simple ranula. The image displays a large, well-circumscribed sublingual mass located on the floor of the mouth, originating from the base of the tongue near the midline. The mass is characterized by a distinctive translucent, bluish hue, indicative of an underlying mucocele or fluid collection, specifically a mucous extravasation cyst arising from the sublingual gland. The overlying mucosa appears thin but otherwise intact and non-inflamed. The tongue is visibly elevated and displaced superiorly by the cyst's volume. A white arrow points to the lateral aspect of the lesion, highlighting its tense, cystic morphology and significant size relative to the oral space. This visual serves as a classic diagnostic example of a ranula in an adolescent, illustrating the hallmark physical findings that differentiate sublingual cystic lesions from other floor-of-the-mouth pathologies.

Clinical photograph of an open oral cavity in a pediatric patient, demonstrating a large, cystic swelling in the floor of the mouth. The lesion is located sublingually and is primarily situated on the left side, though it appears to cross the midline. The swelling exhibits a translucent, bluish, or 'frog-belly' hue, characteristic of a ranula (mucous extravasation cyst). Superficial vascularity is visible on the stretched mucosal surface covering the cyst. The tongue is displaced superiorly and posteriorly by the mass. The image highlights the typical intraoral presentation of a sublingual gland mucocele, which can extend into deeper cervical spaces as a 'plunging ranula.' Clinical relevance includes differential diagnosis of oral floor masses such as dermoid cysts or hemangiomas, and educational focus is on the visual identification of salivary gland pathologies in pediatric dentistry and oral surgery.

Clinical photograph of an open oral cavity in a pediatric patient, demonstrating a large, cystic swelling in the floor of the mouth. The lesion is located sublingually and is primarily situated on the left side, though it appears to cross the midline. The swelling exhibits a translucent, bluish, or 'frog-belly' hue, characteristic of a ranula (mucous extravasation cyst). Superficial vascularity is visible on the stretched mucosal surface covering the cyst. The tongue is displaced superiorly and posteriorly by the mass. The image highlights the typical intraoral presentation of a sublingual gland mucocele, which can extend into deeper cervical spaces as a 'plunging ranula.' Clinical relevance includes differential diagnosis of oral floor masses such as dermoid cysts or hemangiomas, and educational focus is on the visual identification of salivary gland pathologies in pediatric dentistry and oral surgery.

This composite of clinical and diagnostic images documents a sublingual ranula in a 38-year-old patient. Figure (a) is a clinical photograph of the floor of the mouth showing a dome-shaped, translucent blue-tinted swelling consistent with a mucous extravasation cyst or ranula, adjacent to the lower dentition. Figure (b) is a coronal T2-weighted MRI scan demonstrating a well-circumscribed, hyperintense (bright) cystic lesion in the right sublingual space, which indicates high fluid content and confirms the extent of the ranula. Figure (c) depicts the clinical procedure of fine-needle aspiration. A syringe is shown extracting yellowish, mucinous fluid from the lesion, a hallmark diagnostic feature of saliva-containing cysts. The collection of images illustrates the diagnostic pathway from clinical presentation and radiological imaging to procedural confirmation of a sublingual ranula, relevant for oral and maxillofacial surgery and dental education.

This composite of clinical and diagnostic images documents a sublingual ranula in a 38-year-old patient. Figure (a) is a clinical photograph of the floor of the mouth showing a dome-shaped, translucent blue-tinted swelling consistent with a mucous extravasation cyst or ranula, adjacent to the lower dentition. Figure (b) is a coronal T2-weighted MRI scan demonstrating a well-circumscribed, hyperintense (bright) cystic lesion in the right sublingual space, which indicates high fluid content and confirms the extent of the ranula. Figure (c) depicts the clinical procedure of fine-needle aspiration. A syringe is shown extracting yellowish, mucinous fluid from the lesion, a hallmark diagnostic feature of saliva-containing cysts. The collection of images illustrates the diagnostic pathway from clinical presentation and radiological imaging to procedural confirmation of a sublingual ranula, relevant for oral and maxillofacial surgery and dental education.

Reading File
Reading File
Finding Sources
Reading File
Reading File
Excellent - I now have thorough textbook content from four authoritative sources. Here is the complete answer:

Investigations for Ranula

Quick definition: A ranula is a mucous extravasation pseudocyst arising from the sublingual gland, presenting as a smooth, bluish, translucent swelling in the floor of the mouth. There are two types:
  • Simple (intraoral) ranula - confined above the mylohyoid
  • Plunging (cervical) ranula - extends through the mylohyoid into the submandibular/submental neck

Clinical Diagnosis First

For a simple intraoral ranula, imaging is usually unnecessary. The diagnosis is clinical, based on the characteristic bluish, translucent, fluctuant swelling in the floor of mouth. Investigations are reserved for specific indications.
"Imaging is unnecessary for confirming the clinical diagnosis of a simple intraoral ranula. However, if there is a history of previous surgery, if the ranula has a cervical component, or if the diagnosis is uncertain clinically, then MRI is preferred."
  • Scott-Brown's Otorhinolaryngology Head & Neck Surgery Vol. 2

Investigations - When Indicated

1. Aspiration / Fine Needle Aspiration (FNA)

  • Yields thick, sticky, viscous mucoid fluid (high amylase content) - this is pathognomonic
  • FNA demonstrating amylase in the cyst fluid differentiates ranula from a lymphangioma, dermoid, or other cystic lesions - Cummings Otolaryngology
  • Fluid character: glairy, tenacious, saliva-like - differentiates from the clear watery fluid of lymphangioma
  • Note: aspiration alone is not therapeutic (high recurrence rate)

2. Ultrasonography (USG)

The first-line imaging modality when imaging is required:
FeatureSimple RanulaPlunging Ranula
LocationSublingual space, above mylohyoidSubmandibular/submental, below mylohyoid
AppearanceUnilocular, well-defined, anechoic cystic massCystic with possible extension into neck
Internal echoesMay have fine echoes (debris from prior inflammation)Variable
WallsThin, smoothMay show some irregularity
Scott-Brown's Otorhinolaryngology Vol. 2 and Bailey & Love note that USG is useful for initial assessment and can guide aspiration.

3. MRI (Magnetic Resonance Imaging)

Preferred modality for complex or recurrent cases. Indications:
  • History of previous surgery
  • Plunging/cervical component present
  • Clinically uncertain diagnosis
  • Planning surgical excision
MRI characteristics of ranula:
SequenceAppearance
T1-weightedLow signal (hypointense)
T2-weightedHigh signal (hyperintense) - due to high fluid content
Post-contrastNo enhancement of cyst content (simple ranula)
Fat-suppressed T1 + contrastNo enhancement of cyst wall
For plunging ranulas: as they are pseudocysts with associated granulation tissue, there may be some peripheral enhancement on contrast CT/MRI - Scott-Brown's Vol. 2, Cummings
MRI best defines:
  • Exact anatomical extent
  • Relationship to mylohyoid, lingual nerve, submandibular duct
  • Differentiates ranula from lymphangioma, dermoid, branchial cyst, or neoplasm

4. CT Scan (CECT Neck)

Used when MRI is unavailable or for surgical planning:
FeatureAppearance
DensityLow attenuation (near-fluid density)
EnhancementNon-enhancing, thin wall (simple)
WallSmooth, thin-walled mass
ExtentDefines relationship to anatomical spaces
"On CT a simple ranula will appear as a solitary, low-attenuation, non-enhancing thin-walled mass."
  • Scott-Brown's Otorhinolaryngology Vol. 2

5. Transillumination (Clinical Test)

  • Positive transillumination confirms the cystic, fluid-filled nature
  • Classically taught as part of the clinical examination
  • Seen in Bailey & Love (Fig. 54.3 shows transillumination of ranula)

Summary Table

InvestigationRoleWhen to Use
Clinical examination + transilluminationPrimary diagnosis of simple ranulaAlways first
Aspiration / FNAConfirms mucoid fluid (high amylase)If diagnosis uncertain; differentiates from lymphangioma
UltrasonographyFirst-line imaging; defines sublingual vs. submandibular extentPlunging ranula, recurrent cases
MRI (preferred)Best delineates anatomy, extent, and type; no radiationPrevious surgery, cervical component, diagnostic uncertainty
CECT neckDefines anatomical boundariesWhen MRI unavailable; surgical planning

Key Differentials Investigations Help Exclude

LesionDistinguishing Feature on Imaging/FNA
LymphangiomaMultilocular on USS; watery FNA (no amylase); epithelial lining on histology
Dermoid cystEchogenic fat content on USS; high T1 signal on MRI
Branchial cystLateral neck location; no sublingual connection
Thyroglossal cystMidline, moves with tongue protrusion; related to hyoid
Cystic hygromaMultilocular, trans-spatial

Here is a classic clinical image showing the typical presentation:
Ranula - sublingual translucent swelling
Classic intraoral ranula with T2 MRI (bright cyst) and FNA of mucoid fluid - the complete diagnostic triad

Sources: Scott-Brown's Otorhinolaryngology Head & Neck Surgery Vol. 2, p. INVESTIGATIONS section | Bailey & Love's Short Practice of Surgery 28th Ed., Ch. 54 | Cummings Otolaryngology Head & Neck Surgery, Ch. 82 | Scott-Brown's Otorhinolaryngology Vol. 1, Ch. 37
This is a shared conversation. Sign in to Orris to start your own chat.