Make a repeat, uh, of how much, uh, page you can take. I don't care about the size. Just in that, uh, repeat, you have to teach, uh, how we can treat, uh, a patient who have a small piece of clots in his lungs and the steps we have to perform during a surgery.
Source references: Sabiston Textbook of Surgery (19e/21e), Rosen's Emergency Medicine, Murray & Nadel's Textbook of Respiratory Medicine
| Factor | Examples |
|---|---|
| Hypercoagulability | Cancer, inherited thrombophilia (Factor V Leiden, Protein C/S deficiency, Antithrombin deficiency), oral contraceptives, pregnancy |
| Venous stasis | Prolonged immobility, heart failure, post-surgical bed rest |
| Endothelial injury | Surgery, trauma, central venous catheters |
Note: Small PE can be completely asymptomatic - Rosen's Emergency Medicine
| Revised Geneva Score | Points |
|---|---|
| Age >65 years | 1 |
| Previous DVT or PE | 3 |
| Surgery/fracture within 1 month | 2 |
| Active malignancy | 2 |
| Unilateral lower limb pain | 3 |
| Hemoptysis | 2 |
| HR 75-94 bpm | 3 |
| HR ≥95 bpm | 5 |
| DVT pain/edema on palpation | 4 |
| Low risk = 0-3 | Intermediate = 4-10 |
| Category | Criteria | Mortality |
|---|---|---|
| Low-Risk (non-massive) | Hemodynamically stable, no RV dysfunction | <1-3% |
| Intermediate-Risk (submassive) | Stable + RV dysfunction on imaging OR elevated troponin/BNP | 3-15% |
| High-Risk (massive) | Hemodynamically unstable (SBP <90 mmHg) | 15-50% |
Note: Surgical embolectomy is typically NOT indicated for small, low-risk PE. It is reserved for life-threatening cases. The steps below describe what happens when surgery is required.
| PE Type | First Treatment | Second Line | Surgery? |
|---|---|---|---|
| Low-risk (small PE) | DOAC anticoagulation | - | No |
| Intermediate | Heparin + monitoring | CDT or systemic thrombolysis | Rarely |
| High-risk (massive) | Heparin + systemic tPA | CDT, CATR | Yes, if thrombolysis fails/contraindicated |
| Drug | Class | Dose | Notes |
|---|---|---|---|
| Rivaroxaban | DOAC | 15 mg BID x 21d → 20 mg daily | No monitoring needed |
| Apixaban | DOAC | 10 mg BID x 7d → 5 mg BID | Preferred in cancer, elderly |
| Enoxaparin | LMWH | 1 mg/kg SC BID | Avoid if CrCl <30 |
| UFH | Heparin | 80 u/kg IV bolus → 18 u/kg/hr | Use if surgery/thrombolysis planned |
| Alteplase (tPA) | Thrombolytic | 100 mg IV over 2h | Systemic; high bleeding risk |
I want PPT for the whole. PPT, PPT, PPT, PPT.
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/pulmonary-embolism-ppt
~/pulmonary-embolism-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Pulmonary Embolism: Diagnosis, Treatment & Surgery";
pres.author = "Medical Education";
// ─── COLOR PALETTE ───────────────────────────────────────────────
// Deep navy dominates, crimson accent, light slate for cards, white text
const C = {
navy: "0D1B2A", // dominant background
navyMid: "1A2E45", // secondary bg panels
crimson: "C0392B", // accent / danger
teal: "1ABC9C", // highlight / steps
gold: "F39C12", // warning / caution
white: "FFFFFF",
offWhite: "ECF0F1",
lightGray: "BDC3C7",
darkText: "1C2833",
cardBg: "1E3A5F", // card backgrounds
cardBg2: "154360",
};
// ─── HELPER FUNCTIONS ─────────────────────────────────────────────
function darkBg(slide) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color: C.navy }, line: { color: C.navy }
});
}
function sectionBg(slide) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color: C.navyMid }, line: { color: C.navyMid }
});
}
function contentBg(slide) {
// light navy background for content slides
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color: "0A1628" }, line: { color: "0A1628" }
});
}
function addSideAccent(slide) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 0.07, h: 5.625,
fill: { color: C.crimson }, line: { color: C.crimson }
});
}
function slideTitle(slide, text, sub) {
slide.addText(text, {
x: 0.35, y: 0.22, w: 9.3, h: 0.6,
fontSize: 22, bold: true, color: C.white,
fontFace: "Calibri", margin: 0
});
if (sub) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 0.87, w: 1.2, h: 0.04,
fill: { color: C.teal }, line: { color: C.teal }
});
slide.addText(sub, {
x: 0.35, y: 0.96, w: 9.3, h: 0.3,
fontSize: 11, color: C.teal, fontFace: "Calibri",
bold: false, italic: true, margin: 0
});
} else {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 0.87, w: 1.2, h: 0.04,
fill: { color: C.teal }, line: { color: C.teal }
});
}
}
function card(slide, x, y, w, h, color) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h,
fill: { color: color || C.cardBg },
line: { color: color || C.cardBg },
rectRadius: 0.12
});
}
function pill(slide, x, y, w, h, color, text, textColor) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h,
fill: { color: color },
line: { color: color },
rectRadius: 0.08
});
slide.addText(text, {
x, y, w, h,
fontSize: 9.5, bold: true, color: textColor || C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
}
function bulletList(slide, items, x, y, w, h, opts) {
const o = opts || {};
const rows = items.map((item, i) => ({
text: item,
options: { bullet: true, breakLine: i < items.length - 1, color: o.color || C.offWhite, fontSize: o.fs || 11, fontFace: "Calibri" }
}));
slide.addText(rows, { x, y, w, h, valign: "top", margin: 4 });
}
function stepCircle(slide, num, x, y, color) {
slide.addShape(pres.shapes.ELLIPSE, {
x, y, w: 0.42, h: 0.42,
fill: { color: color || C.crimson }, line: { color: color || C.crimson }
});
slide.addText(String(num), {
x, y, w: 0.42, h: 0.42,
fontSize: 13, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
// Left crimson bar
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 0.12, h: 5.625,
fill: { color: C.crimson }, line: { color: C.crimson }
});
// Top teal stripe
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 0.06,
fill: { color: C.teal }, line: { color: C.teal }
});
// Lung icon placeholder (circle + text)
s.addShape(pres.shapes.ELLIPSE, {
x: 7.2, y: 0.7, w: 2.3, h: 2.3,
fill: { color: C.navyMid }, line: { color: C.crimson, pt: 2 }
});
s.addText("🫁", {
x: 7.2, y: 0.7, w: 2.3, h: 2.3,
fontSize: 52, align: "center", valign: "middle", margin: 0
});
// Main title
s.addText("Pulmonary Embolism", {
x: 0.5, y: 1.2, w: 6.5, h: 0.85,
fontSize: 36, bold: true, color: C.white,
fontFace: "Calibri", margin: 0
});
// Subtitle
s.addText("Small Clots in the Lungs", {
x: 0.5, y: 2.1, w: 6.5, h: 0.5,
fontSize: 22, color: C.teal, fontFace: "Calibri", bold: false, margin: 0
});
s.addText("Diagnosis · Medical Treatment · Surgical Embolectomy", {
x: 0.5, y: 2.65, w: 6.5, h: 0.35,
fontSize: 12, color: C.lightGray, fontFace: "Calibri", italic: true, margin: 0
});
// Tags
const tags = [
{ t: "Pulmonology", c: C.crimson },
{ t: "Surgery", c: "1A5276" },
{ t: "Emergency Medicine", c: "1B4F72" }
];
let tx = 0.5;
tags.forEach(tag => {
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: tx, y: 3.3, w: 1.7, h: 0.3,
fill: { color: tag.c }, line: { color: tag.c }, rectRadius: 0.06
});
s.addText(tag.t, {
x: tx, y: 3.3, w: 1.7, h: 0.3,
fontSize: 9, bold: true, color: C.white, align: "center",
valign: "middle", fontFace: "Calibri", margin: 0
});
tx += 1.85;
});
// Source
s.addText("Sources: Sabiston Textbook of Surgery · Rosen's Emergency Medicine · Murray & Nadel's Respiratory Medicine", {
x: 0.5, y: 5.2, w: 9, h: 0.28,
fontSize: 8, color: C.lightGray, italic: true, fontFace: "Calibri", margin: 0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 2 — WHAT IS PE?
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "What is a Pulmonary Embolism?", "Definition & Overview");
// Definition box
s.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 1.2, w: 9.3, h: 0.9,
fill: { color: C.cardBg }, line: { color: C.teal, pt: 1.5 }
});
s.addText([
{ text: "Pulmonary Embolism (PE): ", options: { bold: true, color: C.teal } },
{ text: "A blood clot (thrombus) — usually from a deep vein thrombosis (DVT) in the legs or pelvis — that travels through the venous system and lodges in a pulmonary artery, blocking blood flow to part of the lung.", options: { color: C.offWhite } }
], {
x: 0.45, y: 1.2, w: 9.1, h: 0.9,
fontSize: 11, fontFace: "Calibri", valign: "middle", margin: 8
});
// Three key facts cards
const facts = [
{ icon: "3rd", label: "Most Common\nCardiovascular Killer", sub: "After MI and Stroke", col: C.crimson },
{ icon: "~50%", label: "Cases are\nSilent / Asymptomatic", sub: "Especially small PE", col: "1A5276" },
{ icon: "DVT", label: "Origin of\nMost Clots", sub: "Deep veins of legs/pelvis", col: "117A65" },
];
facts.forEach((f, i) => {
const x = 0.35 + i * 3.12;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 2.3, w: 2.95, h: 1.6,
fill: { color: f.col }, line: { color: f.col }, rectRadius: 0.12
});
s.addText(f.icon, {
x, y: 2.35, w: 2.95, h: 0.55,
fontSize: 22, bold: true, color: C.white,
align: "center", fontFace: "Calibri", margin: 0
});
s.addText(f.label, {
x, y: 2.9, w: 2.95, h: 0.6,
fontSize: 10.5, bold: true, color: C.white,
align: "center", fontFace: "Calibri", margin: 0
});
s.addText(f.sub, {
x, y: 3.52, w: 2.95, h: 0.3,
fontSize: 9, color: "D6EAF8", italic: true,
align: "center", fontFace: "Calibri", margin: 0
});
});
// Small PE note
s.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 4.1, w: 9.3, h: 0.55,
fill: { color: "1E2D3D" }, line: { color: C.gold, pt: 1 }
});
s.addText([
{ text: "⚠ Small PE ", options: { bold: true, color: C.gold } },
{ text: "= subsegmental or non-massive clots in peripheral pulmonary arteries. Low mortality (<3%) but still require treatment.", options: { color: C.offWhite } }
], { x: 0.45, y: 4.1, w: 9.1, h: 0.55, fontSize: 10.5, fontFace: "Calibri", valign: "middle", margin: 5 });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 3 — RISK FACTORS (VIRCHOW'S TRIAD)
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Risk Factors — Virchow's Triad", "The 3 Pillars of Clot Formation");
const triad = [
{
title: "Hypercoagulability",
icon: "🧬",
color: C.crimson,
items: ["Cancer (active malignancy)", "Factor V Leiden mutation", "Protein C / S deficiency", "Antithrombin deficiency", "Oral contraceptives / Pregnancy", "Antiphospholipid syndrome"]
},
{
title: "Venous Stasis",
icon: "🛌",
color: "1A5276",
items: ["Prolonged immobility / bed rest", "Long-haul travel", "Heart failure", "Post-surgical state", "Obesity", "Varicose veins"]
},
{
title: "Endothelial Injury",
icon: "🩹",
color: "117A65",
items: ["Surgery / Trauma", "Central venous catheters", "Prior DVT/PE", "Pelvic vein trauma at delivery", "Hypertension", "Smoking"]
}
];
triad.forEach((t, i) => {
const x = 0.25 + i * 3.22;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 1.15, w: 3.05, h: 0.45,
fill: { color: t.color }, line: { color: t.color }, rectRadius: 0.08
});
s.addText(t.icon + " " + t.title, {
x, y: 1.15, w: 3.05, h: 0.45,
fontSize: 12.5, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 1.65, w: 3.05, h: 3.5,
fill: { color: C.cardBg }, line: { color: t.color, pt: 1 }, rectRadius: 0.1
});
const rows = t.items.map((item, idx) => ({
text: item,
options: { bullet: true, breakLine: idx < t.items.length - 1, color: C.offWhite, fontSize: 10.5, fontFace: "Calibri" }
}));
s.addText(rows, { x: x + 0.08, y: 1.72, w: 2.88, h: 3.35, valign: "top", margin: 5 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 4 — CLINICAL FEATURES
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Clinical Features", "Symptoms & Signs of PE");
// Left column: symptoms
card(s, 0.35, 1.15, 4.4, 3.9, C.cardBg);
s.addText("SYMPTOMS", {
x: 0.45, y: 1.22, w: 4.2, h: 0.3,
fontSize: 11, bold: true, color: C.teal, fontFace: "Calibri",
charSpacing: 2, margin: 0
});
const syms = [
["Dyspnea (SOB)", "75–80%", C.crimson],
["Chest pain (pleuritic)", "~67%", "E67E22"],
["Hemoptysis", "~10%", "9B59B6"],
["Palpitations / Dizziness", "variable", "2980B9"],
["Syncope", "<5%", "16A085"],
["Leg swelling (unilateral)", "<30%", "8E44AD"],
];
syms.forEach(([sym, pct, col], i) => {
const y = 1.6 + i * 0.52;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 0.42, y, w: 3.0, h: 0.38,
fill: { color: "12293F" }, line: { color: "12293F" }, rectRadius: 0.06
});
s.addText(sym, {
x: 0.5, y, w: 2.4, h: 0.38,
fontSize: 10, color: C.offWhite, fontFace: "Calibri",
valign: "middle", margin: 4
});
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 2.88, y: y + 0.05, w: 0.65, h: 0.27,
fill: { color: col }, line: { color: col }, rectRadius: 0.05
});
s.addText(pct, {
x: 2.88, y: y + 0.05, w: 0.65, h: 0.27,
fontSize: 9, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
});
// Right column: signs
card(s, 5.0, 1.15, 4.65, 3.9, C.cardBg);
s.addText("SIGNS", {
x: 5.1, y: 1.22, w: 4.45, h: 0.3,
fontSize: 11, bold: true, color: C.teal, fontFace: "Calibri",
charSpacing: 2, margin: 0
});
const signs = [
"Tachycardia (most common sign)",
"Tachypnea / Hypoxemia (SpO₂ <94%)",
"Low-grade fever (<38.6 °C)",
"Hypotension (massive PE only)",
"Raised JVP / RV heave",
"Pleural rub (if infarction)",
"Calf tenderness (if DVT source)",
];
signs.forEach((sign, i) => {
s.addText([{ text: "• " + sign, options: { color: C.offWhite } }], {
x: 5.1, y: 1.6 + i * 0.48, w: 4.35, h: 0.42,
fontSize: 10, fontFace: "Calibri", valign: "middle", margin: 4
});
});
// Warning note
s.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 5.2, w: 9.3, h: 0.3,
fill: { color: "1E2D3D" }, line: { color: C.gold, pt: 1 }
});
s.addText("⚠ Small PE can be ASYMPTOMATIC — always consider PE in unexplained dyspnea, chest pain, or tachycardia", {
x: 0.45, y: 5.22, w: 9.0, h: 0.25,
fontSize: 9.5, color: C.gold, italic: true, fontFace: "Calibri", margin: 0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 5 — DIAGNOSIS ALGORITHM
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Diagnostic Algorithm", "Step-by-Step Workup for Suspected PE");
const steps = [
{ num: 1, title: "Assess Pre-Test Probability (PTP)", body: "Use Revised Geneva Score or Wells Score\nLow (0–3) / Intermediate (4–10) / High (≥11)", col: C.crimson },
{ num: 2, title: "PERC Rule", body: "If low PTP — all 8 PERC criteria negative → PE excluded (no further tests)", col: "8E44AD" },
{ num: 3, title: "D-Dimer", body: "Non-high PTP: If D-dimer <500 ng/mL (or <age×10) → PE excluded\nHigh PTP: Skip D-dimer, go straight to imaging", col: "2980B9" },
{ num: 4, title: "CT Pulmonary Angiography (CTPA)", body: "Gold standard. Filling defects = clot. If CTPA positive → confirmed PE", col: "16A085" },
{ num: 5, title: "Echocardiography", body: "For hemodynamically unstable patients. RV dilation, McConnell sign, D-sign", col: "E67E22" },
];
steps.forEach((st, i) => {
const y = 1.1 + i * 0.85;
// connecting line (not for last)
if (i < steps.length - 1) {
s.addShape(pres.shapes.RECTANGLE, {
x: 0.55, y: y + 0.55, w: 0.04, h: 0.42,
fill: { color: "2C3E50" }, line: { color: "2C3E50" }
});
}
stepCircle(s, st.num, 0.35, y + 0.08, st.col);
card(s, 0.88, y, 8.72, 0.75, "12293F");
s.addText(st.title, {
x: 1.0, y: y + 0.04, w: 8.5, h: 0.28,
fontSize: 11, bold: true, color: st.col, fontFace: "Calibri", margin: 0
});
s.addText(st.body, {
x: 1.0, y: y + 0.33, w: 8.5, h: 0.38,
fontSize: 9.5, color: C.offWhite, fontFace: "Calibri", margin: 0
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 6 — REVISED GENEVA SCORE TABLE
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Revised Geneva Score", "Pre-Test Probability Scoring for PE");
const rows = [
["Risk Factor / Finding", "Points"],
["Age >65 years", "1"],
["Previous DVT or PE", "3"],
["Surgery or fracture within 1 month", "2"],
["Active malignancy", "2"],
["Unilateral lower limb pain", "3"],
["Hemoptysis", "2"],
["Heart rate 75–94 bpm", "3"],
["Heart rate ≥95 bpm", "5"],
["DVT pain/edema on palpation", "4"],
];
const colW = [7.5, 1.5];
const startX = 0.35;
const startY = 1.15;
const rowH = 0.36;
rows.forEach((row, ri) => {
const y = startY + ri * rowH;
const isHeader = ri === 0;
const bgColor = isHeader ? C.crimson : (ri % 2 === 0 ? "0D2137" : C.cardBg);
let cx = startX;
row.forEach((cell, ci) => {
s.addShape(pres.shapes.RECTANGLE, {
x: cx, y, w: colW[ci], h: rowH,
fill: { color: bgColor }, line: { color: "0A1628", pt: 0.5 }
});
s.addText(cell, {
x: cx + 0.06, y, w: colW[ci] - 0.12, h: rowH,
fontSize: isHeader ? 11 : 10.5,
bold: isHeader,
color: isHeader ? C.white : C.offWhite,
valign: "middle", fontFace: "Calibri", margin: 0,
align: ci === 1 ? "center" : "left"
});
cx += colW[ci];
});
});
// Score interpretation
const cats = [
{ label: "LOW RISK", range: "0–3 pts", color: "117A65" },
{ label: "INTERMEDIATE", range: "4–10 pts", color: C.gold },
{ label: "HIGH RISK", range: "≥11 pts", color: C.crimson },
];
cats.forEach((c, i) => {
const x = 0.35 + i * 3.2;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 4.95, w: 3.05, h: 0.5,
fill: { color: c.color }, line: { color: c.color }, rectRadius: 0.08
});
s.addText(c.label + "\n" + c.range, {
x, y: 4.95, w: 3.05, h: 0.5,
fontSize: 10, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 7 — ECG & LAB FINDINGS
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "ECG, Labs & Imaging Findings", "Supporting Diagnostic Tools");
// 3 cards
const cols = [
{
title: "🫀 ECG Changes",
col: C.crimson,
items: [
"Sinus tachycardia (most common)",
"S1Q3T3 pattern",
"New right bundle branch block (RBBB)",
"T-wave inversions in V1–V4",
"Rightward QRS axis shift",
"AF / Atrial flutter",
"ST elevation in V1 and aVR",
]
},
{
title: "🧪 Lab Values",
col: "8E44AD",
items: [
"D-dimer: elevated (sensitivity 95–98%)",
"Troponin: elevated → RV injury",
"BNP / NT-proBNP: elevated → RV strain",
"ABG: PaO₂ <80 mmHg (hypoxemia)",
"ABG: hypocapnia (low PaCO₂)",
"A-a gradient >20 Torr",
"WBC may be mildly elevated",
]
},
{
title: "📸 Imaging Signs",
col: "16A085",
items: [
"CTPA: filling defect in pulmonary artery",
"Echo: RV dilation (RV:LV ratio >1)",
"Echo: McConnell sign (RV free wall akinesis, apical sparing)",
"Echo: D-sign (septal shift left)",
"CXR: Hampton's hump, Westermark sign",
"V/Q scan: mismatched perfusion defect",
]
}
];
cols.forEach((col, i) => {
const x = 0.25 + i * 3.25;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 1.1, w: 3.1, h: 0.42,
fill: { color: col.col }, line: { color: col.col }, rectRadius: 0.08
});
s.addText(col.title, {
x, y: 1.1, w: 3.1, h: 0.42,
fontSize: 11, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
card(s, x, 1.57, 3.1, 3.85, C.cardBg);
const rows = col.items.map((item, idx) => ({
text: item,
options: { bullet: true, breakLine: idx < col.items.length - 1, color: C.offWhite, fontSize: 10, fontFace: "Calibri" }
}));
s.addText(rows, { x: x + 0.08, y: 1.62, w: 2.94, h: 3.75, valign: "top", margin: 5 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 8 — RISK STRATIFICATION
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Risk Stratification", "Categorizing PE Severity to Guide Treatment");
const cats = [
{
label: "LOW-RISK\n(Non-Massive)",
mort: "<1–3%",
color: "117A65",
criteria: ["Hemodynamically stable", "No RV dysfunction", "Troponin normal", "BNP normal"],
action: ["DOAC anticoagulation", "Consider outpatient Rx", "Hestia criteria / PESI score"]
},
{
label: "INTERMEDIATE-RISK\n(Submassive)",
mort: "3–15%",
color: C.gold,
criteria: ["Hemodynamically stable", "RV dysfunction on echo/CT", "Troponin OR BNP elevated"],
action: ["Heparin anticoagulation", "Admit for monitoring", "Activate PERT team", "Possible CDT or thrombolysis"]
},
{
label: "HIGH-RISK\n(Massive)",
mort: "15–50%",
color: C.crimson,
criteria: ["SBP <90 mmHg or drop >40 mmHg", "Hemodynamically unstable", "Shock / cardiac arrest"],
action: ["Heparin IV stat", "Systemic thrombolysis (tPA)", "If failed/contraindicated:", "→ Surgical Embolectomy", "ICU admission"]
},
];
cats.forEach((c, i) => {
const x = 0.25 + i * 3.25;
// Header
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 1.1, w: 3.1, h: 0.65,
fill: { color: c.color }, line: { color: c.color }, rectRadius: 0.1
});
s.addText(c.label, {
x, y: 1.1, w: 2.5, h: 0.65,
fontSize: 11, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
s.addText("Mortality\n" + c.mort, {
x: x + 2.52, y: 1.1, w: 0.58, h: 0.65,
fontSize: 9, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
// Criteria
card(s, x, 1.8, 3.1, 1.7, "0D2137");
s.addText("CRITERIA", { x: x + 0.08, y: 1.84, w: 2.9, h: 0.25, fontSize: 9, bold: true, color: c.color, fontFace: "Calibri", margin: 0, charSpacing: 1 });
const cRows = c.criteria.map((item, idx) => ({
text: item,
options: { bullet: true, breakLine: idx < c.criteria.length - 1, color: C.offWhite, fontSize: 9.5, fontFace: "Calibri" }
}));
s.addText(cRows, { x: x + 0.08, y: 2.1, w: 2.94, h: 1.35, valign: "top", margin: 3 });
// Action
card(s, x, 3.57, 3.1, 1.9, C.cardBg);
s.addText("TREATMENT", { x: x + 0.08, y: 3.61, w: 2.9, h: 0.25, fontSize: 9, bold: true, color: c.color, fontFace: "Calibri", margin: 0, charSpacing: 1 });
const aRows = c.action.map((item, idx) => ({
text: item,
options: { bullet: !item.startsWith("→"), breakLine: idx < c.action.length - 1, color: item.startsWith("→") ? C.gold : C.offWhite, fontSize: 9.5, fontFace: "Calibri", bold: item.startsWith("→") }
}));
s.addText(aRows, { x: x + 0.08, y: 3.88, w: 2.94, h: 1.55, valign: "top", margin: 3 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 9 — MEDICAL TREATMENT STEPS
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Medical Treatment — Step by Step", "For Small / Low-Risk PE");
const steps = [
{ n: 1, title: "Supportive Care", body: "Supplemental O₂ → target SpO₂ >90% | Avoid intubation (↑ intrathoracic pressure worsens RV) | If intubation needed: optimize hemodynamics FIRST, use vasopressors pre-induction", col: C.teal },
{ n: 2, title: "Start Anticoagulation Immediately", body: "DOAC (preferred for low-risk): Rivaroxaban 15 mg BID ×21d → 20 mg daily OR Apixaban 10 mg BID ×7d → 5 mg BID\nLMWH (enoxaparin 1 mg/kg SC BID) | UFH IV if surgery or thrombolysis planned", col: C.crimson },
{ n: 3, title: "Duration of Anticoagulation", body: "Provoked PE (reversible cause) → 3 months | Unprovoked PE → min. 3 months, consider extended\nCancer-associated → indefinite (LMWH or DOAC)", col: C.gold },
{ n: 4, title: "Monitoring", body: "Serial troponin + BNP at 6–12 hrs | Watch for hemodynamic deterioration | If patient worsens → upgrade risk category → escalate therapy", col: "8E44AD" },
{ n: 5, title: "Disposition", body: "Low-risk → Outpatient if Hestia criteria negative / low PESI | Intermediate → Admit monitored bed | High-risk → ICU", col: "16A085" },
];
steps.forEach((st, i) => {
const y = 1.1 + i * 0.85;
if (i < steps.length - 1) {
s.addShape(pres.shapes.RECTANGLE, { x: 0.55, y: y + 0.55, w: 0.04, h: 0.42, fill: { color: "2C3E50" }, line: { color: "2C3E50" } });
}
stepCircle(s, st.n, 0.35, y + 0.08, st.col);
card(s, 0.88, y, 8.72, 0.75, "12293F");
s.addText(st.title, { x: 1.0, y: y + 0.04, w: 8.5, h: 0.28, fontSize: 11, bold: true, color: st.col, fontFace: "Calibri", margin: 0 });
s.addText(st.body, { x: 1.0, y: y + 0.33, w: 8.5, h: 0.38, fontSize: 9.5, color: C.offWhite, fontFace: "Calibri", margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 10 — KEY DRUGS TABLE
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Key Drugs Quick Reference", "Anticoagulants & Thrombolytics for PE");
const headers = ["Drug", "Class", "Dose", "Notes"];
const rows2 = [
["Rivaroxaban", "DOAC", "15 mg BID ×21d → 20 mg daily", "No monitoring; preferred low-risk"],
["Apixaban", "DOAC", "10 mg BID ×7d → 5 mg BID", "Preferred in cancer, elderly, CKD"],
["Enoxaparin", "LMWH", "1 mg/kg SC BID", "Avoid if CrCl <30 mL/min"],
["UFH", "Heparin", "80 u/kg IV bolus → 18 u/kg/hr infusion", "Use if surgery or thrombolysis planned; monitor aPTT"],
["Alteplase (tPA)", "Thrombolytic", "100 mg IV over 2 hours", "Systemic; high bleeding risk; ICU setting only"],
["Fondaparinux", "Anti-Xa", "5–10 mg SC daily (weight-based)", "HIT patients; renal caution"],
["Warfarin", "VKA", "Start 5 mg daily; target INR 2–3", "Overlap LMWH ≥5 days; slow onset"],
];
const colW2 = [1.7, 1.3, 3.5, 3.15];
const hdrColors = [C.crimson, "8E44AD", "2980B9", "16A085"];
let cx = 0.35;
headers.forEach((h, i) => {
s.addShape(pres.shapes.RECTANGLE, { x: cx, y: 1.15, w: colW2[i], h: 0.38, fill: { color: hdrColors[i] }, line: { color: "0A1628", pt: 0.5 } });
s.addText(h, { x: cx + 0.05, y: 1.15, w: colW2[i] - 0.1, h: 0.38, fontSize: 11, bold: true, color: C.white, valign: "middle", fontFace: "Calibri", margin: 0 });
cx += colW2[i];
});
rows2.forEach((row, ri) => {
let cx2 = 0.35;
const bg = ri % 2 === 0 ? C.cardBg : "0D2137";
row.forEach((cell, ci) => {
s.addShape(pres.shapes.RECTANGLE, { x: cx2, y: 1.55 + ri * 0.53, w: colW2[ci], h: 0.5, fill: { color: bg }, line: { color: "0A1628", pt: 0.5 } });
s.addText(cell, {
x: cx2 + 0.05, y: 1.55 + ri * 0.53, w: colW2[ci] - 0.1, h: 0.5,
fontSize: ci === 0 ? 10.5 : 9.5,
bold: ci === 0, color: ci === 0 ? C.teal : C.offWhite,
valign: "middle", fontFace: "Calibri", margin: 0
});
cx2 += colW2[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 11 — CATHETER-BASED INTERVENTIONS
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Catheter-Based Interventions", "Between Medical Rx and Surgery");
const opts = [
{
n: "01",
title: "Systemic Thrombolysis",
col: C.crimson,
desc: "Alteplase 100 mg IV over 2 hrs\nGiven systemically (IV)\nFastest — but highest bleeding risk\nFor massive PE without contraindications",
when: "Massive PE, no surgical access"
},
{
n: "02",
title: "Catheter-Directed Thrombolysis (CDT)",
col: "8E44AD",
desc: "Catheter placed directly into pulmonary artery\nLow-dose tPA infused locally over 12–24 hrs\nLower bleeding risk than systemic\nRequires IR/cath lab",
when: "Intermediate-high risk or failed systemic"
},
{
n: "03",
title: "Catheter Aspiration / CATR",
col: "2980B9",
desc: "Mechanical suction device removes clot\nNo or minimal thrombolytics needed\nMajor bleeding rate ~5%\nUltrasound-accelerated (EKOS) variant available",
when: "Thrombolysis contraindicated"
},
];
opts.forEach((o, i) => {
const x = 0.25 + i * 3.25;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 1.1, w: 0.45, h: 0.45,
fill: { color: o.col }, line: { color: o.col }, rectRadius: 0.1
});
s.addText(o.n, { x, y: 1.1, w: 0.45, h: 0.45, fontSize: 13, bold: true, color: C.white, align: "center", valign: "middle", fontFace: "Calibri", margin: 0 });
s.addText(o.title, { x: x + 0.52, y: 1.12, w: 2.55, h: 0.42, fontSize: 11, bold: true, color: o.col, fontFace: "Calibri", valign: "middle", margin: 0 });
card(s, x, 1.65, 3.1, 2.6, C.cardBg);
s.addText(o.desc, { x: x + 0.1, y: 1.72, w: 2.9, h: 2.45, fontSize: 10, color: C.offWhite, fontFace: "Calibri", valign: "top", margin: 4 });
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 4.35, w: 3.1, h: 0.55,
fill: { color: "1E2D3D" }, line: { color: o.col, pt: 1 }, rectRadius: 0.08
});
s.addText([{ text: "When: ", options: { bold: true, color: o.col } }, { text: o.when, options: { color: C.offWhite } }], {
x: x + 0.08, y: 4.35, w: 2.94, h: 0.55, fontSize: 10, fontFace: "Calibri", valign: "middle", margin: 4
});
});
// PERT note
s.addShape(pres.shapes.RECTANGLE, {
x: 0.35, y: 5.0, w: 9.3, h: 0.45,
fill: { color: "1E2D3D" }, line: { color: C.teal, pt: 1 }
});
s.addText("💡 PERT (Pulmonary Embolism Response Team): Multidisciplinary team (pulm, cardiology, IR, surgery) activated for intermediate/high-risk PE to guide escalation decisions", {
x: 0.45, y: 5.0, w: 9.1, h: 0.45, fontSize: 9.5, color: C.teal, italic: true, fontFace: "Calibri", valign: "middle", margin: 4
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 12 — SURGICAL EMBOLECTOMY: INDICATIONS
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Surgical Embolectomy — Indications", "When Is Surgery Required?");
// Historical note
card(s, 0.35, 1.12, 9.3, 0.6, "1A1A2E");
s.addText([
{ text: "History: ", options: { bold: true, color: C.teal } },
{ text: "Trendelenburg proposed direct thrombus removal (1908). First successful surgery by Kirschner (1924). Cooley reported first successful case using cardiopulmonary bypass (CPB) in 1961. — Sabiston Textbook of Surgery", options: { color: C.lightGray, italic: true } }
], { x: 0.45, y: 1.12, w: 9.1, h: 0.6, fontSize: 9.5, fontFace: "Calibri", valign: "middle", margin: 5 });
// Indications
const inds = [
{ label: "AHA 2011 Guideline", color: C.crimson, items: ["Massive PE + contraindications to fibrinolysis", "Massive PE + hemodynamically unstable after fibrinolysis", "Submassive PE with poor prognosis signs:", " → New hemodynamic instability", " → Worsening respiratory failure", " → Severe RV dysfunction", " → Major myocardial necrosis"] },
{ label: "ESC 2019 Guideline", color: "2980B9", items: ["High-risk PE + fibrinolysis contraindicated", "Ineffective thrombolysis with clinical deterioration", "Intermediate-high-risk PE + hemodynamic deterioration on anticoagulation", "Coexisting RA / RV thrombus (→ increased death risk)", "RV overload with risk of further thrombus migration"] },
];
inds.forEach((ind, i) => {
const x = 0.35 + i * 4.8;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x, y: 1.85, w: 4.6, h: 0.38, fill: { color: ind.color }, line: { color: ind.color }, rectRadius: 0.08 });
s.addText(ind.label, { x, y: 1.85, w: 4.6, h: 0.38, fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle", fontFace: "Calibri", margin: 0 });
card(s, x, 2.28, 4.6, 2.95, C.cardBg);
const rows = ind.items.map((item, idx) => ({
text: item,
options: { bullet: !item.startsWith(" →"), breakLine: idx < ind.items.length - 1, color: item.startsWith(" →") ? C.gold : C.offWhite, fontSize: 10, fontFace: "Calibri" }
}));
s.addText(rows, { x: x + 0.1, y: 2.35, w: 4.42, h: 2.8, valign: "top", margin: 5 });
});
s.addShape(pres.shapes.RECTANGLE, { x: 0.35, y: 5.3, w: 9.3, h: 0.22, fill: { color: "1E2D3D" }, line: { color: C.gold, pt: 1 } });
s.addText("⚠ Note: Surgical embolectomy is NOT indicated for small low-risk PE — reserved for life-threatening massive/high-risk cases.", {
x: 0.45, y: 5.3, w: 9.1, h: 0.22, fontSize: 9, color: C.gold, italic: true, fontFace: "Calibri", valign: "middle", margin: 0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 13 — SURGICAL STEPS (PART 1: Setup → CPB)
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Surgical Embolectomy — Steps 1–5", "Patient Prep → Cardiopulmonary Bypass");
const steps = [
{ n: 1, title: "Patient Preparation & Anesthesia", body: "General anesthesia · Arterial line, central venous access, Foley catheter · TEE monitoring for RV function · Full systemic heparinization", col: C.teal },
{ n: 2, title: "Median Sternotomy — Incision", body: "Vertical midline incision from sternal notch to xiphoid · Sternum divided with oscillating saw · Sternal retractor placed for exposure", col: C.crimson },
{ n: 3, title: "Cannulation for CPB", body: "Cannulate ascending aorta (arterial return) · Cannulate BOTH venae cavae: superior (SVC) and inferior (IVC) for venous drainage · Initiate cardiopulmonary bypass (CPB)", col: "8E44AD" },
{ n: 4, title: "Cardiac Management During Bypass", body: "Usually performed WITHOUT aortic cross-clamping (beating/fibrillating heart)\nCross-clamp + cold cardioplegia ONLY if: right heart thrombi present, thrombus straddles foramen ovale", col: "E67E22" },
{ n: 5, title: "Opening the Pulmonary Artery", body: "Main pulmonary artery opened 1–2 cm downstream from the pulmonary valve · Incision extended into proximal LEFT pulmonary artery", col: "2980B9" },
];
steps.forEach((st, i) => {
const y = 1.1 + i * 0.85;
if (i < steps.length - 1) {
s.addShape(pres.shapes.RECTANGLE, { x: 0.55, y: y + 0.55, w: 0.04, h: 0.42, fill: { color: "2C3E50" }, line: { color: "2C3E50" } });
}
stepCircle(s, st.n, 0.35, y + 0.08, st.col);
card(s, 0.88, y, 8.72, 0.75, "12293F");
s.addText(st.title, { x: 1.0, y: y + 0.04, w: 8.5, h: 0.28, fontSize: 11, bold: true, color: st.col, fontFace: "Calibri", margin: 0 });
s.addText(st.body, { x: 1.0, y: y + 0.33, w: 8.5, h: 0.38, fontSize: 9.5, color: C.offWhite, fontFace: "Calibri", margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 14 — SURGICAL STEPS (PART 2: Clot Removal → Closure)
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Surgical Embolectomy — Steps 6–9", "Clot Removal → Closure → Post-Op Care");
const steps = [
{ n: 6, title: "Clot Removal (Core Step)", body: "Forceps + suction catheters remove clots: Left PA → behind aorta → Right PA (between aorta & SVC if needed) · In acute PE: soft, red, rod-shaped thrombi · Even partial removal of large central clots = significant hemodynamic benefit · Fogarty balloon rarely used (vessel injury risk); choledochoscope-guided technique reported", col: C.crimson },
{ n: 7, title: "Check for Chronic PE (Acute-on-Chronic)", body: "If CTEPH (chronic thromboembolic PH) is found, conversion to pulmonary thromboendarterectomy (PTE/PEA) is required — much more complex, requires specialist center", col: C.gold },
{ n: 8, title: "Closure", body: "Pulmonary arteriotomy closed with suture · CPB weaned gradually as heart recovers · Sternum closed with sternal wires · Skin closed in layers · Drains placed", col: "16A085" },
{ n: 9, title: "Post-Operative ICU Care", body: "Admit to ICU · Continue UFH → transition to long-term anticoagulation (DOAC or warfarin) · Echocardiography to monitor RV recovery · Watch for: reperfusion injury, bleeding, arrhythmias, RV failure", col: "2980B9" },
];
steps.forEach((st, i) => {
const y = 1.1 + i * 1.05;
if (i < steps.length - 1) {
s.addShape(pres.shapes.RECTANGLE, { x: 0.55, y: y + 0.68, w: 0.04, h: 0.52, fill: { color: "2C3E50" }, line: { color: "2C3E50" } });
}
stepCircle(s, st.n, 0.35, y + 0.1, st.col);
card(s, 0.88, y, 8.72, 0.92, "12293F");
s.addText(st.title, { x: 1.0, y: y + 0.05, w: 8.5, h: 0.28, fontSize: 11, bold: true, color: st.col, fontFace: "Calibri", margin: 0 });
s.addText(st.body, { x: 1.0, y: y + 0.35, w: 8.5, h: 0.53, fontSize: 9.5, color: C.offWhite, fontFace: "Calibri", margin: 0 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 15 — TREATMENT SUMMARY TABLE
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Treatment Summary — At a Glance", "By Risk Category");
const tRows = [
{ category: "Small / Low-Risk PE", first: "DOAC anticoagulation", second: "—", surgery: "❌ No", mort: "<3%", col: "117A65" },
{ category: "Intermediate-Low Risk", first: "Heparin + monitoring", second: "CDT (selective)", surgery: "Rarely", mort: "3–8%", col: C.gold },
{ category: "Intermediate-High Risk", first: "Heparin + PERT", second: "CDT or systemic tPA", surgery: "If deteriorates", mort: "8–15%", col: "E67E22" },
{ category: "Massive / High-Risk PE", first: "UFH IV stat", second: "Systemic tPA (alteplase)", surgery: "✅ Yes (if tPA fails)", mort: "15–50%", col: C.crimson },
];
const cols3 = ["PE Category", "1st Line Rx", "2nd Line Rx", "Surgery?", "Mortality"];
const colW3 = [2.2, 2.1, 2.2, 1.8, 1.35];
const hdrC3 = ["0A3D62", "117A65", "8E44AD", C.crimson, "2C3E50"];
let cx3 = 0.2;
cols3.forEach((h, i) => {
s.addShape(pres.shapes.RECTANGLE, { x: cx3, y: 1.15, w: colW3[i], h: 0.4, fill: { color: hdrC3[i] }, line: { color: "0A1628", pt: 0.5 } });
s.addText(h, { x: cx3 + 0.05, y: 1.15, w: colW3[i] - 0.1, h: 0.4, fontSize: 10.5, bold: true, color: C.white, valign: "middle", fontFace: "Calibri", margin: 0, align: "center" });
cx3 += colW3[i];
});
tRows.forEach((row, ri) => {
const y = 1.58 + ri * 0.82;
const cells = [row.category, row.first, row.second, row.surgery, row.mort];
let cx4 = 0.2;
cells.forEach((cell, ci) => {
const bg = ci === 0 ? row.col : (ri % 2 === 0 ? C.cardBg : "0D2137");
s.addShape(pres.shapes.RECTANGLE, { x: cx4, y, w: colW3[ci], h: 0.76, fill: { color: bg }, line: { color: "0A1628", pt: 0.5 } });
s.addText(cell, {
x: cx4 + 0.05, y, w: colW3[ci] - 0.1, h: 0.76,
fontSize: ci === 0 ? 10.5 : 10,
bold: ci === 0,
color: ci === 0 ? C.white : (cell.includes("✅") ? C.teal : (cell.includes("❌") ? C.lightGray : C.offWhite)),
valign: "middle", fontFace: "Calibri", margin: 0, align: "center"
});
cx4 += colW3[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 16 — PREVENTION & LONG-TERM MANAGEMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentBg(s);
addSideAccent(s);
slideTitle(s, "Prevention & Long-Term Management", "Post-PE Follow-Up & VTE Prophylaxis");
const cols4 = [
{
title: "🛡 VTE Prevention",
col: "117A65",
items: ["Early mobilization post-surgery", "Compression stockings / pneumatic compression devices", "LMWH prophylaxis in high-risk surgical patients", "Hydration, avoid prolonged immobility", "Heparin prophylaxis in pregnancy with prior PE/DVT", "IVC filter only if anticoagulation contraindicated"]
},
{
title: "📋 Long-Term Anticoagulation",
col: "2980B9",
items: ["Provoked (reversible): 3 months", "Unprovoked: ≥3 months; reassess risk of recurrence", "Cancer-associated: indefinite (DOAC or LMWH)", "High recurrence risk → extended anticoagulation", "Reassess annually for bleeding vs clot risk balance"]
},
{
title: "🔍 Follow-Up Monitoring",
col: "8E44AD",
items: ["6-week and 3-month outpatient review", "Echo at 3 months to assess RV recovery", "V/Q scan if PH symptoms persist → rule out CTEPH", "Screen for occult cancer (new unprovoked PE)", "Thrombophilia testing (after stopping anticoagulants)", "Post-PE syndrome: fatigue, dyspnea — may persist months"]
}
];
cols4.forEach((col, i) => {
const x = 0.25 + i * 3.22;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, { x, y: 1.1, w: 3.08, h: 0.42, fill: { color: col.col }, line: { color: col.col }, rectRadius: 0.08 });
s.addText(col.title, { x, y: 1.1, w: 3.08, h: 0.42, fontSize: 10.5, bold: true, color: C.white, align: "center", valign: "middle", fontFace: "Calibri", margin: 0 });
card(s, x, 1.57, 3.08, 3.85, C.cardBg);
const rows = col.items.map((item, idx) => ({
text: item,
options: { bullet: true, breakLine: idx < col.items.length - 1, color: C.offWhite, fontSize: 10, fontFace: "Calibri" }
}));
s.addText(rows, { x: x + 0.1, y: 1.63, w: 2.9, h: 3.72, valign: "top", margin: 5 });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 17 — CLOSING / KEY TAKEAWAYS
// ═══════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.teal }, line: { color: C.teal } });
s.addShape(pres.shapes.RECTANGLE, { x: 0, y: 5.565, w: 10, h: 0.06, fill: { color: C.crimson }, line: { color: C.crimson } });
s.addText("Key Takeaways", {
x: 0.5, y: 0.2, w: 9, h: 0.55,
fontSize: 28, bold: true, color: C.white, fontFace: "Calibri", margin: 0
});
s.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 0.78, w: 2.5, h: 0.04, fill: { color: C.teal }, line: { color: C.teal } });
const takeaways = [
["1", "Small PE = low-risk; start DOAC anticoagulation immediately and consider outpatient management.", C.teal],
["2", "Always risk-stratify (hemodynamics + RV function + troponin) to guide treatment escalation.", C.gold],
["3", "Thrombolysis (systemic or CDT) bridges the gap between anticoagulation and surgery.", "8E44AD"],
["4", "Surgical embolectomy is for massive PE failing or contraindicating fibrinolysis — uses median sternotomy + CPB.", C.crimson],
["5", "Surgical steps: sternotomy → CPB → open pulmonary artery → forceps/suction clot removal → closure → ICU.", "2980B9"],
["6", "PERT teams and multidisciplinary care improve outcomes in complex cases.", "16A085"],
];
takeaways.forEach(([num, text, col], i) => {
const y = 1.0 + i * 0.7;
s.addShape(pres.shapes.ELLIPSE, { x: 0.4, y: y + 0.06, w: 0.35, h: 0.35, fill: { color: col }, line: { color: col } });
s.addText(num, { x: 0.4, y: y + 0.06, w: 0.35, h: 0.35, fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle", fontFace: "Calibri", margin: 0 });
s.addText(text, { x: 0.9, y, w: 8.7, h: 0.58, fontSize: 11, color: C.offWhite, fontFace: "Calibri", valign: "middle", margin: 0 });
});
s.addText("Sources: Sabiston Textbook of Surgery · Rosen's Emergency Medicine (10e) · Murray & Nadel's Textbook of Respiratory Medicine", {
x: 0.5, y: 5.32, w: 9, h: 0.2, fontSize: 7.5, color: "7F8C8D", italic: true, fontFace: "Calibri", margin: 0
});
}
// ─── WRITE FILE ────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/pulmonary-embolism-ppt/Pulmonary_Embolism_Complete.pptx" })
.then(() => console.log("✅ PPT created successfully!"))
.catch(err => console.error("❌ Error:", err));
cd /home/daytona/workspace/pulmonary-embolism-ppt && node create_ppt.js
node -e "const p = require('pptxgenjs'); const pr = new p(); console.log(Object.…
node -e "const p = require('pptxgenjs'); const pr = new p(); const keys = Object…
~/pulmonary-embolism-ppt/create_ppt.js
Successfully replaced 3 instance(s) of the string in '/home/daytona/workspace/pulmonary-embolism-ppt/create_ppt.js'
cd /home/daytona/workspace/pulmonary-embolism-ppt && node create_ppt.js
ls -lh /home/daytona/workspace/pulmonary-embolism-ppt/Pulmonary_Embolism_Complet…
Pulmonary Embolism Complete
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide |
| 2 | What is PE? (Definition + key facts) |
| 3 | Risk Factors - Virchow's Triad |
| 4 | Clinical Features (Symptoms & Signs) |
| 5 | Diagnostic Algorithm (5-step flowchart) |
| 6 | Revised Geneva Score table |
| 7 | ECG, Labs & Imaging Findings |
| 8 | Risk Stratification (Low / Intermediate / High) |
| 9 | Medical Treatment Step by Step |
| 10 | Key Drugs Quick Reference table |
| 11 | Catheter-Based Interventions (CDT, CATR, tPA) |
| 12 | Surgical Embolectomy - Indications (AHA + ESC guidelines) |
| 13 | Surgical Steps 1–5 (Prep → CPB → Open PA) |
| 14 | Surgical Steps 6–9 (Clot Removal → Closure → ICU) |
| 15 | Treatment Summary by Risk Category |
| 16 | Prevention & Long-Term Management |
| 17 | Key Takeaways |
Search for clinical images of pulmonary emboli on CTPA
pulmonary embolism CTPA CT pulmonary angiography clinical images filling defect
pulmonary embolism CTPA polo mint sign railway track sign site:pmc.ncbi.nlm.nih.gov

This is a classic example of a small / subsegmental PE - the most peripheral type, which is what "small clots in the lungs" looks like on imaging.



Per Radiopaedia: "The central filling defect from the thrombus is surrounded by a thin rim of contrast, which has been called the polo mint sign."

| Finding | Appearance | Significance |
|---|---|---|
| Filling defect | Dark/grey area in a contrast-filled bright white vessel | Core sign of PE - all subtypes |
| Polo Mint Sign | Dark central clot surrounded by ring of white contrast (axial view) | Acute central PE |
| Railway Track Sign | Two parallel lines of contrast flanking a central dark clot (longitudinal view) | Acute non-occlusive PE |
| Vessel cutoff sign | Abrupt termination of contrast in a vessel | Complete occlusion |
| Saddle embolus | Large clot straddling the pulmonary bifurcation | Massive/high-risk PE |
| Dilated RV | RV:LV ratio >1 on same axial cut | RV strain - bad prognosis |
| Pulmonary infarct | Peripheral wedge-shaped opacity (Hampton's hump) | Infarction from distal PE |
Technical requirement: CTPA must achieve contrast opacification of at least 210 Hounsfield units in the pulmonary arteries to reliably detect filling defects. - Clinical Imaging, Elsevier