Write a 30 marks answer for Postgraduate Exam on the topic of Nerve locator and peripheral nerve stimutator with line diagrams
peripheral nerve stimulator nerve locator regional anesthesia mechanism components postgraduate exam
https://anaesthetics.ukzn.ac.za/wp-content/uploads/2023/03/2…
q1 × q2
F = ke × -------
r²
Where:
F = force between charges
ke = electrostatic constant
r = distance between electrode/needle tip and nerve
If MSC is halved, the needle-nerve distance is reduced four-fold
┌─────────────────────────────────────────────┐
│ PERIPHERAL NERVE STIMULATOR │
│ DEVICE │
│ │
│ [DISPLAY SCREEN] │
│ Current: 0.5 mA Freq: 2 Hz │
│ Pulse width: 0.1 ms Mode: TOF │
│ │
│ [CONTROLS] │
│ ┌────┐ ┌────┐ ┌───────┐ ┌────────────┐ │
│ │ ON │ │ Hz │ │ mA ↑↓ │ │ Pulse Width│ │
│ └────┘ └────┘ └───────┘ └────────────┘ │
│ │
│ OUTPUT TERMINALS: │
│ [RED (+) Anode] [BLACK (-) Cathode] │
│ (Surface electrode) (Needle electrode) │
│ │
│ [BATTERY COMPARTMENT] - Rechargeable │
└────────────────┬────────────────────────────┘
│ Connecting wires
┌────────┴────────┐
│ │
Red lead (+) Black lead (-)
Surface patch Insulated needle
(Anode/Reference) (Cathode/Active)
| Component | Specification | Purpose |
|---|---|---|
| Power source | Rechargeable battery (9V) | Constant current delivery; should generate 60-80 mA max |
| Current generator | Constant current (not constant voltage) | Current is the determinant of nerve stimulation, not voltage |
| Display | Digital screen | Shows current (mA), pulse width (ms), frequency (Hz) |
| Current control | Range 0-5 mA | Allows titration during needle advancement |
| Pulse width selector | 0.1 ms (default) | Shorter pulse = motor selective; longer pulse = sensory |
| Frequency selector | 1-2 Hz | 2 Hz preferred for nerve localization |
| Polarity indicator | Red (+) / Black (-) | Prevents incorrect connection |
| Battery check | Built-in alarm | Alerts user to inadequate power |
| Impedance monitor | Warns if current not delivered | Detects poor contact/high skin resistance |
DIAGRAM: Insulated Block Needle (Cross-section and Side view)
Side View:
Teflon/polyurethane insulation
|||||||||||||||||||||||||||||||
Hub ─── [====================================]──── Bare metal bevel tip
↑ ||||||||||||||||||||||||||||||||||||||| ↑
Luer Electrical connection point Uninsulated tip
lock (connects to cathode/black lead) (active electrode point)
Cross-section through shaft:
┌──────────────────────┐
│ Insulating coating │
│ ┌────────────┐ │
│ │ Metal core │ │
│ └────────────┘ │
│ (carries current) │
└──────────────────────┘
Needle tip (magnified):
↗ Current flows only from
the uninsulated bevel tip
─────────────────────────┐
Insulated shaft │ ← Bare bevel
─────────────────────────┘ (5° angle, 1-3mm)
DIAGRAM: Circuit Setup for Peripheral Nerve Block
┌─────────────────────────────────────────┐
│ PERIPHERAL NERVE STIMULATOR │
│ [+] Red ────────── [-] Black │
└──────┬──────────────────────┬───────────┘
│ │
Red (+) lead Black (-) lead
│ │
▼ ▼
Surface ECG patch Insulated block needle
(Anode - reference) (Cathode - active)
On skin 6-10 cm Needle advancing
from block site toward target nerve
PATIENT BODY
┌──────────────────────────────────────┐
│ Skin ─────────────────────────── │
│ Subcutaneous tissue │
│ Fascia │
│ │
│ →→→ Needle advancing →→→ │
│ ● │
│ Target Nerve │
│ (Motor response = twitch) │
└──────────────────────────────────────┘
Current flow path:
Stimulator (-) → Needle tip → Tissue → Nerve →
Tissue → Surface electrode → Stimulator (+)
DIAGRAM: Needle-Nerve Distance vs. Required Stimulating Current
Current (mA)
5.0 │▓
│▓
3.0 │ ▓
│ ▓
2.0 │ ▓
│ ▓▓
1.0 │ ▓▓▓
│ ▓▓▓▓
0.5 │ ─ ─ ─ ─ ─ ─ ─ ▓▓▓▓ ← "Ideal zone"
│ ▓▓▓
0.2 │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ▓▓ ← Danger zone (intraneural?)
└───────────────────────────────────────────
Far Distance Near At nerve
(needle-nerve)
| MSC (Threshold Current) | Interpretation | Action |
|---|---|---|
| > 1.0 mA | Needle far from nerve | Advance needle |
| 0.5 - 1.0 mA | Approaching nerve | Reduce current, fine-tune |
| 0.2 - 0.5 mA | Needle adjacent to nerve | Optimal - inject local anesthetic |
| < 0.2 mA | Possible intraneural placement | DO NOT INJECT - withdraw needle |
DIAGRAM: Strength-Duration Curve
Current
(mA)
│
│ Rheobase × 2 ──────────────────────────────────
│ ↑
4 ─│ │ Chronaxie
│ │
│ ╲ │
2 ─│ ╲ │
│ ╲──────────────────────────── Rheobase
1 ─│
│
└──────────────────────────────────────────────────
0.05 0.1 0.2 0.5 1.0 2.0 ms (pulse width)
Chronaxie = pulse width at 2 × rheobase current
Motor fibers (Aα): chronaxie 0.05 - 0.1 ms → Stimulated at SHORT pulse widths
Sensory fibers (Aδ): chronaxie 0.15 - 0.2 ms → Need LONGER pulse widths
┌────────────────────────────────────────────────────┐
│ NERVE STIMULATOR │
│ [+] Red lead ──────────── [-] Black lead │
└──────────┬────────────────────────────┬────────────┘
│ │
▼ ▼
SURFACE PATCH (Anode) INSULATED NEEDLE (Cathode)
On ipsilateral limb ↕ advancing
↕
┌──────────┴──────────┐
│ TISSUE PLANES: │
│ Skin │
│ SC fat │
│ Fascia │
│ ●●● TARGET NERVE │
│ (twitch on approach)│
└─────────────────────-┘
CURRENT TITRATION:
Start 1.0-1.5 mA → Reduce → Twitch at 0.3-0.5 mA → INJECT
IF twitch persists at < 0.2 mA → WITHDRAW (intraneural risk)
| Nerve | Muscle twitch observed |
|---|---|
| Femoral nerve | Quadriceps (patella twitch - "dancing patella") |
| Sciatic nerve | Plantar/dorsiflexion of foot |
| Brachial plexus (median) | Wrist flexion, finger flexion |
| Brachial plexus (radial) | Wrist/finger extension |
| Brachial plexus (ulnar) | Small finger abduction |
| Obturator nerve | Adductor thigh twitch |
| Musculocutaneous | Elbow flexion (biceps) |
Add physiology and technique of neuromuscular monitoring with peripheral nerve stimulator in above answer
q1 × q2
F = ke × -------
r²
Where:
F = force between charges
ke = electrostatic constant
r = distance between needle tip and nerve
KEY: MSC ∝ r²
If MSC is halved → needle-nerve distance reduced FOUR-FOLD
┌─────────────────────────────────────────────────┐
│ PERIPHERAL NERVE STIMULATOR │
│ DEVICE │
│ ┌─────────────────────────────────────┐ │
│ │ DISPLAY: Current 0.5mA Freq 2Hz │ │
│ │ Pulse width: 0.1ms Mode: TOF │ │
│ └─────────────────────────────────────┘ │
│ │
│ CONTROLS: │
│ [ON/OFF] [Hz ↑↓] [mA ↑↓] [Pulse Width] │
│ │
│ OUTPUT TERMINALS: │
│ [RED (+) Anode] [BLACK (-) Cathode] │
│ (Surface/Reference) (Needle/Active) │
│ │
│ [BATTERY CHECK] [IMPEDANCE DISPLAY] │
└──────────┬──────────────────────┬───────────────┘
│ │
Red (+) lead Black (-) lead
Surface patch Insulated needle
| Component | Specification | Purpose |
|---|---|---|
| Power source | Rechargeable battery (9V) | Should generate 60-80 mA max; not >80 mA |
| Current generator | Constant current (NOT constant voltage) | Current determines nerve depolarization; compensates for variable skin resistance |
| Display | Digital screen | Shows current (mA), pulse width (ms), frequency (Hz) |
| Current control | Range 0-5 mA | Titration during needle advancement |
| Pulse width selector | 0.1 ms (default) | Short pulse = motor selective |
| Frequency selector | 1-2 Hz | 2 Hz preferred for nerve localization |
| Polarity indicator | Red (+) / Black (-) | Prevents incorrect electrode connection |
| Battery check | Built-in alarm | Alerts to inadequate power |
| Impedance display | Warns if skin resistance > 5 kΩ | Ensures current delivered equals current selected |
Side View:
Teflon / polyurethane insulation
|||||||||||||||||||||||||||||||||
Hub ─── [=================================]─── Bare bevel tip (1-3mm)
↑ ||||||||||||||||||||||||||||||||||||| ↑
Luer Electrical connection Uninsulated active tip
lock (cathode/black lead attaches here) (concentrates current here)
Cross-section through shaft:
┌───────────────────────┐
│ Insulating coating │
│ ┌─────────────┐ │
│ │ Metal core │ │
│ └─────────────┘ │
│ (carries current) │
└───────────────────────┘
Needle tip (magnified):
─────────────────────────┐
Insulated shaft │ ← Bare short bevel (45°)
─────────────────────────┘ Current radiates only from tip
CIRCUIT DIAGRAM:
┌────────────────────────────────────────┐
│ NERVE STIMULATOR │
│ [+] Red ────── [-] Black │
└────────┬────────────────┬─────────────┘
│ │
Red (+) Black (-)
lead lead
│ │
▼ ▼
SURFACE ECG PATCH INSULATED NEEDLE
(Anode - reference) (Cathode - active)
6-10 cm from site Advancing toward nerve
PATIENT CROSS-SECTION:
┌─────────────────────────────────────┐
│ Skin │
│ Subcutaneous fat │
│ Fascia │
│ │
│ →→→ Needle advancing →→→ │
│ ● │
│ Target nerve│
│ (TWITCH here) │
└─────────────────────────────────────┘
Current path:
Stimulator (-) → Needle tip → Tissue → Nerve
→ Tissue → Surface electrode → Stimulator (+)
| Step | Action | Setting |
|---|---|---|
| 1 | Initial setup | Current 1.0-1.5 mA, pulse 0.1 ms, freq 2 Hz |
| 2 | Connect leads | Red to skin patch, black to needle hub |
| 3 | Advance needle | Observe twitch in target muscle group |
| 4 | Fine adjustment | Reduce current - twitch must persist at 0.3-0.5 mA |
| 5 | Injection | Aspirate; inject; loss of twitch confirms perineurial placement |
Current (mA)
1.5 ─ Start here (needle far)
1.0 ─ Approaching nerve
0.5 ─ ─ ─ ─ ─ ─ ─ ─ ─ ← IDEAL ZONE (inject here)
0.3 ─ ─ ─ ─ ─ ─ ─ ─ ─ ← Lower acceptable limit
0.2 ─ ─ ─ ─ ─ ─ ─ ─ ─ ← DANGER: possible intraneural
If twitch at <0.2 mA → WITHDRAW, do NOT inject
DIAGRAM: Normal Neuromuscular Junction
Motor neuron axon
│
│ Action potential arrives
↓
┌───────────────────────────────────────────────────┐
│ PRESYNAPTIC TERMINAL (Motor nerve) │
│ │
│ Ca²⁺ enters → Vesicle fusion → ACh released │
│ [ACh] [ACh] [ACh] [ACh] → → → into synaptic │
│ cleft │
│ Also: α3β2 nAChR (presynaptic) - mobilization │
└────────────────────┬──────────────────────────────┘
│ Synaptic cleft
│ (ACh + AChE present)
┌────────────────────┴──────────────────────────────┐
│ POSTSYNAPTIC MEMBRANE (Motor endplate) │
│ │
│ Nicotinic ACh Receptors (nAChR) - 2 α subunits │
│ ACh binds BOTH α subunits → ion channel opens │
│ Na⁺ influx → endplate potential → MUSCLE TWITCH │
│ │
│ NMBAs (non-depolarizing) bind α subunits │
│ WITHOUT activating → BLOCK transmission │
└───────────────────────────────────────────────────┘
↓
MUSCLE FIBER
(Contraction if sufficient endplate potential)
SAFETY MARGIN DIAGRAM:
Receptor │ Clinical Effect │ Monitor Response
Occupancy │ │
─────────────┼─────────────────────────────┼──────────────────────
0% │ Normal transmission │ TOF ratio = 1.0
< 70% │ No detectable block │ TOF ratio ≥ 0.9
70-75% │ Just detectable block │ TOF ratio 0.4-0.9
75-90% │ Moderate block │ TOFC 1-3
90-95% │ Deep block │ TOFC 0, PTC ≥ 1
> 95% │ Complete block │ TOFC 0, PTC = 0
Normal: T1 T2 T3 T4 (equal height, no fade)
██ ██ ██ ██ TOF ratio = T4/T1 = 1.0
Partial ND: T1 T2 T3 T4 (progressive fade)
██ █▓ ▓▓ ▓░ TOF ratio = T4/T1 < 1.0
↑ (FADE = hallmark of ND block)
Tallest
Moderate ND: T1 T2 T3 ── (T4 absent)
██ █▓ ▓░ TOFC = 3
Deep ND: ── ── ── ── (all absent, PTC present)
TOFC = 0, PTC ≥ 1
TOF in Depolarizing Block:
Phase I: T1 T2 T3 T4 (equal reduction, NO fade)
▓▓ ▓▓ ▓▓ ▓▓ TOF ratio ≈ 1.0 (but all diminished)
NO FADE
Phase II: T1 T2 T3 T4 (fade appears - like ND block)
██ █▓ ▓░ ░░ TOF ratio < 1.0
FADE present → resembles ND block
| Feature | Phase I Block | Phase II Block |
|---|---|---|
| TOF fade | Absent | Present |
| Post-tetanic facilitation | Absent | Present |
| Tetanic stimulation | Sustained | Fade |
| Reversal by neostigmine | Potentiates (worsens) | May reverse |
| Clinical appearance | Flaccid after fasciculations | Prolonged flaccid |
SINGLE TWITCH STIMULATION:
Stimulus: | | | | |
0.1-1.0 Hz (1 stimulus every 1-10 seconds)
Response (normal):
▌ ▌ ▌ ▌ (equal twitches)
Response (ND block):
░ ░ ░ ░ (equal but diminished - all same height)
TRAIN-OF-FOUR STIMULATION:
Stimulus pattern:
|||| |||| ||||
2 Hz 2 Hz 2 Hz
(4 at 0.5s) gap(10-15s) repeat
Each "||||" = 4 stimuli at 2 Hz (0.5 s interval)
Response - NO block:
████ ████ ████ ████ TOF ratio (T4/T1) = 1.0
Response - Partial ND block:
████ ███░ ██░░ █░░░ Fade present (T4/T1 < 1.0)
T1 T2 T3 T4
Response - Deep ND block:
████ ░░░░ ░░░░ ░░░░ Only T1 present (TOFC = 1)
Response - Complete ND block:
░░░░ ░░░░ ░░░░ ░░░░ No response (TOFC = 0)
TETANIC STIMULATION (50 Hz for 5 seconds):
Stimulus: ||||||||||||||||||||||||||||||||||| (50/second x 5s)
Normal response: Sustained contraction (no fade)
████████████████████████
ND block: Fade during tetanus
████▓▓▓░░░░░░░░░░░░░░░░
↑ fade
After tetanus in ND block: Post-Tetanic Facilitation
ACh stores temporarily replenished
Next twitch is enhanced
PTC PROTOCOL:
Step 1: Tetanic burst (50 Hz, 5 seconds)
|||||||||||||||||||||||||||||||||||
Step 2: Pause (3 seconds) - allows recovery from post-tetanic exhaustion
Step 3: Single twitches at 1 Hz
| | | | | | | | | | |
Count how many post-tetanic single twitches appear:
PTC = 0: Complete block (TOFC 0, no recovery yet)
░ ░ ░ ░ ░ ░ ░
PTC = 1-5: Deep block (TOFC still 0, but recovery beginning)
▌ ░ ░ ░ ░ ░ ░ ← PTC = 1
PTC = 6-10: Deep-to-moderate transition
▌ ▌ ▌ ░ ░ ░ ░ ← PTC = 3
PTC ≥ 10: TOF responses will reappear soon
DBS PATTERN:
DBS3,3 (most common):
||| |||
↑ ↑
3 at 50Hz 3 at 50Hz
750 ms gap between bursts
DBS3,2:
||| ||
3 stimuli 2 stimuli
Response - Normal:
███ ███ (equal response - no fade)
Response - Residual ND block:
███ █▓░ (second burst weaker = FADE detectable)
COMPARISON OF STIMULATION PATTERNS - SUMMARY DIAGRAM:
PATTERN │ BLOCK DETECTED │ CLINICAL USE
────────────┼─────────────────────┼──────────────────────────
Single twitch│ Moderate to deep │ Onset timing, calibration
TOF │ Moderate, mild │ Intraoperative monitoring, recovery assessment
Tetanus │ Qualitative │ Confirms non-depolarizing block (fade)
PTC │ Complete/deep │ When TOFC = 0; guides timing of reversal
DBS │ Residual mild block │ Tactile detection of residual paralysis
DIAGRAM: Preferred Sites for Neuromuscular Monitoring
A. ULNAR NERVE (MOST PREFERRED):
Wrist cross-section:
┌─────────────────────────────────┐
│ Ulnar border of wrist │
│ ○ Black (distal, -) electrode │
│ ○ Red (proximal, +) electrode │
│ "Red toward the head" │
│ Distance between: 3-5 cm │
└─────────────────────────────────┘
Monitor: Adductor pollicis (thumb adduction)
First dorsal interosseous muscle
B. FACIAL NERVE (AVOID FOR REVERSAL DECISIONS):
Stimulate: Preauricular area / near tragus
Monitor: Corrugator supercilii / Orbicularis oculi
NOTE: Most RESISTANT to block → falsely reassuring!
Do NOT use for reversal decisions.
Switch to adductor pollicis BEFORE reversal.
C. POSTERIOR TIBIAL NERVE:
Stimulate: Behind medial malleolus
Monitor: Flexor hallucis brevis (plantar flexion)
Note: Resistant site - use with caution
ELECTRODE PLACEMENT on ULNAR NERVE:
(Palmar surface of wrist)
─────────────────────
│ ○ Black (-) distal │ ← 1-2 cm proximal to wrist crease
│ ○ Red (+) proximal │ ← 3-5 cm above black electrode
─────────────────────
Align over palpable ulnar pulse
Most RESISTANT Most SENSITIVE
(last to block, first to recover) (first to block)
│ │
▼ ▼
Diaphragm > Laryngeal > Orbicularis > Adductor > Abductor digiti
muscles muscles oculi pollicis minimi
↑
MONITORING SITE
(represents most
peripheral muscles)
| Depth | TOFC | PTC | TOF Ratio | Receptor Occupancy | Clinical State |
|---|---|---|---|---|---|
| Complete | 0 | 0 | - | > 95% | No response to any stimulation |
| Deep | 0 | ≥ 1 | - | 90-95% | No TOF; responds to PTC |
| Moderate | 1-3 | - | - | 70-90% | 1-3 TOF twitches |
| Shallow | 4 | - | < 0.4 | 60-70% | 4 twitches, but fade |
| Minimal | 4 | - | 0.4-0.9 | 60-70% | 4 twitches, subtle fade |
| Recovered | 4 | - | ≥ 0.9 | < 70% | Full recovery |
MONITORING SETUP DIAGRAM (Ulnar nerve / Adductor pollicis):
┌────────────────────────────────────────────────┐
│ NERVE STIMULATOR │
│ [+] Red ─────────── [-] Black │
└────────┬──────────────────────┬────────────────┘
│ │
Red (+) lead Black (-) lead
│ │
▼ ▼
Proximal electrode Distal electrode
(3-5 cm above wrist) (1-2 cm above wrist)
Both over ulnar nerve (medial wrist)
WRIST (Palmar surface)
┌──────────────────────────────────┐
│ ○ Red (+) proximal │
│ │
│ ○ Black (-) distal │
│ ← Wrist crease │
│ ← Thumb │
│ (Adductor pollicis)│
│ Observed for twitch│
└──────────────────────────────────┘
DETECTION LIMIT COMPARISON:
TOF Ratio │ Can tactile PNS detect fade? │ Can quantitative monitor detect?
─────────────┼──────────────────────────────┼──────────────────────────────────
< 0.4 │ YES - fade clearly felt │ YES
0.4 - 0.7 │ UNCERTAIN - hard to feel │ YES
0.7 - 0.9 │ NO - fade NOT felt by touch │ YES
≥ 0.9 │ Cannot detect any fade │ Confirms true recovery
| Monitor | Method | Principle |
|---|---|---|
| Mechanomyography (MMG) | Force transducer on thumb | Isometric force of adductor pollicis; gold standard for research |
| Acceleromyography (AMG) | Piezoelectric sensor on thumb | Measures acceleration (F=ma); clinically most used |
| Electromyography (EMG) | Surface EMG electrodes | Compound muscle action potential amplitude |
| Kinemography (KMG) | Piezoelectric film sensor | Bending movement of finger |
REVERSAL DECISION FLOWCHART:
TOFC = 0 ?
│
┌───────┴────────┐
YES NO
│ │
PTC = 0 ? TOFC 1-3 ?
│ │
┌─┴──┐ ┌───┴───┐
YES NO YES NO (TOFC=4)
│ │ │ │
WAIT Deep Moderate Measure TOFR
block block │
│ │ ┌───┴────┐
Sugammadex Sugammadex │ TOFR ≥ 0.9?
16 mg/kg 2-4 mg/kg │ │
OR WAIT OR YES NO
for TOFC≥2 Neostigmine │ │
then 0.07 mg/kg EXTUBATE Reversal
Neostigmine (if TOFC≥2) (Neostigmine
0.07 mg/kg or sugammadex)
Generate a pdf containing above content
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace && ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/nerve-stimulator && python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab OK')"
~/nerve-stimulator/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, Preformatted
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT_PATH = "/home/daytona/workspace/nerve-stimulator/Nerve_Stimulator_PG_Exam.pdf"
# ─── Document setup ───────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Nerve Locator & Peripheral Nerve Stimulator – PG Exam Answer",
author="Orris Medical AI"
)
W, H = A4
BODY_W = W - 4*cm
# ─── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
cover_title = ParagraphStyle("CoverTitle",
fontName="Helvetica-Bold", fontSize=20, leading=26,
alignment=TA_CENTER, textColor=colors.HexColor("#1a3a5c"),
spaceAfter=8)
cover_sub = ParagraphStyle("CoverSub",
fontName="Helvetica", fontSize=13, leading=18,
alignment=TA_CENTER, textColor=colors.HexColor("#2c5f8a"),
spaceAfter=6)
cover_info = ParagraphStyle("CoverInfo",
fontName="Helvetica", fontSize=11, leading=16,
alignment=TA_CENTER, textColor=colors.HexColor("#555555"),
spaceAfter=4)
part_heading = ParagraphStyle("PartHeading",
fontName="Helvetica-Bold", fontSize=14, leading=18,
alignment=TA_CENTER, textColor=colors.white,
spaceBefore=14, spaceAfter=4,
backColor=colors.HexColor("#1a3a5c"),
borderPad=6)
h1 = ParagraphStyle("H1",
fontName="Helvetica-Bold", fontSize=13, leading=17,
textColor=colors.HexColor("#1a3a5c"),
spaceBefore=14, spaceAfter=4,
borderPad=4)
h2 = ParagraphStyle("H2",
fontName="Helvetica-Bold", fontSize=11, leading=15,
textColor=colors.HexColor("#2c5f8a"),
spaceBefore=10, spaceAfter=3)
h3 = ParagraphStyle("H3",
fontName="Helvetica-BoldOblique", fontSize=10.5, leading=14,
textColor=colors.HexColor("#34495e"),
spaceBefore=8, spaceAfter=2)
body = ParagraphStyle("Body",
fontName="Helvetica", fontSize=10, leading=14.5,
alignment=TA_JUSTIFY, spaceAfter=5)
bullet = ParagraphStyle("Bullet",
fontName="Helvetica", fontSize=10, leading=14,
leftIndent=16, spaceAfter=2,
bulletIndent=6)
code = ParagraphStyle("Code",
fontName="Courier", fontSize=8.5, leading=12,
leftIndent=10, spaceAfter=4,
backColor=colors.HexColor("#f4f4f4"),
borderPad=6, borderColor=colors.HexColor("#cccccc"),
borderWidth=0.5, borderRadius=3)
caption = ParagraphStyle("Caption",
fontName="Helvetica-Oblique", fontSize=9, leading=12,
alignment=TA_CENTER, textColor=colors.HexColor("#666666"),
spaceAfter=6)
note = ParagraphStyle("Note",
fontName="Helvetica-Oblique", fontSize=9.5, leading=13,
leftIndent=12, textColor=colors.HexColor("#8b0000"),
spaceAfter=4)
ref_style = ParagraphStyle("Ref",
fontName="Helvetica", fontSize=9, leading=13,
leftIndent=14, spaceAfter=2, textColor=colors.HexColor("#444444"))
# ─── Helpers ──────────────────────────────────────────────────────────────────
def H(text, style=h1, num=None):
label = f"<b>{num}. </b>" if num else ""
return Paragraph(label + text, style)
def B(text): return Paragraph(f"• {text}", bullet)
def P(text): return Paragraph(text, body)
def N(text): return Paragraph(text, note)
def SP(n=6): return Spacer(1, n)
def HR(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#aaaaaa"), spaceAfter=6, spaceBefore=6)
def code_block(text):
return Preformatted(text, code)
def simple_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
n = len(headers)
col_widths = [BODY_W / n] * n
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 9),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, colors.HexColor("#eaf0f8")]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0),(-1,-1), 5),
]))
return t
def section_banner(text):
data = [[Paragraph(f"<b>{text}</b>", part_heading)]]
t = Table(data, colWidths=[BODY_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#1a3a5c")),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
# ─── Build story ──────────────────────────────────────────────────────────────
story = []
# ══ COVER PAGE ══════════════════════════════════════════════════════════════
story += [
SP(60),
Paragraph("POSTGRADUATE ANAESTHESIA EXAMINATION", cover_sub),
SP(10),
Paragraph("Nerve Locator & Peripheral Nerve Stimulator", cover_title),
SP(4),
Paragraph("Physiology of Neuromuscular Junction · Stimulation Patterns<br/>Neuromuscular Monitoring Technique · Clinical Decision-Making", cover_sub),
SP(30),
HRFlowable(width="60%", thickness=1.5, color=colors.HexColor("#2c5f8a"), hAlign="CENTER"),
SP(14),
Paragraph("30 Marks Answer", cover_info),
Paragraph("With Labelled Line Diagrams", cover_info),
SP(40),
HRFlowable(width="40%", thickness=0.5, color=colors.HexColor("#aaaaaa"), hAlign="CENTER"),
SP(10),
Paragraph("Reference: Miller's Anesthesia 10e · Barash's Clinical Anesthesia 9e", cover_info),
Paragraph("Compiled by Orris Medical AI · June 2026", cover_info),
PageBreak(),
]
# ══ PART A ═══════════════════════════════════════════════════════════════════
story += [
section_banner("PART A: PERIPHERAL NERVE STIMULATOR AS A NERVE LOCATOR"),
SP(8),
]
# 1. Introduction
story += [
H("Introduction and Historical Perspective", num="1"),
HR(),
P("The peripheral nerve stimulator (PNS) as a nerve localization tool was first described by <b>von Perthes (1912)</b> and later refined by <b>Greenblatt and Denson (1962)</b>, who introduced the needle nerve stimulator-locator. By the 1980s, motor response to electrical stimulation replaced the paresthesia technique as the primary objective modality for nerve localization. Today, the PNS is used alone or in combination with ultrasound guidance (multimodal approach) for peripheral nerve blockade."),
SP(4),
]
# 2. Physics
story += [
H("Basic Physics and Principles", num="2"),
HR(),
P("The PNS works on the principle of <b>Electrical Nerve Stimulation (ENS)</b>. The relationship between stimulating current and needle-nerve distance is governed by <b>Coulomb's Law</b>:"),
SP(4),
code_block(
"COULOMB'S LAW:\n"
"\n"
" q1 x q2\n"
" F = ke --------\n"
" r²\n"
"\n"
" F = force between charges\n"
" ke = electrostatic constant\n"
" r = distance between needle tip and nerve\n"
"\n"
" KEY RELATIONSHIP: MSC proportional to r²\n"
" If MSC is HALVED -> needle-nerve distance reduced FOUR-FOLD"
),
SP(6),
P("When current density reaches <b>threshold potential (-55 mV)</b>, an action potential fires:"),
B("<b>Motor nerve:</b> Muscle twitch / contraction"),
B("<b>Sensory nerve:</b> Paresthesia in the distribution of the nerve"),
SP(4),
P("<b>Why cathodal stimulation?</b> The cathode (negative electrode) at the needle draws positive ions away from the membrane, causing local depolarization. Cathodal stimulation has a lower rheobase than anodal stimulation and is therefore more efficient."),
SP(4),
]
# 3. Components
story += [
H("Components of the Peripheral Nerve Stimulator", num="3"),
HR(),
code_block(
"PERIPHERAL NERVE STIMULATOR DEVICE\n"
"+-------------------------------------------------+\n"
"| [ DISPLAY: Current 0.5mA Freq 2Hz |\n"
"| Pulse width: 0.1ms Mode: TOF ] |\n"
"| |\n"
"| CONTROLS: |\n"
"| [ON/OFF] [Hz up/dn] [mA up/dn] [PulseWidth] |\n"
"| |\n"
"| OUTPUT TERMINALS: |\n"
"| [RED (+) Anode] [BLACK (-) Cathode] |\n"
"| (Surface/Reference) (Needle/Active) |\n"
"| |\n"
"| [BATTERY CHECK] [IMPEDANCE DISPLAY] |\n"
"+-----------+-----------------------------+-------+\n"
" | |\n"
" Red (+) lead Black (-) lead\n"
" Surface patch Insulated needle"
),
SP(8),
simple_table(
["Component", "Specification", "Purpose"],
[
["Power source", "Rechargeable 9V battery", "Should generate 60-80 mA; not >80 mA"],
["Current generator", "Constant current (NOT voltage)", "Current determines depolarisation; compensates for variable skin resistance"],
["Display", "Digital screen", "Shows current (mA), pulse width (ms), frequency (Hz)"],
["Current control", "Range 0-5 mA", "Titration during needle advancement"],
["Pulse width selector", "0.1 ms (default)", "Short pulse = preferential motor stimulation"],
["Frequency selector", "1-2 Hz", "2 Hz preferred for nerve localisation"],
["Polarity indicator", "Red (+) / Black (-)", "Prevents incorrect electrode connection"],
["Battery check", "Built-in alarm", "Alerts to inadequate power"],
["Impedance display", "Warns if skin R > 5 kΩ", "Ensures delivered current = selected current"],
],
col_widths=[3.5*cm, 4.5*cm, 8.3*cm]
),
SP(6),
N("Why constant current? Skin resistance can reach ~5 kΩ (especially in hypothermia). With constant voltage, current falls as resistance rises → false-negative motor response. Constant current circuits compensate automatically."),
SP(4),
]
# 4. Insulated needle
story += [
H("The Insulated Block Needle", num="4"),
HR(),
code_block(
"SIDE VIEW:\n"
" Teflon / polyurethane insulation\n"
" |||||||||||||||||||||||||||||||||||\n"
"Hub --- [===================================]--- Bare bevel tip (1-3mm)\n"
" | |||||||||||||||||||||||||||||||||||||| |\n"
"Luer Electrical connection (cathode) Uninsulated active tip\n"
"lock\n"
"\n"
"CROSS-SECTION THROUGH SHAFT:\n"
" +------------------------+\n"
" | Insulating coating |\n"
" | +-------------+ |\n"
" | | Metal core | |\n"
" | +-------------+ |\n"
" +------------------------+\n"
"\n"
"NEEDLE TIP (magnified):\n"
" Insulated shaft --------+\n"
" | <-- Bare short bevel (45 degrees)\n"
" -------------------------+\n"
" Current radiates ONLY from tip\n"
" (insulation prevents leakage along shaft)"
),
SP(6),
P("<b>Key features of the insulated needle:</b>"),
B("Teflon/polyurethane insulated shaft – prevents current leaking along length"),
B("1–3 mm uninsulated bevel tip – concentrates electrical field at the point"),
B("Short bevel (45°) – reduces nerve fascicle trauma versus standard 12° long bevel"),
B("Luer-lock hub – accepts standard syringe"),
B("Dedicated electrical connector at hub for cathode lead"),
SP(4),
]
# 5. Technique
story += [
H("Technique for Peripheral Nerve Localisation", num="5"),
HR(),
code_block(
"CIRCUIT DIAGRAM:\n"
"\n"
" +--------------------------------------+\n"
" | NERVE STIMULATOR |\n"
" | [+] Red ──────── [-] Black |\n"
" +--------+--------------------+---------+\n"
" | |\n"
" Red (+) lead Black (-) lead\n"
" | |\n"
" v v\n"
" SURFACE ECG PATCH INSULATED NEEDLE\n"
" (Anode-reference) (Cathode-active)\n"
" 6-10 cm from site Advancing toward nerve\n"
"\n"
" PATIENT CROSS-SECTION:\n"
" +---------------------------------------+\n"
" | Skin |\n"
" | Subcutaneous fat |\n"
" | Fascia |\n"
" | |\n"
" | >>>>>> Needle advancing >>>>>> |\n"
" | (*) |\n"
" | Target nerve |\n"
" | (TWITCH here) |\n"
" +---------------------------------------+\n"
"\n"
"Current path:\n"
" Stimulator(-) -> Needle tip -> Tissue -> Nerve\n"
" -> Tissue -> Surface electrode -> Stimulator(+)"
),
SP(8),
simple_table(
["Step", "Action", "Setting"],
[
["1", "Initial setup", "Current 1.0–1.5 mA, pulse 0.1 ms, freq 2 Hz"],
["2", "Connect leads", "Red to skin patch, black to needle hub"],
["3", "Advance needle", "Observe twitch in target muscle group"],
["4", "Fine adjustment", "Reduce current; twitch must persist at 0.3–0.5 mA"],
["5", "Injection", "Aspirate; inject; loss of twitch confirms perineurial placement"],
],
col_widths=[1.5*cm, 5*cm, 9.7*cm]
),
SP(8),
code_block(
"THRESHOLD CURRENT INTERPRETATION:\n"
"\n"
" Current (mA)\n"
" 1.5 --- Start here (needle far from nerve)\n"
" 1.0 --- Approaching nerve\n"
" 0.5 - - - - - - - - - <-- IDEAL ZONE (inject here)\n"
" 0.3 - - - - - - - - - <-- Lower acceptable limit\n"
" 0.2 - - - - - - - - - <-- DANGER: possible intraneural\n"
" If twitch present at <0.2 mA --> WITHDRAW, do NOT inject"
),
SP(4),
]
# 6. Strength-Duration
story += [
H("Current-Duration (Strength-Duration) Relationship", num="6"),
HR(),
code_block(
"STRENGTH-DURATION CURVE:\n"
"\n"
" Current\n"
" (mA) |\n"
" | Rheobase x2 -----------------------------------------\n"
" 4 ---|\n"
" | Chronaxie\n"
" | |\n"
" 2 ---| /\n"
" | /\\___________________________________ Rheobase\n"
" 1 ---|\n"
" |\n"
" +----+----+----+----+----+----+----+--> Pulse width (ms)\n"
" 0.05 0.1 0.2 0.3 0.5 1.0 2.0\n"
"\n"
" Chronaxie = pulse width at 2 x rheobase current\n"
" Motor fibres (A-alpha): chronaxie 0.05-0.1 ms (stimulated at SHORT pulse)\n"
" Sensory fibres (A-delta): chronaxie 0.15-0.2 ms (need LONGER pulse)"
),
SP(6),
P("<b>Clinical applications:</b>"),
B("<b>0.1 ms pulse width:</b> Preferentially stimulates motor fibres (Aα) → confirms needle near mixed/motor nerve"),
B("<b>0.3 ms pulse width:</b> Stimulates sensory fibres → used for sensory-only nerves (e.g., saphenous nerve)"),
B("<b>1.0 ms pulse width:</b> Stimulates both equally → used in neurology/diagnostic settings"),
SP(4),
]
# 7. Specific nerve twitches
story += [
H("Specific Twitches and Corresponding Nerves", num="7"),
HR(),
simple_table(
["Nerve", "Muscle twitch observed"],
[
["Femoral nerve", "Quadriceps (patella twitch – 'dancing patella')"],
["Sciatic nerve", "Plantar/dorsiflexion of foot"],
["Brachial plexus – Median", "Wrist flexion, finger flexion"],
["Brachial plexus – Radial", "Wrist/finger extension"],
["Brachial plexus – Ulnar", "Small finger abduction"],
["Obturator nerve", "Adductor thigh twitch"],
["Musculocutaneous nerve", "Elbow flexion (biceps)"],
],
col_widths=[6.5*cm, 9.7*cm]
),
SP(6),
]
# 8. Advantages / Disadvantages
story += [
H("Advantages and Disadvantages", num="8"),
HR(),
Paragraph("<b>Advantages:</b>", h3),
B("Objective endpoint (motor twitch) reduces reliance on patient cooperation"),
B("Usable in sedated, anaesthetised, or uncooperative patients"),
B("Avoids subjective paresthesia technique, reducing patient discomfort"),
B("Guides placement in difficult anatomy, obesity, or oedema"),
B("Usable without ultrasound in resource-limited settings"),
B("Identifies nerve type by twitch pattern (muscle group identifies specific nerve)"),
B("Complements ultrasound – 'triple monitoring' gold standard"),
SP(4),
Paragraph("<b>Disadvantages:</b>", h3),
B("Does not reliably prevent intraneural injection"),
B("False-negative possible at low currents even with intraneural placement"),
B("Unreliable in neuropathy (intact motor function required)"),
B("High skin resistance (hypothermia, oedema) → false-negative"),
B("Cannot identify purely sensory (non-motor) nerves"),
B("Learning curve required for accurate interpretation"),
SP(6),
PageBreak(),
]
# ══ PART B ═══════════════════════════════════════════════════════════════════
story += [
section_banner("PART B: PHYSIOLOGY & TECHNIQUE OF NEUROMUSCULAR MONITORING"),
SP(8),
]
# 9. NMJ Physiology
story += [
H("Physiology of the Neuromuscular Junction (NMJ)", num="9"),
HR(),
code_block(
"DIAGRAM: NORMAL NEUROMUSCULAR JUNCTION\n"
"\n"
"Motor neuron axon\n"
" |\n"
" | Action potential arrives\n"
" v\n"
"+---------------------------------------------------+\n"
"| PRESYNAPTIC TERMINAL (Motor nerve ending) |\n"
"| |\n"
"| Ca2+ enters --> Vesicle fusion --> ACh released |\n"
"| [ACh][ACh][ACh] -----> into synaptic cleft |\n"
"| Also: alpha3-beta2 nAChR (presynaptic) |\n"
"| regulates ACh mobilisation |\n"
"+--------------------+------------------------------+\n"
" | Synaptic cleft\n"
" | (ACh + AChE present)\n"
"+--------------------+------------------------------+\n"
"| POSTSYNAPTIC MEMBRANE (Motor endplate) |\n"
"| |\n"
"| Nicotinic ACh Receptors (nAChR) |\n"
"| 2 alpha subunits -- binding sites for ACh/NMBAs |\n"
"| ACh binds BOTH alpha subunits |\n"
"| --> Ion channel opens --> Na+ influx |\n"
"| --> Endplate potential --> MUSCLE TWITCH |\n"
"| |\n"
"| NMBAs (non-depolarising) bind alpha WITHOUT |\n"
"| activating --> COMPETITIVE BLOCK |\n"
"+---------------------------------------------------+\n"
" |\n"
" MUSCLE FIBRE (contraction if EPP reaches threshold)"
),
SP(8),
Paragraph("<b>Safety Margin of Neuromuscular Transmission:</b>", h3),
B("NMB becomes evident only when <b>70–80% of ACh receptors</b> are occupied by non-depolarising NMBAs"),
B("Complete block requires <b>90–95% receptor occupancy</b>"),
B("Monitoring only detects block within the 70–95% occupancy range"),
B("At apparent full recovery (TOF ratio ≥0.9), up to <b>70% receptors</b> may still be occupied"),
SP(6),
code_block(
"RECEPTOR OCCUPANCY vs MONITOR RESPONSE:\n"
"\n"
" Occupancy | Clinical Effect | Monitor Response\n"
" -----------+-----------------------------+-------------------\n"
" 0% | Normal transmission | TOF ratio = 1.0\n"
" <70% | No detectable block | TOF ratio >= 0.9\n"
" 70-75% | Just detectable block | TOF ratio 0.4-0.9\n"
" 75-90% | Moderate block | TOFC 1-3\n"
" 90-95% | Deep block | TOFC 0, PTC >= 1\n"
" >95% | Complete block | TOFC 0, PTC = 0"
),
SP(4),
]
# 10. Types of block
story += [
H("Types of Neuromuscular Block", num="10"),
HR(),
Paragraph("<b>A. Non-Depolarising Block (Competitive Block)</b>", h3),
P("Caused by rocuronium, vecuronium, atracurium, cisatracurium. Competes with ACh for α subunits of nAChR without activating the channel. Also blocks presynaptic α3β2 nAChR → reduces ACh mobilisation during repetitive stimulation (explains 'FADE')."),
code_block(
"TOF RESPONSES IN NON-DEPOLARISING BLOCK:\n"
"\n"
" Normal: T1 T2 T3 T4 (equal height, no fade)\n"
" [] [] [] [] TOF ratio = T4/T1 = 1.0\n"
"\n"
" Partial ND: T1 T2 T3 T4 (progressive fade)\n"
" [] [/] [.] [,] TOF ratio = T4/T1 < 1.0\n"
" FADE = hallmark of ND block\n"
"\n"
" Moderate ND: T1 T2 T3 -- (T4 absent)\n"
" [] [/] [,] TOFC = 3\n"
"\n"
" Deep ND: -- -- -- -- (all absent, PTC present)\n"
" TOFC = 0, PTC >= 1"
),
SP(6),
Paragraph("<b>B. Depolarising Block (Succinylcholine)</b>", h3),
P("Acts like ACh, persistently depolarises the endplate. Phase I: NO fade, NO post-tetanic facilitation. Phase II (prolonged exposure): FADE appears, resembles non-depolarising block."),
code_block(
"TOF IN DEPOLARISING BLOCK:\n"
"\n"
" Phase I: T1 T2 T3 T4 (equal reduction -- NO fade)\n"
" [.] [.] [.] [.] TOF ratio ~1.0 (all diminished equally)\n"
"\n"
" Phase II: T1 T2 T3 T4 (fade appears -- like ND block)\n"
" [] [/] [,] [.] TOF ratio < 1.0 --> FADE present"
),
SP(6),
simple_table(
["Feature", "Phase I Block", "Phase II Block"],
[
["TOF fade", "Absent", "Present"],
["Post-tetanic facilitation", "Absent", "Present"],
["Tetanic stimulation", "Sustained (no fade)", "Fade present"],
["Reversal by neostigmine", "Potentiates (worsens)", "May partially reverse"],
["Clinical appearance", "Flaccid after fasciculations", "Prolonged flaccid paralysis"],
],
col_widths=[5*cm, 5.5*cm, 5.7*cm]
),
SP(6),
]
# 11. Stimulation Patterns
story += [
H("Stimulation Patterns Used in Neuromuscular Monitoring", num="11"),
HR(),
Paragraph("<b>A. Single-Twitch Stimulation (ST)</b>", h3),
code_block(
"PATTERN: | | | | | (0.1 to 1.0 Hz)\n"
"\n"
"Normal: [#] [#] [#] [#] (equal twitches)\n"
"ND block: [.] [.] [.] [.] (equal but diminished -- both types show this)\n"
"\n"
"LIMITATION: Requires baseline control; cannot distinguish ND from depolarising"
),
B("Detects block only when twitch height is <25% of baseline"),
B("Uses: Establishing onset of block, calibrating monitoring equipment"),
SP(6),
Paragraph("<b>B. Train-of-Four (TOF) Stimulation</b>", h3),
code_block(
"PATTERN: 4 stimuli at 2 Hz (0.5s apart) -- repeated every 10-15 seconds\n"
"\n"
" |||| |||| |||| ...\n"
" 2 Hz gap 2 Hz\n"
"\n"
"Responses:\n"
" No block: [#][#][#][#] TOF ratio (T4/T1) = 1.0\n"
" Partial ND: [#][/][.][,] FADE -- TOF ratio < 1.0\n"
" Moderate: [#][/][,][-] TOFC = 3\n"
" Deep: [#][-][-][-] TOFC = 1\n"
" Complete: [-][-][-][-] TOFC = 0\n"
"\n"
" TOF Count (TOFC) = number of twitches visible (0-4)\n"
" TOF Ratio (TOFR) = T4 amplitude / T1 amplitude\n"
" TOFR >= 0.9 = adequate recovery (safe to extubate)\n"
" TOFR < 0.9 = residual paralysis (do NOT extubate)"
),
N("Why does FADE occur? Non-depolarising NMBAs block presynaptic alpha3-beta2 nAChRs, reducing ACh mobilisation with successive stimuli. Each twitch in the TOF encounters progressively less ACh → progressive reduction in response amplitude = FADE."),
SP(6),
Paragraph("<b>C. Tetanic Stimulation (50 Hz × 5 seconds)</b>", h3),
code_block(
"PATTERN: ||||||||||||||||||||||||||||||||||| (50/second x 5 sec)\n"
"\n"
"Normal: Sustained contraction (no fade)\n"
" [##############################]\n"
"\n"
"ND block: FADE during tetanus\n"
" [######/////................... ]\n"
" Followed by POST-TETANIC FACILITATION\n"
" (ACh stores temporarily replenished)\n"
"\n"
"Dep (Ph I): NO fade; NO post-tetanic facilitation\n"
"\n"
"CAUTION: Painful in awake patients\n"
" Must NOT be repeated within 6 minutes (exhausts ACh stores)"
),
SP(6),
Paragraph("<b>D. Post-Tetanic Count (PTC) Stimulation</b>", h3),
code_block(
"PTC PROTOCOL:\n"
"\n"
" Step 1: Tetanic burst (50 Hz, 5 seconds)\n"
" ||||||||||||||||||||||||||||||||||||\n"
"\n"
" Step 2: Pause (3 seconds)\n"
"\n"
" Step 3: Single twitches at 1 Hz\n"
" | | | | | | | | | | |\n"
"\n"
" Count how many post-tetanic twitches appear:\n"
"\n"
" PTC = 0: Complete block -- no twitches\n"
" o o o o o o o\n"
"\n"
" PTC = 1-5: Deep block (TOFC still 0, recovery starting)\n"
" | o o o o o o (PTC = 1)\n"
"\n"
" PTC >= 10: TOF responses will reappear soon\n"
"\n"
" PTC 1-5 --> TOF reappearance >30 min away\n"
" PTC 6-10 --> TOF reappearance 10-30 min away\n"
" PTC >10 --> First TOF response likely within 5-10 min"
),
SP(6),
Paragraph("<b>E. Double-Burst Stimulation (DBS)</b>", h3),
code_block(
"DBS3,3 PATTERN (most common):\n"
"\n"
" ||| (750 ms gap) |||\n"
" 3 stimuli at 50Hz 3 stimuli at 50Hz\n"
"\n"
" Normal: [###] [###] (equal bursts -- no fade)\n"
"\n"
" Residual ND: [###] [#/.] (second burst weaker = FADE)\n"
"\n"
" FADE in DBS = D2/D1 < 1.0 = residual block present\n"
"\n"
" ADVANTAGE: Easier to feel fade between 2 bursts than across 4 twitches\n"
" Detects residual block (TOFR 0.6-0.9) that TOF touch cannot detect"
),
SP(6),
simple_table(
["Pattern", "Block Detected", "Clinical Use"],
[
["Single twitch", "Moderate to deep", "Onset timing, calibration"],
["TOF (Train-of-Four)", "Moderate, mild", "Intraoperative monitoring, recovery"],
["Tetanus (50 Hz)", "Qualitative – ND vs depolarising", "Confirms type of block"],
["Post-Tetanic Count (PTC)", "Complete/deep (TOFC=0)", "Guides reversal timing"],
["Double-Burst (DBS)", "Residual mild block", "Tactile detection of residual paralysis"],
],
col_widths=[4*cm, 5.5*cm, 6.7*cm]
),
SP(6),
PageBreak(),
]
# 12. Sites
story += [
H("Sites of Stimulation and Monitoring", num="12"),
HR(),
code_block(
"PREFERRED SITES FOR NEUROMUSCULAR MONITORING:\n"
"\n"
"A. ULNAR NERVE (MOST PREFERRED):\n"
" Wrist (palmar surface):\n"
" +------------------------------------------+\n"
" | o Red (+) proximal electrode |\n"
" | (3-5 cm above wrist crease) |\n"
" | o Black (-) distal electrode |\n"
" | (1-2 cm above wrist crease) |\n"
" | 'Red toward the head' |\n"
" +------------------------------------------+\n"
" Monitor: Adductor pollicis (thumb adduction)\n"
" First dorsal interosseous (dorsum of hand)\n"
"\n"
"B. FACIAL NERVE (AVOID FOR REVERSAL DECISIONS):\n"
" Stimulate: Preauricular / near tragus\n"
" Monitor: Corrugator supercilii / Orbicularis oculi\n"
" *** Most RESISTANT to block -- falsely reassuring!\n"
" *** DO NOT use for reversal decisions.\n"
" *** Switch to adductor pollicis BEFORE reversal.\n"
"\n"
"C. POSTERIOR TIBIAL NERVE (lower limb alternative):\n"
" Stimulate: Behind medial malleolus\n"
" Monitor: Flexor hallucis brevis (plantar flexion)\n"
" Note: Resistant site -- use with caution"
),
SP(8),
code_block(
"DIFFERENTIAL MUSCLE SENSITIVITY (Most to Least Resistant):\n"
"\n"
"Most RESISTANT Most SENSITIVE\n"
"(last to block, first to recover) (first to block)\n"
" |\n"
" v\n"
"Diaphragm > Laryngeal > Orbicularis > Adductor > Abductor\n"
" muscles muscles oculi pollicis digiti minimi\n"
" ^\n"
" MONITORING SITE\n"
" (represents most\n"
" peripheral muscles)\n"
"\n"
"Clinical implication: Full recovery at adductor pollicis\n"
"ensures all muscles including respiratory muscles have recovered."
),
SP(6),
]
# 13. Depth of block
story += [
H("Depth of Block Definitions", num="13"),
HR(),
simple_table(
["Depth", "TOFC", "PTC", "TOF Ratio", "Receptor Occupancy", "Clinical State"],
[
["Complete", "0", "0", "–", "> 95%", "No response to any stimulation"],
["Deep", "0", "≥ 1", "–", "90–95%", "No TOF; responds to PTC only"],
["Moderate", "1–3", "–", "–", "70–90%", "1–3 TOF twitches"],
["Shallow", "4", "–", "< 0.4", "60–70%", "4 twitches, visible fade"],
["Minimal", "4", "–", "0.4–0.9", "60–70%", "4 twitches, subtle fade"],
["Recovered", "4", "–", "≥ 0.9", "< 70%", "Full recovery – safe to extubate"],
],
col_widths=[2.2*cm, 1.5*cm, 1.5*cm, 2.2*cm, 2.8*cm, 6*cm]
),
SP(6),
]
# 14. Practical technique
story += [
H("Practical Technique of Neuromuscular Monitoring", num="14"),
HR(),
code_block(
"MONITORING SETUP (Ulnar nerve / Adductor pollicis):\n"
"\n"
" +----------------------------------------------+\n"
" | NERVE STIMULATOR |\n"
" | [+] Red ─────────────── [-] Black |\n"
" +--------+─────────────────────────+-----------+\n"
" | |\n"
" Red (+) lead Black (-) lead\n"
" | |\n"
" v v\n"
" Proximal electrode Distal electrode\n"
" (3-5 cm above wrist) (1-2 cm above wrist)\n"
" Both over ulnar nerve (medial wrist)\n"
"\n"
" WRIST (Palmar surface):\n"
" +------------------------------------+\n"
" | o Red (+) proximal |\n"
" | o Black (-) distal |\n"
" | ^--- Wrist crease |\n"
" | ^--- Thumb (observe for twitch)|\n"
" | Adductor pollicis |\n"
" +------------------------------------+"
),
SP(8),
Paragraph("<b>Before induction:</b>", h3),
B("Attach electrodes to wrist before induction (do NOT turn on stimulator until unconscious)"),
B("Warm the monitored extremity to prevent cold-induced false responses"),
B("Establish supramaximal stimulation at 1 Hz; calibrate device (control = 100%)"),
B("Switch to TOF mode before administering NMBA"),
SP(4),
Paragraph("<b>During induction (onset of block):</b>", h3),
B("Single twitch at 1 Hz or TOF to observe onset"),
B("Fasciculations followed by block = succinylcholine (depolarising)"),
B("Smooth onset without fasciculations = non-depolarising NMBA"),
B("Note time from injection to loss of T1 = onset time"),
SP(4),
Paragraph("<b>Intraoperatively:</b>", h3),
B("Use TOF every 15–30 seconds as required"),
B("For deep block (laparoscopy, intracranial surgery): maintain TOFC = 0, PTC 1–2"),
B("For moderate block: maintain TOFC 1–3"),
B("Repeat NMBA guided by TOFC (redose when TOFC ≥ 2 for most procedures)"),
SP(4),
Paragraph("<b>Before reversal:</b>", h3),
B("At least TOFC ≥ 2 before giving neostigmine"),
B("TOFC = 4 + TOF ratio ≥ 0.4 preferred before neostigmine for best results"),
B("Sugammadex can be given at any depth (PTC ≥ 1 for deep; TOFC 1–2 for moderate)"),
SP(4),
Paragraph("<b>Before extubation – confirming recovery:</b>", h3),
B("<b>TOF ratio ≥ 0.9</b> (quantitative monitor) = safe for extubation"),
B("With qualitative (visual/tactile) PNS only: TOFC = 4 + sustained tetanus at 50 Hz for 5 s"),
N("Do NOT rely on head lift test alone – patient can lift head with TOFR as low as 0.5"),
SP(6),
]
# 15. Limitations
story += [
H("Limitations of Qualitative (Visual/Tactile) Peripheral Nerve Stimulator", num="15"),
HR(),
code_block(
"DETECTION LIMIT COMPARISON:\n"
"\n"
" TOF Ratio | Tactile PNS detects fade? | Quantitative monitor?\n"
" -----------+----------------------------+----------------------\n"
" < 0.4 | YES – fade clearly felt | YES\n"
" 0.4 – 0.7 | UNCERTAIN – hard to feel | YES\n"
" 0.7 – 0.9 | NO – fade NOT felt by touch | YES\n"
" >= 0.9 | Cannot detect any fade | Confirms true recovery"
),
SP(6),
P("<b>Key limitations of the qualitative PNS:</b>"),
B("Cannot detect residual block (TOFR 0.7–0.9) – tactile/visual cannot feel fade at these ratios"),
B("Cannot measure TOF ratio – only counts twitches (TOFC), not amplitudes"),
B("Highly subjective – significant inter-observer variability"),
B("Incidence of residual paralysis: 30–40% with neostigmine reversal without quantitative monitoring"),
B("Acts as a 'guide' only – not a diagnostic tool for confirmed full recovery"),
N("This is why the qualitative PNS has been superseded by quantitative monitors (AMG, EMG) for definitive neuromuscular recovery assessment."),
SP(6),
]
# 16. Objective monitors
story += [
H("Objective Neuromuscular Monitors (Overview)", num="16"),
HR(),
simple_table(
["Monitor", "Method / Principle", "Clinical Use"],
[
["Mechanomyography (MMG)", "Force transducer on thumb; measures isometric force of adductor pollicis", "Gold standard for research; cumbersome for routine clinical use"],
["Acceleromyography (AMG)", "Piezoelectric sensor on thumb; measures acceleration (F=ma)", "Most widely used clinical quantitative monitor"],
["Electromyography (EMG)", "Surface EMG electrodes; compound muscle action potential amplitude", "Accurate; not dependent on thumb movement; useful in prone position"],
["Kinemography (KMG)", "Piezoelectric film sensor; bending movement of finger", "Moderate accuracy; easy to apply"],
],
col_widths=[4*cm, 6.5*cm, 5.7*cm]
),
SP(4),
N("AMG TOFR ≥ 0.9 (preferably ≥ 1.0 to account for baseline variation) indicates adequate recovery."),
SP(6),
]
# 17. Reversal flowchart
story += [
H("Clinical Decision-Making: Reversal Based on Monitoring", num="17"),
HR(),
code_block(
"REVERSAL DECISION FLOWCHART:\n"
"\n"
" TOFC = 0 ?\n"
" |\n"
" +--------+--------+\n"
" YES NO\n"
" | |\n"
" PTC = 0 ? TOFC 1-3 ?\n"
" | |\n"
" +---+---+ +---+---+\n"
" YES NO YES NO (TOFC=4)\n"
" | | | |\n"
" WAIT Deep Moderate Measure TOFR\n"
" block block |\n"
" | | +---+----+\n"
" Sugammadex Sugammadex YES NO\n"
" 16 mg/kg 2-4 mg/kg | |\n"
" OR WAIT OR EXTUBATE Reversal needed\n"
" for TOFC>=2 Neostigmine (Neostigmine or\n"
" then 0.07 mg/kg Sugammadex)\n"
" Neostigmine\n"
" 0.07 mg/kg"
),
SP(6),
]
# 18. Conclusion
story += [
H("Summary", num="18"),
HR(),
P("The peripheral nerve stimulator serves a dual role in anaesthetic practice:"),
B("<b>As a nerve locator:</b> Electrical stimulation through an insulated needle identifies motor nerve proximity during regional anaesthesia via Coulomb's Law and threshold current titration (0.2–0.5 mA optimal zone)."),
B("<b>As a neuromuscular monitor:</b> Supramaximal stimulation of peripheral motor nerves (ulnar, posterior tibial) at standardised patterns (TOF, PTC, DBS, tetanus) quantifies the depth of neuromuscular blockade by exploiting the NMJ safety margin and differential effects of depolarising vs non-depolarising agents on presynaptic ACh mobilisation."),
SP(4),
P("The TOF ratio ≥ 0.9 at the adductor pollicis remains the standard for adequate neuromuscular recovery before extubation. While qualitative peripheral nerve stimulators provide useful intraoperative guidance, they cannot reliably exclude residual paralysis (TOFR 0.7–0.9 range), making <b>quantitative monitoring the current recommended standard of care.</b>"),
SP(8),
HR(),
Paragraph("<b>References</b>", h2),
Paragraph("1. Miller's Anesthesia, 10th Edition, Chapter 39 – Neuromuscular Monitoring", ref_style),
Paragraph("2. Barash, Cullen and Stoelting's Clinical Anesthesia, 9th Edition, Chapter 21", ref_style),
Paragraph("3. Sabiston Textbook of Surgery – Section on Neuromuscular Blockade Monitoring", ref_style),
Paragraph("4. Klein SM et al. Peripheral Nerve Stimulation in Regional Anesthesia. Reg Anesth Pain Med, 2012", ref_style),
Paragraph("5. ASRA Newsletter: Nerve Stimulator in Regional Anesthesia: Is It Out of Vogue? 2020", ref_style),
Paragraph("6. Richard-Edwards CL. Nerve Localisation Techniques and Patient Safety. UKZN, 2023", ref_style),
]
# ─── Build PDF ────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF generated: {OUTPUT_PATH}")
cd /home/daytona/workspace/nerve-stimulator && python3 generate_pdf.py
ls -lh /home/daytona/workspace/nerve-stimulator/Nerve_Stimulator_PG_Exam.pdf
Nerve Stimulator PG Exam
PDF Document · PDF
Generate a pdf of 30 marks answer with diagrams of for Postgraduate Exam of Anaesthesia on Difficult Airway and Management
~/difficult-airway/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, Preformatted, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/difficult-airway/Difficult_Airway_PG_Exam.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Difficult Airway and Management – PG Anaesthesia Exam Answer",
author="Orris Medical AI"
)
W, H = A4
BW = W - 4*cm # body width
# ── Styles ────────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1a3a5c")
BLUE = colors.HexColor("#2c5f8a")
LGRAY = colors.HexColor("#f0f4f8")
MGRAY = colors.HexColor("#aaaaaa")
RED = colors.HexColor("#8b0000")
WHITE = colors.white
cover_title = ParagraphStyle("CT", fontName="Helvetica-Bold", fontSize=22, leading=28, alignment=TA_CENTER, textColor=NAVY, spaceAfter=8)
cover_sub = ParagraphStyle("CS", fontName="Helvetica", fontSize=13, leading=18, alignment=TA_CENTER, textColor=BLUE, spaceAfter=6)
cover_info = ParagraphStyle("CI", fontName="Helvetica", fontSize=10, leading=14, alignment=TA_CENTER, textColor=colors.HexColor("#555555"), spaceAfter=3)
h1 = ParagraphStyle("H1", fontName="Helvetica-Bold", fontSize=12, leading=16, textColor=NAVY, spaceBefore=12, spaceAfter=3)
h2 = ParagraphStyle("H2", fontName="Helvetica-Bold", fontSize=11, leading=15, textColor=BLUE, spaceBefore=9, spaceAfter=3)
h3 = ParagraphStyle("H3", fontName="Helvetica-BoldOblique",fontSize=10, leading=14, textColor=colors.HexColor("#34495e"), spaceBefore=7, spaceAfter=2)
body = ParagraphStyle("BD", fontName="Helvetica", fontSize=10, leading=14, alignment=TA_JUSTIFY, spaceAfter=4)
bull = ParagraphStyle("BL", fontName="Helvetica", fontSize=10, leading=14, leftIndent=14, spaceAfter=2)
code = ParagraphStyle("CD", fontName="Courier", fontSize=8, leading=11, leftIndent=8,
backColor=LGRAY, borderPad=5, borderWidth=0.4, borderColor=MGRAY, spaceAfter=6)
note = ParagraphStyle("NT", fontName="Helvetica-Oblique", fontSize=9.5,leading=13, leftIndent=12, textColor=RED, spaceAfter=4)
ref_s = ParagraphStyle("RF", fontName="Helvetica", fontSize=9, leading=13, leftIndent=12, spaceAfter=2, textColor=colors.HexColor("#444444"))
# ── Helpers ───────────────────────────────────────────────────────────────────
def SP(n=6): return Spacer(1, n)
def HR(): return HRFlowable(width="100%", thickness=0.5, color=MGRAY, spaceBefore=4, spaceAfter=4)
def P(t): return Paragraph(t, body)
def B(t): return Paragraph(f"• {t}", bull)
def N(t): return Paragraph(t, note)
def H1(t, n=None):
prefix = f"<b>{n}. </b>" if n else ""
return Paragraph(prefix + t, h1)
def H2(t): return Paragraph(t, h2)
def H3(t): return Paragraph(t, h3)
def CODE(t): return Preformatted(t, code)
def banner(text):
inner = Paragraph(f"<b>{text}</b>",
ParagraphStyle("BN", fontName="Helvetica-Bold", fontSize=13, leading=17,
textColor=WHITE, alignment=TA_LEFT))
t = Table([[inner]], colWidths=[BW])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), NAVY),
("TOPPADDING", (0,0),(-1,-1), 9),
("BOTTOMPADDING",(0,0),(-1,-1), 9),
("LEFTPADDING", (0,0),(-1,-1), 12),
]))
return t
def tbl(headers, rows, widths=None):
data = [headers] + rows
if not widths:
widths = [BW/len(headers)]*len(headers)
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), NAVY),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 9),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("ALIGN", (0,0),(-1,-1), "LEFT"),
("VALIGN", (0,0),(-1,-1), "TOP"),
("ROWBACKGROUNDS", (0,1),(-1,-1), [WHITE, LGRAY]),
("GRID", (0,0),(-1,-1), 0.4, MGRAY),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("LEFTPADDING", (0,0),(-1,-1), 5),
("RIGHTPADDING", (0,0),(-1,-1), 5),
]))
return t
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ─────────────────────────────────────────────────────────────────────
story += [
SP(55),
Paragraph("POSTGRADUATE ANAESTHESIA EXAMINATION", cover_sub),
SP(10),
Paragraph("Difficult Airway and Management", cover_title),
SP(6),
Paragraph("Definition · Prediction · Assessment Tools · ASA Algorithm<br/>"
"Awake Intubation · Rescue Devices · CICO · Cricothyrotomy", cover_sub),
SP(30),
HRFlowable(width="60%", thickness=1.5, color=BLUE, hAlign="CENTER"),
SP(12),
Paragraph("30 Marks Answer | With Labelled Line Diagrams", cover_info),
SP(50),
HRFlowable(width="40%", thickness=0.5, color=MGRAY, hAlign="CENTER"),
SP(8),
Paragraph("Reference: Miller's Anesthesia 10e · Morgan & Mikhail's Clinical Anaesthesiology 7e", cover_info),
Paragraph("Barash's Clinical Anesthesia 9e · Cummings Otolaryngology · DAS Guidelines 2015/2020", cover_info),
Paragraph("Compiled by Orris Medical AI · June 2026", cover_info),
PageBreak(),
]
# ══════════════════════════════════════════════════════════════════════════════
# 1. DEFINITION
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Definition of Difficult Airway", "1"), HR(),
P("The <b>American Society of Anesthesiologists (ASA)</b> defines a difficult airway as <i>"a clinical situation in "
"which a conventionally trained anaesthesiologist experiences difficulty with facemask ventilation of the upper "
"airway, difficulty with tracheal intubation, or both."</i>"),
SP(4),
P("It encompasses five distinct clinical problems:"),
B("<b>Difficult mask ventilation (DMV)</b> – inability to maintain SpO₂ >90% with 100% O₂ by facemask"),
B("<b>Difficult laryngoscopy</b> – inability to visualise any portion of the vocal cords (Cormack–Lehane grade 3b/4)"),
B("<b>Difficult tracheal intubation (DTI)</b> – requires >3 attempts or >10 minutes"),
B("<b>Failed intubation</b> – inability to place ETT after multiple attempts"),
B("<b>Cannot Intubate, Cannot Oxygenate (CICO)</b> – the life-threatening emergency"),
SP(4),
P("The most common adverse outcomes are: <b>death, brain injury, cardiopulmonary arrest, surgical airway, "
"airway trauma, and dental damage.</b>"),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 2. INCIDENCE
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Incidence", "2"), HR(),
tbl(
["Clinical Problem", "Incidence"],
[
["Difficult mask ventilation (DMV)", "~1.4–5%"],
["Difficult laryngoscopy (C-L grade 3/4)", "~1–4%"],
["Difficult tracheal intubation", "~1–3%"],
["Failed intubation (elective)", "~1 in 2000"],
["Failed intubation (obstetric)", "~1 in 300–500"],
["CICO / cannot intubate cannot oxygenate", "~1 in 5000–10,000"],
],
[6*cm, 10.2*cm]
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 3. CAUSES / CONDITIONS
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Causes and Associated Conditions", "3"), HR(),
tbl(
["Category", "Examples"],
[
["Infections / Abscess", "Submandibular abscess, peritonsillar abscess, epiglottitis, Ludwig's angina"],
["Tumours", "Cystic hygroma, haemangioma, base-of-tongue tumour, laryngeal tumour, haematoma"],
["Congenital anomalies", "Pierre Robin sequence, Treacher Collins, Goldenhar, craniofacial dysostosis, laryngeal atresia"],
["Trauma", "Laryngeal fracture, mandibular/maxillary fracture, inhalation burn, cervical spine injury"],
["Obesity", "Redundant pharyngeal tissue, large tongue, short neck, restricted neck extension"],
["Spinal pathology", "Rheumatoid arthritis (affects arytenoids), ankylosing spondylitis, halo traction"],
["Anatomical variations", "Micrognathia, prognathism, large tongue, arched palate, prominent upper incisors, short neck"],
["Post-surgical/radiotherapy","Neck fibrosis, trismus, limited mouth opening, post-laryngectomy"],
["Pregnancy", "Enlarged breasts, airway oedema, Mallampati class increases near term"],
],
[4*cm, 12.2*cm]
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 4. AIRWAY ASSESSMENT
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Preoperative Airway Assessment", "4"), HR(),
P("A thorough airway assessment is mandatory before every anaesthetic. It should include:"),
B("<b>History:</b> Previous difficult airway, snoring/OSA, relevant past surgical/dental history, stridor"),
B("<b>Examination:</b> Systematic assessment using multiple bedside tests"),
B("<b>Records review:</b> Prior anaesthetic charts for any documented airway difficulty"),
SP(6),
H2("A. Mallampati Classification (Modified Samsoon & Young)"),
CODE(
"MALLAMPATI CLASSIFICATION:\n"
"(Patient seated, mouth fully open, tongue protruded, NO phonation)\n"
"\n"
" CLASS I CLASS II CLASS III CLASS IV\n"
" +--------+ +--------+ +--------+ +--------+\n"
" | SOFT | | SOFT | | SOFT | | |\n"
" | PALATE | | PALATE | | PALATE | | HARD |\n"
" | | | | | only | | PALATE |\n"
" | UVULA | | UVULA | | | | only |\n"
" | visible| | partial| | | | |\n"
" | TONSI- | | | | | | |\n"
" | LLAR | | | | | | |\n"
" | PILLARS| | | | | | |\n"
" +--------+ +--------+ +--------+ +--------+\n"
" Entire soft Soft palate, Soft palate, Hard palate\n"
" palate, uvula, uvula but NO base of only visible\n"
" tonsils, tonsils/pillars uvula only\n"
" pillars visible\n"
"\n"
" Classes I & II = Likely easy intubation\n"
" Classes III & IV = Predicts difficult laryngoscopy\n"
" Sensitivity ~60%, Specificity ~70%"
),
SP(6),
H2("B. Cormack–Lehane Grading (Direct Laryngoscopy View)"),
CODE(
"CORMACK-LEHANE LARYNGOSCOPY GRADES:\n"
"\n"
" GRADE 1 GRADE 2a/b GRADE 3a/b GRADE 4\n"
" +---------+ +---------+ +---------+ +---------+\n"
" | Entire | | Partial| | Only | | Soft |\n"
" | glottis| | glottis| | epiglot| | palate |\n"
" | visible| | 2a:ant | | tis | | only |\n"
" | | | commis-| | visible| | No lary|\n"
" | | | sure | | 3a:tip | | nx seen|\n"
" | VCs | | 2b:post| | 3b:only| | |\n"
" | \/\/ | | commis-| | epiglot| | |\n"
" +---------+ +---------+ +---------+ +---------+\n"
"\n"
" Grade 1 = Easy intubation\n"
" Grade 2a = Usually easy; Grade 2b = May need adjunct\n"
" Grade 3a = Difficult; Grade 3b = Very difficult\n"
" Grade 4 = Intubation not possible without special equipment"
),
SP(6),
H2("C. Other Bedside Tests"),
tbl(
["Test", "Normal Value", "Significance if Abnormal"],
[
["Interincisor gap (mouth opening)", ">3 finger-breadths (>4 cm)", "Restricted: suggests TMJ disease, trismus, or micrognathia"],
["Thyromental distance (TMD)", ">6.5 cm (3 finger-breadths)", "<6 cm = predicts difficult laryngoscopy (receding mandible)"],
["Sternomental distance (SMD)", ">12.5 cm (head extended)", "<12.5 cm = restricted neck extension; difficult intubation"],
["Neck extension", ">35°", "Limited: ankylosing spondylitis, RA, obesity, trauma"],
["Hyomental distance", ">7 cm", "Short distance = reduced submandibular space"],
["Upper lip bite test (ULBT)", "Class I: Lower incisors bite above upper lip", "Class III = cannot bite upper lip = likely difficult"],
["Wilson risk score", "Score 0 (low)", "Score ≥2 = significant risk of difficult intubation"],
],
[4.2*cm, 3.8*cm, 8.2*cm]
),
SP(4),
N("No single test is foolproof. The LEMON mnemonic is a useful aide-memoire:"
" Look, Evaluate (3-3-2 rule), Mallampati, Obstruction, Neck mobility."),
SP(4),
H2("D. The 3-3-2 Rule"),
CODE(
"3-3-2 RULE:\n"
"\n"
" [3] Mouth opening: >= 3 finger-breadths between upper and lower incisors\n"
" [3] Hyomental space: >= 3 finger-breadths from hyoid to mandible tip\n"
" [2] Thyromental space: >= 2 finger-breadths from thyroid notch to floor of mouth\n"
"\n"
" If ANY measurement fails the rule --> likely difficult laryngoscopy"
),
SP(6),
H2("E. Predictors of Difficult Mask Ventilation (MOANS)"),
CODE(
"MOANS Mnemonic:\n"
" M Mask seal difficult (beard, facial deformity, trauma)\n"
" O Obesity / Obstruction (BMI >26 kg/m2, or airway obstruction)\n"
" A Age > 55 years (reduced airway tone)\n"
" N No teeth (edentulous) (poor mask seal without dentures in situ)\n"
" S Stiffness of lungs (severe COPD, asthma, ARDS)"
),
SP(6),
PageBreak(),
]
# ══════════════════════════════════════════════════════════════════════════════
# 5. ASA DIFFICULT AIRWAY ALGORITHM
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("ASA Difficult Airway Algorithm (2022 Updated Guidelines)", "5"), HR(),
P("The ASA algorithm stratifies management into three scenarios based on the clinical context "
"and the ability to ventilate/oxygenate the patient:"),
B("<b>Scenario 1:</b> Predicted difficult airway → Awake intubation"),
B("<b>Scenario 2:</b> Unanticipated difficult intubation with ADEQUATE oxygenation (Non-Emergency Pathway)"),
B("<b>Scenario 3:</b> Unanticipated difficult intubation with INADEQUATE oxygenation (Emergency Pathway – CICO)"),
SP(8),
CODE(
"ASA DIFFICULT AIRWAY ALGORITHM – OVERVIEW\n"
"=========================================\n"
"\n"
" AIRWAY ASSESSMENT\n"
" |\n"
" +-----+------+\n"
" | |\n"
" ANTICIPATED UNANTICIPATED\n"
" DIFFICULT DIFFICULT\n"
" AIRWAY AIRWAY\n"
" | |\n"
" v v\n"
"AWAKE INTUBATION Induce GA + attempt intubation\n"
" | |\n"
" | +-------+-------+\n"
" | | |\n"
" | SpO2 OK? SpO2 FALLING\n"
" | | |\n"
" | NON-EMERGENCY EMERGENCY\n"
" | PATHWAY PATHWAY (CICO)\n"
" | | |\n"
" | (see box A) (see box B)\n"
" |\n"
" v\n"
"AWAKE INTUBATION OPTIONS:\n"
" 1. Awake flexible bronchoscopic intubation (GOLD STANDARD)\n"
" 2. Awake video laryngoscopy\n"
" 3. Awake blind nasal intubation\n"
" 4. Awake surgical airway (anticipated CICO)\n"
"\n"
"+---------------------------+ +-------------------------------+\n"
"| BOX A: NON-EMERGENCY PATH | | BOX B: EMERGENCY PATH (CICO) |\n"
"| Adequate SpO2 | | SpO2 FALLING despite all |\n"
"| | | attempts |\n"
"| 1. Video laryngoscopy | | |\n"
"| (best first option) | | 1. SGA / LMA (rescue) |\n"
"| 2. Alternative blade | | 2. LMA-guided intubation |\n"
"| 3. Intubating LMA (ILMA) | | (FOB or Aintree catheter) |\n"
"| 4. Flexible bronchoscope | | 3. Emergency cricothyrotomy |\n"
"| 5. Lightwand / bougie | | (SURGICAL AIRWAY) |\n"
"| 6. Awaken patient | | |\n"
"| (if appropriate) | | *** CALL FOR HELP *** |\n"
"+---------------------------+ +-------------------------------+"
),
SP(6),
N("Key principle: Attempts at intubation should be limited (maximum 3 attempts) before declaring "
"failed intubation and proceeding to rescue options. The ABILITY TO OXYGENATE is more important "
"than the ability to intubate."),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 6. DAS GUIDELINES
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Difficult Airway Society (DAS) Guidelines 2015", "6"), HR(),
P("The DAS 2015 guidelines for unanticipated difficult intubation in adults describe four sequential plans:"),
SP(4),
CODE(
"DAS 2015 – FOUR SEQUENTIAL PLANS\n"
"==================================\n"
"\n"
"PLAN A: Facemask ventilation + Direct/Video Laryngoscopy\n"
" - Optimise: BURP, head-up tilt, optimal sniffing position\n"
" - Use bougie (gum elastic bougie) as first-line adjunct\n"
" - Maximum 3 (+1) attempts with best attempt possible\n"
" - Declare FAILED INTUBATION after Plan A exhausted\n"
" |\n"
" v\n"
"PLAN B: Maintain Oxygenation with SGA (Second Generation LMA)\n"
" - Insert i-gel or ProSeal LMA\n"
" - Confirm ventilation and SpO2\n"
" - Options: (1) Awaken patient\n"
" (2) Intubate through SGA (fibreoptic/Aintree)\n"
" (3) Continue with SGA if safe\n"
" |\n"
" v (if SGA fails or SpO2 still falling)\n"
"PLAN C: Final Attempt at Facemask Ventilation\n"
" - 2-person technique\n"
" - Reduce anaesthetic\n"
" - Call for help immediately\n"
" |\n"
" v (CANNOT INTUBATE CANNOT OXYGENATE)\n"
"PLAN D: Emergency Front-of-Neck Access (eFONA)\n"
" = Surgical Cricothyrotomy\n"
" SCALPEL – FINGER – BOUGIE – TUBE (4-step)"
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 7. PREOXYGENATION
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Preoxygenation and Apnoeic Oxygenation", "7"), HR(),
P("Preoxygenation replaces nitrogen in the FRC with oxygen, extending safe apnoea time. "
"It is the first and most important step in any difficult airway management."),
SP(4),
tbl(
["Method", "Target", "Comments"],
[
["Tidal volume breathing (standard)", "3–5 min of 100% O₂", "Achieves EtO₂ >90%; ~8 min safe apnoea in healthy adults"],
["8 deep vital capacity breaths", "EtO₂ >90% in 60 s", "Quick alternative when time is critical"],
["CPAP/NIV preoxygenation", "SpO₂ >95%", "Preferred in obese, pregnant, and ICU patients"],
["High-flow nasal oxygen (HFNO)", "Up to 70 L/min", "Apnoeic oxygenation; extends safe apnoea by 5–10 min via oropharyngeal CPAP effect"],
["Ramp position (obese patients)", "Head-up 30–45°", "Aligns oral–pharyngeal–laryngeal axes; increases FRC; reduces aspiration risk"],
],
[4*cm, 3.3*cm, 9*cm]
),
SP(4),
CODE(
"SNIFFING POSITION vs RAMP POSITION:\n"
"\n"
" Standard Sniffing Position: Ramp Position (Obese):\n"
" +-----------------------------+ +-----------------------------+\n"
" | | | ___ |\n"
" | ___ | | / \\ |\n"
" | / \\ <- Head | | | HEAD | |\n"
" | | | slightly ext. | | |_______| elev. |\n"
" | \\___/ Pillow under | | RAMP =================|\n"
" | === occiput | | Blankets under back |\n"
" | Flexion of neck | | until ear-sternal notch|\n"
" | + extension of atlanto- | | horizontal alignment |\n"
" | occipital joint | +-----------------------------+\n"
" +-----------------------------+\n"
"\n"
" Goal: Align oral (O), pharyngeal (P), laryngeal (L) axes\n"
" O-P-L alignment maximises laryngoscopy view"
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 8. AWAKE INTUBATION
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Awake Tracheal Intubation (ATI) – DAS Guidelines 2020", "8"), HR(),
P("<b>Indications for Awake Intubation:</b>"),
B("Predicted difficult airway (Mallampati III/IV, TMD <6 cm, limited neck extension)"),
B("Airway obstruction (tumour, abscess, haematoma, angioedema)"),
B("Full stomach + difficult airway (failed RSI risk)"),
B("Unstable cervical spine"),
B("Severe respiratory compromise where apnoea would be immediately life-threatening"),
SP(6),
H2("Preparation for Awake Intubation (PREPARE mnemonic)"),
CODE(
"PREPARE:\n"
" P Permission (informed consent and patient cooperation)\n"
" R Review equipment (videoscope, flexible bronchoscope, adjuncts)\n"
" E Ensure venous access and monitoring (SpO2, ECG, BP)\n"
" P Premedication: antisialagogue (glycopyrrolate 0.2 mg IV)\n"
" A Airway anaesthesia (topicalisation and/or nerve blocks)\n"
" R Rescue plan (SGA, eFONA team on standby)\n"
" E Equipment check (suction, oxygen, ETT sizes)\n"
),
SP(6),
H2("Airway Topicalisation Techniques"),
CODE(
"TOPICALISATION FOR AWAKE INTUBATION:\n"
"\n"
" ROUTE 1: NEBULISED LIDOCAINE\n"
" Lidocaine 4%, 4-5 mL via nebuliser for 15-20 minutes\n"
" Anaesthetises oropharynx and trachea via inhalation\n"
"\n"
" ROUTE 2: SPRAY-AS-YOU-GO (SAYG)\n"
" Lidocaine 2-4% injected through working channel of bronchoscope\n"
" As bronchoscope advances, apply at: oropharynx --> supraglottis\n"
" --> vocal cords --> trachea\n"
"\n"
" ROUTE 3: NERVE BLOCKS (for experienced practitioners)\n"
" a) Glossopharyngeal nerve block --> oropharynx and base of tongue\n"
" b) Superior laryngeal nerve (SLN) block --> supraglottis\n"
" (inject 2 mL lidocaine 2% between hyoid & thyroid cartilage)\n"
" c) Transtracheal (cricothyroid membrane) block --> subglottis\n"
" (inject 2-3 mL lidocaine 4% at end-expiration; pt coughs to spread)\n"
"\n"
" TOTAL LIDOCAINE DOSE: DO NOT EXCEED 9 mg/kg (with vasoconstrictor)\n"
" or 5 mg/kg (plain)"
),
SP(6),
H2("Sedation for Awake Intubation"),
tbl(
["Agent", "Dose", "Advantage", "Caution"],
[
["Dexmedetomidine", "1 mcg/kg over 10 min, then 0.2–0.7 mcg/kg/hr", "Cooperative sedation, preserves airway, analgesia", "Bradycardia, hypotension"],
["Remifentanil TCI", "0.5–2 ng/mL (Minto model)", "Titratable, smooth, excellent cough suppression", "Respiratory depression at high doses"],
["Midazolam", "1–2 mg IV titrated", "Anxiolysis, amnesia", "Disinhibition; avoid in severe obstruction"],
["Ketamine", "0.3–0.5 mg/kg IV slow", "Preserves airway tone and spontaneous ventilation, analgesia", "Hypersalivation (give glycopyrrolate)"],
],
[3*cm, 3.5*cm, 4.5*cm, 5.2*cm]
),
SP(6),
PageBreak(),
]
# ══════════════════════════════════════════════════════════════════════════════
# 9. AIRWAY DEVICES
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Airway Management Devices and Adjuncts", "9"), HR(),
H2("A. Supraglottic Airway Devices (SGAs)"),
CODE(
"DIAGRAM: LARYNGEAL MASK AIRWAY (LMA) in situ\n"
"\n"
" Proximal end:\n"
" +------------------+\n"
" | 15mm connector |\n"
" | (to circuit) |\n"
" +--------+---------+\n"
" | Shaft (airway tube)\n"
" |\n"
" Distal end (in oropharynx):\n"
" +-------------------------------+\n"
" | OROPHARYNX |\n"
" | |\n"
" | Epiglottis |\n"
" | | |\n"
" | ___v___ |\n"
" | /ELLIPTI\\ <- Bowl/mask |\n"
" | | CUFF | sits over |\n"
" | \\ / laryngeal |\n"
" | \\ APE / inlet |\n"
" | \\ / |\n"
" | --- <- Vocal cords |\n"
" | TRACHEA |\n"
" +-------------------------------+\n"
"\n"
" Inflation port (pilot balloon) fills cuff with 20-30 mL air\n"
" Aperture bars prevent epiglottis obstruction"
),
SP(4),
tbl(
["SGA Type", "Key Features", "Indications"],
[
["Classic LMA", "Re-usable; no gastric drainage", "Elective surgery; rescue ventilation"],
["ProSeal LMA", "Gastric drainage channel; better seal (up to 30 cmH₂O)", "PPV; high-risk regurgitation"],
["i-gel", "Gel-filled non-inflatable cuff; gastric channel; easy insertion", "Emergency rescue; DAS Plan B first choice"],
["ILMA (Fastrach LMA)","Designed for blind or fibreoptic-guided ETT placement", "Cannot intubate scenario; bridge to intubation"],
["LMA Supreme", "Single-use; reinforced; gastric drainage", "Day-case surgery; obesity"],
],
[3.5*cm, 5.5*cm, 7.2*cm]
),
SP(6),
H2("B. Video Laryngoscopes (VL)"),
CODE(
"VIDEO LARYNGOSCOPE – SCHEMATIC:\n"
"\n"
" Handle\n"
" +-------+\n"
" | | <- Screen or connects to external monitor\n"
" | DISP- |\n"
" | LAY |\n"
" +---+---+\n"
" | Blade\n"
" +------+\n"
" | Shaft| <- Camera/lens at distal end of blade\n"
" +--+---+\n"
" | Camera at 60-90 degree angulation\n"
" v\n"
" [GLOTTIS viewed on screen]\n"
" Vocal cords seen WITHOUT direct line-of-sight\n"
"\n"
" Types:\n"
" 1. Channelled (e.g., KingVision, Airtraq):\n"
" - ETT guided along dedicated channel\n"
" - No stylet needed; ETT pre-loaded\n"
"\n"
" 2. Non-channelled (e.g., McGrath, C-MAC, GlideScope):\n"
" - Requires hyperangulated stylet to match blade curve\n"
" - Better view but ETT placement needs practice\n"
"\n"
" ADVANTAGE over DL: Improves CL grade by 1-2 grades\n"
" Does not require alignment of airway axes\n"
" Ideal for cervical spine immobilisation"
),
SP(6),
H2("C. Flexible Fibreoptic Bronchoscope (FOB) / Flexible Intubation Scope"),
CODE(
"FOB-GUIDED INTUBATION – TECHNIQUE:\n"
"\n"
" NASAL APPROACH (most common for awake intubation):\n"
"\n"
" Step 1: Pre-load ETT (6.0-7.0 mm ID) onto bronchoscope\n"
" Step 2: Topicalise nostril with lidocaine + vasoconstricor\n"
" Step 3: Pass bronchoscope through nostril\n"
" Nasopharynx --> Oropharynx --> Posterior larynx\n"
" Step 4: Advance under vision:\n"
" Pass between vocal cords\n"
" --> Identify carina\n"
" Step 5: Railrail ETT over bronchoscope into trachea\n"
" Step 6: Withdraw bronchoscope; confirm ETT position\n"
" (visualise carina through ETT before securing)\n"
"\n"
" ORAL APPROACH:\n"
" Use Berman or Williams airway to guide scope midline\n"
" Or use intubating LMA as conduit (LMA + FOB + Aintree catheter)\n"
"\n"
" LIMITATIONS:\n"
" - Blood/secretions impair vision\n"
" - Requires patient cooperation (awake)\n"
" - Learning curve\n"
" - NOT first-line in CICO emergency"
),
SP(6),
H2("D. Gum Elastic Bougie (Eschmann Introducer)"),
CODE(
"GUM ELASTIC BOUGIE:\n"
"\n"
" +----------------------------------------+\n"
" | 60 cm long woven polyester rod |\n"
" | 40-degree distal angle (Coude tip) |\n"
" | 15 Fr diameter (fits all ETTs >=6mm) |\n"
" +----------------------------------------+\n"
" Distal tip: bent 40 degrees upward (Coude)\n"
" \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ --> --> 40 deg tip\n"
"\n"
" Indication: Cormack-Lehane Grade 3 (epiglottis only visible)\n"
"\n"
" Technique:\n"
" 1. Insert bougie under epiglottis with coude tip anterior\n"
" 2. CLICK sign: clicks as tip rides over tracheal rings\n"
" (confirms tracheal placement; absent in oesophagus)\n"
" 3. HOLD-UP sign at 22-26 cm = bougie wedged in bronchus\n"
" (confirms tracheal placement)\n"
" 4. Railrail ETT over bougie; remove bougie"
),
SP(6),
PageBreak(),
]
# ══════════════════════════════════════════════════════════════════════════════
# 10. RSI
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Rapid Sequence Induction (RSI)", "10"), HR(),
P("<b>Indications:</b> Full stomach, emergency surgery, symptomatic GORD, pregnancy, bowel obstruction, "
"recent trauma. RSI avoids positive-pressure mask ventilation to reduce aspiration risk."),
SP(4),
CODE(
"RSI SEQUENCE (Modified DAS/NAP4 recommended approach):\n"
"\n"
" 1. PREPARE: IV access, monitoring, suction ON, tilt-table ready,\n"
" difficult airway equipment at bedside\n"
" 2. PREOXYGEN.: 3 min tidal volume breathing 100% O2 (or 8 vital cap.)\n"
" Head-up 20-30 degrees\n"
" 3. PREMED: Consider fentanyl 1-2 mcg/kg (blunt intubation response)\n"
" Antacid (sodium citrate 30 mL)\n"
" 4. CRICOID: Apply cricoid pressure (Sellick's manoeuvre):\n"
" 10 N (awake) --> 30 N (after LOC)\n"
" 5. INDUCTION: Propofol 1-2 mg/kg OR Thiopentone 3-5 mg/kg\n"
" (Ketamine 1-2 mg/kg if haemodynamically compromised)\n"
" 6. RELAXANT: Succinylcholine 1.5 mg/kg IV (gold standard)\n"
" OR Rocuronium 1.2 mg/kg (if SCh contraindicated)\n"
" [Sugammadex 16 mg/kg reversal must be available]\n"
" 7. INTUBATE: After 60 seconds (SCh) / 90 seconds (Roc)\n"
" Direct or video laryngoscopy\n"
" 8. CONFIRM: Capnography (gold standard) + auscultation\n"
" 9. RELEASE: Cricoid pressure after confirmed intubation\n"
"\n"
" FAILED RSI --> DO NOT repeat without calling for help\n"
" --> Move to DAS Plan B immediately"
),
SP(4),
N("Cricoid pressure is CONTRAINDICATED if active vomiting or suspected laryngeal fracture."),
SP(4),
tbl(
["Drug", "Dose", "Onset", "Duration", "Contraindications"],
[
["Succinylcholine (SCh)", "1.5 mg/kg IV", "45–60 s", "8–12 min", "Hyperkalaemia, burns >24h, denervation injuries, myopathies, malignant hyperthermia susceptibility, pseudocholinesterase deficiency"],
["Rocuronium (high dose)", "1.2 mg/kg IV", "60–90 s", "60–90 min", "None absolute (sugammadex reversal must be available)"],
],
[3*cm, 2.2*cm, 1.8*cm, 2.2*cm, 7*cm]
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 11. CICO & CRICOTHYROTOMY
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Cannot Intubate, Cannot Oxygenate (CICO) – Emergency Front-of-Neck Access", "11"), HR(),
P("CICO (also termed CICV – Cannot Intubate Cannot Ventilate) is the most life-threatening airway emergency. "
"SpO₂ will fall rapidly, with brain damage in 4–5 minutes and death within 10 minutes of complete airway loss. "
"<b>Immediate action is mandatory.</b>"),
SP(4),
CODE(
"RECOGNITION OF CICO:\n"
"\n"
" All of the following must be present:\n"
" [1] Cannot intubate trachea (>3 failed attempts)\n"
" [2] Cannot maintain SpO2 despite:\n"
" - Facemask ventilation (2-person, oral airway, optimal)\n"
" - SGA insertion (at least 1 attempt, optimal insertion)\n"
" [3] SpO2 FALLING and patient at risk of hypoxic injury\n"
"\n"
" --> DECLARE CICO OUT LOUD\n"
" --> CALL FOR HELP immediately\n"
" --> PROCEED TO eFONA without delay"
),
SP(6),
H2("Emergency Front-of-Neck Access (eFONA) – Surgical Cricothyrotomy"),
CODE(
"ANATOMY OF CRICOTHYROID MEMBRANE (CTM):\n"
"\n"
" ANTERIOR NECK VIEW:\n"
" +---------------------------------------------------+\n"
" | |\n"
" | HYOID BONE ============================ |\n"
" | |\n"
" | THYROHYOID MEMBRANE |\n"
" | |\n"
" | +--------------------------------------+ |\n"
" | | THYROID CARTILAGE | |\n"
" | | (Adam's apple / Laryngeal prominence)| |\n"
" | +--------------------------------------+ |\n"
" | ||| |\n"
" | *** CRICOTHYROID MEMBRANE *** |\n"
" | (midline; 9 mm high x 30 mm wide) |\n"
" | PALPATED as soft spot below thyroid cartilage |\n"
" | *** TARGET SITE FOR eFONA *** |\n"
" | ||| |\n"
" | +--------------------------------------+ |\n"
" | | CRICOID CARTILAGE | |\n"
" | +--------------------------------------+ |\n"
" | |\n"
" | Tracheal rings below |\n"
" +---------------------------------------------------+\n"
"\n"
" LANDMARKS for palpation:\n"
" 1. Stabilise larynx with non-dominant hand (Laryngeal Handshake)\n"
" 2. Identify thyroid cartilage notch\n"
" 3. Slide finger caudally to first soft indentation = CTM"
),
SP(6),
CODE(
"SURGICAL CRICOTHYROTOMY – SCALPEL-FINGER-BOUGIE TECHNIQUE:\n"
"(DAS / DART recommended technique for eFONA)\n"
"\n"
"STEP 1 – SCALPEL:\n"
" - Extend neck (shoulder roll if needed)\n"
" - Stabilise larynx with non-dominant hand (laryngeal handshake)\n"
" - Identify CTM by palpation (or ultrasound if available)\n"
" - Make a horizontal stab incision through skin AND CTM\n"
" (10-scalpel blade; horizontal 1-2 cm incision, lower third of CTM)\n"
"\n"
"STEP 2 – FINGER:\n"
" - Insert tracheal hook or index finger into incision\n"
" - Hook inferiorly on cricoid cartilage to stabilise opening\n"
" - Dilate and confirm entry into tracheal lumen\n"
"\n"
"STEP 3 – BOUGIE:\n"
" - Insert gum elastic bougie through incision into trachea\n"
" - Advance caudally (feel tracheal rings as clicks)\n"
"\n"
"STEP 4 – TUBE:\n"
" - Railrail a 6.0 mm cuffed ETT over bougie\n"
" - Inflate cuff; confirm with capnography\n"
" - Secure tube; arrange for definitive surgical airway (formal\n"
" tracheostomy) within 24-72 hours\n"
"\n"
" +------------+ +------------+ +------------+ +----------+\n"
" | SCALPEL | -> | FINGER | -> | BOUGIE | -> | TUBE |\n"
" | (incision) | | (dilate + | | (into | | (6.0 ETT)|\n"
" | | | confirm) | | trachea) | | |\n"
" +------------+ +------------+ +------------+ +----------+"
),
SP(4),
tbl(
["eFONA Method", "Success Rate", "Comments"],
[
["Surgical cricothyrotomy (scalpel-finger-bougie)", "~90–95%", "DAS recommended; most reliable in CICO"],
["Cannula cricothyrotomy (Seldinger)", "~50–60% (anaesthesia providers)", "Higher failure rate; used as bridge; risk of kinking"],
["Percutaneous transtracheal jet ventilation (PTJV)", "Temporising only", "Barotrauma risk; requires patent upper airway for exhalation"],
],
[5.2*cm, 3*cm, 8*cm]
),
SP(4),
N("A surgical airway is NOT a failed airway. It is the correct and life-saving decision when CICO is declared. Delay is the main cause of preventable death."),
SP(6),
PageBreak(),
]
# ══════════════════════════════════════════════════════════════════════════════
# 12. SPECIAL SITUATIONS
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Difficult Airway in Special Situations", "12"), HR(),
tbl(
["Situation", "Key Considerations", "Preferred Approach"],
[
["Obese patient (BMI >35)",
"Reduced FRC; rapid desaturation; large tongue; Mallampati higher; OSAS",
"Ramp position; HFNO preoxygenation; video laryngoscopy; limit attempts"],
["Full stomach / RSI",
"Aspiration risk; cannot mask ventilate between attempts",
"RSI with succinylcholine or high-dose rocuronium; cricoid pressure; DAS Plan B if failed"],
["Trauma / C-spine",
"Manual in-line axial stabilisation (MIAS); restricted neck movement; blood",
"Video laryngoscopy with MIAS; awake intubation if time; eFONA if CICO"],
["Obstetric (Grade 4 CS)",
"Failed intubation 8x more common; rapid desaturation; Ramped position essential",
"Preoxygenation; RSI; ILMA or i-gel rescue; use DAS Obstetric Guidelines"],
["Burns / inhalation injury",
"Progressive airway oedema; early intubation mandatory; circumferential burns may limit DL",
"Early awake intubation; anticipate worsening oedema; surgical airway if delayed"],
["Head and neck tumour",
"Distorted anatomy; bleeding; trismus; post-radiotherapy fibrosis",
"Awake fibreoptic intubation (gold standard); ENT surgical airway standby"],
["Paediatric difficult airway",
"Large occiput; large tongue; small mouth; larynx more anterior/superior",
"Appropriate size equipment; videolaryngoscopy; spontaneous ventilation techniques"],
],
[3*cm, 5.5*cm, 7.7*cm]
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 13. EXTUBATION OF DIFFICULT AIRWAY
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Extubation of the Difficult Airway", "13"), HR(),
P("Extubation following a difficult intubation carries significant risk. The DAS Extubation Guidelines "
"(2012) recommend categorising every extubation as 'low-risk' or 'at-risk' and following a systematic plan."),
SP(4),
CODE(
"EXTUBATION STRATEGY:\n"
"\n"
" STEP 1 – OPTIMISE: Ensure patient is fully awake (GCS 15),\n"
" neuromuscular blockade fully reversed (TOF ratio >=0.9)\n"
" Haemodynamically stable; adequate analgesia\n"
"\n"
" STEP 2 – PLAN: Have a re-intubation plan before extubating\n"
" Equipment ready: suction, VL, SGA, eFONA kit\n"
" Personnel available\n"
"\n"
" STEP 3 – EXCHANGE CATHETER (Airway Exchange Catheter – AEC):\n"
" For highest-risk extubations:\n"
" - Insert AEC (Cook Medical) through ETT into trachea (22 cm mark at teeth)\n"
" - Withdraw ETT OVER the AEC leaving AEC in trachea\n"
" - If re-intubation needed: railrail new ETT over AEC\n"
" - AEC can deliver 100% O2 and allow jet ventilation\n"
" - Leave in situ for 30-60 minutes post-extubation\n"
"\n"
" STEP 4 – POSITION: Head-up 30-45 degrees post-extubation\n"
" Supplemental O2; monitoring for 30-60 min\n"
" HFNO if high risk (obese, OSA)"
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 14. DIFFICULT AIRWAY TROLLEY
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Difficult Airway Trolley – Essential Equipment", "14"), HR(),
tbl(
["Category", "Equipment"],
[
["Laryngoscopy", "DL blades (Macintosh 3, 4; Miller 2, 3); Video laryngoscope (e.g., McGrath, C-MAC, GlideScope)"],
["Endotracheal tubes", "Sizes 5.0–9.0 (every 0.5 mm); Preformed nasal RAE; Armoured; Microlaryngoscopy tubes"],
["Intubation adjuncts", "Gum elastic bougies (reusable + single-use); Stylets; Magill forceps; Lubrication"],
["Supraglottic airways", "i-gel (sizes 3, 4, 5); ProSeal LMA; ILMA (Fastrach) + dedicated ETT"],
["Fibreoptic equipment", "Flexible intubation bronchoscope; Light source; Berman/Williams airway; Anti-fog solution"],
["eFONA kit", "Scalpel (no. 10); Tracheal dilator (Trousseau); Gum elastic bougie; Cuffed ETT 6.0; Tracheostomy tube"],
["Drugs", "Topical lidocaine 4% (spray + nebuliser); Vasoconstrictors; Glycopyrrolate; Ketamine; Dexmedetomidine"],
["Confirmation", "Waveform capnograph (GOLD STANDARD); Oesophageal detector device; Colourimetric CO₂ detector"],
["Communication", "Difficult Airway Alert card/label; MedicAlert referral; Documentation"],
],
[4*cm, 12.2*cm]
),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 15. CONFIRMATION & POST-INTUBATION
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Confirmation of Tracheal Intubation", "15"), HR(),
tbl(
["Method", "Sensitivity", "Specificity", "Notes"],
[
["Waveform capnography", "~100%", "~100%", "GOLD STANDARD; confirms ETT in trachea with >3 CO₂ waveforms; also confirms cardiac output"],
["Direct visualisation (VL/bronchoscope)", "High", "High", "See ETT pass through cords; confirm carina position through tube"],
["Chest rise bilateral", "Moderate", "Moderate", "Unreliable alone; can miss oesophageal intubation"],
["Auscultation (bilateral)", "Moderate", "Moderate", "5-point auscultation; exclude right mainstem intubation"],
["Fogging of ETT", "Low", "Low", "Not reliable; condensation can occur in oesophagus"],
["Oesophageal detector device", "High", "High", "Bulb or syringe aspirates freely if in trachea; collapses if oesophageal"],
],
[4.5*cm, 2.3*cm, 2.3*cm, 7.1*cm]
),
SP(4),
N("Oesophageal intubation is a NEVER EVENT. Waveform capnography must be used for ALL intubations."),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 16. COMMUNICATION & DOCUMENTATION
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Communication, Documentation and Follow-Up", "16"), HR(),
P("After a difficult airway event:"),
B("Document the difficulty in detail: techniques attempted, number of attempts, devices used, outcome"),
B("Complete a <b>Difficult Airway Alert</b> and attach to medical records / electronic health record"),
B("Inform and counsel the patient with written documentation"),
B("Refer to a national registry (e.g., <b>MedicAlert National Difficult Airway/Intubation Registry</b>)"),
B("Debrief the team; report to clinical governance if adverse outcome occurred"),
B("Consider issuing a MedicAlert bracelet to the patient"),
N("Failure to communicate a known difficult airway to future providers is a preventable cause of anaesthesia-related morbidity and mortality."),
SP(6),
]
# ══════════════════════════════════════════════════════════════════════════════
# 17. SUMMARY DIAGRAM – COMPLETE OVERVIEW
# ══════════════════════════════════════════════════════════════════════════════
story += [
H1("Complete Difficult Airway Management – Overview Diagram", "17"), HR(),
CODE(
"COMPLETE DIFFICULT AIRWAY OVERVIEW\n"
"===================================\n"
"\n"
" PREOPERATIVE AIRWAY ASSESSMENT\n"
" (LEMON, Mallampati, TMD, SMD, mouth opening)\n"
" |\n"
" +--------+--------+\n"
" | |\n"
" ANTICIPATED UNANTICIPATED\n"
" DIFFICULT DIFFICULT\n"
" | |\n"
" v v\n"
" AWAKE INTUBATION Induce GA + attempt\n"
" (first choice) laryngoscopy\n"
" - Topicalisation |\n"
" - Dexmed/Remi |\n"
" - Flexible FOB +---+----+\n"
" - Awake VL | |\n"
" - Surgical a/w CAN VENTILATE CANNOT\n"
" if ANTICIPATED | VENTILATE\n"
" CICO | |\n"
" NON-EMERGENCY EMERGENCY\n"
" PATHWAY CICO PATHWAY\n"
" | |\n"
" +-------+ +----+-----+\n"
" | | |\n"
" VIDEO-LX SGA RESCUE eFONA\n"
" (VL + bougie) (i-gel) CRICOTHYRO-\n"
" Alt blade Awaken? TOMY\n"
" ILMA LMA-FOB (SCALPEL-\n"
" Flex FOB intubation FINGER-\n"
" Awaken pt BOUGIE-\n"
" TUBE)\n"
"\n"
"PREOXYGENATION at EVERY step:\n"
" BVM + oral airway --> SGA --> HFNO (apnoeic oxygenation)\n"
"\n"
"MAXIMUM ATTEMPTS: 3 (+1 by most experienced) for laryngoscopy\n"
" 3 for SGA insertion\n"
"THEN: Declare failed, call for help, next plan\n"
"\n"
"REMEMBER: OXYGENATION > INTUBATION at all times"
),
SP(8),
HR(),
Paragraph("<b>References</b>", h2),
SP(4),
Paragraph("1. Miller's Anesthesia, 10th Edition (Pardo & Miller, eds.) – Airway Management chapters", ref_s),
Paragraph("2. Morgan & Mikhail's Clinical Anaesthesiology, 7th Edition – Chapter 19 (Airway Management)", ref_s),
Paragraph("3. Barash, Cullen & Stoelting's Clinical Anesthesia, 9th Edition – Chapter 28 (Difficult Airway)", ref_s),
Paragraph("4. Cummings Otolaryngology Head and Neck Surgery – Chapter 5 (General Considerations of Anaesthesia and Difficult Airway)", ref_s),
Paragraph("5. Frerk C et al. Difficult Airway Society 2015 guidelines for management of unanticipated difficult intubation in adults. Br J Anaesth. 2015;115:827–848", ref_s),
Paragraph("6. Ahmad I et al. Difficult Airway Society guidelines for awake tracheal intubation (ATI) in adults. Anaesthesia. 2020;75:509–528", ref_s),
Paragraph("7. Apfelbaum JL et al. Practice guidelines for management of the difficult airway: ASA Task Force update. Anesthesiology. 2022;136:31–81", ref_s),
Paragraph("8. NAP4: Major complications of airway management in the UK. Report and findings. RCoA/DAS. 2011", ref_s),
]
doc.build(story)
print(f"PDF saved: {OUTPUT}")
mkdir -p /home/daytona/workspace/difficult-airway && python3 /home/daytona/workspace/difficult-airway/generate_pdf.py
~/difficult-airway/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/difficult-airway/generate_pdf.py'
python3 /home/daytona/workspace/difficult-airway/generate_pdf.py
ls -lh /home/daytona/workspace/difficult-airway/Difficult_Airway_PG_Exam.pdf
Difficult Airway PG Exam
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Definition | ASA definition; 5 distinct clinical problems; adverse outcomes |
| 2. Incidence | Incidence table (DMV, DTI, failed intubation, CICO) |
| 3. Causes | 9-category table (infections, tumours, congenital, trauma, obesity, etc.) |
| 4. Airway Assessment | Mallampati diagram; Cormack-Lehane grading diagram; bedside tests table; 3-3-2 rule; MOANS mnemonic |
| 5. ASA Algorithm | Full algorithm diagram with 3 pathways (anticipated, non-emergency, CICO) |
| 6. DAS 2015 Guidelines | Plans A → B → C → D with sequential flowchart diagram |
| 7. Preoxygenation | Methods table; sniffing vs ramp position diagram; O-P-L axis alignment |
| 8. Awake Intubation | Indications; PREPARE mnemonic; topicalisation techniques; sedation table |
| 9. Airway Devices | LMA diagram; video laryngoscope schematic; FOB technique; bougie diagram |
| 10. RSI | Full RSI sequence; SCh vs Rocuronium comparison table |
| 11. CICO & Cricothyrotomy | CTM anatomy diagram; Scalpel-Finger-Bougie-Tube technique with step-by-step diagram; eFONA comparison table |
| 12. Special Situations | Obesity, full stomach, trauma, obstetrics, burns, head/neck tumour, paediatrics |
| 13. Extubation | Airway Exchange Catheter technique; 4-step extubation strategy |
| 14. Airway Trolley | Categorised equipment checklist |
| 15. Confirmation | Capnography gold standard; comparison table of methods |
| 16. Documentation | MedicAlert, Difficult Airway Alert, team debrief |
| 17. Overview Diagram | Complete integrated flowchart of entire difficult airway management |
| References | Miller, Morgan, Barash, DAS 2015, DAS ATI 2020, ASA 2022, NAP4 |