One lung ventilation 30 mark Question for MD anaesthesia exam
| Indication | Rationale |
|---|---|
| Massive haemoptysis | Prevent contamination of healthy lung |
| Empyema / lung abscess | Prevent spillage of infected material |
| Bronchopleural fistula | Prevent loss of tidal volume through fistula; risk of tension pneumothorax |
| Tracheobronchial disruption | Maintain ventilation through intact airway |
| Large lung cyst or bulla | Prevent rupture and tension pneumothorax under PPV |
| Whole lung lavage (pulmonary alveolar proteinosis) | Isolate one lung for lavage |
| Severe unilateral lung disease with hypoxaemia | Differential ventilation strategies |

| Parameter | Recommendation |
|---|---|
| Tidal volume (Vt) | 4-6 mL/kg predicted body weight (NOT ideal body weight) |
| PEEP | 5-8 cmH2O to ventilated (dependent) lung to prevent atelectasis |
| FiO2 | Begin with 1.0; can reduce to 0.5-0.8 after stable (to reduce O2 toxicity) |
| Plateau pressure | <25 cmH2O |
| Peak inspiratory pressure | <35 cmH2O |
| Ventilation mode | Pressure-controlled ventilation (PCV) preferred - limits peak pressure, more even flow distribution |
| Recruitment maneuvers | Periodic sustained inflation to prevent dependent lung atelectasis |
| Permissive hypercapnia | Acceptable if SpO2 satisfactory despite mild CO2 elevation |
| Complication | Mechanism | Management |
|---|---|---|
| Hypoxaemia | Intrapulmonary shunt | See algorithm above |
| Hypercapnia | Increased dead space, reduced lung volume | Increase RR, permissive approach |
| Barotrauma/VILI | Large Vt to single lung | LPV strategy |
| Malposition of DLT | Displacement, especially in lateral position | FOB confirmation |
| Bronchospasm | Airway manipulation, reactive airways | Bronchodilating agents |
| Cardiac arrhythmias | Mediastinal manipulation, hypoxia | Treat cause |
| Tension pneumothorax | Bullae rupture, excessive pressure | Immediate desufflation |
| Feature | Lung Separation | Lung Isolation |
|---|---|---|
| Purpose | Surgical access | Protect contralateral lung |
| Indication | Elective lung resection, VATS | Haemoptysis, empyema, BPF |
| Device | DLT or BB | DLT only (BB inadequate seal) |
| Consequence of failure | Surgical inconvenience | Life-threatening contamination |
| Parameter | Value |
|---|---|
| Shunt fraction (Qs/Qt) during two-lung ventilation | ~10% |
| Shunt fraction during OLV (without HPV) | ~40% |
| Shunt fraction during OLV (with HPV) | ~27.5% |
| HPV reduces nondependent lung blood flow by | ~50% |
| Recommended Vt during OLV | 4-6 mL/kg predicted BW |
| Target plateau pressure | <25 cmH2O |
| Target peak airway pressure | <35 cmH2O |
| PEEP to dependent lung | 5-8 cmH2O |
| CPAP to non-dependent lung | 5-10 cmH2O |
| ALI incidence post-pneumonectomy | ~7.9% |
| ALI mortality/morbidity | ~40% |
| Left vs. right DLT use | Left: ~95%, Right: ~5% |
CreAT PDF For this
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace does not exist"
mkdir -p /home/daytona/workspace/olv-pdf && python3 -c "from reportlab.lib.pages…
~/olv-pdf/generate_olv_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, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Image as RLImage
import urllib.request, os, io
OUTPUT = "/home/daytona/workspace/olv-pdf/One_Lung_Ventilation_MD_Anaesthesia.pdf"
# ── Download the physiology diagram ──────────────────────────────────────────
IMG_URL = "https://cdn.orris.care/cdss_images/75974908cd4c75eff8e07e087ef4be243800cef28e8b0e6d6dad8fb168a74d8e.png"
IMG_PATH = "/home/daytona/workspace/olv-pdf/olv_physiology.png"
if not os.path.exists(IMG_PATH):
urllib.request.urlretrieve(IMG_URL, IMG_PATH)
# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
TEAL = colors.HexColor("#006E6E")
DARK = colors.HexColor("#1A1A2E")
LTEAL = colors.HexColor("#E0F4F4")
WHITE = colors.white
GREY = colors.HexColor("#F5F5F5")
MID = colors.HexColor("#B0D8D8")
title_style = ParagraphStyle(
"CustomTitle", parent=styles["Title"],
fontSize=20, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=4, fontName="Helvetica-Bold", leading=26
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=11, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=2, fontName="Helvetica"
)
h1_style = ParagraphStyle(
"H1", parent=styles["Heading1"],
fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
spaceBefore=10, spaceAfter=4, leading=16
)
h2_style = ParagraphStyle(
"H2", parent=styles["Heading2"],
fontSize=11, textColor=TEAL, fontName="Helvetica-Bold",
spaceBefore=8, spaceAfter=3, leading=14
)
h3_style = ParagraphStyle(
"H3", parent=styles["Heading3"],
fontSize=10, textColor=DARK, fontName="Helvetica-Bold",
spaceBefore=5, spaceAfter=2, leading=13
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=9.5, textColor=DARK, fontName="Helvetica",
spaceAfter=4, leading=14, alignment=TA_JUSTIFY
)
bullet_style = ParagraphStyle(
"Bullet", parent=body_style,
leftIndent=14, bulletIndent=4,
spaceAfter=2, leading=13
)
caption_style = ParagraphStyle(
"Caption", parent=styles["Normal"],
fontSize=8, textColor=colors.HexColor("#555555"),
alignment=TA_CENTER, fontName="Helvetica-Oblique", spaceAfter=6
)
ref_style = ParagraphStyle(
"Ref", parent=body_style,
fontSize=8.5, textColor=colors.HexColor("#444444"),
fontName="Helvetica-Oblique"
)
def b(text):
return f"<b>{text}</b>"
def section_header(title, story):
"""Teal full-width section header block."""
tbl = Table([[Paragraph(title, h1_style)]], colWidths=[17.2*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4]),
]))
story.append(KeepTogether([tbl, Spacer(1, 4)]))
def info_box(text, story, bg=LTEAL):
"""Coloured info/highlight box."""
tbl = Table([[Paragraph(text, body_style)]], colWidths=[17.2*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING",(0,0), (-1,-1), 8),
("BOX", (0,0), (-1,-1), 0.8, TEAL),
]))
story.append(tbl)
story.append(Spacer(1, 4))
def plain_table(headers, rows, story, col_widths=None):
"""Generic styled table."""
data = [[Paragraph(b(h), ParagraphStyle("TH", parent=body_style,
textColor=WHITE, fontName="Helvetica-Bold")) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), body_style) for c in row])
if not col_widths:
w = 17.2 / len(headers)
col_widths = [w*cm] * len(headers)
tbl = Table(data, colWidths=col_widths, repeatRows=1)
row_bg = []
for i in range(1, len(data)):
bg = GREY if i % 2 == 0 else WHITE
row_bg.append(("BACKGROUND", (0, i), (-1, i), bg))
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CCCCCC")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
("LEFTPADDING",(0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0),(-1,-1), 5),
*row_bg,
]))
story.append(tbl)
story.append(Spacer(1, 6))
# ── Document setup ────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="One-Lung Ventilation – MD Anaesthesia",
author="Orris Medical AI"
)
story = []
# ═══════════════════════════════════════════════════════════════════════════════
# COVER / TITLE BLOCK
# ═══════════════════════════════════════════════════════════════════════════════
cover_data = [[
Paragraph("ONE-LUNG VENTILATION", title_style),
Paragraph("MD Anaesthesia Examination Answer | 30 Marks", subtitle_style),
Paragraph("Sources: Miller's Anesthesia 10e · Morgan & Mikhail's 7e · Barash Clinical Anaesthesia 9e", subtitle_style),
]]
cover_tbl = Table([
[Paragraph("ONE-LUNG VENTILATION", title_style)],
[Paragraph("MD Anaesthesia Examination Answer | 30 Marks", subtitle_style)],
[Paragraph("Sources: Miller's Anesthesia 10e · Morgan & Mikhail's 7e · Barash Clinical Anaesthesia 9e", subtitle_style)],
], colWidths=[17.2*cm])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING",(0,0),(-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
]))
story.append(cover_tbl)
story.append(Spacer(1, 10))
# ═══════════════════════════════════════════════════════════════════════════════
# 1. DEFINITION
# ═══════════════════════════════════════════════════════════════════════════════
section_header("1. Definition & Introduction", story)
story.append(Paragraph(
"One-lung ventilation (OLV) refers to the selective ventilation of one lung while the contralateral lung "
"is deliberately collapsed or excluded from ventilation. It is the cornerstone of thoracic anaesthesia, "
"enabling surgical access to the operative hemithorax while maintaining gas exchange through the dependent "
"(ventilated) lung. OLV creates a deliberate intrapulmonary shunt and challenges the anaesthesiologist to "
"balance surgical exposure with adequate oxygenation.", body_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 2. INDICATIONS
# ═══════════════════════════════════════════════════════════════════════════════
section_header("2. Indications for OLV", story)
story.append(Paragraph(b("Absolute Indications (Lung Isolation – life-threatening if not separated)"), h2_style))
plain_table(
["Indication", "Rationale"],
[
["Massive haemoptysis", "Prevent contamination/flooding of healthy lung"],
["Empyema / lung abscess", "Prevent spillage of infected material"],
["Bronchopleural fistula (large)", "Prevent loss of tidal volume; risk of tension pneumothorax"],
["Tracheobronchial disruption", "Maintain ventilation through intact airway"],
["Large lung cyst or bulla", "Prevent rupture and tension pneumothorax under PPV"],
["Whole-lung (bronchoalveolar) lavage", "Isolate one lung for lavage (pulmonary alveolar proteinosis)"],
["Severe unilateral lung disease with hypoxaemia", "Differential ventilation strategies"],
],
story,
col_widths=[8.6*cm, 8.6*cm]
)
story.append(Paragraph(b("Relative Indications (Lung Separation – surgical convenience)"), h2_style))
bullets_rel = [
"Pneumonectomy, lobectomy, segmentectomy",
"Thoracoscopy / VATS",
"Oesophageal surgery",
"Thoracic aortic aneurysm repair",
"Single-lung transplantation",
"Anterior approach to thoracic spine",
"Minimally invasive cardiac surgery",
]
for b_ in bullets_rel:
story.append(Paragraph(f"• {b_}", bullet_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 3. PREOPERATIVE ASSESSMENT
# ═══════════════════════════════════════════════════════════════════════════════
section_header("3. Preoperative Assessment", story)
plain_table(
["Test / Parameter", "Significance / Threshold"],
[
["Spirometry (FEV1, FVC, FEV1/FVC)", "Predicted postoperative FEV1 >0.8 L required for safe resection"],
["DLCO (Diffusing capacity)", "Predicted postoperative DLCO >40% of predicted is acceptable"],
["VO2 max (Cardiopulmonary exercise)", ">15 mL/kg/min acceptable; <10 mL/kg/min – prohibitive risk"],
["ABG (room air)", "PaO2 <60 mmHg or PaCO2 >45 mmHg signals significantly increased risk"],
["Stair-climb test", "Ability to climb >3 flights of stairs correlates with adequate reserve"],
["V/Q scanning", "Quantifies each lung's contribution; estimates postoperative function"],
],
story,
col_widths=[8*cm, 9.2*cm]
)
# ═══════════════════════════════════════════════════════════════════════════════
# 4. PHYSIOLOGY
# ═══════════════════════════════════════════════════════════════════════════════
section_header("4. Physiological Basis of OLV", story)
story.append(Paragraph(b("4a. The Shunt Problem – Two-Lung vs. One-Lung Ventilation"), h2_style))
story.append(Paragraph(
"During two-lung ventilation in the lateral decubitus position, the nondependent lung receives ~40% "
"and the dependent lung ~60% of pulmonary blood flow. "
"On initiating OLV, the nondependent (operative) lung is no longer ventilated but remains perfused, "
"creating an <b>obligatory intrapulmonary shunt</b>. "
"Hypoxic pulmonary vasoconstriction (HPV) partially compensates by diverting blood flow away from the "
"collapsed lung.", body_style))
story.append(Spacer(1, 4))
# physiology image
try:
img = RLImage(IMG_PATH, width=14*cm, height=7.5*cm)
story.append(img)
story.append(Paragraph(
"Fig. 1 – Schematic of blood flow distribution and shunt fractions during two-lung ventilation "
"versus one-lung ventilation (Barash, Clinical Anaesthesia 9e).", caption_style))
except Exception as e:
story.append(Paragraph(f"[Image could not be loaded: {e}]", caption_style))
plain_table(
["Parameter", "Two-Lung Ventilation", "One-Lung Ventilation"],
[
["Nondependent lung blood flow", "40% of cardiac output", "22.5% (HPV reduces by ~50%)"],
["Dependent lung blood flow", "60% of cardiac output", "77.5%"],
["PaO2 (FiO2 1.0)", "~400 mmHg", "~150 mmHg"],
["Shunt fraction (Qs/Qt)", "~10%", "~27.5%"],
],
story,
col_widths=[5.8*cm, 5.7*cm, 5.7*cm]
)
story.append(Paragraph(b("4b. Hypoxic Pulmonary Vasoconstriction (HPV)"), h2_style))
info_box(
"<b>HPV</b> is the single most important physiological mechanism limiting hypoxaemia during OLV. "
"Local alveolar hypoxia (PAO2 <70 mmHg) triggers vasoconstriction in pulmonary arterioles of the "
"non-ventilated lung, reducing its blood flow by ~50%. "
"The response is <b>biphasic</b>: an initial phase within seconds and a sustained phase over 30–60 minutes.",
story
)
story.append(Paragraph(b("4c. Factors Inhibiting HPV (worsening hypoxaemia)"), h2_style))
inh_items = [
"Pulmonary hypertension",
"Hypocapnia / respiratory alkalosis",
"Increased cardiac output; increased mixed venous PO2",
"Hypothermia",
"Vasodilators: nitroglycerin, nitroprusside, nitric oxide",
"Phosphodiesterase inhibitors: milrinone, enoximone",
"Beta-adrenergic agonists; calcium channel blockers",
"Inhalation anaesthetics (dose-dependent; <1 MAC has minimal effect)",
]
for item in inh_items:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Paragraph(b("4d. Factors Reducing Dependent Lung Blood Flow (paradoxically worsen hypoxaemia)"), h2_style))
dep_items = [
"High mean airway pressure: excessive PEEP, hyperventilation, high peak inspiratory pressure",
"Low FiO2 in the ventilated lung (triggers HPV in ventilated lung)",
"Intrinsic PEEP from inadequate expiratory time",
"Vasoconstrictors with greater effect on normoxic than hypoxic vessels",
]
for item in dep_items:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 5. TECHNIQUES
# ═══════════════════════════════════════════════════════════════════════════════
section_header("5. Techniques for OLV", story)
story.append(Paragraph(b("5a. Double-Lumen Endobronchial Tube (DLT) – Most Commonly Used"), h2_style))
story.append(Paragraph(
"The DLT has two lumens: a longer endobronchial lumen (enters a mainstem bronchus) and a shorter "
"endotracheal lumen (terminates in the lower trachea). Two cuffs: endobronchial (blue) and "
"endotracheal (clear). Available sizes: 35F, 37F, 39F, 41F.", body_style))
plain_table(
["Feature", "Left-sided DLT", "Right-sided DLT"],
[
["Frequency of use", "~95% of cases (preferred)", "~5% of cases"],
["Bronchus length", "Left mainstem 4–5 cm – safer margin", "Right mainstem 1–2.5 cm – narrow margin"],
["Special feature", "Standard endobronchial cuff", "Murphy eye for right upper lobe ventilation"],
["Indication", "Right thoracotomy AND left thoracotomy", "Left mainstem tumour; left pneumonectomy"],
],
story,
col_widths=[4.5*cm, 6.3*cm, 6.4*cm]
)
story.append(Paragraph(b("DLT Placement Technique:"), h3_style))
steps = [
"Oral laryngoscopy; insert DLT with curve concave anteriorly",
"Once through vocal cords, rotate 90° toward the intended bronchus",
"Advance until resistance felt (endobronchial position)",
"Inflate tracheal cuff; confirm bilateral breath sounds",
"Confirm with <b>fiberoptic bronchoscopy (FOB)</b> – gold standard",
"Through tracheal lumen: carina visible; blue cuff just below carina; bronchial lumen enters left bronchus",
"<b>Mandatory recheck</b> after lateral positioning (displacement in ~40% of cases)",
]
for i, s in enumerate(steps, 1):
story.append(Paragraph(f"{i}. {s}", bullet_style))
story.append(Paragraph(b("5b. Bronchial Blockers (BB)"), h2_style))
story.append(Paragraph(
"A blocker is directed into the target bronchus through/alongside a standard single-lumen ETT under FOB guidance. "
"Types include: <b>Univent tube</b> (integrated blocker), <b>Arndt wire-guided blocker</b>, "
"<b>Cohen flexion-tip blocker</b>, and the <b>EZ-Blocker</b> (Y-shaped, straddles the carina).", body_style))
plain_table(
["Feature", "DLT", "Bronchial Blocker"],
[
["Preferred use", "Lung separation (surgery)", "Difficult airway, tracheostomy"],
["Lung isolation (protection)", "YES – reliable seal", "NO – inadequate seal, displacement risk"],
["Lung collapse speed", "Fast", "Slower"],
["Suctioning of collapsed lung", "Yes", "Limited"],
["CPAP to collapsed lung","Yes", "No"],
["Post-op ETT exchange", "Often required for ICU", "Not required"],
["Paediatric use", "Not for <8–10 yrs", "Preferred in children"],
],
story,
col_widths=[5.5*cm, 5.8*cm, 5.9*cm]
)
story.append(Paragraph(b("5c. Other Techniques"), h2_style))
other = [
"<b>Endobronchial intubation with SLT:</b> Blind/FOB-guided advancement into mainstem bronchus. Simple but imprecise; risk of RUL obstruction. Emergency use only.",
"<b>Tubeless techniques:</b> HFJV, spontaneous ventilation with LMA, or apnoeic techniques. Selected VATS cases in experienced centres.",
]
for o in other:
story.append(Paragraph(f"• {o}", bullet_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 6. MANAGEMENT
# ═══════════════════════════════════════════════════════════════════════════════
section_header("6. Management of OLV", story)
story.append(Paragraph(b("6a. Anaesthetic Agent Selection"), h2_style))
plain_table(
["Category", "Agent / Approach", "Key Point"],
[
["Induction", "Propofol or Ketamine", "Both reduce bronchial reactivity; preferred over barbiturates/etomidate"],
["Maintenance", "Volatile agents (<1 MAC)", "Minimal HPV inhibition; sevoflurane = most potent bronchodilator"],
["Maintenance", "TIVA with propofol", "Better HPV preservation; preferred when HPV is critical"],
["Neuromuscular blockade", "Non-depolarising NMB", "Facilitates rib-spreading; aids airway management"],
["Fluids", "Goal-directed; restrict volume", "Excess fluid causes 'lower lung syndrome' → increased shunt"],
],
story,
col_widths=[4*cm, 6*cm, 7.2*cm]
)
story.append(Paragraph(b("6b. Lung-Protective Ventilation Strategy (LPV)"), h2_style))
info_box(
"<b>Current LPV recommendations during OLV:</b> "
"Vt 4–6 mL/kg predicted body weight | PEEP 5–8 cmH2O to dependent lung | "
"FiO2 0.5–1.0 | Plateau pressure <25 cmH2O | Peak airway pressure <35 cmH2O | "
"Pressure-controlled ventilation (PCV) preferred | Permissive hypercapnia acceptable",
story
)
story.append(Paragraph(
"<b>Rationale:</b> The dependent ventilated lung receives hyperperfusion AND the full tidal volume. "
"Vt <4 mL/kg risks derecruitment; Vt >8 mL/kg risks ventilator-induced lung injury (VILI). "
"PCV limits peak pressure and provides a more even inspiratory flow pattern.", body_style))
story.append(Paragraph(b("6c. De-nitrogenation of Operative Lung"), h2_style))
story.append(Paragraph(
"Ventilate with <b>100% O2 immediately before OLV</b> to wash out nitrogen from the operative lung. "
"Nitrogen (low blood-gas solubility) significantly delays lung collapse. "
"N2O is even more effective but is avoided (risk of bullae rupture, diffusion hypoxia). "
"<i>(Miller's Anesthesia 10e, p. 7189)</i>", body_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 7. HYPOXAEMIA MANAGEMENT
# ═══════════════════════════════════════════════════════════════════════════════
section_header("7. Hypoxaemia During OLV – Sequential Management Algorithm", story)
info_box(
"<b>Definition:</b> SpO2 <90% or PaO2 <80 mmHg during OLV on FiO2 1.0 is clinically significant.",
story, bg=colors.HexColor("#FFF3CD")
)
algo_steps = [
["Step 1", "Increase FiO2 to 1.0", "Immediate – if not already at 1.0"],
["Step 2", "Check & correct DLT position with FOB", "Malposition is the most common correctable cause"],
["Step 3", "CPAP 5–10 cmH2O to nondependent (collapsed) lung with 100% O2", "Most effective single intervention; may impede VATS surgery"],
["Step 4", "PEEP 5–8 cmH2O to dependent (ventilated) lung", "Recruits dependent atelectasis; caution – excessive PEEP redirects blood to collapsed lung"],
["Step 5", "Recruitment manoeuvre to dependent lung", "Sustained inflation 30–40 cmH2O for 30–40 s; follow with optimal PEEP titration"],
["Step 6", "Combined CPAP (nondependent) + PEEP (dependent)", "Individualised titration; differential strategy"],
["Step 7", "Pharmacological: Almitrine IV 4–12 mcg/kg/min ± inhaled NO", "Almitrine augments HPV in collapsed lung; most effective combined with inhaled NO"],
["Step 8", "Intermittent two-lung ventilation", "Request surgeon to pause; temporarily re-expand and ventilate both lungs"],
["Step 9", "Surgical ligation of pulmonary artery (pneumonectomy)", "Eliminates obligatory shunt completely; definitive step"],
]
plain_table(
["Step", "Intervention", "Notes"],
algo_steps,
story,
col_widths=[1.5*cm, 7.5*cm, 8.2*cm]
)
# ═══════════════════════════════════════════════════════════════════════════════
# 8. COMPLICATIONS
# ═══════════════════════════════════════════════════════════════════════════════
section_header("8. Complications of OLV", story)
story.append(Paragraph(b("Intraoperative"), h2_style))
plain_table(
["Complication", "Mechanism", "Management"],
[
["Hypoxaemia", "Intrapulmonary shunt ↑", "Sequential algorithm (see Section 7)"],
["Hypercapnia", "↑ Dead space, ↓ lung volume", "Increase RR; permissive approach acceptable"],
["VILI / Barotrauma", "Large Vt to single lung", "Lung-protective ventilation strategy"],
["DLT malposition", "Tube migration (especially lateral)", "FOB confirmation; recheck after positioning"],
["Bronchospasm", "Airway manipulation, reactive airways", "Bronchodilating agents; deepen anaesthesia"],
["Cardiac arrhythmias", "Mediastinal manipulation, hypoxia", "Treat underlying cause"],
["Tension pneumothorax", "Bullae rupture, excessive airway pressure", "Immediate lung desufflation; chest drain"],
],
story,
col_widths=[4.2*cm, 6.5*cm, 6.5*cm]
)
story.append(Paragraph(b("Postoperative"), h2_style))
plain_table(
["Complication", "Details"],
[
["Acute Lung Injury (ALI)", "Incidence ~2.5% all lung resections; ~7.9% post-pneumonectomy; mortality ~40%. Mechanism: ischaemia-reperfusion, surgical trauma, VILI, cytokine release. Prevention: LPV, fluid restriction, avoid high FiO2."],
["Bronchopleural fistula", "Dehiscence of bronchial stump; risk factors: right pneumonectomy, steroid use, infection"],
["Respiratory failure", "Especially if predicted postoperative lung function was inadequate preoperatively"],
],
story,
col_widths=[4.5*cm, 12.7*cm]
)
# ═══════════════════════════════════════════════════════════════════════════════
# 9. SPECIAL SITUATIONS
# ═══════════════════════════════════════════════════════════════════════════════
section_header("9. Special Situations", story)
special = [
("<b>Difficult airway:</b>", "Bronchial blockers preferred. Video-laryngoscopy for DLT. Awake FOI with DLT/blocker. Exchange catheter technique (establish with SLT first, then exchange)."),
("<b>Paediatric patients:</b>", "DLT not available <8–10 years. Use Arndt blocker or Fogarty catheter through age-appropriate SLT. Selective mainstem intubation simplest in small children."),
("<b>COPD:</b>", "Risk of auto-PEEP (air trapping). Ensure long expiratory time (I:E ≥1:3). Monitor for intrinsic PEEP."),
("<b>Emphysema:</b>", "Delayed lung collapse (low elastic recoil). Thorough denitrogenation essential. Consider early open thorax (gravity-aided collapse)."),
("<b>Pulmonary hypertension:</b>", "HPV may already be maximal. OLV poorly tolerated. Plan early; have pharmacological backup ready."),
("<b>Tracheostomy:</b>", "DLT exchange may be impossible. Use bronchial blocker. Arndt blocker placed via FOB through tracheostomy tube."),
]
for label, text in special:
story.append(Paragraph(f"{label} {text}", bullet_style))
story.append(Spacer(1, 2))
# ═══════════════════════════════════════════════════════════════════════════════
# 10. LUNG ISOLATION vs SEPARATION
# ═══════════════════════════════════════════════════════════════════════════════
section_header("10. Critical Distinction: Lung Isolation vs. Lung Separation", story)
plain_table(
["Feature", "Lung Separation", "Lung Isolation"],
[
["Purpose", "Surgical access / convenience", "Protect healthy lung from contamination"],
["Indication", "Elective lung resection, VATS, oesophageal", "Haemoptysis, empyema, large BPF"],
["Preferred device", "DLT or Bronchial Blocker", "DLT only (BB – inadequate seal)"],
["Consequence of failure","Surgical inconvenience; easily remedied","Life-threatening contamination; potentially fatal"],
],
story,
col_widths=[4.5*cm, 6.3*cm, 6.4*cm]
)
# ═══════════════════════════════════════════════════════════════════════════════
# 11. THERAPEUTIC HYPERCARBIA
# ═══════════════════════════════════════════════════════════════════════════════
section_header("11. Therapeutic Hypercarbia – Emerging Concept", story)
story.append(Paragraph(
"Deliberate hypercapnia (PaCO2 60–70 mmHg) during OLV has been studied in lobectomy patients. "
"Induced hypercapnia was shown to: (1) inhibit local alveolar inflammatory response; "
"(2) decrease airway pressure; (3) increase lung compliance; "
"(4) improve postoperative PaO2/FiO2 ratio. "
"No severe adverse effects were reported. Mechanism: CO2 has direct anti-inflammatory properties, "
"inhibiting cytokine production and neutrophil activation. "
"<i>(Barash Clinical Anaesthesia 9e, p. 3211)</i>", body_style))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════════════════════════════
# 12. KEY NUMBERS SUMMARY TABLE
# ═══════════════════════════════════════════════════════════════════════════════
section_header("12. Key Numbers to Remember", story)
plain_table(
["Parameter", "Value"],
[
["Shunt fraction (Qs/Qt) – two-lung ventilation", "~10%"],
["Shunt fraction – OLV without HPV", "~40%"],
["Shunt fraction – OLV with HPV", "~27.5%"],
["HPV reduces nondependent lung blood flow by", "~50%"],
["Recommended tidal volume during OLV", "4–6 mL/kg predicted body weight"],
["Target plateau pressure", "<25 cmH2O"],
["Target peak airway pressure", "<35 cmH2O"],
["PEEP to dependent lung", "5–8 cmH2O"],
["CPAP to nondependent lung", "5–10 cmH2O"],
["ALI incidence post-pneumonectomy", "~7.9%"],
["ALI associated mortality/major morbidity", "~40%"],
["Left vs. right DLT use", "Left ~95%; Right ~5%"],
["Predicted postoperative FEV1 (safe threshold)", ">0.8 L"],
["Predicted postoperative DLCO (safe threshold)", ">40% of predicted"],
["VO2 max – prohibitive risk threshold", "<10 mL/kg/min"],
],
story,
col_widths=[10*cm, 7.2*cm]
)
# ═══════════════════════════════════════════════════════════════════════════════
# REFERENCES
# ═══════════════════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=1, color=TEAL, spaceAfter=6))
story.append(Paragraph("<b>References</b>", h2_style))
refs = [
"Miller RD et al. Miller's Anesthesia, 10th Edition. Elsevier, 2024. Chapters 12 & 49.",
"Morgan GE, Mikhail MS. Morgan & Mikhail's Clinical Anesthesiology, 7th Edition. McGraw-Hill, 2022. Chapter 25.",
"Barash PG et al. Barash, Cullen & Stoelting's Clinical Anesthesia, 9th Edition. Wolters Kluwer, 2022. Chapter 38.",
"Benumof JL. Anesthesia for Thoracic Surgery. WB Saunders, 1987.",
"Slinger P. Pro: Low tidal volume is indicated for one-lung ventilation. Anesth Analg. 2006.",
]
for ref in refs:
story.append(Paragraph(f"• {ref}", ref_style))
story.append(Spacer(1, 10))
story.append(Paragraph(
"Generated by Orris Medical AI | MD Anaesthesia Examination Preparation | July 2026",
ParagraphStyle("footer", parent=body_style, fontSize=7.5,
textColor=colors.HexColor("#888888"), alignment=TA_CENTER)
))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/olv-pdf && python3 generate_olv_pdf.py 2>&1
ls -lh /home/daytona/workspace/olv-pdf/One_Lung_Ventilation_MD_Anaesthesia.pdf
One Lung Ventilation MD Anaesthesia
PDF Document · PDF
| Section | Content |
|---|---|
| Cover block | Title, exam mark, source textbooks |
| 1. Definition | Introduction to OLV |
| 2. Indications | Absolute vs. relative – formatted tables |
| 3. Preoperative assessment | FEV1, DLCO, VO2 max, ABG thresholds |
| 4. Physiology | Shunt fractions table + OLV physiology diagram (from Barash) |
| 5. Techniques | DLT (left vs. right), bronchial blockers comparison table, other techniques |
| 6. Management | Anaesthetic agents, lung-protective ventilation table, denitrogenation |
| 7. Hypoxaemia algorithm | 9-step sequential management table |
| 8. Complications | Intraoperative + postoperative tables |
| 9. Special situations | Difficult airway, paediatrics, COPD, PH, tracheostomy |
| 10. Isolation vs. Separation | Critical distinction table |
| 11. Therapeutic hypercarbia | Emerging concept |
| 12. Key numbers | Quick-reference summary table (15 parameters) |