give me the important clinical ortho 15marks ,5mark, 2mark for bpt as per mgr university syllabus
MGR university BPT orthopaedics important clinical questions 15 marks 5 marks 2 marks syllabus
Dr MGR university BPT physiotherapy orthopaedics examination questions previous year
https://roevercollegephysio.edu.in/wp-content/uploads/2020/0…
https://www.drmgrdu.ac.in/uploads/courses-offered/Physiother…
Exam Pattern (3rd Year - Clinical Orthopaedics):
- Section A: 2 × 15 marks (Essay)
- Section B: 10 × 5 marks (Short Notes)
- Section C: 10 × 2 marks (Short Answer)
| Topic | Most Likely Marks |
|---|---|
| PIVD / Prolapsed disc | 15 marks |
| Osteoarthritis knee | 15 marks |
| Rheumatoid Arthritis | 15 marks |
| Fracture femur / hip | 15 marks |
| Low Back Pain | 15 marks |
| Ankylosing Spondylitis | 5 or 15 marks |
| CTEV / Club foot | 5 or 15 marks |
| Colles' fracture | 5 marks |
| Frozen shoulder | 5 marks |
| Carpal tunnel syndrome | 5 marks |
| Trendelenburg sign | 2 marks |
| Thomas test | 2 marks |
| SLR test / Lasegue's sign | 2 marks |
| Coxa vara / valga | 2 marks |
| Cobb's angle | 2 marks |
Note: This is based on the official MGR University BPT syllabus (2010 and 2018 regulations) and repeated question patterns. For 4th year PT in Orthopaedic Conditions, the same topics apply with added focus on detailed PT assessment and treatment protocols. Always cross-check with your institution's internal notes and your clinical faculty.
Create a PDF quick reference guide of these important questions
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/ortho-bpt-guide && echo "done"
~/ortho-bpt-guide/generate_pdf.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,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.lib.colors import HexColor
OUTPUT = "/tmp/workspace/ortho-bpt-guide/MGR_BPT_Clinical_Ortho_QuickRef.pdf"
# ── Colour palette ────────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1a237e")
MED_BLUE = HexColor("#1565c0")
LIGHT_BLUE = HexColor("#e3f2fd")
TEAL = HexColor("#00695c")
TEAL_LIGHT = HexColor("#e0f2f1")
ORANGE = HexColor("#e65100")
ORANGE_LIGHT= HexColor("#fff3e0")
GREEN = HexColor("#2e7d32")
GREEN_LIGHT = HexColor("#e8f5e9")
RED = HexColor("#b71c1c")
RED_LIGHT = HexColor("#ffebee")
GOLD = HexColor("#f9a825")
GOLD_LIGHT = HexColor("#fffde7")
GREY_BG = HexColor("#f5f5f5")
GREY_LINE = HexColor("#bdbdbd")
WHITE = colors.white
PAGE_W, PAGE_H = A4
# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CoverTitle", fontSize=28, leading=36, textColor=WHITE,
alignment=TA_CENTER, fontName="Helvetica-Bold")
cover_sub = S("CoverSub", fontSize=14, leading=20, textColor=HexColor("#bbdefb"),
alignment=TA_CENTER, fontName="Helvetica")
cover_tag = S("CoverTag", fontSize=11, leading=16, textColor=GOLD,
alignment=TA_CENTER, fontName="Helvetica-Bold")
sec_head = S("SecHead", fontSize=13, leading=18, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT,
spaceBefore=10, spaceAfter=4,
leftIndent=6)
sub_head = S("SubHead", fontSize=10, leading=14, textColor=DARK_BLUE,
fontName="Helvetica-Bold", spaceBefore=6, spaceAfter=2)
body = S("Body", fontSize=9, leading=13, textColor=colors.black,
fontName="Helvetica", spaceAfter=1)
num_item = S("NumItem", fontSize=9, leading=13, textColor=colors.black,
fontName="Helvetica", leftIndent=14, spaceAfter=1)
note = S("Note", fontSize=8.5, leading=12, textColor=HexColor("#4a4a4a"),
fontName="Helvetica-Oblique", spaceBefore=4)
table_hdr = S("TableHdr", fontSize=9, leading=12, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
table_cell= S("TableCell", fontSize=8.5, leading=12, textColor=colors.black,
fontName="Helvetica")
marks_badge = S("MarksBadge", fontSize=20, leading=26, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
footer_s = S("Footer", fontSize=7.5, textColor=HexColor("#757575"),
fontName="Helvetica", alignment=TA_CENTER)
# ── Page callbacks ────────────────────────────────────────────────────────────
def draw_header_footer(canvas, doc):
canvas.saveState()
w, h = PAGE_W, PAGE_H
# Top stripe
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, h - 22, w, 22, fill=1, stroke=0)
canvas.setFont("Helvetica-Bold", 8)
canvas.setFillColor(WHITE)
canvas.drawString(14, h - 15, "MGR University BPT | Clinical Orthopaedics Quick Reference")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(w - 14, h - 15, "3rd & 4th Year Exam Guide")
# Bottom stripe
canvas.setFillColor(GREY_BG)
canvas.rect(0, 0, w, 18, fill=1, stroke=0)
canvas.setFillColor(HexColor("#757575"))
canvas.setFont("Helvetica", 7.5)
canvas.drawCentredString(w / 2, 5,
f"Page {doc.page} | Tamil Nadu Dr. M.G.R. Medical University | For Academic Use Only")
canvas.restoreState()
def draw_cover_page(canvas, doc):
canvas.saveState()
w, h = PAGE_W, PAGE_H
# Full-page gradient background (simulate with rectangles)
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, 0, w, h, fill=1, stroke=0)
canvas.setFillColor(MED_BLUE)
canvas.rect(0, 0, w, h * 0.45, fill=1, stroke=0)
# Decorative top band
canvas.setFillColor(GOLD)
canvas.rect(0, h - 8, w, 8, fill=1, stroke=0)
# Decorative bottom band
canvas.setFillColor(GOLD)
canvas.rect(0, 0, w, 8, fill=1, stroke=0)
canvas.restoreState()
# ── Helpers ───────────────────────────────────────────────────────────────────
def section_banner(text, color=MED_BLUE):
"""Coloured banner paragraph."""
data = [[Paragraph(text, sec_head)]]
t = Table(data, colWidths=[PAGE_W - 2*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4]),
]))
return t
def numbered_list(items, start=1):
out = []
for i, item in enumerate(items, start):
out.append(Paragraph(f"{i}. {item}", num_item))
return out
def two_col_list(items, color=LIGHT_BLUE):
"""Render a list in a two-column shaded table."""
rows = []
for i in range(0, len(items), 2):
left = Paragraph(f"• {items[i]}", table_cell)
right = Paragraph(f"• {items[i+1]}", table_cell) if i+1 < len(items) else Paragraph("", table_cell)
rows.append([left, right])
col = (PAGE_W - 2*cm) / 2
t = Table(rows, colWidths=[col, col])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS", (0,0), (-1,-1), [color, WHITE]),
("GRID", (0,0), (-1,-1), 0.3, GREY_LINE),
]))
return t
def highlight_box(text, bg=GOLD_LIGHT, border=GOLD):
data = [[Paragraph(text, note)]]
t = Table(data, colWidths=[PAGE_W - 2*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINEABOVE", (0,0), (-1,0), 1.5, border),
("LINEBELOW", (0,-1),(-1,-1), 1.5, border),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
]))
return t
# ── Build content ─────────────────────────────────────────────────────────────
story = []
# ═══════════════════════ COVER PAGE ═══════════════════════════════════════════
# We'll use a full-page table to simulate a cover
cover_data = [
[Paragraph("", cover_title)],
[Paragraph("", cover_title)],
[Paragraph("CLINICAL ORTHOPAEDICS", cover_title)],
[Paragraph("Quick Reference Guide", cover_sub)],
[Paragraph("", cover_sub)],
[Paragraph("Important Questions - 15 Marks | 5 Marks | 2 Marks", cover_tag)],
[Paragraph("", cover_sub)],
[Paragraph("Bachelor of Physiotherapy (BPT) — 3rd & 4th Year", cover_sub)],
[Paragraph("Tamil Nadu Dr. M.G.R. Medical University", cover_sub)],
[Paragraph("", cover_sub)],
[Paragraph("", cover_sub)],
[Paragraph("Based on Official MGR University Syllabus", cover_tag)],
[Paragraph("(2010 & 2018 Regulations)", cover_sub)],
]
cover_table = Table(cover_data, colWidths=[PAGE_W])
cover_table.setStyle(TableStyle([
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING", (0,0),(-1,-1), 8),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(cover_table)
story.append(PageBreak())
# ═══════════════════════ EXAM PATTERN ════════════════════════════════════════
story.append(section_banner("📋 EXAM PATTERN — Clinical Orthopaedics", DARK_BLUE))
story.append(Spacer(1, 6))
story.append(highlight_box(
"Duration: 3 Hours | Total: 100 Marks | 3rd Year Subject (Theory + Practical)",
bg=LIGHT_BLUE, border=MED_BLUE
))
story.append(Spacer(1, 8))
pattern_data = [
[Paragraph("Section", table_hdr), Paragraph("Type", table_hdr),
Paragraph("No. of Qns", table_hdr), Paragraph("Marks Each", table_hdr),
Paragraph("Total", table_hdr)],
[Paragraph("A", table_cell), Paragraph("Long Essay", table_cell),
Paragraph("2", table_cell), Paragraph("15", table_cell),
Paragraph("30", table_cell)],
[Paragraph("B", table_cell), Paragraph("Short Notes", table_cell),
Paragraph("10", table_cell), Paragraph("5", table_cell),
Paragraph("50", table_cell)],
[Paragraph("C", table_cell), Paragraph("Short Answers", table_cell),
Paragraph("10", table_cell), Paragraph("2", table_cell),
Paragraph("20", table_cell)],
[Paragraph("TOTAL", table_hdr), Paragraph("", table_cell),
Paragraph("22", table_hdr), Paragraph("", table_cell),
Paragraph("100", table_hdr)],
]
cw = [(PAGE_W - 2*cm)/5] * 5
pt = Table(pattern_data, colWidths=cw)
pt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("BACKGROUND", (0,-1), (-1,-1), MED_BLUE),
("BACKGROUND", (0,1), (-1,1), LIGHT_BLUE),
("BACKGROUND", (0,3), (-1,3), LIGHT_BLUE),
("GRID", (0,0), (-1,-1), 0.5, GREY_LINE),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("FONTNAME", (0,1), (-1,-2), "Helvetica"),
("FONTSIZE", (0,1), (-1,-2), 9),
]))
story.append(pt)
story.append(Spacer(1, 14))
# ═══════════════════════ 15 MARKS ════════════════════════════════════════════
story.append(section_banner("★ 15 MARKS — LONG ESSAY QUESTIONS (Section A)", RED))
story.append(Spacer(1, 6))
story.append(highlight_box(
"⚠ 2 questions will be asked. Attempt ALL. Each answer should cover: Definition / Aetiology / Pathology / Clinical Features / Investigations / Management / PT Management / Complications.",
bg=RED_LIGHT, border=RED
))
story.append(Spacer(1, 8))
# --- Fractures & Trauma ---
story.append(Paragraph("FRACTURES & TRAUMA", sub_head))
frac_15 = [
"Describe pathology, types, clinical features, complications & PT management of <b>Fractures</b> (healing of bone)",
"<b>Fracture of Femur (Shaft)</b> — PT assessment & management during immobilization and post-immobilization",
"<b>Colles' Fracture</b> — Mechanism, clinical features, medical management, complications, PT management",
"<b>Fracture Neck of Femur</b> — Classification, clinical features, surgical management (THR/Austin Moore), post-op PT",
"<b>Spinal Cord Injury</b> — Classification, complications, complete PT management of paraplegic/quadriplegic patient",
]
story.extend(numbered_list(frac_15))
story.append(Spacer(1, 6))
story.append(Paragraph("JOINTS & DEGENERATIVE CONDITIONS", sub_head))
joint_15 = [
"<b>Osteoarthritis of Knee</b> — Pathology, clinical features, investigations, conservative & surgical management, PT",
"<b>Rheumatoid Arthritis</b> — Aetiology, pathology, clinical features, investigations, medical & PT management",
"<b>PIVD / Prolapsed Lumbar Disc (PLID)</b> — Pathology, levels, clinical features, neurological signs, management & PT",
"<b>Ankylosing Spondylitis</b> — Aetiology, pathology, clinical features, complications, PT management",
"<b>Low Back Pain (LBP)</b> — Causes, clinical assessment, differential diagnosis, conservative PT management",
]
story.extend(numbered_list(joint_15, start=6))
story.append(Spacer(1, 6))
story.append(Paragraph("SPINE CONDITIONS", sub_head))
spine_15 = [
"<b>Cervical Spondylosis</b> — Pathology, clinical features, investigations, conservative & PT management",
"<b>Scoliosis</b> — Types, aetiology, clinical features, Cobb's angle, bracing, PT management",
]
story.extend(numbered_list(spine_15, start=11))
story.append(Spacer(1, 6))
story.append(Paragraph("BONE DISEASES & INFECTIONS", sub_head))
bone_15 = [
"<b>Tuberculosis of Spine (Pott's Disease)</b> — Pathology, clinical features, cold abscess, PT management",
"<b>Osteomyelitis</b> — Types, pathology, clinical features, management & PT role",
"<b>Bone Tumors</b> — Classification, common types (osteosarcoma, Ewing's), clinical features & management",
]
story.extend(numbered_list(bone_15, start=13))
story.append(Spacer(1, 6))
story.append(Paragraph("PAEDIATRIC & CONGENITAL CONDITIONS", sub_head))
peds_15 = [
"<b>CTEV / Club Foot</b> — Pathology, clinical features, grading, Ponseti method, surgical & PT management",
"<b>CDH / DDH</b> — Aetiology, clinical features (Ortolani, Barlow tests), grading & PT management",
"<b>Poliomyelitis</b> — Pathology, stages, residual problems, muscle transfers, PT management",
]
story.extend(numbered_list(peds_15, start=16))
story.append(Spacer(1, 6))
story.append(Paragraph("GAIT & ASSESSMENT", sub_head))
gait_15 = [
"<b>Gait Analysis</b> — Normal gait cycle, phases (stance/swing), gait deviations & PT management",
]
story.extend(numbered_list(gait_15, start=19))
story.append(Spacer(1, 10))
# ═══════════════════════ 5 MARKS ═════════════════════════════════════════════
story.append(section_banner("★ 5 MARKS — SHORT NOTE QUESTIONS (Section B)", TEAL))
story.append(Spacer(1, 6))
story.append(highlight_box(
"10 questions will be asked. Attempt ALL. Each answer: 1–2 paragraphs covering key points, investigations & PT relevance.",
bg=TEAL_LIGHT, border=TEAL
))
story.append(Spacer(1, 8))
story.append(Paragraph("FRACTURES & RELATED", sub_head))
frac5 = [
"Colles' fracture", "Pott's fracture (bi-malleolar)", "Monteggia fracture-dislocation",
"Galeazzi fracture", "Stress fractures", "Pathological fractures",
"Compartment syndrome", "Complications of fractures (fat embolism, AVN, myositis ossificans)",
"Principles of traction (types & indications)", "External fixators",
]
story.append(two_col_list(frac5, TEAL_LIGHT))
story.append(Spacer(1, 6))
story.append(Paragraph("UPPER LIMB CONDITIONS", sub_head))
ul5 = [
"Frozen shoulder (Adhesive Capsulitis)", "Tennis elbow (Lateral epicondylitis)",
"Golfer's elbow (Medial epicondylitis)", "Rotator cuff injuries / tears",
"Shoulder impingement syndrome", "De Quervain's tenosynovitis",
"Carpal tunnel syndrome", "Dupuytren's contracture",
]
story.append(two_col_list(ul5, LIGHT_BLUE))
story.append(Spacer(1, 6))
story.append(Paragraph("LOWER LIMB CONDITIONS", sub_head))
ll5 = [
"Meniscal injuries", "ACL injury",
"Iliotibial band syndrome", "Plantar fasciitis",
"Hallux valgus", "Flat foot (pes planus)",
"Patellar tendinitis (Jumper's knee)", "Legg-Calve-Perthes disease",
"SCFE (Slipped capital femoral epiphysis)", "Osgood-Schlatter disease",
]
story.append(two_col_list(ll5, TEAL_LIGHT))
story.append(Spacer(1, 6))
story.append(Paragraph("SPINE SHORT NOTES", sub_head))
spine5 = [
"Cervical rib", "Spina bifida",
"Lumbar canal stenosis", "Spondylolisthesis (types & grading)",
"Piriformis syndrome", "Scoliosis management",
]
story.append(two_col_list(spine5, LIGHT_BLUE))
story.append(Spacer(1, 6))
story.append(Paragraph("NERVE INJURIES", sub_head))
nerve5 = [
"Radial nerve palsy (wrist drop)", "Median nerve injury (ape hand)",
"Ulnar nerve injury (claw hand)", "Sciatic nerve injury",
"Lateral popliteal nerve injury (foot drop)", "Erb's palsy / Brachial plexus injury",
]
story.append(two_col_list(nerve5, TEAL_LIGHT))
story.append(Spacer(1, 6))
story.append(Paragraph("ORTHOPAEDIC PROCEDURES & BONE DISEASES", sub_head))
proc5 = [
"Total hip replacement (THR) — post-op PT", "Total knee replacement (TKR) — post-op PT",
"Arthroplasty / Arthrodesis / Osteotomy", "Bone grafting — types & indications",
"Tendon transfer — principles", "Rickets vs Osteomalacia",
"Osteoporosis — causes & management", "Paget's disease",
"Gout — clinical features", "Septic arthritis",
]
story.append(two_col_list(proc5, LIGHT_BLUE))
story.append(Spacer(1, 10))
# ═══════════════════════ 2 MARKS ═════════════════════════════════════════════
story.append(section_banner("★ 2 MARKS — SHORT ANSWER QUESTIONS (Section C)", ORANGE))
story.append(Spacer(1, 6))
story.append(highlight_box(
"10 questions will be asked. Attempt ALL. Each answer: 2–4 lines max — definition, brief explanation or one key clinical point.",
bg=ORANGE_LIGHT, border=ORANGE
))
story.append(Spacer(1, 8))
story.append(Paragraph("DEFINITIONS & TERMINOLOGY", sub_head))
def2 = [
"Define fracture; types", "Dislocation vs subluxation",
"Coxa vara / Coxa valga", "Varus vs valgus deformity",
"Osteotomy", "Arthrodesis",
"Arthroplasty", "Bone graft",
"Tenodesis", "Wolff's law",
"Hilton's law", "Callus (provisional & permanent)",
"Non-union and malunion", "Delayed union",
"Avascular necrosis (AVN)",
]
story.append(two_col_list(def2, ORANGE_LIGHT))
story.append(Spacer(1, 6))
story.append(Paragraph("CLINICAL SIGNS & SPECIAL TESTS", sub_head))
signs2 = [
"Trendelenburg sign & test", "Thomas test",
"Lachman's test", "McMurray's test",
"Anterior/Posterior drawer test", "Ortolani's & Barlow's test",
"Phalen's test / Tinel's sign", "Lasegue's sign (SLR test)",
"Schober's test", "Finkelstein's test",
"Apley's grind & distraction test", "Speed's / Yergason's test",
"Hawkins-Kennedy test", "Cobb's angle",
"Gaenslen's test",
]
story.append(two_col_list(signs2, LIGHT_BLUE))
story.append(Spacer(1, 6))
story.append(Paragraph("DEFORMITIES & SHORT CONCEPTS", sub_head))
deform2 = [
"Wrist drop", "Foot drop",
"Ape hand", "Claw hand",
"Swan neck deformity", "Boutonniere deformity",
"Mallet finger", "Trigger finger",
"Heberden's vs Bouchard's node", "RICE / PRICES principle",
"Spinal shock", "Brown-Sequard syndrome",
"Cauda equina syndrome", "Meralgia paraesthetica",
"Tarsal tunnel syndrome", "Crutch palsy",
"Erb's palsy", "Klumpke's palsy",
]
story.append(two_col_list(deform2, ORANGE_LIGHT))
story.append(Spacer(1, 6))
story.append(Paragraph("APPLIANCES & EQUIPMENT", sub_head))
equip2 = [
"Types of crutches", "Thomas splint",
"Hip spica", "Skeletal vs skin traction",
"KAFO / AFO / TLSO", "Milwaukee brace",
]
story.append(two_col_list(equip2, LIGHT_BLUE))
story.append(Spacer(1, 10))
# ═══════════════════════ GUARANTEED TOPICS TABLE ════════════════════════════
story.append(section_banner("🎯 GUARANTEED REPEAT TOPICS (Most Exam-Frequent)", DARK_BLUE))
story.append(Spacer(1, 6))
story.append(highlight_box(
"These topics have appeared repeatedly in MGR University BPT Clinical Orthopaedics papers. Prioritize these for revision.",
bg=GOLD_LIGHT, border=GOLD
))
story.append(Spacer(1, 8))
gtable_data = [
[Paragraph("Topic", table_hdr), Paragraph("Expected Marks", table_hdr),
Paragraph("Priority", table_hdr)],
[Paragraph("PIVD / Prolapsed Lumbar Disc", table_cell), Paragraph("15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Osteoarthritis of Knee", table_cell), Paragraph("15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Rheumatoid Arthritis", table_cell), Paragraph("15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Fracture Neck of Femur", table_cell), Paragraph("15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Low Back Pain", table_cell), Paragraph("15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Ankylosing Spondylitis", table_cell), Paragraph("5 or 15 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("CTEV / Club Foot", table_cell), Paragraph("5 or 15 marks", table_cell), Paragraph("⭐⭐", table_cell)],
[Paragraph("Colles' Fracture", table_cell), Paragraph("5 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Frozen Shoulder", table_cell), Paragraph("5 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Carpal Tunnel Syndrome", table_cell), Paragraph("5 marks", table_cell), Paragraph("⭐⭐", table_cell)],
[Paragraph("Trendelenburg Sign", table_cell), Paragraph("2 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Thomas Test", table_cell), Paragraph("2 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("SLR Test / Lasegue's Sign", table_cell), Paragraph("2 marks", table_cell), Paragraph("⭐⭐⭐", table_cell)],
[Paragraph("Coxa Vara / Valga", table_cell), Paragraph("2 marks", table_cell), Paragraph("⭐⭐", table_cell)],
[Paragraph("Cobb's Angle", table_cell), Paragraph("2 marks", table_cell), Paragraph("⭐⭐", table_cell)],
]
gcw = [(PAGE_W - 2*cm)*0.55, (PAGE_W - 2*cm)*0.25, (PAGE_W - 2*cm)*0.20]
gt = Table(gtable_data, colWidths=gcw)
gt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_BG]),
("GRID", (0,0), (-1,-1), 0.4, GREY_LINE),
("ALIGN", (1,0), (-1,-1), "CENTER"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (0,-1), 8),
]))
story.append(gt)
story.append(Spacer(1, 12))
# ═══════════════════════ EXAM STRATEGY ═══════════════════════════════════════
story.append(section_banner("📝 EXAM WRITING STRATEGY", GREEN))
story.append(Spacer(1, 6))
strategy_items = [
"<b>15-mark answer structure:</b> Introduction (1 mark) → Definition/Aetiology (2) → Pathology (2) → Clinical Features (3) → Investigations (2) → Management: Medical + Surgical (2) → PT Management: Goals + Techniques (3)",
"<b>5-mark answer structure:</b> Definition (0.5) → Pathology/Mechanism (1) → Clinical Features (1.5) → Management/PT (2)",
"<b>2-mark answer:</b> 2–3 crisp lines. State the definition or describe the test/sign precisely. Avoid padding.",
"<b>Always include:</b> Physiotherapy goals and treatment techniques in every ortho answer — this differentiates a BPT answer from an MBBS answer.",
"<b>Diagrams:</b> Draw labeled diagrams for fractures, deformities, and anatomy when possible — they earn extra marks.",
"<b>Use subheadings</b> within long answers. Examiners skim for keywords. Use bullet points under each heading.",
"<b>Investigations to always mention:</b> X-ray (AP + Lateral), MRI, CT scan, Blood: CBC, ESR, CRP, RA factor as relevant.",
]
for item in strategy_items:
story.append(Paragraph(f"• {item}", num_item))
story.append(Spacer(1, 3))
story.append(Spacer(1, 8))
story.append(highlight_box(
"NOTE: This guide is based on the official MGR University BPT syllabus (2010 & 2018 Regulations) and commonly repeated exam patterns. "
"Always supplement with your class notes, clinical experience, and guidance from your faculty. Good luck!",
bg=GOLD_LIGHT, border=GOLD
))
# ─── Build PDF ────────────────────────────────────────────────────────────────
doc = BaseDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1*cm, rightMargin=1*cm,
topMargin=1.2*cm, bottomMargin=1.2*cm,
title="MGR BPT Clinical Orthopaedics Quick Reference",
author="MGR University BPT Guide",
subject="Clinical Orthopaedics Important Questions",
)
# Cover page frame (no header/footer)
cover_frame = Frame(0, 0, PAGE_W, PAGE_H, leftPadding=0, rightPadding=0,
topPadding=0, bottomPadding=0, id="cover")
# Normal page frame
content_frame = Frame(
1*cm, 1.2*cm,
PAGE_W - 2*cm, PAGE_H - 2.8*cm,
id="content"
)
doc.addPageTemplates([
PageTemplate(id="cover", frames=[cover_frame], onPage=draw_cover_page),
PageTemplate(id="content", frames=[content_frame], onPage=draw_header_footer),
])
from reportlab.platypus import NextPageTemplate
story.insert(0, NextPageTemplate("cover"))
# After cover page break, switch to content template
# We insert a NextPageTemplate before the PageBreak
story.insert(2, NextPageTemplate("content"))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/ortho-bpt-guide && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/ortho-bpt-guide/MGR_BPT_Clinical_Ortho_QuickRef.pdf
MGR BPT Clinical Ortho QuickRef
PDF Document · PDF
| Section | Content |
|---|---|
| Cover Page | Styled title page with university name & exam info |
| Exam Pattern | Clear table — Section A/B/C with marks breakdown |
| 15-Mark Questions | 19 high-yield essay topics organized by category |
| 5-Mark Questions | 50+ short notes in 2-column tables (Fractures, UL, LL, Spine, Nerves, Procedures) |
| 2-Mark Questions | 55+ short answers (Definitions, Signs/Tests, Deformities, Equipment) |
| Guaranteed Repeat Topics | Color-coded priority table of most-repeated exam questions |
| Exam Writing Strategy | Answer structure guide for 15/5/2 mark responses |