I am second year resident of general medicine i have a presentation on pulmonary hypertension with venous and pulmonary thromboembolism kindly give me detailed description in ppt format with updated guidelines
"pulmonary hypertension" AND "guidelines"
"pulmonary embolism" AND "guidelines"
PMID: 41712677
2026 AHA ACC pulmonary embolism guideline key recommendations classification
PMID: 40044341
https://www.ahajournals.org/doi/10.1161/CIR.0000000000001415
pulmonary hypertension WHO classification groups pathophysiology
pulmonary embolism CT angiography diagnosis Wells score algorithm
deep vein thrombosis pathophysiology venous thromboembolism Virchow triad
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/ph-vte-ppt && ls /home/daytona/workspace/ph-vte-ppt
~/ph-vte-ppt/build_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE";
pres.title = "Pulmonary Hypertension, VTE & Pulmonary Embolism";
pres.author = "General Medicine Residency Presentation";
// ── COLOUR PALETTE ──────────────────────────────────────────────────────────
const C = {
bg: "0B1F3A", // deep navy (dominant)
bgAlt: "0E2A50", // slightly lighter navy
accent: "E94F3D", // strong red-orange (PE/clot accent)
gold: "F5A623", // amber/gold
teal: "3AB4BF", // teal (PH accent)
white: "FFFFFF",
light: "D6E4F0",
muted: "8DAFC4",
dark: "061225",
green: "2ECC71",
yellow: "F7DC6F",
orange: "E67E22",
red: "C0392B",
};
// ── HELPERS ──────────────────────────────────────────────────────────────────
function titleSlide(slide) {
slide.background = { color: C.dark };
// Top accent bar
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.12, fill:{color:C.accent} });
// Side bar
slide.addShape(pres.ShapeType.rect, { x:0, y:0.12, w:0.35, h:7.38, fill:{color:C.teal} });
}
function sectionBg(slide, color) {
slide.background = { color: color || C.bg };
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.1, fill:{color:C.accent} });
slide.addShape(pres.ShapeType.rect, { x:0, y:7.4, w:13.3, h:0.1, fill:{color:C.teal} });
}
function slideHeader(slide, title, subtitle) {
sectionBg(slide);
slide.addShape(pres.ShapeType.rect, { x:0, y:0.1, w:4.2, h:7.4, fill:{color:C.bgAlt} });
slide.addText(title, {
x:0.2, y:0.3, w:3.8, h:2.5,
fontSize:22, bold:true, color:C.white, fontFace:"Calibri",
align:"left", valign:"top", wrap:true
});
if (subtitle) {
slide.addText(subtitle, {
x:0.2, y:2.8, w:3.8, h:0.6,
fontSize:11, color:C.teal, fontFace:"Calibri", align:"left", italic:true
});
}
}
function addBullets(slide, items, x, y, w, h, fontSize, color, opts) {
const base = { fontFace:"Calibri", color: color||C.light, fontSize:fontSize||13 };
const textArr = items.map((item, i) => {
const isLast = i === items.length - 1;
if (typeof item === "object") {
return { text: item.text, options: { ...base, bullet:{indent:item.indent||0}, fontSize:item.size||fontSize||13, color:item.color||color||C.light, bold:item.bold||false, breakLine: !isLast } };
}
return { text: item, options: { ...base, bullet:true, breakLine: !isLast } };
});
slide.addText(textArr, { x, y, w, h, valign:"top", ...(opts||{}) });
}
function sectionDivider(pres, sectionNum, title, subtitle, color) {
const slide = pres.addSlide();
slide.background = { color: color || C.accent };
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.08, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:0, y:7.42, w:13.3, h:0.08, fill:{color:C.dark} });
slide.addText(`SECTION ${sectionNum}`, {
x:1, y:1.8, w:11.3, h:0.8,
fontSize:16, color:C.white, fontFace:"Calibri", align:"center", charSpacing:6, opacity:80
});
slide.addText(title, {
x:1, y:2.5, w:11.3, h:1.6,
fontSize:40, bold:true, color:C.white, fontFace:"Calibri", align:"center"
});
if (subtitle) {
slide.addText(subtitle, {
x:1, y:4.2, w:11.3, h:0.8,
fontSize:16, color:C.white, fontFace:"Calibri", align:"center", italic:true
});
}
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1: TITLE SLIDE
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
titleSlide(slide);
slide.addShape(pres.ShapeType.rect, { x:0.35, y:1.2, w:12.95, h:0.08, fill:{color:C.gold}, opacity:40 });
slide.addText("PULMONARY HYPERTENSION,", {
x:0.6, y:1.4, w:12.0, h:1.1,
fontSize:36, bold:true, color:C.white, fontFace:"Calibri", align:"left"
});
slide.addText("VENOUS THROMBOEMBOLISM", {
x:0.6, y:2.4, w:12.0, h:1.0,
fontSize:36, bold:true, color:C.teal, fontFace:"Calibri", align:"left"
});
slide.addText("& PULMONARY EMBOLISM", {
x:0.6, y:3.3, w:12.0, h:1.0,
fontSize:36, bold:true, color:C.gold, fontFace:"Calibri", align:"left"
});
slide.addShape(pres.ShapeType.rect, { x:0.35, y:4.3, w:8, h:0.04, fill:{color:C.muted} });
slide.addText([
{ text: "Updated with ", options:{color:C.muted} },
{ text: "2026 AHA/ACC Guideline", options:{color:C.gold, bold:true} },
{ text: " | ESC/ERS 2022 PH Guidelines", options:{color:C.muted} }
], { x:0.6, y:4.5, w:12.0, h:0.5, fontSize:13, fontFace:"Calibri" });
slide.addText("Residency Presentation — General Medicine | May 2026", {
x:0.6, y:5.2, w:12.0, h:0.4,
fontSize:12, color:C.muted, fontFace:"Calibri", italic:true
});
// Three coloured tags
const tags = [
{ label:"Pulmonary Hypertension", col:C.teal },
{ label:"Venous Thromboembolism", col:C.gold },
{ label:"Acute Pulmonary Embolism", col:C.accent },
];
tags.forEach((t,i) => {
slide.addShape(pres.ShapeType.rect, { x:0.6+i*4.1, y:6.1, w:3.8, h:0.5, fill:{color:t.col}, rounding:true });
slide.addText(t.label, { x:0.6+i*4.1, y:6.1, w:3.8, h:0.5, fontSize:11, color:C.dark, bold:true, fontFace:"Calibri", align:"center", valign:"middle" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2: AGENDA / OUTLINE
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
sectionBg(slide);
slide.addText("PRESENTATION OUTLINE", {
x:0.5, y:0.2, w:12.3, h:0.7,
fontSize:26, bold:true, color:C.white, fontFace:"Calibri", align:"center"
});
slide.addShape(pres.ShapeType.rect, { x:2.5, y:0.9, w:8.3, h:0.06, fill:{color:C.teal} });
const sections = [
{ num:"01", title:"Pulmonary Hypertension — Definition, Classification & Pathophysiology", col:C.teal },
{ num:"02", title:"PH — Clinical Features, Diagnosis & Investigations", col:C.teal },
{ num:"03", title:"PH — Management: PAH Targeted Therapy (ESC/ERS 2022)", col:C.teal },
{ num:"04", title:"Venous Thromboembolism (VTE) — DVT Pathophysiology & Diagnosis", col:C.gold },
{ num:"05", title:"Acute Pulmonary Embolism — Classification (2026 AHA/ACC)", col:C.accent },
{ num:"06", title:"PE — Diagnosis Algorithm & Risk Stratification", col:C.accent },
{ num:"07", title:"PE — Management & Advanced Interventions (2026 Guideline)", col:C.accent },
{ num:"08", title:"CTEPH — Chronic Thromboembolic PH (PH Group 4)", col:C.gold },
{ num:"09", title:"Long-Term Management, Follow-Up & Key Takeaways", col:C.green },
];
sections.forEach((s, i) => {
const row = Math.floor(i/3);
const col = i % 3;
const x = 0.4 + col * 4.2;
const y = 1.1 + row * 2.0;
slide.addShape(pres.ShapeType.rect, { x, y, w:4.0, h:1.7, fill:{color:C.bgAlt}, shadow:{type:"outer",color:"000000",opacity:0.3,blur:4,offset:2,angle:45} });
slide.addShape(pres.ShapeType.rect, { x, y, w:0.5, h:1.7, fill:{color:s.col} });
slide.addText(s.num, { x:x+0.07, y:y+0.05, w:0.36, h:0.5, fontSize:18, bold:true, color:C.dark, fontFace:"Calibri", align:"center" });
slide.addText(s.title, { x:x+0.6, y:y+0.1, w:3.3, h:1.5, fontSize:9.5, color:C.white, fontFace:"Calibri", valign:"middle", wrap:true });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SECTION 1 DIVIDER
// ══════════════════════════════════════════════════════════════════════════════
sectionDivider(pres, "01", "PULMONARY HYPERTENSION", "Definition · Classification · Pathophysiology", C.teal);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3: PH DEFINITION & UPDATED CRITERIA
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "PH Definition &\nUpdated Criteria", "ESC/ERS 2022 | World Symposium 2018");
slide.addText("UPDATED HAEMODYNAMIC DEFINITION", {
x:4.4, y:0.25, w:8.6, h:0.45,
fontSize:15, bold:true, color:C.gold, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.7, w:8.5, h:0.04, fill:{color:C.gold} });
// mPAP box
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.85, w:8.5, h:1.5, fill:{color:C.bgAlt} });
slide.addText("mPAP > 20 mmHg", {
x:4.5, y:0.9, w:8.3, h:0.55,
fontSize:22, bold:true, color:C.accent, fontFace:"Calibri"
});
slide.addText("(Previously >25 mmHg — threshold LOWERED by 6th World Symposium 2018, confirmed ESC/ERS 2022)", {
x:4.5, y:1.4, w:8.3, h:0.7,
fontSize:10, color:C.muted, fontFace:"Calibri", italic:true, wrap:true
});
// Subcategories
const cats = [
{ label:"Pre-capillary PH", criteria:"mPAP >20 + PAWP ≤15 + PVR ≥3 WU", col:C.teal, groups:"Groups 1, 3, 4, 5" },
{ label:"Post-capillary PH (IpcPH)", criteria:"mPAP >20 + PAWP >15 + PVR <3 WU", col:C.orange, groups:"Group 2" },
{ label:"Combined Pre+Post-capillary (CpcPH)", criteria:"mPAP >20 + PAWP >15 + PVR ≥3 WU", col:C.accent, groups:"Groups 2, 5" },
];
cats.forEach((c, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.87, y:2.5, w:2.7, h:2.6, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.87, y:2.5, w:2.7, h:0.45, fill:{color:c.col} });
slide.addText(c.label, { x:4.4+i*2.87, y:2.52, w:2.7, h:0.4, fontSize:9.5, bold:true, color:C.white, fontFace:"Calibri", align:"center" });
slide.addText(c.criteria, { x:4.5+i*2.87, y:3.1, w:2.5, h:1.0, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
slide.addText(c.groups, { x:4.5+i*2.87, y:4.7, w:2.5, h:0.3, fontSize:9, color:c.col, bold:true, fontFace:"Calibri" });
});
slide.addText("RHC = gold standard for diagnosis | PVR: Pulmonary Vascular Resistance (Wood Units) | PAWP: Pulmonary Artery Wedge Pressure", {
x:4.4, y:5.3, w:8.7, h:0.5,
fontSize:8.5, color:C.muted, fontFace:"Calibri", italic:true
});
addBullets(slide, [
"Exercise PH: mPAP/CO slope >3 WU during exercise",
"Borderline PH: mPAP 21–24 mmHg — watch and investigate",
"Symptoms: dyspnea on exertion, fatigue, syncope, chest pain",
"Physical signs: loud P2, RV heave, TR murmur, JVD"
], 0.2, 3.5, 4.0, 3.5, 11, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4: WHO CLASSIFICATION (5 GROUPS)
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "WHO Clinical\nClassification\nof PH", "5 Groups — ESC/ERS 2022");
slide.addText("5 WHO GROUPS OF PULMONARY HYPERTENSION", {
x:4.4, y:0.2, w:8.6, h:0.5,
fontSize:15, bold:true, color:C.white, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.7, w:8.5, h:0.04, fill:{color:C.accent} });
const groups = [
{ num:"1", name:"PAH — Pulmonary Arterial Hypertension", col:C.teal, detail:"Idiopathic, heritable (BMPR2), drug/toxin-induced, CTD-PAH, HIV, portal HTN, CHD", key:"Pre-capillary | PVR ≥3 WU | PAWP ≤15" },
{ num:"2", name:"PH due to Left Heart Disease", col:C.gold, detail:"HFpEF, HFrEF, valvular disease (mitral/aortic), congenital LV inflow obstruction", key:"Post-capillary | Most common form of PH" },
{ num:"3", name:"PH due to Lung Disease / Hypoxia", col:C.orange, detail:"COPD, ILD, OSA, hypoventilation, high-altitude. Often mild-moderate PH", key:"Pre-capillary | Treat underlying lung disease" },
{ num:"4", name:"CTEPH — Chronic Thromboembolic PH", col:C.accent, detail:"Organised thrombi after PE → surgical cure possible (PTE). BPA for inoperable", key:"Pre-capillary | ONLY surgically curable form" },
{ num:"5", name:"PH with Unclear / Multifactorial Mechanisms", col:C.muted, detail:"Haematologic: CML, splenectomy. Systemic: sarcoid, Langerhans, NF-1. Metabolic", key:"Mixed / unclear mechanisms" },
];
groups.forEach((g, i) => {
const y = 0.85 + i * 1.22;
slide.addShape(pres.ShapeType.rect, { x:4.4, y, w:0.55, h:1.1, fill:{color:g.col} });
slide.addText(g.num, { x:4.4, y, w:0.55, h:1.1, fontSize:22, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:4.95, y, w:8.0, h:1.1, fill:{color:C.bgAlt} });
slide.addText(g.name, { x:5.05, y:y+0.05, w:7.8, h:0.38, fontSize:12, bold:true, color:C.white, fontFace:"Calibri" });
slide.addText(g.detail, { x:5.05, y:y+0.42, w:5.8, h:0.45, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
slide.addText(g.key, { x:11.0, y:y+0.42, w:2.0, h:0.5, fontSize:8, color:g.col, fontFace:"Calibri", italic:true, wrap:true });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5: PH PATHOPHYSIOLOGY
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "Pathophysiology\nof PAH", "Vascular Remodelling & RV Failure");
slide.addText("THREE KEY PATHWAYS IN PULMONARY VASCULAR REMODELLING", {
x:4.4, y:0.2, w:8.6, h:0.45,
fontSize:13, bold:true, color:C.gold, fontFace:"Calibri"
});
const pathways = [
{ name:"NO-cGMP Pathway ↓", detail:"Reduced eNOS → ↓ NO → ↓ cGMP → vasoconstriction\nTherapy: PDE5i (sildenafil, tadalafil), sGC stimulators (riociguat)", col:C.teal },
{ name:"Prostacyclin Pathway ↓", detail:"↓ prostacyclin synthase → ↓ IP receptor → vasoconstriction\nTherapy: PGI2 analogues (epoprostenol, treprostinil), IP agonists (selexipag)", col:C.gold },
{ name:"Endothelin-1 Pathway ↑", detail:"↑ ET-1 → ETA & ETB receptor → vasoconstriction + proliferation\nTherapy: ERAs (ambrisentan, bosentan, macitentan)", col:C.accent },
];
pathways.forEach((p, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.95, y:0.75, w:2.8, h:2.8, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.95, y:0.75, w:2.8, h:0.5, fill:{color:p.col} });
slide.addText(p.name, { x:4.4+i*2.95, y:0.76, w:2.8, h:0.48, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", align:"center" });
slide.addText(p.detail, { x:4.5+i*2.95, y:1.35, w:2.6, h:2.0, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
slide.addText("RV REMODELLING CASCADE", {
x:4.4, y:3.75, w:8.6, h:0.4,
fontSize:12, bold:true, color:C.teal, fontFace:"Calibri"
});
const cascade = ["↑ Pulmonary Vascular Resistance", "→ RV Pressure Overload", "→ RV Hypertrophy (adaptive)", "→ RV Dilatation + Dysfunction", "→ Ventricular Interdependence (D-septum)", "→ LV Compression + ↓ CO", "→ Death"];
const cascadeX = [4.4, 5.7, 7.0, 8.3, 9.6, 10.9, 12.2];
cascade.forEach((c, i) => {
slide.addShape(pres.ShapeType.rect, { x:cascadeX[i], y:4.2, w:1.15, h:0.8, fill:{color: i===6?C.accent:C.bgAlt} });
slide.addText(c, { x:cascadeX[i]+0.05, y:4.2, w:1.05, h:0.8, fontSize:7.5, color:i===6?C.white:C.light, fontFace:"Calibri", align:"center", valign:"middle", wrap:true });
});
addBullets(slide, [
"BMPR2 mutation: 70% hereditary PAH",
"Loss of anti-proliferative BMP signalling",
"Pro-apoptotic signals → endothelial injury",
"Medial hypertrophy + intimal fibrosis",
"In-situ thrombosis common in PAH",
"Plexiform lesions: pathognomonic",
"Inflammation key in CTD-PAH, HIV-PAH"
], 0.2, 0.8, 3.9, 4.5, 10.5, C.light);
slide.addText("New mechanism: Sotatercept (activin receptor ligand trap) targets TGF-β/BMP imbalance — FDA approved 2024 for PAH", {
x:4.4, y:5.2, w:8.7, h:0.6,
fontSize:9.5, color:C.gold, fontFace:"Calibri", italic:true, wrap:true
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6: PH — CLINICAL FEATURES & INVESTIGATIONS
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "PH — Clinical\nFeatures &\nInvestigations", "Diagnosis Algorithm");
slide.addText("SYMPTOMS & SIGNS", {
x:4.4, y:0.2, w:4.0, h:0.4,
fontSize:13, bold:true, color:C.gold, fontFace:"Calibri"
});
addBullets(slide, [
{ text:"Dyspnoea on exertion (earliest)", bold:true },
"Fatigue, lethargy",
"Syncope/pre-syncope (exertional)",
"Chest pain (RV ischaemia)",
{ text:"Signs: Loud P2, RV heave, JVD", bold:false },
"TR murmur, peripheral oedema",
"Hepatomegaly, ascites (late)",
"Raynaud's (CTD-PAH)"
], 4.4, 0.65, 3.8, 3.5, 10.5, C.light);
slide.addText("WHO FUNCTIONAL CLASS (FC)", {
x:8.5, y:0.2, w:4.5, h:0.4,
fontSize:13, bold:true, color:C.teal, fontFace:"Calibri"
});
const fcRows = [
{ fc:"I", desc:"No symptoms with ordinary activity", col:C.green },
{ fc:"II", desc:"Slight limitation — comfortable at rest; symptoms with ordinary activity", col:C.yellow },
{ fc:"III", desc:"Marked limitation — comfortable at rest; symptoms with less than ordinary activity", col:C.orange },
{ fc:"IV", desc:"Symptoms at rest; unable to carry on any physical activity", col:C.red },
];
fcRows.forEach((r, i) => {
slide.addShape(pres.ShapeType.rect, { x:8.5, y:0.65+i*0.95, w:0.55, h:0.85, fill:{color:r.col} });
slide.addText(`FC ${r.fc}`, { x:8.5, y:0.65+i*0.95, w:0.55, h:0.85, fontSize:10, bold:true, color:C.dark, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:9.05, y:0.65+i*0.95, w:4.0, h:0.85, fill:{color:C.bgAlt} });
slide.addText(r.desc, { x:9.1, y:0.68+i*0.95, w:3.9, h:0.8, fontSize:9, color:C.light, fontFace:"Calibri", valign:"middle", wrap:true });
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:4.3, w:8.6, h:0.04, fill:{color:C.accent} });
slide.addText("INVESTIGATIONS", {
x:4.4, y:4.4, w:8.6, h:0.4,
fontSize:13, bold:true, color:C.accent, fontFace:"Calibri"
});
const investCols = [
{ title:"Screening", items:["ECG: RVH, RAD, P-pulmonale, RBBB","Echo: sPAP >36 mmHg = PH likely","6MWD (6-min walk distance)","BNP/NT-proBNP (prognosis)","CXR: PA enlargement, pruning"] },
{ title:"Confirm PH", items:["V/Q scan (CTEPH screen)","CTPA: PE, parenchymal disease","HRCT chest: ILD","PFTs + DLCO","HIV, LFT, TFT, ANA, anti-SCL70"] },
{ title:"Definitive (RHC)", items:["mPAP, PAWP, PVR, CO","Vasoreactivity test (iNO/adenosine)","Response: ↓mPAP ≥10 to <40 mmHg","Indicates CCB responders (~10%)","Required before starting PAH therapy"] },
];
investCols.forEach((col, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:4.9, w:2.75, h:2.45, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:4.9, w:2.75, h:0.45, fill:{color:C.bgAlt} });
slide.addText(col.title, { x:4.4+i*2.9, y:4.9, w:2.75, h:0.45, fontSize:11, bold:true, color:C.teal, fontFace:"Calibri", align:"center" });
const textArr = col.items.map((item, idx) => ({
text: item,
options: { color:C.light, fontSize:9, bullet:true, fontFace:"Calibri", breakLine: idx < col.items.length-1 }
}));
slide.addText(textArr, { x:4.5+i*2.9, y:5.4, w:2.55, h:1.9, valign:"top" });
});
addBullets(slide, [
{ text:"Echo criteria for PH:", bold:true },
"TRV >3.4 m/s = high prob",
"TRV 2.9–3.4 = intermediate",
"TRV <2.9 + other signs = intermediate",
{ text:"Other echo signs:", bold:true },
"RV:LV ratio >1.0",
"TAPSE <17 mm (RV dysfunction)",
"IVC dilation > 2.1 cm"
], 0.2, 4.35, 3.9, 3.0, 10, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7: PAH MANAGEMENT — ESC/ERS 2022
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "PAH Management\n(Group 1)\nESC/ERS 2022", "Risk-Stratified Approach");
slide.addText("RISK STRATIFICATION AT DIAGNOSIS (3-STRATA MODEL)", {
x:4.4, y:0.2, w:8.7, h:0.4,
fontSize:12, bold:true, color:C.gold, fontFace:"Calibri"
});
const risk = [
{ level:"LOW RISK", desc:"FC I-II | 6MWD >440m | BNP <50 | No RVF | TAPSE >20 | CI >2.5", col:C.green },
{ level:"INTERMEDIATE RISK", desc:"FC III | 6MWD 165–440m | BNP 50–300 | RA area >18 cm² | TAPSE 12–20", col:C.yellow },
{ level:"HIGH RISK", desc:"FC IV | 6MWD <165m | BNP >300 | Pericardial effusion | TAPSE <12 | CI <2.0", col:C.red },
];
risk.forEach((r, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:0.7, w:2.75, h:1.9, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:0.7, w:2.75, h:0.45, fill:{color:r.col} });
slide.addText(r.level, { x:4.4+i*2.9, y:0.7, w:2.75, h:0.45, fontSize:10, bold:true, color:C.dark, fontFace:"Calibri", align:"center" });
slide.addText(r.desc, { x:4.5+i*2.9, y:1.2, w:2.55, h:1.3, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:2.75, w:8.6, h:0.04, fill:{color:C.teal} });
slide.addText("INITIAL COMBINATION THERAPY (ESC/ERS 2022 — GRADE I, Level A)", {
x:4.4, y:2.85, w:8.7, h:0.45,
fontSize:12, bold:true, color:C.teal, fontFace:"Calibri"
});
const therapyRows = [
{ title:"Low/Intermediate Risk (de novo)", detail:"ERA + PDE5i (e.g. AMBITION trial: ambrisentan + tadalafil — Class I A)", col:C.teal },
{ title:"High Risk", detail:"ERA + PDE5i + SC/IV prostanoid (triple therapy); consider epoprostenol (Class I A)", col:C.accent },
{ title:"Vasoreactive (CCB response +ve)", detail:"Calcium channel blockers first (nifedipine, diltiazem, amlodipine) — only ~10% eligible", col:C.gold },
{ title:"SOTATERCEPT (2024)", detail:"Activin receptor ligand trap — add-on for PAH; FDA/EMA approved; STELLAR trial showed ↑ 6MWD, improved FC", col:C.green },
];
therapyRows.forEach((t, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4, y:3.4+i*0.9, w:0.2, h:0.8, fill:{color:t.col} });
slide.addShape(pres.ShapeType.rect, { x:4.6, y:3.4+i*0.9, w:8.3, h:0.8, fill:{color:C.bgAlt} });
slide.addText(t.title, { x:4.7, y:3.42+i*0.9, w:3.5, h:0.36, fontSize:10, bold:true, color:t.col, fontFace:"Calibri" });
slide.addText(t.detail, { x:4.7, y:3.77+i*0.9, w:8.1, h:0.38, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
addBullets(slide, [
{ text:"General measures:", bold:true },
"Avoid pregnancy (teratogenic drugs)",
"Supervised exercise/rehab",
"Diuretics for fluid overload",
"Oral anticoagulation: consider in IPAH",
"O2 if SpO2 <91% at rest",
{ text:"Escalation / Rescue:", bold:true },
"IV epoprostenol (most potent)",
"Lung transplantation (bilateral)",
"Balloon atrial septostomy (palliation)"
], 0.2, 0.8, 3.9, 6.5, 10, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SECTION 2 DIVIDER
// ══════════════════════════════════════════════════════════════════════════════
sectionDivider(pres, "02", "VENOUS THROMBOEMBOLISM", "DVT · Pathophysiology · Diagnosis", C.gold);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8: VTE — PATHOPHYSIOLOGY & RISK FACTORS
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "VTE\nPathophysiology\n& Risk Factors", "Virchow's Triad");
slide.addText("VIRCHOW'S TRIAD — THE THREE PILLARS OF THROMBOSIS", {
x:4.4, y:0.2, w:8.7, h:0.4,
fontSize:12, bold:true, color:C.gold, fontFace:"Calibri"
});
const triad = [
{ name:"Venous Stasis", examples:"Immobility, long-haul travel, paralysis, CCF, obesity, varicose veins, pregnancy", col:C.teal, icon:"≈" },
{ name:"Endothelial Injury", examples:"Surgery, trauma, IV catheters, vasculitis, hyperhomocysteinaemia, anticardiolipin Ab", col:C.accent, icon:"✕" },
{ name:"Hypercoagulability", examples:"Factor V Leiden, Protein C/S deficiency, antithrombin deficiency, OCP, malignancy, APS, pregnancy", col:C.gold, icon:"↑" },
];
triad.forEach((t, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.95, y:0.7, w:2.8, h:3.0, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.95, y:0.7, w:2.8, h:0.55, fill:{color:t.col} });
slide.addText(`${t.icon} ${t.name}`, { x:4.4+i*2.95, y:0.7, w:2.8, h:0.55, fontSize:12, bold:true, color:C.white, fontFace:"Calibri", align:"center" });
slide.addText(t.examples, { x:4.5+i*2.95, y:1.35, w:2.6, h:2.2, fontSize:9.5, color:C.light, fontFace:"Calibri", wrap:true });
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:3.85, w:8.6, h:0.04, fill:{color:C.accent} });
slide.addText("DVT — CLINICAL FEATURES & DIAGNOSIS", {
x:4.4, y:3.95, w:8.6, h:0.4,
fontSize:12, bold:true, color:C.accent, fontFace:"Calibri"
});
const dvtCols = [
{ title:"Clinical Signs", items:["Calf pain, tenderness","Swelling, erythema","Warmth","Pitting oedema","Homans sign (unreliable)","Phlegmasia cerulea dolens (massive DVT)"] },
{ title:"Pre-test: Wells DVT Score", items:["Active cancer (+1)","Paralysis/immobility (+1)","Bedridden >3d / major surgery (+1)","Localised DVT tenderness (+1)","Entire leg swollen (+1)","Calf swelling ≥3cm (+1)","Collateral veins (+1)","Pitting oedema (+1)","Alt Dx as likely as DVT (−2)","≥2: High prob | 1: Moderate | <1: Low"] },
{ title:"Investigations", items:["D-dimer (sensitive, not specific)","Compression duplex USS (1st line)","CT venography (pelvic/abdominal)","MRI venography (pregnancy)","Negative D-dimer + low Wells = excludes DVT"] },
];
dvtCols.forEach((col, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:4.45, w:2.75, h:3.0, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:4.45, w:2.75, h:0.4, fill:{color:C.bgAlt} });
slide.addText(col.title, { x:4.4+i*2.9, y:4.45, w:2.75, h:0.4, fontSize:10, bold:true, color:C.teal, fontFace:"Calibri", align:"center" });
const textArr = col.items.map((item, idx) => ({
text: item, options:{ color:C.light, fontSize:8.5, bullet:true, fontFace:"Calibri", breakLine:idx<col.items.length-1 }
}));
slide.addText(textArr, { x:4.5+i*2.9, y:4.9, w:2.55, h:2.5, valign:"top" });
});
addBullets(slide, [
{ text:"Epidemiology:", bold:true },
"VTE: 3rd leading cardiovascular cause of death",
"Incidence: 1–2 per 1000 person-years",
"DVT: 60–70% of all VTE",
"30-day mortality PE: ~10–15%",
{ text:"Hereditary thrombophilia:", bold:true },
"Factor V Leiden: Most common (5% pop.)",
"Prothrombin G20210A mutation",
"Protein C/S, Antithrombin deficiency",
{ text:"Acquired:", bold:true },
"APS, malignancy, pregnancy",
"HIT (heparin-induced)"
], 0.2, 0.8, 3.9, 6.5, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SECTION 3 DIVIDER
// ══════════════════════════════════════════════════════════════════════════════
sectionDivider(pres, "03", "ACUTE PULMONARY EMBOLISM", "2026 AHA/ACC Clinical Category Classification", C.accent);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9: PE CLASSIFICATION — 2026 AHA/ACC CATEGORIES A–E
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "2026 AHA/ACC\nPE Clinical\nCategories A–E", "NEW — De Novo Classification");
slide.addText("AHA/ACC ACUTE PE CLINICAL CATEGORIES — 2026 GUIDELINE (1st EVER JOINT GUIDELINE)", {
x:4.4, y:0.18, w:8.7, h:0.45,
fontSize:11, bold:true, color:C.gold, fontFace:"Calibri"
});
const peCats = [
{ cat:"A", label:"Subclinical / Incidental", hemo:"Asymptomatic", rv:"Normal RV & biomarkers", mgmt:"Anticoagulation (DOAC). Discharge home. No hospitalisation needed.", col:C.green },
{ cat:"B", label:"Low Severity", hemo:"Symptomatic | SBP ≥90", rv:"Normal RV / no significant biomarker rise (C1)", mgmt:"Anticoagulation; early discharge. Outpatient management generally safe.", col:C.yellow },
{ cat:"C", label:"Intermediate Severity", hemo:"Symptomatic | SBP ≥90 | C1: normal RV + no biomarkers | C2: abnormal RV OR biomarkers | C3: abnormal RV AND biomarkers", rv:"C3 = highest within Category C", mgmt:"Anticoagulate; hospitalise. C3: consider CDL or PERT engagement if deteriorating.", col:C.orange },
{ cat:"D", label:"High Severity (Non-obstructive Shock)", hemo:"SBP <90 OR ↓40 mmHg ≥15min (not explained by arrhythmia/sepsis)", rv:"Severe RV dysfunction + biomarker elevation", mgmt:"PERT activation, UFH, consider CDL/MT/surgical embolectomy. Haemodynamic support.", col:C.red },
{ cat:"E", label:"Obstructive Cardiogenic Shock / Arrest", hemo:"E1: Cardiogenic shock with persistent hypotension | E2: Cardiac arrest", rv:"Severe RV failure, refractory shock", mgmt:"ECMO, systemic thrombolysis (E2: cardiac arrest), surgical/catheter embolectomy. ICU.", col:C.accent },
];
peCats.forEach((c, i) => {
const y = 0.72 + i * 1.21;
slide.addShape(pres.ShapeType.rect, { x:4.4, y, w:0.7, h:1.1, fill:{color:c.col} });
slide.addText(`CAT\n${c.cat}`, { x:4.4, y, w:0.7, h:1.1, fontSize:11, bold:true, color:C.white, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:5.1, y, w:8.0, h:1.1, fill:{color:C.bgAlt} });
slide.addText(c.label, { x:5.2, y:y+0.04, w:7.8, h:0.32, fontSize:10.5, bold:true, color:c.col, fontFace:"Calibri" });
slide.addText(`Haemodynamics: ${c.hemo} | RV: ${c.rv}`, { x:5.2, y:y+0.35, w:7.8, h:0.32, fontSize:8.5, color:C.muted, fontFace:"Calibri", italic:true });
slide.addText(`Mgmt: ${c.mgmt}`, { x:5.2, y:y+0.65, w:7.8, h:0.38, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
addBullets(slide, [
{ text:"KEY CHANGE:", bold:true, color:C.gold },
{ text:"Old: massive/submassive/low-risk", bold:false },
{ text:"New: Categories A–E (5 categories)", bold:false },
"Subcategories (C1,C2,C3,D1,D2,E1,E2)",
"Based on: symptoms, haemodynamics, RV size/function, biomarkers",
{ text:"Enables precise therapy decision", bold:true },
"Cat A+B → safe for early/home discharge",
"Cat C3-D → PERT activation recommended",
"Cat E → aggressive intervention"
], 0.15, 0.72, 4.05, 5.8, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 10: PE DIAGNOSIS ALGORITHM
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "PE Diagnosis\nAlgorithm &\nRisk Scores", "Wells · PESI · D-dimer");
slide.addText("DIAGNOSTIC ALGORITHM FOR SUSPECTED PE (2026 GUIDELINE)", {
x:4.4, y:0.2, w:8.7, h:0.4,
fontSize:12, bold:true, color:C.white, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.62, w:8.6, h:0.04, fill:{color:C.teal} });
// Algorithm flow
const algoSteps = [
{ step:"Clinical Suspicion\n(Dyspnoea, pleuritic pain, tachycardia, hypoxia, risk factors)", col:C.teal, x:4.4, y:0.75, w:5.2 },
{ step:"Assess haemodynamic stability\nUnstable → EMERGENT CTPA / Bedside Echo / Empiric anticoagulation", col:C.accent, x:4.4, y:1.7, w:5.2 },
{ step:"Wells PE Score\n≤4: Low/Moderate → D-dimer first\n>4: High probability → CTPA directly", col:C.gold, x:4.4, y:2.75, w:5.2 },
{ step:"D-dimer (age-adjusted: D-dimer < age×10 if ≥50yrs)\nNegative → PE excluded\nPositive → CTPA", col:C.teal, x:4.4, y:3.8, w:5.2 },
{ step:"CTPA — Gold Standard (Sensitivity 95%, Specificity 98%)\nAlternative: V/Q scan (pregnancy, CKD, dye allergy)", col:C.green, x:4.4, y:4.85, w:5.2 },
];
algoSteps.forEach((s, i) => {
slide.addShape(pres.ShapeType.rect, { x:s.x, y:s.y, w:s.w, h:0.85, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:s.x, y:s.y, w:0.18, h:0.85, fill:{color:s.col} });
slide.addText(s.step, { x:s.x+0.25, y:s.y+0.05, w:s.w-0.3, h:0.78, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
if (i < algoSteps.length-1) {
slide.addText("▼", { x:s.x+2.3, y:s.y+0.82, w:0.6, h:0.28, fontSize:12, color:s.col, fontFace:"Calibri", align:"center" });
}
});
// Wells Score
slide.addText("WELLS PE SCORE", {
x:9.8, y:0.65, w:3.5, h:0.38,
fontSize:11, bold:true, color:C.gold, fontFace:"Calibri"
});
const wellsPE = [
"Clinical signs DVT: +3",
"PE most likely Dx: +3",
"HR >100: +1.5",
"Immobilisation ≥3d / surgery: +1.5",
"Prev DVT/PE: +1.5",
"Haemoptysis: +1",
"Malignancy (Rx active): +1",
"Score >4 = PE likely",
"Score ≤4 = PE unlikely",
];
addBullets(slide, wellsPE, 9.8, 1.1, 3.35, 3.0, 9, C.light);
// PESI Score
slide.addText("sPESI (Simplified PESI)", {
x:9.8, y:4.3, w:3.5, h:0.38,
fontSize:11, bold:true, color:C.teal, fontFace:"Calibri"
});
const spesi = [
"Age >80: +1",
"Cancer: +1",
"Chronic cardiopulmonary: +1",
"HR ≥110: +1",
"SBP <100: +1",
"SpO2 <90%: +1",
"Score 0 = low risk (30d mortality 1%)",
"Score ≥1 = high risk (10.9%)",
];
addBullets(slide, spesi, 9.8, 4.75, 3.35, 2.5, 9, C.light);
addBullets(slide, [
{ text:"Biomarkers in PE:", bold:true },
"Troponin I/T: RV micronecrosis → mortality risk",
"BNP/NT-proBNP: RV wall stress",
"Lactate: tissue perfusion",
"Echo: RV:LV >0.9, McConnell sign, D-sign",
{ text:"ECG:", bold:true },
"S1Q3T3 (25% sensitive)",
"Sinus tachycardia (most common)",
"New RBBB, T-wave inversions V1-V4",
"AF possible in massive PE"
], 0.2, 0.8, 3.9, 5.5, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 11: PE MANAGEMENT — 2026 GUIDELINE
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "PE Management\n2026 AHA/ACC\nGuideline", "Anticoagulation to Advanced Interventions");
slide.addText("ANTICOAGULATION — FIRST-LINE TREATMENT (ALL CATEGORIES)", {
x:4.4, y:0.2, w:8.7, h:0.42,
fontSize:12, bold:true, color:C.gold, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.65, w:8.6, h:0.04, fill:{color:C.gold} });
const acRows = [
{ drug:"DOACs (Preferred)", detail:"Rivaroxaban: 15mg BD ×21d → 20mg OD | Apixaban: 10mg BD ×7d → 5mg BD | Edoxaban: after 5–10d UFH/LMWH | Dabigatran: after 5-10d parenteral", col:C.teal },
{ drug:"LMWH", detail:"Enoxaparin 1mg/kg SC BD or 1.5mg/kg OD. Preferred in cancer (superior to VKA), pregnancy (DOACs contraindicated)", col:C.gold },
{ drug:"UFH", detail:"Bolus 80 IU/kg → infusion 18 IU/kg/hr. Preferred if renal failure, need for reversal, or advanced intervention planned", col:C.orange },
{ drug:"Warfarin (VKA)", detail:"INR 2–3. Only if DOAC contraindicated (APS, valvular disease, pregnancy planned, renal failure). Overlap UFH/LMWH ≥5d until INR therapeutic ×24h", col:C.muted },
];
acRows.forEach((r, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.8+i*0.95, w:1.8, h:0.85, fill:{color:r.col} });
slide.addText(r.drug, { x:4.4, y:0.8+i*0.95, w:1.8, h:0.85, fontSize:9, bold:true, color:C.dark, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:6.2, y:0.8+i*0.95, w:6.8, h:0.85, fill:{color:C.bgAlt} });
slide.addText(r.detail, { x:6.3, y:0.83+i*0.95, w:6.6, h:0.8, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:4.7, w:8.6, h:0.04, fill:{color:C.accent} });
slide.addText("ADVANCED INTERVENTIONS — CATEGORY C3/D/E", {
x:4.4, y:4.8, w:8.7, h:0.42,
fontSize:12, bold:true, color:C.accent, fontFace:"Calibri"
});
const advTherapy = [
{ title:"Systemic Thrombolysis", detail:"Alteplase 100mg IV over 2h. Cat E (cardiac arrest/obstructive shock). Contraindicated if recent surgery, stroke, active bleeding. Major bleeding 9.9%, ICH 1.7%", col:C.accent },
{ title:"Catheter-Directed Lysis (CDL)", detail:"Local low-dose tPA via catheter. Cat C3-D2 if deteriorating/high risk. Lower bleeding vs systemic. Not yet vs anticoagulation head-to-head in RCT", col:C.orange },
{ title:"Mechanical Thrombectomy (MT)", detail:"Catheter-based: FlowTriever, Inari, AngioVac. Cat D-E. No lytic agent → lower bleeding risk. Growing evidence base.", col:C.gold },
{ title:"Surgical Embolectomy", detail:"Cat D1-E2. Open-heart surgery — high survival >97% in experienced centres when cat E1. Viable if thrombolysis contraindicated/failed.", col:C.teal },
];
advTherapy.forEach((t, i) => {
const col = i < 2 ? 0 : 1;
const row = i % 2;
slide.addShape(pres.ShapeType.rect, { x:4.4+col*4.35, y:5.35+row*0.9, w:4.2, h:0.82, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+col*4.35, y:5.35+row*0.9, w:0.18, h:0.82, fill:{color:t.col} });
slide.addText(t.title, { x:4.65+col*4.35, y:5.38+row*0.9, w:3.8, h:0.3, fontSize:9.5, bold:true, color:t.col, fontFace:"Calibri" });
slide.addText(t.detail, { x:4.65+col*4.35, y:5.67+row*0.9, w:3.8, h:0.45, fontSize:8, color:C.light, fontFace:"Calibri", wrap:true });
});
addBullets(slide, [
{ text:"IVC Filters (2026):", bold:true },
"Retrievable filter if anticoagulation CONTRAINDICATED",
"NOT recommended routinely alongside anticoagulation",
"Retrieve as soon as possible once anticoagulant safe",
{ text:"PERT — PE Response Team:", bold:true },
"Multidisciplinary: pulm, cards, CT surg, IR, heme",
"Activate for Cat C3 and above",
"Shown to improve time to intervention",
{ text:"Haemodynamic support:", bold:true },
"Vasopressors: noradrenaline preferred",
"Avoid excessive IV fluids (RV distension worsens)",
"ECMO: bridge in Cat E (COR 2a)"
], 0.2, 0.8, 3.9, 6.5, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 12: CTEPH
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "CTEPH\n(WHO Group 4)\nChronic Thrombo-\nembolic PH", "Only Surgically Curable Form of PH");
slide.addText("CHRONIC THROMBOEMBOLIC PULMONARY HYPERTENSION", {
x:4.4, y:0.18, w:8.7, h:0.45,
fontSize:13, bold:true, color:C.gold, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.65, w:8.6, h:0.04, fill:{color:C.gold} });
// Key facts
const facts = [
{ label:"Incidence after PE", value:"~4% after acute PE; 25% have no prior PE history" },
{ label:"Pathogenesis", value:"Failed clot resolution → organised intravascular scar → ↑PVR → PH. Delayed diagnosis (>2 weeks) is key risk factor" },
{ label:"Risk Factors", value:"Recurrent PE, large PE, mPAP >50 at diagnosis, residual perfusion defect, APS, splenectomy, infected pacemaker leads" },
{ label:"Presentation", value:"Progressive dyspnoea months-years after PE. Clinically indistinguishable from PAH. Requires high suspicion" },
];
facts.forEach((f, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.8+i*0.78, w:2.0, h:0.68, fill:{color:C.teal} });
slide.addText(f.label, { x:4.4, y:0.8+i*0.78, w:2.0, h:0.68, fontSize:9, bold:true, color:C.dark, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:6.4, y:0.8+i*0.78, w:6.6, h:0.68, fill:{color:C.bgAlt} });
slide.addText(f.value, { x:6.5, y:0.82+i*0.78, w:6.4, h:0.65, fontSize:9, color:C.light, fontFace:"Calibri", wrap:true });
});
// Diagnosis
slide.addText("DIAGNOSTIC PATHWAY FOR CTEPH", {
x:4.4, y:4.0, w:8.7, h:0.4,
fontSize:11, bold:true, color:C.teal, fontFace:"Calibri"
});
const diagSteps = [
{ s:"V/Q Scan\n(Screen for CTEPH — superior to CTPA for screening)", col:C.teal },
{ s:"CTPA\n(Characterise clot burden, vessel morphology, parenchymal disease)", col:C.gold },
{ s:"Right Heart Catheterisation\n(Confirm PH: mPAP >20, PVR ≥3 WU; PAWP ≤15)", col:C.accent },
{ s:"Digital Subtraction Angiography\n(Pre-operative mapping; webs, bands, pouching defects)", col:C.orange },
];
diagSteps.forEach((d, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.2, y:4.5, w:2.05, h:1.2, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.2, y:4.5, w:2.05, h:0.2, fill:{color:d.col} });
slide.addText((i+1).toString(), { x:4.4+i*2.2, y:4.7, w:0.5, h:0.5, fontSize:20, bold:true, color:d.col, fontFace:"Calibri", align:"center" });
slide.addText(d.s, { x:4.9+i*2.2, y:4.55, w:1.5, h:1.1, fontSize:8.5, color:C.light, fontFace:"Calibri", wrap:true });
});
// Treatment
slide.addText("TREATMENT", {
x:4.4, y:5.85, w:8.7, h:0.38,
fontSize:11, bold:true, color:C.accent, fontFace:"Calibri"
});
const treatments = [
{ title:"PTE (Pulmonary Thromboendarterectomy)", detail:"SURGICAL CURE — treatment of choice for operable proximal disease. Survival >90%. Life-long anticoagulation post-op.", col:C.green },
{ title:"Balloon Pulmonary Angioplasty (BPA)", detail:"For inoperable or residual CTEPH. Serial sessions. ↑ haemodynamics + exercise capacity. Riociguat as adjunct.", col:C.teal },
{ title:"Medical: Riociguat", detail:"sGC stimulator — ONLY drug approved specifically for CTEPH. CHEST-1 trial: ↑6MWD, ↓PVR. Use if inoperable or residual post-PTE.", col:C.gold },
];
treatments.forEach((t, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:6.3, w:2.75, h:1.1, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:4.4+i*2.9, y:6.3, w:2.75, h:0.3, fill:{color:t.col} });
slide.addText(t.title, { x:4.45+i*2.9, y:6.3, w:2.65, h:0.3, fontSize:8.5, bold:true, color:C.dark, fontFace:"Calibri" });
slide.addText(t.detail, { x:4.45+i*2.9, y:6.65, w:2.65, h:0.7, fontSize:8, color:C.light, fontFace:"Calibri", wrap:true });
});
addBullets(slide, [
{ text:"CTEPH Key Points:", bold:true },
"Screen ALL PE patients at 3–6 months",
"Echo at follow-up: PH signs?",
"V/Q scan: gold standard screen",
"Expert referral mandatory",
"Lifelong anticoagulation",
{ text:"Post-PTE outcomes:", bold:true },
"60–80% normalise haemodynamics",
"25% residual or recurrent PH",
"Lung transplant: last resort",
{ text:"CTPA vs V/Q:", bold:true },
"V/Q better for CTEPH screening",
"CTPA: anatomic detail pre-op",
"Both often performed"
], 0.2, 0.8, 3.9, 6.5, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 13: LONG-TERM MANAGEMENT & FOLLOW-UP
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slideHeader(slide, "Long-Term\nManagement\n& Follow-Up", "Post-PE Syndrome · Anticoagulation Duration");
slide.addText("DURATION OF ANTICOAGULATION AFTER VTE/PE (2026 GUIDELINE)", {
x:4.4, y:0.18, w:8.7, h:0.42,
fontSize:12, bold:true, color:C.gold, fontFace:"Calibri"
});
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.65, w:8.6, h:0.04, fill:{color:C.gold} });
const acDuration = [
{ scenario:"Provoked (major transient — surgery, trauma)", duration:"3–6 months", rec:"Stop after 3 months if risk factor resolved", col:C.green },
{ scenario:"Provoked (minor persistent — OCP, long-haul)", duration:"≥3 months; consider extended", rec:"Reassess risk-benefit for extended therapy", col:C.yellow },
{ scenario:"Unprovoked first PE/DVT", duration:"≥3 months; consider indefinite", rec:"Low annual recurrence risk: stop; high risk: extend. DOAC preferred.", col:C.orange },
{ scenario:"Recurrent unprovoked VTE", duration:"Indefinite anticoagulation", rec:"Risk of recurrence >30% at 5 years; benefit outweighs risk", col:C.accent },
{ scenario:"Cancer-associated thrombosis (CAT)", duration:"Indefinite or until cancer resolved", rec:"LMWH or DOAC (rivaroxaban/apixaban). Edoxaban/dabigatran: ↑ GI bleed", col:C.teal },
{ scenario:"APS (Antiphospholipid Syndrome)", duration:"Indefinite", rec:"Warfarin preferred (INR 2–3); DOACs may have higher recurrence rates in triple+ve", col:C.muted },
];
acDuration.forEach((r, i) => {
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.8+i*0.85, w:0.18, h:0.75, fill:{color:r.col} });
slide.addShape(pres.ShapeType.rect, { x:4.58, y:0.8+i*0.85, w:8.4, h:0.75, fill:{color:C.bgAlt} });
slide.addText(r.scenario, { x:4.68, y:0.83+i*0.85, w:4.5, h:0.32, fontSize:9.5, bold:true, color:C.white, fontFace:"Calibri" });
slide.addText(`Duration: ${r.duration}`, { x:4.68, y:1.1+i*0.85, w:4.5, h:0.32, fontSize:9, color:r.col, fontFace:"Calibri" });
slide.addText(r.rec, { x:9.3, y:0.83+i*0.85, w:3.6, h:0.65, fontSize:8.5, color:C.muted, fontFace:"Calibri", italic:true, wrap:true });
});
// Post-PE syndrome
slide.addShape(pres.ShapeType.rect, { x:4.4, y:6.05, w:8.6, h:0.04, fill:{color:C.teal} });
slide.addText("POST-PE SYNDROME & CHRONIC FOLLOW-UP (2026 Guideline)", {
x:4.4, y:6.15, w:8.7, h:0.38,
fontSize:11, bold:true, color:C.teal, fontFace:"Calibri"
});
const followUp = [
{ title:"Dyspnoea at 3–6 months?", detail:"Echo to screen for CTEPH. V/Q scan if echo suggests PH. Exercise testing if unexplained dyspnoea." },
{ title:"Post-PE Syndrome (chronic dyspnoea/impaired QoL)", detail:"15–25% of PE survivors. Functional limitation, exercise intolerance. Supervised exercise rehab recommended." },
{ title:"Psychological: Depression/Anxiety/PTSD", detail:"Affects up to 30% of survivors. Screen and refer. Peer support programs." },
{ title:"Contraception / Pregnancy counselling", detail:"OCP contraindicated. Progestogen-only / IUD preferred. DOACs: teratogenic — switch to LMWH if pregnancy planned." },
];
followUp.forEach((f, i) => {
const x = 4.4 + (i<2 ? 0 : 4.35);
const y = i%2===0 ? 6.6 : 7.15;
// For last row keep y reasonable
const yy = 6.6 + Math.floor(i/2)*0.62;
const xx = 4.4 + (i%2)*4.35;
slide.addShape(pres.ShapeType.rect, { x:xx, y:yy, w:4.2, h:0.55, fill:{color:C.dark} });
slide.addShape(pres.ShapeType.rect, { x:xx, y:yy, w:0.15, h:0.55, fill:{color:C.teal} });
slide.addText(f.title, { x:xx+0.2, y:yy+0.02, w:3.9, h:0.24, fontSize:9, bold:true, color:C.teal, fontFace:"Calibri" });
slide.addText(f.detail, { x:xx+0.2, y:yy+0.25, w:3.9, h:0.27, fontSize:8, color:C.light, fontFace:"Calibri", wrap:true });
});
addBullets(slide, [
{ text:"Recurrence risk:", bold:true },
"Provoked: 5% / year after stopping",
"Unprovoked: 10–15% / year",
"Recurrent unprovoked: >30% at 5yr",
{ text:"Bleeding risk (HAS-BLED, VTE-BLEED):", bold:true },
"Age >75, renal/liver disease",
"Prior bleeding, thrombocytopenia",
"NSAID/antiplatelet use",
{ text:"Reversal agents:", bold:true },
"Warfarin: Vit K + 4F-PCC",
"Dabigatran: Idarucizumab",
"Xa inhibitors: Andexanet alfa"
], 0.2, 0.8, 3.9, 6.5, 9.5, C.light);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 14: KEY TAKEAWAYS
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
slide.background = { color: C.dark };
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.1, fill:{color:C.accent} });
slide.addShape(pres.ShapeType.rect, { x:0, y:7.4, w:13.3, h:0.1, fill:{color:C.teal} });
slide.addText("KEY TAKEAWAYS", {
x:0.5, y:0.2, w:12.3, h:0.6,
fontSize:24, bold:true, color:C.white, fontFace:"Calibri", align:"center", charSpacing:4
});
slide.addShape(pres.ShapeType.rect, { x:3, y:0.85, w:7.3, h:0.06, fill:{color:C.gold} });
const takeaways = [
{ num:"1", text:"PH is defined by mPAP >20 mmHg on RHC (updated from >25 mmHg). Pre-capillary PH requires BOTH PAWP ≤15 AND PVR ≥3 WU.", col:C.teal },
{ num:"2", text:"5 WHO groups: PAH (Group 1) is the target of specific therapy. CTEPH (Group 4) is the only surgically curable form.", col:C.gold },
{ num:"3", text:"PAH: Initial combination therapy ERA + PDE5i (ESC/ERS 2022, Class I-A). Sotatercept is a new add-on therapy (2024). Vasoreactivity test guides CCB use.", col:C.teal },
{ num:"4", text:"2026 AHA/ACC Guideline: NEW 5-category A–E PE classification replaces massive/submassive/low-risk — improves precision of therapy decisions.", col:C.accent },
{ num:"5", text:"PE Diagnosis: Age-adjusted D-dimer, Wells score, CTPA (gold standard). V/Q scan for CTEPH screening and pregnancy.", col:C.gold },
{ num:"6", text:"PE Treatment: DOACs preferred over warfarin. PERT for Category C3+. Systemic thrombolysis for Category E (cardiac arrest). ECMO as bridge.", col:C.accent },
{ num:"7", text:"CTEPH: Screen all PE patients at 3–6 months. V/Q scan → RHC. PTE is curative; BPA + riociguat for inoperable disease.", col:C.orange },
{ num:"8", text:"Post-PE: Screen for post-PE syndrome, CTEPH, depression/anxiety. Duration of anticoagulation depends on provoked vs unprovoked and risk factors.", col:C.green },
];
takeaways.forEach((t, i) => {
const col = i < 4 ? 0 : 1;
const row = i % 4;
const x = col === 0 ? 0.3 : 6.8;
const y = 1.05 + row * 1.55;
slide.addShape(pres.ShapeType.rect, { x, y, w:6.2, h:1.4, fill:{color:C.bg} });
slide.addShape(pres.ShapeType.rect, { x, y, w:0.5, h:1.4, fill:{color:t.col} });
slide.addText(t.num, { x, y, w:0.5, h:1.4, fontSize:16, bold:true, color:C.dark, fontFace:"Calibri", align:"center", valign:"middle" });
slide.addText(t.text, { x:x+0.6, y:y+0.1, w:5.5, h:1.2, fontSize:9.5, color:C.light, fontFace:"Calibri", wrap:true, valign:"middle" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 15: REFERENCES
// ══════════════════════════════════════════════════════════════════════════════
{
const slide = pres.addSlide();
sectionBg(slide);
slide.addText("REFERENCES & GUIDELINES", {
x:0.4, y:0.2, w:12.5, h:0.55,
fontSize:20, bold:true, color:C.white, fontFace:"Calibri", align:"center"
});
slide.addShape(pres.ShapeType.rect, { x:1.5, y:0.8, w:10.3, h:0.06, fill:{color:C.teal} });
const refs = [
{ tag:"[1]", text:"Humbert M et al. 2022 ESC/ERS Guidelines for the Diagnosis and Treatment of Pulmonary Hypertension. Eur Heart J. 2022;43(38):3618–3731." },
{ tag:"[2]", text:"Creager MA, Barnes GD, Giri J et al. 2026 AHA/ACC/ACCP/ACEP/CHEST/SCAI/SHM/SIR/SVM/SVN Guideline for the Evaluation and Management of Acute Pulmonary Embolism in Adults. Circulation. 2026. PMID: 41712677. DOI: 10.1161/CIR.0000000000001415" },
{ tag:"[3]", text:"Mukherjee M et al. Guidelines for Echocardiographic Assessment of the Right Heart in Adults and Special Considerations in Pulmonary Hypertension. J Am Soc Echocardiogr. 2025. PMID: 40044341" },
{ tag:"[4]", text:"Schlager O et al. 2025 ESVM Guidelines on Interventional Treatment of Venous Thromboembolism. Vasa. 2025. PMID: 40587333" },
{ tag:"[5]", text:"Fernandes TM, Kerr KM. Chapter 86: Pulmonary Hypertension Due to Chronic Thromboembolic Disease. Murray & Nadel's Textbook of Respiratory Medicine, 2-Volume Set (9780323655873)" },
{ tag:"[6]", text:"Harrison's Principles of Internal Medicine, 21st Edition — Hemodynamic Classification of Pulmonary Hypertension" },
{ tag:"[7]", text:"AMBITION Trial: Galiè N et al. Initial Use of Ambrisentan + Tadalafil in PAH. N Engl J Med. 2015;373:834–844." },
{ tag:"[8]", text:"STELLAR Trial: Hoeper MM et al. Phase 3 Trial of Sotatercept for Treatment of PAH. N Engl J Med. 2023;388(16):1478–1490." },
{ tag:"[9]", text:"PEITHO Trial: Meyer G et al. Fibrinolysis for submassive pulmonary embolism. N Engl J Med. 2014;370(15):1402–1411." },
{ tag:"[10]", text:"CHEST-1 Trial: Ghofrani HA et al. Riociguat for the Treatment of CTEPH. N Engl J Med. 2013;369:319–329." },
];
refs.forEach((r, i) => {
const colIdx = i < 5 ? 0 : 1;
const rowIdx = i % 5;
slide.addText([
{ text:r.tag+" ", options:{ bold:true, color:C.gold } },
{ text:r.text, options:{ color:C.light } }
], {
x:0.4+colIdx*6.45, y:1.0+rowIdx*1.15, w:6.2, h:1.05,
fontSize:8.5, fontFace:"Calibri", wrap:true, valign:"top"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ══════════════════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/ph-vte-ppt/PH_VTE_PE_Residency_2026.pptx" })
.then(() => console.log("SUCCESS: PH_VTE_PE_Residency_2026.pptx created"))
.catch(err => { console.error("ERROR:", err); process.exit(1); });