Osce practical in Orthopedic and Trauma medicine

Asking for Preferences
Reading File
Finding Sources
Finding Sources
Searching the Web

OSCE orthopedic trauma medical student stations checklist examination fractures

Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Here is your complete Orthopedic & Trauma OSCE preparation guide for MBBS/MD level, covering study notes, practice stations, and examiner mark schemes.

Orthopedic & Trauma Medicine - OSCE Preparation Guide

MBBS/MD Level | Study Notes + Practice Stations + Mark Schemes


PART 1: CORE PRINCIPLES - HIGH-YIELD NOTES


1. THE UNIVERSAL APPROACH TO ANY FRACTURE

Every OSCE examiner expects you to follow this systematic framework regardless of which bone is fractured.
LOOK - FEEL - MOVE (+ Special Tests + Neurovascular)

History Framework (SOCRATES + Mechanism)

PointWhat to Ask
SiteWhich bone / joint?
OnsetSudden (trauma) vs. gradual (stress fracture)
CharacterType of pain - sharp, aching, throbbing
RadiationDown limb? Nerve territory?
AssociatedSwelling, deformity, inability to weight-bear
TimeWhen did it happen? First time?
ExacerbatingWeight bearing, movement
SeverityPain score, ability to function
MechanismFall on outstretched hand (FOOSH)? Twisting? High vs. low energy? Direct vs. indirect?
NeurovascularPins & needles, weakness, colour changes

2. THE 6 Ps OF VASCULAR COMPROMISE (must know cold)

Memorise as: "Pain, Pallor, Pulselessness, Paraesthesia, Paralysis, Poikilothermia (Perishingly cold)"
  • Pain - especially pain out of proportion to injury, or pain on passive stretch of muscles (key sign of compartment syndrome)
  • Pallor - white/dusky skin distal to injury
  • Pulselessness - absent or diminished distal pulses (compare sides)
  • Paraesthesia - numbness/tingling in dermatome/nerve territory distal to injury
  • Paralysis - inability to move distal muscles (late sign)
  • Poikilothermia - cold limb compared with contralateral side
Source: ROSEN's Emergency Medicine, Compartment Syndrome section

3. COMPARTMENT SYNDROME - OSCE RED FLAG

Compartment syndrome is a true orthopaedic emergency. Have a high index of suspicion for:
  • Crush injuries
  • Tibial shaft fractures (most common)
  • Forearm fractures
  • Any fracture with a tight cast
Classic presentation:
  • Pain out of proportion to injury
  • Pain on passive stretch of compartment muscles
  • Tense, woody feel of the compartment
  • Paraesthesia in the nerve running through the compartment
Management: Immediate fasciotomy - do not delay. Remove all circumferential dressings first.
Source: ROSEN's Emergency Medicine & Campbell's Operative Orthopaedics 15th Ed 2026

4. X-RAY INTERPRETATION FRAMEWORK

ABCDS system:
  • A - Alignment (bones in normal alignment? Dislocated?)
  • B - Bones (cortical breaks, density changes, lucent lines)
  • C - Cartilage (joint space - narrowed, widened?)
  • D - Density changes (sclerosis = stress/healing; lytic = pathological?)
  • S - Soft tissue (swelling, fat-pad signs, foreign bodies)
Always state:
  1. Type of X-ray (AP/lateral/oblique), date, patient name
  2. Adequacy (two views? two joints for long bones?)
  3. "I can see a fracture of the [bone] that is [transverse/spiral/oblique/comminuted], [displaced/undisplaced], [open/closed], at the [proximal/mid/distal] third"
Fracture patterns:
PatternMechanismExample
TransverseDirect blow / bending forceTibial shaft
SpiralTwisting / torsionTib-fib (running injury)
ObliqueAxial loading + angulationFemoral shaft
ComminutedHigh-energyTibial plateau
AvulsionMuscle/ligament pullLateral malleolus
PathologicalMinimal trauma on diseased boneMetastasis, osteoporosis
Stress/InsufficiencyRepetitive loading2nd metatarsal, tibia
GreenstickChildren (incomplete)Radius/ulna
Source: Rockwood and Green's Fractures in Adults, 10th ed 2025 - Classification section

PART 2: JOINT-BY-JOINT EXAMINATION CHECKLISTS


SHOULDER EXAMINATION CHECKLIST

LOOK: Muscle wasting (deltoid, supraspinatus, infraspinatus), asymmetry, swelling, scars, skin changes, deformity (step deformity in AC joint injury, anterior fullness in glenohumeral dislocation, squared-off deltoid in shoulder dislocation)
FEEL: Sternoclavicular joint -> clavicle -> AC joint -> coracoid -> greater tuberosity -> bicipital groove -> posterior joint line -> spine of scapula. Note temperature, tenderness.
MOVE (Active then Passive):
  • Abduction: 0-180° (painful arc = 60-120° suggests subacromial impingement)
  • Forward flexion: 0-180°
  • Extension: 0-60°
  • External rotation (arm at side): 0-90°
  • Internal rotation (hand behind back to which vertebral level)
Special Tests:
TestPositive FindingSignificance
Neer'sPain on passive forward flexion with arm pronatedSubacromial impingement
Hawkins-KennedyPain on passive internal rotation at 90° flexionSubacromial impingement
Empty Can (Jobe's)Weakness on resisted abduction at 30° forward flexionSupraspinatus tear
External rotation lag signCannot maintain externally rotated positionInfraspinatus/teres minor tear
Speed's testPain with resisted forward flexion at 90° (elbow straight, forearm supinated)Long head biceps pathology
Yergason'sPain in bicipital groove on resisted supination with elbow at 90°Biceps tendon pathology
Apprehension testApprehension with anterior force applied to posterior shoulderAnterior instability
Load-and-shiftAssess anterior/posterior translationInstability
Sulcus signInferior subluxation with downward traction on armMulti-directional instability
Cross-body adductionPain at AC jointAC joint pathology

ELBOW EXAMINATION CHECKLIST

LOOK: Carrying angle (cubitus valgus > 15° females, > 10° males - abnormal), swelling in olecranon bursa, medial/lateral epicondyle prominence
FEEL: Medial epicondyle -> lateral epicondyle -> radial head (rotate forearm) -> olecranon -> cubital tunnel
MOVE:
  • Flexion-extension: 0-145°
  • Pronation-supination: 90°/90°
Special Tests:
TestPositive FindingSignificance
Cozen's (lateral epicondyle)Pain at lateral epicondyle on resisted wrist extensionTennis elbow (lateral epicondylitis)
Mill'sPain at lateral epicondyle on passive wrist flexionTennis elbow
Golfer's elbow testPain at medial epicondyle on resisted wrist flexionMedial epicondylitis
Valgus stress testMedial pain/laxity at 30° flexionMCL injury
Varus stress testLateral pain/laxityLCL injury
Tinel's at cubital tunnelParaesthesia in ring/little fingerUlnar nerve entrapment

WRIST & HAND EXAMINATION CHECKLIST

LOOK: Anatomical snuffbox swelling (scaphoid fracture), FOOSH mechanism - think scaphoid!
Special Tests for Wrist:
TestPositiveSignificance
Anatomical snuffbox tendernessPain at snuffboxScaphoid fracture (treat as such even if X-ray normal - risk of AVN)
Scaphoid tubercle tendernessPain at tuberosityScaphoid fracture
Watson's (scaphoid shift)Clunk on radial deviationScaphoid instability
Finkelstein'sPain at radial styloid with ulnar deviation of fistDe Quervain's tenosynovitis
Piano key signSpringing of ulnar headDRUJ instability
Tinel's at wristParaesthesia in median nerve distributionCarpal tunnel syndrome
Phalen'sParaesthesia in 60 secondsCarpal tunnel syndrome
Scaphoid Fracture - Key OSCE fact:
X-ray may be normal in up to 20% of cases. If clinical suspicion is high (snuffbox tenderness + mechanism = FOOSH), treat as scaphoid fracture and immobilise. MRI or repeat X-ray at 10-14 days is the gold standard. Risk of avascular necrosis if missed.

HIP EXAMINATION CHECKLIST

Patient positioning: Supine, then lateral decubitus for Trendelenburg, then standing
LOOK: Gait (antalgic = short stance phase on painful side; Trendelenburg gait = pelvis drops to contralateral side due to abductor weakness), limb length discrepancy (true vs. apparent), rotational deformity
FEEL: Greater trochanter, anterior joint (inguinal region), ASIS
MOVE:
  • Flexion: 0-120°
  • Extension (in prone or Thomas test position): 0-30°
  • Abduction: 0-45°
  • Adduction: 0-30°
  • Internal rotation: 0-45°
  • External rotation: 0-45°
Special Tests:
TestPositiveSignificance
Thomas testOpposite hip flexes when tested hip is fully flexed (reveals fixed flexion deformity)FFD of hip
FABER/Patrick'sHip pain on Flexion-ABduction-External RotationHip pathology, SI joint pathology
FADIRHip pain on Flexion-ADduction-Internal RotationFemoroacetabular impingement (FAI), labral tear
Trendelenburg testPelvis drops on non-weight-bearing side when standing on one legAbductor (gluteus medius) weakness / superior gluteal nerve palsy
Log rollPain on passive internal/external rotationHip joint pathology
Neck of Femur (NOF) Fracture - Classic OSCE presentation:
  • Elderly female, osteoporosis, fall
  • Leg: shortened, externally rotated, unable to straight-leg raise
  • Garden classification: I = incomplete/valgus impacted; II = complete undisplaced; III = complete partial displacement; IV = complete full displacement
  • Management: surgical (hemiarthroplasty for displaced intracapsular; DHS for extracapsular)

KNEE EXAMINATION CHECKLIST

LOOK: Varus/valgus alignment, quadriceps wasting (measure at 10-15 cm above knee), effusion (patellar tap, bulge sign), scars, swelling
Effusion tests:
  • Bulge sign (sweep test): Stroke fluid from medial to lateral gutter, then medial stroke gives bulge - detects small effusions
  • Ballottement/Patellar tap: Press patella down - tap suggests moderate-large effusion
FEEL: Joint line (medial then lateral), tibial tubercle, patellar edges, MCL, LCL, popliteal fossa for Baker's cyst
MOVE:
  • Flexion: 0-140°
  • Extension: 0° (hyperextension to -10° is normal in some)
Special Tests:
TestPositiveSignificance
Lachman's (most sensitive)Soft/absent endpoint with anterior tibial translation at 20-30° flexionACL tear
Anterior DrawerAnterior tibial translation at 90°ACL tear
Posterior DrawerPosterior tibial translation at 90°PCL tear
Valgus stress test (at 30° and 0°)Medial pain/laxityMCL injury
Varus stress test (at 30° and 0°)Lateral pain/laxityLCL injury
McMurray'sPain + click with flexion/rotationMeniscal tear
Apley grind testPain on compression + rotation in prone positionMeniscal tear
Thessaly testPain/click at 20° single-leg squat with rotationMeniscal tear
Clarke's testPain on patellar compression against femurPatellofemoral syndrome

ANKLE & FOOT EXAMINATION CHECKLIST

Ottawa Rules (must state in any ankle OSCE): X-ray indicated if:
  • Tenderness at posterior tip or lower 6 cm of lateral malleolus
  • Tenderness at posterior tip or lower 6 cm of medial malleolus
  • Inability to weight bear (4 steps) immediately and in ED
  • Tenderness at navicular base or base of 5th metatarsal (foot rules)
Special Tests:
TestPositiveSignificance
Thompson testNo plantar flexion on calf squeeze (prone position)Achilles tendon rupture
Anterior Drawer (ankle)Anterior translation of talusATFL tear (lateral ankle sprain)
Talar tiltInversion tilt vs. contralateral sideCFL injury (severe lateral sprain)
Mulder's clickPainful click on web-space compressionMorton's neuroma

SPINE EXAMINATION (Cervical & Lumbar)

Cervical:
  • MOVE: flexion (70°), extension (70°), lateral flexion (45°), rotation (80°)
  • Spurling's test: Compress head in lateral flexion - reproduces radicular pain = nerve root compression
  • Lhermitte's sign: Electric shock down spine on neck flexion = spinal cord involvement (myelopathy/MS)
  • ASIA grading if cord injury suspected
Lumbar:
  • Schober's test: 10 cm mark above and 5 cm below L5-S1; should increase to >15 cm on full flexion (tests lumbar mobility, reduced in ankylosing spondylitis)
  • Straight Leg Raise (SLR / Lasegue's): Pain radiating below knee at 30-70° = positive; tests L4/L5/S1 nerve roots; sciatic nerve tension
  • Crossed SLR: Raising opposite leg reproduces symptoms = large central/lateral disc prolapse
  • Femoral Stretch Test (prone, knee flexion): Anterior thigh pain = L2/L3/L4 nerve root compression
Dermatomes and myotomes (must know):
LevelSensationMotorReflex
L1/L2Groin/upper thighHip flexionCremasteric
L3/L4Medial knee/shinKnee extensionKnee jerk
L4Medial foot, big toe (medial)Ankle dorsiflexionKnee jerk
L5Dorsum of foot, 1st web spaceBig toe extensionNone
S1Lateral foot, soleAnkle plantar flexionAnkle jerk
S3/S4PerineumBladder/bowelAnal wink
Saddle anaesthesia (S3-S5) + bilateral neurology + bladder/bowel dysfunction = Cauda Equina Syndrome = surgical emergency

PART 3: PRACTICE OSCE STATIONS WITH FULL MARK SCHEMES


STATION 1: Tibial Fracture (Emergency Trauma)

Candidate instructions: You are the junior doctor in A&E. A 29-year-old woman fell while running, twisting her left lower leg. She has immediate-onset severe left lower leg pain and cannot weight-bear. Perform an orthopaedic examination, request investigations, interpret the X-ray and give a management plan.
MARK SCHEME:
DomainActionMarks
IntroductionWash hands, introduce, consent, expose2
HistoryMechanism (twisting = spiral), timing, weight-bearing, neurovascular Sx3
LOOKSwelling, deformity, shortening, rotation, skin integrity (open fracture?)3
FEELTenderness (bony point), assess compartment tension (tense = emergency), temperature, CRT3
NeurovascularDistal pulses (DP + PT), capillary refill, sensation (peroneal/tibial distribution), motor (EHL, ankle DF/PF)4
Compartment syndromeNames 4 compartments of leg, signs of CS, states it is an emergency3
InvestigationsRequests AP + lateral tib/fib X-ray (including knee and ankle joints)2
X-ray InterpretationStates: spiral fracture, which third, displaced/undisplaced, closed3
ManagementAnalgesia (IV morphine titrated) -> ABCDE if polytrauma -> splint -> admit -> orthopaedic referral -> IMN likely treatment4
Safety-nettingStates will recheck NV status after splint, monitor for compartment syndrome2
Total29
Examiner's model answer for management:
  1. ABCDE if trauma - rule out polytrauma
  2. IV access + analgesia (morphine + anti-emetic)
  3. Long leg posterior splint to immobilise
  4. Admit under orthopaedics
  5. Tetanus prophylaxis if open
  6. Definitive: intramedullary nail (IMN) for displaced/unstable tibial shaft fractures
  7. Non-operative (cast) reserved for: closed, stable, minimally displaced, low-energy fractures
Source: Campbell's Operative Orthopaedics 15th Ed 2026, Tibial Fractures chapter

STATION 2: Acutely Swollen Knee

Candidate instructions: A 22-year-old male footballer twists his right knee during a game. He felt a "pop" and the knee swelled up within 2 hours. Examine the knee and give a differential diagnosis and management plan.
MARK SCHEME:
DomainActionMarks
IntroductionWash hands, introduce, expose (shorts), observe gait2
LOOKEffusion (haemarthrosis = ACL, PCL, tibial plateau #), quadriceps wasting, alignment3
FEELPatellar tap / bulge test for effusion, joint line tenderness (medial = MCL/medial meniscus), lateral, temperature3
MOVEFlexion-extension range, quality of endpoint2
Lachman's testCorrect technique (20-30° flexion, thigh fixed, tibia drawn anteriorly) - MOST IMPORTANT ACL test4
Anterior drawerCorrect technique2
MCL/LCL stress testsCorrect technique at 30° and 0°2
Meniscal testsMcMurray's and/or Apley grind test2
DifferentialACL tear (most likely), PCL, MCL, meniscal tear, tibial plateau fracture3
InvestigationsPlain X-ray (exclude fracture), MRI knee (gold standard for ligament/meniscus)2
ManagementRICE, analgesia, physiotherapy, orthopaedic referral; ACL reconstruction if functionally unstable3
Total28
Key teaching point: Haemarthrosis (blood in joint) within 2 hours = ACL tear until proven otherwise. Rapid effusion = haemarthrosis. Slow effusion (overnight) = more likely synovial fluid from meniscal/chondral injury.

STATION 3: Hip Fracture in an Elderly Patient

Candidate instructions: An 80-year-old woman was found on the floor at home after a fall. She is unable to mobilise. Examine her hips and formulate a management plan.
MARK SCHEME:
DomainActionMarks
IntroductionWash hands, introduce, check pain level, expose2
LOOKShortened and externally rotated right leg, inability to lift leg off bed3
Limb lengthTrue length (ASIS to medial malleolus) vs. apparent length (umbilicus to medial malleolus)2
FEELGreater trochanter tenderness, palpate inguinal region2
MOVEUnable to perform active SLR; passive movement attempted gently (painful)2
NeurovascularDistal pulses, sensation, motor function of foot2
InvestigationsAP pelvis + lateral hip X-ray; bloods (FBC, U&E, clotting, group & save, ECG, CXR)3
ClassificationStates Garden classification (I-IV); importance for treatment decision3
ManagementAnalgesia (FNB = femoral nerve block excellent choice), catheterise, NBM, orthopaedic referral, ORIF vs. hemiarthroplasty4
Systemic contextRecognises likely osteoporosis, asks about medications (warfarin, bisphosphonates), bone protection2
Total25
Classification pearl:
  • Intracapsular (subcapital, transcervical): blood supply to femoral head at risk
    • Undisplaced (Garden I/II): internal fixation (cannulated screws / DHS)
    • Displaced (Garden III/IV) elderly: hemiarthroplasty; young patient: attempt ORIF to preserve head
  • Extracapsular (intertrochanteric, subtrochanteric): blood supply intact
    • Treatment: sliding hip screw (DHS) or proximal femoral nail (PFN)

STATION 4: Wrist Injury (FOOSH)

Candidate instructions: A 25-year-old fell on his outstretched hand playing rugby. He has right wrist pain and swelling. Examine his wrist and hand.
MARK SCHEME:
DomainActionMarks
IntroductionWash hands, expose bilaterally, observe from front and side2
LOOKDinner fork deformity (Colles), anatomical snuffbox swelling, bruising2
FEELAnatomical snuffbox (critical - scaphoid fracture!), scaphoid tubercle, distal radius, ulnar styloid4
MOVEWrist flexion/extension, radial/ulnar deviation, forearm pronation/supination2
Scaphoid testsCompression along thumb axis reproduces pain, snuffbox tenderness3
Median nerveSensation to palm (thenar eminence), index, middle finger (carpal tunnel injury with distal radius fracture)2
InvestigationsPA + lateral wrist X-ray; if normal but clinical suspicion high - MRI or repeat X-ray 10-14 days3
X-ray interpretationColles fracture = distal radius fracture with dorsal displacement, dorsal angulation, radial shortening, impaction. Dinner fork deformity3
ManagementUndisplaced: forearm cast; Displaced: manipulation under anaesthesia; if unstable: K-wires / volar plate3
Scaphoid managementIf suspected, thumb spica cast even if X-ray normal; if confirmed, scaphoid cast 6-12 weeks; waist fracture may need ORIF3
Total27
Scaphoid rule: Tenderness in the anatomical snuffbox = treat as scaphoid fracture until proven otherwise. Risk of avascular necrosis of proximal pole if missed or treated inadequately.

STATION 5: Shoulder Dislocation / Rotator Cuff

Candidate instructions: A 35-year-old rugby player presents with right shoulder pain after being tackled. Examine his shoulder and give a diagnosis.
MARK SCHEME:
DomainActionMarks
Introduce & look from front/back/sideSquared-off deltoid (anterior dislocation), muscle wasting, step deformity (AC joint), scars3
FEELBicipital groove, AC joint, GHJ line, coracoid, acromioclavicular, SCJ2
MOVEActive then passive abduction, forward flexion, IR/ER2
Painful arc60-120°2
Impingement testsNeer's, Hawkins-Kennedy2
Rotator cuff testsEmpty can (SS), external rotation lag (IS), lift-off or belly press (subscapularis)3
Instability testsApprehension, relocation, sulcus sign2
Axillary nerveCritical: sensation over regimental badge area (lateral deltoid); motor: deltoid contraction - check BEFORE and AFTER reduction3
InvestigationsAP + axial/lateral view + Y-view X-ray; Hill-Sachs lesion (posterolateral humeral head compression fracture - sign of prior anterior dislocation); Bankart lesion (anteroinferior glenoid rim avulsion)3
Reduction + managementHennepin/Cunningham technique; Kocher's; post-reduction X-ray; sling; immobilisation; physiotherapy; recurrence risk high in young3
Total25

STATION 6: Back Pain / Lumbar Disc Prolapse

Candidate instructions: A 45-year-old lorry driver has low back pain radiating down his left leg to the foot. Examine his spine and neurology.
MARK SCHEME:
DomainActionMarks
Inspect gait, observe spine from front/back/sideScoliosis, list to side, loss of lumbar lordosis2
MOVE lumbar spineFlexion (touch toes), extension, lateral flexion, Schober's test (normal >5 cm increase from 10 cm + 5 cm mark)3
SLRCorrectly performed (<70° with sciatic radiation below knee = positive)3
Neurological lower limbPower: hip flex, knee ext, ankle DF, big toe ext, ankle PF3
SensationL3 medial knee, L4 medial malleolus, L5 1st web space, S1 lateral foot3
ReflexesKnee jerk (L3/4), ankle jerk (S1), plantar response3
Red flags (must mention)Saddle anaesthesia, bladder/bowel dysfunction, bilateral leg weakness = Cauda Equina - emergency MRI + surgery3
InvestigationsX-ray to exclude bony pathology; MRI lumbar spine gold standard2
ManagementConservative: analgesia, NSAIDs, physiotherapy, bed rest short term only; if cauda equina = emergency decompression2
Total24

PART 4: HIGH-YIELD CLASSIFICATIONS YOU MUST KNOW

Fracture/ConditionClassificationKey Points
NOF fractureGarden I-IVI undisplaced (impacted); IV fully displaced
Tibial plateauSchatzker I-VII-IV low energy; V-VI high energy, bicondylar
Open fracturesGustilo-Anderson I-IIIIII = contaminated/vascular injury
Ankle fracturesWeber A/B/C (fibula) + Lauge-HansenC = above syndesmosis = unstable
Distal radiusColles/Smith/Barton; FrykmanColles = dorsal displacement; Smith = volar
Spinal cordASIA A-EA = complete; E = normal
Cervical spineSLIC (Subaxial Cervical Injury Classification)Score >4 = surgery
Periprosthetic hip #Vancouver A/B/CB2 = loose stem = revision; B1 = well-fixed = ORIF
Shoulder dislocationAnterior (95%), Posterior, Inferior (luxatio erecta)Posterior = after seizure/electrocution, fixed IR
Sources: Rockwood and Green's Fractures in Adults 10th Ed 2025; Campbell's Operative Orthopaedics 15th Ed 2026

PART 5: EMERGENCY ORTHOPAEDIC MANAGEMENT MNEMONICS

ATLS Primary Survey (Trauma OSCE)

ABCDE:
  • A - Airway (+ C-spine immobilisation)
  • B - Breathing
  • C - Circulation (haemorrhage control - splint pelvis if suspect pelvic fracture)
  • D - Disability (GCS, pupils)
  • E - Exposure / Environment (undress, logroll, keep warm)

Open Fracture Management

  1. ABCs / trauma resuscitation first
  2. Wound photograph, sterile saline soaked dressing - do NOT repeatedly unwrap
  3. IV antibiotics within 1 hour (co-amoxiclav OR cefuroxime)
  4. Tetanus prophylaxis
  5. Splint
  6. Urgent washout and debridement in theatre (ideally <6 hours for Gustilo IIIB/C)

Pelvic Fracture Haemorrhage Control

"Close the book" - pelvic binder or sheet around the greater trochanters for unstable pelvic fractures; can lose 4+ litres into retroperitoneum

PART 6: IMAGING INTERPRETATION - COMMON X-RAY CASES

CaseX-Ray FindingsYour Diagnosis
Elderly woman, fallNOF # - disrupted medial cortex, Garden typeNeck of femur fracture
Young adult, FOOSHLoss of carpal arcs, density lucency at scaphoid waistScaphoid fracture
Footballer, knee twistLateral capsular avulsion (Segond fracture = highly specific for ACL tear)ACL tear with Segond fracture
Wrist pain, dinner forkDorsal displacement/angulation of distal radiusColles' fracture
Young runner, lower legSpiral fracture tib/fibTibial shaft fracture
Elbow, childCRITOE ossification; posterior fat-pad signSupracondylar fracture / radial head fracture
Acute hip painLoss of Shenton's lineHip dislocation (posterior most common)
CRITOE (elbow ossification centres - children): Capitellum (1y) - Radial head (3y) - Internal epicondyle (5y) - Trochlea (7y) - Olecranon (9y) - External epicondyle (11y)
If you see an ossification centre out of sequence or an avulsed medial epicondyle - suspect injury.

QUICK REVISION SUMMARY

TopicKey Point
Compartment syndromePain on passive stretch + tense compartment + out-of-proportion pain = fasciotomy
ScaphoidSnuffbox tenderness = treat even if X-ray normal; risk AVN
NOF fractureShortened + ER leg; Garden I-IV; intracapsular vs. extracapsular determines treatment
Cauda equinaSaddle anaesthesia + bladder dysfunction = emergency MRI + decompression
ACLHaemarthrosis + pop + Lachman's positive; MRI to confirm
AchillesThompson test positive = no plantar flexion = rupture
Ottawa rulesKnow these: lateral/medial malleolus + navicular + 5th MT base
ATLSABCDE; pelvic binder for unstable pelvis; permissive hypotension if haemorrhage
Open fractureIV abx within 1 hour; photo; sterile dressing; theatre washout
Shoulder dislocationCheck axillary nerve BEFORE and AFTER reduction; Hill-Sachs + Bankart complications

Sources consulted:
  • Campbell's Operative Orthopaedics, 15th Ed (2026) - fracture evaluation, tibial fractures, neurovascular assessment
  • Rockwood and Green's Fractures in Adults, 10th Ed (2025) - fracture classification, tibial plateau, proximal humerus, ankle
  • ROSEN's Emergency Medicine, Concepts & Clinical Practice - compartment syndrome, ankle fractures, soft tissue injuries
  • Miller's Review of Orthopaedics, 9th Ed - cervical spine SLIC classification, spinal injury

Generate a presentation on imaging interpretation for orthopedic X-rays

Reading File
Reading File
Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || echo "workspace not yet created"

Running Command

mkdir -p /tmp/workspace/ortho-xray-pptx

Writing File

~/ortho-xray-pptx/build_pptx.py

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE_TYPE
from io import BytesIO
import copy

# ── Colour palette ─────────────────────────────────────────────────────────────
DARK_BLUE   = RGBColor(0x0D, 0x2B, 0x55)   # slide background / header
MID_BLUE    = RGBColor(0x1A, 0x5A, 0x96)   # accent bars
LIGHT_BLUE  = RGBColor(0xD6, 0xE8, 0xF7)   # content card background
RED_ALERT   = RGBColor(0xC0, 0x39, 0x2B)   # emergency / red flags
GOLD        = RGBColor(0xF3, 0x9C, 0x12)   # highlight / key points
WHITE       = RGBColor(0xFF, 0xFF, 0xFF)
DARK_GREY   = RGBColor(0x2C, 0x3E, 0x50)
LIGHT_GREY  = RGBColor(0xEC, 0xF0, 0xF1)
GREEN       = RGBColor(0x27, 0xAE, 0x60)
ORANGE      = RGBColor(0xE6, 0x7E, 0x22)

W = Inches(13.333)
H = Inches(7.5)

prs = Presentation()
prs.slide_width  = W
prs.slide_height = H
blank = prs.slide_layouts[6]


# ── Helper functions ────────────────────────────────────────────────────────────

def add_rect(slide, x, y, w, h, fill_color, line_color=None, line_width=None):
    from pptx.enum.shapes import MSO_SHAPE
    shp = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, y, w, h)
    shp.fill.solid()
    shp.fill.fore_color.rgb = fill_color
    if line_color:
        shp.line.color.rgb = line_color
        shp.line.width = Pt(line_width or 1)
    else:
        shp.line.fill.background()
    shp.shadow.inherit = False
    return shp

def add_tb(slide, x, y, w, h, text, font_size, bold=False, color=WHITE,
           align=PP_ALIGN.LEFT, italic=False, word_wrap=True, v_anchor=MSO_ANCHOR.TOP):
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = word_wrap
    tf.vertical_anchor = v_anchor
    tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
    p  = tf.paragraphs[0]
    p.alignment = align
    run = p.add_run()
    run.text = text
    run.font.name  = "Calibri"
    run.font.size  = Pt(font_size)
    run.font.bold  = bold
    run.font.italic = italic
    run.font.color.rgb = color
    return tb

def add_multiline_tb(slide, x, y, w, h, lines, font_size, bold=False, color=WHITE,
                     align=PP_ALIGN.LEFT, line_spacing_pt=None, indent_first=False):
    """lines = list of (text, bold_override, color_override, font_size_override)"""
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left  = Pt(2)
    tf.margin_right = Pt(2)
    tf.margin_top   = Pt(4)
    tf.margin_bottom= Pt(4)
    first = True
    for item in lines:
        if isinstance(item, str):
            text, b, c, fs = item, bold, color, font_size
        else:
            text = item[0]
            b    = item[1] if len(item) > 1 else bold
            c    = item[2] if len(item) > 2 else color
            fs   = item[3] if len(item) > 3 else font_size
        if first:
            p = tf.paragraphs[0]
            first = False
        else:
            p = tf.add_paragraph()
        p.alignment = align
        run = p.add_run()
        run.text = text
        run.font.name  = "Calibri"
        run.font.size  = Pt(fs)
        run.font.bold  = b
        run.font.color.rgb = c
    return tb

def slide_bg(slide, color=DARK_BLUE):
    add_rect(slide, 0, 0, W, H, color)

def header_bar(slide, title, subtitle=None, bar_color=MID_BLUE):
    add_rect(slide, 0, 0, W, Inches(1.25), bar_color)
    add_tb(slide, Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.7),
           title, 28, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
    if subtitle:
        add_tb(slide, Inches(0.4), Inches(0.75), Inches(12.5), Inches(0.4),
               subtitle, 14, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)

def section_label(slide, text, x, y, w=Inches(2.5), h=Inches(0.35)):
    add_rect(slide, x, y, w, h, GOLD)
    add_tb(slide, x+Inches(0.1), y, w-Inches(0.1), h, text, 11, bold=True,
           color=DARK_BLUE, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)

def card(slide, x, y, w, h, bg=LIGHT_BLUE):
    return add_rect(slide, x, y, w, h, bg, line_color=MID_BLUE, line_width=0.5)

def divider_line(slide, x, y, w, color=GOLD, thickness=2):
    from pptx.enum.shapes import MSO_CONNECTOR
    ln = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, x, y, x+w, y)
    ln.line.color.rgb = color
    ln.line.width = Pt(thickness)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 1 – TITLE SLIDE
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_BLUE)

# Decorative left bar
add_rect(slide, 0, 0, Inches(0.45), H, GOLD)

# Central panel
add_rect(slide, Inches(0.85), Inches(1.8), Inches(11.6), Inches(4.0), MID_BLUE,
         line_color=GOLD, line_width=2)

add_tb(slide, Inches(1.2), Inches(2.1), Inches(11.0), Inches(1.2),
       "Imaging Interpretation for", 32, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
add_tb(slide, Inches(1.2), Inches(2.9), Inches(11.0), Inches(1.4),
       "Orthopedic X-Rays", 54, bold=True, color=WHITE, align=PP_ALIGN.CENTER)

divider_line(slide, Inches(2.5), Inches(4.45), Inches(8.3), GOLD, 2)

add_tb(slide, Inches(1.2), Inches(4.6), Inches(11.0), Inches(0.5),
       "OSCE Preparation Guide  |  MBBS / MD Level", 18, bold=False,
       color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
add_tb(slide, Inches(1.2), Inches(5.1), Inches(11.0), Inches(0.4),
       "Sources: Rockwood & Green 10th Ed 2025  •  Campbell's Operative Orthopaedics 15th Ed 2026  •  ROSEN's Emergency Medicine",
       11, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)

# Bottom strip
add_rect(slide, 0, Inches(6.8), W, Inches(0.7), GOLD)
add_tb(slide, Inches(0.3), Inches(6.82), Inches(12.7), Inches(0.4),
       "Fractures  •  Dislocations  •  Soft Tissue  •  Spine  •  Paediatric  •  Pathological",
       13, bold=False, color=DARK_BLUE, align=PP_ALIGN.CENTER)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 2 – X-RAY INTERPRETATION FRAMEWORK (ABCDS)
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_GREY)
header_bar(slide, "The ABCDS Framework", "Systematic Approach to Every Orthopaedic X-Ray")

letters = [
    ("A", "Alignment",     "Are bones in normal anatomical alignment? Is there a dislocation or subluxation?",            RGBColor(0x1A,0xBC,0x9C)),
    ("B", "Bones",         "Look for cortical breaks, lucent fracture lines, impaction, comminution, sclerosis.",          RGBColor(0x27,0xAE,0x60)),
    ("C", "Cartilage",     "Assess joint spaces — narrowed (arthritis/infection), widened (effusion/ligament injury).",    RGBColor(0x29,0x80,0xB9)),
    ("D", "Density",       "Increased density = sclerosis (stress/healing). Decreased = lytic lesion, osteoporosis, AVN.", RGBColor(0x85,0x44,0xBF)),
    ("S", "Soft Tissue",   "Swelling, fat-pad displacement, foreign bodies, gas (infection), calcification.",              GOLD),
]

x_start = Inches(0.35)
box_w   = Inches(2.5)
box_h   = Inches(4.8)
gap     = Inches(0.15)

for i, (letter, label, desc, col) in enumerate(letters):
    bx = x_start + i*(box_w + gap)
    add_rect(slide, bx, Inches(1.45), box_w, box_h, col)
    # Big letter
    add_tb(slide, bx+Inches(0.1), Inches(1.5), box_w-Inches(0.2), Inches(1.4),
           letter, 72, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
    # Divider
    divider_line(slide, bx+Inches(0.2), Inches(2.95), box_w-Inches(0.4), WHITE, 1)
    # Label
    add_tb(slide, bx+Inches(0.1), Inches(3.0), box_w-Inches(0.2), Inches(0.5),
           label, 15, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
    # Description
    add_multiline_tb(slide, bx+Inches(0.15), Inches(3.55), box_w-Inches(0.3), Inches(2.5),
                     [desc], 12, color=WHITE, align=PP_ALIGN.LEFT)

# Bottom note
add_rect(slide, 0, Inches(6.6), W, Inches(0.9), DARK_BLUE)
add_tb(slide, Inches(0.4), Inches(6.65), Inches(12.5), Inches(0.5),
       "Always state:  1) Type of view (AP/Lateral/Oblique)   2) Date & adequacy (two views? two joints for long bones?)   3) Your systematic findings before giving a diagnosis",
       12, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 3 – FRACTURE DESCRIPTION TEMPLATE
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_BLUE)
header_bar(slide, "Describing a Fracture on X-Ray", "Use this template for every fracture OSCE station")

# Left column: step-by-step
card(slide, Inches(0.3), Inches(1.4), Inches(6.0), Inches(5.8))
section_label(slide, "STEP-BY-STEP DESCRIPTION", Inches(0.35), Inches(1.45), Inches(5.9))

steps = [
    ("1", "Which bone?",        "Name the specific bone and side (e.g. left distal radius)"),
    ("2", "Fracture site",      "Proximal / middle / distal third; epiphysis / metaphysis / diaphysis"),
    ("3", "Pattern",            "Transverse, spiral, oblique, comminuted, impacted, avulsion, greenstick"),
    ("4", "Displacement",       "None / partial / complete; direction (dorsal, volar, lateral)"),
    ("5", "Angulation",         "Degrees and direction (varus, valgus, dorsal, volar)"),
    ("6", "Shortening",         "Estimated mm; overlapping fragments"),
    ("7", "Open vs Closed",     "Look for soft tissue gas; skin integrity (clinical)"),
    ("8", "Intra/extra-articular", "Does the fracture line cross the joint?"),
    ("9", "Associated findings","Dislocation, other fractures, foreign bodies, AVN"),
]
y = Inches(1.9)
for num, title, desc in steps:
    add_rect(slide, Inches(0.4), y, Inches(0.45), Inches(0.42), GOLD)
    add_tb(slide, Inches(0.4), y, Inches(0.45), Inches(0.42), num, 12, bold=True,
           color=DARK_BLUE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_tb(slide, Inches(0.95), y+Inches(0.01), Inches(1.45), Inches(0.4),
           title, 11, bold=True, color=GOLD, align=PP_ALIGN.LEFT)
    add_tb(slide, Inches(2.45), y+Inches(0.01), Inches(3.65), Inches(0.4),
           desc, 11, color=WHITE, align=PP_ALIGN.LEFT)
    y += Inches(0.5)

# Right column: fracture pattern table
card(slide, Inches(6.65), Inches(1.4), Inches(6.35), Inches(5.8), DARK_BLUE)
add_rect(slide, Inches(6.65), Inches(1.4), Inches(6.35), Inches(0.35), MID_BLUE)
add_tb(slide, Inches(6.75), Inches(1.4), Inches(6.15), Inches(0.35),
       "FRACTURE PATTERN REFERENCE", 12, bold=True, color=WHITE, align=PP_ALIGN.LEFT,
       v_anchor=MSO_ANCHOR.MIDDLE)

patterns = [
    ("PATTERN",        "MECHANISM",            "COMMON SITE",         True),
    ("Transverse",     "Direct blow / bending", "Tibia, phalanges",   False),
    ("Spiral",         "Twisting / torsion",    "Tib/Fib, humerus",   False),
    ("Oblique",        "Axial + angulation",    "Femur, tibia",       False),
    ("Comminuted",     "High energy",           "Tibial plateau",     False),
    ("Avulsion",       "Ligament/tendon pull",  "Lat. malleolus",     False),
    ("Impacted",       "Axial load",            "Distal radius, NOF", False),
    ("Stress",         "Repetitive loading",    "2nd MT, tibia",      False),
    ("Pathological",   "Minimal trauma",        "Metastasis, MM",     False),
    ("Greenstick",     "Children",              "Radius / ulna",      False),
    ("Buckle/Torus",   "Children – axial load", "Distal radius",      False),
]

col_widths = [Inches(1.55), Inches(2.0), Inches(2.4)]
col_x      = [Inches(6.75), Inches(8.35), Inches(10.35)]
row_h      = Inches(0.44)
y = Inches(1.8)

for row in patterns:
    bg = MID_BLUE if row[3] else (DARK_GREY if patterns.index(row) % 2 == 0 else DARK_BLUE)
    txt_col = WHITE
    add_rect(slide, Inches(6.65), y, Inches(6.35), row_h, bg)
    for ci, text in enumerate(row[:3]):
        add_tb(slide, col_x[ci], y+Inches(0.04), col_widths[ci], row_h-Inches(0.08),
               text, 11 if not row[3] else 11, bold=row[3], color=txt_col,
               align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)
    y += row_h


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 4 – COMMON FRACTURES: UPPER LIMB
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_GREY)
header_bar(slide, "Upper Limb Fractures", "Key X-Ray Findings & Clinical Pearls")

cases = [
    {
        "title": "Colles' Fracture",
        "subtitle": "Distal Radius",
        "icon": "FOOSH",
        "findings": [
            "Transverse # at distal radius metaphysis",
            "Dorsal displacement & angulation",
            "Radial shortening + impaction",
            "\"Dinner fork\" deformity",
            "Associated ulnar styloid #",
        ],
        "pearl": "Check median nerve! CTS complication. Smith's = volar displacement (reversed Colles).",
        "color": RGBColor(0x1A,0x5A,0x96),
    },
    {
        "title": "Scaphoid Fracture",
        "subtitle": "Wrist (FOOSH)",
        "icon": "AVN",
        "findings": [
            "Lucent line at scaphoid waist (70-80%)",
            "May be X-ray NEGATIVE initially",
            "Loss of scaphoid cortex",
            "3 views: PA, lateral, oblique",
            "MRI if X-ray normal but clinically +ve",
        ],
        "pearl": "Anatomical snuffbox tenderness = treat as scaphoid # even if X-ray normal! Risk of AVN of proximal pole.",
        "color": RGBColor(0xC0,0x39,0x2B),
    },
    {
        "title": "Proximal Humerus #",
        "subtitle": "Shoulder",
        "icon": "Neer",
        "findings": [
            "AP + axial + Y-view required",
            "Neer 2-4 part classification",
            "Greater tuberosity avulsion",
            "Look for Hill-Sachs (post-lat head)",
            "Bankart (ant-inf glenoid rim)",
        ],
        "pearl": "Hill-Sachs = humeral head compression after anterior dislocation. Axillary nerve injury common.",
        "color": RGBColor(0x27,0xAE,0x60),
    },
    {
        "title": "Paediatric Elbow",
        "subtitle": "Supracondylar / Radial Head",
        "icon": "CRITOE",
        "findings": [
            "Posterior fat-pad sign = effusion",
            "Anterior fat-pad (sail sign) = effusion",
            "Anterior humeral line alignment",
            "Radiocapitellar line (radial head)",
            "CRITOE ossification sequence",
        ],
        "pearl": "CRITOE: 1-3-5-7-9-11 years. Posterior fat pad ALWAYS abnormal — treat as radial head # or supracondylar.",
        "color": RGBColor(0x85,0x44,0xBF),
    },
]

cx = Inches(0.3)
cw = Inches(3.1)
ch = Inches(5.65)

for case in cases:
    c = case["color"]
    # Card bg
    add_rect(slide, cx, Inches(1.35), cw, ch, DARK_BLUE, line_color=c, line_width=1.5)
    # Colour header
    add_rect(slide, cx, Inches(1.35), cw, Inches(0.75), c)
    add_tb(slide, cx+Inches(0.1), Inches(1.37), cw-Inches(0.2), Inches(0.45),
           case["title"], 16, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
    add_tb(slide, cx+Inches(0.1), Inches(1.78), cw-Inches(0.2), Inches(0.28),
           case["subtitle"], 11, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
    # Badge
    add_rect(slide, cx+cw-Inches(0.9), Inches(1.38), Inches(0.8), Inches(0.3), GOLD)
    add_tb(slide, cx+cw-Inches(0.9), Inches(1.38), Inches(0.8), Inches(0.3),
           case["icon"], 9, bold=True, color=DARK_BLUE, align=PP_ALIGN.CENTER,
           v_anchor=MSO_ANCHOR.MIDDLE)
    # Findings header
    add_tb(slide, cx+Inches(0.1), Inches(2.15), cw-Inches(0.2), Inches(0.3),
           "X-RAY FINDINGS", 9, bold=True, color=GOLD)
    # Findings list
    y = Inches(2.42)
    for f in case["findings"]:
        add_tb(slide, cx+Inches(0.25), y, cw-Inches(0.35), Inches(0.36),
               f"• {f}", 10.5, color=WHITE)
        y += Inches(0.38)
    # Pearl box
    add_rect(slide, cx+Inches(0.1), Inches(4.55), cw-Inches(0.2), Inches(0.05), GOLD)
    add_rect(slide, cx+Inches(0.1), Inches(4.62), cw-Inches(0.2), Inches(1.2), RGBColor(0x1C,0x2F,0x4A))
    add_tb(slide, cx+Inches(0.15), Inches(4.65), cw-Inches(0.3), Inches(0.28),
           "CLINICAL PEARL", 9, bold=True, color=GOLD)
    add_multiline_tb(slide, cx+Inches(0.15), Inches(4.93), cw-Inches(0.3), Inches(0.85),
                     [case["pearl"]], 10, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
    cx += cw + Inches(0.17)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 5 – LOWER LIMB FRACTURES
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_BLUE)
header_bar(slide, "Lower Limb Fractures", "Key X-Ray Findings, Classifications & Management")

cases = [
    {
        "title": "Neck of Femur",
        "findings": [
            "AP pelvis + lateral hip views",
            "Disruption of Shenton's line",
            "Garden classification I–IV",
            "Loss of medial cortex continuity",
            "Check trabecular pattern",
        ],
        "classification": "Garden I: Incomplete/valgus impacted\nGarden II: Complete undisplaced\nGarden III: Partial displacement\nGarden IV: Full displacement",
        "mgmt": "I/II: Cannulated screws / DHS\nIII/IV (elderly): Hemiarthroplasty\nIII/IV (young): ORIF (preserve head)",
        "color": MID_BLUE,
    },
    {
        "title": "Tibial Plateau",
        "findings": [
            "AP + lateral + 45° oblique views",
            "CT essential for surgical planning",
            "Depression of lateral plateau",
            "Schatzker I–VI classification",
            "Check fibular head for LCL injury",
        ],
        "classification": "Schatzker I-III: Lateral plateau\nSchatzker IV: Medial plateau\nSchatzker V: Bicondylar\nSchatzker VI: Metaphyseal dissoc.",
        "mgmt": "Low energy (I-III): ORIF if depressed >5mm\nHigh energy (IV-VI): Complex ORIF\nRule out compartment syndrome!",
        "color": GREEN,
    },
    {
        "title": "Tibial Shaft",
        "findings": [
            "AP + lateral including knee & ankle",
            "Oblique view for spiral fracture",
            "Note: open wound / soft tissue gas",
            "Assess shortening and rotation",
            "Look for ipsilateral femur / fibula #",
        ],
        "classification": "Open # Gustilo-Anderson:\nI: <1cm, clean\nII: 1-10cm\nIIIA/B/C: >10cm ± vascular",
        "mgmt": "Stable/undisplaced: Cast\nDisplaced/unstable: IMN (gold std)\nOpen: Abx + debridement + IMN/ex-fix",
        "color": ORANGE,
    },
    {
        "title": "Ankle Fracture",
        "findings": [
            "AP + lateral + mortise (15° IR) views",
            "Weber A/B/C (fibula level)",
            "Check medial clear space (<4mm)",
            "Talar tilt / shift = instability",
            "Look for posterior malleolus #",
        ],
        "classification": "Weber A: Below syndesmosis (stable)\nWeber B: At syndesmosis\nWeber C: Above syndesmosis (UNSTABLE)\nLauge-Hansen: SA/PA/SE/PE",
        "mgmt": "Weber A: Walking boot / cast\nWeber B: Depends on medial injury\nWeber C: Usually ORIF (unstable)",
        "color": RED_ALERT,
    },
]

cx = Inches(0.3)
cw = Inches(3.1)
ch = Inches(5.65)

for case in cases:
    c = case["color"]
    add_rect(slide, cx, Inches(1.35), cw, ch, DARK_GREY, line_color=c, line_width=1.5)
    add_rect(slide, cx, Inches(1.35), cw, Inches(0.6), c)
    add_tb(slide, cx+Inches(0.1), Inches(1.37), cw-Inches(0.2), Inches(0.56),
           case["title"], 16, bold=True, color=WHITE, align=PP_ALIGN.LEFT,
           v_anchor=MSO_ANCHOR.MIDDLE)

    add_tb(slide, cx+Inches(0.1), Inches(2.0), cw-Inches(0.2), Inches(0.28),
           "X-RAY FINDINGS", 9, bold=True, color=GOLD)
    y = Inches(2.28)
    for f in case["findings"]:
        add_tb(slide, cx+Inches(0.2), y, cw-Inches(0.3), Inches(0.35),
               f"• {f}", 10, color=WHITE)
        y += Inches(0.35)

    # Classification
    add_rect(slide, cx+Inches(0.1), Inches(4.08), cw-Inches(0.2), Inches(0.28), c)
    add_tb(slide, cx+Inches(0.15), Inches(4.08), cw-Inches(0.3), Inches(0.28),
           "CLASSIFICATION", 9, bold=True, color=DARK_BLUE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_multiline_tb(slide, cx+Inches(0.15), Inches(4.38), cw-Inches(0.3), Inches(1.0),
                     [case["classification"]], 9.5, color=LIGHT_BLUE)

    # Management
    add_rect(slide, cx+Inches(0.1), Inches(5.42), cw-Inches(0.2), Inches(0.28), GOLD)
    add_tb(slide, cx+Inches(0.15), Inches(5.42), cw-Inches(0.3), Inches(0.28),
           "MANAGEMENT", 9, bold=True, color=DARK_BLUE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_multiline_tb(slide, cx+Inches(0.15), Inches(5.72), cw-Inches(0.3), Inches(0.9),
                     [case["mgmt"]], 9.5, color=WHITE)

    cx += cw + Inches(0.17)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 6 – DISLOCATIONS
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_GREY)
header_bar(slide, "Joint Dislocations on X-Ray", "Always check neurovascular status before and after reduction")

dislocations = [
    {
        "joint": "Shoulder (GHJ)",
        "type": "95% Anterior",
        "xray": [
            "AP: humeral head below/medial to glenoid",
            "Axial/Y-view: humeral head anterior to glenoid",
            "Hill-Sachs: post-lateral humeral head defect",
            "Bankart: ant-inferior glenoid rim fracture",
            "Always take post-reduction X-ray",
        ],
        "nerve": "Axillary nerve (deltoid, lateral deltoid sensation)",
        "color": MID_BLUE,
        "treat": "Reduction (Hennepin / Cunningham / Kocher); Sling 3-6 wks; Physio",
    },
    {
        "joint": "Hip",
        "type": "90% Posterior",
        "xray": [
            "AP pelvis: femoral head superior & lateral",
            "Loss of Shenton's line",
            "Limb: shortened, adducted, internally rotated",
            "CT after reduction to check joint congruence",
            "Look for posterior acetabular wall #",
        ],
        "nerve": "Sciatic nerve (esp. peroneal division: foot drop)",
        "color": RED_ALERT,
        "treat": "EMERGENCY reduction within 6h (AVN risk). Allis / Stimson technique. ORIF if wall # present.",
    },
    {
        "joint": "Knee (Patella)",
        "type": "Lateral > Medial",
        "xray": [
            "AP knee: patella lateral to trochlea",
            "Axial (skyline) view most helpful",
            "Look for osteochondral fragment",
            "Medial patellofemoral ligament avulsion",
            "Trochlear dysplasia predisposes",
        ],
        "nerve": "Usually no neurovascular injury",
        "color": GREEN,
        "treat": "Extension of knee usually reduces it. Medial press to reduce. Immobilise 4-6 wks. MRI to assess MPFL.",
    },
    {
        "joint": "Elbow",
        "type": "Posterior (most common)",
        "xray": [
            "Lateral: olecranon posterior to humerus",
            "AP: widened joint space",
            "Look for coronoid # (terrible triad)",
            "Radial head #: 'Terrible Triad'",
            "Monteggia: proximal ulna # + radial head disloc.",
        ],
        "nerve": "Brachial artery, ulnar/radial nerve injury",
        "color": GOLD,
        "treat": "Conscious sedation + reduction. Check radio-capitellar line post-reduction. Terrible triad = ORIF.",
    },
    {
        "joint": "Ankle (Talar)",
        "type": "Fracture-dislocation",
        "xray": [
            "AP + lateral + mortise views",
            "Widened medial clear space (>4mm)",
            "Talar tilt on mortise view",
            "Look for trimalleolar fracture",
            "Weber C with diastasis = unstable",
        ],
        "nerve": "Posterior tibial artery / nerve",
        "color": ORANGE,
        "treat": "Urgent reduction (skin necrosis risk). Splint. ORIF for fracture-dislocation.",
    },
]

cx = Inches(0.25)
cw = Inches(2.52)
ch = Inches(5.6)

for d in dislocations:
    c = d["color"]
    add_rect(slide, cx, Inches(1.38), cw, ch, DARK_BLUE, line_color=c, line_width=1.2)
    add_rect(slide, cx, Inches(1.38), cw, Inches(0.68), c)
    add_tb(slide, cx+Inches(0.08), Inches(1.38), cw-Inches(0.16), Inches(0.45),
           d["joint"], 15, bold=True, color=WHITE)
    add_tb(slide, cx+Inches(0.08), Inches(1.78), cw-Inches(0.16), Inches(0.25),
           d["type"], 10, color=LIGHT_BLUE)

    add_tb(slide, cx+Inches(0.08), Inches(2.1), cw, Inches(0.25),
           "X-RAY SIGNS", 8.5, bold=True, color=GOLD)
    y = Inches(2.35)
    for f in d["xray"]:
        add_tb(slide, cx+Inches(0.12), y, cw-Inches(0.2), Inches(0.33),
               f"• {f}", 9.5, color=WHITE)
        y += Inches(0.34)

    # Nerve warning
    add_rect(slide, cx+Inches(0.08), Inches(4.07), cw-Inches(0.16), Inches(0.22), RED_ALERT)
    add_tb(slide, cx+Inches(0.1), Inches(4.07), cw-Inches(0.2), Inches(0.22),
           f"NERVE: {d['nerve']}", 8.5, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)

    # Treatment
    add_multiline_tb(slide, cx+Inches(0.1), Inches(4.35), cw-Inches(0.2), Inches(1.3),
                     [d["treat"]], 9.5, color=LIGHT_BLUE)

    cx += cw + Inches(0.14)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 7 – SPINE X-RAYS
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_BLUE)
header_bar(slide, "Spine X-Ray Interpretation", "Cervical, Thoracic & Lumbar — Systematic Approach")

# Left half: Cervical
add_rect(slide, Inches(0.3), Inches(1.35), Inches(6.0), Inches(5.85), DARK_GREY)
add_rect(slide, Inches(0.3), Inches(1.35), Inches(6.0), Inches(0.45), MID_BLUE)
add_tb(slide, Inches(0.4), Inches(1.38), Inches(5.8), Inches(0.4),
       "CERVICAL SPINE", 14, bold=True, color=WHITE)

cerv_items = [
    ("ALIGNMENT (4 lines)", [
        "Anterior vertebral line — smooth lordosis",
        "Posterior vertebral line — smooth",
        "Spinolaminar line",
        "Posterior spinous line",
        "BROKEN LINE = dislocation / subluxation",
    ], GOLD),
    ("BONES", [
        "Vertebral body height (anterior = posterior)",
        "Disc space: uniform height",
        "Odontoid peg: central, no gap >3mm (ADI)",
        "Facet joints: overlapping 'shingles'",
    ], MID_BLUE),
    ("SOFT TISSUE", [
        "Pre-vertebral soft tissue: <7mm at C2, <22mm at C6",
        "Widened = haematoma (high injury suspicion)",
    ], GREEN),
    ("PAEDIATRIC PEARL", [
        "Pseudo-subluxation C2/3 or C3/4 in children — normal variant",
        "Swischuk's line: spinolaminar line C1-C3",
    ], ORANGE),
]

y = Inches(1.9)
for title, items, col in cerv_items:
    add_rect(slide, Inches(0.4), y, Inches(5.8), Inches(0.28), col)
    add_tb(slide, Inches(0.5), y, Inches(5.6), Inches(0.28),
           title, 10, bold=True, color=DARK_BLUE, v_anchor=MSO_ANCHOR.MIDDLE)
    y += Inches(0.3)
    for item in items:
        add_tb(slide, Inches(0.55), y, Inches(5.55), Inches(0.32),
               f"• {item}", 10, color=WHITE)
        y += Inches(0.32)
    y += Inches(0.05)

# Right half: Lumbar + emergencies
add_rect(slide, Inches(6.65), Inches(1.35), Inches(6.35), Inches(5.85), DARK_GREY)
add_rect(slide, Inches(6.65), Inches(1.35), Inches(6.35), Inches(0.45), GOLD)
add_tb(slide, Inches(6.75), Inches(1.38), Inches(6.15), Inches(0.4),
       "LUMBAR SPINE  &  RED FLAG FINDINGS", 14, bold=True, color=DARK_BLUE)

lumbar = [
    ("LUMBAR X-RAY CHECKLIST", [
        "Alignment: lordosis preserved?",
        "Vertebral height: anterior vs posterior (wedge # = compression)",
        "Disc spaces: uniform (narrowed = DDD/infection)",
        "Pedicles: oval shadows — 'winking owl sign' if pedicle eroded = malignancy",
        "SI joints: symmetric (asymmetry = AS / fracture)",
        "Spinous processes: interspinous widening = ligament disruption",
    ], MID_BLUE),
    ("SPINE INJURY CLASSIFICATIONS", [
        "AO Spine: Type A (compression), B (distraction), C (rotation/translation)",
        "SLIC cervical: morphology + DLC + neuro; score >4 = surgical",
        "TLICS: thoracolumbar; score >4 = surgical",
    ], GREEN),
    ("EMERGENCY RED FLAGS", [
        "Cauda equina: saddle anaesthesia + bladder/bowel = MRI NOW",
        "Cord compression: bilateral neurology, Lhermitte's sign",
        "Instability: >3.5mm translation or >11° angulation vs. adjacent",
        "Pathological fracture: lytic + minimal trauma = urgent CT/MRI",
    ], RED_ALERT),
]

y = Inches(1.9)
for title, items, col in lumbar:
    add_rect(slide, Inches(6.75), y, Inches(6.15), Inches(0.28), col)
    add_tb(slide, Inches(6.85), y, Inches(6.0), Inches(0.28),
           title, 10, bold=True, color=DARK_BLUE, v_anchor=MSO_ANCHOR.MIDDLE)
    y += Inches(0.3)
    for item in items:
        add_tb(slide, Inches(6.9), y, Inches(5.95), Inches(0.32),
               f"• {item}", 10, color=WHITE)
        y += Inches(0.32)
    y += Inches(0.08)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 8 – CLASSIFICATIONS TABLE
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_GREY)
header_bar(slide, "Must-Know Classifications", "Examiners expect these classification systems by name")

rows = [
    ("Fracture / Condition",    "Classification System",    "Grades / Types",                        "Key Clinical Point",                   True),
    ("NOF Fracture",            "Garden I – IV",            "I=impacted; II=undisplaced;\nIII=partial disp; IV=full disp",   "IV elderly → hemiarthroplasty",        False),
    ("Tibial Plateau",          "Schatzker I – VI",         "I-IV lateral/medial;\nV bicondylar; VI metaphyseal",           "VI = high energy, surgical",           False),
    ("Open Fractures",          "Gustilo-Anderson I – III", "I<1cm; II 1-10cm;\nIIIA/B/C >10cm ± vascular",                "IIIC = vascular = emergency",          False),
    ("Ankle Fracture",          "Weber A / B / C",          "A below syndesm; B at;\nC above (unstable)",                   "Weber C almost always ORIF",           False),
    ("Distal Radius",           "Frykman / AO",             "Colles=dorsal; Smith=volar;\nBarton=shear",                    "Check median nerve (CTS)",             False),
    ("Shoulder Dislocation",    "Direction + lesion",       "Anterior 95%; Posterior (seizure);\nInferior (luxatio erecta)","Post: axillary nerve; Hill-Sachs",     False),
    ("Spinal Cord Injury",      "ASIA A – E",               "A=complete; B=sensory;\nC/D=motor incomplete; E=normal",       "Immediate decompression if incomplete", False),
    ("Cervical Spine Injury",   "SLIC Score",               "Morphology + DLC + Neuro\nScore 0-11; >4 = surgery",           "Check pre-vertebral soft tissue",      False),
    ("Periprosthetic Hip #",    "Vancouver A / B / C",      "B1=well-fixed (ORIF);\nB2=loose stem (revision); B3",          "B2 most important: revision surgery",  False),
    ("Femoral Head AVN",        "Ficat-Arlet I – IV",       "I: normal X-ray;\nII: cysts; III: crescent; IV: collapse",     "MRI detects pre-collapse (Ficat I/II)", False),
    ("Paediatric # Physeal",    "Salter-Harris I – V",      "I: through physis; II: metaphysis;\nIV: epiphysis; V: crush",  "V = worst prognosis (growth arrest)",  False),
]

col_w  = [Inches(2.0), Inches(2.3), Inches(3.5), Inches(3.5), Inches(1.8)]
col_x  = [Inches(0.25), Inches(2.35), Inches(4.75), Inches(8.35), Inches(11.95)]
row_h  = Inches(0.48)
y      = Inches(1.38)

for ri, row in enumerate(rows):
    if row[4]:
        bg = MID_BLUE
        fc = WHITE
        fs = 11
        bold = True
    else:
        bg = DARK_BLUE if ri % 2 == 0 else DARK_GREY
        fc = WHITE
        fs = 10.5
        bold = False

    add_rect(slide, Inches(0.25), y, Inches(13.0), row_h, bg)
    for ci, text in enumerate(row[:4]):
        add_multiline_tb(slide, col_x[ci]+Inches(0.05), y+Inches(0.03),
                         col_w[ci+1 if ci < 3 else 3]-Inches(0.1) if ci < 3 else Inches(1.3),
                         row_h-Inches(0.06),
                         [text], fs, bold=bold, color=fc)
    y += row_h


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 9 – PATHOLOGICAL & SPECIAL X-RAYS
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_BLUE)
header_bar(slide, "Pathological, Paediatric & Special Findings",
           "Patterns to recognise beyond standard trauma fractures")

# Three columns
sections = [
    {
        "title": "PATHOLOGICAL FRACTURES",
        "color": RED_ALERT,
        "items": [
            ("What it is", "Fracture through abnormal / weakened bone from minimal trauma"),
            ("Common causes", "Metastases (breast, lung, prostate, renal, thyroid)\nMultiple myeloma\nOsteoporosis (vertebral wedge)\nPaget's disease\nPrimary bone tumours (rare)"),
            ("X-ray clues", "Lytic lesion at fracture site\nMixed lytic/sclerotic (Paget's)\nVertebral body collapse without proportional trauma\nMultiple fractures at low energy"),
            ("Management", "Biopsy if unknown primary\nOrthopedic fixation (prophylactic if >50% cortex involved)\nOncology referral"),
        ],
    },
    {
        "title": "PAEDIATRIC FRACTURES",
        "color": GREEN,
        "items": [
            ("Unique patterns", "Greenstick (buckled cortex one side)\nTorus/buckle (axial compression)\nPlastic deformation (bowing)\nSalter-Harris physeal injuries I–V"),
            ("Salter-Harris", "I: Physis only (X-ray may be normal)\nII: Physis + metaphysis (most common)\nIII: Physis + epiphysis\nIV: All three\nV: Crush — worst prognosis"),
            ("Non-accidental injury", "Multiple # at different healing stages\nPosterior rib # (highly specific)\nMetaphyseal corner # (classic)\nSubdural haematoma + spiral #"),
            ("Elbow CRITOE", "Capitellum 1yr → Radial head 3yr\nInt epicondyle 5yr → Trochlea 7yr\nOlecranon 9yr → Ext epicondyle 11yr"),
        ],
    },
    {
        "title": "SOFT TISSUE & SPECIAL SIGNS",
        "color": GOLD,
        "items": [
            ("Fat pad signs (elbow)", "Anterior fat pad (sail sign): effusion\nPosterior fat pad: ALWAYS ABNORMAL — treat as occult # / radial head #"),
            ("Segond fracture", "Small avulsion lateral tibial plateau\nHIGHLY SPECIFIC for ACL tear\nLook carefully on AP knee X-ray"),
            ("Pellegrini-Stieda", "Calcification at medial femoral condyle\nIndicates old MCL injury / ossification"),
            ("Bankart & Hill-Sachs", "Bankart: ant-inferior glenoid rim avulsion\nHill-Sachs: posterolateral humeral head impaction\nBoth = anterior shoulder instability"),
            ("Winking Owl Sign", "Spine X-ray: one pedicle shadow absent\n= Pedicle erosion by metastasis"),
        ],
    },
]

cx = Inches(0.3)
cw = Inches(4.2)

for sec in sections:
    c = sec["color"]
    add_rect(slide, cx, Inches(1.38), cw, Inches(5.85), DARK_GREY, line_color=c, line_width=1.5)
    add_rect(slide, cx, Inches(1.38), cw, Inches(0.45), c)
    add_tb(slide, cx+Inches(0.1), Inches(1.4), cw-Inches(0.2), Inches(0.4),
           sec["title"], 13, bold=True, color=DARK_BLUE)
    y = Inches(1.9)
    for label, content in sec["items"]:
        add_rect(slide, cx+Inches(0.1), y, cw-Inches(0.2), Inches(0.26), MID_BLUE)
        add_tb(slide, cx+Inches(0.15), y, cw-Inches(0.3), Inches(0.26),
               label.upper(), 9, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
        y += Inches(0.28)
        add_multiline_tb(slide, cx+Inches(0.15), y, cw-Inches(0.3), Inches(1.0),
                         [content], 10.5, color=WHITE)
        lines = content.count("\n") + 1
        y += Inches(0.35 + 0.3*(lines-1))
        y += Inches(0.06)
    cx += cw + Inches(0.17)


# ══════════════════════════════════════════════════════════════════════════════
# SLIDE 10 – OSCE QUICK REFERENCE / SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide, DARK_GREY)
header_bar(slide, "OSCE Quick Reference Card", "High-yield summary — last review before your exam")

# 6-item grid
items = [
    ("ABCDS", "Alignment • Bones • Cartilage\nDensity • Soft Tissue\nUse for EVERY X-ray", MID_BLUE),
    ("6 Ps Vascular", "Pain (passive stretch) • Pallor\nPulselessness • Paraesthesia\nParalysis • Perishingly Cold", RED_ALERT),
    ("Ottawa Rules", "X-ray ankle if:\n• Malleous tenderness\n• Navicular tenderness\n• 5th MT base tenderness\n• Cannot weight-bear 4 steps", GOLD),
    ("Scaphoid Rule", "Snuffbox tenderness = treat\nas scaphoid # even if X-ray normal\nRisk: AVN proximal pole\nMRI or repeat X-ray at 14 days", GREEN),
    ("NOF Fracture", "Shortened + externally rotated\nGarden I–IV\nIntracapsular: hemiarthroplasty\nExtracapsular: DHS / PFN", MID_BLUE),
    ("Compartment Sx", "EMERGENCY: pain on\npassive stretch + tense compartment\n→ Fasciotomy IMMEDIATELY\nCommon: tibial #, forearm #", RED_ALERT),
    ("ACL Injury", "Haemarthrosis + pop\nLachman's most sensitive\nSegond # on X-ray = ACL\nMRI to confirm", ORANGE),
    ("Open Fracture", "Gustilo-Anderson I–III\nAbx within 1 hour\nPhoto → sterile dressing\nTheatre washout <6h (IIIB/C)", GREEN),
    ("Cauda Equina", "EMERGENCY: saddle anaesthesia\n+ bladder/bowel dysfunction\n+ bilateral leg weakness\n→ MRI + surgical decompression", RED_ALERT),
    ("Elbow Paediatric", "Posterior fat pad = ABNORMAL\nCRITOE (1-3-5-7-9-11 years)\nAnterior humeral line\nRadiocapitellar line", GOLD),
    ("Shoulder Disloc.", "95% anterior\nAxillary nerve: test BEFORE + AFTER\nHill-Sachs + Bankart\nPosterior = seizure/electrocution", MID_BLUE),
    ("Spinal Trauma", "ASIA A–E\nCauda equina = emergency\nSLIC >4 = surgery\nPre-vertebral STW on C-spine X-ray", ORANGE),
]

col_w = Inches(3.15)
col_h = Inches(1.55)
gx = Inches(0.3)
gy = Inches(1.38)
cols = 4

for i, (title, content, col) in enumerate(items):
    row = i // cols
    c_  = i  % cols
    bx  = gx + c_*(col_w + Inches(0.12))
    by  = gy + row*(col_h + Inches(0.1))

    add_rect(slide, bx, by, col_w, col_h, DARK_BLUE, line_color=col, line_width=1.5)
    add_rect(slide, bx, by, col_w, Inches(0.3), col)
    add_tb(slide, bx+Inches(0.1), by, col_w-Inches(0.2), Inches(0.3),
           title, 11, bold=True, color=DARK_BLUE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_multiline_tb(slide, bx+Inches(0.1), by+Inches(0.32), col_w-Inches(0.2),
                     col_h-Inches(0.38), [content], 10, color=WHITE)


# ══════════════════════════════════════════════════════════════════════════════
# SAVE
# ══════════════════════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/ortho-xray-pptx/Ortho_Xray_Interpretation_OSCE.pptx"
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
    f.write(buf.getvalue())
print(f"Saved → {out_path}")
Running Command

cd /tmp/workspace/ortho-xray-pptx && python build_pptx.py 2>&1

Running Command

ls -lh /tmp/workspace/ortho-xray-pptx/Ortho_Xray_Interpretation_OSCE.pptx

Your presentation is ready. Here is the download link:

Ortho Xray Interpretation OSCE

Presentation · PPTX


What's Inside (10 Slides)

SlideContent
1Title slide with professional dark blue/gold design
2ABCDS Framework - the 5-column systematic approach (Alignment, Bones, Cartilage, Density, Soft Tissue)
3Fracture Description Template - 9-step protocol + fracture pattern reference table (transverse, spiral, oblique, comminuted, greenstick, etc.)
4Upper Limb Fractures - Colles', Scaphoid, Proximal Humerus, Paediatric Elbow with X-ray findings and clinical pearls per card
5Lower Limb Fractures - NOF (Garden), Tibial Plateau (Schatzker), Tibial Shaft (Gustilo), Ankle (Weber) with management
6Dislocations - Shoulder, Hip, Patella, Elbow, Ankle with nerve injury alerts and reduction techniques
7Spine X-Rays - Cervical 4-line alignment, lumbar checklist, AO Spine / SLIC / TLICS classification, cauda equina red flags
8Must-Know Classifications Table - Garden, Schatzker, Gustilo, Weber, Frykman, ASIA, Salter-Harris, Vancouver in one reference table
9Pathological, Paediatric & Special Findings - Segond fracture (ACL), fat-pad signs, Bankart/Hill-Sachs, winking owl sign, non-accidental injury
10OSCE Quick Reference Card - 12-box grid covering every high-yield topic in a revision-at-a-glance format
Design: 16:9 widescreen, dark navy/blue colour scheme with gold accents, colour-coded by topic - optimised for on-screen study and projector display.

Generate a Word document with case-based OSCE scenarios (diagnosis + classification + management)

Reading File
Running Command

mkdir -p /tmp/workspace/ortho-osce-docx

This is a shared conversation. Sign in to Orris to start your own chat.