Hi
I'm a respiratory therapist
Just now graduated on June 15 and I have an interview tomorrow, could you help me
300 = normal
| Alarm | Common Causes |
|---|---|
| High pressure | Secretions, biting tube, bronchospasm, pneumothorax, decreased compliance |
| Low pressure | Disconnection, leak, cuff deflation |
| Low tidal volume | Leak, patient-ventilator asynchrony |
| Apnea | Oversedation, patient stop triggering |
Abg
| Parameter | Normal Range |
|---|---|
| pH | 7.35 - 7.45 |
| PaCO2 | 35 - 45 mmHg |
| HCO3 | 22 - 26 mEq/L |
| PaO2 | 80 - 100 mmHg |
| SaO2 | 95 - 100% |
| Base Excess | -2 to +2 |
7.45 = Alkalosis
| Disorder | Expected Compensation |
|---|---|
| Respiratory Acidosis | HCO3 rises 1 mEq/L per 10 mmHg CO2 (acute) / 3.5 mEq/L (chronic) |
| Respiratory Alkalosis | HCO3 drops 2 mEq/L per 10 mmHg CO2 (acute) / 5 mEq/L (chronic) |
| Metabolic Acidosis | PaCO2 = (1.5 x HCO3) + 8 ± 2 (Winter's Formula) |
| Metabolic Alkalosis | PaCO2 rises 0.7 mmHg per 1 mEq/L rise in HCO3 |
Pressure related to lung and ventilator
30 = overdistension risk, barotrauma
| Scenario | PIP | Pplat | What It Means |
|---|---|---|---|
| Normal | ~25 | ~20 | All good |
| High PIP, normal Pplat | ↑ | Normal | Airway resistance problem (secretions, bronchospasm, kinked tube) |
| High PIP, high Pplat | ↑ | ↑ | Compliance problem (ARDS, pneumothorax, pulmonary edema, stiff lungs) |
| Term | Cause | Prevention |
|---|---|---|
| Barotrauma | Excess pressure | Keep Pplat < 30 |
| Volutrauma | Excess volume | 6 mL/kg IBW |
| Atelectrauma | Cyclic opening/closing of alveoli | Adequate PEEP |
| Biotrauma | Inflammatory mediators from all of the above | Lung-protective strategy overall |
"When I see high PIP, the first thing I do is get a plateau pressure. If Pplat is normal, the problem is resistance - I'll suction, check for bronchospasm, or look at the circuit. If Pplat is also elevated, the problem is compliance - I'll look at the chest X-ray, check for pneumothorax, and consider adjusting PEEP or tidal volume per lung-protective strategy."
Quiz me on pressure scenarios (PIP/Pplat combinations)
A 58-year-old man is intubated for respiratory failure. He's on Volume AC.
- PIP: 48 cmH2O ⬆️
- Pplat: 22 cmH2O ✅
- PEEP: 5
- Tidal Volume: 500 mL
Plateau pressure is reduce
PIP - Pplat = 48 - 22 = 26 cmH2O
"High PIP + normal Pplat = resistance problem, not a lung problem."
Wait what happens if plateau pressure is reduced and also increased
PIP high + Pplat normal/low
PIP high + Pplat high
| Cause | Clue |
|---|---|
| ARDS | Bilateral infiltrates, P/F < 300 |
| Pneumothorax | Sudden onset, absent breath sounds, hypotension |
| Pulmonary edema | Crackles, fluid overload, cardiac history |
| Pulmonary fibrosis | Chronic, honeycombing on CT |
| Right mainstem intubation | Unilateral breath sounds, tube too deep |
| Abdominal compartment syndrome | Distended abdomen, high pressures |
| Auto-PEEP | COPD/asthma, air trapping |
| PIP | Pplat | Gap (PIP-Pplat) | Problem | |
|---|---|---|---|---|
| Normal | ~25 | ~20 | ~5 | Nothing |
| Resistance ↑ | ↑↑ | Normal | Large (>10) | Airways/tube/circuit |
| Compliance ↓ | ↑↑ | ↑↑ | Small (<10) | Lungs/chest wall |
| Both problems | ↑↑ | ↑ | Large | Resistance + compliance |
Pplat = lung pressure
- Pplat normal = lungs are happy, look at the airway
- Pplat high = lungs are sick, look at the parenchyma
Continue with Scenario 2 quiz
A 32-year-old woman with no prior lung history is intubated after a severe pneumonia. She's on Volume AC, 6 mL/kg IBW.
- PIP: 42 cmH2O ⬆️
- Pplat: 34 cmH2O ⬆️
- PEEP: 8
- FiO2: 0.80
- Tidal Volume: 380 mL
- SpO2: 88%
Peep is the problem maker
PaO2 ÷ FiO2 - SpO2 is 88% on FiO2 0.80 - that's very poor oxygenation = likely ARDS
❌ That is ABOVE the lung-protective limit of 30 cmH2O
Pplat - PEEP = 34 - 8 = 26 cmH2O ❌ That is above the goal of < 15 cmH2O
| PEEP too LOW | PEEP appropriately HIGH |
|---|---|
| Alveoli collapse on expiration | Alveoli stay open |
| Atelectrauma (cyclic opening/closing) | Reduced atelectrauma |
| Poor oxygenation | Improved oxygenation |
| Compliance stays low | Compliance may improve |
Think of PEEP as splinting open the alveoli. In ARDS, the lungs are wet and collapsed - PEEP holds them open between breaths.
"High PIP and high Pplat with a normal gap tells me compliance is the issue. Pplat of 34 is unsafe - I need to reduce tidal volume and optimize PEEP per ARDSnet to protect the lungs and improve oxygenation."
Create a quick reference guide for pressure scenarios
mkdir -p /home/daytona/workspace/rt-reference && ls /home/daytona/workspace/rt-r…
~/rt-reference/pressure_reference.py
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/rt-reference/RT_Pressure_Quick_Reference.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=letter,
rightMargin=0.6*inch,
leftMargin=0.6*inch,
topMargin=0.6*inch,
bottomMargin=0.6*inch
)
# ── Colors ──────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
RED = colors.HexColor("#b91c1c")
LIGHT_RED = colors.HexColor("#fee2e2")
GREEN = colors.HexColor("#15803d")
LIGHT_GREEN = colors.HexColor("#dcfce7")
ORANGE = colors.HexColor("#c2410c")
LIGHT_ORANGE= colors.HexColor("#ffedd5")
YELLOW = colors.HexColor("#854d0e")
LIGHT_YELLOW= colors.HexColor("#fef9c3")
GREY_LIGHT = colors.HexColor("#f1f5f9")
GREY_MID = colors.HexColor("#94a3b8")
WHITE = colors.white
styles = getSampleStyleSheet()
def style(name, **kw):
s = styles[name].clone(name + str(id(kw)))
for k, v in kw.items():
setattr(s, k, v)
return s
title_style = style("Title", fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=2)
sub_style = style("Normal", fontSize=10, textColor=LIGHT_BLUE, alignment=TA_CENTER, spaceAfter=4)
h1_style = style("Heading1",fontSize=13, textColor=WHITE, spaceBefore=6, spaceAfter=4)
h2_style = style("Heading2",fontSize=11, textColor=DARK_BLUE, spaceBefore=8, spaceAfter=3)
body_style = style("Normal", fontSize=9, textColor=colors.black, leading=13)
bold_style = style("Normal", fontSize=9, textColor=colors.black, leading=13)
small_style = style("Normal", fontSize=8, textColor=colors.HexColor("#475569"), leading=11)
italic_style = style("Normal", fontSize=9, textColor=DARK_BLUE, leading=13)
footer_style = style("Normal", fontSize=7.5,textColor=GREY_MID, alignment=TA_CENTER)
def section_header(text, bg=MED_BLUE):
data = [[Paragraph(text, h1_style)]]
t = Table(data, colWidths=[7.3*inch])
t.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), 10),
("ROUNDEDCORNERS", [4]),
]))
return t
def note_box(text, bg=LIGHT_BLUE, border=MED_BLUE):
data = [[Paragraph(text, style("Normal", fontSize=9, textColor=DARK_BLUE, leading=13))]]
t = Table(data, colWidths=[7.3*inch])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LINEAFTER", (0,0),(0,-1), 3, border),
("LINEBEFORE", (0,0),(0,-1), 3, border),
]))
return t
elements = []
# ══════════════════════════════════════════════════════════════════════════════
# HEADER BANNER
# ══════════════════════════════════════════════════════════════════════════════
header_data = [[
Paragraph("🫁 ICU Respiratory Therapy", title_style),
""
],[
Paragraph("Ventilator Pressure Scenarios — Quick Reference Guide", sub_style),
""
]]
header_table = Table(header_data, colWidths=[7.3*inch, 0])
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARK_BLUE),
("TOPPADDING", (0,0),(-1,-1), 14),
("BOTTOMPADDING", (0,0),(-1,-1), 14),
("LEFTPADDING", (0,0),(-1,-1), 16),
("SPAN", (0,0),(-1,0)),
("SPAN", (0,1),(-1,1)),
]))
elements.append(header_table)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 — NORMAL VALUES
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("① Normal Ventilator Pressure Values"))
elements.append(Spacer(1, 4))
norm_data = [
[Paragraph("<b>Parameter</b>", body_style),
Paragraph("<b>Normal Range</b>", body_style),
Paragraph("<b>Clinical Significance</b>", body_style)],
["PIP (Peak Inspiratory Pressure)", "< 40 cmH₂O", "Total pressure to deliver breath (resistance + compliance)"],
["Pplat (Plateau Pressure)", "< 30 cmH₂O", "Alveolar pressure — reflects lung compliance only"],
["PEEP", "5 cmH₂O (base)","Prevents alveolar collapse at end-expiration"],
["Driving Pressure (Pplat − PEEP)", "< 15 cmH₂O", "Best predictor of ARDS mortality"],
["PIP − Pplat Gap", "< 10 cmH₂O", "Reflects airway resistance"],
["Static Compliance (Cstat)", "60–100 mL/cmH₂O","Vt ÷ (Pplat − PEEP)"],
["Dynamic Compliance (Cdyn)", "Lower than Cstat","Vt ÷ (PIP − PEEP)"],
]
col_w = [2.2*inch, 1.6*inch, 3.5*inch]
norm_table = Table(norm_data, colWidths=col_w)
norm_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_LIGHT]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
elements.append(norm_table)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 — MASTER DECISION TABLE
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("② PIP vs Pplat — Master Decision Table"))
elements.append(Spacer(1, 4))
dec_data = [
[Paragraph("<b>PIP</b>", body_style),
Paragraph("<b>Pplat</b>", body_style),
Paragraph("<b>Gap</b>", body_style),
Paragraph("<b>Problem</b>", body_style),
Paragraph("<b>Common Causes</b>", body_style),
Paragraph("<b>Interventions</b>", body_style)],
[Paragraph("Normal\n~25", small_style),
Paragraph("Normal\n~20", small_style),
Paragraph("~5\n✅ OK", small_style),
Paragraph("None", small_style),
Paragraph("Baseline", small_style),
Paragraph("Continue monitoring", small_style)],
[Paragraph("<b>HIGH ↑↑</b>", style("Normal", fontSize=9, textColor=RED)),
Paragraph("Normal\n✅", small_style),
Paragraph("<b>Large\n>10</b>", style("Normal", fontSize=9, textColor=RED)),
Paragraph("<b>Airway\nRESISTANCE ↑</b>", style("Normal", fontSize=9, textColor=RED)),
Paragraph("Secretions\nBronchospasm\nKinked ETT\nWater in circuit\nSmall ETT", small_style),
Paragraph("Suction\nBronchodilator\nCheck circuit\nCheck ETT position", small_style)],
[Paragraph("<b>HIGH ↑↑</b>", style("Normal", fontSize=9, textColor=ORANGE)),
Paragraph("<b>HIGH ↑↑\n>30</b>", style("Normal", fontSize=9, textColor=ORANGE)),
Paragraph("Small\n<10", small_style),
Paragraph("<b>Lung\nCOMPLIANCE ↓</b>", style("Normal", fontSize=9, textColor=ORANGE)),
Paragraph("ARDS\nPneumothorax\nPulmonary edema\nR mainstem intub.\nAuto-PEEP\nAbdominal comp. synd.", small_style),
Paragraph("CXR stat\nRule out PTX first\n↓ Vt to 4–6 mL/kg\nOptimize PEEP\nCheck Cstat", small_style)],
[Paragraph("<b>HIGH ↑↑</b>", style("Normal", fontSize=9, textColor=colors.purple)),
Paragraph("<b>HIGH ↑\n28–34</b>", style("Normal", fontSize=9, textColor=colors.purple)),
Paragraph("<b>Large\n>10</b>", style("Normal", fontSize=9, textColor=colors.purple)),
Paragraph("<b>BOTH\nResistance +\nCompliance</b>", style("Normal", fontSize=9, textColor=colors.purple)),
Paragraph("ARDS +\nbronchospasm\nSepsis with\nmucus plugging", small_style),
Paragraph("Address both:\nSuction + bronchodilator\n↓ Vt\nOptimize PEEP", small_style)],
]
dec_col_w = [0.7*inch, 0.7*inch, 0.75*inch, 1.2*inch, 1.8*inch, 2.15*inch]
dec_table = Table(dec_data, colWidths=dec_col_w)
dec_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("BACKGROUND", (0,2), (-1,2), LIGHT_RED),
("BACKGROUND", (0,3), (-1,3), LIGHT_ORANGE),
("BACKGROUND", (0,4), (-1,4), colors.HexColor("#f3e8ff")),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
]))
elements.append(dec_table)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 — KEY FORMULAS
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("③ Key Formulas to Know Cold", bg=colors.HexColor("#064e3b")))
elements.append(Spacer(1, 4))
formulas = [
("<b>Driving Pressure</b>", "Pplat − PEEP", "Goal: <b><15 cmH₂O</b> | Strongest ARDS mortality predictor"),
("<b>Static Compliance (Cstat)</b>", "Vt ÷ (Pplat − PEEP)", "Normal: <b>60–100 mL/cmH₂O</b> | Low = stiff lungs"),
("<b>Dynamic Compliance (Cdyn)</b>", "Vt ÷ (PIP − PEEP)", "Always lower than Cstat | Includes resistance"),
("<b>Airway Resistance (Raw)</b>", "(PIP − Pplat) ÷ Flow", "Normal: <b><10 cmH₂O/L/sec</b>"),
("<b>P/F Ratio</b>", "PaO₂ ÷ FiO₂", ">300 normal | 200–300 mild ARDS | 100–200 mod | <100 severe"),
("<b>RSBI</b>", "RR ÷ Vt (liters)", "<105 = likely tolerates extubation"),
]
f_data = [[Paragraph("<b>Formula</b>", body_style), Paragraph("<b>Equation</b>", body_style), Paragraph("<b>Notes</b>", body_style)]]
for name, eq, note in formulas:
f_data.append([
Paragraph(name, style("Normal", fontSize=9, textColor=DARK_BLUE)),
Paragraph(f"<font color='#1d4ed8'><b>{eq}</b></font>", body_style),
Paragraph(note, small_style)
])
f_table = Table(f_data, colWidths=[1.9*inch, 2.1*inch, 3.3*inch])
f_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#064e3b")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREEN]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("FONTSIZE", (0,0), (-1,-1), 9),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elements.append(f_table)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 — PEEP
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("④ PEEP — Friend or Foe?", bg=colors.HexColor("#7c3aed")))
elements.append(Spacer(1, 4))
peep_data = [
[Paragraph("<b>PEEP Too LOW</b>", style("Normal", fontSize=9, textColor=RED, alignment=TA_CENTER)),
Paragraph("<b>PEEP Appropriate</b>", style("Normal", fontSize=9, textColor=GREEN, alignment=TA_CENTER)),
Paragraph("<b>PEEP Too HIGH</b>", style("Normal", fontSize=9, textColor=ORANGE, alignment=TA_CENTER))],
[
Paragraph("• Alveolar collapse\n• Atelectrauma\n• Poor oxygenation\n• Low FRC", small_style),
Paragraph("• Alveoli stay open\n• Reduced atelectrauma\n• Improved oxygenation\n• May improve compliance", small_style),
Paragraph("• Overdistension\n• High driving pressure\n• ↓ Venous return → hypotension\n• Barotrauma risk", small_style),
]
]
peep_table = Table(peep_data, colWidths=[2.43*inch, 2.43*inch, 2.43*inch])
peep_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_RED),
("BACKGROUND", (1,0), (1,0), LIGHT_GREEN),
("BACKGROUND", (2,0), (2,0), LIGHT_ORANGE),
("BACKGROUND", (0,1), (0,1), colors.HexColor("#fff5f5")),
("BACKGROUND", (1,1), (1,1), colors.HexColor("#f0fdf4")),
("BACKGROUND", (2,1), (2,1), colors.HexColor("#fff7ed")),
("GRID", (0,0), (-1,-1), 0.5, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,0), (-1,0), "CENTER"),
]))
elements.append(peep_table)
elements.append(Spacer(1, 8))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5 — TRAUMA TYPES
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("⑤ Ventilator-Induced Lung Injury (VILI)", bg=colors.HexColor("#991b1b")))
elements.append(Spacer(1, 4))
vili_data = [
[Paragraph("<b>Type</b>", body_style),
Paragraph("<b>Cause</b>", body_style),
Paragraph("<b>Prevention</b>", body_style),
Paragraph("<b>Monitoring</b>", body_style)],
["Barotrauma", "Excess pressure", "Pplat < 30 cmH₂O", "Watch Pplat"],
["Volutrauma", "Excess volume (overstretch)", "Vt 6 mL/kg IBW", "Monitor Vt vs IBW"],
["Atelectrauma", "Cyclic alveolar open/collapse", "Adequate PEEP", "Oxygenation trend"],
["Biotrauma", "Inflammatory mediators (all above)", "Lung-protective strategy overall", "Clinical deterioration"],
]
vili_table = Table(vili_data, colWidths=[1.4*inch, 2.0*inch, 2.1*inch, 1.8*inch])
vili_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#991b1b")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_RED]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("FONTSIZE", (0,0), (-1,-1), 9),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
elements.append(vili_table)
elements.append(Spacer(1, 8))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6 — INTERVIEW ONE-LINERS
# ══════════════════════════════════════════════════════════════════════════════
elements.append(section_header("⑥ ICU Interview One-Liners", bg=colors.HexColor("#854d0e")))
elements.append(Spacer(1, 4))
liners = [
("High PIP + normal Pplat:", "Resistance problem. Suction, check for bronchospasm, inspect the circuit and ETT."),
("High PIP + high Pplat:", "Compliance problem. CXR stat, rule out pneumothorax, reduce Vt, optimize PEEP."),
("Pplat > 30:", "Not lung-protective. Reduce Vt — accept permissive hypercapnia if needed."),
("Driving pressure > 15:", "Overdistension risk. Reduce Vt first; if Pplat allows, consider increasing PEEP."),
("Auto-PEEP suspected:", "Do expiratory hold. Decrease RR, increase exp. time (lower I:E), give bronchodilators."),
("Sudden high pressure spike:", "Pneumothorax until proven otherwise — assess breath sounds, call physician stat."),
]
liner_data = []
for trigger, answer in liners:
liner_data.append([
Paragraph(f"<b>{trigger}</b>", style("Normal", fontSize=9, textColor=DARK_BLUE)),
Paragraph(answer, small_style)
])
liner_table = Table(liner_data, colWidths=[2.2*inch, 5.1*inch])
liner_table.setStyle(TableStyle([
("ROWBACKGROUNDS",(0,0), (-1,-1), [LIGHT_YELLOW, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, GREY_MID),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elements.append(liner_table)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════════════════════════════════════
elements.append(HRFlowable(width="100%", thickness=0.5, color=GREY_MID))
elements.append(Spacer(1, 4))
elements.append(Paragraph(
"ICU RT Interview Prep | Created with Orris AI | For educational use only | Always follow institutional protocols",
footer_style
))
doc.build(elements)
print(f"PDF created: {OUTPUT}")
python /home/daytona/workspace/rt-reference/pressure_reference.py
RT Pressure Quick Reference
PDF Document · PDF
Practice common ICU interview questions & answers
"Walk me through how you would set up initial ventilator settings for a newly intubated adult patient."
Vt - 6 to 8 litter per kg weight according to patient
It's mL/kg, not liters/kg 6 liters/kg would massively overinflate and kill the patient In an interview, saying "liters" instead of "milliliters" is a red flag - practice saying "mL per kg" out loud
Always base Vt on Ideal Body Weight (IBW), not the patient's actual weight A 300 lb obese patient still has the same size lungs as someone at their ideal weight Using actual weight = dangerous overdistension
"For a newly intubated adult, I would start with Volume Assist-Control mode. I'd set tidal volume at 6 to 8 mL/kg of ideal body weight - and I'd calculate IBW based on height and gender, not actual weight. I'd set rate at 12 to 16 breaths per minute, FiO2 at 100% initially then wean down to keep SpO2 between 92 and 96%. I'd start PEEP at 5 cmH2O as a baseline. Then I'd get an ABG in 30 minutes to assess ventilation and oxygenation, check a plateau pressure to make sure I'm under 30, and adjust from there. If this is an ARDS patient, I'd go straight to 6 mL/kg IBW and apply the ARDSnet protocol."
| Formula | |
|---|---|
| Male | 50 + 2.3 × (height in inches − 60) |
| Female | 45.5 + 2.3 × (height in inches − 60) |
| Parameter | Setting |
|---|---|
| Mode | Volume A/C |
| Tidal Volume | 6-8 mL/kg IBW |
| Rate | 12-16 breaths/min |
| FiO2 | 1.0 (then wean) |
| PEEP | 5 cmH2O |
| Flow | 60 L/min (adjust I:E) |
| Sensitivity | -1 to -2 cmH2O (pressure trigger) |
Continue with interview question 3
"A ventilated patient suddenly becomes agitated, the high pressure alarm is going off, and SpO2 is dropping. What do you do?"
Suction will see for any obstruction
In an ICU emergency, interviewers want to see you use a framework, not just react. The magic acronym here is DOPE
| Letter | Stands For | Examples |
|---|---|---|
| D | Displacement | ETT displaced - extubated, right mainstem, too deep/shallow |
| O | Obstruction | Secretions, mucus plug, biting tube, kinked circuit |
| P | Pneumothorax | Sudden onset, absent breath sounds, tension PTX = emergency |
| E | Equipment failure | Vent malfunction, disconnection, empty O2 source |
"First I would not panic - I'd go to the bedside immediately and do a rapid assessment. I'd look at the patient - are they breathing, what's their color, are they fighting the vent? I'd manually ventilate with a BVM and 100% O2 to take the vent out of the equation and assess lung compliance by feel. Then I'd work through DOPE:D - Is the tube displaced? I'd check tube position at the teeth, listen for bilateral breath sounds, look for chest rise.O - Is there an obstruction? I'd suction the ETT and check the circuit for kinks or water.P - Pneumothorax? I'd auscultate both sides - absent or decreased breath sounds on one side, with hypotension and tracheal deviation means tension PTX - I'd call the physician immediately for needle decompression.E - Equipment failure? Check all connections, vent settings, O2 supply.Throughout this I'd be calling for the nurse and physician, keeping the patient on 100% FiO2, and communicating clearly with the team."
Manually ventilating immediately tells you two things:
- Easy to bag = likely a vent/circuit problem (equipment)
- Hard to bag = likely a patient problem (obstruction, pneumothorax, bronchospasm)
"Sudden deterioration in a vented patient - I go to bedside, bag the patient, and work through DOPE: Displacement, Obstruction, Pneumothorax, Equipment."
Give me more ICU emergency scenarios to practice
A 67-year-old COPD patient is intubated and on Volume A/C. Over the past 20 minutes you notice:
- Blood pressure dropping: 118/72 → 94/60 → 78/50 ⬇️
- Heart rate rising: 88 → 110 → 128 ⬆️
- SpO2: 91%
- High pressure alarms going off
- Breath sounds decreased on the LEFT
- The ventilator is not fully cycling - expiratory flow is not returning to zero
Cardiac arrest
| Clue | What It Means |
|---|---|
| COPD patient | High risk for air trapping |
| BP dropping progressively | Obstructive shock developing |
| HR rising | Compensating for low BP |
| High pressure alarms | Air can't get out - building up |
| Decreased breath sounds LEFT | Air or problem on that side |
| Expiratory flow NOT returning to zero | Auto-PEEP / air trapping confirmed |
This is Auto-PEEP (dynamic hyperinflation) leading to tension physiology - not a primary cardiac arrest
"This patient has Auto-PEEP causing obstructive shock. The COPD history, rising pressures, expiratory flow not returning to zero, and dropping BP all point to dynamic hyperinflation. I would:Step 1 - Disconnect from the vent immediately
- Remove the patient from the ventilator for 30-60 seconds
- This allows trapped air to escape and is often instantly life-saving
- Watch - BP will often come back up within seconds
Step 2 - Reassess
- Did BP recover? If yes, auto-PEEP confirmed
- If breath sounds still decreased on left after decompression, now consider pneumothorax
Step 3 - Fix the vent settings
- Decrease respiratory rate (give more time to exhale)
- Decrease tidal volume
- Increase expiratory time - adjust I:E ratio (target 1:3 or 1:4 in COPD)
- Consider reducing PEEP set
Step 4 - Treat the underlying COPD
- Bronchodilators (albuterol/ipratropium)
- Notify physician throughout*
| Who gets it | COPD, asthma, high RR, short exp. time |
| How to detect | Expiratory hold maneuver - vent shows positive pressure at end-expiration |
| Bedside sign | Flow-time waveform doesn't return to zero |
| Hemodynamic effect | ↓ Venous return → ↓ BP → obstructive shock |
| Emergency fix | Disconnect from vent - let air out |
| Vent fix | ↓ RR, ↓ Vt, ↑ expiratory time, bronchodilators |
Create a quick reference card on AUTO-PEEP recognition
ls /home/daytona/workspace/rt-reference/
~/rt-reference/auto_peep_card.py
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/rt-reference/RT_AutoPEEP_Quick_Reference.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=letter,
rightMargin=0.55*inch,
leftMargin=0.55*inch,
topMargin=0.55*inch,
bottomMargin=0.55*inch
)
# ── Colors ──────────────────────────────────────────────────────────────────
DARK = colors.HexColor("#1e1b4b") # deep indigo
MED = colors.HexColor("#4338ca") # indigo
LIGHT = colors.HexColor("#e0e7ff") # pale indigo
RED = colors.HexColor("#b91c1c")
LIGHT_RED = colors.HexColor("#fee2e2")
GREEN = colors.HexColor("#15803d")
LIGHT_GREEN = colors.HexColor("#dcfce7")
ORANGE = colors.HexColor("#c2410c")
LIGHT_ORG = colors.HexColor("#ffedd5")
YELLOW_D = colors.HexColor("#854d0e")
YELLOW_L = colors.HexColor("#fef9c3")
TEAL = colors.HexColor("#0f766e")
LIGHT_TEAL = colors.HexColor("#ccfbf1")
GREY_L = colors.HexColor("#f1f5f9")
GREY_M = colors.HexColor("#94a3b8")
WHITE = colors.white
styles = getSampleStyleSheet()
def S(name, **kw):
s = styles[name].clone(name + str(id(kw)))
for k, v in kw.items():
setattr(s, k, v)
return s
title_s = S("Title", fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=2, leading=28)
sub_s = S("Normal", fontSize=10, textColor=LIGHT, alignment=TA_CENTER, spaceAfter=2)
h1_s = S("Heading1",fontSize=12, textColor=WHITE, spaceBefore=4, spaceAfter=3, leading=16)
body_s = S("Normal", fontSize=9, textColor=colors.black, leading=13)
small_s = S("Normal", fontSize=8.5,textColor=colors.HexColor("#1e293b"), leading=12)
sm_red_s = S("Normal", fontSize=8.5,textColor=RED, leading=12)
sm_grn_s = S("Normal", fontSize=8.5,textColor=GREEN, leading=12)
sm_org_s = S("Normal", fontSize=8.5,textColor=ORANGE, leading=12)
bold_s = S("Normal", fontSize=9, textColor=DARK, leading=13)
center_s = S("Normal", fontSize=9, textColor=colors.black, alignment=TA_CENTER, leading=13)
footer_s = S("Normal", fontSize=7.5,textColor=GREY_M, alignment=TA_CENTER)
PAGE_W = 7.4 * inch
def sec_hdr(text, bg=MED):
t = Table([[Paragraph(text, h1_s)]], colWidths=[PAGE_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 10),
]))
return t
def callout(text, bg=LIGHT, border=MED):
t = Table([[Paragraph(text, S("Normal", fontSize=9, textColor=DARK, leading=13))]],
colWidths=[PAGE_W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LEFTPADDING", (0,0),(-1,-1), 12),
("RIGHTPADDING", (0,0),(-1,-1), 12),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LINEBEFORE", (0,0),(0,-1), 4, border),
]))
return t
elements = []
# ══════════════════════════════════════════════════════════════════════════════
# BANNER
# ══════════════════════════════════════════════════════════════════════════════
banner = Table([
[Paragraph("Auto-PEEP / Dynamic Hyperinflation", title_s)],
[Paragraph("ICU Respiratory Therapy | Quick Recognition & Management Card", sub_s)],
], colWidths=[PAGE_W])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARK),
("TOPPADDING", (0,0),(-1,-1), 14),
("BOTTOMPADDING", (0,0),(-1,-1), 14),
("LEFTPADDING", (0,0),(-1,-1), 16),
]))
elements.append(banner)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 — WHAT IS AUTO-PEEP
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("① What Is Auto-PEEP?"))
elements.append(Spacer(1, 4))
elements.append(callout(
"<b>Definition:</b> Auto-PEEP (intrinsic PEEP) occurs when air <b>cannot fully escape</b> before the next breath begins. "
"Trapped air raises end-expiratory pressure above the set PEEP, increasing intrathoracic pressure with every breath. "
"Unchecked, it compresses the great vessels and causes <b>obstructive shock</b> — and ultimately cardiac arrest."
))
elements.append(Spacer(1, 8))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 — WHO IS AT RISK
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("② Who Is at Risk?", bg=colors.HexColor("#7c3aed")))
elements.append(Spacer(1, 4))
risk_data = [
[Paragraph("<b>Patient Factors</b>", S("Normal", fontSize=9, textColor=colors.HexColor("#7c3aed"))),
Paragraph("<b>Ventilator Factors</b>", S("Normal", fontSize=9, textColor=colors.HexColor("#7c3aed")))],
[
Paragraph("• COPD / Emphysema\n• Asthma / Status asthmaticus\n• Air trapping diseases\n• High airway resistance", small_s),
Paragraph("• High respiratory rate\n• Large tidal volumes\n• Short expiratory time\n• Low I:E ratio (e.g. 1:1)\n• Insufficient flow rate", small_s),
]
]
risk_t = Table(risk_data, colWidths=[3.7*inch, 3.7*inch])
risk_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#f5f3ff")),
("BACKGROUND", (0,1), (-1,1), WHITE),
("GRID", (0,0), (-1,-1), 0.4, GREY_M),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
elements.append(risk_t)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 — RECOGNITION
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("③ How to Recognize Auto-PEEP", bg=RED))
elements.append(Spacer(1, 4))
rec_data = [
[Paragraph("<b>Sign</b>", body_s),
Paragraph("<b>What You See / Hear</b>", body_s),
Paragraph("<b>Why It Happens</b>", body_s)],
[Paragraph("Expiratory flow waveform\nnot returning to zero", small_s),
Paragraph("Flow-time graph shows positive\nflow still present at next breath", small_s),
Paragraph("Air still moving out when\nnext breath starts", small_s)],
[Paragraph("Expiratory hold maneuver\n(GOLD STANDARD)", S("Normal", fontSize=8.5, textColor=GREEN, leading=12)),
Paragraph("Vent displays positive pressure\nat end-expiration (e.g. +8 cmH₂O)\nwhen patient is passive", small_s),
Paragraph("Directly measures trapped\npressure above set PEEP", small_s)],
[Paragraph("Progressive hypotension", small_s),
Paragraph("BP drops with each breath cycle\n↓ venous return → ↓ CO", small_s),
Paragraph("Rising intrathoracic pressure\ncompresses great vessels", small_s)],
[Paragraph("High peak pressures", small_s),
Paragraph("PIP alarm firing,\npressure rising over time", small_s),
Paragraph("Stacking breaths on top\nof trapped volume", small_s)],
[Paragraph("Patient-ventilator\nasynchrony", small_s),
Paragraph("Patient fighting vent,\nagitation, double triggering", small_s),
Paragraph("Patient's effort can't\novercrome intrinsic PEEP", small_s)],
[Paragraph("Tachycardia", small_s),
Paragraph("HR rising compensatory", small_s),
Paragraph("Response to falling BP\nand increased work", small_s)],
]
rec_t = Table(rec_data, colWidths=[1.9*inch, 2.75*inch, 2.75*inch])
rec_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_RED]),
("BACKGROUND", (0,2), (-1,2), LIGHT_GREEN),
("GRID", (0,0), (-1,-1), 0.4, GREY_M),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
elements.append(rec_t)
elements.append(Spacer(1, 6))
elements.append(callout(
"<b>Expiratory Hold How-To:</b> Press the exp hold button while patient is passive (not actively breathing). "
"Hold for 3-5 seconds. Read the pressure displayed. Any value <b>> set PEEP = Auto-PEEP present.</b> "
"Example: Set PEEP = 5, hold shows 13 cmH₂O → Auto-PEEP = <b>8 cmH₂O</b>.",
bg=LIGHT_GREEN, border=GREEN
))
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 — MANAGEMENT (STEP BY STEP)
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("④ Management — Step by Step", bg=TEAL))
elements.append(Spacer(1, 4))
mgmt_data = [
[Paragraph("<b>Step</b>", body_s),
Paragraph("<b>Action</b>", body_s),
Paragraph("<b>Expected Result</b>", body_s)],
[Paragraph("1\nEMERGENCY", S("Normal", fontSize=9, textColor=RED, alignment=TA_CENTER)),
Paragraph("<b>Disconnect from ventilator</b>\nAllow 30-60 seconds of passive exhalation", small_s),
Paragraph("Trapped air escapes, intrathoracic pressure drops,\nBP often recovers within seconds", sm_grn_s)],
[Paragraph("2", center_s),
Paragraph("<b>Decrease respiratory rate</b>\nGive more time for full exhalation", small_s),
Paragraph("Longer expiratory time per cycle", small_s)],
[Paragraph("3", center_s),
Paragraph("<b>Decrease tidal volume</b>\nLess air in = less air to trap", small_s),
Paragraph("Reduced breath stacking", small_s)],
[Paragraph("4", center_s),
Paragraph("<b>Adjust I:E ratio</b>\nTarget 1:3 or 1:4 in COPD/asthma\n(increase expiratory time)", small_s),
Paragraph("More time allocated to exhalation", small_s)],
[Paragraph("5", center_s),
Paragraph("<b>Increase inspiratory flow rate</b>\nFaster inspiration = more time for exhalation", small_s),
Paragraph("Shifts time from inspiration to expiration", small_s)],
[Paragraph("6", center_s),
Paragraph("<b>Bronchodilators</b>\nAlbuterol + Ipratropium via in-line nebulizer", small_s),
Paragraph("Reduces airway resistance, helps air escape faster", small_s)],
[Paragraph("7", center_s),
Paragraph("<b>Reassess & notify physician</b>\nRepeat exp hold, monitor BP/HR/SpO₂", small_s),
Paragraph("Confirm resolution, adjust plan as needed", small_s)],
]
mgmt_t = Table(mgmt_data, colWidths=[0.75*inch, 3.6*inch, 3.05*inch])
mgmt_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("BACKGROUND", (0,1), (-1,1), LIGHT_RED),
("ROWBACKGROUNDS",(0,2), (-1,-1), [WHITE, LIGHT_TEAL]),
("GRID", (0,0), (-1,-1), 0.4, GREY_M),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,0), (0,-1), "CENTER"),
]))
elements.append(mgmt_t)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5 — WAVEFORM + QUICK COMPARISON
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("⑤ Waveform Clue + Auto-PEEP vs Tension PTX", bg=ORANGE))
elements.append(Spacer(1, 4))
# Two-column layout
left_text = (
"<b>Flow-Time Waveform (Normal):</b><br/>"
"Expiratory flow <b>returns to zero</b> before next breath. Baseline is flat.<br/><br/>"
"<b>Flow-Time Waveform (Auto-PEEP):</b><br/>"
"Expiratory flow <b>does NOT return to zero.</b> "
"Next breath starts before exhalation is complete. "
"The waveform is cut off mid-exhale."
)
right_data = [
[Paragraph("<b>Feature</b>", small_s),
Paragraph("<b>Auto-PEEP</b>", small_s),
Paragraph("<b>Tension PTX</b>", small_s)],
["Breath sounds", "Bilateral ↓ (may be equal)", "Unilateral absent"],
["Trachea", "Midline", "Deviated away"],
["Onset", "Gradual", "Sudden"],
["Exp flow → 0?", "NO", "Yes"],
["Fix", "Disconnect vent", "Needle decompression"],
]
right_t = Table(right_data, colWidths=[1.1*inch, 1.3*inch, 1.3*inch])
right_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), ORANGE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_ORG]),
("GRID", (0,0), (-1,-1), 0.4, GREY_M),
("FONTSIZE", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
]))
two_col = Table([
[Paragraph(left_text, S("Normal", fontSize=8.5, textColor=DARK, leading=13)), right_t]
], colWidths=[3.65*inch, 3.75*inch])
two_col.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
]))
elements.append(two_col)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6 — INTERVIEW ONE-LINERS
# ══════════════════════════════════════════════════════════════════════════════
elements.append(sec_hdr("⑥ ICU Interview One-Liners for Auto-PEEP", bg=YELLOW_D))
elements.append(Spacer(1, 4))
liners = [
("COPD patient BP dropping on vent:", "Think auto-PEEP first. Disconnect, let them exhale, watch BP recover."),
("How do you confirm auto-PEEP?", "Expiratory hold maneuver — pressure above set PEEP = auto-PEEP present."),
("Flow waveform not returning to zero:", "Air trapping. Reduce RR, increase exp time, give bronchodilators."),
("Auto-PEEP emergency fix:", "Disconnect from vent immediately — 30 to 60 seconds of free exhalation."),
("Vent adjustments for auto-PEEP:", "Decrease RR, decrease Vt, increase flow rate, target I:E of 1:3 or 1:4."),
("Why not just increase set PEEP?", "Higher set PEEP in auto-PEEP worsens air trapping — fix the cause instead."),
]
l_data = []
for q, a in liners:
l_data.append([
Paragraph(f"<b>{q}</b>", S("Normal", fontSize=8.5, textColor=DARK)),
Paragraph(a, small_s)
])
l_t = Table(l_data, colWidths=[2.5*inch, 4.9*inch])
l_t.setStyle(TableStyle([
("ROWBACKGROUNDS",(0,0), (-1,-1), [YELLOW_L, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, GREY_M),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
elements.append(l_t)
elements.append(Spacer(1, 10))
# ══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════════════════════════════════════
elements.append(HRFlowable(width="100%", thickness=0.5, color=GREY_M))
elements.append(Spacer(1, 4))
elements.append(Paragraph(
"ICU RT Interview Prep | Auto-PEEP Quick Reference | Created with Orris AI | For educational use only — always follow institutional protocols",
footer_s
))
doc.build(elements)
print(f"PDF created: {OUTPUT}")
python /home/daytona/workspace/rt-reference/auto_peep_card.py
RT AutoPEEP Quick Reference
PDF Document · PDF
RT Pressure Quick Reference
PDF Document · PDF
RT AutoPEEP Quick Reference
PDF Document · PDF
Continue with Emergency Scenario 2 (oxygenation)
A 45-year-old woman was intubated 48 hours ago for bilateral pneumonia. She's on Volume A/C. Morning chest X-ray shows new bilateral infiltrates. Her current numbers:
- FiO2: 1.0 (100%) ⬆️
- SpO2: 86% despite 100% O2 😨
- PaO2: 58 mmHg
- PaCO2: 44 mmHg
- pH: 7.36
- PEEP: 5 cmH2O
- Tidal Volume: 500 mL (she weighs 70 kg actual, 58 kg IBW)
- RR: 18
- Pplat: 28 cmH2O
- BP: 108/64, HR: 118
Barotrauma
| Clue | What It Tells You |
|---|---|
| Bilateral pneumonia → 48 hrs later | Acute onset within 1 week of insult ✅ |
| Bilateral infiltrates on CXR | Non-cardiogenic pulmonary edema pattern ✅ |
| SpO2 86% on 100% FiO2 | Refractory hypoxemia ✅ |
| PaO2 58 on FiO2 1.0 | P/F ratio = 58 → severe ✅ |
| Normal BP (not in heart failure) | Non-cardiogenic cause ✅ |
- Acute onset (within 1 week) ✅
- Bilateral infiltrates on CXR ✅
- Not fully explained by cardiac failure ✅
- P/F ratio < 300 ✅
ARDS - confirmed by Berlin Definition: acute onset, bilateral infiltrates, refractory hypoxemia (P/F < 300), no cardiogenic cause. Get an echo or BNP to rule out cardiac pulmonary edema if needed.
No - it is too high and dangerous.
- Actual weight: 70 kg → but we use IBW = 58 kg
- Current Vt: 500 mL
- 500 ÷ 58 = 8.6 mL/kg IBW ❌
- ARDS goal: 6 mL/kg IBW = 58 × 6 = 348 mL
- She is being volutrauma'd right now
PaO2 ÷ FiO2 = 58 ÷ 1.0 = 58
P/F Range Severity 200-300 Mild ARDS 100-200 Moderate ARDS < 100 Severe ARDS ← she's here This tells you oxygenation is critically failing despite maximum FiO2.
"Bilateral infiltrates, refractory hypoxemia, P/F of 58, acute onset after pneumonia - this is severe ARDS. Her tidal volume is too high at 8.6 mL/kg IBW - I need to reduce to 6 mL/kg, increase PEEP per ARDSnet, and discuss prone positioning with the physician."
| FiO2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1.0 |
|---|---|---|---|---|---|---|---|---|
| PEEP | 5 | 5-8 | 8-10 | 10 | 10-14 | 14 | 14-18 | 18-24 |
Continue with Emergency Scenario 3
A 72-year-old man is post-op day 1 after abdominal surgery. He was extubated this morning. Two hours later the nurse calls you urgently:
- He is using accessory muscles to breathe
- RR: 34 breaths/min ⬆️
- SpO2: 89% on 4L nasal cannula
- He is anxious and diaphoretic
- Breath sounds: bilateral crackles at bases
- BP: 158/94 ⬆️
- HR: 112
- He cannot speak in full sentences
- ABG: pH 7.31 / PaCO2 52 / HCO3 25 / PaO2 54
Explain
RR 34, accessory muscles, can't speak full sentences, anxious, diaphoretic
pH 7.31 / PaCO2 52 / HCO3 25 / PaO2 54
Bilateral crackles at bases, BP 158/94
Combined: Hypoxemic + Hypercapnic respiratory failure after extubation This is called post-extubation respiratory failure - a true emergency
Post-extubation respiratory failure with two components:
- Hypercapnia (CO2 52, pH 7.31) from respiratory muscle fatigue - he cannot sustain the work of breathing
- Hypoxemia (PaO2 54) from pulmonary edema/atelectasis causing poor oxygenation
- Likely cause: post-op fluid overload + increased work of breathing after extubation
Non-Invasive Ventilation (NIV) - BiPAP immediately
Prepare for re-intubation and notify the physician immediately
As the RT: gather your intubation equipment, have suction ready, confirm IV access, pre-oxygenate with BVM, assist the physician with RSI
| BiPAP | Intubation | |
|---|---|---|
| Invasiveness | Non-invasive | Invasive |
| Patient comfort | Better tolerated | Sedation/paralytic needed |
| Infection risk | Low | VAP risk |
| When it works | Reverses failure, avoids intubation | - |
| When to move on | Failing after 20-30 min | Immediately |
NIV is first-line for post-op respiratory failure, COPD exacerbation, and cardiogenic pulmonary edema - these are the three strongest indications.
"Post-extubation respiratory failure - he has acute respiratory acidosis from fatigue and hypoxemia from pulmonary edema. First intervention is BiPAP to offload his muscles and recruit his alveoli. If no improvement in 20 minutes, I prepare for re-intubation and notify the team."
| Condition | Why NIV Works |
|---|---|
| COPD exacerbation | Reduces CO2, reduces intubation rate by 50% |
| Cardiogenic pulmonary edema | EPAP pushes fluid back, reduces preload |
| Post-extubation failure | Bridges the gap, rests respiratory muscles |
Practice more weaning & extubation scenarios
A 58-year-old man has been on the ventilator for 5 days after sepsis. He is now improving. The physician asks you to assess whether this patient is ready for a Spontaneous Breathing Trial (SBT).Here are his current numbers:
- FiO2: 0.40
- PEEP: 5 cmH2O
- SpO2: 96%
- RR: 16 on the vent
- Tidal Volume: 480 mL (IBW 70 kg)
- Pplat: 22 cmH2O
- GCS: 13 (opens eyes to voice, follows commands)
- Cough: present when suctioned
- Hemodynamics: BP 118/72, HR 84, no vasopressors
- Temp: 37.2°C
Yeah patients is coughing
Interviewers want to see you go through every criterion, not just one. Use the SOAP-W framework or a readiness checklist.
| Criterion | Goal | This Patient | Ready? |
|---|---|---|---|
| Oxygenation | FiO2 ≤ 0.40-0.50, PEEP ≤ 5-8 | FiO2 0.40, PEEP 5, SpO2 96% | ✅ |
| Ventilation | Adequate on current settings | RR 16, Pplat 22, Vt good | ✅ |
| Hemodynamics | No/minimal vasopressors, stable BP/HR | BP 118/72, HR 84, no pressors | ✅ |
| Neurological | Follows commands, GCS adequate | GCS 13, follows commands | ✅ |
| Airway protection | Cough present, can handle secretions | Cough present on suction | ✅ |
| Cause resolved | Reason for intubation improving/resolved | Sepsis improving | ✅ |
| Afebrile | No active fever/infection worsening | Temp 37.2°C | ✅ |
All criteria met - YES, this patient is ready to attempt an SBT.
| Method | Settings | Notes |
|---|---|---|
| Pressure Support | PS 5-8 cmH2O / PEEP 5 | Most common, minimal support |
| T-piece | Patient breathes room air through T-piece | No vent support at all, harder test |
| CPAP | PEEP 5, PS 0 | Middle ground |
Most ICUs use PS 5/PEEP 5 - it overcomes ETT resistance without adding significant support
| Parameter | Concern If... |
|---|---|
| RR | > 35 breaths/min |
| SpO2 | < 90% |
| HR | > 140 or change > 20% |
| BP | Systolic < 90 or > 180 |
| Tidal Volume | < 4 mL/kg IBW |
| Work of breathing | Accessory muscle use, paradoxical breathing |
| Mental status | Agitation, anxiety, decreased consciousness |
RSBI = RR ÷ Tidal Volume (in liters)
- RR 16, Vt 480 mL (0.48 L)
- RSBI = 16 ÷ 0.48 = 33 ✅ (excellent - well below 105)
| RSBI | Prediction |
|---|---|
| < 80 | Strong predictor of success |
| 80-105 | Borderline |
| > 105 | Likely to fail - do not extubate |
✅ RR < 35 ✅ SpO2 > 90% (or PaO2 > 60) ✅ HR and BP stable ✅ No significant distress ✅ Adequate tidal volume ✅ Alert and cooperative
After a failed SBT: rest the patient on comfortable vent settings for at least 24 hours before trying again
"All weaning criteria are met - oxygenation adequate, hemodynamics stable, neurologically intact, cough present. I would start a PS 5/PEEP 5 SBT, calculate RSBI, monitor closely for 30-120 minutes, and if he passes all criteria I would recommend extubation to the physician."
Hacker's score
| Score | Cough Description |
|---|---|
| 0 | No cough at all |
| 1 | Audible movement of air but no audible cough |
| 2 | Weakly audible cough |
| 3 | Clearly audible cough |
| 4 | Strong cough - single effort |
| 5 | Strong cough - chained (multiple coughs in one effort) |
Score ≥ 3 = adequate cough strength for extubation Score < 3 = high risk - reconsider extubation
| Parameter | Assessment |
|---|---|
| Cough strength | Strong / weak / absent |
| Secretion volume | Minimal / moderate / copious |
| Secretion thickness | Thin / thick |
| Suctioning frequency | How often needed per hour |
Copious thick secretions + weak cough = extubation will likely fail regardless of SBT result
EXTUBATION READINESS
/ | \
/ | \
SBT Pass Airway Neuro
Protection Status
(HACK ≥ 3,
secretions
manageable)
| Check | Tool/Method | Goal |
|---|---|---|
| Breathing | SBT (PS 5/PEEP 5) | Pass 30-120 min |
| Weaning predictor | RSBI | < 105 |
| Cough strength | HACK Score | ≥ 3 |
| Secretions | Visual assessment | Manageable |
| Airway swelling | Cuff leak test | Leak present |
| Neuro | GCS, follows commands | Awake, cooperative |
| Hemodynamics | BP, HR, vasopressors | Stable, off or weaning pressors |
"Before I recommend extubation I confirm the patient passed the SBT, RSBI is under 105, HACK score is 3 or above showing adequate cough strength, secretions are manageable, and there is a cuff leak present. All pillars have to be solid."
Spontaneous breathing trail give me full notes
The goal is to simulate breathing after the tube is removed - if the patient tolerates it, extubation is likely to succeed.
| Parameter | Required |
|---|---|
| FiO2 | ≤ 0.40 to 0.50 |
| PEEP | ≤ 5 to 8 cmH2O |
| SpO2 | ≥ 90-92% on above settings |
| P/F ratio | ≥ 150-200 |
| Parameter | Required |
|---|---|
| pH | ≥ 7.25 |
| PaCO2 | Acceptable / at patient's baseline |
| Spontaneous RR | < 35 on current vent support |
| Spontaneous Vt | ≥ 5 mL/kg IBW |
| Parameter | Required |
|---|---|
| Vasopressors | None OR low stable dose weaning |
| Heart rate | < 140, stable |
| Blood pressure | Systolic 90-180 without new agents |
| Active ischemia | None |
| Arrhythmia | No new hemodynamically significant arrhythmia |
| Parameter | Required |
|---|---|
| Level of consciousness | Arousable, follows simple commands |
| GCS | ≥ 8 (minimum), ideally ≥ 13 |
| Sedation | Light or off (RASS -1 to 0) |
| Agitation | Controlled |
| Parameter | Required |
|---|---|
| Cough | Present (HACK score ≥ 3 ideal) |
| Secretions | Manageable (not copious/thick) |
| Suctioning frequency | Not needed more than every 2 hours |
| Airway reflexes | Intact (gag, swallow) |
| Parameter | Required |
|---|---|
| Reason for intubation | Resolved or significantly improved |
| Active fever | No (temp < 38.5°C) |
| Metabolic status | No severe uncorrected electrolyte abnormality |
| Neuromuscular blockade | Fully reversed |
If ANY criterion is not met - do not start the SBT. Address the issue first and reassess the next day.
RSBI (Rapid Shallow Breathing Index) = RR ÷ Tidal Volume (liters)
| RSBI Value | Interpretation |
|---|---|
| < 80 | Strong predictor of SBT success |
| 80 - 105 | Borderline - proceed with caution |
| > 105 | High likelihood of failure - do not proceed |
RSBI was described by Yang & Tobin (1991) and remains one of the most widely used weaning predictors.
Tip for interview: "I prefer PS 5/PEEP 5 because it overcomes ETT resistance without artificially augmenting breathing, and I can monitor all parameters through the ventilator."
| Parameter | Pass Criterion |
|---|---|
| RR | < 35 breaths/min |
| SpO2 | ≥ 90% (or PaO2 ≥ 60 mmHg) |
| HR | < 140 and change < 20% from baseline |
| Systolic BP | 90-180 mmHg, change < 20% |
| Tidal Volume | ≥ 4-5 mL/kg IBW |
| Work of breathing | No accessory muscle use |
| Mental status | Alert, calm, cooperative |
| Comfort | No significant distress or diaphoresis |
Patient passes ALL → Recommend extubation to physician
| Sign | Threshold |
|---|---|
| Tachypnea | RR > 35 |
| Desaturation | SpO2 < 90% |
| Tachycardia | HR > 140 OR > 20% increase |
| Hypertension/Hypotension | SBP > 180 or < 90 |
| Accessory muscle use | Sternocleidomastoid, intercostal retractions |
| Paradoxical breathing | Chest and abdomen move in opposite directions |
| Diaphoresis | Sweating = sign of high work |
| Agitation/anxiety | New or worsening |
| Decreased consciousness | Somnolence, unresponsiveness |
If fail: return to previous comfortable vent settings immediately. Rest patient ≥ 24 hours before next attempt.
| Check | Method | Goal |
|---|---|---|
| SBT result | Pass criteria above | All met |
| RSBI | RR ÷ Vt | < 105 |
| Cough strength | HACK Score | ≥ 3 |
| Secretions | Visual / suction assessment | Manageable |
| Cuff leak | Deflate cuff, listen | Leak present |
| Neuro | GCS, follows commands | Alert, cooperative |
| Post-extubation plan | O2 delivery device ready | NC, HFO, or BiPAP at bedside |
| Reason | What to Fix |
|---|---|
| Secretion overload | Increase suctioning frequency, mucolytics |
| Bronchospasm | Bronchodilators, steroids |
| Fluid overload | Diuresis - notify physician |
| Pain / inadequate analgesia | Optimize pain control |
| Anemia | Check Hgb - transfuse if needed |
| Electrolyte imbalance | Correct K+, Mg2+, PO4 (affect muscle strength) |
| Delirium / agitation | Address sedation, environment, ABCDEF bundle |
| Diaphragm weakness | Progressive vent weaning (PS wean), mobilization |
| Unresolved primary illness | Revisit diagnosis, treat infection |
| Predictor | Normal | Extubation Favorable |
|---|---|---|
| RSBI | - | < 105 |
| MIP / NIF | -80 to -100 cmH2O | More negative than -20 to -25 |
| Vital Capacity | 65-75 mL/kg | > 10-15 mL/kg |
| Minute Ventilation | 5-10 L/min | < 10 L/min |
| P0.1 (airway occlusion pressure) | < 2 cmH2O | < 6 cmH2O |
In clinical practice, RSBI is the most commonly used single predictor. The others are used in specific populations or when RSBI is borderline.
| Trial | What It Is | Who Manages |
|---|---|---|
| SAT | Hold all sedation/analgesics and assess | Nursing + physician |
| SBT | Trial of minimal vent support | RT |
SAT before SBT = ABC protocol (Awakening and Breathing Controlled trial) Research shows SAT + SBT together reduces vent days, ICU stay, and 1-year mortality vs SBT alone.
| Question | Answer |
|---|---|
| "How do you screen for SBT readiness?" | FiO2 ≤ 0.5, PEEP ≤ 8, hemodynamically stable, follows commands, cough present, cause resolved |
| "What settings do you use?" | PS 5-8 / PEEP 5, monitor for 30-120 minutes |
| "What is RSBI and what is the cutoff?" | RR ÷ Vt in liters, < 105 favorable, > 105 likely to fail |
| "When do you stop an SBT?" | Any sign of distress: RR > 35, SpO2 < 90%, hemodynamic instability, accessory muscle use |
| "Patient fails SBT - now what?" | Return to prior settings, rest 24 hours, find and fix the cause |
| "What is the SAT/SBT bundle?" | Hold sedation (SAT) before breathing trial (SBT) - reduces vent days and mortality |