Can you make short slides of this information for a presentation

Reading File
Reading File
Reading File
Running Command

cd /tmp/workspace && python3 -c " import pdfplumber pdf_path = '/tmp/workspace/attachments/870f6e52-3f2b-4e3c-a2de-e894bdde7080/Pulmonary embolism.pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() print(f'--- PAGE {i+1} ---') print(text) print() "

Running Command

mkdir -p /tmp/workspace/pe-presentation && python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from io import BytesIO # Color palette DARK_BLUE = RGBColor(0x0D, 0x2B, 0x55) # deep navy MED_BLUE = RGBColor(0x1A, 0x5F, 0x9E) # medium blue ACCENT_RED = RGBColor(0xC0, 0x39, 0x2B) # alert red LIGHT_BLUE = RGBColor(0xD6, 0xE8, 0xF7) # pale blue bg WHITE = RGBColor(0xFF, 0xFF, 0xFF) LIGHT_GRAY = RGBColor(0xF5, 0xF7, 0xFA) MID_GRAY = RGBColor(0x70, 0x7F, 0x8B) TEXT_DARK = RGBColor(0x1E, 0x2A, 0x38) prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ─── Helper functions ─────────────────────────────────────────────────────── def fill_bg(slide, color): from pptx.oxml.ns import qn from lxml import etree bg = slide.background fill = bg.fill fill.solid() fill.fore_color.rgb = color def add_rect(slide, x, y, w, h, fill_color, line_color=None): shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h)) shape.fill.solid() shape.fill.fore_color.rgb = fill_color if line_color: shape.line.color.rgb = line_color shape.line.width = Pt(0.5) else: shape.line.fill.background() return shape def add_textbox(slide, x, y, w, h, text, font_size, bold=False, color=TEXT_DARK, align=PP_ALIGN.LEFT, italic=False, wrap=True, anchor=MSO_ANCHOR.TOP): tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = wrap tf.vertical_anchor = anchor tf.margin_left = 0; tf.margin_right = 0 tf.margin_top = Pt(2); tf.margin_bottom = 0 p = tf.paragraphs[0] p.alignment = align r = p.add_run() r.text = text r.font.size = Pt(font_size) r.font.bold = bold r.font.italic = italic r.font.color.rgb = color r.font.name = "Calibri" return tb def add_paragraph(tf, text, font_size, bold=False, color=TEXT_DARK, align=PP_ALIGN.LEFT, italic=False, space_before=0): p = tf.add_paragraph() p.alignment = align if space_before: p.space_before = Pt(space_before) r = p.add_run() r.text = text r.font.size = Pt(font_size) r.font.bold = bold r.font.italic = italic r.font.color.rgb = color r.font.name = "Calibri" return p def add_bullet_box(slide, x, y, w, h, items, font_size=13, title=None, title_size=14, title_color=MED_BLUE, bullet="• "): tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = True tf.margin_left = Pt(4); tf.margin_right = Pt(4) tf.margin_top = Pt(4); tf.margin_bottom = Pt(4) first = True if title: p = tf.paragraphs[0] p.alignment = PP_ALIGN.LEFT r = p.add_run() r.text = title r.font.size = Pt(title_size) r.font.bold = True r.font.color.rgb = title_color r.font.name = "Calibri" first = False for item in items: if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = PP_ALIGN.LEFT p.space_before = Pt(3) r = p.add_run() r.text = bullet + item r.font.size = Pt(font_size) r.font.color.rgb = TEXT_DARK r.font.name = "Calibri" return tb # ════════════════════════════════════════════════════════════════════════════ # SLIDE 1 — Title # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, DARK_BLUE) # Decorative accent bar (left edge) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) # Bottom bar add_rect(s, 0, 6.9, 13.333, 0.6, RGBColor(0x0A, 0x1E, 0x3F)) add_textbox(s, 0.25, 1.6, 12, 0.7, "2026 AHA/ACC GUIDELINES", 16, bold=False, color=RGBColor(0x7E, 0xB8, 0xE8), align=PP_ALIGN.CENTER) add_textbox(s, 0.25, 2.2, 12, 1.4, "Pulmonary Embolism", 52, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_textbox(s, 0.25, 3.55, 12, 0.6, "Evaluation and Management of Acute PE in Adults", 20, color=RGBColor(0xB0, 0xCC, 0xE8), align=PP_ALIGN.CENTER) add_textbox(s, 0.25, 4.3, 12, 0.5, "First-ever dedicated PE guideline from AHA/ACC | February 2026", 14, italic=True, color=RGBColor(0x80, 0x9F, 0xBF), align=PP_ALIGN.CENTER) # ════════════════════════════════════════════════════════════════════════════ # SLIDE 2 — New 5-Tier Classification # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "New 5-Tier Clinical Classification", 28, bold=True, color=WHITE) # Category cards cats = [ ("A", "At Risk", "No acute PE; risk factors present", RGBColor(0x27,0xAE,0x60)), ("B", "Beginning/Mild", "Hemodynamically stable\nNo RV strain, low severity score", RGBColor(0x2E,0x86,0xC1)), ("C", "Intermediate", "C1: elevated score, normal RV\nC2: RV dysfunction OR biomarkers\nC3: both RV dysfunction AND biomarkers", RGBColor(0xE6,0x7E,0x22)), ("D", "Deteriorating", "Normotensive shock or rapid clinical\ndeterioration (D1-D2 subcategories)", RGBColor(0xC0,0x39,0x2B)), ("E", "Extremis", "Overt hemodynamic collapse\nCardiac arrest (E1-E2 subcategories)", RGBColor(0x6C,0x35,0x7B)), ] cx = 0.25 for letter, name, desc, col in cats: card_w = 2.5 add_rect(s, cx, 1.35, card_w, 5.7, WHITE, col) add_rect(s, cx, 1.35, card_w, 0.85, col) # Letter add_textbox(s, cx+0.05, 1.38, 0.7, 0.75, letter, 30, bold=True, color=WHITE) # Name add_textbox(s, cx+0.65, 1.45, card_w-0.7, 0.65, name, 13, bold=True, color=WHITE) # Description add_textbox(s, cx+0.12, 2.3, card_w-0.24, 4.4, desc, 11.5, color=TEXT_DARK, wrap=True) cx += card_w + 0.13 add_textbox(s, 0.25, 7.0, 12.5, 0.45, "New parameters: CPES score, NEWS2, serum lactate, normotensive shock | Respiratory modifiers apply in C1-C3 when SpO2 < 90%", 10, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ════════════════════════════════════════════════════════════════════════════ # SLIDE 3 — Diagnosis # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "Diagnosis", 28, bold=True, color=WHITE) cards = [ ("Imaging", MED_BLUE, ["CTPA: primary imaging modality", "V/Q scan: preferred in pregnancy, reduced radiation/contrast", "Echo: RV assessment drives C2/C3 vs D/E categorization"]), ("Biomarkers", RGBColor(0x1A,0x8A,0x5A), ["Troponin + BNP/NT-proBNP formally in category assignment", "BNP is new vs. ESC 2019 (which emphasized only troponin)", "Both used to classify severity tier"]), ("Pre-test Tools", RGBColor(0xE6,0x7E,0x22), ["Wells score — remains valid", "Revised Geneva score — remains valid", "D-dimer: age-adjusted cutoff (age × 10 mcg/L if >50 yrs)", "Pregnancy-adapted YEARS algorithm (use with caution)"]), ] cx = 0.25 cw = 4.2 for title, col, bullets in cards: add_rect(s, cx, 1.3, cw, 5.9, WHITE, col) add_rect(s, cx, 1.3, cw, 0.7, col) add_textbox(s, cx+0.15, 1.35, cw-0.2, 0.6, title, 15, bold=True, color=WHITE) add_bullet_box(s, cx+0.1, 2.1, cw-0.2, 4.9, bullets, font_size=12.5) cx += cw + 0.22 # ════════════════════════════════════════════════════════════════════════════ # SLIDE 4 — Anticoagulation # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "Anticoagulation", 28, bold=True, color=WHITE) # Left panel — DOACs add_rect(s, 0.25, 1.3, 6.1, 5.9, WHITE, MED_BLUE) add_rect(s, 0.25, 1.3, 6.1, 0.7, MED_BLUE) add_textbox(s, 0.4, 1.35, 5.8, 0.6, "DOACs — First Line (Class 1)", 15, bold=True, color=WHITE) doac_items = [ "Rivaroxaban / Apixaban — oral from day 1, no parenteral bridge", "Dabigatran / Edoxaban — require 5-10 days parenteral anticoag first", "Preferred for most patients without contraindications", ] add_bullet_box(s, 0.35, 2.1, 5.9, 2.5, doac_items, font_size=13) add_rect(s, 0.25, 4.8, 6.1, 0.6, RGBColor(0xE8, 0xF0, 0xFB)) add_textbox(s, 0.4, 4.83, 5.8, 0.55, "When to use LMWH / UFH instead:", 12, bold=True, color=DARK_BLUE) add_bullet_box(s, 0.35, 5.4, 5.9, 1.7, ["Pregnancy (LMWH throughout; DOACs contraindicated)", "Active cancer with GI involvement", "DOAC contraindicated or not available"], font_size=12) # Right panel — Duration add_rect(s, 6.7, 1.3, 6.35, 5.9, WHITE, RGBColor(0x1A,0x8A,0x5A)) add_rect(s, 6.7, 1.3, 6.35, 0.7, RGBColor(0x1A,0x8A,0x5A)) add_textbox(s, 6.85, 1.35, 6.1, 0.6, "Duration & Special Populations", 15, bold=True, color=WHITE) dur_items = [ "Minimum 3 months for provoked PE", "Extended/indefinite: unprovoked PE with low-moderate bleeding risk", "Indefinite: recurrent VTE, active cancer, antiphospholipid syndrome", "Aspirin NOT a substitute for anticoagulation", ] add_bullet_box(s, 6.85, 2.05, 6.1, 2.8, dur_items, font_size=13) add_rect(s, 6.7, 4.8, 6.35, 0.6, RGBColor(0xE8, 0xF5, 0xEE)) add_textbox(s, 6.85, 4.83, 6.1, 0.55, "Special Populations:", 12, bold=True, color=DARK_BLUE) add_bullet_box(s, 6.85, 5.4, 6.1, 1.7, ["Renal impairment: UFH or dose-adjusted LMWH; avoid dabigatran if eGFR < 30", "Cancer: LMWH or DOACs (edoxaban/rivaroxaban) — caution in luminal GI", "Right heart thrombus: consider systemic thrombolysis or surgical removal"], font_size=12) # ════════════════════════════════════════════════════════════════════════════ # SLIDE 5 — Advanced (Reperfusion) Therapies # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "Advanced (Reperfusion) Therapies", 28, bold=True, color=WHITE) # Table header rows = [ ("A – C1", "Anticoagulation only", "Class 3: do NOT use mechanical thrombectomy", RGBColor(0x27,0xAE,0x60)), ("C2 – C3", "Anticoagulation ± Catheter-Directed Therapy", "CDT if deteriorating; consider if RV dysfunction", RGBColor(0xE6,0x7E,0x22)), ("D1 – D2", "CDT or Mechanical Thrombectomy (MT)", "Class 2b for MT; especially if bleeding risk high", RGBColor(0xC0,0x39,0x2B)), ("E1", "Systemic Thrombolysis OR MT", "Class 2a for MT; surgical embolectomy if available", RGBColor(0x7D,0x3C,0x98)), ("E2", "Systemic Thrombolysis + ECMO", "Surgical embolectomy (cardiac arrest)", RGBColor(0x4A,0x23,0x5A)), ] add_rect(s, 0.25, 1.3, 12.8, 0.55, DARK_BLUE) add_textbox(s, 0.35, 1.33, 1.5, 0.5, "Category", 12, bold=True, color=WHITE) add_textbox(s, 1.95, 1.33, 5.0, 0.5, "Preferred Therapy", 12, bold=True, color=WHITE) add_textbox(s, 7.1, 1.33, 5.8, 0.5, "Notes", 12, bold=True, color=WHITE) ry = 1.85 for cat, therapy, note, col in rows: rh = 0.95 add_rect(s, 0.25, ry, 1.6, rh, col) add_textbox(s, 0.3, ry+0.22, 1.5, 0.5, cat, 14, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_rect(s, 1.85, ry, 5.1, rh, WHITE, col) add_textbox(s, 1.95, ry+0.18, 4.9, 0.65, therapy, 12, bold=True, color=col, wrap=True) add_rect(s, 6.95, ry, 6.15, rh, RGBColor(0xF5,0xF5,0xF5), MID_GRAY) add_textbox(s, 7.05, ry+0.18, 5.9, 0.65, note, 11.5, color=TEXT_DARK, wrap=True) ry += rh + 0.05 add_textbox(s, 0.25, 6.75, 12.5, 0.55, "PEERLESS RCT (2025): large-bore MT vs. CDT in intermediate-high risk PE | Alteplase 100 mg IV over 2h for Category E", 10, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ════════════════════════════════════════════════════════════════════════════ # SLIDE 6 — PERTs + Outpatient Management # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "PERTs & Outpatient Management", 28, bold=True, color=WHITE) # PERT panel add_rect(s, 0.25, 1.3, 6.1, 5.9, WHITE, ACCENT_RED) add_rect(s, 0.25, 1.3, 6.1, 0.7, ACCENT_RED) add_textbox(s, 0.4, 1.35, 5.8, 0.6, "Pulmonary Embolism Response Teams (PERTs)", 13.5, bold=True, color=WHITE) add_textbox(s, 0.4, 2.1, 5.7, 0.5, "CLASS 1 RECOMMENDATION", 13, bold=True, color=ACCENT_RED) pert_items = [ "Multidisciplinary rapid-response team", "Members: Cardiology, Pulmonology, EM, Hematology, IR, CT Surgery", "Rapid coordinated decisions for intermediate- and high-risk PE", "Practice-changing upgrade from ESC 2019 (where PERTs were merely 'mentioned')", ] add_bullet_box(s, 0.35, 2.65, 5.9, 4.3, pert_items, font_size=12.5) # Outpatient panel add_rect(s, 6.7, 1.3, 6.35, 5.9, WHITE, MED_BLUE) add_rect(s, 6.7, 1.3, 6.35, 0.7, MED_BLUE) add_textbox(s, 6.85, 1.35, 6.1, 0.6, "Outpatient / Early Discharge Criteria", 14, bold=True, color=WHITE) out_items = [ "Category A/B patients with no significant comorbidity", "Reliable follow-up and DOAC access", "Can be discharged from the ED", "Tools: Hestia criteria & sPESI score guide safe discharge", "Post-PE clinic at 3-6 months for CTEPH screening", "CTEPH workup: Echo → V/Q scan → Right heart catheterization if suspected", ] add_bullet_box(s, 6.85, 2.1, 6.1, 5.0, out_items, font_size=12.5) # ════════════════════════════════════════════════════════════════════════════ # SLIDE 7 — ESC 2019 vs AHA/ACC 2026 # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, LIGHT_GRAY) add_rect(s, 0, 0, 13.333, 1.1, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_textbox(s, 0.25, 0.18, 13, 0.75, "ESC 2019 vs. AHA/ACC 2026: Key Differences", 28, bold=True, color=WHITE) compare = [ ("Risk Classification", "Low / Intermediate-low /\nIntermediate-high / High", "New 5-tier A-E system"), ("BNP in Risk Stratif.", "Supplementary only", "Formally incorporated"), ("PERTs", "Mentioned", "Class 1 Recommendation"), ("MT for Intermed. Risk", "Not addressed", "Class 2b for D1-D2"), ("Normotensive Shock", "Not explicitly defined", "Explicitly categorized (D)"), ("Outpatient Mgmt", "Limited guidance", "Explicit ED discharge criteria"), ] add_rect(s, 0.25, 1.3, 12.8, 0.55, DARK_BLUE) add_textbox(s, 0.35, 1.35, 4.0, 0.45, "Feature", 12, bold=True, color=WHITE) add_textbox(s, 4.5, 1.35, 4.0, 0.45, "ESC 2019", 12, bold=True, color=RGBColor(0xAA,0xCC,0xFF)) add_textbox(s, 8.7, 1.35, 4.2, 0.45, "AHA/ACC 2026", 12, bold=True, color=RGBColor(0xAA,0xFF,0xCC)) row_colors = [WHITE, RGBColor(0xF0,0xF4,0xF8)] ry = 1.85 for i, (feat, old, new_) in enumerate(compare): rh = 0.82 bg = row_colors[i % 2] add_rect(s, 0.25, ry, 4.15, rh, bg, MID_GRAY) add_textbox(s, 0.35, ry+0.1, 4.0, 0.65, feat, 12, bold=True, color=TEXT_DARK, wrap=True) add_rect(s, 4.4, ry, 4.2, rh, bg, MID_GRAY) add_textbox(s, 4.5, ry+0.1, 4.0, 0.65, old, 11.5, color=ACCENT_RED, italic=True, wrap=True) add_rect(s, 8.6, ry, 4.45, rh, bg, MID_GRAY) add_textbox(s, 8.7, ry+0.1, 4.25, 0.65, new_, 11.5, color=RGBColor(0x1A,0x8A,0x5A), bold=True, wrap=True) ry += rh + 0.03 # ════════════════════════════════════════════════════════════════════════════ # SLIDE 8 — Summary / Key Takeaways # ════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(blank) fill_bg(s, DARK_BLUE) add_rect(s, 0, 0, 0.08, 7.5, ACCENT_RED) add_rect(s, 0, 6.9, 13.333, 0.6, RGBColor(0x0A, 0x1E, 0x3F)) add_textbox(s, 0.3, 0.3, 12.5, 0.8, "Key Takeaways", 30, bold=True, color=WHITE) takeaways = [ ("01", "5-Tier A-E System", "Replaces old Low/Intermediate/High classification — includes normotensive shock and RV parameters"), ("02", "DOACs First Line", "Rivaroxaban & apixaban preferred; no parenteral bridge needed for most patients"), ("03", "PERTs = Class 1", "Multidisciplinary response teams now mandated for intermediate/high-risk PE"), ("04", "MT is Guideline-Backed", "Class 2b for D1-D2; Class 2a for E1 — overuse in low-risk categories actively discouraged"), ("05", "Explicit Discharge Criteria", "Category A/B with DOAC access can go home from the ED using Hestia/sPESI"), ("06", "CTEPH Screening", "All PE survivors get echo at 3-6 months; V/Q + RHC if CTEPH suspected"), ] tx = 0.3 for i, (num, title, desc) in enumerate(takeaways): row = i // 2 col = i % 2 cx_ = tx + col * 6.5 cy_ = 1.3 + row * 1.9 add_rect(s, cx_, cy_, 6.2, 1.7, RGBColor(0x12, 0x38, 0x6B)) add_rect(s, cx_, cy_, 0.55, 1.7, MED_BLUE) add_textbox(s, cx_+0.05, cy_+0.55, 0.5, 0.6, num, 11, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_textbox(s, cx_+0.65, cy_+0.12, 5.4, 0.5, title, 14, bold=True, color=RGBColor(0x7E,0xC8,0xFF)) add_textbox(s, cx_+0.65, cy_+0.62, 5.4, 0.95, desc, 11.5, color=RGBColor(0xCC,0xDD,0xEE), wrap=True) add_textbox(s, 0.25, 7.0, 12.5, 0.42, "Source: 2026 AHA/ACC/ACCP/ACEP/CHEST/SCAI/SHM/SIR/SVM/SVN Guideline | Circulation & JACC, February 2026 | PMID: 41712677", 9.5, italic=True, color=RGBColor(0x60, 0x80, 0xA0), align=PP_ALIGN.CENTER) # ─── Save ──────────────────────────────────────────────────────────────────── out_path = "/tmp/workspace/pe-presentation/Pulmonary_Embolism_2026.pptx" buf = BytesIO() prs.save(buf) with open(out_path, "wb") as f: f.write(buf.getvalue()) print(f"Saved to {out_path}") PYEOF

Your presentation is ready! Here's the download link:

Pulmonary Embolism 2026

Presentation · PPTX

The deck has 8 slides with a clean navy/red/white color scheme:
SlideContent
1Title slide - 2026 AHA/ACC Guidelines overview
2New 5-Tier Classification - Category A through E with color-coded cards
3Diagnosis - Imaging, Biomarkers, Pre-test probability tools
4Anticoagulation - DOACs first-line, duration, special populations
5Advanced Therapies - Reperfusion matrix by category (table format)
6PERTs & Outpatient Management - Class 1 PERT recommendation + ED discharge criteria
7ESC 2019 vs AHA/ACC 2026 - Side-by-side comparison table
8Key Takeaways - 6 numbered summary cards
Each slide uses short, punchy bullet points suitable for a presentation rather than dense prose.

Pulmonary embolism new guidelines

Reading File
Finding Sources
Searching PubMed

"pulmonary embolism"[MeSH Terms] AND "guideline"[pt]

Searching the Web

2026 AHA ACC pulmonary embolism guidelines summary key recommendations

Reading File
Reading Web Page

https://www.jacc.org/doi/full/10.1016/j.jacc.2025.12.023

Searching Images

pulmonary embolism classification management algorithm diagram

This composite educational image illustrates acute pulmonary embolism and its subsequent surgical management. Panel A is a transesophageal echocardiogram (TEE) demonstrating a heterogeneous, echogenic mass within the right pulmonary artery (RPA), adjacent to the aorta (Ao) and superior vena cava (SVC). Panel B provides a labeled schematic diagram of the TEE view, identifying anatomical landmarks including the RPA, SVC, subclavian vein (SCV), and the specific location of the pulmonary artery clot. Panel C is a clinical photograph of the surgically removed specimen (embolectomy). The macroscopic specimen shows a long, organized thromboembolus, approximately 9-10 cm in length according to the included surgical ruler. The clot displays a variegated color ranging from dark red to tan, with a friable, irregular texture characteristic of a deep vein thrombosis that has embolized. The set is intended for advanced medical education focusing on cardiology, cardiothoracic surgery, and critical care, demonstrating the correlation between real-time diagnostic imaging and surgical pathology in hemodynamic instability.

This composite educational image illustrates acute pulmonary embolism and its subsequent surgical management. Panel A is a transesophageal echocardiogram (TEE) demonstrating a heterogeneous, echogenic mass within the right pulmonary artery (RPA), adjacent to the aorta (Ao) and superior vena cava (SVC). Panel B provides a labeled schematic diagram of the TEE view, identifying anatomical landmarks including the RPA, SVC, subclavian vein (SCV), and the specific location of the pulmonary artery clot. Panel C is a clinical photograph of the surgically removed specimen (embolectomy). The macroscopic specimen shows a long, organized thromboembolus, approximately 9-10 cm in length according to the included surgical ruler. The clot displays a variegated color ranging from dark red to tan, with a friable, irregular texture characteristic of a deep vein thrombosis that has embolized. The set is intended for advanced medical education focusing on cardiology, cardiothoracic surgery, and critical care, demonstrating the correlation between real-time diagnostic imaging and surgical pathology in hemodynamic instability.

This diagram illustrates a diagnostic machine learning pipeline for automated pulmonary embolism (PE) detection. The workflow begins with an axial input image from a single-energy computed tomography pulmonary angiography (SE-CTPA), showing the thorax, heart, and pulmonary vasculature. The SE-CTPA is processed by a 'Generator Network' (a ResNet encoder-decoder) to produce a Synthetic Monoenergetic Image (SMI) at 40 keV. This SMI output demonstrates enhanced iodine attenuation and increased vascular contrast compared to the input, facilitating better visualization of potential intraluminal filling defects. The SMI is then fed into a 'PE Classification Network' (ResNet50), which performs binary classification to provide a final diagnostic result (PE yes/no). The visualization highlights the use of deep learning for domain adaptation and disease identification in radiology, specifically aiming to simulate high-contrast dual-energy CT findings from standard single-energy CT scans to improve the detection of segmental and subsegmental pulmonary emboli.

This diagram illustrates a diagnostic machine learning pipeline for automated pulmonary embolism (PE) detection. The workflow begins with an axial input image from a single-energy computed tomography pulmonary angiography (SE-CTPA), showing the thorax, heart, and pulmonary vasculature. The SE-CTPA is processed by a 'Generator Network' (a ResNet encoder-decoder) to produce a Synthetic Monoenergetic Image (SMI) at 40 keV. This SMI output demonstrates enhanced iodine attenuation and increased vascular contrast compared to the input, facilitating better visualization of potential intraluminal filling defects. The SMI is then fed into a 'PE Classification Network' (ResNet50), which performs binary classification to provide a final diagnostic result (PE yes/no). The visualization highlights the use of deep learning for domain adaptation and disease identification in radiology, specifically aiming to simulate high-contrast dual-energy CT findings from standard single-energy CT scans to improve the detection of segmental and subsegmental pulmonary emboli.

This diagnostic flowchart illustrates the monoenergetic reconstruction algorithm used in Dual-Energy Computed Tomography (DECT), specifically for CT Pulmonary Angiography (CTPA). The diagram displays three axial chest CT images and two magnified insets to demonstrate a frequency-split technique. The 'High contrast attenuation' image (typically at 40 keV) shows intense vascular enhancement of the pulmonary arteries but with significant image noise. The 'Optimal image noise' image (typically at 70 keV) shows smoother soft tissue texture but reduced vascular contrast. The algorithm decomposes these into sub-images: 'Iodine attenuation' (low spatial frequency stack) and 'Image noise' (high spatial frequency stack). These components are integrated into a final reconstructed image at the bottom, which achieves a clinical balance of high vascular iodine signal and minimized background noise. This educational visual explains the pathophysiological and radiological benefit of virtual monoenergetic spectral (VMS) imaging in optimizing contrast-to-noise ratio (CNR) for diagnosing conditions like pulmonary embolism.

This diagnostic flowchart illustrates the monoenergetic reconstruction algorithm used in Dual-Energy Computed Tomography (DECT), specifically for CT Pulmonary Angiography (CTPA). The diagram displays three axial chest CT images and two magnified insets to demonstrate a frequency-split technique. The 'High contrast attenuation' image (typically at 40 keV) shows intense vascular enhancement of the pulmonary arteries but with significant image noise. The 'Optimal image noise' image (typically at 70 keV) shows smoother soft tissue texture but reduced vascular contrast. The algorithm decomposes these into sub-images: 'Iodine attenuation' (low spatial frequency stack) and 'Image noise' (high spatial frequency stack). These components are integrated into a final reconstructed image at the bottom, which achieves a clinical balance of high vascular iodine signal and minimized background noise. This educational visual explains the pathophysiological and radiological benefit of virtual monoenergetic spectral (VMS) imaging in optimizing contrast-to-noise ratio (CNR) for diagnosing conditions like pulmonary embolism.

Here is a comprehensive summary of the new 2026 AHA/ACC Pulmonary Embolism Guidelines.

2026 AHA/ACC Pulmonary Embolism Guidelines

Full title: 2026 AHA/ACC/ACCP/ACEP/CHEST/SCAI/SHM/SIR/SVM/SVN Guideline for the Evaluation and Management of Acute Pulmonary Embolism in Adults Published simultaneously in Circulation and JACC on February 19, 2026 (PMID: 41712677, 41712898).
This is the first-ever de novo dedicated PE guideline from the AHA/ACC, replacing decades of extrapolated VTE guidance.

1. The Biggest Change: New 5-Tier Clinical Classification (A-E)

The old Low / Intermediate / High-risk triad is replaced with the AHA/ACC Acute PE Clinical Categories - a five-category physiological framework:
CategoryNameKey Features
AAt RiskNo acute PE yet; risk factors present
BBeginning / MildHemodynamically stable, no RV strain, low severity score
CIntermediate3 subcategories: C1 (elevated severity, normal RV + biomarkers), C2 (RV dysfunction OR abnormal biomarkers), C3 (both RV dysfunction AND elevated biomarkers)
DDeterioratingNormotensive shock or rapid clinical deterioration; D1 and D2 subcategories
EExtremis / High-RiskOvert hemodynamic collapse, cardiac arrest; E1 (pulsatile) and E2 (arrest)
New parameters incorporated: CPES score, NEWS2 (National Early Warning Score 2), serum lactate, and normotensive shock - addressing a critical gap in prior systems. Respiratory modifiers apply in C1-C3 when SpO2 <90%, respiratory rate is elevated, or supplemental O2 is required.

2. Diagnosis

  • CTPA remains the primary imaging modality for confirmed PE
  • V/Q scanning is preferred in pregnancy and to reduce radiation/contrast exposure
  • D-dimer: Use age-adjusted cutoffs (age x 10 mcg/L in patients >50 years); pregnancy-adapted YEARS algorithm is referenced with caution
  • Wells score / revised Geneva score remain valid pretest probability tools
  • Echocardiography: Key for RV assessment to drive C2/C3 vs D/E categorization
  • Troponin + BNP/NT-proBNP: Both are now formally incorporated into category assignment (BNP is new vs. ESC 2019, which only emphasized troponin)
  • In suspected Category C2+, if imaging is delayed, start therapeutic anticoagulation empirically (Class 2a, low bleeding risk)

3. Anticoagulation

DOACs are first-line (Class 1) for most patients:
  • Rivaroxaban or apixaban - oral from day 1, no parenteral bridge required
  • Dabigatran or edoxaban - require 5-10 days parenteral anticoagulation first
  • LMWH is preferred over UFH when parenteral therapy is needed (Class 1)
  • Antiphospholipid syndrome (thrombotic): VKA (warfarin) recommended over DOAC (Class 1)
Duration:
  • Minimum 3 months for all PE
  • Extended/indefinite: unprovoked PE with low-moderate bleeding risk; recurrent VTE; active cancer; antiphospholipid syndrome
  • First PE without major reversible risk factor → extend beyond 3-6 months (Class 1)
  • Aspirin is NOT a substitute for anticoagulation

4. Advanced (Reperfusion) Therapies - Treatment Matrix

CategoryPreferred TherapyEvidence Class
A-C1Anticoagulation onlyClass 3: do NOT use MT
C2-C3Anticoag ± catheter-directed therapy if deterioratingClass 2b
C3 (MAP <80 mmHg)Escalation trigger; reassess for D-level therapyClass 2a
D1-D2Catheter-directed thrombolysis (CDT) or mechanical thrombectomy (MT)Class 2b for MT
E1Systemic thrombolysis OR MT; surgical embolectomy if availableClass 2a for MT
E2Systemic thrombolysis + VA-ECMO; surgical embolectomyEmergent
Mechanical Thrombectomy (MT) - major 2026 update:
  • Class 2a for Category E1
  • Class 2b for selected D1-D2 (especially with high bleeding risk contraindicting thrombolysis)
  • Class 3 (not recommended) for low-risk A-C1 - an explicit guardrail against overuse
  • Informed by the PEERLESS RCT (2025): large-bore MT vs. CDT in intermediate-high risk PE
Systemic thrombolysis (alteplase 100 mg IV over 2h): Reserved for Category E; ICH risk ~2%.

5. PERTs - Now Class 1 (Most Practice-Changing Recommendation)

Pulmonary Embolism Response Teams (PERTs) are a formal Class 1 recommendation for improving timeliness of care:
  • Multidisciplinary teams: Cardiology, Pulmonology, EM, Hematology, IR, CT Surgery
  • Activated for intermediate- and high-risk PE (Category C2+)
  • This was merely "mentioned" in ESC 2019 - the upgrade to Class 1 is major

6. Outpatient Management & Early Discharge

The guideline provides explicit ED discharge criteria (previously left to local protocols):
  • Category A/B patients with no significant comorbidity, reliable follow-up, and DOAC access can be safely discharged from the ED
  • Hestia criteria and sPESI score guide discharge decisions
  • All PE patients should be asked about symptoms at every visit for at least 1 year to screen for CTEPH

7. Long-Term Follow-Up / CTEPH Screening

  • Post-PE clinic visit at 3-6 months
  • Screen with echocardiography; if CTEPH suspected: V/Q scan → right heart catheterization to confirm
  • Patients with functional limitations or persistent dyspnea at 1 year: evaluate for post-PE syndrome

8. Special Populations

PopulationRecommendation
PregnancyLMWH throughout; DOACs contraindicated; CTPA preferred over V/Q if needed; thrombolysis only for life-threatening PE
Active cancerLMWH or DOACs (edoxaban/rivaroxaban); caution with luminal GI malignancy (bleeding risk)
Renal impairmentUFH or dose-adjusted LMWH; avoid dabigatran if eGFR <30
Right heart thrombusConsider systemic thrombolysis or surgical removal; anticoagulation alone = high mortality
Long-haul travel historyFor prior PE patients not on anticoagulation: single prophylactic DOAC/LMWH dose on day of long-haul travel (Class 2b)

9. Key Differences vs. ESC 2019

FeatureESC 2019AHA/ACC 2026
Risk classificationLow/Intermediate-low/Intermediate-high/High5-tier A-E system
BNP in risk stratificationSupplementaryFormally incorporated
PERTsMentionedClass 1 recommendation
MT for intermediate-riskNot addressedClass 2b for D1-D2
Normotensive shockNot explicitly definedExplicitly categorized (D)
Outpatient managementLimited guidanceExplicit ED discharge criteria

10. Top 10 Guideline Take-Home Messages (Official)

  1. New A-E Clinical Category system for precision risk stratification
  2. Prompt diagnosis and treatment are essential - empiric anticoagulation when imaging delayed
  3. LMWH preferred over UFH for initial parenteral therapy
  4. DOACs preferred over VKAs for oral anticoagulation
  5. Advanced therapies (thrombolysis, CDT, MT, embolectomy) are appropriate for E1 and D1-D2
  6. PERTs recommended (Class 1) for all intermediate/high-risk PE
  7. Category A/B patients can be managed in the outpatient setting
  8. Extended anticoagulation for first unprovoked PE without major reversible risk factor
  9. Screen all PE survivors for CTEPH symptoms at every visit x 1 year
  10. Address PE disparities in management across sex, race, and socioeconomic groups

Note: A published erratum exists (PMID: 42441758); verify the final published version for any corrected recommendations.
The official Guideline-at-a-Glance in JACC is an excellent rapid-reference summary for bedside use.
Here is a useful overview video of the 2026 guideline:

Can you make me slides of this very information for presentation

Running Command

mkdir -p /tmp/workspace/pe-slides2 && python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from io import BytesIO # ── Palette ────────────────────────────────────────────────────────────────── NAVY = RGBColor(0x0D, 0x2B, 0x55) BLUE = RGBColor(0x1A, 0x5F, 0x9E) RED = RGBColor(0xC0, 0x39, 0x2B) GREEN = RGBColor(0x1A, 0x8A, 0x5A) ORANGE = RGBColor(0xE6, 0x7E, 0x22) PURPLE = RGBColor(0x6C, 0x35, 0x7B) TEAL = RGBColor(0x0E, 0x7C, 0x86) WHITE = RGBColor(0xFF, 0xFF, 0xFF) OFF_WHITE = RGBColor(0xF5, 0xF7, 0xFA) LIGHT_BLUE = RGBColor(0xD6, 0xE8, 0xF7) MID_GRAY = RGBColor(0x70, 0x7F, 0x8B) TEXT = RGBColor(0x1E, 0x2A, 0x38) prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) BL = prs.slide_layouts[6] # blank layout # ── Primitive helpers ───────────────────────────────────────────────────────── def bg(slide, color): slide.background.fill.solid() slide.background.fill.fore_color.rgb = color def rect(slide, x, y, w, h, fill, line=None, lw=0.5): sh = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h)) sh.fill.solid(); sh.fill.fore_color.rgb = fill if line: sh.line.color.rgb = line; sh.line.width = Pt(lw) else: sh.line.fill.background() return sh def tb(slide, x, y, w, h, text, sz, bold=False, color=TEXT, align=PP_ALIGN.LEFT, italic=False, wrap=True, anchor=MSO_ANCHOR.TOP, font="Calibri"): t = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = t.text_frame; tf.word_wrap = wrap; tf.vertical_anchor = anchor tf.margin_left=0; tf.margin_right=0; tf.margin_top=Pt(2); tf.margin_bottom=0 p = tf.paragraphs[0]; p.alignment = align r = p.add_run(); r.text = text r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic r.font.color.rgb=color; r.font.name=font return t def add_p(tf, text, sz, bold=False, color=TEXT, align=PP_ALIGN.LEFT, italic=False, sp=3, font="Calibri"): p = tf.add_paragraph(); p.alignment=align if sp: p.space_before=Pt(sp) r = p.add_run(); r.text=text r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic r.font.color.rgb=color; r.font.name=font return p def bullets(slide, x, y, w, h, items, sz=12.5, hdr=None, hdr_sz=14, hdr_col=BLUE, dot="• ", item_color=TEXT): t = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = t.text_frame; tf.word_wrap=True tf.margin_left=Pt(6); tf.margin_right=Pt(4) tf.margin_top=Pt(4); tf.margin_bottom=Pt(4) first = True if hdr: p = tf.paragraphs[0]; p.alignment=PP_ALIGN.LEFT r = p.add_run(); r.text=hdr r.font.size=Pt(hdr_sz); r.font.bold=True r.font.color.rgb=hdr_col; r.font.name="Calibri" first=False for item in items: p = tf.paragraphs[0] if first else tf.add_paragraph() first=False; p.alignment=PP_ALIGN.LEFT; p.space_before=Pt(3) r = p.add_run(); r.text=dot+item r.font.size=Pt(sz); r.font.color.rgb=item_color; r.font.name="Calibri" return t # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 1 — Title # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) # left accent bar rect(s, 0, 6.85, 13.333, 0.65, RGBColor(0x08,0x18,0x38)) # bottom bar tb(s, 0.3, 1.3, 12.5, 0.65, "2026 AHA / ACC / ACCP / ACEP / CHEST — FIRST-EVER DEDICATED GUIDELINE", 13, color=RGBColor(0x7E,0xB8,0xE8), align=PP_ALIGN.CENTER) tb(s, 0.3, 1.95, 12.5, 1.5, "Pulmonary Embolism", 54, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, 0.3, 3.45, 12.5, 0.65, "New Guidelines: Evaluation & Management of Acute PE in Adults", 21, color=RGBColor(0xB0,0xCC,0xE8), align=PP_ALIGN.CENTER) tb(s, 0.3, 4.2, 12.5, 0.5, "Published in Circulation & JACC | February 19, 2026 | PMID 41712677 / 41712898", 13, italic=True, color=RGBColor(0x70,0x98,0xC0), align=PP_ALIGN.CENTER) # small tag rect(s, 4.5, 5.1, 4.35, 0.55, RGBColor(0xC0,0x39,0x2B)) tb(s, 4.5, 5.13, 4.35, 0.48, "Replaces ESC 2019 — Major Paradigm Shift", 12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 2 — New 5-Tier A-E Classification # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "The Biggest Change: New 5-Tier Clinical Classification (A-E)", 26, bold=True, color=WHITE) tb(s, 0.25, 0.85, 13, 0.3, "Replaces Low / Intermediate / High-Risk — introduces physiological subcategories", 12, italic=True, color=RGBColor(0xAA,0xCC,0xFF), align=PP_ALIGN.LEFT) cats = [ ("A", "At Risk", GREEN, ["No acute PE yet", "Risk factors present", "Prophylaxis focus"]), ("B", "Mild", BLUE, ["Hemodynamically stable", "No RV strain", "Low severity score"]), ("C", "Intermediate", ORANGE, ["C1: elevated score, normal RV/biomarkers", "C2: RV dysfunction OR abnormal biomarkers", "C3: BOTH RV dysfunction AND biomarkers", "Resp. modifiers if SpO2 <90%"]), ("D", "Deteriorating", RED, ["Normotensive shock", "Rapid clinical deterioration", "D1 and D2 subcategories", "NEW vs. ESC 2019"]), ("E", "Extremis", PURPLE, ["Overt hemodynamic collapse", "Cardiac arrest", "E1: pulsatile rhythm", "E2: cardiac arrest"]), ] cx = 0.25 for ltr, name, col, pts in cats: cw = 2.55 rect(s, cx, 1.28, cw, 6.0, WHITE, col, 1.2) rect(s, cx, 1.28, cw, 0.9, col) tb(s, cx+0.05, 1.33, 0.75, 0.8, ltr, 34, bold=True, color=WHITE) tb(s, cx+0.72, 1.38, cw-0.8, 0.75, name, 14, bold=True, color=WHITE) for i, pt in enumerate(pts): tb(s, cx+0.12, 2.35+i*0.9, cw-0.2, 0.82, "• "+pt, 11.5, color=TEXT, wrap=True) cx += cw + 0.12 tb(s, 0.25, 7.08, 12.5, 0.38, "New parameters: CPES score | NEWS2 | Serum lactate | Normotensive shock | Respiratory modifiers in C1–C3", 10, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 3 — Diagnosis # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Diagnosis", 28, bold=True, color=WHITE) panels = [ ("Imaging", BLUE, ["CTPA: primary modality for confirmed PE", "V/Q scan: preferred in pregnancy & to reduce radiation/contrast", "Echo: RV assessment — drives C2/C3 vs D/E categorization"]), ("Biomarkers", GREEN, ["Troponin + BNP/NT-proBNP now formally in category assignment", "BNP is NEW vs. ESC 2019 (troponin only before)", "Both required for complete risk-tier assignment"]), ("Pre-test Probability", ORANGE, ["Wells score — remains valid", "Revised Geneva score — remains valid", "D-dimer: age-adjusted cutoff (age × 10 mcg/L if >50 yrs)", "Pregnancy-adapted YEARS algorithm (use with caution)"]), ("Empiric Treatment", TEAL, ["If imaging is delayed in suspected Category C2+", "AND bleeding risk is low:", "→ Start therapeutic anticoagulation empirically", "(Class 2a recommendation)"]), ] cx = 0.25 cw = 3.15 for title, col, items in panels: rect(s, cx, 1.28, cw, 5.95, WHITE, col, 1.0) rect(s, cx, 1.28, cw, 0.7, col) tb(s, cx+0.12, 1.33, cw-0.2, 0.62, title, 14, bold=True, color=WHITE) for i, it in enumerate(items): tb(s, cx+0.12, 2.1+i*0.95, cw-0.2, 0.88, "• "+it, 11.5, color=TEXT, wrap=True) cx += cw + 0.2 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 4 — Anticoagulation # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Anticoagulation", 28, bold=True, color=WHITE) # LEFT: DOACs rect(s, 0.25, 1.28, 6.15, 6.0, WHITE, BLUE, 1.0) rect(s, 0.25, 1.28, 6.15, 0.7, BLUE) tb(s, 0.4, 1.32, 5.8, 0.62, "DOACs — Preferred First Line (Class 1)", 15, bold=True, color=WHITE) doac_data = [ ("Rivaroxaban / Apixaban", "Oral from Day 1 — no parenteral bridge needed"), ("Dabigatran / Edoxaban", "Require 5–10 days parenteral anticoagulation first"), ] for i, (drug, note) in enumerate(doac_data): ry = 2.1 + i * 1.1 rect(s, 0.35, ry, 5.9, 0.95, RGBColor(0xE8,0xF2,0xFF), BLUE, 0.5) tb(s, 0.5, ry+0.05, 5.6, 0.42, drug, 13, bold=True, color=BLUE) tb(s, 0.5, ry+0.47, 5.6, 0.42, note, 11.5, color=TEXT) rect(s, 0.35, 4.35, 5.9, 0.55, RGBColor(0xFFF3CD)) tb(s, 0.5, 4.38, 5.6, 0.48, "⚠ Antiphospholipid syndrome (thrombotic): VKA over DOAC (Class 1)", 11.5, color=RGBColor(0x7A,0x4A,0x00)) tb(s, 0.4, 5.05, 5.8, 0.38, "When LMWH / UFH preferred instead:", 12, bold=True, color=NAVY) bullets(s, 0.35, 5.42, 5.85, 1.7, ["Pregnancy (DOACs contraindicated — use LMWH throughout)", "Active cancer with GI involvement", "DOAC contraindicated / unavailable", "LMWH preferred over UFH when parenteral therapy needed (Class 1)"], sz=11.5, item_color=TEXT) # RIGHT: Duration rect(s, 6.65, 1.28, 6.45, 6.0, WHITE, GREEN, 1.0) rect(s, 6.65, 1.28, 6.45, 0.7, GREEN) tb(s, 6.8, 1.32, 6.1, 0.62, "Duration & Long-Term Decisions", 15, bold=True, color=WHITE) dur_rows = [ ("Minimum 3 months", "for ALL PE — provoked or unprovoked"), ("Extended / indefinite", "First PE without major reversible risk factor (Class 1);\nrecurrent VTE; active cancer; antiphospholipid syndrome"), ("NOT recommended", "Aspirin is NOT a substitute for anticoagulation"), ] ry = 2.1 for label, note in dur_rows: rect(s, 6.75, ry, 6.2, 1.05, RGBColor(0xE8,0xF7,0xEE), GREEN, 0.5) tb(s, 6.9, ry+0.05, 5.9, 0.42, label, 13, bold=True, color=GREEN) tb(s, 6.9, ry+0.47, 5.9, 0.52, note, 11, color=TEXT, wrap=True) ry += 1.15 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 5 — Advanced Therapies Matrix # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Advanced (Reperfusion) Therapies — Treatment Matrix", 26, bold=True, color=WHITE) # table header rect(s, 0.25, 1.28, 12.85, 0.55, NAVY) for txt, xx, ww in [("Category",1.55,0.3),("Preferred Therapy",3.15,5.1),("Class",8.3,1.1),("Notes",9.5,3.5)]: tb(s, xx, 1.32, ww, 0.45, txt, 12, bold=True, color=WHITE) rows = [ ("A – C1", GREEN, "Anticoagulation only", "1 / Class 3", "Do NOT use MT or thrombolysis"), ("C2 – C3", ORANGE, "Anticoag ± Catheter-Directed Therapy (CDT)", "2b", "CDT if deteriorating; C3 MAP <80 mmHg = escalation trigger"), ("D1 – D2", RED, "CDT OR Mechanical Thrombectomy (MT)", "2b", "MT preferred if high bleeding risk (no thrombolysis);\nPEERLESS RCT (2025) informed this"), ("E1", PURPLE, "Systemic Thrombolysis OR MT", "2a", "Surgical embolectomy if available;\nAlteplase 100 mg IV over 2h"), ("E2", RGBColor(0x3A,0x0A,0x4A), "Systemic Thrombolysis + VA-ECMO", "Emergent", "Surgical embolectomy — cardiac arrest scenario"), ] ry = 1.83 for cat, col, therapy, cls, note in rows: rh = 0.97 rect(s, 0.25, ry, 1.25, rh, col) tb(s, 0.3, ry+0.28, 1.1, 0.42, cat, 13, bold=True, color=WHITE, align=PP_ALIGN.CENTER) rect(s, 1.5, ry, 6.7, rh, WHITE, col, 0.5) tb(s, 1.6, ry+0.22, 6.5, 0.58, therapy, 12, bold=True, color=col, wrap=True) rect(s, 8.2, ry, 1.2, rh, RGBColor(0xF0,0xF4,0xF8), col, 0.5) tb(s, 8.25, ry+0.25, 1.1, 0.5, cls, 12, bold=True, color=col, align=PP_ALIGN.CENTER) rect(s, 9.4, ry, 3.65, rh, RGBColor(0xF5,0xF5,0xF5), MID_GRAY, 0.3) tb(s, 9.5, ry+0.14, 3.5, 0.75, note, 10.5, color=TEXT, wrap=True) ry += rh + 0.05 tb(s, 0.25, 6.82, 12.5, 0.42, "MT = Mechanical Thrombectomy | CDT = Catheter-Directed Thrombolysis | PEERLESS RCT 2025: large-bore MT vs. CDT in intermediate-high risk PE", 9.5, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 6 — PERTs + Outpatient Management # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "PERTs & Outpatient Management", 28, bold=True, color=WHITE) # PERT panel rect(s, 0.25, 1.28, 6.1, 6.0, WHITE, RED, 1.0) rect(s, 0.25, 1.28, 6.1, 0.72, RED) tb(s, 0.4, 1.32, 5.7, 0.65, "Pulmonary Embolism Response Teams (PERTs)", 14.5, bold=True, color=WHITE) rect(s, 0.35, 2.1, 5.85, 0.52, RGBColor(0xFF,0xEB,0xEB)) tb(s, 0.45, 2.14, 5.7, 0.44, "CLASS 1 RECOMMENDATION — Upgraded from ESC 2019 (merely 'mentioned')", 12, bold=True, color=RED) bullets(s, 0.35, 2.72, 5.85, 4.4, ["Multidisciplinary rapid-response team", "Members: Cardiology, Pulmonology, EM, Hematology, IR, CT Surgery", "Activated for Category C2+ (intermediate & high-risk PE)", "Provides rapid, coordinated treatment decisions", "Demonstrated to improve timeliness of care"], sz=12.5) # Outpatient panel rect(s, 6.65, 1.28, 6.45, 6.0, WHITE, BLUE, 1.0) rect(s, 6.65, 1.28, 6.45, 0.72, BLUE) tb(s, 6.8, 1.32, 6.1, 0.65, "Outpatient / Early Discharge (NEW Explicit Criteria)", 14.5, bold=True, color=WHITE) rect(s, 6.75, 2.1, 6.25, 0.52, RGBColor(0xE8,0xF2,0xFF)) tb(s, 6.85, 2.14, 6.05, 0.44, "Category A/B patients may be discharged from the ED", 12, bold=True, color=BLUE) bullets(s, 6.75, 2.72, 6.25, 2.25, ["No significant comorbidity", "Reliable follow-up available", "DOAC access confirmed"], sz=12.5) tb(s, 6.8, 5.05, 6.1, 0.38, "Discharge decision tools:", 12, bold=True, color=NAVY) bullets(s, 6.75, 5.42, 6.25, 0.65, ["Hestia criteria", "sPESI score"], sz=12.5) rect(s, 6.75, 6.18, 6.25, 0.82, RGBColor(0xE8,0xF7,0xEE), GREEN, 0.5) tb(s, 6.85, 6.22, 6.05, 0.72, "Post-PE clinic at 3–6 months\nScreen for CTEPH with echo → V/Q → right heart cath", 11.5, color=GREEN, wrap=True) # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 7 — Special Populations # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Special Populations", 28, bold=True, color=WHITE) pops = [ ("Pregnancy", TEAL, ["LMWH throughout gestation — DOACs are contraindicated", "CTPA preferred over V/Q if imaging needed", "Systemic thrombolysis only for life-threatening PE", "Pregnancy-adapted YEARS algorithm — use with caution"]), ("Active Cancer", BLUE, ["LMWH or DOACs (edoxaban / rivaroxaban) preferred", "Caution with luminal GI malignancy — high bleeding risk", "Reassess anticoagulation at each visit"]), ("Renal Impairment", ORANGE, ["Use UFH or dose-adjusted LMWH", "Avoid dabigatran if eGFR < 30 mL/min", "Dose-adjust other DOACs per renal function"]), ("Right Heart Thrombus", RED, ["Anticoagulation alone = high mortality", "Consider systemic thrombolysis or surgical removal", "Decision based on hemodynamic status"]), ("Long-Haul Travel", PURPLE, ["For prior PE patients NOT on anticoagulation", "Single prophylactic DOAC or LMWH dose on day of travel", "Class 2b recommendation"]), ] cx = 0.25 cw = 2.52 for pop, col, items in pops: rect(s, cx, 1.28, cw, 6.0, WHITE, col, 1.0) rect(s, cx, 1.28, cw, 0.72, col) tb(s, cx+0.1, 1.33, cw-0.15, 0.62, pop, 13, bold=True, color=WHITE, wrap=True) for i, it in enumerate(items): tb(s, cx+0.1, 2.12+i*0.98, cw-0.18, 0.9, "• "+it, 11.5, color=TEXT, wrap=True) cx += cw + 0.12 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 8 — ESC 2019 vs AHA/ACC 2026 # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "ESC 2019 vs. AHA/ACC 2026: Key Differences", 26, bold=True, color=WHITE) # header row rect(s, 0.25, 1.28, 12.85, 0.58, NAVY) tb(s, 0.35, 1.33, 4.2, 0.48, "Feature", 13, bold=True, color=WHITE) tb(s, 4.65, 1.33, 4.1, 0.48, "ESC 2019", 13, bold=True, color=RGBColor(0xAA,0xCC,0xFF)) tb(s, 8.85, 1.33, 4.1, 0.48, "AHA/ACC 2026", 13, bold=True, color=RGBColor(0xAA,0xFF,0xCC)) compare = [ ("Risk Classification", "Low / Intermediate-low /\nIntermediate-high / High", "New 5-tier A–E system with subcategories"), ("BNP in Risk Stratification","Supplementary only", "Formally incorporated into category assignment"), ("PERTs", "Mentioned", "Class 1 Recommendation (major upgrade)"), ("MT for Intermediate Risk", "Not addressed", "Class 2b for D1–D2"), ("Normotensive Shock", "Not explicitly defined", "Explicitly categorized as Category D"), ("Outpatient Management", "Limited guidance", "Explicit ED discharge criteria (Hestia / sPESI)"), ("Long-haul Travel PE Ppx", "Not specifically addressed", "Class 2b — single-dose DOAC/LMWH on travel day"), ] rowcols = [WHITE, RGBColor(0xF0,0xF4,0xF8)] ry = 1.86 for i, (feat, old, new_) in enumerate(compare): rh = 0.74 bg_c = rowcols[i % 2] rect(s, 0.25, ry, 4.3, rh, bg_c, MID_GRAY, 0.3) tb(s, 0.35, ry+0.1, 4.1, 0.58, feat, 11.5, bold=True, color=TEXT, wrap=True) rect(s, 4.55, ry, 4.2, rh, bg_c, MID_GRAY, 0.3) tb(s, 4.65, ry+0.1, 4.0, 0.58, old, 11, color=RED, italic=True, wrap=True) rect(s, 8.75, ry, 4.3, rh, bg_c, MID_GRAY, 0.3) tb(s, 8.85, ry+0.1, 4.1, 0.58, new_, 11, color=GREEN, bold=True, wrap=True) ry += rh + 0.03 # ═══════════════════════════════════════════════════════════════════════════════ # SLIDE 9 — Top 10 Take-Home Messages # ═══════════════════════════════════════════════════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) rect(s, 0, 6.88, 13.333, 0.62, RGBColor(0x08,0x18,0x38)) tb(s, 0.25, 0.18, 12.5, 0.75, "Top 10 Official Take-Home Messages (AHA/ACC 2026)", 26, bold=True, color=WHITE) messages = [ ("1", "New A–E Classification", "5-tier system replaces Low/Intermediate/High — enhances precision for all management decisions"), ("2", "Prompt Diagnosis & Rx", "Empiric anticoagulation when imaging is delayed (Category C2+, low bleeding risk) — Class 2a"), ("3", "LMWH over UFH", "When parenteral anticoagulation is needed, LMWH is preferred over UFH — Class 1"), ("4", "DOACs over VKAs", "Direct oral anticoagulants preferred for eligible patients to reduce recurrence & major bleeding — Class 1"), ("5", "Advanced Therapies — E + D", "Thrombolysis / MT / CDT / embolectomy appropriate for E1; can be considered for D1–D2"), ("6", "PERTs = Class 1", "Multidisciplinary PE response teams recommended for all intermediate/high-risk PE"), ("7", "Outpatient for A/B", "Category A/B with DOAC access + reliable follow-up can go home from the ED"), ("8", "Extended Anticoagulation", "First unprovoked PE without major reversible risk factor → continue anticoagulation beyond 3–6 months"), ("9", "CTEPH Surveillance", "Screen all PE survivors for symptoms at every visit × 1 year; echo at 3–6 months"), ("10", "Address Disparities", "Guideline specifically calls out gaps in PE management across sex, race, and socioeconomic status"), ] cols_x = [0.25, 6.7] for i, (num, title, msg) in enumerate(messages): col = i % 2 row = i // 2 cx2 = cols_x[col] cy2 = 1.15 + row * 1.16 cw2 = 6.2 rect(s, cx2, cy2, cw2, 1.08, RGBColor(0x10,0x2A,0x58)) rect(s, cx2, cy2, 0.6, 1.08, BLUE) tb(s, cx2+0.04, cy2+0.32, 0.55, 0.44, num, 14, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, cx2+0.7, cy2+0.06, cw2-0.8, 0.42, title, 13, bold=True, color=RGBColor(0x7E,0xC8,0xFF)) tb(s, cx2+0.7, cy2+0.5, cw2-0.8, 0.55, msg, 10.5, color=RGBColor(0xCC,0xDD,0xEE), wrap=True) tb(s, 0.25, 7.0, 12.5, 0.40, "Source: Circulation 2026;153:e977–e1051 & JACC 2026 | doi: 10.1161/CIR.0000000000001415 | PMID 41712677", 9, italic=True, color=RGBColor(0x55,0x75,0x9A), align=PP_ALIGN.CENTER) # ─── Save ───────────────────────────────────────────────────────────────────── out = "/tmp/workspace/pe-slides2/PE_Guidelines_2026.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"Done: {out}") PYEOF

Running Command

cd /tmp/workspace/pe-slides2 && python3 -c " from pptx.dml.color import RGBColor # test — find which call breaks colors = [ ('NAVY', RGBColor(0x0D, 0x2B, 0x55)), ('TEAL', RGBColor(0x0E, 0x7C, 0x86)), ('OFF_WHITE', RGBColor(0xF5, 0xF7, 0xFA)), ('LIGHT_BLUE', RGBColor(0xD6, 0xE8, 0xF7)), ('MID_GRAY', RGBColor(0x70, 0x7F, 0x8B)), ('TEXT', RGBColor(0x1E, 0x2A, 0x38)), ] for name, c in colors: print(f'{name}: ok') "

Running Command

python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from io import BytesIO import os os.makedirs("/tmp/workspace/pe-slides2", exist_ok=True) # ── Palette ────────────────────────────────────────────────────────────────── NAVY = RGBColor(0x0D, 0x2B, 0x55) BLUE = RGBColor(0x1A, 0x5F, 0x9E) RED = RGBColor(0xC0, 0x39, 0x2B) GREEN = RGBColor(0x1A, 0x8A, 0x5A) ORANGE = RGBColor(0xE6, 0x7E, 0x22) PURPLE = RGBColor(0x6C, 0x35, 0x7B) TEAL = RGBColor(0x0E, 0x7C, 0x86) DPURP = RGBColor(0x3A, 0x0A, 0x4A) WHITE = RGBColor(0xFF, 0xFF, 0xFF) OFF_WHITE = RGBColor(0xF5, 0xF7, 0xFA) MID_GRAY = RGBColor(0x70, 0x7F, 0x8B) TEXT = RGBColor(0x1E, 0x2A, 0x38) CREAM = RGBColor(0xFF, 0xF3, 0xCD) LBLUE = RGBColor(0xE8, 0xF2, 0xFF) LGREEN = RGBColor(0xE8, 0xF7, 0xEE) LRED = RGBColor(0xFF, 0xEB, 0xEB) LGRAY = RGBColor(0xF0, 0xF4, 0xF8) DARK_ROW = RGBColor(0x10, 0x2A, 0x58) BTM_BAR = RGBColor(0x08, 0x18, 0x38) SUB_BLUE = RGBColor(0x7E, 0xB8, 0xE8) SUB_BLUE2 = RGBColor(0xAA, 0xCC, 0xFF) SUB_GRN = RGBColor(0xAA, 0xFF, 0xCC) PALE_NAVY = RGBColor(0x10, 0x2A, 0x58) CARD_TXT = RGBColor(0xCC, 0xDD, 0xEE) CITE_COL = RGBColor(0x55, 0x75, 0x9A) AMBER_TXT = RGBColor(0x7A, 0x4A, 0x00) LIGHT_CARD= RGBColor(0xB0, 0xCC, 0xE8) LINK_BLUE = RGBColor(0x7E, 0xC8, 0xFF) prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) BL = prs.slide_layouts[6] # ── helpers ─────────────────────────────────────────────────────────────────── def bg(slide, color): slide.background.fill.solid() slide.background.fill.fore_color.rgb = color def rect(slide, x, y, w, h, fill, line=None, lw=0.5): sh = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h)) sh.fill.solid(); sh.fill.fore_color.rgb = fill if line: sh.line.color.rgb = line; sh.line.width = Pt(lw) else: sh.line.fill.background() return sh def tb(slide, x, y, w, h, text, sz, bold=False, color=TEXT, align=PP_ALIGN.LEFT, italic=False, wrap=True): t = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = t.text_frame; tf.word_wrap = wrap tf.vertical_anchor = MSO_ANCHOR.TOP tf.margin_left=0; tf.margin_right=0; tf.margin_top=Pt(2); tf.margin_bottom=0 p = tf.paragraphs[0]; p.alignment = align r = p.add_run(); r.text = text r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic r.font.color.rgb=color; r.font.name="Calibri" return t def blist(slide, x, y, w, h, items, sz=12, col=TEXT): t = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = t.text_frame; tf.word_wrap=True tf.margin_left=Pt(6); tf.margin_right=Pt(4) tf.margin_top=Pt(4); tf.margin_bottom=Pt(4) for i, item in enumerate(items): p = tf.paragraphs[0] if i==0 else tf.add_paragraph() p.alignment=PP_ALIGN.LEFT; p.space_before=Pt(3) r = p.add_run(); r.text="• "+item r.font.size=Pt(sz); r.font.color.rgb=col; r.font.name="Calibri" # ════════════════════════════ SLIDE 1 — Title ═════════════════════════════════ s = prs.slides.add_slide(BL) bg(s, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) rect(s, 0, 6.85, 13.333, 0.65, BTM_BAR) tb(s, 0.3, 1.3, 12.5, 0.65, "2026 AHA / ACC / ACCP / ACEP / CHEST — FIRST-EVER DEDICATED GUIDELINE", 13, color=SUB_BLUE, align=PP_ALIGN.CENTER) tb(s, 0.3, 1.95, 12.5, 1.55, "Pulmonary Embolism", 54, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, 0.3, 3.5, 12.5, 0.65, "New Guidelines: Evaluation & Management of Acute PE in Adults", 21, color=LIGHT_CARD, align=PP_ALIGN.CENTER) tb(s, 0.3, 4.22, 12.5, 0.5, "Published in Circulation & JACC | February 19, 2026 | PMID 41712677", 13, italic=True, color=RGBColor(0x70, 0x98, 0xC0), align=PP_ALIGN.CENTER) rect(s, 4.5, 5.1, 4.35, 0.55, RED) tb(s, 4.5, 5.13, 4.35, 0.48, "Replaces ESC 2019 — Major Practice Change", 12, bold=True, color=WHITE, align=PP_ALIGN.CENTER) # ════════════════════════════ SLIDE 2 — Classification ════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.17, 13, 0.75, "The Biggest Change: New 5-Tier Clinical Classification (A–E)", 25, bold=True, color=WHITE) tb(s, 0.25, 0.83, 13, 0.28, "Replaces Low/Intermediate/High risk — adds physiological subcategories & normotensive shock", 11.5, italic=True, color=SUB_BLUE2) cats = [ ("A", "At Risk", GREEN, ["No acute PE yet","Risk factors present","Prophylaxis focus"]), ("B", "Mild", BLUE, ["Hemodynamically stable","No RV strain","Low severity score"]), ("C", "Intermediate", ORANGE, ["C1: elevated score, normal RV + biomarkers", "C2: RV dysfunction OR abnormal biomarkers", "C3: BOTH RV dysfunction AND biomarkers", "Resp modifier if SpO2 <90%"]), ("D", "Deteriorating",RED, ["Normotensive shock","Rapid clinical deterioration", "D1 and D2 subcategories","NEW vs. ESC 2019"]), ("E", "Extremis", PURPLE, ["Overt hemodynamic collapse","Cardiac arrest", "E1: pulsatile rhythm","E2: cardiac arrest"]), ] cx = 0.25 cw = 2.55 for ltr, name, col, pts in cats: rect(s, cx, 1.28, cw, 6.0, WHITE, col, 1.2) rect(s, cx, 1.28, cw, 0.9, col) tb(s, cx+0.05, 1.33, 0.75, 0.8, ltr, 34, bold=True, color=WHITE) tb(s, cx+0.72, 1.38, cw-0.82, 0.72, name, 14, bold=True, color=WHITE) for i, pt in enumerate(pts): tb(s, cx+0.12, 2.35+i*0.92, cw-0.22, 0.85, "• "+pt, 11.5, color=TEXT, wrap=True) cx += cw + 0.12 tb(s, 0.25, 7.08, 12.5, 0.38, "New parameters incorporated: CPES score | NEWS2 | Serum lactate | Normotensive shock | Respiratory modifiers in C1–C3", 10, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ════════════════════════════ SLIDE 3 — Diagnosis ════════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Diagnosis", 28, bold=True, color=WHITE) panels = [ ("Imaging", BLUE, ["CTPA: primary modality for confirmed PE", "V/Q scan: preferred in pregnancy & reduced radiation/contrast", "Echo: RV assessment — drives C2/C3 vs D/E categorization"]), ("Biomarkers", GREEN, ["Troponin + BNP/NT-proBNP now formally in category assignment", "BNP is NEW vs. ESC 2019 (troponin only before)", "Both required for complete risk-tier assignment"]), ("Pre-test Probability", ORANGE, ["Wells score — remains valid", "Revised Geneva score — remains valid", "D-dimer: age-adjusted cutoff (age x 10 mcg/L if >50 yrs)", "Pregnancy-adapted YEARS algorithm (use with caution)"]), ("Empiric Treatment", TEAL, ["If imaging is delayed in suspected Category C2+", "AND bleeding risk is low:", "Start therapeutic anticoagulation empirically", "(Class 2a recommendation)"]), ] cx = 0.25 cw = 3.15 for title, col, items in panels: rect(s, cx, 1.28, cw, 5.95, WHITE, col, 1.0) rect(s, cx, 1.28, cw, 0.7, col) tb(s, cx+0.12, 1.33, cw-0.22, 0.62, title, 14, bold=True, color=WHITE) for i, it in enumerate(items): tb(s, cx+0.12, 2.1+i*0.95, cw-0.22, 0.88, "• "+it, 11.5, color=TEXT, wrap=True) cx += cw + 0.2 # ════════════════════════════ SLIDE 4 — Anticoagulation ══════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Anticoagulation", 28, bold=True, color=WHITE) # LEFT panel rect(s, 0.25, 1.28, 6.15, 6.0, WHITE, BLUE, 1.0) rect(s, 0.25, 1.28, 6.15, 0.7, BLUE) tb(s, 0.4, 1.32, 5.8, 0.62, "DOACs — Preferred First Line (Class 1)", 15, bold=True, color=WHITE) doac_rows = [ ("Rivaroxaban / Apixaban", "Oral from Day 1 — no parenteral bridge needed"), ("Dabigatran / Edoxaban", "Require 5–10 days parenteral anticoagulation first"), ] for i, (drug, note) in enumerate(doac_rows): ry = 2.1 + i * 1.1 rect(s, 0.35, ry, 5.9, 0.95, LBLUE, BLUE, 0.5) tb(s, 0.5, ry+0.05, 5.6, 0.42, drug, 13, bold=True, color=BLUE) tb(s, 0.5, ry+0.47, 5.6, 0.42, note, 11.5, color=TEXT) rect(s, 0.35, 4.35, 5.9, 0.55, CREAM) tb(s, 0.5, 4.38, 5.6, 0.48, "Antiphospholipid syndrome (thrombotic): VKA preferred over DOAC — Class 1", 11.5, color=AMBER_TXT) tb(s, 0.4, 5.05, 5.8, 0.38, "When LMWH / UFH preferred instead:", 12, bold=True, color=NAVY) blist(s, 0.35, 5.43, 5.85, 1.7, ["Pregnancy (DOACs contraindicated — LMWH throughout)", "Active cancer with GI involvement", "DOAC contraindicated / unavailable", "LMWH preferred over UFH when parenteral therapy needed (Class 1)"], sz=11.5) # RIGHT panel rect(s, 6.65, 1.28, 6.45, 6.0, WHITE, GREEN, 1.0) rect(s, 6.65, 1.28, 6.45, 0.7, GREEN) tb(s, 6.8, 1.32, 6.1, 0.62, "Duration & Long-Term Decisions", 15, bold=True, color=WHITE) dur_rows = [ ("Minimum 3 months", "for ALL PE — provoked or unprovoked"), ("Extended / indefinite", "First PE without major reversible risk factor (Class 1);\nrecurrent VTE, active cancer, antiphospholipid syndrome"), ("NOT recommended", "Aspirin is NOT a substitute for anticoagulation"), ] ry = 2.1 for label, note in dur_rows: rect(s, 6.75, ry, 6.2, 1.05, LGREEN, GREEN, 0.5) tb(s, 6.9, ry+0.05, 5.9, 0.42, label, 13, bold=True, color=GREEN) tb(s, 6.9, ry+0.47, 5.9, 0.52, note, 11, color=TEXT, wrap=True) ry += 1.17 # ════════════════════════════ SLIDE 5 — Advanced Therapies ═══════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Advanced (Reperfusion) Therapies — Treatment Matrix", 26, bold=True, color=WHITE) rect(s, 0.25, 1.28, 12.85, 0.55, NAVY) tb(s, 1.5, 1.32, 0.35, 0.45, "Category", 12, bold=True, color=WHITE) tb(s, 1.9, 1.32, 6.2, 0.45, "Preferred Therapy", 12, bold=True, color=WHITE) tb(s, 8.2, 1.32, 1.15, 0.45, "Class", 12, bold=True, color=WHITE) tb(s, 9.45, 1.32, 3.5, 0.45, "Notes", 12, bold=True, color=WHITE) rows5 = [ ("A – C1", GREEN, "Anticoagulation only", "1 / 3", "Class 3: do NOT use MT or thrombolysis"), ("C2 – C3", ORANGE, "Anticoag +/- Catheter-Directed Therapy", "2b", "CDT if deteriorating; C3 MAP <80 mmHg = escalation trigger"), ("D1 – D2", RED, "CDT OR Mechanical Thrombectomy (MT)", "2b", "MT preferred if high bleeding risk; PEERLESS RCT 2025 informed"), ("E1", PURPLE, "Systemic Thrombolysis OR MT", "2a", "Surgical embolectomy if available; alteplase 100 mg IV over 2h"), ("E2", DPURP, "Systemic Thrombolysis + VA-ECMO", "Emergent", "Surgical embolectomy — cardiac arrest scenario"), ] ry = 1.83 for cat, col, therapy, cls, note in rows5: rh = 0.97 rect(s, 0.25, ry, 1.2, rh, col) tb(s, 0.3, ry+0.27, 1.1, 0.44, cat, 13, bold=True, color=WHITE, align=PP_ALIGN.CENTER) rect(s, 1.45, ry, 6.7, rh, WHITE, col, 0.5) tb(s, 1.58, ry+0.22, 6.5, 0.58, therapy, 12, bold=True, color=col, wrap=True) rect(s, 8.15, ry, 1.22, rh, LGRAY, col, 0.5) tb(s, 8.2, ry+0.27, 1.1, 0.44, cls, 12, bold=True, color=col, align=PP_ALIGN.CENTER) rect(s, 9.37, ry, 3.68, rh, OFF_WHITE, MID_GRAY, 0.3) tb(s, 9.47, ry+0.12, 3.5, 0.78, note, 10.5, color=TEXT, wrap=True) ry += rh + 0.05 tb(s, 0.25, 6.83, 12.5, 0.42, "MT = Mechanical Thrombectomy | CDT = Catheter-Directed Thrombolysis | PEERLESS RCT 2025: large-bore MT vs. CDT in intermediate-high risk PE", 9.5, italic=True, color=MID_GRAY, align=PP_ALIGN.CENTER) # ════════════════════════════ SLIDE 6 — PERTs + Outpatient ═══════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "PERTs & Outpatient Management", 28, bold=True, color=WHITE) # PERT rect(s, 0.25, 1.28, 6.1, 6.0, WHITE, RED, 1.0) rect(s, 0.25, 1.28, 6.1, 0.72, RED) tb(s, 0.4, 1.32, 5.7, 0.65, "Pulmonary Embolism Response Teams (PERTs)", 14.5, bold=True, color=WHITE) rect(s, 0.35, 2.1, 5.85, 0.52, LRED) tb(s, 0.45, 2.14, 5.7, 0.44, "CLASS 1 RECOMMENDATION — Upgraded from ESC 2019 (merely 'mentioned')", 12, bold=True, color=RED) blist(s, 0.35, 2.72, 5.85, 4.4, ["Multidisciplinary rapid-response team", "Members: Cardiology, Pulmonology, EM, Hematology, IR, CT Surgery", "Activated for Category C2+ (intermediate & high-risk PE)", "Provides rapid, coordinated treatment decisions", "Demonstrated to improve timeliness of care"], sz=12.5) # Outpatient rect(s, 6.65, 1.28, 6.45, 6.0, WHITE, BLUE, 1.0) rect(s, 6.65, 1.28, 6.45, 0.72, BLUE) tb(s, 6.8, 1.32, 6.1, 0.65, "Outpatient / Early Discharge (New Explicit Criteria)", 14.5, bold=True, color=WHITE) rect(s, 6.75, 2.1, 6.25, 0.52, LBLUE) tb(s, 6.85, 2.14, 6.05, 0.44, "Category A/B patients may be safely discharged from the ED", 12, bold=True, color=BLUE) blist(s, 6.75, 2.72, 6.25, 1.85, ["No significant comorbidity", "Reliable follow-up available", "DOAC access confirmed"], sz=12.5) tb(s, 6.8, 4.68, 6.1, 0.38, "Discharge decision tools:", 12, bold=True, color=NAVY) blist(s, 6.75, 5.05, 6.25, 0.62, ["Hestia criteria", "sPESI score"], sz=12.5) rect(s, 6.75, 5.8, 6.25, 1.2, LGREEN, GREEN, 0.5) tb(s, 6.85, 5.85, 6.05, 1.1, "Post-PE follow-up clinic at 3–6 months\nScreen for CTEPH: Echo -> V/Q scan -> Right heart catheterization if suspected\nAsk about symptoms at every visit x 1 year", 11, color=GREEN, wrap=True) # ════════════════════════════ SLIDE 7 — Special Populations ══════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "Special Populations", 28, bold=True, color=WHITE) pops = [ ("Pregnancy", TEAL, ["LMWH throughout — DOACs are contraindicated", "CTPA preferred over V/Q if imaging needed", "Systemic thrombolysis only for life-threatening PE", "YEARS algorithm — use with caution"]), ("Active Cancer", BLUE, ["LMWH or DOACs (edoxaban / rivaroxaban)", "Caution with luminal GI malignancy — high bleeding risk", "Reassess anticoagulation at each visit"]), ("Renal Impairment", ORANGE, ["UFH or dose-adjusted LMWH preferred", "Avoid dabigatran if eGFR < 30 mL/min", "Dose-adjust other DOACs per renal function"]), ("Right Heart Thrombus",RED, ["Anticoagulation alone = high mortality", "Consider systemic thrombolysis or surgical removal", "Decision guided by hemodynamic status"]), ("Long-Haul Travel", PURPLE, ["For prior PE patients NOT on anticoagulation", "Single prophylactic DOAC or LMWH on day of travel", "Class 2b recommendation"]), ] cx = 0.25 cw = 2.52 for pop, col, items in pops: rect(s, cx, 1.28, cw, 6.0, WHITE, col, 1.0) rect(s, cx, 1.28, cw, 0.72, col) tb(s, cx+0.1, 1.32, cw-0.18, 0.65, pop, 13, bold=True, color=WHITE, wrap=True) for i, it in enumerate(items): tb(s, cx+0.1, 2.12+i*0.98, cw-0.18, 0.9, "• "+it, 11.5, color=TEXT, wrap=True) cx += cw + 0.12 # ════════════════════════════ SLIDE 8 — ESC vs AHA ═══════════════════════════ s = prs.slides.add_slide(BL) bg(s, OFF_WHITE) rect(s, 0, 0, 13.333, 1.12, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) tb(s, 0.25, 0.18, 13, 0.8, "ESC 2019 vs. AHA/ACC 2026: Key Differences", 26, bold=True, color=WHITE) rect(s, 0.25, 1.28, 12.85, 0.58, NAVY) tb(s, 0.35, 1.33, 4.2, 0.48, "Feature", 13, bold=True, color=WHITE) tb(s, 4.65, 1.33, 4.1, 0.48, "ESC 2019", 13, bold=True, color=SUB_BLUE2) tb(s, 8.85, 1.33, 4.1, 0.48, "AHA/ACC 2026", 13, bold=True, color=SUB_GRN) compare = [ ("Risk Classification", "Low / Intermediate-low /\nIntermediate-high / High", "New 5-tier A-E system with subcategories"), ("BNP in Risk Stratification", "Supplementary only", "Formally incorporated into category assignment"), ("PERTs", "Mentioned", "Class 1 Recommendation (major upgrade)"), ("MT for Intermediate Risk", "Not addressed", "Class 2b for D1-D2 (PEERLESS RCT 2025)"), ("Normotensive Shock", "Not explicitly defined", "Explicitly categorized as Category D"), ("Outpatient Management", "Limited guidance", "Explicit ED discharge criteria (Hestia / sPESI)"), ("Long-haul Travel Ppx", "Not specifically addressed", "Class 2b: single-dose DOAC/LMWH on travel day"), ] rowcols = [WHITE, LGRAY] ry = 1.86 for i, (feat, old, new_) in enumerate(compare): rh = 0.74 bgc = rowcols[i % 2] rect(s, 0.25, ry, 4.3, rh, bgc, MID_GRAY, 0.3) tb(s, 0.35, ry+0.1, 4.1, 0.58, feat, 11.5, bold=True, color=TEXT, wrap=True) rect(s, 4.55, ry, 4.2, rh, bgc, MID_GRAY, 0.3) tb(s, 4.65, ry+0.1, 4.0, 0.58, old, 11, color=RED, italic=True, wrap=True) rect(s, 8.75, ry, 4.3, rh, bgc, MID_GRAY, 0.3) tb(s, 8.85, ry+0.1, 4.1, 0.58, new_, 11, color=GREEN, bold=True, wrap=True) ry += rh + 0.03 # ════════════════════════════ SLIDE 9 — Top 10 Messages ══════════════════════ s = prs.slides.add_slide(BL) bg(s, NAVY) rect(s, 0, 0, 0.1, 7.5, RED) rect(s, 0, 6.88, 13.333, 0.62, BTM_BAR) tb(s, 0.25, 0.18, 12.5, 0.75, "Top 10 Official Take-Home Messages (AHA/ACC 2026)", 26, bold=True, color=WHITE) messages = [ ("1", "New A-E Classification", "5-tier system replaces Low/Intermediate/High — precision for all management decisions"), ("2", "Prompt Diagnosis & Rx", "Empiric anticoagulation when imaging is delayed (Category C2+, low bleeding risk) — Class 2a"), ("3", "LMWH over UFH", "When parenteral therapy is needed, LMWH is preferred over UFH — Class 1"), ("4", "DOACs over VKAs", "Direct oral anticoagulants preferred for eligible patients — reduce recurrence & major bleeding"), ("5", "Advanced Therapies D+E", "Thrombolysis / MT / CDT / embolectomy appropriate for E1; consider for D1-D2"), ("6", "PERTs = Class 1", "Multidisciplinary PE response teams recommended for all intermediate/high-risk PE"), ("7", "Outpatient for A/B", "Category A/B with DOAC access + reliable follow-up can go home from the ED"), ("8", "Extended Anticoagulation", "First unprovoked PE without major reversible risk factor: continue beyond 3-6 months"), ("9", "CTEPH Surveillance", "Screen all PE survivors for symptoms at every visit x 1 year; echo at 3-6 months"), ("10", "Address Disparities", "Guideline explicitly calls out gaps across sex, race, and socioeconomic status"), ] cols_x = [0.25, 6.7] for i, (num, title, msg) in enumerate(messages): col = i % 2 row = i // 2 cx2 = cols_x[col] cy2 = 1.15 + row * 1.17 cw2 = 6.2 rect(s, cx2, cy2, cw2, 1.08, DARK_ROW) rect(s, cx2, cy2, 0.6, 1.08, BLUE) tb(s, cx2+0.04, cy2+0.32, 0.55, 0.44, num, 14, bold=True, color=WHITE, align=PP_ALIGN.CENTER) tb(s, cx2+0.7, cy2+0.06, cw2-0.8, 0.42, title, 13, bold=True, color=LINK_BLUE) tb(s, cx2+0.7, cy2+0.5, cw2-0.8, 0.55, msg, 10.5, color=CARD_TXT, wrap=True) tb(s, 0.25, 7.02, 12.5, 0.40, "Source: Circulation 2026;153:e977-e1051 & JACC 2026 | doi:10.1161/CIR.0000000000001415 | PMID 41712677", 9, italic=True, color=CITE_COL, align=PP_ALIGN.CENTER) # ─── Save ───────────────────────────────────────────────────────────────────── out = "/tmp/workspace/pe-slides2/PE_Guidelines_2026.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"Saved: {out} ({os.path.getsize(out):,} bytes)") PYEOF

Your presentation is ready. Download it here:

PE Guidelines 2026

Presentation · PPTX

The deck has 9 slides covering exactly the information from the summary, with a clean navy/red/white design:
SlideContent
1Title - 2026 AHA/ACC first-ever dedicated PE guideline
2New 5-Tier A-E Classification - color-coded cards with subcategories
3Diagnosis - Imaging, Biomarkers, Pre-test probability, Empiric treatment
4Anticoagulation - DOACs first-line, duration, special considerations
5Advanced Therapies Matrix - table mapping Category A-E to therapy + evidence class
6PERTs & Outpatient Management - Class 1 PERT upgrade + ED discharge criteria
7Special Populations - Pregnancy, Cancer, Renal, Right heart thrombus, Travel
8ESC 2019 vs AHA/ACC 2026 - side-by-side comparison table
9Top 10 Official Take-Home Messages - numbered cards on dark background
This is a shared conversation. Sign in to Orris to start your own chat.