gave me the important questions & answers based on Dr MGR medical university syllabus of clinical orthopedics for 3rd year in physiotherapy without physiotherapy management (regulation of 2017 - 2018 onwards )
Dr MGR medical university 3rd year BPT physiotherapy clinical orthopedics syllabus 2017 2018 regulation important topics
https://www.drmgrdu.ac.in/uploads/courses-offered/Physiother…
100% strain → fibrous tissue
| Type | Benign | Malignant |
|---|---|---|
| Bone-forming | Osteoma, Osteoid osteoma, Osteoblastoma | Osteosarcoma |
| Cartilage-forming | Osteochondroma, Chondroma, Chondroblastoma | Chondrosarcoma |
| Fibrous tissue | Fibrous dysplasia, NOF | Fibrosarcoma |
| Unknown origin | Giant cell tumour, Aneurysmal bone cyst | Ewing's sarcoma, Multiple myeloma |
| Metastatic | - | Metastases (most common malignant bone tumour overall) |
| Feature | Osteoarthritis (OA) | Rheumatoid Arthritis (RA) |
|---|---|---|
| Aetiology | Degenerative (wear and tear) | Autoimmune (Th1/Th17 mediated) |
| Age | >45 years | 30-50 years (can be any age) |
| Sex | F > M (hip/knee) | F:M = 3:1 |
| Joints involved | Weight-bearing: knee, hip, DIP, PIP, spine | Symmetrical small joints: MCP, PIP, wrists; spares DIP |
| Morning stiffness | <30 minutes | >1 hour |
| Joint changes | Cartilage loss, osteophytes, subchondral sclerosis, cysts | Synovial proliferation (pannus), erosions, osteoporosis |
| Serology | RF negative | RF positive (80%), anti-CCP positive |
| Systemic features | None | Fever, rheumatoid nodules, vasculitis, pulmonary/cardiac involvement |
| X-ray | Joint space narrowing, osteophytes, sclerosis, cysts | Periarticular osteoporosis, joint space narrowing, erosions |
| Treatment | Analgesia, joint replacement | DMARDs (methotrexate), TNF antagonists, steroids |
| Deformity | Cause |
|---|---|
| Foot drop | Peroneal + anterior tibial weakness |
| Calcaneus foot | Gastrocnemius weakness, dorsiflexors intact |
| Equinovarus | Complex muscle imbalance |
| Knee recurvatum | Quadriceps weakness with intact gastrocnemius |
| Paralytic dislocation of hip | Periacetabular muscle weakness |
| Scoliosis | Paraspinal muscle imbalance |
18 months: Open reduction ± pelvic/femoral osteotomy
Sources used:
- Miller's Review of Orthopaedics, 9th Ed (ISBN 9780443112140)
- Rockwood and Green's Fractures in Adults, 10th Ed 2025 (ISBN 9781975211608)
- Bailey and Love's Short Practice of Surgery, 28th Ed (ISBN 9780367548117)
- Campbell's Operative Orthopaedics, 15th Ed 2026 (ISBN 9780443117633)
- Robbins, Cotran & Kumar Pathologic Basis of Disease (ISBN 9780443264528)
- Dr. MGR Medical University BPT Syllabus 2018-19 (official syllabus document)
Exam Tips for Dr. MGR University:
- Long essay questions (10 marks) frequently asked: Fracture healing, Osteomyelitis, TB spine, Osteosarcoma, Rheumatoid arthritis vs OA, Poliomyelitis, Colles' fracture, Shoulder dislocation
- Short essays (5 marks): Compartment syndrome, Volkmann's contracture, Sudeck's atrophy, Scoliosis, CTEV management, DDH, Bone tumour classification
- Short notes (2 marks): Cobb's angle, Denis classification, Garden classification, Bankart lesion, Codman's triangle, Onion-skin periosteal reaction, Bamboo spine, HLA-B27
Create a PDF summary document of these Q&A for quick revision
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/ortho-qa && echo "directory created"
~/ortho-qa/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem
OUTPUT_PATH = "/tmp/workspace/ortho-qa/Clinical_Orthopedics_QA_DrMGR_BPT3rdYear.pdf"
# ── Page setup ──────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
leftMargin=18*mm, rightMargin=18*mm,
topMargin=18*mm, bottomMargin=18*mm,
title="Clinical Orthopedics Q&A – 3rd Year BPT | Dr. MGR Medical University",
author="Orris AI"
)
W = A4[0] - 36*mm # usable width
# ── Color palette ────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1A3A5C")
MID_BLUE = colors.HexColor("#2563A8")
LIGHT_BLUE = colors.HexColor("#D6E8FA")
ACCENT = colors.HexColor("#E84C3D")
GOLD = colors.HexColor("#F0A500")
LIGHT_GREY = colors.HexColor("#F4F6F9")
MID_GREY = colors.HexColor("#6B7280")
GREEN = colors.HexColor("#16A34A")
TABLE_HDR = colors.HexColor("#1A3A5C")
TABLE_ALT = colors.HexColor("#EFF6FF")
# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
doc_title = ParagraphStyle("DocTitle",
fontSize=20, leading=26, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_CENTER)
doc_sub = ParagraphStyle("DocSub",
fontSize=11, leading=15, textColor=colors.HexColor("#CBD5E1"),
fontName="Helvetica", alignment=TA_CENTER)
unit_heading = ParagraphStyle("UnitHeading",
fontSize=13, leading=17, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_LEFT,
spaceBefore=6, spaceAfter=4)
q_style = ParagraphStyle("Question",
fontSize=10.5, leading=14.5, textColor=DARK_BLUE,
fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3,
leftIndent=3)
a_style = ParagraphStyle("Answer",
fontSize=9.5, leading=13.5, textColor=colors.HexColor("#1F2937"),
fontName="Helvetica",
spaceBefore=2, spaceAfter=4,
leftIndent=8)
bullet_style = ParagraphStyle("Bullet",
fontSize=9.5, leading=13, textColor=colors.HexColor("#1F2937"),
fontName="Helvetica",
leftIndent=18, firstLineIndent=-10,
spaceBefore=1, spaceAfter=1)
sub_heading = ParagraphStyle("SubHeading",
fontSize=9.5, leading=13, textColor=MID_BLUE,
fontName="Helvetica-Bold",
leftIndent=8, spaceBefore=4, spaceAfter=2)
note_style = ParagraphStyle("Note",
fontSize=8.5, leading=12, textColor=MID_GREY,
fontName="Helvetica-Oblique",
leftIndent=8, spaceBefore=2)
tip_style = ParagraphStyle("Tip",
fontSize=9, leading=13, textColor=colors.HexColor("#92400E"),
fontName="Helvetica",
leftIndent=6, spaceAfter=3)
# ── Helper functions ─────────────────────────────────────────────────────────
def unit_block(title_text, color=DARK_BLUE):
tbl = Table([[Paragraph(title_text, unit_heading)]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS",(0,0), (-1,-1), [4,4,4,4]),
]))
return tbl
def q_block(num, question_text):
label = f"Q{num}."
return Paragraph(f'<font color="#E84C3D">{label}</font> {question_text}', q_style)
def a_para(text):
return Paragraph(text, a_style)
def bullet(text, indent=18):
s = ParagraphStyle("B2", parent=bullet_style, leftIndent=indent)
return Paragraph(f"\u2022 {text}", s)
def sub_h(text):
return Paragraph(text, sub_heading)
def note(text):
return Paragraph(f"<i>{text}</i>", note_style)
def hr():
return HRFlowable(width="100%", thickness=0.4, color=colors.HexColor("#CBD5E1"),
spaceAfter=4, spaceBefore=2)
def spacer(h=4):
return Spacer(1, h*mm)
def make_table(headers, rows, col_widths=None):
data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle("TH",
fontSize=8.5, fontName="Helvetica-Bold",
textColor=colors.white, alignment=TA_CENTER)
) for h in headers]]
for i, row in enumerate(rows):
bg = TABLE_ALT if i % 2 == 0 else colors.white
data.append([Paragraph(str(c), ParagraphStyle("TD",
fontSize=8.5, fontName="Helvetica",
textColor=colors.HexColor("#1F2937")))
for c in row])
if col_widths is None:
col_widths = [W / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("ROWBACKGROUNDS",(0,1),(-1,-1),[TABLE_ALT, colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E1")),
("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"),
]))
return t
# ═══════════════════════════════════════════════════════════════════════════
# Cover page
# ═══════════════════════════════════════════════════════════════════════════
def cover_page():
cover_tbl = Table([[""]], colWidths=[W], rowHeights=[38*mm])
cover_tbl.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_BLUE),
("ROUNDEDCORNERS",(0,0),(-1,-1),[8,8,8,8]),
]))
title_cell = Table([[
Paragraph("CLINICAL ORTHOPEDICS", doc_title),
Paragraph("Important Questions & Answers for Quick Revision", doc_sub),
Paragraph("3rd Year BPT | Dr. MGR Medical University | Regulation 2017-2018", doc_sub),
]], colWidths=[W])
title_cell.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_BLUE),
("TOPPADDING",(0,0),(-1,-1),14),
("BOTTOMPADDING",(0,0),(-1,-1),14),
("LEFTPADDING",(0,0),(-1,-1),14),
("ROUNDEDCORNERS",(0,0),(-1,-1),[8,8,8,8]),
]))
info_data = [
["Subject", "Clinical Orthopedics (Theory)"],
["Year / Course", "3rd Year Bachelor of Physiotherapy (BPT)"],
["University", "Tamil Nadu Dr. M.G.R. Medical University, Chennai"],
["Regulation", "2017-2018 Onwards (Non-Semester)"],
["Coverage", "35 Q&A across 14 Syllabus Units"],
["Note", "Physiotherapy management excluded as per instructions"],
]
info_tbl = Table(info_data, colWidths=[55*mm, W-55*mm])
info_tbl.setStyle(TableStyle([
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0), (1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("TEXTCOLOR", (0,0), (0,-1), DARK_BLUE),
("BACKGROUND", (0,0), (0,-1), LIGHT_BLUE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E1")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("ROWBACKGROUNDS",(1,0),(-1,-1),[colors.white, LIGHT_GREY]),
]))
return [
title_cell, spacer(6),
info_tbl, spacer(4),
HRFlowable(width="100%", thickness=1, color=GOLD, spaceAfter=6),
Paragraph(
"Sources: Miller's Review of Orthopaedics 9E • Rockwood & Green's Fractures in Adults 10E • "
"Bailey & Love's Short Practice of Surgery 28E • Campbell's Operative Orthopaedics 15E • "
"Robbins Cotran Kumar Pathologic Basis of Disease",
note_style),
PageBreak()
]
# ═══════════════════════════════════════════════════════════════════════════
# Build content
# ═══════════════════════════════════════════════════════════════════════════
story = []
story += cover_page()
# ── UNIT A ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT A | General Principles of Fractures"))
story.append(spacer(2))
story.append(q_block(1, "Define a fracture and classify it."))
story.append(a_para("A <b>fracture</b> is a break in the continuity of bone."))
story.append(sub_h("Classification:"))
story.append(bullet("<b>By skin integrity:</b> Open (compound) vs. Closed (simple)"))
story.append(bullet("<b>By pattern:</b> Transverse, Oblique, Spiral, Comminuted, Segmental, Greenstick (children), Stress, Pathological"))
story.append(bullet("<b>By displacement:</b> Undisplaced, Displaced (angulated, rotated, shortened, impacted)"))
story.append(bullet("<b>By cause:</b> Traumatic, Pathological, Stress/Fatigue"))
story.append(hr())
story.append(q_block(2, "Describe the stages and types of fracture healing."))
story.append(sub_h("1. Direct (Primary) Bone Healing:"))
story.append(bullet("Requires absolute stability and anatomical reduction with compression"))
story.append(bullet("No callus formation — osteoclastic cutting cones cross fracture line"))
story.append(bullet("Occurs after rigid internal fixation (e.g., compression plates)"))
story.append(sub_h("2. Indirect (Secondary) Bone Healing (most common):"))
story.append(bullet("Stages: Haematoma → Fibrous tissue → Soft callus → Hard callus → Remodelling"))
story.append(bullet("<b>Perren's theory</b> — strain determines tissue differentiation:"))
story.append(Paragraph(" • >100% strain → fibrous tissue | <10% → soft callus | <2% → hard callus/bone", a_style))
story.append(sub_h("Factors impairing healing:"))
story.append(bullet("Infection, poor blood supply, diabetes, PVD, smoking, corticosteroids, malnutrition"))
story.append(sub_h("Growth factors in fracture healing:"))
story.append(bullet("<b>BMP</b> — osteoinductive; <b>TGF-β</b> — regulates callus; <b>IGF-2</b> — collagen & bone formation; <b>PDGF</b> — chemotactic for inflammatory cells"))
story.append(note("Source: Miller's Review of Orthopaedics 9E, Table 1.7 & 1.9; Bailey & Love's 28E, p.445"))
story.append(hr())
story.append(q_block(3, "What is delayed union, non-union, and malunion?"))
story.append(bullet("<b>Delayed union:</b> Takes longer than expected but eventually heals"))
story.append(bullet("<b>Non-union:</b> Fails to unite — Hypertrophic (elephant foot, adequate blood supply, inadequate stability) or Atrophic (inadequate blood supply)"))
story.append(bullet("<b>Malunion:</b> Heals in unsatisfactory position (angulation, rotation, shortening)"))
story.append(hr())
story.append(q_block(4, "What are the complications of fractures? Describe Volkmann's ischaemic contracture."))
story.append(sub_h("Complications:"))
story.append(bullet("<b>Immediate:</b> Haemorrhage, nerve/vessel injury, visceral injury"))
story.append(bullet("<b>Early:</b> Infection, fat embolism, acute compartment syndrome"))
story.append(bullet("<b>Late:</b> Delayed/non-union, malunion, AVN, myositis ossificans, Sudeck's atrophy, carpal tunnel syndrome"))
story.append(sub_h("Volkmann's Ischaemic Contracture:"))
story.append(bullet("Ischaemia from compartment syndrome (especially elbow region)"))
story.append(bullet("Common cause: Supracondylar fracture humerus in children, tight POP cast"))
story.append(bullet("Muscle necrosis → fibrosis → contracture (wrist flexion, finger flexion, thumb adduction)"))
story.append(bullet("<b>5 P's of compartment syndrome:</b> Pain (on passive stretch), Pressure, Paralysis, Paraesthesia, Pallor"))
story.append(hr())
story.append(q_block(5, "What is Sudeck's atrophy (CRPS Type I)?"))
story.append(bullet("Also called Reflex Sympathetic Dystrophy (RSD)"))
story.append(bullet("<b>Features:</b> Burning pain, allodynia, vasomotor changes, trophic skin/nail changes, osteoporosis"))
story.append(bullet("<b>X-ray:</b> Patchy/spotty osteoporosis (distinguishes from disuse osteoporosis)"))
story.append(bullet("<b>Stages:</b> Acute (warm, swollen) → Dystrophic (cold) → Atrophic"))
story.append(spacer(3))
# ── UNIT B ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT B | Upper Limb Fractures & Dislocations"))
story.append(spacer(2))
story.append(q_block(6, "Classify and describe supracondylar fracture of the humerus."))
story.append(bullet("<b>Most common elbow fracture in children</b> (5-10 years)"))
story.append(sub_h("Gartland Classification:"))
gartland = make_table(["Type","Description"],
[["I","Undisplaced"],["II","Displaced — posterior cortex intact"],["III","Completely displaced"]],
col_widths=[25*mm, W-25*mm])
story.append(gartland)
story.append(bullet("<b>Mechanism:</b> Fall on outstretched hand with hyperextension"))
story.append(bullet("<b>Most common nerve injury:</b> Anterior interosseous nerve (AIN)"))
story.append(bullet("<b>Complications:</b> Brachial artery injury, Volkmann's contracture, Cubitus varus (gunstock deformity — malunion)"))
story.append(bullet("<b>Management:</b> Type I — Above elbow POP; Type II/III — Closed reduction + percutaneous K-wire fixation"))
story.append(hr())
story.append(q_block(7, "Describe clinical features of Colles' fracture."))
story.append(bullet("<b>Definition:</b> Fracture of distal radius within 2.5 cm of wrist with dorsal displacement"))
story.append(bullet("<b>Common in:</b> Postmenopausal women (osteoporosis); mechanism — fall on outstretched hand"))
story.append(bullet("<b>Deformity:</b> Dinner fork deformity (dorsal angulation + radial shortening + radial deviation)"))
story.append(sub_h("X-ray findings:"))
story.append(bullet("Loss of volar tilt (normal 11-12°), loss of radial inclination (normal 22-23°), radial shortening"))
story.append(sub_h("Complications:"))
story.append(bullet("Median nerve compression (carpal tunnel syndrome), malunion, rupture of extensor pollicis longus, Sudeck's atrophy, shoulder-hand syndrome"))
story.append(hr())
story.append(q_block(8, "Describe anterior dislocation of the shoulder."))
story.append(bullet("<b>Most common joint dislocation (>90% of shoulder dislocations)</b>"))
story.append(bullet("<b>Types:</b> Subcoracoid (most common), Subglenoid, Subclavicular"))
story.append(bullet("<b>Mechanism:</b> Forced abduction + external rotation"))
story.append(sub_h("Clinical features:"))
story.append(bullet("Loss of shoulder contour (squared-off appearance)"))
story.append(bullet("Arm held in slight abduction and external rotation"))
story.append(bullet("Hollow below acromion; head palpable anteriorly"))
story.append(bullet("<b>Dugas test positive</b>"))
story.append(sub_h("Complications:"))
story.append(bullet("<b>Axillary nerve injury</b> — loss of sensation (regimental badge area), deltoid weakness"))
story.append(bullet("Bankart lesion (anterior labrum detachment), Hill-Sachs lesion (posterolateral humeral head compression fracture), rotator cuff tear, recurrent dislocation"))
story.append(bullet("<b>Reduction methods:</b> Kocher's method, Hippocratic method"))
story.append(spacer(3))
# ── UNIT C ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT C | Lower Limb Fractures & Dislocations"))
story.append(spacer(2))
story.append(q_block(9, "Describe fracture neck of femur — Garden's classification and complications."))
story.append(bullet("<b>Common in:</b> Elderly women with osteoporosis"))
story.append(sub_h("Garden's Classification:"))
garden_tbl = make_table(["Type","Description","Stability"],
[["I","Incomplete / impacted (valgus)","Stable"],
["II","Complete, undisplaced","Stable"],
["III","Complete, partially displaced","Unstable"],
["IV","Complete, fully displaced","Unstable"]],
col_widths=[18*mm, 80*mm, W-98*mm])
story.append(garden_tbl)
story.append(sub_h("Most feared complication: AVN of femoral head"))
story.append(bullet("Blood supply disrupted: Medial circumflex femoral artery"))
story.append(bullet("Higher risk in Garden III/IV"))
story.append(sub_h("Management:"))
story.append(bullet("Garden I/II: Internal fixation (cannulated screws)"))
story.append(bullet("Garden III/IV in elderly: Hemiarthroplasty or total hip replacement"))
story.append(hr())
story.append(q_block(10, "Describe fracture shaft of femur — displacement patterns and complications."))
story.append(sub_h("Displacement by deforming muscles:"))
deform_tbl = make_table(["Level","Proximal fragment","Distal fragment"],
[["Upper third","Flexion (iliopsoas), Abduction (glutei), External rotation","—"],
["Middle third","Variable","Variable"],
["Lower third","—","Pulled posteriorly (gastrocnemius) — risk of popliteal artery injury"]],
col_widths=[28*mm, 65*mm, W-93*mm])
story.append(deform_tbl)
story.append(bullet("<b>Blood loss:</b> 1-2 litres into thigh — significant haemorrhage"))
story.append(bullet("<b>Complications:</b> Fat embolism syndrome, neurovascular injury, malunion"))
story.append(bullet("<b>Management:</b> Thomas splint (immediate), Intramedullary nail (definitive)"))
story.append(hr())
story.append(q_block(11, "Describe knee injuries — meniscus tear and ACL injury."))
story.append(sub_h("Medial Meniscus Tear:"))
story.append(bullet("More commonly injured than lateral (less mobile, attached to MCL)"))
story.append(bullet("Mechanism: Twisting with foot planted"))
story.append(bullet("Signs: Medial joint line tenderness, <b>McMurray's test</b>, Apley's grinding test"))
story.append(sub_h("ACL Injury:"))
story.append(bullet("Audible 'pop', immediate haemarthrosis, instability"))
story.append(bullet("<b>Lachman's test</b> (most sensitive), Anterior drawer test, Pivot shift test"))
story.append(bullet("PCL injury: Posterior drawer test positive"))
story.append(spacer(3))
# ── UNIT D ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT D | Spinal Fractures & Dislocations"))
story.append(spacer(2))
story.append(q_block(12, "Describe Denis three-column theory and classify spinal injuries."))
story.append(sub_h("Denis Three-Column Concept:"))
denis_tbl = make_table(["Column","Components"],
[["Anterior","Anterior longitudinal ligament + anterior 2/3 of vertebral body + disc"],
["Middle","Posterior 1/3 of vertebral body + posterior annulus + PLL"],
["Posterior","Neural arch, facets, interspinous & supraspinous ligaments"]],
col_widths=[28*mm, W-28*mm])
story.append(denis_tbl)
story.append(bullet("<b>Stability rule:</b> 1 column injured = stable; ≥2 columns = unstable"))
story.append(sub_h("Classification (thoracolumbar):"))
story.append(bullet("<b>Compression fracture</b> — anterior column only — stable"))
story.append(bullet("<b>Burst fracture</b> — anterior + middle columns — potentially unstable"))
story.append(bullet("<b>Chance (flexion-distraction)</b> — middle + posterior columns"))
story.append(bullet("<b>Fracture-dislocation</b> — all 3 columns — very unstable"))
story.append(hr())
story.append(q_block(13, "Describe the complications of spinal cord injury."))
story.append(bullet("<b>Spinal shock:</b> Temporary loss of all cord function below injury level (lasts 24-72 hours)"))
story.append(bullet("<b>Neurogenic shock:</b> Hypotension + bradycardia (cervical/high thoracic injuries)"))
story.append(bullet("<b>Respiratory:</b> Diaphragm paralysis (C3, C4, C5 — 'C3, 4, 5 keeps the diaphragm alive')"))
story.append(bullet("<b>Pressure sores (decubitus ulcers), DVT, Pulmonary embolism</b>"))
story.append(bullet("<b>Bladder:</b> Neurogenic bladder, UTI"))
story.append(bullet("<b>Bowel:</b> Neurogenic bowel, constipation"))
story.append(bullet("<b>Autonomic dysreflexia</b> (injuries above T6) — hypertensive emergency"))
story.append(bullet("<b>Spasticity, contractures, heterotopic ossification, osteoporosis</b>"))
story.append(spacer(3))
# ── UNIT E ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT E | Recurrent Dislocations"))
story.append(spacer(2))
story.append(q_block(14, "Describe recurrent dislocation of the shoulder."))
story.append(bullet("Follows initial traumatic anterior dislocation (especially in young patients <25 years)"))
story.append(sub_h("Pathological Lesions:"))
story.append(bullet("<b>Bankart lesion:</b> Detachment of anterior glenoid labrum from glenoid rim (present in 95%)"))
story.append(bullet("<b>Hill-Sachs lesion:</b> Compression fracture of posterolateral humeral head"))
story.append(bullet("<b>Apprehension test positive</b> (90° abduction + external rotation → patient resists further movement)"))
story.append(bullet("<b>Management:</b> Bankart repair (arthroscopic); Latarjet procedure (for bony deficiency)"))
story.append(hr())
story.append(q_block(15, "Describe recurrent dislocation of the patella."))
story.append(bullet("More common in females, adolescents; associated with genu valgum, increased Q-angle, patella alta"))
story.append(bullet("Usually <b>lateral dislocation</b>"))
story.append(bullet("Predisposing: Hyperlaxity, shallow trochlear groove, underdeveloped lateral femoral condyle"))
story.append(bullet("Apprehension test positive (lateral push of patella causes fear/guarding)"))
story.append(bullet("<b>Management:</b> VMO strengthening; MPFL reconstruction; tibial tubercle transfer"))
story.append(spacer(3))
# ── UNIT F ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT F | Amputations"))
story.append(spacer(2))
story.append(q_block(16, "Classify amputations and state their indications."))
story.append(sub_h("Indications (4 D's):"))
story.append(bullet("<b>Dead limb:</b> Irreversible ischaemia, gangrene, frostbite"))
story.append(bullet("<b>Dangerous limb:</b> Malignant tumour, aggressive infection"))
story.append(bullet("<b>Damned nuisance limb:</b> Severely deformed, non-functional limb worse than prosthesis"))
story.append(bullet("<b>Destroyed limb:</b> Severe crush injury with no salvage potential"))
story.append(sub_h("Levels:"))
story.append(bullet("Lower limb: Syme's → Below-knee (BK/transtibial) → Through-knee → Above-knee (AK/transfemoral) → Hip disarticulation → Hindquarter"))
story.append(bullet("Upper limb: Transradial → Transhumeral → Forequarter"))
story.append(hr())
story.append(q_block(17, "What are the complications of amputations?"))
story.append(bullet("<b>Phantom limb sensation:</b> Feeling that the amputated limb is still present"))
story.append(bullet("<b>Phantom limb pain:</b> Painful sensations in the absent limb"))
story.append(bullet("<b>Stump neuroma:</b> Painful nerve end in stump"))
story.append(bullet("<b>Contractures:</b> Hip flexion (AK), knee flexion (BK)"))
story.append(bullet("Wound dehiscence, flap necrosis, haematoma, stump breakdown under prosthesis, osteophyte formation"))
story.append(spacer(3))
# ── UNIT G ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT G | Bone and Joint Infections"))
story.append(spacer(2))
story.append(q_block(18, "Describe acute haematogenous osteomyelitis."))
story.append(bullet("<b>Most common organism:</b> Staphylococcus aureus"))
story.append(bullet("<b>Pathophysiology:</b> Bacteria seed the metaphysis → pus → subperiosteal abscess → involucrum (reactive new bone) surrounds sequestrum (dead bone)"))
story.append(bullet("<b>Most common site in children:</b> Distal femur, proximal tibia, proximal humerus"))
story.append(sub_h("Clinical features:"))
story.append(bullet("Fever, toxicity, local pain/tenderness/swelling, pseudoparalysis (refusal to move limb)"))
story.append(bullet("Raised ESR, CRP, WBC; blood culture positive (50%)"))
story.append(bullet("<b>X-ray:</b> Normal first 10-14 days; later periosteal elevation, bone destruction"))
story.append(bullet("<b>MRI:</b> Earliest changes (within 3-5 days) — investigation of choice"))
story.append(sub_h("Cierny-Mader Classification (chronic osteomyelitis):"))
cierny_tbl = make_table(["Type","Anatomic","Host Class","Characteristics"],
[["I","Medullary","A","Good immune system"],
["II","Superficial","B","Locally/systemically compromised"],
["III","Localized","C","Treatment worse than disease"],
["IV","Diffuse","",""]],
col_widths=[16*mm, 38*mm, 30*mm, W-84*mm])
story.append(cierny_tbl)
story.append(note("Source: Rockwood & Green's Fractures in Adults 10E, Table 29-3"))
story.append(hr())
story.append(q_block(19, "Describe septic arthritis."))
story.append(bullet("<b>Organism:</b> S. aureus (most common); N. gonorrhoeae (sexually active adults); Salmonella (sickle cell disease)"))
story.append(bullet("<b>Clinical features:</b> Acute painful, swollen, warm joint; held in position of maximum volume"))
story.append(bullet("<b>Joint aspiration:</b> WBC >50,000/mm³ (>75% PMN), low glucose, positive Gram stain/culture — <b>gold standard</b>"))
story.append(bullet("<b>Management:</b> URGENT joint washout (arthroscopic or open) + IV antibiotics (4-6 weeks)"))
story.append(hr())
story.append(q_block(20, "Describe tuberculosis of bone and joints, including Pott's disease."))
story.append(bullet("<b>Organism:</b> Mycobacterium tuberculosis"))
story.append(bullet("<b>Most commonly involved joint:</b> Hip and knee (children); Spine (adults)"))
story.append(sub_h("Spinal TB (Pott's Disease):"))
story.append(bullet("<b>Most common site:</b> Thoracolumbar junction (T10-L2)"))
story.append(bullet("Starts paradiscally → disc space narrowing → vertebral collapse → kyphosis (gibbus)"))
story.append(bullet("<b>Pott's paraplegia:</b> Cord compression by pus (cold abscess), granulation tissue, or collapsed vertebra"))
story.append(bullet("<b>Cold abscess:</b> No signs of inflammation — presents as psoas abscess pointing in groin"))
story.append(sub_h("Diagnosis:"))
story.append(bullet("X-ray: Periarticular osteoporosis, joint space narrowing, bone destruction"))
story.append(bullet("<b>MRI: Investigation of choice for spinal TB</b>"))
story.append(sub_h("Treatment:"))
story.append(bullet("Anti-TB drugs: HRZE × 2 months + HR × 10 months (total 12 months)"))
story.append(bullet("Surgery: Debridement + bone graft for spinal TB (Hong Kong operation — anterior approach)"))
story.append(spacer(3))
# ── UNIT H ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT H | Bone and Joint Tumours"))
story.append(spacer(2))
story.append(q_block(21, "Classify bone tumours."))
bone_tbl = make_table(["Type","Benign","Malignant"],
[["Bone-forming","Osteoma, Osteoid osteoma, Osteoblastoma","Osteosarcoma"],
["Cartilage-forming","Osteochondroma, Chondroma, Chondroblastoma","Chondrosarcoma"],
["Fibrous tissue","Fibrous dysplasia, NOF","Fibrosarcoma"],
["Unknown origin","Giant cell tumour, Aneurysmal bone cyst","Ewing's sarcoma, Multiple myeloma"],
["Metastatic","—","Most common malignant bone tumour overall"]],
col_widths=[38*mm, 60*mm, W-98*mm])
story.append(bone_tbl)
story.append(hr())
story.append(q_block(22, "Describe osteosarcoma."))
story.append(bullet("<b>Most common primary malignant bone tumour in children/adolescents</b>"))
story.append(bullet("<b>Age:</b> 10-25 years (second peak in elderly with Paget's disease)"))
story.append(bullet("<b>Site:</b> Metaphysis of long bones — distal femur (most common), proximal tibia, proximal humerus"))
story.append(sub_h("Radiology:"))
story.append(bullet("<b>Sunburst appearance</b> (spiculated periosteal reaction)"))
story.append(bullet("<b>Codman's triangle</b> (periosteal elevation at tumour edge)"))
story.append(bullet("Mixed lytic and sclerotic lesion in metaphysis"))
story.append(sub_h("Management:"))
story.append(bullet("Neoadjuvant chemotherapy → Limb-salvage surgery (wide resection) → Adjuvant chemotherapy"))
story.append(bullet("5-year survival: ~60-70% with limb-salvage"))
story.append(hr())
story.append(q_block(23, "Describe Ewing's sarcoma."))
story.append(bullet("<b>Second most common primary malignant bone tumour in children</b>"))
story.append(bullet("<b>Age:</b> 80% under 20 years; boys > girls"))
story.append(bullet("<b>Genetic hallmark:</b> t(11;22) translocation — EWSR1/FLI1 fusion gene (>90% of cases)"))
story.append(bullet("<b>Site:</b> Diaphysis of long bones (femur most common) and flat bones (pelvis)"))
story.append(sub_h("Clinical features (mimics infection):"))
story.append(bullet("Painful enlarging mass; tender, warm, swollen"))
story.append(bullet("Fever, elevated ESR, anaemia, leukocytosis"))
story.append(sub_h("Radiology:"))
story.append(bullet("<b>Onion-skin periosteal reaction</b> (characteristic)"))
story.append(bullet("Permeative / moth-eaten lytic lesion"))
story.append(sub_h("Histology:"))
story.append(bullet("Sheets of uniform small round blue cells with scant clear cytoplasm (PAS+ glycogen)"))
story.append(bullet("Homer-Wright rosettes may be seen"))
story.append(bullet("<b>Management:</b> Neoadjuvant chemo → Surgery/radiation → Adjuvant chemo (75% 5-year survival)"))
story.append(note("Source: Robbins Cotran Kumar Pathologic Basis of Disease, p.1100"))
story.append(hr())
story.append(q_block(24, "Describe multiple myeloma."))
story.append(bullet("<b>Most common primary malignant bone tumour in adults (>40 years)</b>"))
story.append(bullet("Malignant proliferation of plasma cells in bone marrow"))
story.append(sub_h("Clinical features:"))
story.append(bullet("Bone pain (backache) — most common symptom"))
story.append(bullet("Pathological fractures (punched-out lytic lesions)"))
story.append(bullet("Anaemia, recurrent infections, renal failure (Bence-Jones proteinuria, hypercalcaemia)"))
story.append(sub_h("Investigations:"))
story.append(bullet("Serum protein electrophoresis: M-band (monoclonal spike)"))
story.append(bullet("Urine: Bence-Jones proteins"))
story.append(bullet("X-ray: Punched-out lytic lesions; 'rain-drop skull'"))
story.append(bullet("<b>Bone marrow biopsy:</b> >10% plasma cells — diagnostic"))
story.append(spacer(3))
# ── UNIT I ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT I | Chronic Arthritis"))
story.append(spacer(2))
story.append(q_block(25, "Compare and contrast Osteoarthritis (OA) vs. Rheumatoid Arthritis (RA)."))
oa_ra_tbl = make_table(
["Feature","Osteoarthritis (OA)","Rheumatoid Arthritis (RA)"],
[["Aetiology","Degenerative (wear & tear)","Autoimmune (Th1/Th17 mediated)"],
["Age"," > 45 years","30-50 years"],
["Sex","F > M (hip/knee)","F:M = 3:1"],
["Joints involved","Weight-bearing: knee, hip, DIP, spine","Symmetrical small joints: MCP, PIP, wrists — SPARES DIP"],
["Morning stiffness","< 30 minutes"," > 1 hour"],
["Joint pathology","Cartilage loss, osteophytes, subchondral sclerosis","Synovial pannus, erosions, periarticular osteoporosis"],
["Serology","RF negative","RF positive (80%), anti-CCP positive"],
["Systemic features","None","Nodules, vasculitis, pulmonary/cardiac involvement"],
["X-ray","Joint space narrowing, osteophytes, cysts, sclerosis","Periarticular osteoporosis, erosions, joint space narrowing"],
["Treatment","Analgesia, joint replacement","DMARDs (methotrexate), TNF antagonists, steroids"]],
col_widths=[38*mm, 62*mm, W-100*mm])
story.append(oa_ra_tbl)
story.append(note("Source: Robbins Cotran Kumar Pathologic Basis of Disease, Table 26.5"))
story.append(hr())
story.append(q_block(26, "Describe ankylosing spondylitis."))
story.append(bullet("<b>Seronegative spondyloarthropathy</b> with enthesitis (inflammation at tendon/ligament insertions)"))
story.append(bullet("<b>HLA-B27 positive in ~90% of patients</b>"))
story.append(bullet("<b>Age/Sex:</b> Young males, 2nd-3rd decade"))
story.append(sub_h("Pathology:"))
story.append(bullet("Sacroiliac joint inflammation → fibrosis → ossification → bony ankylosis"))
story.append(sub_h("Clinical features:"))
story.append(bullet("Insidious onset low back pain and stiffness, worse in morning, improves with exercise"))
story.append(bullet("Loss of lumbar lordosis → thoracic kyphosis → 'question mark' posture"))
story.append(bullet("Restricted chest expansion (<5 cm)"))
story.append(bullet("Peripheral joint involvement (hips, knees, shoulders) in 1/3"))
story.append(sub_h("Extra-articular features (ABCDE):"))
story.append(bullet("<b>A</b>ortitis, <b>B</b>lockage of lungs (restrictive), <b>C</b>auda equina (late), <b>D</b>ublin (uveitis/iritis — most common), <b>E</b>nthesitis"))
story.append(sub_h("Investigations:"))
story.append(bullet("X-ray spine: <b>Bamboo spine</b> (bridging syndesmophytes)"))
story.append(bullet("X-ray SI joints: Erosion → Sclerosis → Fusion"))
story.append(bullet("MRI: Earliest changes; HLA-B27 positive; RF negative"))
story.append(bullet("<b>Schober's test:</b> <5 cm increase from 10 cm mark = abnormal lumbar flexion"))
story.append(spacer(3))
# ── UNIT J ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT J | Low Back Pain, Painful Arc Syndrome & Related Conditions"))
story.append(spacer(2))
story.append(q_block(27, "Describe IVDP (Intervertebral Disc Prolapse)."))
story.append(bullet("<b>Nucleus pulposus</b> herniates through torn fibres of annulus fibrosus"))
story.append(bullet("<b>Most common levels:</b> L4-L5 (compresses L5 root), L5-S1 (compresses S1 root)"))
story.append(sub_h("Root signs by level:"))
root_tbl = make_table(["Level","Root","Weakness","Numbness","Reflex lost"],
[["L4-L5","L5","Extensor hallucis longus (EHL)","Dorsum of foot","None"],
["L5-S1","S1","Plantar flexion (gastrocnemius)","Lateral border of foot","Ankle jerk"]],
col_widths=[22*mm, 18*mm, 55*mm, 50*mm, W-145*mm])
story.append(root_tbl)
story.append(bullet("<b>SLR (Lasegue's test) positive</b>; Crossed SLR more specific"))
story.append(bullet("<b>MRI:</b> Investigation of choice"))
story.append(bullet("<b>Management:</b> Conservative first → Microdiscectomy if conservative fails or neurological deficit"))
story.append(hr())
story.append(q_block(28, "Describe painful arc syndrome and subacromial impingement."))
story.append(bullet("<b>Painful arc:</b> Pain during mid-range shoulder abduction (60-120°); free below and above"))
story.append(bullet("<b>Cause:</b> Subacromial impingement of supraspinatus/subacromial bursa"))
story.append(bullet("<b>Neer's sign:</b> Passive forward flexion produces pain"))
story.append(bullet("<b>Hawkins-Kennedy test:</b> Forward flexion 90° + internal rotation → pain"))
story.append(sub_h("Rotator cuff tear (Supraspinatus most common):"))
story.append(bullet("<b>Drop arm test:</b> Cannot maintain arm in 90° abduction (complete tear)"))
story.append(bullet("<b>Empty can test (Jobe's):</b> Weakness/pain with resisted abduction, thumb down"))
story.append(hr())
story.append(q_block(29, "Describe frozen shoulder (Adhesive Capsulitis / Periarthritis Shoulder)."))
story.append(bullet("Painful restriction of <b>all</b> glenohumeral movements (especially external rotation)"))
story.append(bullet("<b>Associations:</b> Diabetes, thyroid disease, prolonged immobilisation"))
story.append(sub_h("Stages:"))
story.append(bullet("<b>Painful (Freezing):</b> 3-9 months — severe pain, progressive stiffness"))
story.append(bullet("<b>Adhesive (Frozen):</b> 9-15 months — pain reduces, severe restriction persists"))
story.append(bullet("<b>Resolution (Thawing):</b> 15-24 months — gradual return of movement"))
story.append(bullet("External rotation is lost first and returns last"))
story.append(spacer(3))
# ── UNIT K ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT K | Spinal Deformities"))
story.append(spacer(2))
story.append(q_block(30, "Classify and describe scoliosis."))
story.append(bullet("<b>Scoliosis:</b> Lateral curvature of the spine with rotation of vertebrae"))
story.append(sub_h("Classification by aetiology:"))
story.append(bullet("<b>Idiopathic (80%):</b> Infantile (<3 yrs), Juvenile (3-10 yrs), Adolescent (>10 yrs — most common)"))
story.append(bullet("<b>Congenital:</b> Failure of formation (hemivertebra) or failure of segmentation"))
story.append(bullet("<b>Neuromuscular:</b> Polio, cerebral palsy, muscular dystrophy"))
story.append(bullet("<b>Functional/postural:</b> Leg length discrepancy, muscle spasm (correctable)"))
story.append(bullet("<b>Cobb's angle:</b> Measured on X-ray to quantify curve severity"))
story.append(bullet("<b>Adams forward bending test:</b> Reveals rib hump (rotational deformity)"))
story.append(sub_h("Management:"))
story.append(bullet("< 25°: Observation | 25-40°: Bracing (Milwaukee/Boston brace) | >45°: Surgery (spinal fusion)"))
story.append(hr())
story.append(q_block(31, "Describe kyphosis and lordosis."))
story.append(sub_h("Kyphosis types:"))
story.append(bullet("<b>Postural:</b> Adolescents, correctable"))
story.append(bullet("<b>Scheuermann's disease:</b> Irregular end plates, wedging ≥3 consecutive vertebrae — rigid kyphosis"))
story.append(bullet("<b>TB (Pott's gibbus):</b> Angular sharp kyphosis from vertebral collapse"))
story.append(bullet("<b>Ankylosing spondylitis:</b> Smooth kyphosis with bamboo spine"))
story.append(sub_h("Lordosis:"))
story.append(bullet("<b>Compensatory:</b> After thoracic kyphosis or hip flexion deformity"))
story.append(bullet("<b>True:</b> Hip flexion contracture, spondylolisthesis, achondroplasia"))
story.append(spacer(3))
# ── UNIT L ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT L | Poliomyelitis"))
story.append(spacer(2))
story.append(q_block(32, "Describe poliomyelitis — pathology, clinical features, and management of residual paralysis."))
story.append(bullet("<b>Organism:</b> Poliovirus (Enterovirus, 3 serotypes); RNA virus; Faeco-oral transmission"))
story.append(bullet("<b>Pathology:</b> Anterior horn cells (LMN) of spinal cord destroyed → asymmetric flaccid paralysis"))
story.append(sub_h("LMN features:"))
story.append(bullet("Flaccid paralysis (hypotonia), Areflexia, Muscle wasting, Fasciculations — <b>NO sensory loss</b>"))
story.append(sub_h("Residual deformities:"))
deform_tbl2 = make_table(["Deformity","Cause"],
[["Foot drop","Peroneal + anterior tibial weakness"],
["Calcaneus foot","Gastrocnemius weakness, dorsiflexors intact"],
["Equinovarus","Complex muscle imbalance"],
["Knee recurvatum","Quadriceps weakness, gastrocnemius intact"],
["Paralytic hip dislocation","Periacetabular muscle weakness"],
["Scoliosis","Paraspinal muscle imbalance"]],
col_widths=[55*mm, W-55*mm])
story.append(deform_tbl2)
story.append(sub_h("Prevention:"))
story.append(bullet("<b>OPV</b> (oral, Sabin) or <b>IPV</b> (injectable, Salk)"))
story.append(sub_h("Management of residual paralysis:"))
story.append(bullet("<b>Orthoses:</b> AFO (foot drop), KAFO (quadriceps weakness)"))
story.append(bullet("<b>Tendon transfers:</b> Donor must be grade 4+ strength; synergistic transfers preferred"))
story.append(bullet("e.g. Tibialis posterior transfer for foot drop"))
story.append(spacer(3))
# ── UNIT M ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT M | Congenital & Acquired Deformities"))
story.append(spacer(2))
story.append(q_block(33, "Describe congenital talipes equinovarus (CTEV / Club foot)."))
story.append(bullet("<b>Most common congenital foot deformity</b>; Male:Female = 2:1"))
story.append(sub_h("Deformity — CAVE mnemonic:"))
story.append(bullet("<b>C</b>avus (high arch) | <b>A</b>dductus (forefoot adduction) | <b>V</b>arus (hindfoot) | <b>E</b>quinus (plantar flexion)"))
story.append(bullet("<b>Pirani scoring</b> — assesses severity"))
story.append(sub_h("Management:"))
story.append(bullet("<b>Ponseti method (gold standard):</b> Serial manipulation and casting × 6-8 weeks → percutaneous Achilles tenotomy (90%) → Foot Abduction Brace (FAB) for 4 years"))
story.append(bullet("Surgery (posteromedial release) for resistant/neglected cases"))
story.append(hr())
story.append(q_block(34, "Describe developmental dysplasia of the hip (DDH)."))
story.append(bullet("<b>Risk factors:</b> Female sex (6:1), breech presentation, firstborn, family history, oligohydramnios"))
story.append(sub_h("Clinical signs by age:"))
story.append(bullet("<b>Newborn:</b> Ortolani test (clunk of entry — reduction), Barlow test (clunk of exit — provocation)"))
story.append(bullet("<b>Walking child:</b> Trendelenburg gait (waddling), Trendelenburg sign positive, limited abduction, limb shortening"))
story.append(sub_h("Investigations:"))
story.append(bullet("Ultrasound (under 6 months); X-ray (after 6 months)"))
story.append(sub_h("Management:"))
story.append(bullet("Newborn to 6 months: <b>Pavlik harness</b>"))
story.append(bullet("6-18 months: Closed reduction + hip spica"))
story.append(bullet(">18 months: Open reduction ± pelvic/femoral osteotomy"))
story.append(spacer(3))
# ── UNIT N ──────────────────────────────────────────────────────────────────
story.append(unit_block("UNIT N | Orthoses and Prostheses"))
story.append(spacer(2))
story.append(q_block(35, "Classify lower limb orthoses and prostheses."))
story.append(sub_h("Orthoses:"))
orthoses_tbl = make_table(["Orthosis","Indication","Function"],
[["AFO (Ankle-Foot Orthosis)","Foot drop, flaccid paralysis","Holds ankle neutral, prevents equinus"],
["KAFO (Knee-Ankle-Foot Orthosis)","Quadriceps weakness, polio","Provides knee stability"],
["HKAFO","High-level SCI","Controls hip, knee, ankle"],
["Knee Orthosis (KO)","Knee ligament instability, OA knee","Offloads medial/lateral compartment"]],
col_widths=[40*mm, 60*mm, W-100*mm])
story.append(orthoses_tbl)
story.append(sub_h("Prostheses:"))
prosthesis_tbl = make_table(["Level","Prosthesis Type"],
[["Below-knee (transtibial)","PTB (Patellar Tendon Bearing) prosthesis"],
["Above-knee (transfemoral)","Ischial-bearing socket"]],
col_widths=[55*mm, W-55*mm])
story.append(prosthesis_tbl)
story.append(spacer(3))
# ── SHORT NOTES ──────────────────────────────────────────────────────────────
story.append(unit_block("SHORT NOTES | 2-5 Mark Topics", color=colors.HexColor("#374151")))
story.append(spacer(2))
short_notes = [
("Myositis Ossificans", "Ectopic bone formation in muscle/soft tissue after injury. Common after elbow fractures in children. X-ray: calcification. Treatment: leave alone (matures and may resolve)."),
("Shoulder-Hand Syndrome", "CRPS involving shoulder and hand. Burning pain, stiffness, skin changes. Associated with MI, stroke, Colles' fracture, cervical spine disease."),
("Carpal Tunnel Syndrome", "Median nerve compression in carpal tunnel. Symptoms: Pain/paraesthesia in thumb, index, middle, radial half of ring finger. Nocturnal pain. Tests: Tinel's sign, Phalen's test. Causes: Colles' fracture, pregnancy, hypothyroidism, RA."),
("Osteochondroma", "Most common benign bone tumour. Cartilage-capped bony exostosis; grows away from joint. Risk of malignant transformation in hereditary multiple exostosis (HME)."),
("Spondylolisthesis", "Forward slip of one vertebra over the next. Meyerding grading I-IV. Most common: L4-L5 or L5-S1. Causes low back pain, neurogenic claudication. Scotty dog sign on oblique X-ray."),
("Compartment Syndrome", "5 P's: Pain (passive stretch), Pressure, Paralysis, Paraesthesia, Pallor. Compartment pressure >30 mmHg or within 30 mmHg of diastolic BP = decompression needed. Treatment: Emergency fasciotomy."),
("Codman's Triangle", "Periosteal elevation at the edge of a bone tumour visible on X-ray. Seen in osteosarcoma and Ewing's sarcoma. Indicates aggressive bone tumour."),
("Bamboo Spine", "X-ray appearance in ankylosing spondylitis — bridging syndesmophytes between vertebral bodies; associated with HLA-B27."),
("Genu Varum / Valgum", "Bow legs (varum) / knock knees (valgum). Physiological in children. Pathological causes: Rickets (varum), Polio. OA commonly causes varus; RA causes valgus deformity."),
("Patellar Tap Test", "Fluid accumulation test in the knee joint. Patient supine, press suprapatellar pouch to empty it, then tap patella — tap felt if >15-20 mL fluid present."),
]
for term, definition in short_notes:
row_data = [[
Paragraph(term, ParagraphStyle("SN_Term",
fontSize=9.5, fontName="Helvetica-Bold",
textColor=DARK_BLUE, spaceBefore=2, spaceAfter=2, leftIndent=4)),
Paragraph(definition, ParagraphStyle("SN_Def",
fontSize=9, fontName="Helvetica",
textColor=colors.HexColor("#1F2937"),
spaceBefore=2, spaceAfter=2, leading=13))
]]
sn_tbl = Table(row_data, colWidths=[50*mm, W-50*mm])
sn_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), LIGHT_BLUE),
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 8),
("GRID", (0,0),(-1,-1), 0.4, colors.HexColor("#CBD5E1")),
]))
story.append(sn_tbl)
story.append(spacer(1))
story.append(spacer(4))
# ── EXAM TIPS ────────────────────────────────────────────────────────────────
story.append(unit_block("EXAM TIPS | Dr. MGR University BPT Clinical Orthopedics", color=colors.HexColor("#7C3AED")))
story.append(spacer(2))
tips = [
("Long Essay (10 marks)", [
"Fracture healing — types, stages, factors affecting",
"Osteomyelitis — acute haematogenous, pathology, management",
"Tuberculosis of spine (Pott's disease)",
"Osteosarcoma — clinical features, radiology, management",
"Rheumatoid arthritis vs Osteoarthritis — comparison",
"Poliomyelitis — pathology, residual paralysis, management",
"Colles' fracture — clinical features, complications, management",
"Anterior dislocation of shoulder",
]),
("Short Essay (5 marks)", [
"Compartment syndrome / Volkmann's contracture",
"Sudeck's atrophy (CRPS)",
"Scoliosis — classification and management",
"CTEV (Club foot) — Ponseti method",
"DDH — clinical features and management",
"Bone tumour classification",
"Ewing's sarcoma vs Osteosarcoma",
"Ankylosing spondylitis",
"Fracture neck of femur — Garden classification",
"IVDP — clinical features and investigations",
]),
("Short Notes (2 marks)", [
"Cobb's angle | Denis classification | Garden classification",
"Bankart lesion | Hill-Sachs lesion",
"Codman's triangle | Onion-skin periosteal reaction",
"Bamboo spine | HLA-B27",
"Phantom limb pain | Stump neuroma",
"Ponseti method | Pirani score",
"Scotty dog sign | Spondylolisthesis",
"Cold abscess | Involucrum and Sequestrum",
]),
]
for cat, items in tips:
tip_block = Table([[
Paragraph(cat, ParagraphStyle("TipCat",
fontSize=10, fontName="Helvetica-Bold",
textColor=colors.HexColor("#7C3AED"), spaceBefore=4, spaceAfter=2))
]], colWidths=[W])
tip_block.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#F5F3FF")),
("LEFTPADDING",(0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
]))
story.append(tip_block)
for item in items:
story.append(bullet(item, indent=20))
story.append(spacer(2))
# ── Footer note ──────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=1, color=GOLD, spaceBefore=8, spaceAfter=4))
story.append(Paragraph(
"This document covers the Clinical Orthopedics syllabus for 3rd Year BPT, "
"Tamil Nadu Dr. M.G.R. Medical University (Regulation 2017-18 onwards). "
"Physiotherapy management has been excluded as per instructions. "
"Content sourced from standard orthopedic textbooks (Miller's Review of Orthopaedics 9E, "
"Rockwood & Green 10E, Bailey & Love 28E, Campbell's Operative Orthopaedics 15E, Robbins Pathology).",
note_style))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT_PATH}")