Brachial Plexus & Upper Limb Nerve Injuries (Tested in 100% of sessions)The Trend: 10 years ago, NBE asked for the root values of nerves. Today, they give you a clinical scenario of a factory worker with a humeral shaft fracture or a newborn with a difficult delivery.The Core Repeating Images:Erb’s Palsy: Waiter's tip hand position (Injury to Upper Trunk, C5-C6).Klumpke’s Palsy: Claw hand appearance (Injury to Lower Trunk, C8-T1).Radial Nerve Injury: Saturday night palsy / Wrist drop from mid-shaft humerus fractures.Anatomical Snuffbox: Tendon boundaries and tenderness over the scaphoid bone.

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Loading Image
Loading Image
Reading File
Reading File
Reading File
Finding Sources
I have all the material needed for a complete, well-sourced answer. Here it is:

Brachial Plexus & Upper Limb Nerve Injuries - NBE High-Yield Master Guide

Brachial Plexus Diagram - Roots, Trunks, Divisions, Cords, Branches
Brachial plexus anatomy: Roots (C5-T1) → Trunks → Divisions → Cords → Branches. From Miller's Review of Orthopaedics, 9th Ed.

1. Brachial Plexus - The Framework (Memorize This First)

The mnemonic "Randy Travis Drinks Cold Beer" = Roots, Trunks, Divisions, Cords, Branches.
LevelComponents
RootsC5, C6, C7, C8, T1
TrunksUpper (C5+C6), Middle (C7), Lower (C8+T1)
DivisionsAnterior (flexors) & Posterior (extensors) from each trunk
CordsLateral, Posterior, Medial (named relative to axillary artery)
Terminal BranchesMusculocutaneous, Axillary, Radial, Median, Ulnar
Key pre-divisional branches (tested separately):
  • Long thoracic nerve (C5-7) - serratus anterior - injury = winged scapula
  • Dorsal scapular nerve (C5) - rhomboids + levator scapulae
  • Suprascapular nerve (upper trunk, C5-6) - supraspinatus + infraspinatus

2. Erb's Palsy (Upper Trunk Injury, C5-C6)

The scenario: Newborn after difficult vaginal delivery with shoulder traction, or adult after glenohumeral dislocation / motorcycle accident (forced shoulder depression with head deviation to opposite side).
Mechanism: Forcible separation of neck and shoulder stretches the upper trunk.
Muscles lost (C5-C6 innervated):
  • Deltoid (abduction lost)
  • Biceps (elbow flexion + supination lost)
  • Supraspinatus/infraspinatus (external rotation lost)
  • Wrist extensors (partially affected)
The classic posture - "Waiter's Tip" / "Bellman's Tip":
Waiter's Tip Pose in Upper Plexus Injury (Erb's Palsy)
The arm hangs at the side, internally rotated, with the wrist and fingers slightly flexed - the classic Erb's palsy posture. From Neuroanatomy through Clinical Cases, 3rd Ed.
  • Arm: adducted, internally rotated
  • Elbow: extended (biceps paralyzed)
  • Forearm: pronated
  • Finger and hand movements are relatively spared (key distinguishing point)
Prognosis: Over 90% of neonatal cases resolve by 3 months. Biceps function at 3 months is the key prognostic indicator - if biceps doesn't recover by then, surgical repair of the plexus may be considered.
"Erb palsy: affects C5-6 nerve roots. Common with vaginal delivery and traction-type injury, leading to adduction, internal rotation of the shoulder, inability to flex the elbow, wrist and digital flexion/extension intact. Over 90% have resolution at 3 months of age. Biceps function is the prognostic indicator." - Miller's Review of Orthopaedics, 9th Ed.

3. Klumpke's Palsy (Lower Trunk Injury, C8-T1)

The scenario: Upward traction on an abducted arm - grabbing a branch during a fall, Pancoast tumor (apical lung carcinoma), thoracic outlet syndrome.
Mechanism: Forcible hyperabduction of the arm injures the lower trunk.
Muscles lost (C8-T1 innervated):
  • All intrinsic hand muscles (thenar + hypothenar + interossei + lumbricals)
  • Wrist and finger flexors (partially)
The classic posture - "Claw Hand":
  • MCP joints extended (intrinsics lost - cannot flex MCP)
  • IP joints flexed (long flexors intact, unopposed)
  • Thenar and hypothenar wasting
  • Sensory loss on the medial arm, medial forearm, and ulnar aspect of the hand
Horner Syndrome association: When T1 is injured proximal to the sympathetic trunk, sympathetic fibers to the superior cervical ganglion are interrupted → ipsilateral ptosis, miosis, anhidrosis. This is a high-yield detail - the presence of Horner's syndrome localizes the lesion to the nerve root level (proximal/preganglionic), not a distal nerve injury.
"Lower type of brachial plexopathy (Déjerine-Klumpke type) results from injury to the eighth cervical and first thoracic roots or the lower trunk... When the first thoracic root is injured, the sympathetic fibers are interrupted. Therefore, an ipsilateral Horner syndrome (ptosis, miosis, and anhidrosis) results." - Localization in Clinical Neurology, 8th Ed.
Erb's PalsyKlumpke's Palsy
RootsC5-C6C8-T1
TrunkUpper trunkLower trunk
Classic causeShoulder dystocia / deliveryHyperabduction traction
PostureWaiter's/Bellman's tipClaw hand
Hands/fingersSparedAffected (main deficit)
Shoulder/elbowAffected (main deficit)Spared
Horner'sNoYes (if T1 proximal injury)
FrequencyCommon (~20x more common)Rare

4. Radial Nerve Injury - Saturday Night Palsy & Humeral Shaft Fractures

Course of the radial nerve (high yield): The radial nerve exits the posterior cord, enters the spiral groove (radial groove) of the humerus, winds around the lateral humerus, and then enters the forearm.
Two classic injury scenarios:

A. Saturday Night Palsy (Axilla/Spiral Groove - Compression)

  • Patient falls asleep drunk with arm draped over a chair back, or "honeymoon palsy" (arm draped over partner's shoulder)
  • Compresses the nerve in the spiral groove
  • Wrist drop (weakness of wrist extensors + finger extensors)
  • If compression is at the axilla (e.g., improper crutch use): also get triceps weakness in addition to wrist drop

B. Humeral Shaft Fracture (Mid-shaft - ~22% incidence)

  • The radial nerve is tethered in the spiral groove and is vulnerable to mid-shaft humeral fractures
  • About 22% of humeral shaft fractures are associated with radial nerve injury
  • Hallmark: wrist drop - weakness of hand and finger extensors
  • Most are neuropraxias (stretching/compression, not transection) - spontaneous resolution reported in 60-92% of cases
  • Management: splint wrist at ~60° of dorsiflexion while awaiting recovery; EMG at 6-8 weeks to assess axonal loss
"If you have a patient with a humeral shaft fracture, check the patient for wrist drop. Most radial nerve injuries are neuropraxias, or stretching of the nerve." - Schwartz's Principles of Surgery, 11th Ed.
Prognosis: Demyelinative (neuropraxia) injuries like Saturday night palsy typically recover in 6-8 weeks. Axon-loss injuries take longer but most eventually recover.
Exam trap: Wrist drop causes mechanical disadvantage for finger extension. If you test interosseous (ulnar) strength with the wrist dropped, you may get false-positive weakness and misdiagnose a plexopathy. Fix: place the palm flat on a surface to neutralize the wrist drop, then re-test.

5. Anatomical Snuffbox

Definition: A triangular depression on the posterolateral side of the wrist and the base of the 1st metacarpal, formed by the extensor tendons of the thumb.
Boundaries:
BorderStructure
Lateral (radial/anterior)Tendons of Abductor Pollicis Longus (APL) + Extensor Pollicis Brevis (EPB)
Medial (posterior/ulnar)Tendon of Extensor Pollicis Longus (EPL)
FloorScaphoid + Trapezium + distal ECRL + ECRB tendons
RoofSkin
Contents:
  • Radial artery - passes obliquely through the floor (deep to tendons), adjacent to the scaphoid - pulse is palpable here
  • Superficial branch of the radial nerve - passes subcutaneously over the roof
  • Cephalic vein - origin from the dorsal venous arch crosses over the roof
Clinical significance - Scaphoid Fracture:
The scaphoid sits in the floor of the snuffbox. Tenderness in the anatomical snuffbox after a "fall on outstretched hand" (FOOSH) must be treated as a scaphoid fracture until proven otherwise, even if initial X-ray is negative.
Why it matters:
  • Up to 30-40% of scaphoid fractures are X-ray negative initially
  • Missed/untreated scaphoid fractures → avascular necrosis of the proximal pole (the scaphoid's blood supply enters distally, so proximal pole depends on retrograde flow)
  • Anatomical snuffbox tenderness: sensitivity 87-100%, specificity 3-98% - very sensitive, not specific
  • Combination of ASB tenderness + scaphoid tubercle tenderness + scaphoid compression test: sensitivity 100%, specificity 74%
"When the hand is in ulnar deviation, the scaphoid becomes palpable within the snuffbox. This position enables the physician to palpate the bone to assess for a fracture." - Gray's Anatomy for Students
If X-ray is negative but clinical suspicion is high: Immobilize in a thumb spica splint and repeat imaging at 10-14 days, or proceed directly to CT/MRI.

6. High-Yield Extras Often Tested with This Group

Axillary Nerve Injury

  • Fracture of surgical neck of humerus or glenohumeral dislocation
  • Loses: deltoid (abduction) + teres minor (external rotation)
  • Sensory loss: "regimental badge area" (lateral shoulder)
  • Key distinguishing point: no biceps weakness (unlike C5 radiculopathy)

Long Thoracic Nerve (C5-C7)

  • Serratus anterior paralysis
  • Winged scapula - scapula protrudes when patient pushes against a wall
  • Causes: mastectomy, stab wound, carrying heavy loads on the shoulder

Median Nerve - "Ape Hand" / Carpal Tunnel

  • Recurrent branch lesion (at carpal tunnel): thenar wasting only, no sensory loss in palm
  • Wrist-level cut: thenar wasting + sensory loss (lateral 3.5 fingers)
  • High median nerve (elbow/above): add loss of FDP to index/middle + FPL = "hand of benediction" on attempted fist

Ulnar Nerve - "Claw Hand"

  • At the wrist (most common): claw hand of ring + little fingers, hypothenar wasting, interosseous wasting, loss of sensation ulnar 1.5 fingers
  • "All ulnar claws": the more distal the lesion, the more pronounced the claw (ulnar paradox)

NBE Scenario Pattern Recognition

Clinical ScenarioInjuryNerve/Level
Newborn, shoulder dystocia, arm hangs/internally rotatedErb's palsyUpper trunk C5-C6
Fall from tree, grabs branch, claw handKlumpke's palsyLower trunk C8-T1
Klumpke's + drooping eyelid/small pupilKlumpke's + Horner'sT1 proximal root
Drunk, woke up with wrist drop, no fractureSaturday night palsyRadial nerve, spiral groove
Mid-shaft humerus fracture + wrist dropRadial nerve injurySpiral groove (mid-humerus)
FOOSH + snuffbox tenderness, normal X-rayScaphoid fracture (occult)-
Proximal humerus fracture + deltoid weaknessAxillary nerve injurySurgical neck
Mastectomy/stab wound + winged scapulaLong thoracic nerveC5-C7
Apical lung tumor + Horner's + claw handPancoast syndromeLower trunk C8-T1 + T1 sympathetics

Sources: Miller's Review of Orthopaedics 9th Ed., Neuroanatomy through Clinical Cases 3rd Ed., Schwartz's Principles of Surgery 11th Ed., Localization in Clinical Neurology 8th Ed., Gray's Anatomy for Students, Rockwood and Green's Fractures in Adults 10th Ed. (2025), Rosen's Emergency Medicine

Is this everything needed for fmge exam from this topic

Finding Sources
Finding Sources
Finding Sources
Finding Sources
Searching the Web

FMGE brachial plexus upper limb nerve injuries important topics 2024 2025

Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Now I have everything needed. Here is the complete FMGE gap analysis and supplement:

FMGE Complete Coverage - Brachial Plexus & Upper Limb Nerve Injuries

What Was Already Covered vs. What FMGE Also Tests

The previous answer covered the "core four" well. Here is a frank gap analysis followed by everything missing.

GAPS IN THE PREVIOUS ANSWER

1. The "Hand Postures" - FMGE Tests ALL of These by Name

This is a direct MCQ favorite. You need to know all 5 named postures and what causes each.
PostureNerve / SituationMechanism
Waiter's Tip / Bellman's TipUpper trunk C5-C6 (Erb's palsy)Adduction + internal rotation + extended elbow
Claw HandUlnar nerve at wrist OR lower trunk (Klumpke's)MCP extension + IP flexion of ring & little fingers
Wrist DropRadial nerve (spiral groove)Wrist + finger extensors paralyzed
Hand of Benediction / Preacher's HandProximal median nerve (above elbow)When patient ATTEMPTS to make a fist - index & middle fingers stay extended because FDP-1,2 + FPL are lost
Ape Hand / Simian HandChronic median + ulnar nerve combinedThenar + hypothenar wasting, thumb falls into plane of palm (can't oppose)
Pope's Blessing / Oath HandProximal median nerve at restIndex + middle fingers extended at rest (opposite of claw - confused by many)
The most-tested confusion point:
  • Claw hand is WORSE (more fingers affected) with a distal ulnar lesion than a proximal one - this is the Ulnar Paradox (explained fully below).
  • Hand of benediction occurs when trying to MAKE A FIST (proximal median). Ulnar claw occurs at REST or when trying to EXTEND fingers.

2. Median Nerve Injuries - Level by Level (Heavily Tested)

A. High Median Nerve (above elbow - supracondylar fracture in children)

Supracondylar fracture of humerus is the classic pediatric scenario.
Muscles lost:
  • All forearm flexors except FCU and medial half of FDP (those are ulnar)
  • FPL, FDP to index and middle (the AIN branch)
  • Pronator teres, pronator quadratus
  • LOAF muscles in the hand
Signs:
  • Hand of benediction when attempting fist (index + middle can't flex at DIP)
  • Weak pronation
  • Sensory loss: lateral 3.5 fingers + lateral palm
  • Thenar wasting (with time)
"OK sign" / Anterior Interosseous Nerve (AIN) test: Ask patient to make the "OK" circle with thumb and index finger. Normally you get a circle. With AIN palsy, you get a "pinch" (index DIP and thumb IP can't flex) - this is called the "Pinch sign" or inability to form "OK."

B. Wrist Level Median Nerve (Carpal Tunnel Syndrome - CTS)

The most common nerve compression syndrome in the body.
Classic scenario: Middle-aged woman, bilateral hand tingling, worse at night, relieved by shaking the hand (flick sign). Associated with pregnancy, hypothyroidism, diabetes, acromegaly, rheumatoid arthritis, repetitive wrist use.
Muscles lost (LOAF):
  • Lumbricals 1 & 2 (index and middle finger MCP flexion)
  • Opponens pollicis
  • Abductor pollicis brevis (best single muscle to test)
  • Flexor pollicis brevis (superficial head)
Key spared functions at the wrist level:
  • Wrist flexion (FCR branches off proximal to tunnel)
  • Sensation over thenar eminence (palmar cutaneous branch exits before the tunnel)
  • Flexion of index/middle fingers at DIP (FDP branches off proximal)
Provocative tests:
  • Tinel's sign - tapping over carpal tunnel at wrist reproduces tingling in fingers
  • Phalen's test - forced wrist flexion for 60 seconds reproduces paresthesias (more sensitive than Tinel's)
  • Reverse Phalen's (Prayer test) - dorsum of hands pressed together
No "hand of benediction" at this level - that only happens with high lesions.

3. Ulnar Nerve Injuries - Level by Level

A. At the Elbow (Cubital Tunnel / Medial Epicondyle)

Most common cause of ulnar neuropathy. The nerve passes through the cubital tunnel behind the medial epicondyle. Common in people who lean on their elbows.
Classic scenario: Medial epicondyle fracture, or "tardy ulnar palsy" (delayed ulnar palsy from childhood elbow injury with valgus deformity).
Muscles lost (all ulnar-innervated):
  • FCU (ulnar wrist flexion - weak)
  • FDP to ring + little (distal IP flexion lost - profundus to 4th and 5th digits)
  • All interossei (abduction/adduction of fingers)
  • Hypothenar muscles (ADM, FDM, ODM)
  • Adductor pollicis + deep head FPB
  • Lumbricals 3 & 4
Signs:
  • Claw hand (ring + little fingers) - MCP hyperextension + IP flexion
  • Froment's sign - ask patient to hold paper between thumb and index finger; adductor pollicis is weak, so patient compensates by flexing thumb at IP (using FPL, which is median) to hold the paper. Positive = thumb IP flexes while gripping.
  • Wartenberg's sign - little finger stays abducted (extended) during attempted adduction, because EDQ (radial nerve) is unopposed by 3rd volar interosseous (ulnar).
  • Sensory loss: ulnar 1.5 fingers + medial palm + dorsum of ulnar hand (dorsal cutaneous branch exits ~5cm above wrist)

B. At the Wrist (Guyon's Canal)

Classic scenario: Cyclist (handlebar palsy), chronic hammering, hook of hamate fracture.
Key difference from elbow level:
  • FCU and FDP to ring/little are spared (those branches come off above wrist)
  • Motor-only deficit possible if deep branch alone is compressed (no sensory loss)
  • If only deep motor branch: weak interossei + hypothenar + adductor pollicis, but no sensory loss

4. The Ulnar Paradox (Direct FMGE MCQ)

Question type: "In which level of ulnar nerve injury is the claw hand deformity MORE pronounced?"
Answer: A distal (wrist level) injury causes worse clawing than a proximal (elbow) injury.
Why?
  • Claw hand results from paralysis of the lumbricals (which flex MCP and extend IP joints).
  • In a HIGH ulnar lesion (at elbow): FDP to ring + little fingers is ALSO paralyzed. The FDP would normally pull the DIP and PIP into flexion - but without it, the fingers can't fully claw. The deformity is LESS prominent.
  • In a LOW ulnar lesion (at wrist): FDP to ring + little is INTACT. So the fingers flex strongly at IP joints while the lumbricals are still out - giving a MORE pronounced claw.
"All ulnar claws: the more distal the lesion, the more pronounced the claw" - Miller's Review of Orthopaedics
This paradox applies similarly to median nerve: a distal median lesion (CTS) produces more thenar wasting and weaker thumb opposition compared to a proximal one where OTHER compensatory mechanisms partially mask it.

5. Radial Nerve - Posterior Interosseous Nerve (PIN) Syndrome

The previous answer only covered the spiral groove. FMGE also tests PIN.
The PIN is the deep motor branch of the radial nerve, branching below the elbow after the radial nerve passes through the radial tunnel (between the two heads of supinator).
PIN injury scenario: Radial head fracture, lipoma/ganglion compressing the nerve at the radial tunnel, repetitive forearm rotation.
Key distinction from spiral groove injury:
FeatureSpiral Groove InjuryPIN Injury (at radial tunnel)
Wrist dropPresentPartial - ECRL spared (it branches before PIN)
TricepsSpared (branches before spiral groove)Spared
Wrist extensionLostECRL works - wrist extends but deviates radially
Finger extensionLostLost
Sensory lossPresent (dorsal lateral hand)None (PIN is purely motor)
BrachioradialisIntactIntact
The "finger drop" without sensory loss = PIN injury.

6. Long Thoracic Nerve (C5-C7) - Winged Scapula

Muscles: Serratus anterior only.
Function of serratus anterior: Holds the scapula against the chest wall + protracts scapula + rotates glenoid upward (allows arm elevation above 90°).
Signs:
  • Winging of scapula on pushing against a wall (medial border protrudes)
  • Inability to raise the arm past 90° (glenoid can't rotate up)
Causes:
  • Mastectomy / axillary lymph node dissection
  • Carrying heavy loads ("rucksack paralysis")
  • Viral neuritis
  • Stab wound
"Paralysis of the serratus anterior caused by damage to the long thoracic nerve produces a winged scapula on the affected side, making it impossible to raise the arm laterally past 90°" - Color Atlas of Human Anatomy, Thieme
Distinguish from Trapezius palsy (spinal accessory nerve, CN XI): also causes winging but the scapula wings MORE when the arm is raised (not when pushing). Trapezius palsy also drops the shoulder.

7. Musculocutaneous Nerve - Frequently Skipped

Origin: Lateral cord (C5, C6, C7).
Muscles: Biceps, brachialis, coracobrachialis.
Injury: Rare in isolation. Occurs with dislocation of shoulder, stab wounds to axilla, or in lateral cord lesions.
Signs:
  • Weak elbow flexion
  • Weak forearm supination (biceps is the primary supinator)
  • Loss of biceps reflex
  • Sensory loss: lateral forearm (becomes the lateral cutaneous nerve of forearm after passing through biceps)
FMGE trap: If a patient has weak elbow flexion AND weak forearm supination + sensory loss on lateral forearm = musculocutaneous nerve. If weak elbow flexion alone without sensory loss = C5-C6 root lesion or high plexus lesion.

8. Preganglionic vs. Postganglionic Brachial Plexus Injury

FMGE tests this distinction because it determines surgical outcome.
FeaturePreganglionic (Root Avulsion)Postganglionic
SiteNerve root avulsed from spinal cordNerve torn distal to DRG
Histamine testFlare PRESENT (axon still intact to skin)Flare ABSENT
Horner's syndromePresent (if C8-T1 involved)Usually absent
Paraspinal musclesDenervated on EMGNormal
Sensory evoked potentialsPreserved (DRG intact)Absent
PrognosisWorse - nerve grafting NOT possibleBetter - grafting/repair possible
Cervical myelogram/MRIShows pseudomeningoceleNormal
Phrenic nerve palsyOften co-exists (elevated hemidiaphragm on CXR)Usually absent

9. Axillary Nerve - Complete Picture

Fracture of surgical neck of humerus or anterior shoulder dislocation (most common joint dislocation in the body).
Muscles: Deltoid + teres minor.
Signs:
  • Loss of shoulder abduction (deltoid) - cannot abduct past 15-20°
  • Loss of external rotation (teres minor)
  • Sensory loss: "regimental badge area" - a circular patch on the lateral shoulder/upper arm
"Test sensation in the upper part of the lateral aspect of the arm ('regimental badge area'). Loss may indicate damage to the axillary nerve (following shoulder dislocation)." - Bailey and Love's Surgery, 28th Ed.
FMGE trap: C5 radiculopathy also weakens deltoid AND biceps. Axillary nerve injury weakens deltoid but spares biceps (musculocutaneous territory). Use sensory distribution to differentiate.

COMPLETE FMGE QUICK-REFERENCE TABLE

NerveKey Injury LevelClassic MechanismMotor LossSensory LossNamed Sign/Posture
Upper trunk C5-C6Erb's palsyBirth trauma / shoulder depressionDeltoid, biceps, supraspinatus, wrist extLateral arm + forearmWaiter's tip
Lower trunk C8-T1Klumpke's palsyHyperabduction tractionIntrinsics, wrist/finger flexorsMedial arm, ulnar handClaw hand + Horner's
Radial (spiral groove)Saturday night palsy / humeral shaft #Compression/fractureWrist + finger extensorsDorsal lateral handWrist drop
Radial (axilla)Crutch palsyAxillary crutch+ Triceps weakSameWrist drop + absent triceps reflex
PIN (radial tunnel)Radial head # / entrapment-Finger extensors; ECRL sparedNoneFinger drop, radial deviation on wrist ext
Median (high, above elbow)Supracondylar # humerusChildrenFDP-1,2; FPL; pronation; LOAFLateral 3.5 fingers + lat palmHand of benediction (on fist)
Median AINForearm entrapment-FDP-1,2; FPL onlyNoneCan't make "OK" sign
Median (wrist - CTS)Carpal tunnelRepetitive use / pregnancy etc.LOAF onlyLateral 3.5 fingers (NOT thenar eminence)Thenar wasting; Tinel's + Phalen's
Ulnar (elbow)Cubital tunnelMedial epicondyle fracture, leaningFCU, FDP-4,5, intrinsicsUlnar 1.5 fingers, med palm + dorsumClaw (ring+little), Froment's, Wartenberg's
Ulnar (wrist)Guyon's canalCyclist / hamate fractureIntrinsics only (FCU, FDP-4,5 spared)Variable / none if deep branch onlyWorse claw (ulnar paradox)
AxillarySurgical neck humerus / shoulder dislocation-Deltoid, teres minorRegimental badge areaShoulder abduction lost
Long thoracic (C5-7)Axillary surgery / carrying loads-Serratus anteriorNoneWinged scapula; arm can't go >90°
MusculocutaneousLateral cord / shoulder dislocation-Biceps, brachialisLateral forearmWeak elbow flexion + supination

FMGE-SPECIFIC HIGH-YIELD POINTS NOT PREVIOUSLY COVERED

  1. Radial nerve is the most common nerve injured in the upper limb overall (due to its vulnerability in the spiral groove).
  2. Median nerve is the most commonly compressed nerve (CTS is the most common entrapment neuropathy in the body).
  3. Ulnar nerve is the most commonly injured nerve at the elbow.
  4. Supracondylar fracture of humerus in children = median nerve or AIN injury (the sharp distal fragment injures the anterior nerve).
  5. Posterior dislocation of elbow = ulnar nerve injury.
  6. Anterior dislocation of shoulder = axillary nerve injury.
  7. Surgical neck of humerus fracture = axillary nerve injury.
  8. Mid-shaft (spiral groove level) humeral fracture = radial nerve injury (22%).
  9. Monteggia fracture (proximal ulna fracture + radial head dislocation) = PIN injury.
  10. Colles fracture (distal radius) = median nerve / CTS (from hematoma or carpal distortion).
  11. The only nerve that can regenerate at ~1 mm/day - spontaneous recovery is possible up to ~18 months from injury.
  12. AIN test = "OK sign" - inability to form a circle = AIN palsy.
  13. Froment's sign = adductor pollicis palsy (ulnar) - compensates with FPL (median).
  14. Wartenberg's sign = 3rd volar interosseous palsy (ulnar) - little finger stays abducted.

In short: The previous answer was excellent for the main NBE scenarios. For FMGE specifically, you also need the hand posture names and mechanisms, level-by-level median + ulnar nerve breakdowns, the ulnar paradox, PIN vs. spiral groove distinction, preganglionic vs. postganglionic, and the fracture-to-nerve injury mapping table above. With this added, the topic is fully covered.
Sources: Neuroanatomy through Clinical Cases 3rd Ed., General Anatomy & Musculoskeletal System (THIEME Atlas), Miller's Review of Orthopaedics 9th Ed., Localization in Clinical Neurology 8th Ed., Schwartz's Principles of Surgery 11th Ed., Bailey & Love's Surgery 28th Ed., Gray's Anatomy for Students

Can u combine all this and make it into a pdf??

Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /home/daytona/workspace/brachial-plexus-pdf && python3 -c "import repor…

Writing File

~/brachial-plexus-pdf/generate_pdf.py

from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.lib import colors
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem

# ── Output path ───────────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/brachial-plexus-pdf/Brachial_Plexus_Upper_Limb_Nerve_Injuries_FMGE.pdf"

# ── Colour palette ────────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1a3a5c")
MED_BLUE    = colors.HexColor("#2e6da4")
LIGHT_BLUE  = colors.HexColor("#dce9f5")
ACCENT_GOLD = colors.HexColor("#e8a020")
LIGHT_GOLD  = colors.HexColor("#fdf3df")
LIGHT_GRAY  = colors.HexColor("#f4f6f8")
RED_WARN    = colors.HexColor("#c0392b")
GREEN_OK    = colors.HexColor("#1d7a3a")
WHITE       = colors.white
BLACK       = colors.black
TABLE_HDR   = colors.HexColor("#1a3a5c")
TABLE_ALT   = colors.HexColor("#eaf1fa")

# ── Document ──────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=18*mm, rightMargin=18*mm,
    topMargin=22*mm, bottomMargin=22*mm,
    title="Brachial Plexus & Upper Limb Nerve Injuries – FMGE Master Notes",
    author="Orris AI",
)

W = A4[0] - 36*mm   # usable width

# ── Styles ────────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()

def style(name, parent="Normal", **kw):
    s = ParagraphStyle(name, parent=base[parent], **kw)
    return s

S = {
    "cover_title": style("cover_title", "Title",
        fontSize=26, textColor=WHITE, leading=32,
        alignment=TA_CENTER, spaceAfter=6),
    "cover_sub": style("cover_sub", "Normal",
        fontSize=13, textColor=LIGHT_BLUE, leading=18,
        alignment=TA_CENTER, spaceAfter=4),
    "cover_tag": style("cover_tag", "Normal",
        fontSize=10, textColor=ACCENT_GOLD, leading=14,
        alignment=TA_CENTER),
    "h1": style("h1", "Heading1",
        fontSize=15, textColor=WHITE, leading=20,
        backColor=DARK_BLUE, spaceBefore=14, spaceAfter=4,
        leftIndent=-4, rightIndent=-4,
        borderPad=6),
    "h2": style("h2", "Heading2",
        fontSize=12, textColor=DARK_BLUE, leading=16,
        spaceBefore=10, spaceAfter=3,
        borderPad=2),
    "h3": style("h3", "Heading3",
        fontSize=10.5, textColor=MED_BLUE, leading=14,
        spaceBefore=7, spaceAfter=2),
    "body": style("body", "Normal",
        fontSize=9.5, leading=14, spaceAfter=4,
        alignment=TA_JUSTIFY),
    "bullet": style("bullet", "Normal",
        fontSize=9.5, leading=13, leftIndent=14,
        bulletIndent=4, spaceAfter=2),
    "warn": style("warn", "Normal",
        fontSize=9.5, leading=13,
        backColor=LIGHT_GOLD, borderPad=6,
        textColor=colors.HexColor("#7a4800"),
        spaceAfter=6),
    "tip": style("tip", "Normal",
        fontSize=9.5, leading=13,
        backColor=colors.HexColor("#e8f5e9"), borderPad=6,
        textColor=GREEN_OK,
        spaceAfter=6),
    "quote": style("quote", "Normal",
        fontSize=9, leading=13, leftIndent=12, rightIndent=12,
        textColor=colors.HexColor("#444444"), fontName="Helvetica-Oblique",
        spaceAfter=4),
    "footer": style("footer", "Normal",
        fontSize=8, textColor=colors.HexColor("#888888"),
        alignment=TA_CENTER),
    "toc_entry": style("toc_entry", "Normal",
        fontSize=10, leading=16, textColor=DARK_BLUE),
    "section_num": style("section_num", "Normal",
        fontSize=9, textColor=MED_BLUE, leading=12, spaceAfter=1),
}

# ── Helpers ───────────────────────────────────────────────────────────────────
def H1(txt):
    return [Paragraph(f"<b>{txt}</b>", S["h1"]), Spacer(1, 3*mm)]

def H2(txt):
    return [Paragraph(txt, S["h2"]), HRFlowable(width="100%", thickness=1,
            color=MED_BLUE, spaceAfter=2)]

def H3(txt):
    return [Paragraph(f"<b>{txt}</b>", S["h3"])]

def P(txt):
    return [Paragraph(txt, S["body"])]

def Warn(txt):
    return [Paragraph(f"⚠ <b>Exam Trap:</b> {txt}", S["warn"])]

def Tip(txt):
    return [Paragraph(f"✔ <b>High-Yield:</b> {txt}", S["tip"])]

def Quote(txt):
    return [Paragraph(f'"{txt}"', S["quote"])]

def bullets(items):
    out = []
    for it in items:
        out.append(Paragraph(f"• {it}", S["bullet"]))
    return out

def sp(n=4):
    return [Spacer(1, n*mm)]

def hr():
    return [HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=4)]

def table(data, col_widths=None, hdr_rows=1, alt=True):
    t = Table(data, colWidths=col_widths, repeatRows=hdr_rows)
    style_cmds = [
        ("BACKGROUND", (0,0), (-1, hdr_rows-1), TABLE_HDR),
        ("TEXTCOLOR",  (0,0), (-1, hdr_rows-1), WHITE),
        ("FONTNAME",   (0,0), (-1, hdr_rows-1), "Helvetica-Bold"),
        ("FONTSIZE",   (0,0), (-1,-1), 8.5),
        ("LEADING",    (0,0), (-1,-1), 11),
        ("ALIGN",      (0,0), (-1,-1), "LEFT"),
        ("VALIGN",     (0,0), (-1,-1), "MIDDLE"),
        ("GRID",       (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
        ("ROWBACKGROUNDS", (0, hdr_rows), (-1,-1),
            [TABLE_ALT, WHITE] if alt else [WHITE]),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("RIGHTPADDING",(0,0), (-1,-1), 5),
    ]
    t.setStyle(TableStyle(style_cmds))
    return [t, Spacer(1, 4*mm)]

# ── Cover page ────────────────────────────────────────────────────────────────
def cover_block():
    cover_bg = Table(
        [[Paragraph("<b>Brachial Plexus &amp;</b>", S["cover_title"]),],
         [Paragraph("<b>Upper Limb Nerve Injuries</b>", S["cover_title"]),],
         [Spacer(1,4*mm)],
         [Paragraph("Complete FMGE / NBE Master Notes", S["cover_sub"])],
         [Paragraph("Anatomy • Clinical Scenarios • Exam Traps • Quick-Reference Tables", S["cover_tag"])],
         [Spacer(1,8*mm)],
         [Paragraph("Compiled from Gray's Anatomy for Students • Miller's Review of Orthopaedics 9e •<br/>"
                    "Neuroanatomy through Clinical Cases 3e • Localization in Clinical Neurology 8e •<br/>"
                    "Schwartz's Principles of Surgery 11e • Bailey &amp; Love 28e • THIEME Atlas",
                    S["cover_tag"])],
        ],
        colWidths=[W],
    )
    cover_bg.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
        ("TOPPADDING",  (0,0), (-1,-1), 10),
        ("BOTTOMPADDING",(0,0),(-1,-1), 10),
        ("LEFTPADDING", (0,0), (-1,-1), 16),
        ("RIGHTPADDING",(0,0),(-1,-1), 16),
        ("ROUNDEDCORNERS", [6]),
    ]))
    return [Spacer(1, 20*mm), cover_bg, PageBreak()]

# ── Story builder ─────────────────────────────────────────────────────────────
story = []
story += cover_block()

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 1 – BRACHIAL PLEXUS FRAMEWORK
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("1. Brachial Plexus Framework")
story += P("The brachial plexus arises from anterior rami of spinal roots C5–T1 and organises "
           "into the following levels. Mnemonic: <b>Randy Travis Drinks Cold Beer</b> "
           "(Roots → Trunks → Divisions → Cords → Branches).")
story += sp(2)

plexus_data = [
    ["Level", "Components", "Key Notes"],
    ["Roots", "C5, C6, C7, C8, T1", "Anterior primary rami exiting between scalene muscles"],
    ["Trunks", "Upper (C5+C6)  |  Middle (C7)  |  Lower (C8+T1)", "Above clavicle (supraclavicular)"],
    ["Divisions", "Anterior (flexors) & Posterior (extensors)\nfrom each trunk", "No named terminal branches at this level"],
    ["Cords", "Lateral  |  Posterior  |  Medial\n(named relative to axillary artery)", "Below clavicle (infraclavicular)"],
    ["Branches", "Musculocutaneous, Axillary, Radial, Median, Ulnar\n(+ many smaller named branches)", "Terminal nerves of the upper limb"],
]
story += table(plexus_data, col_widths=[30*mm, 85*mm, 52*mm])

story += H2("Pre-divisional Branches (frequently tested in isolation)")
pre_data = [
    ["Nerve", "Origin", "Muscle(s)", "Injury Sign"],
    ["Long thoracic n.", "C5, C6, C7 (roots)", "Serratus anterior", "Winged scapula; arm can't raise >90°"],
    ["Dorsal scapular n.", "C5 (root)", "Rhomboids + Levator scapulae", "Scapula not retracted; winging (medial)"],
    ["Suprascapular n.", "Upper trunk (C5, C6)", "Supraspinatus + Infraspinatus", "Weak abduction initiation + external rotation"],
    ["Nerve to subclavius", "Upper trunk (C5, C6)", "Subclavius", "Clinically silent (rarely tested)"],
    ["Phrenic nerve (C3-5)", "Root level (C3–5)", "Diaphragm", "Elevated hemidiaphragm — marker of root avulsion"],
]
story += table(pre_data, col_widths=[38*mm, 32*mm, 42*mm, 55*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 2 – ERB'S PALSY
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("2. Erb's Palsy (Upper Trunk Injury — C5, C6)")

story += H2("Mechanism & Causes")
story += bullets([
    "<b>Neonatal:</b> Shoulder dystocia during difficult vaginal delivery — forced depression of shoulder with lateral head flexion",
    "<b>Adult:</b> Motorcycle accident, glenohumeral dislocation — sudden shoulder depression / traction",
    "<b>Iatrogenic:</b> Improper arm positioning under anaesthesia",
])

story += H2("Muscles Lost (C5–C6 innervated)")
story += bullets([
    "Deltoid (abduction lost)",
    "Biceps brachii (elbow flexion + forearm supination lost)",
    "Supraspinatus (abduction initiation lost)",
    "Infraspinatus + Teres minor (external rotation lost)",
    "Brachioradialis (partial elbow flexion loss)",
    "Wrist extensors (partially affected)",
])

story += H2("Classic Posture")
story += P("<b>Waiter's Tip / Bellman's Tip:</b> Arm hangs adducted and internally rotated at the side, "
           "elbow extended, forearm pronated, wrist slightly flexed. <b>Finger and hand movements are "
           "relatively spared</b> (key differentiating point — rules out complete plexus injury).")

story += H2("Prognosis")
story += bullets([
    "Over <b>90% of neonatal cases</b> resolve by 3 months of age",
    "<b>Biceps function at 3 months = the key prognostic indicator</b>",
    "If biceps not recovered by 3–6 months → surgical exploration ± nerve grafting considered",
    "Severity grading: neuropraxia (best) → axonotmesis → neurotmesis (worst)",
])
story += Tip("Erb's palsy is ~20 times more common than Klumpke's palsy.")
story += sp(2)

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 3 – KLUMPKE'S PALSY
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("3. Klumpke's Palsy (Lower Trunk Injury — C8, T1)")

story += H2("Mechanism & Causes")
story += bullets([
    "Forcible <b>hyperabduction</b> of the arm — grabbing a branch during a fall",
    "<b>Pancoast tumour</b> (apical lung carcinoma) invading the lower plexus",
    "Thoracic outlet syndrome (compression between clavicle and 1st rib)",
    "Sudden upward traction on the arm",
])

story += H2("Muscles Lost (C8–T1 innervated)")
story += bullets([
    "All intrinsic hand muscles: interossei, lumbricals, thenar + hypothenar groups",
    "Flexor digitorum profundus to ring + little (C8 component)",
    "Wrist/finger flexors (partial)",
])

story += H2("Classic Posture & Signs")
story += bullets([
    "<b>Claw hand:</b> MCP hyperextension (intrinsics lost) + IP joint flexion (long flexors intact)",
    "Thenar and hypothenar wasting",
    "Sensory loss on medial arm, medial forearm, and ulnar aspect of hand",
    "<b>Depressed / absent finger flexor reflex (C8–T1)</b>",
])

story += H2("Horner's Syndrome Association")
story += P("When <b>T1 root is injured proximal to the sympathetic trunk</b>, sympathetic fibres "
           "destined for the superior cervical ganglion are interrupted → "
           "<b>ipsilateral ptosis + miosis + anhidrosis</b>.")
story += Tip("Presence of Horner's syndrome in a claw hand patient = preganglionic T1 root "
             "lesion (not just peripheral ulnar/median neuropathy).")

story += H2("Erb's vs. Klumpke's — Comparison")
comp_data = [
    ["Feature", "Erb's Palsy", "Klumpke's Palsy"],
    ["Roots", "C5–C6", "C8–T1"],
    ["Trunk", "Upper trunk", "Lower trunk"],
    ["Classic cause", "Shoulder dystocia / depression", "Hyperabduction traction"],
    ["Classic posture", "Waiter's tip", "Claw hand"],
    ["Hands/fingers", "Spared (main differentiator)", "Affected (main deficit)"],
    ["Shoulder/elbow", "Affected (main deficit)", "Spared"],
    ["Horner's syndrome", "No", "Yes (if T1 proximal injury)"],
    ["Frequency", "Common (~20× more frequent)", "Rare"],
    ["Prognosis", ">90% neonatal resolution at 3m", "Less predictable"],
]
story += table(comp_data, col_widths=[38*mm, 60*mm, 60*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 4 – RADIAL NERVE
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("4. Radial Nerve Injuries")

story += H2("Course of the Radial Nerve (High-Yield)")
story += bullets([
    "Arises from <b>posterior cord</b> (C5–C8, T1)",
    "Exits axilla → enters <b>spiral groove (radial groove)</b> of humerus posterolaterally",
    "Winds around the lateral humerus → enters forearm between brachialis and brachioradialis",
    "Splits at the radial tunnel into: <b>superficial branch</b> (sensory only) and "
    "<b>posterior interosseous nerve / PIN</b> (motor only)",
])

story += H2("A. Axillary / Proximal Injury — Crutch Palsy")
story += bullets([
    "<b>Cause:</b> Improper axillary crutch use — compresses nerve in axilla",
    "<b>Signs:</b> Wrist drop + finger drop + <b>triceps weakness</b> + absent triceps reflex",
    "Sensory loss: dorsolateral hand + posterior forearm + lateral arm",
])

story += H2("B. Spiral Groove Injury — Saturday Night Palsy / Humeral Shaft Fracture")
story += bullets([
    "<b>Saturday night palsy:</b> Patient falls asleep drunk with arm over chair/bench — "
    "compression in spiral groove. Also 'Honeymoon palsy' (arm over partner's shoulder).",
    "<b>Humeral shaft fracture:</b> ~22% of mid-shaft humeral fractures injure the radial nerve",
    "<b>Key sign: Wrist drop</b> (weakness of wrist + finger extensors)",
    "Triceps is <b>spared</b> (branches off before spiral groove in most cases)",
    "Sensory loss: dorsal lateral hand (superficial branch territory)",
])
story += Warn("Wrist drop causes mechanical disadvantage. Testing interossei with wrist "
              "dropped may show false ulnar weakness. Fix: place palm flat on a surface, then retest.")

story += H2("Prognosis & Management")
story += bullets([
    "Most humeral shaft radial nerve injuries are <b>neuropraxias</b> — spontaneous resolution 60–92%",
    "Saturday night palsy (demyelinative): recovery typically within <b>6–8 weeks</b>",
    "Axon-loss injuries: slower but most eventually recover",
    "Management: wrist splint at ~60° dorsiflexion while awaiting recovery; EMG at 6–8 weeks",
    "Surgical exploration if no recovery by 3–4 months, or if nerve entrapped in complex fracture",
])

story += H2("C. Posterior Interosseous Nerve (PIN) — Radial Tunnel Syndrome")
story += bullets([
    "<b>Cause:</b> Radial head fracture, lipoma/ganglion at radial tunnel, Monteggia fracture, "
    "repetitive forearm rotation",
    "PIN is a <b>purely motor</b> branch — NO sensory loss",
    "ECRL is spared (branches before PIN) → wrist extends but <b>deviates radially</b>",
    "Finger extension lost; brachioradialis + triceps intact",
])

pin_data = [
    ["Feature", "Spiral Groove Injury", "PIN Injury (radial tunnel)"],
    ["Triceps", "Spared (usually)", "Spared"],
    ["Wrist extension", "Lost (wrist drop)", "Present but radially deviated (ECRL works)"],
    ["Finger extension", "Lost", "Lost"],
    ["Sensory loss", "Dorsal lateral hand", "NONE (purely motor)"],
    ["Brachioradialis", "Intact", "Intact"],
    ["Classic cause", "Humeral shaft fracture", "Radial head Fx / Monteggia Fx"],
]
story += table(pin_data, col_widths=[38*mm, 65*mm, 55*mm])

story += Tip("Finger drop without sensory loss = PIN injury. Wrist drop with sensory loss = spiral groove injury.")

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 5 – MEDIAN NERVE
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("5. Median Nerve Injuries")

story += H2("A. High Median Nerve (Above Elbow) — Supracondylar Fracture")
story += bullets([
    "<b>Classic paediatric scenario:</b> Supracondylar fracture of humerus (anterior fragment injures median nerve)",
    "Also: dislocation of elbow, stab wounds to arm",
])
story += P("<b>Muscles lost:</b>")
story += bullets([
    "Pronator teres, pronator quadratus (pronation weak)",
    "FCR, palmaris longus (wrist flexion weak)",
    "FDS (all fingers)",
    "FDP to index + middle fingers (AIN territory)",
    "FPL (AIN territory)",
    "LOAF muscles of hand (see CTS below)",
])

story += P("<b>Key sign: Hand of Benediction / Preacher's Hand</b> — when patient ATTEMPTS to make "
           "a fist: index and middle fingers remain extended (FDP-1,2 + FPL paralysed). "
           "Ring + little fingers can flex (FDP-3,4 from ulnar nerve intact).")
story += P("<b>Sensory loss:</b> Lateral 3.5 fingers + lateral palm (not thenar eminence — "
           "palmar cutaneous branch exits above wrist).")

story += H2("B. Anterior Interosseous Nerve (AIN) Syndrome")
story += bullets([
    "AIN is a purely <b>motor</b> branch of the median nerve in the forearm",
    "Causes: forearm trauma, fibrous band entrapment",
    "Muscles lost: FDP to index+middle, FPL, pronator quadratus",
    "<b>NO sensory loss</b>",
    "<b>Test:</b> Ask patient to make 'OK' circle with thumb and index finger — "
    "unable to form a circle, shows 'pinch sign' instead",
])
story += Tip("AIN palsy = can't make the OK sign. No sensory loss. Purely motor.")

story += H2("C. Carpal Tunnel Syndrome (CTS) — Wrist Level")
story += P("<b>Most common nerve compression syndrome in the body.</b> Median nerve compressed "
           "under the flexor retinaculum.")
story += P("<b>Classic scenario:</b> Middle-aged woman, bilateral hand tingling worse at night, "
           "relieved by shaking the hand (<b>flick sign</b>).")
story += P("<b>Associations:</b> Pregnancy, hypothyroidism, diabetes, acromegaly, rheumatoid "
           "arthritis, repetitive wrist use, Colles' fracture, obesity.")

story += P("<b>Muscles lost (LOAF mnemonic):</b>")
story += bullets([
    "<b>L</b>umbricals 1 & 2",
    "<b>O</b>pponens pollicis",
    "<b>A</b>bductor pollicis brevis (best single muscle to test)",
    "<b>F</b>lexor pollicis brevis (superficial head)",
])

story += P("<b>Key spared functions at wrist level:</b>")
story += bullets([
    "Wrist flexion (FCR branches off proximal to tunnel)",
    "Thenar eminence sensation (palmar cutaneous branch exits before tunnel)",
    "Index/middle DIP flexion (FDP branches off proximal to tunnel)",
    "<b>No hand of benediction</b> (that requires high lesion)",
])

story += P("<b>Provocative tests:</b>")
story += bullets([
    "<b>Tinel's sign:</b> Tapping over carpal tunnel at wrist → tingling in fingers",
    "<b>Phalen's test:</b> Forced wrist flexion for 60 seconds → paresthesias "
    "(more sensitive than Tinel's)",
    "<b>Reverse Phalen's / Prayer test:</b> Dorsa of hands pressed together (extension) → symptoms",
])
story += Warn("Sensation over the THENAR EMINENCE is SPARED in CTS because the palmar cutaneous "
              "branch of the median nerve exits proximal to the carpal tunnel. A common MCQ trap.")

story += H2("High vs. Wrist Median Nerve — Key Differences")
med_data = [
    ["Feature", "High (Above Elbow)", "Wrist (CTS)"],
    ["Classic cause", "Supracondylar Fx humerus (child)", "Repetitive use / pregnancy / CTS"],
    ["Hand of benediction", "Yes (on attempted fist)", "No"],
    ["Thenar wasting", "Yes (with time)", "Yes (with time — LOAF)"],
    ["Index DIP flexion", "Lost (FDP-1,2 affected)", "Intact (FDP branches off early)"],
    ["Sensory — lateral 3.5 fingers", "Lost", "Lost"],
    ["Thenar eminence sensation", "Lost", "Spared (palmar cutaneous branch)"],
    ["Pronation", "Weak", "Normal"],
    ["Wrist flexion (FCR)", "Weak", "Normal (branches off proximal to tunnel)"],
]
story += table(med_data, col_widths=[46*mm, 58*mm, 58*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 6 – ULNAR NERVE
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("6. Ulnar Nerve Injuries")

story += H2("A. At the Elbow — Cubital Tunnel Syndrome")
story += bullets([
    "<b>Most common cause of ulnar neuropathy</b>",
    "Nerve passes through cubital tunnel behind medial epicondyle (between olecranon and medial epicondyle)",
    "<b>Causes:</b> Medial epicondyle fracture, elbow valgus deformity (tardy ulnar palsy), "
    "repetitive elbow flexion, leaning on elbows",
])

story += P("<b>Muscles lost:</b>")
story += bullets([
    "FCU (ulnar wrist flexion)",
    "FDP to ring + little fingers (DIP flexion lost — digit 4 and 5)",
    "All interossei (finger abduction/adduction)",
    "Hypothenar muscles (ADM, FDM, ODM)",
    "Adductor pollicis + deep head FPB",
    "Lumbricals 3 & 4 (ring + little finger MCP flexion)",
])

story += P("<b>Signs:</b>")
story += bullets([
    "<b>Claw hand</b> of ring + little fingers (MCP hyperextension + IP flexion)",
    "<b>Froment's sign:</b> Ask patient to hold paper between thumb and index; adductor pollicis "
    "is weak, so patient compensates by flexing thumb IP (using FPL — median nerve). "
    "Positive = thumb IP flexes during key pinch.",
    "<b>Wartenberg's sign:</b> Little finger stays abducted during attempted adduction (EDQ unopposed "
    "by paralysed 3rd volar interosseous)",
    "Sensory loss: ulnar 1.5 fingers, medial palm, dorsum of ulnar hand",
    "Hypothenar + interosseous wasting (guttering between metacarpals)",
])

story += H2("B. At the Wrist — Guyon's Canal")
story += bullets([
    "<b>Classic scenario:</b> Cyclist (handlebar palsy), hook of hamate fracture, chronic hammering",
    "FCU and FDP to ring/little are <b>SPARED</b> (these branches off above the wrist)",
    "If only deep motor branch compressed: <b>motor deficit only, no sensory loss</b>",
    "Interossei + hypothenar + adductor pollicis weak",
    "Claw hand more pronounced than elbow-level injury (see Ulnar Paradox below)",
])

story += H2("The Ulnar Paradox — DIRECT FMGE MCQ")
story += P("<b>Question:</b> In which level of ulnar nerve injury is the claw hand deformity MORE pronounced?")
story += P("<b>Answer: Distal (wrist-level) injury produces a MORE pronounced claw than proximal (elbow-level) injury.</b>")
story += P("<b>Why?</b>")
story += bullets([
    "<b>High ulnar lesion (elbow):</b> FDP to ring + little is ALSO paralysed. "
    "Without FDP, the fingers cannot fully flex into the claw — IP joints cannot "
    "pull down forcefully. Deformity is LESS obvious.",
    "<b>Low ulnar lesion (wrist):</b> FDP to ring + little is INTACT. "
    "Long flexors pull IP joints into strong flexion while lumbricals are still out → "
    "MORE pronounced claw.",
])
story += Warn("The Ulnar Paradox: The more DISTAL the ulnar lesion, the MORE PRONOUNCED the "
              "claw hand. This is counter-intuitive and a favourite FMGE trick question.")

story += H2("Elbow vs. Wrist Ulnar Nerve — Key Differences")
ul_data = [
    ["Feature", "Elbow (Cubital Tunnel)", "Wrist (Guyon's Canal)"],
    ["FCU", "Weak", "Normal"],
    ["FDP ring/little (DIP flex)", "Weak", "Normal"],
    ["Interossei + hypothenar", "Weak", "Weak"],
    ["Adductor pollicis", "Weak", "Weak"],
    ["Froment's sign", "Positive", "Positive"],
    ["Sensory loss", "Ulnar 1.5 fingers + medial palm + dorsum", "Variable; none if deep branch only"],
    ["Claw hand severity", "LESS pronounced (paradox)", "MORE pronounced (paradox)"],
    ["Classic cause", "Medial epicondyle Fx / elbow lean", "Cyclist / hamate Fx"],
]
story += table(ul_data, col_widths=[50*mm, 57*mm, 55*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 7 – OTHER KEY NERVES
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("7. Other High-Yield Nerves")

story += H2("A. Axillary Nerve")
story += bullets([
    "<b>Origin:</b> Posterior cord (C5, C6)",
    "<b>Course:</b> Winds around <b>surgical neck of humerus</b> with posterior circumflex humeral artery",
    "<b>Classic injury:</b> Fracture of surgical neck of humerus OR anterior shoulder dislocation "
    "(most common joint dislocation in the body)",
    "<b>Muscles:</b> Deltoid + Teres minor",
    "<b>Signs:</b> Loss of shoulder abduction (cannot abduct >15–20°), loss of external rotation",
    "<b>Sensory:</b> 'Regimental badge area' — circular patch on lateral upper arm/shoulder",
])
story += Warn("C5 radiculopathy also weakens deltoid AND biceps. Axillary nerve injury spares "
              "biceps (musculocutaneous territory). Use sensory distribution + biceps strength to differentiate.")

story += H2("B. Long Thoracic Nerve (C5, C6, C7)")
story += bullets([
    "<b>Only muscle:</b> Serratus anterior",
    "<b>Function:</b> Holds scapula against chest wall + protracts scapula + rotates glenoid "
    "upward (allows arm elevation above 90°)",
    "<b>Signs:</b> Winged scapula (medial border protrudes when pushing against wall); "
    "arm cannot be raised past 90°",
    "<b>Causes:</b> Mastectomy / axillary lymph node dissection, carrying heavy loads "
    "('rucksack paralysis'), viral neuritis, stab wound to lateral chest",
])
story += Warn("Trapezius palsy (spinal accessory nerve CN XI) also causes winging — but winging "
              "is worst when the arm is RAISED. Serratus anterior winging is worst when PUSHING. "
              "Trapezius palsy also drops the shoulder.")

story += H2("C. Musculocutaneous Nerve")
story += bullets([
    "<b>Origin:</b> Lateral cord (C5, C6, C7)",
    "<b>Muscles:</b> Biceps brachii, brachialis, coracobrachialis",
    "<b>Injury:</b> Lateral cord lesion, shoulder dislocation, axilla stab wound",
    "<b>Signs:</b> Weak elbow flexion + weak forearm supination + absent biceps reflex",
    "<b>Sensory:</b> Lateral forearm (becomes lateral cutaneous nerve of forearm)",
    "<b>Distinguish from C5/C6 root:</b> Musculocutaneous lesion has lateral forearm sensory "
    "loss; root lesion has broader dermatomal involvement",
])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 8 – HAND POSTURES
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("8. Classic Hand Postures — Named Deformities")

posture_data = [
    ["Posture Name", "Nerve / Level", "When Seen", "Mechanism"],
    ["Waiter's Tip / Bellman's Tip", "Upper trunk C5-C6 (Erb's)", "At rest (passive)",
     "Arm: adducted, int. rotated; elbow extended; wrist flexed"],
    ["Claw Hand (ring + little)", "Ulnar nerve (any level)", "At rest or on finger extension",
     "MCP hyperextension + IP flexion; worse distally (ulnar paradox)"],
    ["Wrist Drop", "Radial nerve (spiral groove / axilla)", "At rest",
     "Wrist + finger extensors paralysed; gravity causes wrist to fall"],
    ["Hand of Benediction / Preacher's Hand", "Proximal median nerve (above elbow)",
     "When ATTEMPTING to make a fist",
     "Index + middle stay extended (FDP-1,2 + FPL lost); ring + little flex normally"],
    ["Pope's Blessing / Oath Hand", "Proximal median nerve", "At rest",
     "Index + middle extended at rest (same nerve, different context of description)"],
    ["Ape Hand / Simian Hand", "Chronic median + ulnar combined", "At rest (late stage)",
     "Thenar + hypothenar wasting; thumb falls into plane of palm; no opposition"],
    ["OK Sign inability", "AIN (median branch)", "On attempted OK sign",
     "FDP-1 + FPL weak; cannot form circle; makes a 'pinch' instead"],
]
story += table(posture_data, col_widths=[44*mm, 42*mm, 30*mm, 46*mm])

story += Warn("Claw hand vs. Hand of Benediction: Claw = at REST or on extension attempt "
              "(ulnar). Benediction = when MAKING A FIST (proximal median). Examinees frequently "
              "swap these two.")

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 9 – PREGANGLIONIC vs POSTGANGLIONIC
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("9. Preganglionic vs. Postganglionic Brachial Plexus Injury")

story += P("This distinction determines surgical outcome and is directly tested in FMGE.")

pg_data = [
    ["Feature", "Preganglionic (Root Avulsion)", "Postganglionic"],
    ["Site of injury", "Nerve root avulsed from spinal cord\n(proximal to DRG)", "Nerve torn distal to dorsal root ganglion"],
    ["Histamine test", "Axon flare PRESENT\n(DRG + axon to skin still intact)", "Axon flare ABSENT"],
    ["Horner's syndrome", "Present (if C8–T1 avulsion)", "Usually absent"],
    ["Paraspinal muscles (EMG)", "Denervated", "Normal"],
    ["SSEP / sensory NCS", "Preserved (DRG intact)", "Absent"],
    ["Cervical MRI/myelogram", "Pseudomeningocele", "Normal"],
    ["Phrenic nerve palsy", "Often co-exists (elevated hemidiaphragm)", "Usually absent"],
    ["Surgical repair", "NOT possible (no proximal stump); nerve transfer only", "Possible — nerve grafting / repair"],
    ["Prognosis", "Worse", "Better"],
]
story += table(pg_data, col_widths=[46*mm, 65*mm, 51*mm])

story += Tip("Preganglionic = root is torn from cord = no surgical repair possible. "
             "Postganglionic = distal to DRG = repair/grafting feasible.")

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 10 – ANATOMICAL SNUFFBOX
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("10. Anatomical Snuffbox & Scaphoid Fracture")

story += H2("Anatomy of the Anatomical Snuffbox")
story += P("Triangular depression on the posterolateral side of the wrist and base of 1st "
           "metacarpal, visible when the thumb is extended.")

snuff_data = [
    ["Border / Structure", "What forms it"],
    ["Lateral (radial) border", "Tendons of Abductor Pollicis Longus (APL) + Extensor Pollicis Brevis (EPB)"],
    ["Medial (ulnar) border", "Tendon of Extensor Pollicis Longus (EPL)"],
    ["Floor", "Scaphoid + Trapezium + distal ECRL + ECRB tendons"],
    ["Roof", "Skin"],
    ["Contents — Radial artery", "Passes obliquely through the floor, deep to tendons, adjacent to scaphoid"],
    ["Contents — Superficial radial nerve", "Passes subcutaneously over the roof"],
    ["Contents — Cephalic vein", "Origin from dorsal venous arch crosses over the roof"],
]
story += table(snuff_data, col_widths=[55*mm, 107*mm], hdr_rows=1)

story += H2("Clinical Significance — Scaphoid Fracture")
story += bullets([
    "<b>Mechanism:</b> Fall on outstretched hand (FOOSH) — forced dorsiflexion",
    "<b>Most common carpal bone fracture</b>",
    "Up to <b>30–40% of scaphoid fractures are X-ray negative</b> on initial assessment",
    "Anatomical snuffbox tenderness: sensitivity <b>87–100%</b>, specificity 3–98% "
    "(very sensitive, not specific — use to rule OUT)",
    "Combination (snuffbox tenderness + scaphoid tubercle tenderness + compression test "
    "within 24 h): sensitivity <b>100%</b>, specificity <b>74%</b>",
])

story += Warn("A normal X-ray DOES NOT rule out a scaphoid fracture. Treat snuffbox "
              "tenderness after FOOSH as scaphoid fracture until proven otherwise. "
              "Immobilise in thumb spica splint; repeat X-ray at 10–14 days or proceed to CT/MRI.")

story += H2("Why Scaphoid Fractures Are Dangerous")
story += bullets([
    "Blood supply enters the scaphoid <b>distally</b> (distal pole) via the radial artery",
    "Proximal pole depends on <b>retrograde flow</b>",
    "Waist fractures disrupt this supply → <b>avascular necrosis (AVN) of proximal pole</b> if missed",
    "Proximal pole fractures have highest risk of AVN (~40%); waist fractures ~10–15%",
])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 11 – FRACTURE-TO-NERVE INJURY MAPPING
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("11. Fracture-to-Nerve Injury Mapping (FMGE Favourite)")

fx_data = [
    ["Fracture / Dislocation", "Nerve at Risk", "Key Sign"],
    ["Surgical neck of humerus", "Axillary nerve", "Deltoid weakness + regimental badge sensory loss"],
    ["Mid-shaft (spiral groove) humerus", "Radial nerve", "Wrist drop (22% incidence)"],
    ["Supracondylar humerus (child)", "Median nerve / AIN", "Hand of benediction; can't make OK sign"],
    ["Lateral epicondyle humerus", "Radial nerve (PIN)", "Finger drop, no sensory loss"],
    ["Medial epicondyle / posterior elbow dislocation", "Ulnar nerve", "Claw (ring+little), Froment's sign"],
    ["Monteggia fracture (proximal ulna + radial head dislocation)", "PIN (radial nerve deep branch)", "Finger drop, no sensory loss"],
    ["Colles' fracture (distal radius)", "Median nerve / CTS", "Thenar wasting, carpal tunnel symptoms"],
    ["Hook of hamate fracture", "Ulnar nerve (Guyon's canal)", "Intrinsic weakness, variable sensory loss"],
    ["Anterior shoulder dislocation", "Axillary nerve", "Deltoid weakness + regimental badge area"],
    ["Glenohumeral dislocation (broad)", "Axillary nerve + brachial plexus (upper trunk)", "Combined — Erb's + axillary features"],
    ["1st rib / cervical rib (thoracic outlet)", "Lower trunk C8-T1", "Klumpke's signs ± Horner's"],
]
story += table(fx_data, col_widths=[58*mm, 48*mm, 56*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 12 – MASTER QUICK-REFERENCE TABLE
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("12. Master Quick-Reference — All Upper Limb Nerves")

master_data = [
    ["Nerve", "Level of Injury", "Mechanism", "Motor Loss", "Sensory Loss", "Named Sign"],
    ["Upper trunk C5–C6\n(Erb's palsy)", "Upper trunk", "Birth trauma / shoulder depression",
     "Deltoid, biceps, supraspinatus, wrist ext", "Lateral arm + forearm", "Waiter's tip"],
    ["Lower trunk C8–T1\n(Klumpke's)", "Lower trunk", "Hyperabduction traction",
     "Intrinsics, wrist/finger flexors", "Medial arm, ulnar hand", "Claw hand + Horner's"],
    ["Radial nerve", "Axilla (crutch palsy)", "Axillary crutch",
     "Wrist + finger ext + TRICEPS", "Dorsolateral hand + post forearm", "Wrist drop + triceps absent"],
    ["Radial nerve", "Spiral groove", "Humeral shaft Fx / sleep compression",
     "Wrist + finger ext (triceps SPARED)", "Dorsal lateral hand", "Wrist drop (Saturday night)"],
    ["PIN (radial)", "Radial tunnel", "Radial head Fx / Monteggia",
     "Finger ext; ECRL spared → radial deviation", "NONE", "Finger drop without sensory loss"],
    ["Median nerve", "Above elbow", "Supracondylar Fx (child)",
     "FDP-1,2; FPL; LOAF; pronation", "Lateral 3.5 fingers + lat palm", "Hand of benediction"],
    ["AIN (median)", "Forearm", "Entrapment / forearm trauma",
     "FDP-1,2; FPL only", "NONE", "Can't make OK sign"],
    ["Median nerve", "Wrist (CTS)", "Repetitive use / pregnancy etc.",
     "LOAF only", "Lateral 3.5 fingers (NOT thenar eminence)", "Tinel's + Phalen's; thenar wasting"],
    ["Ulnar nerve", "Elbow (cubital tunnel)", "Medial epicondyle Fx / leaning",
     "FCU, FDP-4,5, intrinsics", "Ulnar 1.5 + med palm + dorsum", "Claw LESS pronounced; Froment's; Wartenberg's"],
    ["Ulnar nerve", "Wrist (Guyon's)", "Cyclist / hamate Fx",
     "Intrinsics (FCU, FDP-4,5 spared)", "None if deep branch only", "Claw MORE pronounced (ulnar paradox)"],
    ["Axillary nerve", "Surgical neck humerus", "Surgical neck Fx / ant dislocation",
     "Deltoid, teres minor", "Regimental badge area", "Shoulder abduction lost"],
    ["Long thoracic n.", "Variable", "Mastectomy / rucksack / viral",
     "Serratus anterior", "None", "Winged scapula; arm can't go >90°"],
    ["Musculocutaneous n.", "Lateral cord / axilla", "Shoulder dislocation / stab",
     "Biceps, brachialis", "Lateral forearm", "Weak elbow flexion + supination"],
]
story += table(master_data, col_widths=[30*mm, 22*mm, 30*mm, 40*mm, 28*mm, 32*mm])

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 13 – FMGE ONE-LINERS
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("13. FMGE High-Yield One-Liners")

one_liners = [
    "Radial nerve = most commonly injured nerve in the upper limb overall (spiral groove vulnerability)",
    "Median nerve = most commonly compressed nerve (CTS is the most common entrapment neuropathy)",
    "Ulnar nerve = most commonly injured nerve AT THE ELBOW (cubital tunnel)",
    "Supracondylar Fx humerus in children → median nerve / AIN injury (anterior fragment)",
    "Posterior elbow dislocation → ulnar nerve injury",
    "Anterior shoulder dislocation → axillary nerve injury (most common dislocation in the body)",
    "Surgical neck humerus Fx → axillary nerve injury",
    "Mid-shaft humeral Fx → radial nerve (22% incidence; most are neuropraxias)",
    "Monteggia Fx → PIN injury (finger drop, NO sensory loss)",
    "Colles' Fx → median nerve / acute CTS",
    "Hook of hamate Fx → ulnar nerve at Guyon's canal",
    "Winged scapula on wall push → long thoracic nerve (serratus anterior)",
    "Winged scapula on arm elevation → spinal accessory nerve (trapezius)",
    "Horner's + claw hand → preganglionic T1 root avulsion (Klumpke's level)",
    "Horner's + apical lung mass → Pancoast tumour (lower plexus C8–T1 + T1 sympathetics)",
    "Pseudomeningocele on MRI + Horner's → preganglionic root avulsion (no surgical repair possible)",
    "Histamine test flare PRESENT despite anaesthetic skin → preganglionic injury (DRG intact)",
    "Nerve regeneration rate = ~1 mm/day (3 cm/month); recovery takes months to over a year",
    "Biceps function at 3 months = prognostic indicator in neonatal Erb's palsy",
    "AIN test = OK sign; can't make circle = AIN palsy (no sensory loss)",
    "Froment's sign = adductor pollicis palsy (ulnar); compensates with FPL (median)",
    "Wartenberg's sign = 3rd volar interosseous palsy (ulnar); little finger stays abducted",
    "Ulnar paradox: DISTAL lesion → MORE pronounced claw (FDP intact → stronger IP flexion)",
    "CTS spares thenar eminence sensation (palmar cutaneous branch exits proximal to tunnel)",
    "Scaphoid fracture: X-ray negative in 30–40% initially → treat snuffbox tenderness as Fx",
    "Scaphoid blood supply enters DISTALLY → proximal pole at risk for AVN if waist Fx missed",
    "APL + EPB = lateral border of anatomical snuffbox; EPL = medial border",
    "Radial artery + superficial radial nerve + cephalic vein cross the anatomical snuffbox",
]

for i, line in enumerate(one_liners, 1):
    story.append(Paragraph(f"<b>{i}.</b> {line}", S["bullet"]))
story += sp(2)

# ═══════════════════════════════════════════════════════════════════════════════
# SECTION 14 – SCENARIO PATTERN RECOGNITION
# ═══════════════════════════════════════════════════════════════════════════════
story += H1("14. FMGE Scenario Pattern Recognition")

scenario_data = [
    ["Clinical Scenario", "Likely Injury", "Nerve / Level"],
    ["Newborn, shoulder dystocia, arm hangs internally rotated",
     "Erb's palsy", "Upper trunk C5–C6"],
    ["Adult, motorcycle accident, arm hangs + wrist slightly flexed",
     "Erb's palsy", "Upper trunk C5–C6"],
    ["Fall from tree grabbing branch → claw hand",
     "Klumpke's palsy", "Lower trunk C8–T1"],
    ["Klumpke's features + drooping eyelid + small pupil",
     "Klumpke's + Horner's", "Preganglionic T1 root avulsion"],
    ["Apical lung mass + claw hand + Horner's",
     "Pancoast syndrome", "Lower trunk C8–T1 + T1 sympathetics"],
    ["Drunk patient, woke up with wrist drop, no fracture",
     "Saturday night palsy", "Radial nerve, spiral groove"],
    ["Mid-shaft humerus fracture + wrist drop",
     "Radial nerve injury", "Spiral groove (22% of mid-shaft Fx)"],
    ["Radial head fracture + finger drop, NO sensory loss",
     "PIN injury", "Radial nerve deep branch, radial tunnel"],
    ["Child, supracondylar Fx + index/middle can't flex into fist",
     "Median / AIN injury", "High median or AIN"],
    ["Can't make 'OK' sign, no sensory loss",
     "AIN palsy", "Anterior interosseous nerve (median branch)"],
    ["Middle-aged woman, bilateral hand tingling at night, shakes hand for relief",
     "Carpal tunnel syndrome", "Median nerve at wrist"],
    ["Medial epicondyle fracture → ring + little claw + Froment's sign",
     "Ulnar nerve injury", "Cubital tunnel (elbow)"],
    ["Cyclist with weak intrinsics, NO sensory loss",
     "Deep branch ulnar compression", "Guyon's canal (wrist)"],
    ["FOOSH + snuffbox tenderness, normal X-ray",
     "Occult scaphoid fracture", "Treat as fracture; immobilise"],
    ["Surgical neck humerus Fx + deltoid weakness + regimental badge numbness",
     "Axillary nerve injury", "Surgical neck level"],
    ["Mastectomy + arm can't raise past 90° + winged scapula",
     "Long thoracic nerve injury", "Serratus anterior palsy"],
    ["Factory worker, Monteggia fracture + finger drop (no sensory loss)",
     "PIN injury", "Radial nerve deep branch"],
    ["MRI shows pseudomeningocele at C8–T1 + Horner's + no surgical target",
     "Preganglionic root avulsion", "C8–T1 avulsion; nerve transfer only option"],
]
story += table(scenario_data, col_widths=[68*mm, 48*mm, 46*mm])

# ── Footer note ───────────────────────────────────────────────────────────────
story += sp(4)
story += hr()
story.append(Paragraph(
    "<b>Sources:</b> Gray's Anatomy for Students | Miller's Review of Orthopaedics 9e | "
    "Neuroanatomy through Clinical Cases 3e | Localization in Clinical Neurology 8e | "
    "Schwartz's Principles of Surgery 11e | Bailey &amp; Love 28e | "
    "THIEME Atlas of General Anatomy &amp; Musculoskeletal System | "
    "Rockwood &amp; Green's Fractures in Adults 10e (2025) | Rosen's Emergency Medicine",
    S["footer"]
))

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF written to: {OUTPUT}")
Running Command

cd /home/daytona/workspace/brachial-plexus-pdf && python3 generate_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/brachial-plexus-pdf/

Your PDF is ready. Here's your download link:

Brachial Plexus Upper Limb Nerve Injuries FMGE

PDF Document · PDF

What's inside (14 sections, ~36 KB):
  1. Brachial Plexus Framework - Roots→Trunks→Divisions→Cords→Branches table + pre-divisional branches
  2. Erb's Palsy - Mechanism, muscles lost, waiter's tip posture, prognosis
  3. Klumpke's Palsy - Mechanism, signs, Horner's association, Erb's vs Klumpke's comparison table
  4. Radial Nerve - Axilla / spiral groove / PIN - with spiral groove vs PIN comparison table
  5. Median Nerve - High level / AIN / CTS - level-by-level with comparison table
  6. Ulnar Nerve - Elbow / wrist - with the Ulnar Paradox fully explained + comparison table
  7. Other Key Nerves - Axillary, Long thoracic, Musculocutaneous
  8. All 7 Classic Hand Postures - Named deformities table with mechanism
  9. Preganglionic vs Postganglionic - Full comparison table (surgical implications)
  10. Anatomical Snuffbox - Borders, contents, scaphoid fracture management
  11. Fracture-to-Nerve Injury Mapping - 12-row table (direct FMGE favourite)
  12. Master Quick-Reference Table - All nerves in one table
  13. 28 FMGE One-Liners - Numbered list, exam-ready
  14. Scenario Pattern Recognition - 18 clinical scenarios mapped to diagnosis

Is this both files combined together 1st and second?

Yes, it combines both. The PDF contains everything from both responses in one document:
  • From response 1 (NBE core): Erb's palsy, Klumpke's, radial nerve/Saturday night palsy, anatomical snuffbox - all fully covered in sections 2, 3, 4, and 10.
  • From response 2 (FMGE gaps): Median nerve levels (high/AIN/CTS), ulnar nerve levels (elbow/wrist), ulnar paradox, PIN syndrome, axillary nerve, long thoracic nerve, musculocutaneous nerve, all hand postures, preganglionic vs postganglionic, fracture-nerve mapping, one-liners, and scenario recognition - all in sections 5–14.
Nothing was left out. The 14-section structure was built to flow from anatomy → individual injuries → clinical scenarios → exam traps, pulling from both responses into a single study document.
This is a shared conversation. Sign in to Orris to start your own chat.