Write a 30 marks answer for Anaesthesia postgraduate exam on the topic of Difficult Airway and Management
difficult airway management anaesthesia postgraduate exam 2024 guidelines ASA DAA
| Component | Assessment |
|---|---|
| L - Look externally | Facial trauma, large incisors, beard, obesity, large tongue |
| E - Evaluate 3-3-2 rule | Interincisor distance <3 cm, hyoid-to-chin <3 cm, floor of mouth-to-thyroid notch <2 cm |
| M - Mallampati | Class III/IV (poor oropharyngeal view) |
| O - Obstruction | Epiglottitis, peritonsillar abscess, Ludwig's angina |
| N - Neck mobility | Extension <35° predicts difficult laryngoscopy |
| Plan | Intervention | Max Attempts |
|---|---|---|
| Plan A | Direct laryngoscopy ± adjuncts (external laryngeal manipulation, bougie, BURP); optimise head position, introduce videolaryngoscopy | 3 attempts maximum |
| Plan B | Supraglottic airway device (2nd generation SGA preferred) as primary oxygenation rescue | 2 attempts |
| Plan C | Face mask ventilation (two-person technique with oral and nasal airways) | Temporary oxygenation |
| Plan D | Emergency surgical airway - eFONA via scalpel-bougie technique | Immediate on CICO declaration |
| Category | Equipment |
|---|---|
| Basic adjuncts | Oral airways, nasal airways, McGill forceps |
| Mask ventilation | Various mask sizes, 2-person technique aids |
| SGAs | LMA Classic, i-gel (sizes 3, 4, 5), ILMA/Fastrach |
| Intubation aids | Bougies (multiple sizes), ETT stylets |
| Video laryngoscopes | C-MAC or GlideScope (hyperangulated + standard blade) |
| Flexible scope | Flexible intubation scope (fibreoptic bronchoscope) |
| Surgical airway | Scalpel, bougie, 6.0 cuffed ETT, Melker kit, needle CTM kit |
| Oxygenation | HFNO device (Optiflow), jet ventilation circuit |
| Section | Marks |
|---|---|
| Definition and incidence | 2 |
| Preoperative airway assessment (history, LEMON, Mallampati, measurements, conditions) | 6 |
| ASA/DAS algorithm (awake vs asleep, steps, CICO) | 6 |
| Management techniques (AFOI, VL, SGA, eFONA with technique detail) | 8 |
| DAS 2025 four-plan approach | 4 |
| Extubation of difficult airway | 2 |
| Special situations + documentation | 2 |
| Total | 30 |
Convert the above answer to a pdf
ls /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
mkdir -p /home/daytona/workspace/difficult-airway && ls /home/daytona/workspace/difficult-airway/
~/difficult-airway/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak
)
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,
leftMargin=2*cm,
rightMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm,
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"TitleStyle",
parent=styles["Title"],
fontSize=16,
textColor=colors.HexColor("#1a3a5c"),
spaceAfter=4,
alignment=TA_CENTER,
)
subtitle_style = ParagraphStyle(
"SubtitleStyle",
parent=styles["Normal"],
fontSize=11,
textColor=colors.HexColor("#2c5282"),
spaceAfter=2,
alignment=TA_CENTER,
)
h1_style = ParagraphStyle(
"H1Style",
parent=styles["Heading1"],
fontSize=13,
textColor=colors.white,
backColor=colors.HexColor("#1a3a5c"),
spaceBefore=12,
spaceAfter=6,
leftIndent=-6,
rightIndent=-6,
borderPad=4,
)
h2_style = ParagraphStyle(
"H2Style",
parent=styles["Heading2"],
fontSize=11,
textColor=colors.HexColor("#1a3a5c"),
spaceBefore=8,
spaceAfter=4,
borderPad=2,
)
h3_style = ParagraphStyle(
"H3Style",
parent=styles["Heading3"],
fontSize=10,
textColor=colors.HexColor("#2c5282"),
spaceBefore=6,
spaceAfter=3,
fontName="Helvetica-Bold",
)
body_style = ParagraphStyle(
"BodyStyle",
parent=styles["Normal"],
fontSize=9.5,
leading=14,
spaceAfter=4,
alignment=TA_JUSTIFY,
)
bullet_style = ParagraphStyle(
"BulletStyle",
parent=styles["Normal"],
fontSize=9.5,
leading=13,
leftIndent=14,
spaceAfter=2,
bulletIndent=4,
)
sub_bullet_style = ParagraphStyle(
"SubBulletStyle",
parent=styles["Normal"],
fontSize=9,
leading=12,
leftIndent=28,
spaceAfter=2,
bulletIndent=18,
)
marks_style = ParagraphStyle(
"MarksStyle",
parent=styles["Normal"],
fontSize=9,
textColor=colors.HexColor("#6b7280"),
italic=True,
spaceAfter=6,
)
note_style = ParagraphStyle(
"NoteStyle",
parent=styles["Normal"],
fontSize=9,
textColor=colors.HexColor("#374151"),
backColor=colors.HexColor("#eff6ff"),
borderPad=6,
spaceBefore=4,
spaceAfter=6,
leading=13,
leftIndent=6,
rightIndent=6,
)
def h1(text): return Paragraph(f" {text}", h1_style)
def h2(text): return Paragraph(text, h2_style)
def h3(text): return Paragraph(text, h3_style)
def body(text): return Paragraph(text, body_style)
def bullet(text): return Paragraph(f"• {text}", bullet_style)
def sub_bullet(text): return Paragraph(f"◦ {text}", sub_bullet_style)
def marks(text): return Paragraph(text, marks_style)
def note(text): return Paragraph(text, note_style)
def sp(h=4): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cbd5e0"), spaceAfter=6, spaceBefore=6)
# --- TABLE HELPER ---
def make_table(headers, rows, col_widths=None, header_bg="#1a3a5c"):
data = [headers] + rows
if col_widths is None:
col_widths = [17*cm / len(headers)] * len(headers)
t = Table(data, colWidths=col_widths)
style = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), colors.HexColor(header_bg)),
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 9),
("FONTNAME", (0, 1), (-1, -1), "Helvetica"),
("FONTSIZE", (0, 1), (-1, -1), 9),
("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.white, colors.HexColor("#f7fafc")]),
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cbd5e0")),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 6),
("RIGHTPADDING", (0, 0), (-1, -1), 6),
])
t.setStyle(style)
return t
# ==================== BUILD CONTENT ====================
story = []
# --- COVER / HEADER ---
story.append(sp(8))
story.append(Paragraph("POSTGRADUATE ANAESTHESIA EXAMINATION", subtitle_style))
story.append(sp(4))
story.append(Paragraph("Difficult Airway and Management", title_style))
story.append(sp(4))
story.append(Paragraph("Model Answer | 30 Marks", subtitle_style))
story.append(sp(2))
story.append(HRFlowable(width="60%", thickness=2, color=colors.HexColor("#1a3a5c"),
hAlign="CENTER", spaceAfter=8, spaceBefore=8))
story.append(sp(4))
# ==================== SECTION 1 ====================
story.append(h1("1. Definition and Incidence [2 marks]"))
story.append(sp(4))
story.append(body(
"The <b>difficult airway</b> is defined by the American Society of Anesthesiologists (ASA, 2022) as "
"the clinical situation in which a conventionally trained anaesthesiologist experiences difficulty "
"with face mask ventilation, difficulty with tracheal intubation, or both."
))
story.append(sp(2))
inc_table = make_table(
["Parameter", "Incidence"],
[
["Difficult mask ventilation", "1.4–7.5%"],
["Impossible mask ventilation", "~0.15%"],
["Difficult laryngoscopy (C-L grade III/IV)", "~5–8%"],
["Failed intubation (elective)", "1 in 2,000"],
["Failed intubation (obstetrics)", "1 in 300"],
["Cannot Intubate - Cannot Oxygenate (CICO)", "~1 in 50,000"],
],
col_widths=[10*cm, 7*cm]
)
story.append(inc_table)
story.append(sp(6))
# ==================== SECTION 2 ====================
story.append(h1("2. Preoperative Airway Assessment [6 marks]"))
story.append(sp(4))
story.append(h2("2a. History"))
for t in [
"Previous anaesthetic records — prior documented difficulty is the single most important predictor",
"Symptoms of airway obstruction: stridor, dysphagia, hoarseness, positional dyspnoea",
"Relevant conditions: obstructive sleep apnoea, rheumatoid arthritis, ankylosing spondylitis, diabetes mellitus ('prayer sign' — stiff joint syndrome)",
"Recent infections, tumours, or radiation to the head and neck",
]:
story.append(bullet(t))
story.append(sp(4))
story.append(h2("2b. LEMON Assessment"))
lemon_table = make_table(
["Letter", "Component", "Details"],
[
["L", "Look externally", "Facial trauma, large incisors, beard, obesity, large tongue"],
["E", "Evaluate 3-3-2 rule", "Interincisor gap <3 cm, hyoid-to-chin <3 cm, floor of mouth to thyroid notch <2 cm"],
["M", "Mallampati", "Class III/IV — poor oropharyngeal view"],
["O", "Obstruction", "Epiglottitis, peritonsillar abscess, Ludwig's angina"],
["N", "Neck mobility", "Extension <35° predicts difficult laryngoscopy"],
],
col_widths=[1.5*cm, 4*cm, 11.5*cm]
)
story.append(lemon_table)
story.append(sp(4))
story.append(h2("2c. Mallampati Classification"))
story.append(body(
"Performed with patient seated, mouth fully open, tongue maximally protruded, no phonation:"
))
mallampati_table = make_table(
["Class", "Structures Visible", "Significance"],
[
["Class I", "Soft palate, uvula, fauces, tonsillar pillars", "Easy intubation expected"],
["Class II", "Soft palate, uvula, fauces", "Relatively easy"],
["Class III", "Soft palate, base of uvula only", "Difficult intubation likely"],
["Class IV", "Hard palate only", "Very difficult intubation"],
],
col_widths=[2.5*cm, 8*cm, 6.5*cm]
)
story.append(mallampati_table)
story.append(sp(4))
story.append(h2("2d. Cormack–Lehane Grading (at Laryngoscopy)"))
cl_table = make_table(
["Grade", "View"],
[
["Grade I", "Full view of glottis"],
["Grade II", "Only posterior commissure visible"],
["Grade III", "Only epiglottis visible (no glottic structures)"],
["Grade IV", "Neither epiglottis nor glottis visible"],
],
col_widths=[3*cm, 14*cm]
)
story.append(cl_table)
story.append(sp(4))
story.append(h2("2e. Key Measurements"))
story.append(make_table(
["Measurement", "Threshold", "Significance"],
[
["Thyromental distance (TMD)", "<6.5 cm", "Predicts difficult laryngoscopy"],
["Sternomental distance", "<12.5 cm (full extension, mouth closed)", "Difficult laryngoscopy"],
["Inter-incisor gap", "<3 cm (2 finger-breadths)", "Difficult instrument placement"],
["Neck extension", "<35°", "Difficult laryngoscopy"],
["Neck circumference", ">40 cm", "Difficult mask ventilation"],
["Mandible to hyoid bone", "<7 cm", "Difficult laryngoscopy"],
],
col_widths=[5*cm, 6.5*cm, 5.5*cm]
))
story.append(sp(4))
story.append(h2("2f. Predictors of Difficult Mask Ventilation (OBESE)"))
for t in [
"<b>O</b>bese — BMI >26 kg/m²",
"<b>B</b>eard",
"<b>E</b>dentulous",
"<b>S</b>noring / obstructive sleep apnoea",
"<b>E</b>lderly (>55 years)",
]:
story.append(bullet(t))
story.append(sp(4))
story.append(h2("2g. Conditions Associated with Difficult Intubation"))
story.append(make_table(
["Category", "Examples"],
[
["Tumours", "Cystic hygroma, hemangioma, haematoma"],
["Infections", "Ludwig's angina, peritonsillar abscess, epiglottitis"],
["Congenital anomalies", "Pierre Robin, Treacher Collins, Goldenhar syndrome, laryngeal atresia"],
["Trauma", "Laryngeal fracture, mandibular/maxillary fracture, inhalation burn, C-spine injury"],
["Systemic disease", "Obesity, rheumatoid arthritis (arytenoid involvement), ankylosing spondylitis"],
["Anatomic variants", "Micrognathia, prognathism, macroglossia, arched palate, short neck, prominent incisors"],
],
col_widths=[4.5*cm, 12.5*cm]
))
story.append(sp(6))
# ==================== SECTION 3 ====================
story.append(h1("3. ASA Difficult Airway Algorithm (2022) [6 marks]"))
story.append(sp(4))
story.append(h2("3a. Step 1 — Assess likelihood of difficulty with:"))
for t in [
"Patient cooperation and consent",
"Face mask ventilation",
"Supraglottic airway (SGA) placement",
"Laryngoscopy",
"Tracheal intubation",
"Surgical airway access",
]:
story.append(bullet(t))
story.append(sp(4))
story.append(h2("3b. Step 2 — Awake vs. Asleep Intubation Decision"))
story.append(h3("Awake intubation is PREFERRED when:"))
for t in [
"Anticipated difficult intubation AND difficult mask ventilation",
"Full stomach/aspiration risk with anticipated difficult airway",
"Haemodynamic instability combined with difficult airway",
"Upper airway obstruction (Ludwig's angina, angioedema, large goitre)",
"Patient unable to tolerate even brief apnoea",
]:
story.append(bullet(t))
story.append(h3("Proceed with GA induction if:"))
for t in [
"Airway predicted to be manageable",
"Appropriate backup, equipment, and personnel are available",
"Patient refuses awake intubation",
]:
story.append(bullet(t))
story.append(sp(4))
story.append(h2("3c. Algorithm Pathways"))
story.append(h3("A. Awake Intubation Pathway:"))
numbered = [
"Topicalise airway ± regional nerve blocks",
"Awake flexible scope intubation (gold standard)",
"Awake video laryngoscopy",
"Awake optical stylet / Bonfils intubating scope",
"Retrograde wire-guided intubation (rarely)",
"<b>If all fail → awake surgical tracheostomy</b>",
]
for i, t in enumerate(numbered, 1):
story.append(Paragraph(f"{i}. {t}", bullet_style))
story.append(h3("B. Anaesthetised Patient — Intubation Fails:"))
for t in [
"Call for help immediately",
"Limit laryngoscopy attempts to 3 (+ 1 by a more experienced operator)",
"Maintain oxygenation — return to mask ventilation between attempts",
"Consider SGA (i-gel, ProSeal LMA, ILMA) as rescue oxygenation device",
"Video laryngoscopy as primary rescue after one failed direct laryngoscopy",
]:
story.append(bullet(t))
story.append(h3("C. CICO (Cannot Intubate – Cannot Oxygenate) — Emergency Pathway:"))
story.append(note(
"<b>CICO is a life-threatening emergency. Declare it immediately and call for help.</b><br/>"
"1. Maximise oxygenation: two-person BMV, oral/nasal airway, SGA attempt<br/>"
"2. If SGA fails or oxygenation remains inadequate — proceed <b>immediately</b> to <b>Emergency Front-of-Neck Access (eFONA)</b><br/>"
"3. Do NOT delay eFONA with repeated failed instrumentation attempts"
))
story.append(sp(6))
# ==================== SECTION 4 ====================
story.append(h1("4. Airway Management Techniques [8 marks]"))
story.append(sp(4))
story.append(h2("4a. Awake Fibreoptic Intubation (AFOI) — Gold Standard for Anticipated Difficult Airway"))
story.append(h3("Preparation:"))
story.append(bullet("Glycopyrrolate 0.2–0.4 mg IM/IV 30–60 min prior (antisialagogue — reduces secretions without CNS crossing)"))
story.append(bullet("Informed consent, psychological preparation, explanation of each step to the patient"))
story.append(h3("Topical Anaesthesia:"))
story.append(bullet("<b>Nasal route:</b> Cocaine 4% or lignocaine 4% + xylometazoline (vasoconstriction)"))
story.append(bullet("<b>Oral route:</b> Lignocaine 10% spray to oropharynx"))
story.append(h3("Nerve Blocks:"))
story.append(bullet("<b>Glossopharyngeal nerve block:</b> 2 mL 2% lignocaine injected into base of palatoglossal arch bilaterally — blocks posterior tongue and oropharynx"))
story.append(bullet("<b>Superior laryngeal nerve block:</b> 3 mL of 2% lignocaine 1 cm below the greater cornu of hyoid, where the internal branch penetrates the thyrohyoid membrane — anaesthetises supraglottic larynx"))
story.append(bullet("<b>Transtracheal block:</b> 4 mL of 4% lignocaine injected through CTM at end-expiration — cough distributes LA throughout the trachea — anaesthetises subglottic larynx and trachea"))
story.append(h3("Sedation:"))
story.append(bullet("Dexmedetomidine 0.5–1 mcg/kg over 10 min — preserves airway tone and spontaneous ventilation, anxiolytic, cooperative patient"))
story.append(bullet("Ketamine sub-dissociative 0.3–0.5 mg/kg — maintains pharyngeal tone, analgesic, bronchodilator"))
story.append(bullet("Avoid benzodiazepines/opioids as primary agents — risk of airway loss"))
story.append(h3("Technique:"))
for t in [
"Pass flexible scope through nares or oropharynx under direct vision",
"Navigate past turbinates, epiglottis, identify vocal cords",
"Advance scope through cords into trachea — confirm tracheal rings",
"Railroads ETT over scope into trachea",
"Confirm position with capnography and fibreoptic view of carina",
]:
story.append(sub_bullet(t))
story.append(sp(4))
story.append(h2("4b. Video Laryngoscopy (VL)"))
story.append(bullet("Devices: GlideScope, C-MAC, McGrath MAC, Airtraq, King Vision"))
story.append(bullet("Indirect glottic view with blade curvatures up to 90 degrees — improves C-L grade by 1–2 grades vs. direct laryngoscopy"))
story.append(bullet("<b>Hyperangulated blades</b> (GlideScope, McGrath): best glottic view in difficult anatomy — require pre-shaped stylet; 'look-say-do' gap between excellent view and successful tube passage"))
story.append(bullet("<b>Standard geometry blades</b> (C-MAC Macintosh profile): allows same technique as DL plus video assistance — preferred for routine use and training"))
story.append(bullet("First-line rescue after failed direct laryngoscopy in DAS 2025 and ASA 2022 guidelines"))
story.append(bullet("Can be used for awake intubation with appropriate topicalisation"))
story.append(sp(4))
story.append(h2("4c. Supraglottic Airways (SGAs)"))
story.append(make_table(
["Device", "Generation", "Features", "Role in Difficult Airway"],
[
["LMA Classic / Unique", "1st", "No gastric port, low seal pressure (~18 cmH₂O)", "Temporary oxygenation rescue"],
["LMA ProSeal / Supreme\ni-gel", "2nd", "Gastric drain port, higher seal pressure (25–30 cmH₂O)", "Rescue oxygenation in CICO — preferred"],
["ILMA / Fastrach", "Intubating", "Rigid handle, designed for blind or fibreoptic-guided intubation", "Conduit for definitive intubation in CICO"],
],
col_widths=[3.5*cm, 2.5*cm, 6*cm, 5*cm]
))
story.append(bullet("SGA oxygenation success rate in CICO: ~95%; intubation through SGA: ~80–85%"))
story.append(sp(4))
story.append(h2("4d. Optical Stylets and Rigid Intubation Scopes"))
story.append(bullet("Bonfils intubating fiberscope, Shikani Optical Stylet"))
story.append(bullet("Particularly useful for limited mouth opening where flexible scope navigation is difficult"))
story.append(bullet("Retromolar approach allows access despite trismus (TMJ limitation)"))
story.append(sp(4))
story.append(h2("4e. Emergency Front-of-Neck Access (eFONA) — Cricothyroidotomy"))
story.append(note(
"<b>Indication:</b> CICO — failure of all non-surgical techniques with deteriorating oxygenation. "
"This is a life-saving procedure and must NOT be delayed."
))
story.append(h3("Anatomy:"))
story.append(bullet("Cricothyroid membrane (CTM) between thyroid cartilage (above) and cricoid cartilage (below)"))
story.append(bullet("Mean width 22 mm, height 9–14 mm in adults; midline is avascular"))
story.append(bullet("Palpation: move finger from thyroid notch downward — first firm ridge is the CTM"))
story.append(h3("Scalpel-Bougie-Tube Technique (DAS 2025 recommended standard):"))
numbered2 = [
"Extend neck; identify and palpate CTM (finger stabilisation)",
"Horizontal stab incision through skin and CTM (scalpel blade #22 or #15)",
"Hook finger into the incision to stabilise larynx and maintain opening",
"Insert bougie with caudal (downward) angulation into trachea",
"Railroad a size 6.0 cuffed ETT (or 6.0 cuffed tracheostomy tube) over the bougie",
"Inflate cuff, ventilate, confirm with capnography",
]
for i, t in enumerate(numbered2, 1):
story.append(Paragraph(f"{i}. {t}", bullet_style))
story.append(h3("Needle Cricothyroidotomy + Jet Ventilation (not primary eFONA):"))
story.append(bullet("14G IV cannula through CTM — high-pressure jet ventilation (50 psi, I:E 1:4)"))
story.append(bullet("Oxygenation only; no CO₂ clearance — maximum 30–45 min before barotrauma"))
story.append(bullet("<b>Not recommended</b> as primary eFONA in DAS 2025 (high failure rate in adults)"))
story.append(bullet("Preferred in children <8 years (surgical CTM landmarks less reliable)"))
story.append(sp(6))
# ==================== SECTION 5 ====================
story.append(h1("5. DAS 2025 Four-Plan Approach (Unanticipated Difficult Airway) [4 marks]"))
story.append(sp(4))
story.append(make_table(
["Plan", "Intervention", "Attempts", "Key Points"],
[
["Plan A", "Direct laryngoscopy ± videolaryngoscopy\nAdjuncts: bougie, BURP, ELM\nOptimise position (ear to sternal notch)", "Max 3", "Introduce VL after 1 failed DL attempt\nLimit trauma with each attempt"],
["Plan B", "2nd-generation SGA insertion\n(i-gel or LMA ProSeal preferred)", "Max 2", "Secure oxygenation as primary goal\nConfirm seal and ventilation"],
["Plan C", "Two-person face mask ventilation\nInsert oral and nasal airways\nMaximise neuromuscular blockade", "Temporary", "Bridge to decision: wake vs eFONA\nDo not persist if SpO₂ falling"],
["Plan D", "Emergency Front-of-Neck Access\nScalpel-bougie-tube technique\nDeclare CICO, call for surgical help", "Immediate", "Life-saving — must not be delayed\nSurgeon should be scrubbed and ready"],
],
col_widths=[1.5*cm, 7.5*cm, 2.5*cm, 5.5*cm]
))
story.append(sp(4))
story.append(note(
"<b>Key principles DAS 2025:</b> (1) Declare difficulty early and call for help; (2) Use cognitive aids/algorithms; "
"(3) Limit total attempts — repeated failure causes trauma and escalates to CICO; "
"(4) Maintain oxygenation as the primary goal at every step; "
"(5) eFONA is not a failure — it is the correct management of CICO."
))
story.append(sp(6))
# ==================== SECTION 6 ====================
story.append(h1("6. Extubation of the Difficult Airway [2 marks]"))
story.append(sp(4))
story.append(body(
"Extubation carries significant risk when the patient was difficult to intubate. "
"The DAS extubation guidelines mandate pre-extubation risk stratification."
))
story.append(h3("Risk Stratification:"))
story.append(bullet("<b>Low risk:</b> Straightforward re-intubation if needed; standard extubation acceptable"))
story.append(bullet("<b>High risk:</b> Further divided into — remediable factors (secretions, posture, residual block) vs. non-remediable (fixed anatomy, airway oedema, prolonged surgery, neck haematoma)"))
story.append(h3("Techniques for High-Risk Extubation:"))
story.append(bullet("<b>Airway exchange catheter (AEC):</b> Leave in situ post-extubation for 30–60 min; allows jet ventilation and re-intubation guidance; warn patient to expect coughing"))
story.append(bullet("<b>Staged extubation with SGA in situ:</b> Remove ETT with LMA already placed as rescue airway"))
story.append(bullet("<b>Awake extubation:</b> Only when protective reflexes fully intact, full neuromuscular reversal confirmed (TOF ratio >0.9), patient cooperative"))
story.append(bullet("Extubate in theatre environment with senior anaesthetist present, not in recovery bay"))
story.append(sp(6))
# ==================== SECTION 7 ====================
story.append(h1("7. Special Situations [2 marks]"))
story.append(sp(4))
story.append(h2("Obesity"))
story.append(bullet("'Ramped' position (ear to sternal notch) improves laryngoscopic view and safe apnoea time"))
story.append(bullet("High-flow nasal oxygen (HFNO/Optiflow) at 30–70 L/min during apnoea significantly extends safe apnoea time (apnoeic oxygenation)"))
story.append(bullet("CPAP preoxygenation achieves higher EtO₂ than face mask alone in morbid obesity"))
story.append(bullet("Rapid desaturation — shorter safe apnoea time; pre-oxygenation to EtO₂ >90% mandatory"))
story.append(h2("Obstetrics"))
story.append(bullet("Failed intubation rate 1 in 300 (10× general surgical population)"))
story.append(bullet("Compounding factors: airway oedema (especially in pre-eclampsia), engorged breasts, full stomach, rapid desaturation, physiological anaemia"))
story.append(bullet("Waking the patient is a valid management option if maternal/fetal condition permits"))
story.append(bullet("Regional anaesthesia (spinal/epidural) preferred whenever clinically feasible"))
story.append(h2("Paediatric Difficult Airway"))
story.append(bullet("Awake intubation poorly tolerated — inhalational induction with sevoflurane (maintaining spontaneous ventilation) preferred"))
story.append(bullet("Cuffed ETTs now acceptable in children <8 years with cuff pressure monitoring (<20 cmH₂O)"))
story.append(bullet("Surgical airway landmarks difficult — needle cricothyroidotomy preferred in children <8 years"))
story.append(bullet("Subglottic diameter smallest part of paediatric airway (cf. adults: glottis)"))
story.append(h2("Unstable Cervical Spine"))
story.append(bullet("Manual in-line stabilisation (MILS) — one person holds head, preventing cervical movement"))
story.append(bullet("MILS does NOT improve and may worsen laryngoscopic view — VL strongly preferred"))
story.append(bullet("Awake fibreoptic intubation remains gold standard for confirmed/suspected C-spine injury"))
story.append(sp(6))
# ==================== SECTION 8 ====================
story.append(h1("8. Documentation and Follow-Up [included in marks]"))
story.append(sp(4))
story.append(body(
"Both the ASA 2022 and DAS guidelines mandate structured follow-up after every difficult airway encounter:"
))
story.append(make_table(
["Action", "Details"],
[
["Anaesthetic record", "Document findings, techniques used, devices, number of attempts, complications"],
["Patient communication", "Written 'difficult airway letter'; advise of clinical signs of complications; MedicAlert bracelet referral"],
["Team communication", "Inform surgical team, recovery staff, ICU if applicable, and primary care physician"],
["Complications follow-up", "Monitor for: mucosal injury, dental damage, aspiration, airway oedema, tracheal trauma, recurrent laryngeal nerve injury"],
],
col_widths=[5*cm, 12*cm]
))
story.append(sp(6))
# ==================== EQUIPMENT TABLE ====================
story.append(h1("Appendix: Difficult Airway Trolley — Minimum Contents"))
story.append(sp(4))
story.append(make_table(
["Category", "Equipment"],
[
["Basic adjuncts", "Oral airways (Guedel sizes 2–5), nasal airways, McGill forceps, lubricant"],
["Mask ventilation", "Various face mask sizes, two-person technique connectors"],
["Supraglottic airways", "LMA Classic (sizes 3, 4, 5), i-gel (sizes 3, 4, 5), ILMA/Fastrach"],
["Intubation adjuncts", "Gum-elastic bougie (multiple sizes), ETT stylets, tube exchangers (AEC)"],
["Video laryngoscopes", "C-MAC (standard + D-blade) or GlideScope, spare batteries/power"],
["Flexible intubation scope", "Fibreoptic bronchoscope/flexible intubation scope + light source"],
["Jet ventilation", "High-pressure jet ventilation circuit (Manujet), 14G cannulae"],
["Surgical airway kit", "Scalpel, gum-elastic bougie, 6.0 cuffed ETT, Melker cricothyrotomy kit"],
["Monitoring", "Capnography (waveform), pulse oximeter, CO₂ detector colorimetric"],
["Drugs", "Lignocaine 4%, cocaine 4%, glycopyrrolate, dexmedetomidine, ketamine, sugammadex"],
],
col_widths=[5*cm, 12*cm]
))
story.append(sp(6))
# ==================== MARKING SCHEME ====================
story.append(h1("Marking Scheme"))
story.append(sp(4))
story.append(make_table(
["Section", "Topic", "Marks"],
[
["1", "Definition and incidence", "2"],
["2", "Preoperative airway assessment (history, LEMON, Mallampati, C-L grading, measurements, conditions)", "6"],
["3", "ASA Difficult Airway Algorithm 2022 (awake vs asleep, CICO pathway)", "6"],
["4", "Management techniques (AFOI, VL, SGA, eFONA with surgical technique detail)", "8"],
["5", "DAS 2025 four-plan approach", "4"],
["6", "Extubation of difficult airway", "2"],
["7", "Special situations + documentation and follow-up", "2"],
["", "TOTAL", "30"],
],
col_widths=[2*cm, 12*cm, 3*cm]
))
story.append(sp(4))
# ==================== REFERENCES ====================
story.append(hr())
story.append(Paragraph("<b>Key References</b>", h3_style))
refs = [
"ASA Task Force. Practice Guidelines for Management of the Difficult Airway. <i>Anesthesiology</i> 2022;136:31–81.",
"Difficult Airway Society. Unanticipated Difficult Intubation in Adults. DAS Guidelines 2025. das.uk.com",
"All India Difficult Airway Association (AIDAA) 2025 Guidelines for unanticipated difficult airway in adults under general anaesthesia. <i>Indian J Anaesth</i> 2025.",
"Morgan GE, Mikhail MS. <i>Clinical Anesthesiology</i>, 7th ed. Chapter 19: Airway Management.",
"Miller RD et al. <i>Miller's Anesthesia</i>, 10th ed. Chapter 40: Airway Management.",
"Barash PG et al. <i>Clinical Anesthesia</i>, 9th ed. Chapter 28: Flexible Intubation Scope.",
]
for r in refs:
story.append(Paragraph(f"• {r}", ParagraphStyle(
"ref", parent=styles["Normal"], fontSize=8.5, leading=12,
leftIndent=10, spaceAfter=3
)))
story.append(sp(12))
story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cbd5e0")))
story.append(Paragraph(
"Generated by Orris AI | Postgraduate Anaesthesia Examination Preparation | June 2026",
ParagraphStyle("footer", parent=styles["Normal"], fontSize=8,
textColor=colors.HexColor("#9ca3af"), alignment=TA_CENTER, spaceBefore=4)
))
# ==================== BUILD ====================
doc.build(story)
print(f"PDF created: {OUTPUT}")
~/difficult-airway/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/difficult-airway/generate_pdf.py'
cat > /home/daytona/workspace/difficult-airway/generate_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import ( SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak ) 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, leftMargin=2*cm, rightMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm, ) styles = getSampleStyleSheet() title_style = ParagraphStyle("TitleStyle", parent=styles["Title"], fontSize=16, textColor=colors.HexColor("#1a3a5c"), spaceAfter=4, alignment=TA_CENTER) subtitle_style = ParagraphStyle("SubtitleStyle", parent=styles["Normal"], fontSize=11, textColor=colors.HexColor("#2c5282"), spaceAfter=2, alignment=TA_CENTER) h1_style = ParagraphStyle("H1Style", parent=styles["Heading1"], fontSize=12, textColor=colors.white, backColor=colors.HexColor("#1a3a5c"), spaceBefore=12, spaceAfter=6, leftIndent=-6, rightIndent=-6, borderPad=5) h2_style = ParagraphStyle("H2Style", parent=styles["Heading2"], fontSize=10.5, textColor=colors.HexColor("#1a3a5c"), spaceBefore=8, spaceAfter=4, fontName="Helvetica-Bold") h3_style = ParagraphStyle("H3Style", parent=styles["Heading3"], fontSize=10, textColor=colors.HexColor("#2c5282"), spaceBefore=5, spaceAfter=3, fontName="Helvetica-Bold") body_style = ParagraphStyle("BodyStyle", parent=styles["Normal"], fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY) bullet_style = ParagraphStyle("BulletStyle", parent=styles["Normal"], fontSize=9.5, leading=13, leftIndent=14, spaceAfter=2, bulletIndent=4) sub_bullet_style = ParagraphStyle("SubBulletStyle", parent=styles["Normal"], fontSize=9, leading=12, leftIndent=28, spaceAfter=2) note_style = ParagraphStyle("NoteStyle", parent=styles["Normal"], fontSize=9, textColor=colors.HexColor("#374151"), backColor=colors.HexColor("#eff6ff"), borderPad=6, spaceBefore=4, spaceAfter=6, leading=13, leftIndent=6, rightIndent=6) footer_style = ParagraphStyle("footer", parent=styles["Normal"], fontSize=8, textColor=colors.HexColor("#9ca3af"), alignment=TA_CENTER, spaceBefore=4) ref_style = ParagraphStyle("ref", parent=styles["Normal"], fontSize=8.5, leading=12, leftIndent=10, spaceAfter=3) def h1(text): return Paragraph(f" {text}", h1_style) def h2(text): return Paragraph(text, h2_style) def h3(text): return Paragraph(text, h3_style) def body(text): return Paragraph(text, body_style) def bullet(text): return Paragraph(f"• {text}", bullet_style) def sub_bullet(text): return Paragraph(f" {text}", sub_bullet_style) def note(text): return Paragraph(text, note_style) def sp(h=4): return Spacer(1, h) def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cbd5e0"), spaceAfter=6, spaceBefore=6) def make_table(headers, rows, col_widths=None, hbg="#1a3a5c"): data = [headers] + rows if col_widths is None: col_widths = [17*cm / len(headers)] * len(headers) t = Table(data, colWidths=col_widths) style = TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor(hbg)), ("TEXTCOLOR", (0,0), (-1,0), colors.white), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,0), 9), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTSIZE", (0,1), (-1,-1), 9), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, colors.HexColor("#f7fafc")]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#cbd5e0")), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ]) t.setStyle(style) return t story = [] # Cover header story += [sp(8), Paragraph("POSTGRADUATE ANAESTHESIA EXAMINATION", subtitle_style), sp(4), Paragraph("Difficult Airway and Management", title_style), sp(4), Paragraph("Model Answer | 30 Marks", subtitle_style), sp(2), HRFlowable(width="60%", thickness=2, color=colors.HexColor("#1a3a5c"), hAlign="CENTER", spaceAfter=8, spaceBefore=8), sp(4)] # ---- SECTION 1 ---- story.append(h1("1. Definition and Incidence [2 marks]")) story.append(sp(4)) story.append(body( "The <b>difficult airway</b> is defined by the American Society of Anesthesiologists (ASA, 2022) " "as the clinical situation in which a conventionally trained anaesthesiologist experiences difficulty " "with face mask ventilation, difficulty with tracheal intubation, or both.")) story.append(sp(2)) story.append(make_table(["Parameter", "Incidence"], [ ["Difficult mask ventilation", "1.4 - 7.5%"], ["Impossible mask ventilation", "~0.15%"], ["Difficult laryngoscopy (C-L grade III/IV)", "~5 - 8%"], ["Failed intubation (elective)", "1 in 2,000"], ["Failed intubation (obstetrics)", "1 in 300"], ["Cannot Intubate - Cannot Oxygenate (CICO)", "~1 in 50,000"], ], col_widths=[10*cm, 7*cm])) story.append(sp(6)) # ---- SECTION 2 ---- story.append(h1("2. Preoperative Airway Assessment [6 marks]")) story.append(sp(4)) story.append(h2("2a. History")) for t in [ "Previous anaesthetic records - prior documented difficulty is the single most important predictor", "Symptoms of obstruction: stridor, dysphagia, hoarseness, positional dyspnoea", "Relevant conditions: obstructive sleep apnoea, rheumatoid arthritis, ankylosing spondylitis, diabetes ('prayer sign')", "Recent infections, tumours, or radiation to head and neck", ]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("2b. LEMON Assessment")) story.append(make_table(["Letter", "Component", "Details"], [ ["L", "Look externally", "Facial trauma, large incisors, beard, obesity, macroglossia"], ["E", "Evaluate 3-3-2 rule", "Interincisor gap <3 cm, hyoid-chin distance <3 cm, floor of mouth to thyroid notch <2 cm"], ["M", "Mallampati", "Class III/IV - poor oropharyngeal view"], ["O", "Obstruction", "Epiglottitis, peritonsillar abscess, Ludwig's angina"], ["N", "Neck mobility", "Extension <35 degrees predicts difficult laryngoscopy"], ], col_widths=[1.5*cm, 4*cm, 11.5*cm])) story.append(sp(4)) story.append(h2("2c. Mallampati Classification")) story.append(body("Performed with patient seated, mouth fully open, tongue maximally protruded, no phonation:")) story.append(make_table(["Class", "Structures Visible", "Significance"], [ ["Class I", "Soft palate, uvula, fauces, tonsillar pillars", "Easy intubation expected"], ["Class II", "Soft palate, uvula, fauces", "Relatively easy"], ["Class III", "Soft palate, base of uvula only", "Difficult intubation likely"], ["Class IV", "Hard palate only", "Very difficult intubation"], ], col_widths=[2.5*cm, 8*cm, 6.5*cm])) story.append(sp(4)) story.append(h2("2d. Cormack-Lehane Grading (at Laryngoscopy)")) story.append(make_table(["Grade", "View"], [ ["Grade I", "Full view of glottis"], ["Grade II", "Only posterior commissure visible"], ["Grade III", "Only epiglottis visible (no glottic structures)"], ["Grade IV", "Neither epiglottis nor glottis visible"], ], col_widths=[3*cm, 14*cm])) story.append(sp(4)) story.append(h2("2e. Key Airway Measurements")) story.append(make_table(["Measurement", "Threshold", "Significance"], [ ["Thyromental distance (TMD)", "<6.5 cm", "Predicts difficult laryngoscopy"], ["Sternomental distance", "<12.5 cm (full extension, mouth closed)", "Difficult laryngoscopy"], ["Inter-incisor gap", "<3 cm (2 finger-breadths)", "Difficult instrument placement"], ["Neck extension", "<35 degrees", "Difficult laryngoscopy"], ["Neck circumference", ">40 cm", "Difficult mask ventilation"], ["Mandible to hyoid bone", "<7 cm", "Difficult laryngoscopy"], ], col_widths=[5*cm, 6.5*cm, 5.5*cm])) story.append(sp(4)) story.append(h2("2f. Predictors of Difficult Mask Ventilation (OBESE)")) for t in ["Obese (BMI >26 kg/m2)", "Beard", "Edentulous", "Snoring / obstructive sleep apnoea", "Elderly (>55 years)"]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("2g. Conditions Associated with Difficult Intubation")) story.append(make_table(["Category", "Examples"], [ ["Tumours", "Cystic hygroma, hemangioma, haematoma"], ["Infections", "Ludwig's angina, peritonsillar abscess, epiglottitis"], ["Congenital anomalies", "Pierre Robin, Treacher Collins, Goldenhar syndrome, laryngeal atresia"], ["Trauma", "Laryngeal fracture, mandibular fracture, inhalation burn, C-spine injury"], ["Systemic disease", "Obesity, rheumatoid arthritis (arytenoid involvement), ankylosing spondylitis"], ["Anatomic variants", "Micrognathia, prognathism, macroglossia, arched palate, short neck, prominent incisors"], ], col_widths=[4.5*cm, 12.5*cm])) story.append(sp(6)) # ---- SECTION 3 ---- story.append(h1("3. ASA Difficult Airway Algorithm (2022) [6 marks]")) story.append(sp(4)) story.append(h2("3a. Step 1 - Assess likelihood of difficulty with:")) for t in ["Patient cooperation and consent", "Face mask ventilation", "Supraglottic airway (SGA) placement", "Laryngoscopy", "Tracheal intubation", "Surgical airway access"]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("3b. Step 2 - Awake vs. Asleep Intubation Decision")) story.append(h3("Awake intubation is PREFERRED when:")) for t in [ "Anticipated difficult intubation AND difficult mask ventilation", "Full stomach/aspiration risk with anticipated difficult airway", "Haemodynamic instability combined with difficult airway", "Upper airway obstruction (Ludwig's angina, angioedema, large goitre)", "Patient unable to tolerate even brief apnoea", ]: story.append(bullet(t)) story.append(h3("Proceed with GA induction if:")) for t in ["Airway predicted to be manageable", "Appropriate backup, equipment, and personnel available", "Patient refuses awake intubation"]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("3c. Algorithm Pathways")) story.append(h3("A. Awake Intubation Pathway:")) for i, t in enumerate([ "Topicalise airway +/- regional nerve blocks", "Awake flexible scope intubation (gold standard)", "Awake video laryngoscopy", "Awake optical stylet / Bonfils intubating scope", "Retrograde wire-guided intubation (rarely used)", "If all fail - awake surgical tracheostomy under local anaesthesia", ], 1): story.append(Paragraph(f"{i}. {t}", bullet_style)) story.append(h3("B. Anaesthetised Patient - Intubation Fails:")) for t in [ "Call for help immediately", "Limit laryngoscopy attempts to 3 (+ 1 by a more experienced operator)", "Maintain oxygenation - return to mask ventilation between every attempt", "Consider SGA (i-gel, LMA ProSeal, ILMA) as rescue oxygenation device", "Video laryngoscopy as primary rescue after one failed direct laryngoscopy", ]: story.append(bullet(t)) story.append(h3("C. CICO (Cannot Intubate - Cannot Oxygenate) - Emergency Pathway:")) story.append(note( "<b>CICO is a life-threatening emergency. Declare it immediately and call for help.</b><br/>" "1. Maximise oxygenation: two-person BMV, oral/nasal airway adjuncts, SGA attempt<br/>" "2. If SGA fails or oxygenation remains inadequate - proceed <b>immediately</b> to <b>Emergency Front-of-Neck Access (eFONA)</b><br/>" "3. Do NOT delay eFONA with repeated failed instrumentation attempts" )) story.append(sp(6)) # ---- SECTION 4 ---- story.append(h1("4. Airway Management Techniques [8 marks]")) story.append(sp(4)) story.append(h2("4a. Awake Fibreoptic Intubation (AFOI) - Gold Standard for Anticipated Difficult Airway")) story.append(h3("Preparation:")) story.append(bullet("Glycopyrrolate 0.2-0.4 mg IM/IV 30-60 min prior (antisialagogue - reduces secretions, does not cross BBB)")) story.append(bullet("Informed consent; psychological preparation and explanation of each step")) story.append(h3("Topical Anaesthesia:")) story.append(bullet("<b>Nasal route:</b> Cocaine 4% or lignocaine 4% + xylometazoline (vasoconstriction) applied to nasal mucosa")) story.append(bullet("<b>Oral route:</b> Lignocaine 10% spray to oropharynx + nebulised lignocaine")) story.append(h3("Nerve Blocks:")) story.append(bullet("<b>Glossopharyngeal nerve block:</b> 2 mL 2% lignocaine into base of palatoglossal arch bilaterally - anaesthetises posterior tongue and oropharynx")) story.append(bullet("<b>Superior laryngeal nerve block:</b> 3 mL 2% lignocaine 1 cm below greater cornu of hyoid, through thyrohyoid membrane - anaesthetises supraglottic larynx")) story.append(bullet("<b>Transtracheal block:</b> 4 mL 4% lignocaine through CTM at end-expiration; cough distributes LA - anaesthetises subglottic larynx and trachea")) story.append(h3("Sedation:")) story.append(bullet("Dexmedetomidine 0.5-1 mcg/kg over 10 min - preserves airway tone and spontaneous ventilation; cooperative, sedated patient")) story.append(bullet("Ketamine sub-dissociative 0.3-0.5 mg/kg - maintains pharyngeal tone, analgesic, bronchodilator")) story.append(bullet("Avoid benzodiazepines/opioids as primary agents due to risk of airway loss")) story.append(h3("Technique:")) for t in [ "Pass flexible scope through nares or oropharynx under direct vision", "Navigate past turbinates/epiglottis, identify vocal cords", "Advance scope through cords into trachea - confirm tracheal rings and carina", "Railroad ETT over scope into trachea", "Confirm position with capnography and fibreoptic view of carina before withdrawing scope", ]: story.append(sub_bullet(t)) story.append(sp(4)) story.append(h2("4b. Video Laryngoscopy (VL)")) for t in [ "Devices: GlideScope, C-MAC, McGrath MAC, Airtraq, King Vision", "Indirect glottic view with blade curvatures up to 90 degrees - improves C-L grade by 1-2 grades vs. direct laryngoscopy", "<b>Hyperangulated blades</b> (GlideScope, McGrath): best glottic view in difficult anatomy; require pre-shaped stylet; note 'look-say-do' gap between excellent view and successful tube passage", "<b>Standard geometry blades</b> (C-MAC Macintosh profile): allows same technique as DL plus video assistance - preferred for routine use and training", "First-line rescue after failed direct laryngoscopy per DAS 2025 and ASA 2022 guidelines", "Can be used for awake intubation with appropriate topicalisation", ]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("4c. Supraglottic Airways (SGAs)")) story.append(make_table(["Device", "Generation", "Features", "Role in Difficult Airway"], [ ["LMA Classic/Unique", "1st", "No gastric port; seal ~18 cmH2O", "Temporary oxygenation rescue"], ["LMA ProSeal / Supreme\ni-gel", "2nd", "Gastric drain port; seal 25-30 cmH2O", "Rescue oxygenation in CICO - preferred 2nd gen"], ["ILMA / Fastrach", "Intubating", "Rigid handle; designed for blind or FOB-guided intubation", "Conduit for definitive intubation in CICO"], ], col_widths=[3.5*cm, 2.5*cm, 5.5*cm, 5.5*cm])) story.append(bullet("SGA oxygenation success in CICO: ~95%; intubation through SGA: ~80-85%")) story.append(sp(4)) story.append(h2("4d. Optical Stylets and Rigid Intubation Scopes")) for t in [ "Bonfils intubating fiberscope, Shikani Optical Stylet", "Particularly useful for limited mouth opening where flexible scope navigation is difficult", "Retromolar approach allows access despite trismus (TMJ limitation)", ]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("4e. Emergency Front-of-Neck Access (eFONA) - Cricothyroidotomy")) story.append(note("<b>Indication:</b> CICO - failure of all non-surgical techniques with deteriorating oxygenation. " "This is a life-saving procedure and must NOT be delayed.")) story.append(h3("Anatomy of the Cricothyroid Membrane (CTM):")) story.append(bullet("Located between thyroid cartilage (above) and cricoid cartilage (below)")) story.append(bullet("Mean width 22 mm, height 9-14 mm in adults; midline is avascular")) story.append(bullet("Palpation: from thyroid notch move inferiorly - first firm ridge below the cartilage is the CTM")) story.append(h3("Scalpel-Bougie-Tube Technique (DAS 2025 recommended standard for eFONA):")) for i, t in enumerate([ "Extend neck; identify and palpate CTM (finger stabilisation of larynx)", "Horizontal stab incision through skin and CTM (scalpel blade #22 or #15)", "Hook finger into incision to stabilise larynx and maintain opening", "Insert gum-elastic bougie with caudal (downward) angulation into trachea", "Railroad a size 6.0 cuffed ETT (or 6.0 cuffed tracheostomy tube) over the bougie", "Inflate cuff, ventilate, confirm with capnography", ], 1): story.append(Paragraph(f"{i}. {t}", bullet_style)) story.append(h3("Needle Cricothyroidotomy + Jet Ventilation:")) for t in [ "14G IV cannula through CTM - high-pressure jet ventilation (50 psi, I:E ratio 1:4)", "Oxygenation only; no CO2 clearance - maximum 30-45 min before barotrauma/air trapping", "<b>Not recommended</b> as primary eFONA technique in DAS 2025 (high failure rate in adults)", "Preferred surgical airway in children <8 years (surgical CTM landmarks less reliable)", ]: story.append(bullet(t)) story.append(sp(6)) # ---- SECTION 5 ---- story.append(h1("5. DAS 2025 Four-Plan Approach [4 marks]")) story.append(sp(4)) story.append(make_table(["Plan", "Intervention", "Attempts", "Key Points"], [ ["Plan A", "Direct laryngoscopy +/- videolaryngoscopy\nAdjuncts: bougie, BURP, ELM\nOptimise: sniffing/ramped position", "Max 3", "Introduce VL after 1 failed DL\nLimit trauma per attempt"], ["Plan B", "2nd-generation SGA\n(i-gel or LMA ProSeal preferred)", "Max 2", "Secure oxygenation as primary goal\nConfirm seal and adequate ventilation"], ["Plan C", "Two-person face mask ventilation\nOral and nasal airways\nMaximise NMB (rocuronium/suxamethonium)", "Temporary", "Bridge to decision: wake vs eFONA\nDo not persist if SpO2 falling"], ["Plan D", "eFONA: scalpel-bougie-tube\nDeclare CICO, call for surgical help", "Immediate", "Life-saving - must not be delayed\nSurgeon should be scrubbed and ready"], ], col_widths=[1.5*cm, 7.5*cm, 2.5*cm, 5.5*cm])) story.append(sp(4)) story.append(note( "<b>Key principles DAS 2025:</b> (1) Declare difficulty early and call for help. " "(2) Use cognitive aids/laminated algorithms in theatre. " "(3) Limit total attempts - repeated failure causes oedema/bleeding, escalating to CICO. " "(4) Maintain oxygenation as the primary goal at every plan. " "(5) eFONA is not a failure - it is the correct management of CICO." )) story.append(sp(6)) # ---- SECTION 6 ---- story.append(h1("6. Extubation of the Difficult Airway [2 marks]")) story.append(sp(4)) story.append(body("Extubation carries significant risk when the patient was difficult to intubate. " "The DAS extubation guidelines mandate pre-extubation risk stratification.")) story.append(h3("Risk Stratification:")) story.append(bullet("<b>Low risk:</b> Straightforward re-intubation if needed - standard extubation acceptable")) story.append(bullet("<b>High risk - remediable factors:</b> Secretions, posture, residual neuromuscular block - correct before extubation")) story.append(bullet("<b>High risk - non-remediable:</b> Fixed anatomy, airway oedema, haematoma, prolonged surgery - requires advanced extubation strategy")) story.append(h3("Techniques for High-Risk Extubation:")) story.append(bullet("<b>Airway exchange catheter (AEC):</b> Leave in situ post-extubation for 30-60 min; enables jet ventilation and guides re-intubation; warn patient of expected coughing")) story.append(bullet("<b>Staged extubation with SGA:</b> Place LMA/i-gel before removing ETT; allows rescue ventilation if re-obstruction occurs")) story.append(bullet("<b>Awake extubation:</b> Only when protective reflexes fully intact, full neuromuscular reversal confirmed (TOF ratio >0.9), and patient cooperative")) story.append(bullet("Extubate in theatre environment with senior anaesthesiologist present, not in recovery bay")) story.append(sp(6)) # ---- SECTION 7 ---- story.append(h1("7. Special Situations and Documentation [2 marks]")) story.append(sp(4)) story.append(h2("Obesity")) for t in [ "Ramped position ('ear to sternal notch') improves laryngoscopic view and extends safe apnoea time", "High-flow nasal oxygen (HFNO) at 30-70 L/min during apnoea significantly extends apnoeic oxygenation", "CPAP preoxygenation achieves higher EtO2 than face mask alone in morbid obesity", "Rapid desaturation - preoxygenation to EtO2 >90% mandatory before induction", ]: story.append(bullet(t)) story.append(h2("Obstetrics")) for t in [ "Failed intubation rate 1 in 300 (10 times the general surgical population)", "Compounding factors: airway oedema (pre-eclampsia), engorged breasts, full stomach, rapid desaturation", "Waking the patient is a valid management option if maternal/fetal condition permits", "Regional anaesthesia (spinal/epidural) preferred whenever clinically feasible", ]: story.append(bullet(t)) story.append(h2("Paediatric Difficult Airway")) for t in [ "Awake intubation poorly tolerated - inhalational induction with sevoflurane (maintaining spontaneous ventilation) preferred", "Cuffed ETTs acceptable in children <8 years with cuff pressure monitoring (<20 cmH2O)", "Needle cricothyroidotomy preferred surgical airway in children <8 years", "Subglottic diameter is the narrowest part of the paediatric airway (cf. adults: glottis)", ]: story.append(bullet(t)) story.append(h2("Unstable Cervical Spine")) for t in [ "Manual in-line stabilisation (MILS) - one assistant holds head preventing cervical movement", "MILS does NOT improve and may worsen laryngoscopic view - video laryngoscopy strongly preferred", "Awake fibreoptic intubation remains gold standard for confirmed/suspected C-spine injury", ]: story.append(bullet(t)) story.append(sp(4)) story.append(h2("Documentation and Follow-Up (ASA 2022 / DAS Guidelines)")) story.append(make_table(["Action", "Details"], [ ["Anaesthetic record", "Document findings, techniques used, devices, number of attempts, complications"], ["Patient communication", "Written difficult airway letter; advise of signs/symptoms of complications; MedicAlert bracelet referral"], ["Team communication", "Inform surgical team, recovery staff, ICU (if applicable), and primary care physician"], ["Complications follow-up", "Mucosal injury, dental damage, aspiration, airway oedema, tracheal trauma, recurrent laryngeal nerve injury"], ], col_widths=[5*cm, 12*cm])) story.append(sp(6)) # ---- EQUIPMENT APPENDIX ---- story.append(h1("Appendix: Difficult Airway Trolley - Minimum Contents")) story.append(sp(4)) story.append(make_table(["Category", "Equipment"], [ ["Basic adjuncts", "Oral airways (Guedel sizes 2-5), nasal airways, McGill forceps, lubricant"], ["Mask ventilation", "Various face mask sizes, two-person technique connectors, non-rebreather mask"], ["Supraglottic airways", "LMA Classic (sizes 3, 4, 5), i-gel (sizes 3, 4, 5), ILMA/Fastrach"], ["Intubation adjuncts", "Gum-elastic bougie (multiple sizes), ETT stylets, airway exchange catheters (AEC)"], ["Video laryngoscopes", "C-MAC (standard + D-blade hyperangulated) or GlideScope, spare batteries/power source"], ["Flexible intubation scope", "Fibreoptic bronchoscope/flexible intubation scope + light source, anti-fog agent"], ["Jet ventilation circuit", "High-pressure jet ventilation circuit (Manujet), multiple 14G IV cannulae"], ["Surgical airway kit", "Scalpel (size 22), gum-elastic bougie, 6.0 cuffed ETT, Melker cricothyrotomy kit"], ["Monitoring/confirmation", "Waveform capnography, pulse oximeter, colorimetric CO2 detector"], ["Drugs", "Lignocaine 4%, cocaine 4%, glycopyrrolate, dexmedetomidine, ketamine, sugammadex"], ], col_widths=[5*cm, 12*cm])) story.append(sp(6)) # ---- MARKING SCHEME ---- story.append(h1("Marking Scheme")) story.append(sp(4)) story.append(make_table(["Section", "Topic", "Marks"], [ ["1", "Definition and incidence", "2"], ["2", "Preoperative assessment (history, LEMON, Mallampati, C-L grading, measurements, conditions)", "6"], ["3", "ASA Algorithm 2022 (awake vs asleep decision, CICO pathway)", "6"], ["4", "Management techniques (AFOI, video laryngoscopy, SGA, eFONA with detail)", "8"], ["5", "DAS 2025 four-plan approach", "4"], ["6", "Extubation of difficult airway", "2"], ["7", "Special situations + documentation and follow-up", "2"], ["", "TOTAL", "30"], ], col_widths=[2*cm, 12.5*cm, 2.5*cm])) story.append(sp(4)) # ---- REFERENCES ---- story.append(hr()) story.append(Paragraph("<b>Key References</b>", h3_style)) for r in [ "ASA Task Force. Practice Guidelines for Management of the Difficult Airway. <i>Anesthesiology</i> 2022;136:31-81.", "Difficult Airway Society. Unanticipated Difficult Intubation in Adults - DAS Guidelines 2025. www.das.uk.com", "All India Difficult Airway Association (AIDAA). 2025 Guidelines for unanticipated difficult airway in adults under general anaesthesia. <i>Indian J Anaesth</i> 2025.", "Morgan GE, Mikhail MS. <i>Clinical Anesthesiology</i>, 7th ed. McGraw-Hill. Chapter 19: Airway Management.", "Miller RD et al. <i>Miller's Anesthesia</i>, 10th ed. Elsevier. Chapter 40: Airway Assessment and Management.", "Barash PG et al. <i>Clinical Anesthesia</i>, 9th ed. Wolters Kluwer. Chapter 28: Flexible Intubation Scope.", ]: story.append(Paragraph(f"• {r}", ref_style)) story.append(sp(12)) story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cbd5e0"))) story.append(Paragraph( "Generated by Orris AI | Postgraduate Anaesthesia Examination Preparation | June 2026", footer_style )) doc.build(story) print(f"PDF created successfully: {OUTPUT}") PYEOF echo "Script written successfully"
cd /home/daytona/workspace/difficult-airway && python generate_pdf.py
ls -lh /home/daytona/workspace/difficult-airway/Difficult_Airway_PG_Exam.pdf
Difficult Airway PG Exam
PDF Document · PDF