Pulmonary involvement in systemic disease
"pulmonary manifestations" AND "systemic disease"
| Manifestation | Details |
|---|---|
| ILD / Interstitial pneumonitis | UIP or NSIP pattern; early lymphocytic infiltrate with germinal follicles, later replaced by fibrosis |
| Pleural disease | Found in 40% at autopsy; clinically apparent in ~5%; more common in men; effusion may precede arthritis |
| Pulmonary nodules | Necrobiotic nodules; must be aggressively investigated to exclude malignancy |
| Follicular bronchiolitis | Lymphoid hyperplasia along airways |
| Pulmonary hypertension | Least common; associated with Raynaud phenomenon |
| Caplan syndrome | Progressive upper lobe nodular fibrosis in RA + pneumoconiosis (coal workers) |
| Diffuse alveolar hemorrhage | Via pulmonary capillaritis (rare) |
— Goldman-Cecil Medicine, p. 947; Fishman's Pulmonary Diseases, p. 1025
— Goldman-Cecil Medicine, p. 947; Fishman's Pulmonary Diseases, p. 1030
| Manifestation | Details |
|---|---|
| Pleuritis / pleural effusion | Most common lung manifestation; exudative |
| Acute lupus pneumonitis | Mimics acute interstitial pneumonia; widespread ground-glass + consolidation |
| Diffuse alveolar hemorrhage | Via pulmonary capillaritis; can be life-threatening |
| Thromboembolic disease | Antiphospholipid antibodies → pulmonary embolism |
| Chronic ILD | Less common; NSIP or LIP patterns |
| "Shrinking lung" syndrome | Restrictive defect from diaphragmatic weakness/dysfunction; resistant to corticosteroids |
| Pulmonary hypertension | Via vasculitis or recurrent emboli |

— Goldman-Cecil Medicine, p. 947–948; Textbook of Family Medicine 9e, p. 339
— Goldman-Cecil Medicine, p. 472; Fishman's Pulmonary Diseases, p. 1032
| Stage | Finding |
|---|---|
| 0 | Normal |
| I | Bilateral hilar lymphadenopathy only |
| II | Hilar adenopathy + parenchymal infiltrates |
| III | Parenchymal infiltrates without adenopathy |
| IV | Pulmonary fibrosis / honeycombing |
| Disease | Dominant ILD Pattern | Pleural | PAH | Other Key Features |
|---|---|---|---|---|
| RA | UIP, NSIP | Common (exudate, low glucose) | Uncommon | Nodules, Caplan syndrome |
| SSc | NSIP > UIP | Uncommon | Major (especially lcSSc) | Anticentromere → PAH; anti-Scl-70 → fibrosis |
| SLE | LIP, NSIP | Common (pleuritis) | Via emboli/vasculitis | Shrinking lung, DAH, APS |
| DM/PM | NSIP, UIP, OP, DAD | Uncommon | Rare | Anti-Jo-1; DAD = high mortality |
| Sjögren | LIP, OP | Rare | Rare | Bronchiectasis |
| MCTD | NSIP | Pleuritis (40%) | Significant | Anti-RNP |
| AS | Apical fibrobullous | No | No | Upper lobe bullae |
| Sarcoidosis | Granulomatous | Rare | Vasocentric form | ACE elevated; staged I–IV |
| GPA | Nodules/cavities/DAH | Rare | Rare | PR3-ANCA, saddle-nose |
| EGPA | Eosinophilic infiltrates | Rare | Rare | Asthma, MPO-ANCA |
Include recent guidelines, add pictures, references and make me a proper presentation
"interstitial lung disease" AND "connective tissue disease" AND guidelines
"systemic sclerosis" AND "interstitial lung disease" AND treatment
pulmonary interstitial lung disease CT HRCT connective tissue
PMID: 38973714
PMID: 38973731
PMID: 40912974
sarcoidosis chest X-ray bilateral hilar lymphadenopathy
rheumatoid arthritis pulmonary nodules pleural effusion chest CT
scleroderma systemic sclerosis NSIP interstitial fibrosis HRCT honeycomb
PMID: 37772985
PMID: 39874231
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty"
mkdir -p /home/daytona/workspace/pulmonary-systemic-disease
node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_48e3d6603cf401b8ed0bc24fa5a5f9c7313c9e69d26ba46cc1f9d41c2973e007.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4343922dc8e45a24c6bd0f5e07d06786a5c9d42a9f354863f9e2ae4c3155b12b.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_7e425272a39d03cb9b51333bb272f9e8338c72ff50af65de0e8eb810ecda526b.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_d9c6a4a32ac06689439e73fb9a8b21579c2881988acce46b8a31b86419ba7b75.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0ca74a8ba94cd1210c861ae9e39121c86aa90e9b79608d2eb0d5201b2f3cd6c8.jpg" \ "https://cdn.orris.care/cdss_images/47d74c78a935a748ada1511c1d96f9db866b51cba05e816a6cbbbd59e6642e9a.png" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e35c8c488b8bfd30b8129a2b46bb24cd2ba2bacf10aeb1e3b225afe6a5ad9e0d.jpg" \ 2>/dev/null | node -e "const d=require('fs').readFileSync('/dev/stdin','utf8'); const arr=JSON.parse(d); arr.forEach((x,i)=>console.log(i, x.error?'ERROR:'+x.error : 'OK len='+x.base64.length))"
~/pulmonary-systemic-disease/build.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ─── Fetch images ────────────────────────────────────────────────────────────
const imageUrls = [
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_48e3d6603cf401b8ed0bc24fa5a5f9c7313c9e69d26ba46cc1f9d41c2973e007.jpg", // 0 NSIP/CTD-ILD HRCT
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4343922dc8e45a24c6bd0f5e07d06786a5c9d42a9f354863f9e2ae4c3155b12b.jpg", // 1 SSc HRCT + esophagus
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_7e425272a39d03cb9b51333bb272f9e8338c72ff50af65de0e8eb810ecda526b.jpg", // 2 SSc HRCT traction bronchiectasis + dilated PA
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_d9c6a4a32ac06689439e73fb9a8b21579c2881988acce46b8a31b86419ba7b75.jpg", // 3 Sarcoidosis CXR bilateral hilar
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0ca74a8ba94cd1210c861ae9e39121c86aa90e9b79608d2eb0d5201b2f3cd6c8.jpg", // 4 MCTD ILD traction bronchiectasis
"https://cdn.orris.care/cdss_images/47d74c78a935a748ada1511c1d96f9db866b51cba05e816a6cbbbd59e6642e9a.png", // 5 SLE LIP cysts CT
"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e35c8c488b8bfd30b8129a2b46bb24cd2ba2bacf10aeb1e3b225afe6a5ad9e0d.jpg", // 6 SSc NSIP progression
];
const imgs = JSON.parse(execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${imageUrls.map(u => `"${u}"`).join(" ")}`
).toString());
// ─── Color palette ───────────────────────────────────────────────────────────
const C = {
navy: "0D2B4E", // dominant dark blue
teal: "1A7A8A", // supporting teal
sky: "3BB4C8", // accent light blue
white: "FFFFFF",
offWhite:"F2F6FA",
silver: "C8D6E5",
text: "1A2942",
muted: "5A7090",
amber: "E8A020",
red: "C0392B",
green: "1E8449",
};
// ─── Helpers ─────────────────────────────────────────────────────────────────
function addSlideHeader(slide, title, subtitle, accent) {
// Left color bar
slide.addShape(pptxgen.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625,
fill: { color: accent || C.teal },
line: { type: "none" }
});
// Top gradient bar
slide.addShape(pptxgen.ShapeType.rect, {
x: 0.18, y: 0, w: 9.82, h: 0.85,
fill: { color: C.navy },
line: { type: "none" }
});
slide.addText(title, {
x: 0.35, y: 0.05, w: 9.4, h: 0.75,
fontSize: 22, bold: true, color: C.white,
fontFace: "Calibri", valign: "middle", margin: 0
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.35, y: 0.82, w: 9.4, h: 0.3,
fontSize: 11, color: C.sky,
fontFace: "Calibri", valign: "top", margin: 0
});
}
}
function addFooter(slide, pageNum, total) {
slide.addShape(pptxgen.ShapeType.rect, {
x: 0, y: 5.42, w: 10, h: 0.2,
fill: { color: C.navy }, line: { type: "none" }
});
slide.addText(`Pulmonary Involvement in Systemic Disease | ${pageNum} / ${total}`, {
x: 0.2, y: 5.42, w: 9.6, h: 0.2,
fontSize: 8, color: C.silver, fontFace: "Calibri", valign: "middle", margin: 0
});
}
function bullet(text, sub) {
return sub
? { text, options: { bullet: { indent: 20 }, fontSize: 10, color: C.muted, breakLine: true } }
: { text, options: { bullet: true, fontSize: 12, color: C.text, breakLine: true } };
}
// ─── Create presentation ─────────────────────────────────────────────────────
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Orris Medical AI";
pres.title = "Pulmonary Involvement in Systemic Disease";
pres.subject = "Respiratory Medicine / Rheumatology";
const TOTAL = 18;
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// Full background
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.navy}, line:{type:"none"} });
// Accent triangle / ribbon
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:0.5, h:5.625, fill:{color:C.teal}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0.5, y:3.5, w:9.5, h:0.06, fill:{color:C.sky}, line:{type:"none"} });
s.addText("Pulmonary Involvement", {
x:0.8, y:1.0, w:9, h:1.0,
fontSize:40, bold:true, color:C.white, fontFace:"Calibri", charSpacing:1
});
s.addText("in Systemic Disease", {
x:0.8, y:1.9, w:9, h:0.8,
fontSize:40, bold:false, color:C.sky, fontFace:"Calibri", charSpacing:1
});
s.addText("Connective Tissue Diseases · Vasculitides · Granulomatous Disorders", {
x:0.8, y:3.65, w:9, h:0.4,
fontSize:14, color:C.silver, fontFace:"Calibri"
});
s.addText("Based on Goldman-Cecil Medicine · Fishman's Pulmonary Diseases · Robbins Pathology\nUpdated with 2023–2026 ACR/CHEST · ERS/EULAR · ATS Guidelines", {
x:0.8, y:4.2, w:9, h:0.7,
fontSize:10, color:C.muted, fontFace:"Calibri"
});
s.addText("May 2026", {
x:0.8, y:5.1, w:2, h:0.3, fontSize:9, color:C.muted, fontFace:"Calibri"
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — OUTLINE
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Outline", null, C.teal);
addFooter(s, 2, TOTAL);
const topics = [
["1", "Introduction & Overview", C.teal],
["2", "Rheumatoid Arthritis (RA)", C.navy],
["3", "Systemic Sclerosis (Scleroderma)", C.navy],
["4", "Systemic Lupus Erythematosus (SLE)", C.navy],
["5", "Myositis (DM/PM)", C.navy],
["6", "Sjögren Syndrome & MCTD", C.navy],
["7", "Sarcoidosis", C.teal],
["8", "ANCA-Associated Vasculitides", C.teal],
["9", "Summary Table & Recent Guidelines", C.amber],
["10", "References", C.muted],
];
topics.forEach(([num, text, color], i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const x = col === 0 ? 0.5 : 5.3;
const y = 1.2 + row * 0.74;
s.addShape(pptxgen.ShapeType.rect, { x, y, w:0.4, h:0.4, fill:{color}, line:{type:"none"}, rounding:0.05 });
s.addText(num, { x, y, w:0.4, h:0.4, fontSize:13, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(text, { x: x+0.5, y: y+0.02, w:4.1, h:0.36, fontSize:13, color:C.text, fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Introduction", "The lung as a target organ in systemic disease", C.teal);
addFooter(s, 3, TOTAL);
// Key concept box
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:9.4, h:0.7, fill:{color:C.teal}, line:{type:"none"}, rounding:0.05 });
s.addText("The lung is a frequent and often sentinel target organ in systemic autoimmune and inflammatory diseases.\nVirtually every pulmonary compartment can be affected: parenchyma, pleura, vasculature, and airways.", {
x:0.5, y:1.12, w:9.0, h:0.65, fontSize:11.5, color:C.white, fontFace:"Calibri", valign:"middle", margin:0
});
// 3 column boxes
const boxes = [
{ title:"Connective Tissue Diseases", items:["RA, SLE, Systemic Sclerosis", "Sjögren Syndrome", "Dermatomyositis / Polymyositis", "Mixed CTD, Ankylosing Spondylitis"], color:C.navy },
{ title:"Granulomatous Diseases", items:["Sarcoidosis", "Granulomatosis with Polyangiitis","Eosinophilic GPA (Churg-Strauss)","Berylliosis, Hypersensitivity Pneumonitis"], color:C.teal },
{ title:"Key Pulmonary Compartments", items:["Interstitial (ILD/fibrosis)", "Pleura (effusion, pleuritis)","Vasculature (PAH, capillaritis)","Airways (bronchiectasis, BO)"], color:C.amber },
];
boxes.forEach((b, i) => {
const x = 0.3 + i * 3.15;
s.addShape(pptxgen.ShapeType.rect, { x, y:1.95, w:3.0, h:0.4, fill:{color:b.color}, line:{type:"none"}, rounding:0.04 });
s.addText(b.title, { x, y:1.97, w:3.0, h:0.36, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const items = b.items.map((t, j) => ({ text: "• " + t, options: { fontSize:10.5, color:C.text, breakLine: j < b.items.length-1 } }));
s.addShape(pptxgen.ShapeType.rect, { x, y:2.35, w:3.0, h:2.0, fill:{color:C.white}, line:{color:C.silver, pt:1} });
s.addText(items, { x: x+0.1, y:2.4, w:2.8, h:1.9, fontSize:10.5, fontFace:"Calibri", valign:"top", margin:0 });
});
s.addText("Histologic patterns: NSIP · UIP · Organizing Pneumonia · DAH · LIP · Bronchiolitis", {
x:0.3, y:4.45, w:9.4, h:0.3, fontSize:10, color:C.muted, italic:true, align:"center"
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — RA Overview
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Rheumatoid Arthritis — Pulmonary Manifestations", "30–60% of patients; major cause of morbidity & mortality", C.navy);
addFooter(s, 4, TOTAL);
// Left column — manifestations
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.15, w:4.5, h:0.35, fill:{color:C.navy}, line:{type:"none"} });
s.addText("MANIFESTATIONS", { x:0.3, y:1.15, w:4.5, h:0.35, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const manifestations = [
["Interstitial Lung Disease (ILD)", "UIP or NSIP pattern; >60% on HRCT; clinically apparent ~10%"],
["Pleural Disease", "40% at autopsy; clinically apparent 5%; exudative, low glucose"],
["Pulmonary Nodules", "Necrobiotic; must exclude malignancy aggressively"],
["Caplan Syndrome", "RA + pneumoconiosis → upper lobe nodular fibrosis"],
["Follicular Bronchiolitis", "Lymphoid hyperplasia along airways"],
["Pulmonary Hypertension", "Least common; associated with Raynaud phenomenon"],
["Diffuse Alveolar Hemorrhage", "Via pulmonary capillaritis (rare)"],
];
manifestations.forEach(([title, desc], i) => {
const y = 1.55 + i * 0.52;
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y, w:0.08, h:0.3, fill:{color:C.sky}, line:{type:"none"} });
s.addText([
{ text: title + "\n", options: { bold: true, fontSize: 11, color: C.text } },
{ text: desc, options: { fontSize: 10, color: C.muted } }
], { x:0.5, y, w:4.2, h:0.48, fontFace:"Calibri", margin:0, valign:"top" });
});
// Right — image + risk factors
s.addShape(pptxgen.ShapeType.rect, { x:5.0, y:1.15, w:4.7, h:0.35, fill:{color:C.navy}, line:{type:"none"} });
s.addText("RISK FACTORS FOR RA-ILD", { x:5.0, y:1.15, w:4.7, h:0.35, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const rfs = ["Male sex (ILD 3:1, though RA 2–4:1 F:M)", "High rheumatoid factor titers", "Anti-CCP antibodies (independent of smoking)", "Subcutaneous nodules + systemic complications", "MUC5B promoter variant rs35705950", "Elevated serum KL-6"];
s.addText(rfs.map((r,i) => ({ text:"• "+r, options:{fontSize:11, color:C.text, breakLine: i<rfs.length-1} })),
{ x:5.1, y:1.55, w:4.5, h:2.0, fontFace:"Calibri", valign:"top", margin:0 });
// Image
if (!imgs[0].error) {
s.addImage({ data: imgs[0].base64, x:5.0, y:3.65, w:4.7, h:1.5 });
s.addText("HRCT: NSIP pattern in RA-ILD — ground-glass, septal thickening, lymphadenopathy", {
x:5.0, y:5.15, w:4.7, h:0.2, fontSize:7.5, color:C.muted, italic:true, align:"center"
});
}
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — RA Treatment
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "RA-ILD — Prognosis & Treatment", "Goldman-Cecil Medicine 2024 · ACR/CHEST 2023 Guideline", C.navy);
addFooter(s, 5, TOTAL);
// Prognosis box
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:4.4, h:3.9, fill:{color:C.white}, line:{color:C.silver, pt:1}, rounding:0.05 });
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:4.4, h:0.38, fill:{color:C.navy}, line:{type:"none"}, rounding:0.04 });
s.addText("PROGNOSIS", { x:0.3, y:1.1, w:4.4, h:0.38, fontSize:12, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const prog = [
"UIP pattern → worse prognosis than NSIP",
"DLCO correlates with mortality",
"Chronic fibrosis → ↑ risk of adenocarcinoma/BAC",
"Pulmonary HTN → cor pulmonale",
"ILD may PRECEDE arthritis by months–years in 20%",
];
s.addText(prog.map((p,i) => ({ text:"• "+p, options:{fontSize:11, color:C.text, breakLine:i<prog.length-1} })),
{ x:0.45, y:1.55, w:4.1, h:2.0, fontFace:"Calibri", valign:"top", margin:0 });
s.addShape(pptxgen.ShapeType.rect, { x:0.35, y:3.6, w:4.3, h:0.06, fill:{color:C.sky}, line:{type:"none"} });
s.addText("⚠ Methotrexate generally avoided — can itself cause ILD", {
x:0.35, y:3.7, w:4.3, h:0.5, fontSize:10.5, color:C.red, bold:true, italic:true, fontFace:"Calibri", valign:"top"
});
// Treatment steps
s.addShape(pptxgen.ShapeType.rect, { x:5.1, y:1.1, w:4.6, h:3.9, fill:{color:C.white}, line:{color:C.silver, pt:1}, rounding:0.05 });
s.addShape(pptxgen.ShapeType.rect, { x:5.1, y:1.1, w:4.6, h:0.38, fill:{color:C.teal}, line:{type:"none"}, rounding:0.04 });
s.addText("TREATMENT (ACR/CHEST 2023)", { x:5.1, y:1.1, w:4.6, h:0.38, fontSize:12, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const steps = [
["First Line", "Glucocorticoids (conditionally recommended for RA-ILD)", C.teal],
["Antifibrotic", "Nintedanib 150 mg BID — attenuates progressive ILD", C.sky],
["Immunosuppressive", "Mycophenolate, Azathioprine, Cyclophosphamide", C.navy],
["Biologics", "Rituximab (anti-CD20) — second-line or steroid-resistant", C.navy],
["Note", "STRONG recommendation: avoid glucocorticoids as first-line in SSc-ILD (differs from RA)", C.amber],
];
steps.forEach(([title, desc, color], i) => {
const y = 1.6 + i * 0.66;
s.addShape(pptxgen.ShapeType.rect, { x:5.2, y, w:1.1, h:0.3, fill:{color}, line:{type:"none"}, rounding:0.04 });
s.addText(title, { x:5.2, y, w:1.1, h:0.3, fontSize:9, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(desc, { x:6.4, y, w:3.2, h:0.5, fontSize:10.5, color:C.text, fontFace:"Calibri", valign:"middle", margin:0 });
});
// Guideline badge
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:5.02, w:9.4, h:0.28, fill:{color:C.navy}, line:{type:"none"}, rounding:0.03 });
s.addText("2023 ACR/CHEST Guideline (PMID 38973731) · 2026 ERS/EULAR CTD-ILD Guidelines (PMID 40912974)", {
x:0.3, y:5.02, w:9.4, h:0.28, fontSize:9, color:C.silver, align:"center", valign:"middle", margin:0
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — Systemic Sclerosis Overview
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Systemic Sclerosis — Pulmonary Manifestations", "ILD in 30–100%; PAH in limited SSc; leading cause of death", C.teal);
addFooter(s, 6, TOTAL);
// Two main compartments
const panels = [
{
title: "INTERSTITIAL LUNG DISEASE",
color: C.teal,
items: [
"Most common complication; HRCT shows ILD in >90%",
"Histology: NSIP pattern (cellular → fibrotic) >>> UIP",
"Ground-glass on HRCT = early inflammatory phase",
"Symptoms: dyspnea on exertion, cough, bibasilar crackles",
"Clubbing unusual (capillary destruction in nail beds)",
"Physiologic: restrictive ↓FVC, ↓DLCO, preserved FEV1/FVC",
"More common in diffuse SSc; also in lcSSc (CREST)",
"Scar carcinoma (adenocarcinoma/BAC) — first described in SSc",
]
},
{
title: "PULMONARY ARTERIAL HYPERTENSION",
color: C.navy,
items: [
"More common in LIMITED cutaneous SSc (lcSSc/CREST)",
"Anticentromere antibodies → predict PAH",
"Anti-Scl-70 antibodies → predict ILD/fibrosis",
"Key clue: disproportionate ↓DLCO vs lung volumes",
"Mean PAP ≥45 mmHg → ~33% 3-year survival",
"Treated with endothelin antagonists, PDE-5 inhibitors, prostacyclins",
"SSc sine scleroderma: ILD/PAH precede skin changes",
"Dilated main PA (>29mm) on CT suggests PAH",
]
}
];
panels.forEach((p, i) => {
const x = 0.25 + i * 5.0;
s.addShape(pptxgen.ShapeType.rect, { x, y:1.1, w:4.6, h:0.38, fill:{color:p.color}, line:{type:"none"} });
s.addText(p.title, { x, y:1.1, w:4.6, h:0.38, fontSize:10.5, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(p.items.map((t, j) => ({ text:"• "+t, options:{fontSize:10, color:C.text, breakLine:j<p.items.length-1} })),
{ x:x+0.1, y:1.52, w:4.4, h:3.85, fontFace:"Calibri", valign:"top", margin:0 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — SSc HRCT Images
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:"0A1E35"}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:0.18, h:5.625, fill:{color:C.teal}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0.18, y:0, w:9.82, h:0.75, fill:{color:C.navy}, line:{type:"none"} });
s.addText("Systemic Sclerosis — Imaging", {
x:0.35, y:0.08, w:9.4, h:0.6, fontSize:20, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0
});
addFooter(s, 7, TOTAL);
if (!imgs[1].error) {
s.addImage({ data: imgs[1].base64, x:0.25, y:0.85, w:4.6, h:3.1 });
s.addText("GGO (NSIP), subpleural distribution + dilated esophagus (white arrow)\nSystemic Sclerosis HRCT — Fishman's Pulmonary Diseases", {
x:0.25, y:3.95, w:4.6, h:0.55, fontSize:9, color:C.silver, italic:true, align:"center"
});
}
if (!imgs[2].error) {
s.addImage({ data: imgs[2].base64, x:5.15, y:0.85, w:4.6, h:3.1 });
s.addText("Traction bronchiectasis + dilated main PA (32mm) indicating PAH\nSSc advanced ILD with pulmonary hypertension", {
x:5.15, y:3.95, w:4.6, h:0.55, fontSize:9, color:C.silver, italic:true, align:"center"
});
}
if (!imgs[6].error) {
s.addImage({ data: imgs[6].base64, x:0.25, y:4.55, w:9.5, h:0.7 });
}
s.addText("NSIP progression over 10 months: cellular GGO → fibrotic traction bronchiectasis", {
x:0.25, y:5.25, w:9.5, h:0.22, fontSize:8, color:C.silver, italic:true, align:"center"
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — SSc Treatment Guidelines
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "SSc-ILD Treatment — Evidence-Based Guidelines", "ATS 2024 · EULAR 2023 · ACR/CHEST 2023", C.teal);
addFooter(s, 8, TOTAL);
const drugs = [
{ name:"Mycophenolate Mofetil", dose:"1500 mg BID", rec:"STRONG — ATS 2024 first-line\nSimilar efficacy to CYC, fewer side effects", color:C.green },
{ name:"Nintedanib", dose:"150 mg BID", rec:"SUGGEST — ATS 2024 (alone or + MMF)\nAttenuates FVC decline (SENSCIS trial)", color:C.teal },
{ name:"Tocilizumab", dose:"162 mg SC weekly", rec:"SUGGEST — mitigates decline\nElevated inflammatory markers + short disease", color:C.teal },
{ name:"Rituximab", dose:"1000 mg IV ×2 (2 wk apart)", rec:"SUGGEST — alternate immunosuppression\nRefractory or anti-Scl-70 positive", color:C.navy },
{ name:"Cyclophosphamide", dose:"2.0 mg/kg/day oral", rec:"SUGGEST — second-line only\nMore side effects than MMF", color:C.muted },
{ name:"Glucocorticoids", dose:"—", rec:"⚠ STRONG AGAINST as first-line in SSc-ILD\n(ACR/CHEST 2023 Strong Recommendation)", color:C.red },
];
drugs.forEach((d, i) => {
const col = i < 3 ? 0 : 1;
const row = i < 3 ? i : i - 3;
const x = col === 0 ? 0.3 : 5.2;
const y = 1.15 + row * 1.38;
s.addShape(pptxgen.ShapeType.rect, { x, y, w:4.6, h:1.3, fill:{color:C.white}, line:{color:C.silver, pt:1}, rounding:0.05 });
s.addShape(pptxgen.ShapeType.rect, { x, y, w:1.2, h:1.3, fill:{color:d.color}, line:{type:"none"}, rounding:0.04 });
s.addText(d.name, { x, y:y+0.1, w:1.2, h:0.5, fontSize:9.5, bold:true, color:C.white, align:"center", fontFace:"Calibri", margin:0 });
s.addText(d.dose, { x, y:y+0.62, w:1.2, h:0.5, fontSize:9, color:C.white, align:"center", fontFace:"Calibri", italic:true, margin:0 });
s.addText(d.rec, { x:x+1.3, y:y+0.15, w:3.2, h:1.0, fontSize:10, color:C.text, fontFace:"Calibri", valign:"middle", margin:0 });
});
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:5.02, w:9.4, h:0.28, fill:{color:C.navy}, line:{type:"none"} });
s.addText("ATS Guideline PMID 37772985 · EULAR 2023 Update PMID 39874231 · ACR/CHEST 2023 PMID 38973731", {
x:0.3, y:5.02, w:9.4, h:0.28, fontSize:8.5, color:C.silver, align:"center", valign:"middle", margin:0
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — SLE
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Systemic Lupus Erythematosus — Pulmonary Manifestations", "Predominantly vasculitic mechanism; diverse compartment involvement", C.navy);
addFooter(s, 9, TOTAL);
// Left — manifestations table
const sle_items = [
["Pleuritis / Pleural effusion", "Most common; exudative; bilateral possible", C.teal],
["Acute lupus pneumonitis", "GGO + consolidation; mimics infection", C.navy],
["Diffuse Alveolar Hemorrhage", "Via pulmonary capillaritis; life-threatening", C.red],
["Thromboembolic disease", "Antiphospholipid antibodies → PE", C.amber],
["Shrinking Lung Syndrome", "Diaphragm weakness; resistant to steroids", C.muted],
["Chronic ILD", "NSIP or LIP patterns; less common", C.navy],
["Pulmonary Hypertension", "Via vasculitis or recurrent emboli", C.teal],
];
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.12, w:5.5, h:0.35, fill:{color:C.navy}, line:{type:"none"} });
s.addText("MANIFESTATIONS", { x:0.3, y:1.12, w:5.5, h:0.35, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
sle_items.forEach(([title, desc, color], i) => {
const y = 1.52 + i * 0.54;
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y, w:0.28, h:0.28, fill:{color}, line:{type:"none"}, rounding:0.03 });
s.addText([
{ text: title, options: { bold:true, fontSize:11, color:C.text } },
{ text: " — "+desc, options: { fontSize:10, color:C.muted } }
], { x:0.65, y:y+0.01, w:5.1, h:0.42, fontFace:"Calibri", valign:"middle", margin:0 });
});
// Right — LIP CT image
s.addShape(pptxgen.ShapeType.rect, { x:6.0, y:1.12, w:3.7, h:0.35, fill:{color:C.navy}, line:{type:"none"} });
s.addText("CT: LIP IN SLE / SJÖGREN", { x:6.0, y:1.12, w:3.7, h:0.35, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
if (!imgs[5].error) {
s.addImage({ data: imgs[5].base64, x:6.0, y:1.5, w:3.7, h:3.2 });
s.addText("Lymphoid Interstitial Pneumonia (LIP): cysts within\nground-glass attenuation in lower lobes\n— Goldman-Cecil Medicine, p.948", {
x:6.0, y:4.72, w:3.7, h:0.6, fontSize:8.5, color:C.muted, italic:true, align:"center"
});
}
s.addText("Treatment: Hydroxychloroquine · Steroids · Immunosuppressives · Always exclude infection first", {
x:0.3, y:5.15, w:5.5, h:0.28, fontSize:9, color:C.muted, italic:true
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — DM/PM + Sjögren + MCTD
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Myositis, Sjögren Syndrome & Mixed CTD", "Dermatomyositis/Polymyositis · Sjögren · MCTD", C.teal);
addFooter(s, 10, TOTAL);
const panels = [
{
title: "DERMATOMYOSITIS / POLYMYOSITIS",
color: C.teal,
items: [
"Heterogeneous ILD: NSIP, UIP, OP, DAD",
"Anti-Jo-1 (antisynthetase): mechanic's hands + ILD",
"ILD may precede muscle disease by months–years",
"ILD severity ≠ muscle disease severity",
"Acute DAD pattern → high mortality despite tx",
"OP pattern → good response to steroids",
"DAH via capillaritis → steroids + CYC",
"Tx: steroids → CYC, CSA, MMF, IVIG, Rituximab",
]
},
{
title: "SJÖGREN SYNDROME",
color: C.navy,
items: [
"LIP most frequent ILD subtype",
"Cryptogenic organizing pneumonia also common",
"Bronchiectasis + recurrent infections (inspissated mucus)",
"Usually good response to steroids/immunosuppressives",
"Screen all cutaneous sarcoidosis annually",
]
},
{
title: "MIXED CTD (MCTD)",
color: C.amber,
items: [
"Overlap: SSc + SLE + RA + PM/DM",
"Anti-RNP antibody is characteristic",
"Pleuropulmonary in 20–80% (often subclinical)",
"PAH: 5-yr survival drops 96% → 73%",
"Medium-vessel pulmonary artery vasculitis",
"Antiphospholipid syndrome → thromboembolic PAH",
]
}
];
panels.forEach((p, i) => {
const x = 0.2 + i * 3.25;
const w = i === 0 ? 3.1 : (i === 1 ? 3.0 : 3.1);
s.addShape(pptxgen.ShapeType.rect, { x, y:1.1, w, h:0.38, fill:{color:p.color}, line:{type:"none"} });
s.addText(p.title, { x, y:1.1, w, h:0.38, fontSize:9.5, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(p.items.map((t, j) => ({ text:"• "+t, options:{fontSize:10, color:C.text, breakLine:j<p.items.length-1} })),
{ x:x+0.08, y:1.52, w:w-0.12, h:3.8, fontFace:"Calibri", valign:"top", margin:0 });
});
if (!imgs[4].error) {
// Small image in MCTD panel bottom
s.addImage({ data: imgs[4].base64, x:6.55, y:3.8, w:3.2, h:1.5 });
s.addText("MCTD ILD: reticulation + traction bronchiectasis (HRCT)", {
x:6.55, y:5.32, w:3.2, h:0.2, fontSize:7.5, color:C.muted, italic:true, align:"center"
});
}
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — Ankylosing Spondylitis
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Other CTDs & Ankylosing Spondylitis", "Ankylosing Spondylitis · Drug-Induced ILD · Overview", C.navy);
addFooter(s, 11, TOTAL);
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:9.4, h:0.38, fill:{color:C.navy}, line:{type:"none"} });
s.addText("ANKYLOSING SPONDYLITIS", { x:0.3, y:1.1, w:9.4, h:0.38, fontSize:12, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText([
{ text:"Upper lobe bilateral reticulonodular infiltrates", options:{bold:true, fontSize:13, color:C.text, breakLine:true} },
{ text:"with cyst formation due to parenchymal destruction\n\n", options:{fontSize:12, color:C.muted, breakLine:true} },
{ text:"• Apical fibrobullous disease — no proven effective therapy\n", options:{fontSize:12, color:C.text, breakLine:true} },
{ text:"• Restricted chest expansion → ↓ lung volumes\n", options:{fontSize:12, color:C.text, breakLine:true} },
{ text:"• Secondary aspergilloma may form in apical bullae\n\n", options:{fontSize:12, color:C.text, breakLine:true} },
{ text:"DRUG-INDUCED ILD IN CTDs\n", options:{bold:true, fontSize:13, color:C.navy, breakLine:true} },
{ text:"Methotrexate (RA), Leflunomide, TNF-inhibitors, and biologics can all induce ILD\n", options:{fontSize:12, color:C.text, breakLine:true} },
{ text:"Often indistinguishable from primary CTD-ILD → drug holiday essential before escalating immunosuppression", options:{fontSize:12, color:C.text} },
], { x:0.5, y:1.65, w:9.0, h:3.5, fontFace:"Calibri", valign:"top", margin:0 });
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — Sarcoidosis
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Sarcoidosis — Pulmonary Manifestations", "Systemic non-caseating granulomatous disease; >90% pulmonary involvement", C.teal);
addFooter(s, 12, TOTAL);
// Staging table
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:4.5, h:0.38, fill:{color:C.teal}, line:{type:"none"} });
s.addText("CXR STAGING", { x:0.3, y:1.1, w:4.5, h:0.38, fontSize:12, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
const stages = [
["Stage 0", "Normal", C.green],
["Stage I", "Bilateral hilar lymphadenopathy only", C.teal],
["Stage II", "Hilar adenopathy + parenchymal infiltrates", C.sky],
["Stage III", "Parenchymal infiltrates without adenopathy", C.amber],
["Stage IV", "Pulmonary fibrosis / honeycombing", C.red],
];
stages.forEach(([stage, desc, color], i) => {
const y = 1.55 + i * 0.56;
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y, w:1.2, h:0.38, fill:{color}, line:{type:"none"} });
s.addText(stage, { x:0.3, y, w:1.2, h:0.38, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(desc, { x:1.6, y:y+0.04, w:3.1, h:0.3, fontSize:11, color:C.text, fontFace:"Calibri", valign:"middle", margin:0 });
});
// Key features
const features = [
"Non-caseating granulomas; ACE-secreting epithelioid cells → ↑serum ACE",
"ACE reflects total granuloma burden (specificity ~85%)",
"BAL: CD4/CD8 ratio >3.5 supports diagnosis",
"Airway obstruction in bronchial sarcoidosis",
"Pulmonary HTN — vasocentric granuloma growth; treat with bosentan",
"All cutaneous sarcoidosis → annual CXR + PFTs even if asymptomatic",
"Aspergilloma may form in Stage IV cavities",
"Treatment: corticosteroids; refractory → hydroxychloroquine, methotrexate, azathioprine",
];
s.addShape(pptxgen.ShapeType.rect, { x:5.0, y:1.1, w:4.7, h:0.38, fill:{color:C.teal}, line:{type:"none"} });
s.addText("KEY FEATURES & MANAGEMENT", { x:5.0, y:1.1, w:4.7, h:0.38, fontSize:12, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addText(features.map((f, j) => ({ text:"• "+f, options:{fontSize:10.5, color:C.text, breakLine:j<features.length-1} })),
{ x:5.1, y:1.55, w:4.5, h:3.2, fontFace:"Calibri", valign:"top", margin:0 });
// Image
if (!imgs[3].error) {
s.addImage({ data: imgs[3].base64, x:0.3, y:3.68, w:4.5, h:1.65 });
s.addText("Stage I Sarcoidosis: classic bilateral hilar lymphadenopathy ('potato nodes')", {
x:0.3, y:5.33, w:4.5, h:0.22, fontSize:8, color:C.muted, italic:true, align:"center"
});
}
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — ANCA Vasculitides
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "ANCA-Associated Vasculitides — Pulmonary Involvement", "GPA (Wegener's) · EGPA (Churg-Strauss) · MPA", C.navy);
addFooter(s, 13, TOTAL);
const vasculitides = [
{
title: "GRANULOMATOSIS WITH POLYANGIITIS (GPA)",
abbr: "PR3-ANCA (c-ANCA) +ve",
color: C.navy,
items: [
"Classic triad: upper airway + lower airway + renal",
"Pulmonary: nodules (often cavitating), DAH, infiltrates",
"Subglottic stenosis, saddle-nose deformity",
"CXR/CT: bilateral nodules ± cavitation, airspace disease",
"Tx: Rituximab + high-dose steroids (induction)\nThen azathioprine/MMF (maintenance)",
]
},
{
title: "EOSINOPHILIC GPA (EGPA / Churg-Strauss)",
abbr: "MPO-ANCA (p-ANCA) +ve",
color: C.teal,
items: [
"Triad: asthma + eosinophilia + systemic vasculitis",
"Phase 1: allergic rhinitis + asthma",
"Phase 2: peripheral eosinophilia + infiltrates",
"Phase 3: systemic necrotizing vasculitis",
"Skin: palpable purpura, indurated nodules (scalp, extensors)",
"Histology: necrotizing granulomas + tissue eosinophilia",
"Tx: high-dose steroids ± cyclophosphamide",
]
},
{
title: "GOODPASTURE SYNDROME",
abbr: "Anti-GBM antibodies",
color: C.amber,
items: [
"DAH + rapidly progressive glomerulonephritis",
"Linear IgG deposition on GBM and alveolar BM",
"Hemoptysis ± renal failure",
"Tx: plasma exchange + immunosuppression",
]
}
];
vasculitides.forEach((v, i) => {
const x = 0.2 + i * 3.27;
const w = 3.1;
s.addShape(pptxgen.ShapeType.rect, { x, y:1.12, w, h:0.36, fill:{color:v.color}, line:{type:"none"} });
s.addText(v.title, { x, y:1.12, w, h:0.36, fontSize:9, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
s.addShape(pptxgen.ShapeType.rect, { x, y:1.48, w, h:0.28, fill:{color:C.silver}, line:{type:"none"} });
s.addText(v.abbr, { x, y:1.48, w, h:0.28, fontSize:9.5, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
s.addText(v.items.map((t, j) => ({ text:"• "+t, options:{fontSize:10, color:C.text, breakLine:j<v.items.length-1} })),
{ x:x+0.08, y:1.8, w:w-0.14, h:3.6, fontFace:"Calibri", valign:"top", margin:0 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — Screening & Monitoring Guidelines (ACR/CHEST 2023)
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "2023 ACR/CHEST Screening & Monitoring Guidelines", "First joint ACR/CHEST guideline for ILD in systemic autoimmune rheumatic diseases", C.teal);
addFooter(s, 14, TOTAL);
// Source box
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y:1.1, w:9.4, h:0.5, fill:{color:C.teal}, line:{type:"none"}, rounding:0.04 });
s.addText("Johnson SR et al. Arthritis Rheumatol 2024 · PMID 38973714 | Covers: RA, SSc, IIM, MCTD, Sjögren disease", {
x:0.3, y:1.1, w:9.4, h:0.5, fontSize:11, color:C.white, align:"center", valign:"middle", margin:0
});
const recs = [
{ heading:"CONDITIONALLY RECOMMEND (Screening)", items:["PFTs (spirometry, DLCO) for all at-risk SARDs","HRCT chest for all at-risk SARDs"], color:C.green },
{ heading:"CONDITIONALLY RECOMMEND AGAINST (Screening)", items:["6-minute walk test distance","Chest radiography alone","Ambulatory desaturation testing","Bronchoscopy"], color:C.amber },
{ heading:"STRONGLY RECOMMEND AGAINST", items:["Surgical lung biopsy for screening purposes"], color:C.red },
{ heading:"MONITORING (Conditionally Recommend)", items:["PFTs at regular intervals","HRCT chest","Ambulatory desaturation testing"], color:C.teal },
{ heading:"MONITORING (Against)", items:["6MWD, chest radiography, or bronchoscopy for routine monitoring"], color:C.muted },
{ heading:"DISEASE-SPECIFIC RISK FACTORS", items:["SSc: anti-Scl-70, dcSSc → higher risk","RA: anti-CCP, MUC5B, smoking","IIM: anti-Jo-1/MDA5 → mandatory ILD screen","MCTD: anti-RNP, esp. SSc overlap"], color:C.navy },
];
recs.forEach((r, i) => {
const col = i < 3 ? 0 : 1;
const row = i < 3 ? i : i - 3;
const x = col === 0 ? 0.3 : 5.2;
const y = 1.72 + row * 1.2;
s.addShape(pptxgen.ShapeType.rect, { x, y, w:4.6, h:1.12, fill:{color:C.white}, line:{color:C.silver, pt:1}, rounding:0.04 });
s.addShape(pptxgen.ShapeType.rect, { x, y, w:4.6, h:0.28, fill:{color:r.color}, line:{type:"none"}, rounding:0.04 });
s.addText(r.heading, { x:x+0.05, y:y, w:4.5, h:0.28, fontSize:9, bold:true, color:C.white, valign:"middle", margin:0 });
s.addText(r.items.map((t, j) => ({ text:"• "+t, options:{fontSize:10, color:C.text, breakLine:j<r.items.length-1} })),
{ x:x+0.1, y:y+0.32, w:4.4, h:0.75, fontFace:"Calibri", valign:"top", margin:0 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — Summary Table
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Summary Table — Pulmonary Involvement by Disease", null, C.navy);
addFooter(s, 15, TOTAL);
const headers = ["Disease", "Dominant ILD", "Pleura", "PAH", "Hallmark Feature"];
const rows = [
["Rheumatoid\nArthritis", "UIP, NSIP", "Common\n(exudate, ↓glucose)", "Uncommon", "Nodules; Caplan\nsynd.; Anti-CCP"],
["Systemic\nSclerosis", "NSIP >> UIP", "Uncommon\n(fibrous adh.)", "Major (lcSSc)","Anti-Scl70→ILD\nAntiCent→PAH"],
["SLE", "LIP, NSIP", "Common\n(pleuritis)", "Emboli/vascu.","Shrinking lung;\nAPS; DAH"],
["DM / PM", "NSIP, UIP,\nOP, DAD", "Rare", "Rare", "Anti-Jo-1;\nDAD=high mortality"],
["Sjögren", "LIP, OP", "Rare", "Rare", "Bronchiectasis;\ngood steroid resp."],
["MCTD", "NSIP", "Pleuritis\n(40%)", "Significant", "Anti-RNP;\n5yr surv↓ w/PAH"],
["Sarcoidosis", "Granulomatous", "Rare", "Vasocentric", "ACE↑; Stage I–IV;\nBHL"],
["GPA", "Nodules/\ncavities/DAH","Rare", "Rare", "PR3-ANCA;\nsaddle-nose"],
["EGPA", "Eosinophilic\ninfilt.", "Rare", "Rare", "Asthma +\neosinophilia"],
];
const colW = [1.35, 1.45, 1.35, 1.15, 2.05];
const colX = [0.22, 1.57, 3.02, 4.37, 5.52];
const rowH = 0.49;
const startY = 1.1;
// Header row
headers.forEach((h, c) => {
s.addShape(pptxgen.ShapeType.rect, { x:colX[c], y:startY, w:colW[c]-0.04, h:0.4, fill:{color:C.navy}, line:{type:"none"} });
s.addText(h, { x:colX[c], y:startY, w:colW[c]-0.04, h:0.4, fontSize:10, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
});
// Data rows
rows.forEach((row, r) => {
const y = startY + 0.43 + r * rowH;
const bg = r % 2 === 0 ? C.white : C.offWhite;
s.addShape(pptxgen.ShapeType.rect, { x:colX[0], y, w:9.35, h:rowH-0.02, fill:{color:bg}, line:{color:C.silver, pt:0.5} });
row.forEach((cell, c) => {
s.addText(cell, { x:colX[c]+0.04, y:y+0.02, w:colW[c]-0.1, h:rowH-0.06, fontSize:9, color:C.text, fontFace:"Calibri", valign:"middle", align:"center", margin:0 });
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 16 — Recent Guidelines Overview
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.offWhite}, line:{type:"none"} });
addSlideHeader(s, "Recent Practice Guidelines — 2023–2026", "Major updates to CTD-ILD diagnosis and management", C.amber);
addFooter(s, 16, TOTAL);
const guidelines = [
{
org: "ACR/CHEST 2023",
title: "Screening & Monitoring of ILD in SARDs",
pmid: "38973714",
year: "2024 Aug",
key: "HRCT + PFTs recommended for screening; strongly against surgical biopsy; 15 recommendations for RA, SSc, IIM, MCTD, Sjögren",
color: C.teal
},
{
org: "ACR/CHEST 2023",
title: "Treatment of ILD in SARDs",
pmid: "38973731",
year: "2024 Aug",
key: "35 recommendations. STRONG: glucocorticoids AGAINST in SSc-ILD (first-line or after progression). Mycophenolate first-line for SSc.",
color: C.navy
},
{
org: "ATS 2024",
title: "Treatment of SSc-ILD Clinical Practice Guideline",
pmid: "37772985",
year: "2024 Jan",
key: "RECOMMENDS mycophenolate. SUGGESTS: cyclophosphamide, rituximab, tocilizumab, nintedanib, nintedanib+MMF combination.",
color: C.teal
},
{
org: "EULAR 2023",
title: "Treatment of Systemic Sclerosis: 2023 Update",
pmid: "39874231",
year: "2025 Jan",
key: "22 recommendations. First EULAR recommendations for MMF, nintedanib, rituximab and tocilizumab for SSc skin fibrosis and ILD. First-line PAH combination therapy.",
color: C.navy
},
{
org: "ERS/EULAR 2026",
title: "CTD-ILD Clinical Practice Guidelines",
pmid: "40912974",
year: "2026 Jan",
key: "25 PICO + 28 narrative questions. Covers SSc, RA, IIM, Sjögren, SLE, MCTD. Screening, diagnostic, monitoring and treatment algorithms.",
color: C.amber
},
];
guidelines.forEach((g, i) => {
const y = 1.1 + i * 0.88;
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y, w:9.4, h:0.82, fill:{color:C.white}, line:{color:C.silver, pt:1}, rounding:0.04 });
s.addShape(pptxgen.ShapeType.rect, { x:0.3, y, w:1.4, h:0.82, fill:{color:g.color}, line:{type:"none"}, rounding:0.04 });
s.addText([
{ text: g.org + "\n", options:{bold:true, fontSize:10.5, color:C.white, breakLine:true} },
{ text: g.year, options:{fontSize:9, color:C.silver} }
], { x:0.3, y:y+0.05, w:1.4, h:0.72, align:"center", valign:"middle", margin:0 });
s.addText([
{ text: g.title + "\n", options:{bold:true, fontSize:10.5, color:C.text, breakLine:true} },
{ text: g.key, options:{fontSize:9.5, color:C.muted} }
], { x:1.8, y:y+0.06, w:6.8, h:0.7, fontFace:"Calibri", valign:"top", margin:0 });
s.addShape(pptxgen.ShapeType.rect, { x:8.7, y:y+0.2, w:0.9, h:0.38, fill:{color:C.sky}, line:{type:"none"}, rounding:0.04 });
s.addText("PMID\n"+g.pmid, { x:8.7, y:y+0.2, w:0.9, h:0.38, fontSize:7.5, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 17 — Key Diagnostic Imaging Concepts
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:"0A1E35"}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:0.18, h:5.625, fill:{color:C.teal}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0.18, y:0, w:9.82, h:0.75, fill:{color:C.navy}, line:{type:"none"} });
s.addText("Key Diagnostic Imaging — CTD-ILD & Sarcoidosis", {
x:0.35, y:0.08, w:9.4, h:0.6, fontSize:20, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0
});
addFooter(s, 17, TOTAL);
const imageData = [
{ img: imgs[0], caption:"NSIP in CTD-ILD:\nGround-glass + septal thickening, lower lobe predominance" },
{ img: imgs[3], caption:"Stage I Sarcoidosis:\nBilateral hilar lymphadenopathy ('potato nodes')" },
{ img: imgs[1], caption:"SSc HRCT:\nBasilar GGO (NSIP) + dilated esophagus (arrow)" },
{ img: imgs[5], caption:"SLE / Sjögren LIP:\nCysts within GGO, lower lobes" },
];
imageData.forEach((item, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.85;
const y = 0.85 + row * 2.35;
if (!item.img.error) {
s.addImage({ data: item.img.base64, x, y, w:4.5, h:1.9 });
}
s.addText(item.caption, { x, y:y+1.92, w:4.5, h:0.38, fontSize:8.5, color:C.silver, italic:true, align:"center" });
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 18 — References
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{color:C.navy}, line:{type:"none"} });
s.addShape(pptxgen.ShapeType.rect, { x:0, y:0, w:0.18, h:5.625, fill:{color:C.amber}, line:{type:"none"} });
addFooter(s, 18, TOTAL);
s.addText("References", {
x:0.35, y:0.12, w:9.4, h:0.55, fontSize:26, bold:true, color:C.white, fontFace:"Calibri"
});
s.addShape(pptxgen.ShapeType.rect, { x:0.35, y:0.65, w:9.3, h:0.04, fill:{color:C.amber}, line:{type:"none"} });
const refs = [
"1. Goldman-Cecil Medicine, 27th Edition. Philadelphia: Elsevier, 2024. Ch. 80 (Pulmonary Manifestations), Ch. 243–248 (CTDs).",
"2. Fishman's Pulmonary Diseases and Disorders, 6th Edition. McGraw-Hill, 2023. Ch. 58 (CTD-associated Lung Disease).",
"3. Robbins & Cotran Pathologic Basis of Disease, 10th Edition. Philadelphia: Elsevier, 2021. Ch. 15 (Lung).",
"4. Johnson SR et al. 2023 ACR/CHEST Guideline for Screening and Monitoring of ILD in SARDs. Arthritis Rheumatol. 2024;76(8):1076–1089. PMID 38973714.",
"5. Johnson SR et al. 2023 ACR/CHEST Guideline for Treatment of ILD in SARDs. Arthritis Care Res (Hoboken). 2024. PMID 38973731.",
"6. Raghu G et al. Treatment of SSc-ILD: Evidence-based Recommendations. ATS Clinical Practice Guideline. Am J Respir Crit Care Med. 2024;209(2):137–152. PMID 37772985.",
"7. Del Galdo F et al. EULAR recommendations for treatment of systemic sclerosis: 2023 update. Ann Rheum Dis. 2025;84(1):42–55. PMID 39874231.",
"8. Antoniou KM et al. ERS/EULAR clinical practice guidelines for CTD-ILD. Ann Rheum Dis / Eur Respir J. 2026. PMID 40912974 / 40907995.",
"9. Podolanczuk AJ et al. Evaluation and Management of Interstitial Lung Abnormalities. ATS Clinical Statement. AJRCCM. 2025. PMID 40387336.",
];
s.addText(refs.map((r, i) => ({ text: r, options: { fontSize:10, color:i<3 ? C.sky : C.silver, breakLine:i<refs.length-1 } })),
{ x:0.35, y:0.75, w:9.3, h:4.6, fontFace:"Calibri", valign:"top", margin:0 });
}
// ─── Write file ──────────────────────────────────────────────────────────────
const outPath = "/home/daytona/workspace/pulmonary-systemic-disease/Pulmonary_Involvement_Systemic_Disease.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("SUCCESS:", outPath);
}).catch(err => {
console.error("ERROR:", err);
});
cd /home/daytona/workspace/pulmonary-systemic-disease && node build.js 2>&1
cd /home/daytona/workspace/pulmonary-systemic-disease && \ node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_48e3d6603cf401b8ed0bc24fa5a5f9c7313c9e69d26ba46cc1f9d41c2973e007.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4343922dc8e45a24c6bd0f5e07d06786a5c9d42a9f354863f9e2ae4c3155b12b.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_7e425272a39d03cb9b51333bb272f9e8338c72ff50af65de0e8eb810ecda526b.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_d9c6a4a32ac06689439e73fb9a8b21579c2881988acce46b8a31b86419ba7b75.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0ca74a8ba94cd1210c861ae9e39121c86aa90e9b79608d2eb0d5201b2f3cd6c8.jpg" \ "https://cdn.orris.care/cdss_images/47d74c78a935a748ada1511c1d96f9db866b51cba05e816a6cbbbd59e6642e9a.png" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e35c8c488b8bfd30b8129a2b46bb24cd2ba2bacf10aeb1e3b225afe6a5ad9e0d.jpg" \ > /home/daytona/workspace/pulmonary-systemic-disease/images.json 2>&1 echo "exit: $?" wc -c /home/daytona/workspace/pulmonary-systemic-disease/images.json
~/pulmonary-systemic-disease/build.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/pulmonary-systemic-disease/build.js'
cd /home/daytona/workspace/pulmonary-systemic-disease && node build.js 2>&1
grep -n "pptxgen.ShapeType.rect" /home/daytona/workspace/pulmonary-systemic-disease/build.js | head -5
sed -i 's/pptxgen\.ShapeType\.rect/"rect"/g' /home/daytona/workspace/pulmonary-systemic-disease/build.js echo "done, count: $(grep -c '"rect"' /home/daytona/workspace/pulmonary-systemic-disease/build.js)"
node -e " const fs = require('fs'); let src = fs.readFileSync('/home/daytona/workspace/pulmonary-systemic-disease/build.js','utf8'); src = src.replace(/pptxgen\.ShapeType\.rect/g, '\"rect\"'); fs.writeFileSync('/home/daytona/workspace/pulmonary-systemic-disease/build.js', src); console.log('replacements done, occurrences of rect:', (src.match(/\"rect\"/g)||[]).length); "
cd /home/daytona/workspace/pulmonary-systemic-disease && node build.js 2>&1
ls -lh /home/daytona/workspace/pulmonary-systemic-disease/Pulmonary_Involvement_Systemic_Disease.pptx
Pulmonary Involvement Systemic Disease
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Title slide — dark navy design with topic and guideline sources |
| 2 | Outline — all 10 topic sections with color-coded navigation |
| 3 | Introduction — compartment overview (CTDs, vasculitides, granulomatous) |
| 4 | RA — Manifestations — 7 forms of pleuropulmonary disease + risk factors + HRCT image |
| 5 | RA — Treatment — ACR/CHEST 2023 recommendations; methotrexate warning; nintedanib |
| 6 | Systemic Sclerosis — ILD vs PAH side-by-side; antibody associations |
| 7 | SSc Imaging — 3 HRCT panels: GGO, traction bronchiectasis, dilated PA, dilated esophagus |
| 8 | SSc Treatment — Drug table: MMF (STRONG first-line), nintedanib, tocilizumab, rituximab; glucocorticoids STRONG AGAINST |
| 9 | SLE — 7 manifestations + CT image of LIP (cysts/GGO) |
| 10 | DM/PM + Sjögren + MCTD — 3-column with MCTD HRCT image |
| 11 | Ankylosing Spondylitis & Drug-Induced ILD |
| 12 | Sarcoidosis — Stage 0–IV table + Key features + Stage I CXR image |
| 13 | ANCA Vasculitides — GPA, EGPA, Goodpasture 3-column |
| 14 | 2023 ACR/CHEST Screening Guidelines — all 15 recommendations structured by strength |
| 15 | Summary Table — 9 diseases × 5 columns |
| 16 | Recent Guidelines 2023–2026 — 5 guidelines with PMIDs (ACR/CHEST, ATS, EULAR, ERS/EULAR) |
| 17 | Imaging Gallery — 4-panel HRCT/CXR on dark background |
| 18 | References — 9 citations with PMIDs |
make the ppt simple and elegant
ls /home/daytona/workspace/pulmonary-systemic-disease/
~/pulmonary-systemic-disease/build2.js
"use strict";
const pptxgen = require("pptxgenjs");
const fs = require("fs");
// ── Pre-fetched images ────────────────────────────────────────────────────────
// [0] NSIP HRCT (CTD-ILD) [1] SSc HRCT+esophagus [2] SSc traction+PA
// [3] Sarcoidosis CXR BHL [4] MCTD ILD [5] SLE LIP cysts
// [6] SSc NSIP progression
const imgs = JSON.parse(fs.readFileSync(
"/home/daytona/workspace/pulmonary-systemic-disease/images.json", "utf8"
));
// ── Palette ───────────────────────────────────────────────────────────────────
const W = "FFFFFF";
const BG = "F8F7F5"; // warm off-white
const INK = "1C1C1E"; // near-black
const SOFT = "6E6E73"; // muted text
const LINE = "D1D1D6"; // separator line color
const ACC = "1B4F72"; // deep navy accent
const ACC2 = "2980B9"; // medium blue
const CHIP_COLORS = ["1B4F72","2E86AB","A23B72","C85250","E08A2E","2D8A5E"];
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Pulmonary Involvement in Systemic Disease";
const W_SLIDE = 10, H_SLIDE = 5.625;
const TOTAL = 16;
// ── Helpers ───────────────────────────────────────────────────────────────────
/** Thin top accent line + slide number */
function chrome(s, n, accent) {
const a = accent || ACC;
// top rule
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:0.06, fill:{color:a}, line:{type:"none"} });
// bottom slide number
s.addText(`${n} / ${TOTAL}`, {
x:8.8, y:5.42, w:1.0, h:0.18,
fontSize:8, color:LINE, align:"right", fontFace:"Calibri", margin:0
});
}
/** Section label — small caps category above the title */
function sectionLabel(s, label, color) {
s.addText(label.toUpperCase(), {
x:0.55, y:0.26, w:8, h:0.22,
fontSize:9, charSpacing:4, color: color || ACC2,
fontFace:"Calibri", bold:false, margin:0
});
}
/** Main slide title */
function slideTitle(s, title, y) {
s.addText(title, {
x:0.55, y: y !== undefined ? y : 0.5, w:8.9, h:0.55,
fontSize:26, bold:true, color:INK, fontFace:"Calibri", margin:0
});
}
/** Thin horizontal rule */
function rule(s, y, color, x, w) {
s.addShape("rect", {
x: x || 0.55, y, w: w || 8.9, h:0.02,
fill:{color: color || LINE}, line:{type:"none"}
});
}
/** Bullet list block — array of strings */
function bullets(s, items, x, y, w, h, opts) {
const o = opts || {};
const fz = o.fontSize || 12.5;
const col = o.color || INK;
s.addText(
items.map((t,i) => ({
text: t,
options: { bullet:{indent:14}, fontSize:fz, color:col,
breakLine: i < items.length - 1, fontFace:"Calibri" }
})),
{ x, y, w, h, valign:"top", margin:0 }
);
}
/** Chip label */
function chip(s, label, x, y, color) {
const c = color || ACC;
s.addShape("rect", { x, y, w:1.6, h:0.28, fill:{color:c}, line:{type:"none"}, rounding:0.04 });
s.addText(label, { x, y, w:1.6, h:0.28, fontSize:9, bold:true, color:W,
align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
}
/** Image with optional caption */
function img(s, idx, x, y, w, h, caption) {
if (imgs[idx] && !imgs[idx].error) {
s.addImage({ data: imgs[idx].base64, x, y, w, h });
}
if (caption) {
s.addText(caption, {
x, y: y+h+0.05, w, h:0.22,
fontSize:8, color:SOFT, italic:true, align:"center", fontFace:"Calibri", margin:0
});
}
}
/** Two-column layout helper: returns [leftX, rightX, colW] */
const COL = { lx:0.55, rx:5.35, w:4.4 };
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:ACC}, line:{type:"none"} });
// right white panel
s.addShape("rect", { x:5.8, y:0, w:4.2, h:H_SLIDE, fill:{color:W}, line:{type:"none"} });
// thin divider
s.addShape("rect", { x:5.78, y:0.5, w:0.025, h:4.6, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Pulmonary\nInvolvement in\nSystemic Disease", {
x:0.55, y:1.2, w:4.9, h:2.8,
fontSize:34, bold:true, color:W, fontFace:"Calibri", lineSpacingMultiple:1.15
});
s.addText("Connective Tissue Disease · Vasculitides · Sarcoidosis", {
x:0.55, y:4.15, w:4.9, h:0.35,
fontSize:11, color:"A8C4D9", fontFace:"Calibri", italic:true
});
// Right panel content
s.addText("CONTENTS", {
x:6.1, y:0.55, w:3.6, h:0.28,
fontSize:9, charSpacing:4, color:ACC2, fontFace:"Calibri", bold:false
});
const toc = [
"Rheumatoid Arthritis",
"Systemic Sclerosis",
"Systemic Lupus Erythematosus",
"Myositis (DM/PM)",
"Sjögren Syndrome & MCTD",
"Ankylosing Spondylitis",
"Sarcoidosis",
"ANCA Vasculitides",
"Guidelines & Summary",
];
s.addText(
toc.map((t,i) => ({ text:`${i+1}. ${t}`, options:{bullet:false, fontSize:12, color:INK, breakLine:i<toc.length-1, fontFace:"Calibri"} })),
{ x:6.1, y:0.9, w:3.6, h:4.2, valign:"top" }
);
s.addText("May 2026", { x:0.55, y:5.25, w:2, h:0.2, fontSize:8.5, color:"A8C4D9", fontFace:"Calibri" });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 2);
sectionLabel(s, "Introduction");
slideTitle(s, "The Lung as a Target Organ");
rule(s, 1.1);
s.addText(
"Many systemic diseases involve the lung at some point in their course. Virtually every pulmonary compartment may be affected — parenchyma, pleura, vasculature, and airways.",
{ x:0.55, y:1.2, w:8.9, h:0.6, fontSize:13, color:INK, fontFace:"Calibri", lineSpacingMultiple:1.3 }
);
const boxes = [
{ label:"Connective Tissue Diseases", items:["RA · SLE · Systemic Sclerosis","Sjögren · MCTD · AS","Dermatomyositis / Polymyositis"], c:CHIP_COLORS[0] },
{ label:"Vasculitides", items:["GPA (Wegener's)","EGPA (Churg-Strauss)","Goodpasture Syndrome"], c:CHIP_COLORS[2] },
{ label:"Granulomatous", items:["Sarcoidosis","Hypersensitivity Pneumonitis","Berylliosis"], c:CHIP_COLORS[5] },
];
boxes.forEach((b,i) => {
const x = 0.55 + i*3.15;
s.addShape("rect", { x, y:1.9, w:2.95, h:3.45, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addShape("rect", { x, y:1.9, w:2.95, h:0.35, fill:{color:b.c}, line:{type:"none"}, rounding:0.06 });
s.addText(b.label, { x:x+0.1, y:1.9, w:2.75, h:0.35, fontSize:10, bold:true, color:W, valign:"middle", fontFace:"Calibri", margin:0 });
bullets(s, b.items, x+0.15, 2.32, 2.65, 2.8, {fontSize:12});
});
s.addText("Histologic patterns: NSIP · UIP · Organizing Pneumonia · DAH · LIP · Bronchiolitis", {
x:0.55, y:5.28, w:8.9, h:0.22, fontSize:9, color:SOFT, italic:true, align:"center", fontFace:"Calibri"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — RA
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 3);
sectionLabel(s, "Rheumatoid Arthritis");
slideTitle(s, "Pulmonary Manifestations");
rule(s, 1.1);
// Left column
const raItems = [
["Interstitial Lung Disease", "UIP or NSIP pattern; >60% on HRCT; clinical ILD ~10%"],
["Pleural Disease", "40% at autopsy; clinically 5%; exudative, ↓glucose"],
["Pulmonary Nodules", "Necrobiotic; must exclude malignancy"],
["Caplan Syndrome", "RA + pneumoconiosis → upper lobe nodular fibrosis"],
["Follicular Bronchiolitis", "Lymphoid hyperplasia along airways"],
["Pulmonary Hypertension", "Least common; with Raynaud phenomenon"],
];
raItems.forEach(([title, desc], i) => {
const y = 1.22 + i*0.68;
s.addShape("rect", { x:0.55, y:y+0.04, w:0.07, h:0.32, fill:{color:ACC}, line:{type:"none"} });
s.addText(title, { x:0.72, y, w:3.9, h:0.26, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(desc, { x:0.72, y:y+0.26, w:3.9, h:0.3, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
// Right column — image + risk factors
img(s, 0, 5.35, 1.18, 4.4, 2.5, "HRCT: NSIP pattern — ground-glass opacities, septal thickening");
rule(s, 3.82, LINE, 5.35, 4.4);
s.addText("Risk Factors for RA-ILD", { x:5.35, y:3.87, w:4.4, h:0.28, fontSize:10.5, bold:true, color:INK, fontFace:"Calibri" });
bullets(s,
["Male sex (ILD 3:1, though RA 2–4:1 F:M)",
"High RF titers · Anti-CCP antibodies",
"MUC5B promoter variant rs35705950",
"Subcutaneous nodules + systemic complications"],
5.35, 4.18, 4.4, 1.2, {fontSize:10.5}
);
// Caution
s.addShape("rect", { x:0.55, y:5.27, w:4.35, h:0.22, fill:{color:"FEF9EC"}, line:{color:"E08A2E",pt:1}, rounding:0.03 });
s.addText("⚠ Methotrexate generally avoided — can itself cause ILD", {
x:0.6, y:5.27, w:4.25, h:0.22, fontSize:9, color:"9A5B00", fontFace:"Calibri", valign:"middle"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — SSc
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 4);
sectionLabel(s, "Systemic Sclerosis");
slideTitle(s, "ILD & Pulmonary Arterial Hypertension");
rule(s, 1.1);
// ILD panel
s.addText("Interstitial Lung Disease", { x:0.55, y:1.18, w:4.35, h:0.3, fontSize:12, bold:true, color:ACC, fontFace:"Calibri" });
bullets(s, [
"Most common complication — HRCT shows ILD in >90%",
"Dominant pattern: NSIP (cellular → fibrotic) > UIP",
"Ground-glass = inflammatory phase (precedes fibrosis)",
"Restrictive PFTs — ↓FVC, ↓DLCO, preserved ratio",
"More common in diffuse SSc (dcSSc)",
"First ILD associated with scar carcinoma (adenoCA)",
], 0.55, 1.52, 4.35, 2.5, {fontSize:11});
// PAH panel
s.addText("Pulmonary Arterial Hypertension", { x:5.35, y:1.18, w:4.4, h:0.3, fontSize:12, bold:true, color:ACC2, fontFace:"Calibri" });
bullets(s, [
"More common in limited SSc (lcSSc / CREST)",
"Anticentromere Ab → PAH; anti-Scl-70 → ILD",
"Key clue: disproportionate ↓DLCO vs lung volumes",
"Mean PAP ≥45 mmHg → ~33% 3-year survival",
"Treat: ERA + PDE5i ± prostacyclin (combination first-line)",
], 5.35, 1.52, 4.4, 2.1, {fontSize:11});
rule(s, 3.85);
// Images
img(s, 1, 0.55, 3.95, 4.35, 1.42, "SSc HRCT: basal GGO (NSIP) + dilated esophagus (arrow)");
img(s, 2, 5.35, 3.95, 4.4, 1.42, "SSc: traction bronchiectasis + dilated main PA (32 mm → PAH)");
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — SSc Treatment
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 5);
sectionLabel(s, "Systemic Sclerosis — Treatment");
slideTitle(s, "SSc-ILD: Evidence-Based Therapy");
rule(s, 1.1);
const drugs = [
{ name:"Mycophenolate Mofetil", dose:"1500 mg BID", note:"RECOMMENDED — ATS 2024 first-line\nSimilar efficacy to CYC, fewer adverse effects", strength:"1st line", c:"2D8A5E" },
{ name:"Nintedanib", dose:"150 mg BID", note:"SUGGESTED — attenuates FVC decline\n(SENSCIS trial); alone or + MMF", strength:"Add-on", c:ACC },
{ name:"Tocilizumab", dose:"162 mg SC/wk",note:"SUGGESTED — early, inflam. disease\nElevated CRP + short disease duration", strength:"Early", c:ACC2 },
{ name:"Rituximab", dose:"1000 mg IV ×2",note:"SUGGESTED — refractory ILD\nAnti-Scl-70 positive; salvage option", strength:"Salvage", c:"A23B72" },
{ name:"Cyclophosphamide", dose:"2 mg/kg/day", note:"SUGGESTED — second-line only\nMore toxicity than MMF", strength:"2nd line", c:SOFT },
{ name:"Glucocorticoids", dose:"—", note:"STRONG RECOMMENDATION AGAINST\nas first-line in SSc-ILD (ACR/CHEST 2023)", strength:"AVOID", c:"C85250" },
];
drugs.forEach((d,i) => {
const col = i < 3 ? 0 : 1;
const row = i < 3 ? i : i-3;
const x = col === 0 ? 0.55 : 5.35;
const y = 1.22 + row * 1.38;
s.addShape("rect", { x, y, w:4.4, h:1.28, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
// strength chip
s.addShape("rect", { x:x+0.15, y:y+0.12, w:0.85, h:0.24, fill:{color:d.c}, line:{type:"none"}, rounding:0.04 });
s.addText(d.strength, { x:x+0.15, y:y+0.12, w:0.85, h:0.24, fontSize:8, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
s.addText(d.name, { x:x+1.1, y:y+0.1, w:3.15, h:0.28, fontSize:12, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(d.dose, { x:x+1.1, y:y+0.38, w:3.15, h:0.22, fontSize:10, color:SOFT, fontFace:"Calibri", italic:true, margin:0 });
s.addText(d.note, { x:x+0.15, y:y+0.66, w:4.1, h:0.55, fontSize:10, color:INK, fontFace:"Calibri", margin:0 });
});
s.addText("ATS 2024 PMID 37772985 · EULAR 2023 PMID 39874231 · ACR/CHEST 2023 PMID 38973731", {
x:0.55, y:5.33, w:8.9, h:0.2, fontSize:8.5, color:SOFT, align:"center", fontFace:"Calibri"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — SLE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 6);
sectionLabel(s, "Systemic Lupus Erythematosus");
slideTitle(s, "Pulmonary Manifestations");
rule(s, 1.1);
const sleItems = [
["Pleuritis / Pleural effusion","Most common; exudative; bilateral possible","2D8A5E"],
["Acute Lupus Pneumonitis","GGO + consolidation; mimics acute infection",ACC],
["Diffuse Alveolar Hemorrhage","Via pulmonary capillaritis; life-threatening","C85250"],
["Thromboembolic Disease","APS / antiphospholipid Ab → PE","E08A2E"],
["Shrinking Lung Syndrome","Diaphragm weakness; resistant to corticosteroids",SOFT],
["Pulmonary Hypertension","Via vasculitis or recurrent emboli",ACC2],
];
sleItems.forEach(([title, desc, c], i) => {
const y = 1.22 + i*0.68;
s.addShape("rect", { x:0.55, y:y+0.05, w:0.07, h:0.3, fill:{color:c}, line:{type:"none"} });
s.addText(title, { x:0.72, y, w:3.6, h:0.28, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(desc, { x:0.72, y:y+0.28, w:3.6, h:0.28, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
// Right — LIP CT image
img(s, 5, 5.1, 1.18, 4.65, 3.5, "CT (Goldman-Cecil p.948): LIP in SLE — cysts within ground-glass attenuation, lower lobes");
s.addShape("rect", { x:5.1, y:4.82, w:4.65, h:0.52, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.04 });
s.addText("Treatment: hydroxychloroquine · corticosteroids · immunosuppressives\nAlways exclude infection before escalating therapy in immunocompromised patients.", {
x:5.2, y:4.87, w:4.45, h:0.42, fontSize:10, color:SOFT, fontFace:"Calibri", italic:true
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — DM/PM + Sjögren + MCTD
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 7);
sectionLabel(s, "Myositis · Sjögren · MCTD");
slideTitle(s, "Other Connective Tissue Diseases");
rule(s, 1.1);
const panels = [
{
title:"Dermatomyositis / Polymyositis", color:CHIP_COLORS[0],
items:[
"Heterogeneous ILD: NSIP, UIP, OP, DAD",
"Anti-Jo-1 (antisynthetase): mechanic's hands + ILD",
"ILD may precede muscle disease by months–years",
"Acute DAD pattern → high mortality",
"OP pattern → good steroid response",
"DAH via pulmonary capillaritis (rare)",
]
},
{
title:"Sjögren Syndrome", color:CHIP_COLORS[3],
items:[
"LIP — most frequent ILD subtype",
"Cryptogenic organizing pneumonia",
"Bronchiectasis + recurrent infections",
"Usually good response to steroids",
]
},
{
title:"Mixed CTD", color:CHIP_COLORS[4],
items:[
"Overlap: SSc + SLE + RA + PM/DM",
"Anti-RNP antibody — characteristic",
"Pleuropulmonary complications 20–80%",
"PAH: 5-yr survival drops 96% → 73%",
"Medium-vessel pulmonary artery vasculitis",
]
}
];
panels.forEach((p,i) => {
const x = 0.3 + i*3.25;
const w = 3.1;
s.addShape("rect", { x, y:1.18, w, h:4.18, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addShape("rect", { x, y:1.18, w, h:0.32, fill:{color:p.color}, line:{type:"none"}, rounding:0.06 });
s.addText(p.title, { x:x+0.1, y:1.18, w:w-0.15, h:0.32, fontSize:10, bold:true, color:W, valign:"middle", fontFace:"Calibri", margin:0 });
bullets(s, p.items, x+0.15, 1.56, w-0.25, 3.6, {fontSize:11, color:INK});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — Ankylosing Spondylitis
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 8);
sectionLabel(s, "Ankylosing Spondylitis & Drug-Induced ILD");
slideTitle(s, "AS & Drug-Induced Pulmonary Disease");
rule(s, 1.1);
// AS box
s.addShape("rect", { x:0.55, y:1.18, w:4.35, h:3.85, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addText("Ankylosing Spondylitis", { x:0.7, y:1.3, w:4.1, h:0.3, fontSize:13, bold:true, color:ACC, fontFace:"Calibri" });
bullets(s, [
"Upper lobe bilateral reticulonodular infiltrates + cyst formation",
"Apical fibrobullous disease — no proven effective therapy",
"Secondary aspergilloma may form in apical bullae",
"Restricted chest expansion → ↓lung volumes",
"Chest radiograph: apical reticulonodular opacities, upper lobe cavities",
], 0.7, 1.65, 4.1, 3.2, {fontSize:11.5});
// Drug-induced ILD box
s.addShape("rect", { x:5.35, y:1.18, w:4.4, h:3.85, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addText("Drug-Induced ILD in CTDs", { x:5.5, y:1.3, w:4.1, h:0.3, fontSize:13, bold:true, color:ACC2, fontFace:"Calibri" });
const drugs = [
["Methotrexate", "Hypersensitivity pneumonitis; avoid in established ILD"],
["Leflunomide", "NSIP or OP pattern; drug holiday essential"],
["TNF-α inhibitors", "Can unmask or worsen ILD"],
["Rituximab", "Rarely organising pneumonia"],
["Checkpoint inhibitors", "Pneumonitis in malignancy setting"],
];
drugs.forEach(([drug, note], i) => {
const y = 1.68 + i*0.64;
s.addText(drug, { x:5.5, y, w:1.6, h:0.26, fontSize:11, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(note, { x:5.5, y:y+0.26, w:4.1, h:0.3, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
s.addText("Key principle: drug holiday before escalating immunosuppression", {
x:5.5, y:4.65, w:4.1, h:0.28, fontSize:10, color:SOFT, italic:true, fontFace:"Calibri"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — Sarcoidosis
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 9);
sectionLabel(s, "Sarcoidosis");
slideTitle(s, "Pulmonary Sarcoidosis");
rule(s, 1.1);
// Staging column
s.addText("Chest X-Ray Staging", { x:0.55, y:1.18, w:3.8, h:0.28, fontSize:12, bold:true, color:INK, fontFace:"Calibri" });
const stages = [
["0","Normal","2D8A5E"],
["I","Bilateral hilar lymphadenopathy only","2D8A5E"],
["II","Hilar adenopathy + parenchymal infiltrates",ACC2],
["III","Parenchymal infiltrates, no adenopathy","E08A2E"],
["IV","Pulmonary fibrosis / honeycombing","C85250"],
];
stages.forEach(([n, desc, c], i) => {
const y = 1.52 + i*0.62;
s.addShape("rect", { x:0.55, y, w:0.35, h:0.35, fill:{color:c}, line:{type:"none"}, rounding:0.04 });
s.addText(n, { x:0.55, y, w:0.35, h:0.35, fontSize:12, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
s.addText(desc, { x:1.0, y:y+0.04, w:3.3, h:0.28, fontSize:11.5, color:INK, fontFace:"Calibri", margin:0 });
});
// CXR image
img(s, 3, 0.55, 4.6, 3.8, 0.85, "Stage I Sarcoidosis — bilateral hilar lymphadenopathy ('potato nodes')");
// Key features
rule(s, 1.18, LINE, 5.1, 4.65);
s.addText("Key Features & Management", { x:5.1, y:1.18, w:4.65, h:0.28, fontSize:12, bold:true, color:INK, fontFace:"Calibri" });
bullets(s, [
"Non-caseating granulomas; ACE-secreting epithelioid cells",
"Serum ACE reflects total granuloma burden",
"BAL: CD4/CD8 ratio >3.5 supports diagnosis",
"All cutaneous sarcoidosis → annual CXR + PFTs",
"Pulmonary hypertension — vasocentric granuloma growth",
"Stage IV → risk of aspergilloma formation",
"Treatment: corticosteroids 1st line",
"Refractory: hydroxychloroquine, methotrexate, azathioprine",
], 5.1, 1.52, 4.65, 3.9, {fontSize:11});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — ANCA Vasculitides
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 10);
sectionLabel(s, "ANCA-Associated Vasculitides");
slideTitle(s, "Pulmonary Vasculitis");
rule(s, 1.1);
const vascs = [
{
title:"GPA (Granulomatosis with Polyangiitis)",
formerly:"Wegener's", anca:"PR3-ANCA (c-ANCA)", color:CHIP_COLORS[0],
items:[
"Triad: upper airway · lung · kidney (crescentic GN)",
"Pulmonary: nodules (cavitating), DAH, infiltrates",
"Subglottic stenosis, saddle-nose deformity",
"Rx: Rituximab + steroids (induction) → AZA/MMF",
]
},
{
title:"EGPA (Eosinophilic GPA)",
formerly:"Churg-Strauss", anca:"MPO-ANCA (p-ANCA)", color:CHIP_COLORS[2],
items:[
"Phases: allergic rhinitis → eosinophilia → vasculitis",
"Asthma + peripheral eosinophilia + pulmonary infiltrates",
"Skin: palpable purpura, indurated scalp nodules",
"Rx: high-dose steroids ± cyclophosphamide",
]
},
{
title:"Goodpasture Syndrome",
formerly:"Anti-GBM disease", anca:"Anti-GBM Ab", color:CHIP_COLORS[4],
items:[
"DAH + rapidly progressive glomerulonephritis",
"Linear IgG on alveolar & glomerular basement membranes",
"Hemoptysis ± acute renal failure",
"Rx: plasma exchange + immunosuppression",
]
}
];
vascs.forEach((v,i) => {
const x = 0.3 + i*3.25;
const w = 3.1;
s.addShape("rect", { x, y:1.18, w, h:4.18, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addShape("rect", { x, y:1.18, w, h:0.3, fill:{color:v.color}, line:{type:"none"}, rounding:0.06 });
s.addText(v.title, { x:x+0.1, y:1.18, w:w-0.15, h:0.3, fontSize:9.5, bold:true, color:W, valign:"middle", fontFace:"Calibri", margin:0 });
s.addText(`formerly: ${v.formerly} | ${v.anca}`, { x:x+0.1, y:1.52, w:w-0.15, h:0.24, fontSize:9, color:SOFT, italic:true, fontFace:"Calibri", margin:0 });
bullets(s, v.items, x+0.15, 1.8, w-0.25, 3.3, {fontSize:11, color:INK});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — Screening Guidelines
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 11);
sectionLabel(s, "2023 ACR/CHEST Guideline — Screening");
slideTitle(s, "Screening & Monitoring CTD-ILD");
rule(s, 1.1);
s.addText("Johnson SR et al. Arthritis Rheumatol 2024 (PMID 38973714) — covers RA, SSc, IIM, MCTD, Sjögren disease. First joint ACR/CHEST guideline.", {
x:0.55, y:1.15, w:8.9, h:0.32, fontSize:10.5, color:SOFT, italic:true, fontFace:"Calibri"
});
const recs = [
{ head:"Conditionally RECOMMEND for screening", items:["PFTs (spirometry + DLCO) for all at-risk SARDs","HRCT chest for all at-risk SARDs"], c:"2D8A5E" },
{ head:"Conditionally RECOMMEND AGAINST screening", items:["6-minute walk test distance (6MWD)","Chest radiography alone","Ambulatory desaturation testing","Bronchoscopy"], c:"E08A2E" },
{ head:"STRONGLY RECOMMEND AGAINST", items:["Surgical lung biopsy for ILD screening"], c:"C85250" },
{ head:"Monitoring — RECOMMEND", items:["Serial PFTs · HRCT chest · Ambulatory desaturation testing"], c:ACC },
{ head:"Disease-Specific Risk Factors", items:["SSc: anti-Scl-70, dcSSc → higher ILD risk","RA: anti-CCP, MUC5B, smoking history","IIM: anti-Jo-1 / anti-MDA5 → mandatory screen","MCTD: anti-RNP + SSc overlap features"], c:ACC2 },
{ head:"Monitoring — AGAINST", items:["6MWD, chest X-ray, bronchoscopy for routine monitoring"], c:SOFT },
];
recs.forEach((r,i) => {
const col = i<3 ? 0 : 1;
const row = i<3 ? i : i-3;
const x = col===0 ? 0.55 : 5.35;
const y = 1.55 + row*1.3;
s.addShape("rect", { x, y, w:4.4, h:1.22, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.05 });
s.addShape("rect", { x, y, w:4.4, h:0.26, fill:{color:r.c}, line:{type:"none"}, rounding:0.05 });
s.addText(r.head, { x:x+0.1, y:y, w:4.2, h:0.26, fontSize:9.5, bold:true, color:W, valign:"middle", fontFace:"Calibri", margin:0 });
bullets(s, r.items, x+0.1, y+0.3, 4.2, 0.88, {fontSize:10.5, color:INK});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — Treatment Guidelines
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 12);
sectionLabel(s, "2023 ACR/CHEST Guideline — Treatment");
slideTitle(s, "Treatment of SARD-ILD");
rule(s, 1.1);
s.addText("Johnson SR et al. Arthritis Care Res 2024 (PMID 38973731) — 35 recommendations including 2 strong recommendations.", {
x:0.55, y:1.15, w:8.9, h:0.28, fontSize:10.5, color:SOFT, italic:true, fontFace:"Calibri"
});
// Two strong recs highlighted
s.addShape("rect", { x:0.55, y:1.5, w:8.9, h:0.86, fill:{color:"FEF4F4"}, line:{color:"C85250", pt:1.5}, rounding:0.05 });
s.addText("STRONG RECOMMENDATIONS", { x:0.75, y:1.55, w:2.6, h:0.24, fontSize:10, bold:true, color:"C85250", fontFace:"Calibri" });
s.addText(
"1. AGAINST glucocorticoids as first-line ILD therapy in SSc-ILD\n2. AGAINST glucocorticoids after ILD progression in SSc-ILD",
{ x:0.75, y:1.78, w:8.55, h:0.52, fontSize:11.5, color:INK, fontFace:"Calibri" }
);
// General conditional recs
rule(s, 2.48);
s.addText("Conditional Recommendations (by SARD)", { x:0.55, y:2.52, w:4.35, h:0.28, fontSize:12, bold:true, color:INK, fontFace:"Calibri" });
bullets(s, [
"Glucocorticoids — conditionally recommended first-line for all SARDs except SSc",
"Mycophenolate — first-line immunosuppression in most CTD-ILDs",
"Nintedanib — for progressive fibrosing ILD (RA, IIM, MCTD)",
"Rituximab — refractory or anti-MDA5 positive IIM",
"Cyclophosphamide — second-line; consider toxicity profile",
], 0.55, 2.85, 4.35, 2.5, {fontSize:11.5});
// Rapid progression box
s.addShape("rect", { x:5.35, y:2.48, w:4.4, h:2.87, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
s.addText("Rapidly Progressive ILD", { x:5.5, y:2.58, w:4.1, h:0.28, fontSize:12, bold:true, color:ACC2, fontFace:"Calibri" });
bullets(s, [
"High-dose IV methylprednisolone (pulse)",
"Add IV cyclophosphamide or rituximab",
"Consider IVIG in refractory cases",
"Early supportive care + lung transplant referral",
"Anti-MDA5 IIM: poor prognosis; aggressive multi-drug",
], 5.5, 2.92, 4.1, 2.25, {fontSize:11.5});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — ERS/EULAR & ATS Guidelines
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 13);
sectionLabel(s, "Recent Guidelines 2024–2026");
slideTitle(s, "Major Practice Guidelines");
rule(s, 1.1);
const guides = [
{ org:"ERS/EULAR 2026", title:"CTD-ILD Clinical Practice Guidelines", pmid:"40912974",
note:"25 PICO + 28 narrative questions. SSc, RA, IIM, Sjögren, SLE, MCTD. Screening, diagnostic, monitoring & treatment algorithms. Published Jan 2026.", c:CHIP_COLORS[0] },
{ org:"ATS 2024", title:"SSc-ILD Treatment Guidelines", pmid:"37772985",
note:"Recommends mycophenolate. Suggests cyclophosphamide, rituximab, tocilizumab, nintedanib. Evidence-based GRADE methodology.", c:CHIP_COLORS[1] },
{ org:"EULAR 2023", title:"Systemic Sclerosis Treatment Update", pmid:"39874231",
note:"22 recommendations. First EULAR endorsement of MMF, nintedanib, rituximab, tocilizumab for SSc fibrosis and ILD. First-line combination PAH therapy.", c:CHIP_COLORS[2] },
{ org:"ACR/CHEST 2023", title:"ILD Screening & Monitoring in SARDs", pmid:"38973714",
note:"15 recommendations. HRCT + PFTs conditionally recommended. Strongly against surgical lung biopsy for screening.", c:CHIP_COLORS[5] },
{ org:"ACR/CHEST 2023", title:"ILD Treatment in SARDs", pmid:"38973731",
note:"35 recommendations, 2 strong. Glucocorticoids strong against as SSc-ILD first-line. Covers all SARD subtypes.", c:CHIP_COLORS[4] },
];
guides.forEach((g,i) => {
const y = 1.18 + i*0.88;
s.addShape("rect", { x:0.55, y, w:8.9, h:0.82, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.05 });
s.addShape("rect", { x:0.55, y, w:1.35, h:0.82, fill:{color:g.c}, line:{type:"none"}, rounding:0.05 });
s.addText(g.org, { x:0.6, y:y+0.1, w:1.25, h:0.38, fontSize:10.5, bold:true, color:W, align:"center", fontFace:"Calibri", margin:0 });
s.addText(`PMID ${g.pmid}`, { x:0.6, y:y+0.5, w:1.25, h:0.22, fontSize:8, color:"DDDDDD", align:"center", fontFace:"Calibri", margin:0 });
s.addText(g.title, { x:2.05, y:y+0.08, w:6.2, h:0.26, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(g.note, { x:2.05, y:y+0.36, w:6.2, h:0.38, fontSize:10, color:SOFT, fontFace:"Calibri", margin:0 });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — Summary Table
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 14);
sectionLabel(s, "Summary");
slideTitle(s, "Pulmonary Manifestations at a Glance");
rule(s, 1.1);
const cols = ["Disease","ILD Pattern","Pleura","PAH","Hallmark"];
const cw = [1.4, 1.6, 1.35, 1.1, 3.2];
const cx = [0.2, 1.6, 3.2, 4.55, 5.65];
const rows = [
["RA", "UIP, NSIP", "Common\n(exudate)", "Uncommon", "Caplan; Anti-CCP; avoid MTX"],
["Systemic Sclerosis","NSIP >> UIP", "Uncommon", "Major (lcSSc)","Scl-70→ILD; centromere→PAH"],
["SLE", "LIP, NSIP", "Common", "Emboli/vascu.","Shrinking lung; APS; DAH"],
["DM/PM", "NSIP, UIP, OP, DAD", "Rare", "Rare", "Anti-Jo-1; DAD=poor Px"],
["Sjögren", "LIP, OP", "Rare", "Rare", "Bronchiectasis; steroid-resp."],
["MCTD", "NSIP", "Pleuritis\n(40%)", "Significant", "Anti-RNP; 5yr surv ↓ w/PAH"],
["Sarcoidosis", "Granulomatous", "Rare", "Vasocentric", "ACE↑; Stage I–IV; BHL"],
["GPA", "Nodules/cavities", "Rare", "Rare", "PR3-ANCA; saddle-nose"],
["EGPA", "Eosinophilic", "Rare", "Rare", "Asthma + eosinophilia; MPO-ANCA"],
];
const rowH = 0.46, startY = 1.15;
// Header
cols.forEach((h,c) => {
s.addShape("rect", { x:cx[c], y:startY, w:cw[c]-0.05, h:0.38, fill:{color:ACC}, line:{type:"none"} });
s.addText(h, { x:cx[c]+0.05, y:startY, w:cw[c]-0.1, h:0.38, fontSize:10, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
});
// Rows
rows.forEach((row,r) => {
const y = startY + 0.4 + r*rowH;
const bg = r%2===0 ? W : BG;
s.addShape("rect", { x:0.2, y, w:9.6, h:rowH-0.02, fill:{color:bg}, line:{color:LINE, pt:0.5} });
row.forEach((cell,c) => {
s.addText(cell, { x:cx[c]+0.05, y:y+0.02, w:cw[c]-0.1, h:rowH-0.06,
fontSize:9.5, color:c===0?ACC:INK, fontFace:"Calibri",
bold:c===0, align:"center", valign:"middle", margin:0 });
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — Imaging Gallery
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:"0D1B2A"}, line:{type:"none"} });
// top accent
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:0.06, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Imaging Gallery", { x:0.5, y:0.12, w:9, h:0.5, fontSize:22, bold:true, color:W, fontFace:"Calibri" });
s.addText(`${TOTAL-1} / ${TOTAL}`, { x:8.8, y:5.42, w:1.0, h:0.18, fontSize:8, color:"555555", align:"right", fontFace:"Calibri", margin:0 });
const images = [
{ idx:0, caption:"NSIP in CTD-ILD: bilateral GGO + septal thickening" },
{ idx:3, caption:"Stage I Sarcoidosis: bilateral hilar lymphadenopathy" },
{ idx:6, caption:"SSc-ILD progression: cellular → fibrotic NSIP (10 months)" },
{ idx:4, caption:"MCTD-ILD: reticulation + traction bronchiectasis" },
];
images.forEach((im,i) => {
const col = i%2, row = Math.floor(i/2);
const x = 0.2 + col*5.05;
const y = 0.72 + row*2.45;
if (imgs[im.idx] && !imgs[im.idx].error) {
s.addImage({ data: imgs[im.idx].base64, x, y, w:4.8, h:2.1 });
}
s.addText(im.caption, { x, y:y+2.12, w:4.8, h:0.28, fontSize:9, color:"AAAAAA", italic:true, align:"center", fontFace:"Calibri" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 16 — References
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:W_SLIDE, h:H_SLIDE, fill:{color:BG}, line:{type:"none"} });
chrome(s, 16);
sectionLabel(s, "References");
slideTitle(s, "References & Further Reading");
rule(s, 1.1);
const refs = [
"Goldman-Cecil Medicine, 27th ed. (2024). Chapters 80, 243–248. Elsevier.",
"Fishman's Pulmonary Diseases and Disorders, 6th ed. (2023). Chapter 58. McGraw-Hill.",
"Robbins & Cotran Pathologic Basis of Disease, 10th ed. (2021). Chapter 15. Elsevier.",
"Johnson SR et al. 2023 ACR/CHEST Guideline — Screening & Monitoring of ILD in SARDs.\n Arthritis Rheumatol. 2024;76(8):1076–1089. PMID 38973714.",
"Johnson SR et al. 2023 ACR/CHEST Guideline — Treatment of ILD in SARDs.\n Arthritis Care Res. 2024. PMID 38973731.",
"Raghu G et al. Treatment of SSc-ILD — ATS Clinical Practice Guideline.\n Am J Respir Crit Care Med. 2024;209(2):137–152. PMID 37772985.",
"Del Galdo F et al. EULAR recommendations for treatment of SSc: 2023 update.\n Ann Rheum Dis. 2025;84(1):42–55. PMID 39874231.",
"Antoniou KM et al. ERS/EULAR CTD-ILD Clinical Practice Guidelines.\n Ann Rheum Dis / Eur Respir J. 2026. PMID 40912974.",
"Podolanczuk AJ et al. Evaluation & Management of ILA — ATS Clinical Statement.\n Am J Respir Crit Care Med. 2025. PMID 40387336.",
];
refs.forEach((r,i) => {
const y = 1.22 + i * 0.47;
s.addShape("rect", { x:0.55, y:y+0.06, w:0.06, h:0.24, fill:{color:i<3?ACC:ACC2}, line:{type:"none"} });
s.addText(r, { x:0.72, y, w:8.8, h:0.45, fontSize:10.5, color:INK, fontFace:"Calibri", valign:"top", margin:0 });
});
}
// ── Write ─────────────────────────────────────────────────────────────────────
const outPath = "/home/daytona/workspace/pulmonary-systemic-disease/Pulmonary_Systemic_Disease_Elegant.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("SUCCESS:", outPath);
}).catch(err => { console.error("ERROR:", err); });
cd /home/daytona/workspace/pulmonary-systemic-disease && node build2.js 2>&1
ls -lh /home/daytona/workspace/pulmonary-systemic-disease/Pulmonary_Systemic_Disease_Elegant.pptx
Pulmonary Systemic Disease Elegant
Presentation · PPTX
| Before | After |
|---|---|
| Heavy colored bars everywhere | Warm off-white (#F8F7F5) background, single 6px top accent line |
| Multiple competing colors per slide | Deep navy + mid blue as the only two accents |
| Busy header boxes on every slide | Subtle small-caps category label + clean title |
| Cluttered boxes with thick borders | Minimal white cards with a 1pt light border |
| Color-saturated footers | Simple slide counter in muted grey, bottom right |
| Dark "imaging" slides with neon labels | Clean dark slide with restrained caption text |
YOU SKIPPED SOME SLIDES, S
ls /home/daytona/workspace/pulmonary-systemic-disease/
~/pulmonary-systemic-disease/build3.js
"use strict";
const pptxgen = require("pptxgenjs");
const fs = require("fs");
const imgs = JSON.parse(fs.readFileSync(
"/home/daytona/workspace/pulmonary-systemic-disease/images.json", "utf8"
));
// imgs[0] NSIP HRCT [1] SSc HRCT+esoph [2] SSc traction+PA
// [3] Sarcoidosis CXR [4] MCTD ILD [5] SLE LIP cysts [6] SSc NSIP progression
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Pulmonary Involvement in Systemic Disease";
// ── Palette ───────────────────────────────────────────────────────────────────
const BG = "F8F7F5";
const W = "FFFFFF";
const INK = "1C1C1E";
const SOFT = "6E6E73";
const LINE = "D1D1D6";
const ACC = "1B4F72"; // deep navy
const ACC2 = "2980B9"; // medium blue
// Total slides: 1 title + 1 overview + 1 per disease (10) + 1 sarcoidosis
// + 1 vasculitis + 1 screening + 1 treatment + 1 guidelines
// + 1 summary + 1 imaging + 1 references = 22
const TOTAL = 22;
// ── Helpers ───────────────────────────────────────────────────────────────────
function bg(s) {
s.addShape("rect", { x:0, y:0, w:10, h:5.625, fill:{color:BG}, line:{type:"none"} });
}
function chrome(s, n) {
s.addShape("rect", { x:0, y:0, w:10, h:0.06, fill:{color:ACC}, line:{type:"none"} });
s.addText(`${n} / ${TOTAL}`, { x:8.8, y:5.42, w:1.0, h:0.18, fontSize:8, color:LINE, align:"right", fontFace:"Calibri", margin:0 });
}
function label(s, txt, color) {
s.addText(txt.toUpperCase(), { x:0.55, y:0.26, w:8, h:0.22, fontSize:9, charSpacing:4, color:color||ACC2, fontFace:"Calibri", margin:0 });
}
function title(s, txt, y) {
s.addText(txt, { x:0.55, y:y!==undefined?y:0.5, w:8.9, h:0.55, fontSize:26, bold:true, color:INK, fontFace:"Calibri", margin:0 });
}
function rule(s, y, x, w) {
s.addShape("rect", { x:x||0.55, y, w:w||8.9, h:0.02, fill:{color:LINE}, line:{type:"none"} });
}
function blist(s, items, x, y, w, h, fz, col) {
s.addText(
items.map((t,i) => ({ text:t, options:{ bullet:{indent:14}, fontSize:fz||12, color:col||INK, breakLine:i<items.length-1, fontFace:"Calibri" } })),
{ x, y, w, h, valign:"top", margin:0 }
);
}
function img(s, idx, x, y, w, h, cap) {
if (imgs[idx] && !imgs[idx].error) s.addImage({ data:imgs[idx].base64, x, y, w, h });
if (cap) s.addText(cap, { x, y:y+h+0.04, w, h:0.22, fontSize:8, color:SOFT, italic:true, align:"center", fontFace:"Calibri", margin:0 });
}
// Accent bar + section heading inside a card
function cardHead(s, txt, x, y, w, color) {
s.addShape("rect", { x, y, w, h:0.32, fill:{color:color||ACC}, line:{type:"none"}, rounding:0.04 });
s.addText(txt, { x:x+0.1, y, w:w-0.15, h:0.32, fontSize:10.5, bold:true, color:W, valign:"middle", fontFace:"Calibri", margin:0 });
}
// Two-column white card
function card(s, x, y, w, h) {
s.addShape("rect", { x, y, w, h, fill:{color:W}, line:{color:LINE, pt:1}, rounding:0.06 });
}
// Warning band
function warn(s, txt, x, y, w) {
s.addShape("rect", { x, y, w, h:0.28, fill:{color:"FEF4F4"}, line:{color:"C85250", pt:1}, rounding:0.03 });
s.addText(txt, { x:x+0.1, y, w:w-0.15, h:0.28, fontSize:9.5, color:"9A0000", fontFace:"Calibri", valign:"middle" });
}
// Left accent tick
function tick(s, x, y, color) {
s.addShape("rect", { x, y:y+0.04, w:0.07, h:0.28, fill:{color:color||ACC}, line:{type:"none"} });
}
// ══════════════════════════════════════════════════════════════════════════════
// 1. TITLE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:10, h:5.625, fill:{color:ACC}, line:{type:"none"} });
s.addShape("rect", { x:5.8, y:0, w:4.2, h:5.625, fill:{color:W}, line:{type:"none"} });
s.addShape("rect", { x:5.78, y:0.5, w:0.025, h:4.6, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Pulmonary\nInvolvement in\nSystemic Disease", {
x:0.55, y:1.1, w:5.0, h:3.0, fontSize:34, bold:true, color:W, fontFace:"Calibri", lineSpacingMultiple:1.15
});
s.addText("Connective Tissue Diseases · Vasculitides\nGranulomatous Disorders", {
x:0.55, y:4.2, w:5.0, h:0.6, fontSize:11, color:"A8C4D9", fontFace:"Calibri", italic:true
});
const toc = ["Overview","Rheumatoid Arthritis","Systemic Sclerosis","SLE","Dermatomyositis/Polymyositis",
"Sjögren Syndrome","Mixed CTD","Ankylosing Spondylitis","Sarcoidosis",
"GPA (Wegener's)","EGPA (Churg-Strauss)","Goodpasture","Guidelines & Summary"];
s.addText("CONTENTS", { x:6.1, y:0.5, w:3.6, h:0.28, fontSize:9, charSpacing:4, color:ACC2, fontFace:"Calibri" });
s.addText(
toc.map((t,i) => ({ text:`${i+1}. ${t}`, options:{ fontSize:11, color:INK, breakLine:i<toc.length-1, fontFace:"Calibri" } })),
{ x:6.1, y:0.85, w:3.6, h:4.5, valign:"top" }
);
s.addText("May 2026", { x:0.55, y:5.25, w:2, h:0.2, fontSize:8.5, color:"A8C4D9", fontFace:"Calibri" });
}
// ══════════════════════════════════════════════════════════════════════════════
// 2. OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,2);
label(s, "Introduction");
title(s, "The Lung as a Target Organ");
rule(s, 1.1);
s.addText(
"Systemic diseases frequently involve the lung. Virtually every pulmonary compartment may be affected — parenchyma, pleura, vasculature, and airways. Histologic patterns include NSIP · UIP · Organizing Pneumonia · DAH · LIP · Bronchiolitis.",
{ x:0.55, y:1.18, w:8.9, h:0.65, fontSize:12.5, color:INK, fontFace:"Calibri", lineSpacingMultiple:1.3 }
);
const boxes = [
{ h:"Connective Tissue Diseases", items:["Rheumatoid Arthritis","Systemic Sclerosis (Scleroderma)","Systemic Lupus Erythematosus","Dermatomyositis / Polymyositis","Sjögren Syndrome","Mixed Connective Tissue Disease","Ankylosing Spondylitis"], c:ACC },
{ h:"Vasculitides", items:["GPA — Granulomatosis with Polyangiitis","EGPA — Eosinophilic GPA","Goodpasture Syndrome (Anti-GBM)","Polyarteritis Nodosa"], c:"A23B72" },
{ h:"Granulomatous & Other", items:["Sarcoidosis","Hypersensitivity Pneumonitis","Berylliosis","Amyloidosis"], c:"2D8A5E" },
];
boxes.forEach((b,i) => {
const x = 0.3 + i*3.15;
card(s, x, 2.0, 2.98, 3.38);
cardHead(s, b.h, x, 2.0, 2.98, b.c);
blist(s, b.items, x+0.15, 2.38, 2.7, 2.85, 11.5, INK);
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 3. RHEUMATOID ARTHRITIS
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,3);
label(s, "Rheumatoid Arthritis");
title(s, "Pulmonary Manifestations");
rule(s, 1.1);
const items = [
["Interstitial Lung Disease","UIP or NSIP; >60% on HRCT; clinically apparent ~10%; ↑ mortality", ACC],
["Pleural Disease","40% at autopsy; clinically 5%; exudative with low glucose; may precede arthritis", ACC2],
["Pulmonary Nodules","Necrobiotic; obligate aggressive workup to exclude primary malignancy", "A23B72"],
["Caplan Syndrome","RA + pneumoconiosis → upper lobe progressive nodular fibrosis", "2D8A5E"],
["Follicular Bronchiolitis","Lymphoid hyperplasia along airways; germinal follicles adjacent to vessels", "E08A2E"],
["Pulmonary Hypertension","Least common; associated with Raynaud phenomenon; normal CXR + ↓DLCO", SOFT],
["Diffuse Alveolar Hemorrhage","Pulmonary capillaritis (rare); treat with steroids + cyclophosphamide", "C85250"],
];
items.forEach(([t,d,c],i) => {
const y = 1.22 + i*0.59;
tick(s, 0.55, y, c);
s.addText(t, { x:0.72, y, w:2.5, h:0.26, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(d, { x:0.72, y:y+0.27, w:4.45, h:0.25, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
img(s, 0, 5.4, 1.18, 4.3, 2.85, "HRCT: NSIP pattern in RA-ILD — ground-glass opacities, septal thickening, bilateral lower-lobe predominance");
rule(s, 4.15, 5.4, 4.3);
s.addText("Risk Factors for RA-ILD", { x:5.4, y:4.2, w:4.3, h:0.26, fontSize:11, bold:true, color:INK, fontFace:"Calibri" });
blist(s, ["Male sex (ILD 3:1, though RA 2–4:1 F:M)","High RF titers · Anti-CCP antibodies (independent of smoking)","MUC5B promoter variant rs35705950 · Elevated serum KL-6"], 5.4, 4.5, 4.3, 0.9, 10.5);
warn(s, "⚠ Methotrexate generally avoided — can itself cause ILD", 0.55, 5.27, 4.6);
}
// ══════════════════════════════════════════════════════════════════════════════
// 4. RHEUMATOID ARTHRITIS — TREATMENT
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,4);
label(s, "Rheumatoid Arthritis — Management");
title(s, "RA-ILD: Prognosis & Treatment");
rule(s, 1.1);
// Prognosis card
card(s, 0.55, 1.18, 4.35, 2.7);
cardHead(s, "Prognosis", 0.55, 1.18, 4.35);
blist(s, [
"UIP pattern → worse prognosis than NSIP pattern",
"DLCO correlates with mortality",
"Chronic fibrosis → ↑ risk of bronchogenic carcinoma (adenoCA/BAC)",
"Pulmonary HTN → cor pulmonale",
"ILD may precede arthritis in 20% of patients",
], 0.7, 1.58, 4.05, 2.1, 11.5);
// Treatment card
card(s, 0.55, 4.0, 4.35, 1.42);
cardHead(s, "Treatment (ACR/CHEST 2023)", 0.55, 4.0, 4.35, ACC2);
blist(s, [
"Glucocorticoids — conditionally recommended first-line",
"Nintedanib 150 mg BID — attenuates progressive ILD",
"Rituximab — second-line or steroid-resistant cases",
], 0.7, 4.4, 4.05, 0.9, 11.5);
// Right — monitoring + notes
card(s, 5.35, 1.18, 4.4, 4.24);
cardHead(s, "Monitoring & Notes", 5.35, 1.18, 4.4, "2D8A5E");
blist(s, [
"Baseline: HRCT chest + PFTs (spirometry + DLCO)",
"Serial PFTs every 3–6 months in active ILD",
"HRCT if new symptoms or PFT decline >10%",
"Ambulatory desaturation testing for functional status",
"Lung biopsy NOT recommended for routine screening",
"",
"Cytolytic & biologic therapies can induce ILD —",
" often indistinguishable from primary RA-ILD",
"Anti-CCP antibodies may precede ILD by years",
"Seronegative RA can still develop pleuropulmonary disease",
], 5.5, 1.58, 4.1, 3.65, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 5. SYSTEMIC SCLEROSIS — OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,5);
label(s, "Systemic Sclerosis (Scleroderma)");
title(s, "Pulmonary Manifestations");
rule(s, 1.1);
// ILD left
card(s, 0.55, 1.18, 4.35, 2.5);
cardHead(s, "Interstitial Lung Disease", 0.55, 1.18, 4.35, ACC);
blist(s, [
"Most common complication — HRCT ILD in >90%",
"Dominant pattern: NSIP (cellular → fibrotic) > UIP",
"Ground-glass on HRCT = early inflammatory phase",
"Restrictive PFTs: ↓FVC, ↓DLCO, preserved FEV1/FVC",
"More common in diffuse SSc (dcSSc)",
"First ILD associated with scar carcinoma (adenoCA/BAC)",
], 0.7, 1.58, 4.05, 1.95, 11.5);
// PAH left
card(s, 0.55, 3.8, 4.35, 1.65);
cardHead(s, "Pulmonary Arterial Hypertension", 0.55, 3.8, 4.35, ACC2);
blist(s, [
"More common in limited SSc (lcSSc / CREST)",
"Anticentromere Ab → PAH; anti-Scl-70 → ILD",
"Key clue: disproportionate ↓DLCO vs lung volumes",
"Mean PAP ≥45 mmHg → ~33% 3-year survival",
], 0.7, 4.2, 4.05, 1.15, 11.5);
// Images right
img(s, 1, 5.35, 1.18, 4.4, 2.4, "SSc HRCT: basal GGO (NSIP pattern) + dilated esophagus (arrow)");
img(s, 2, 5.35, 3.72, 4.4, 1.7, "Advanced SSc: traction bronchiectasis + dilated main PA (32 mm → PAH)");
}
// ══════════════════════════════════════════════════════════════════════════════
// 6. SYSTEMIC SCLEROSIS — TREATMENT
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,6);
label(s, "Systemic Sclerosis — Treatment");
title(s, "SSc-ILD: Evidence-Based Therapy");
rule(s, 1.1);
warn(s, "STRONG (ACR/CHEST 2023): Glucocorticoids NOT recommended as first-line or after progression in SSc-ILD", 0.55, 1.18, 8.9);
const drugs = [
{ name:"Mycophenolate Mofetil", dose:"1500 mg BID", tier:"1st Line", color:"2D8A5E", note:"RECOMMENDED — ATS 2024. Similar efficacy to CYC; fewer adverse effects. SENSCIS and SLS-II trials." },
{ name:"Nintedanib", dose:"150 mg BID", tier:"Add-on", color:ACC, note:"SUGGESTED — attenuates FVC decline (SENSCIS). Use alone or in combination with MMF." },
{ name:"Tocilizumab", dose:"162 mg SC/week", tier:"Early", color:ACC2, note:"SUGGESTED — for early SSc with elevated inflammatory markers. Mitigates functional decline." },
{ name:"Rituximab", dose:"1000 mg IV ×2", tier:"Salvage", color:"A23B72", note:"SUGGESTED — refractory ILD; anti-Scl-70 positive; two infusions 2 weeks apart." },
{ name:"Cyclophosphamide", dose:"2 mg/kg/day", tier:"2nd Line", color:SOFT, note:"SUGGESTED — second-line only; more toxicity than MMF; consider bladder protection." },
{ name:"Lung Transplant", dose:"—", tier:"End-stage", color:INK, note:"Referral when FVC <50% predicted or rapid decline; bilateral transplant preferred." },
];
drugs.forEach((d,i) => {
const col = i<3?0:1, row = i<3?i:i-3;
const x = col===0 ? 0.55 : 5.35;
const y = 1.6 + row*1.3;
card(s, x, y, 4.4, 1.22);
s.addShape("rect", { x:x+0.12, y:y+0.12, w:1.0, h:0.24, fill:{color:d.color}, line:{type:"none"}, rounding:0.04 });
s.addText(d.tier, { x:x+0.12, y:y+0.12, w:1.0, h:0.24, fontSize:8.5, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
s.addText(d.name, { x:x+1.22, y:y+0.1, w:3.05, h:0.28, fontSize:12, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(d.dose, { x:x+1.22, y:y+0.38, w:3.05, h:0.2, fontSize:10, color:SOFT, italic:true, fontFace:"Calibri", margin:0 });
s.addText(d.note, { x:x+0.12, y:y+0.65, w:4.15, h:0.5, fontSize:10, color:INK, fontFace:"Calibri", margin:0 });
});
s.addText("ATS 2024 PMID 37772985 · EULAR 2023 PMID 39874231 · ACR/CHEST 2023 PMID 38973731", {
x:0.55, y:5.36, w:8.9, h:0.18, fontSize:8.5, color:SOFT, align:"center", fontFace:"Calibri"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 7. SYSTEMIC LUPUS ERYTHEMATOSUS
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,7);
label(s, "Systemic Lupus Erythematosus");
title(s, "Pulmonary Manifestations");
rule(s, 1.1);
const items = [
["Pleuritis / Pleural Effusion","Most common pulmonary manifestation; exudative; bilateral possible; ± friction rub","2D8A5E"],
["Acute Lupus Pneumonitis","Widespread GGO + consolidation; mimics acute infection; exclude infection first","C85250"],
["Diffuse Alveolar Hemorrhage","Via pulmonary capillaritis; haemoptysis ± anaemia; life-threatening; treat aggressively","C85250"],
["Thromboembolic Disease","Antiphospholipid antibodies (APS) → recurrent PE; anticoagulation required","E08A2E"],
["Shrinking Lung Syndrome","Diaphragm weakness/dysfunction; progressively smaller lungs on CXR; steroid-resistant","A23B72"],
["Chronic ILD","NSIP or LIP patterns; less common; treat underlying SLE","ACC"],
["Pulmonary Hypertension","Via vasculitis or recurrent emboli; treat with ERA/PDE5i + immunosuppression","ACC2"],
];
items.forEach(([t,d,c],i) => {
const y = 1.22 + i*0.58;
tick(s, 0.55, y, c);
s.addText(t, { x:0.72, y, w:2.7, h:0.26, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(d, { x:0.72, y:y+0.26, w:4.45, h:0.25, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
img(s, 5, 5.4, 1.18, 4.3, 3.4, "CT (Goldman-Cecil p.948): LIP in SLE — cysts within ground-glass attenuation, lower lobes");
card(s, 5.4, 4.72, 4.3, 0.72);
s.addText("Key Management Points", { x:5.55, y:4.78, w:4.0, h:0.24, fontSize:10.5, bold:true, color:ACC, fontFace:"Calibri" });
s.addText("Hydroxychloroquine · Corticosteroids · MMF / Azathioprine\nAlways exclude infection before escalating immunosuppression", {
x:5.55, y:5.04, w:4.0, h:0.35, fontSize:10, color:SOFT, fontFace:"Calibri" });
}
// ══════════════════════════════════════════════════════════════════════════════
// 8. DERMATOMYOSITIS / POLYMYOSITIS
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,8);
label(s, "Dermatomyositis / Polymyositis");
title(s, "ILD in Inflammatory Myopathies");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Pulmonary Manifestations", 0.55, 1.18, 4.35, ACC);
blist(s, [
"Heterogeneous ILD — NSIP, UIP, OP, DAD all reported",
"ILD may precede muscle disease by months–years",
"Severity of ILD does NOT correlate with muscle disease",
"Chronic presentation: cough, dyspnea → restrictive PFTs",
"Acute DAD pattern: clinical picture like diffuse pneumonia",
" → High mortality despite aggressive immunosuppression",
"OP pattern: subacute; good response to corticosteroids",
"DAH via pulmonary capillaritis — coincides with muscle onset",
"Bronchiectasis in advanced/chronic disease",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.1);
cardHead(s, "Autoantibody Associations", 5.35, 1.18, 4.4, ACC2);
const abs = [
["Anti-Jo-1","Antisynthetase syndrome: ILD + mechanic's hands + Raynaud"],
["Anti-PL-7","ILD predominant; typically progressive"],
["Anti-MDA5","Rapidly progressive ILD; poor prognosis; skin ulcers"],
["Anti-PL-12","ILD without significant myositis"],
];
abs.forEach(([ab, desc], i) => {
const y = 1.58 + i*0.42;
s.addText(ab, { x:5.5, y, w:1.15, h:0.24, fontSize:11, bold:true, color:ACC2, fontFace:"Calibri", margin:0 });
s.addText(desc, { x:6.75, y, w:2.85, h:0.38, fontSize:10.5, color:SOFT, fontFace:"Calibri", margin:0 });
});
card(s, 5.35, 3.4, 4.4, 2.02);
cardHead(s, "Treatment", 5.35, 3.4, 4.4, "2D8A5E");
blist(s, [
"First-line: high-dose corticosteroids",
"Second-line: cyclophosphamide, cyclosporine, tacrolimus",
"Refractory: mycophenolate, IVIG, rituximab",
"Anti-MDA5: aggressive multi-drug from onset",
"DAH: steroids + cyclophosphamide",
], 5.5, 3.8, 4.1, 1.45, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 9. SJÖGREN SYNDROME
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,9);
label(s, "Sjögren Syndrome");
title(s, "Pulmonary Manifestations");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Manifestations", 0.55, 1.18, 4.35, ACC);
blist(s, [
"LIP (Lymphoid Interstitial Pneumonia) — most frequent subtype",
" CT: cysts within ground-glass attenuation, lower lobes",
"Cryptogenic organizing pneumonia — also common",
"Bronchiectasis + recurrent respiratory infections",
" Due to inspissated mucus blocking airways",
"Pleural involvement — uncommon",
"Pulmonary hypertension — rare",
"Follicular bronchiolitis may occur",
"Lymphoma risk — ~44× increased; monitor closely",
"Airway disease: dryness, xerotracheobronchitis",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.1);
cardHead(s, "Diagnosis & Monitoring", 5.35, 1.18, 4.4, ACC2);
blist(s, [
"All patients: baseline HRCT + PFTs",
"Anti-SSA/SSB (Ro/La) antibodies",
"BAL: lymphocytic alveolitis",
"Monitor for lymphoma transformation annually",
"PFTs every 6–12 months if ILD present",
], 5.5, 1.58, 4.1, 1.55, 11.5);
card(s, 5.35, 3.4, 4.4, 2.02);
cardHead(s, "Treatment", 5.35, 3.4, 4.4, "2D8A5E");
blist(s, [
"LIP: corticosteroids — usually good response",
"OP: corticosteroids ± azathioprine/MMF",
"Bronchiectasis: airway clearance + treat infections",
"ILD refractory: rituximab, hydroxychloroquine",
"PAH: ERA/PDE5 inhibitors",
], 5.5, 3.8, 4.1, 1.45, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 10. MIXED CONNECTIVE TISSUE DISEASE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,10);
label(s, "Mixed Connective Tissue Disease");
title(s, "MCTD — Pulmonary Involvement");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Overview & Manifestations", 0.55, 1.18, 4.35, ACC);
blist(s, [
"Overlap: SSc + SLE + RA + PM/DM features",
"Defined by high-titer anti-U1-RNP antibody",
"Pleuropulmonary complications in 20–80%",
"Often subclinical — identified only radiographically",
"",
"ILD (NSIP pattern most common)",
"Pleuritis in ~40%; pleural effusion in ~5%",
"Pulmonary hypertension — major complication",
"Medium-vessel pulmonary artery vasculitis",
"Antiphospholipid syndrome → thromboembolic PAH",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.5);
cardHead(s, "Pulmonary Hypertension in MCTD", 5.35, 1.18, 4.4, "C85250");
blist(s, [
"5-year survival: 96% → 73% when PAH develops",
"Mechanisms: plexogenic arteriopathy, recurrent PE, hypoxia",
"Treat: ERA + PDE5i (sildenafil/bosentan) ± prostacyclin",
"IgG + C3 deposition in pulmonary artery walls → vasculitis",
"Circulating lupus anticoagulant increases thrombotic risk",
], 5.5, 1.58, 4.1, 1.95, 11.5);
img(s, 4, 5.35, 3.8, 4.4, 1.4, "MCTD-ILD: reticulation + traction bronchiectasis (HRCT)");
card(s, 5.35, 5.28, 4.4, 0.24);
s.addText("Treatment: corticosteroids + immunomodulators for underlying MCTD; PAH-specific therapy", {
x:5.45, y:5.3, w:4.2, h:0.18, fontSize:9, color:SOFT, fontFace:"Calibri" });
}
// ══════════════════════════════════════════════════════════════════════════════
// 11. ANKYLOSING SPONDYLITIS
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,11);
label(s, "Ankylosing Spondylitis");
title(s, "Pulmonary Manifestations in AS");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Pulmonary Manifestations", 0.55, 1.18, 4.35, ACC);
blist(s, [
"Upper lobe bilateral reticulonodular infiltrates",
"Apical cyst/bullae formation due to parenchymal destruction",
"Fibrobullous disease — no proven effective therapy",
"Secondary aspergilloma may form in apical cavities",
"Restricted chest wall expansion → ↓ lung volumes",
"Chest radiograph: upper lobe reticulonodular opacities",
"Later: apical fibrobullous cavities mimicking TB",
"Pleural effusion rare",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.1);
cardHead(s, "Airway & Respiratory Mechanics", 5.35, 1.18, 4.4, ACC2);
blist(s, [
"Costovertebral joint involvement → thoracic rigidity",
"Reduced chest expansion (<2.5 cm is diagnostic criterion)",
"Diaphragm becomes primary respiratory muscle",
"PFTs: mildly restrictive pattern; normal or near-normal DLCO",
"Sleep-disordered breathing reported",
], 5.5, 1.58, 4.1, 1.55, 11.5);
card(s, 5.35, 3.4, 4.4, 2.02);
cardHead(s, "Drug-Induced ILD in CTDs", 5.35, 3.4, 4.4, "E08A2E");
blist(s, [
"Methotrexate → hypersensitivity pneumonitis; avoid in ILD",
"Leflunomide → NSIP or OP pattern",
"TNF-α inhibitors → can worsen or unmask ILD",
"Checkpoint inhibitors → pneumonitis (malignancy setting)",
"Principle: drug holiday before escalating immunosuppression",
], 5.5, 3.8, 4.1, 1.45, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 12. SARCOIDOSIS
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,12);
label(s, "Sarcoidosis");
title(s, "Pulmonary Sarcoidosis");
rule(s, 1.1);
// Staging
const stages = [["0","Normal","2D8A5E"],["I","Bilateral hilar lymphadenopathy only","2D8A5E"],
["II","Hilar adenopathy + parenchymal infiltrates",ACC2],
["III","Parenchymal infiltrates without adenopathy","E08A2E"],["IV","Pulmonary fibrosis / honeycombing","C85250"]];
s.addText("Chest X-Ray Staging", { x:0.55, y:1.18, w:3.8, h:0.26, fontSize:12, bold:true, color:INK, fontFace:"Calibri" });
stages.forEach(([n,d,c],i) => {
const y = 1.48 + i*0.6;
s.addShape("rect", { x:0.55, y, w:0.35, h:0.35, fill:{color:c}, line:{type:"none"}, rounding:0.04 });
s.addText(n, { x:0.55, y, w:0.35, h:0.35, fontSize:12, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
s.addText(d, { x:1.0, y:y+0.04, w:3.3, h:0.28, fontSize:11.5, color:INK, fontFace:"Calibri", margin:0 });
});
img(s, 3, 0.55, 4.55, 3.8, 0.82, "Stage I: bilateral hilar lymphadenopathy ('potato nodes')");
card(s, 5.1, 1.18, 4.65, 4.24);
cardHead(s, "Key Features & Management", 5.1, 1.18, 4.65);
blist(s, [
"Non-caseating granulomas — hallmark histologic finding",
"ACE secreted by epithelioid cells → ↑serum ACE (reflects burden)",
"BAL: CD4/CD8 ratio >3.5 supports diagnosis",
"Airway obstruction in endobronchial sarcoidosis",
"Pulmonary HTN: vasocentric granuloma growth → treat with bosentan",
"All cutaneous sarcoidosis → annual CXR + PFTs even if asymptomatic",
"Stage IV → aspergilloma risk in cavities",
"Löfgren syndrome: BHL + erythema nodosum + arthritis → good prognosis",
"",
"Treatment:",
" 1st line: corticosteroids (prednisone 20–40 mg/day)",
" Refractory: hydroxychloroquine, methotrexate, azathioprine",
" Refractory PAH: bosentan (BoSAPAH trial)",
" End-stage: lung transplantation",
], 5.25, 1.58, 4.3, 3.65, 11, INK);
}
// ══════════════════════════════════════════════════════════════════════════════
// 13. GPA
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,13);
label(s, "ANCA-Associated Vasculitis");
title(s, "Granulomatosis with Polyangiitis (GPA)");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Clinical Features", 0.55, 1.18, 4.35, ACC);
blist(s, [
"Formerly: Wegener's Granulomatosis",
"PR3-ANCA (c-ANCA) positive",
"",
"Classic triad:",
" Upper airway: sinusitis, saddle-nose, epistaxis",
" Lower airway: nodules, cavities, DAH, infiltrates",
" Renal: rapidly progressive crescentic GN",
"",
"Subglottic stenosis — characteristic finding",
"Orbital pseudotumor, scleritis",
"Skin: palpable purpura, ulcers",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.5);
cardHead(s, "Pulmonary Involvement", 5.35, 1.18, 4.4, ACC2);
blist(s, [
"Bilateral cavitating pulmonary nodules (most characteristic)",
"Diffuse alveolar hemorrhage via pulmonary capillaritis",
"Airspace consolidation and infiltrates",
"Pleural effusion — uncommon",
"Subglottic stenosis may cause stridor",
"CT: nodules ± cavitation, halo sign, airspace disease",
], 5.5, 1.58, 4.1, 1.95, 11.5);
card(s, 5.35, 3.8, 4.4, 1.62);
cardHead(s, "Treatment", 5.35, 3.8, 4.4, "2D8A5E");
blist(s, [
"Induction: Rituximab + high-dose glucocorticoids",
" (Rituximab non-inferior to CYC — RAVE/RITUXVAS trials)",
"Maintenance: azathioprine or MMF ± low-dose steroids",
"Relapse: rituximab re-treatment",
"Severe renal/pulmonary: plasma exchange considered",
], 5.5, 4.2, 4.1, 1.1, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 14. EGPA
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,14);
label(s, "ANCA-Associated Vasculitis");
title(s, "Eosinophilic GPA (Churg-Strauss Syndrome)");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Clinical Phases", 0.55, 1.18, 4.35, "A23B72");
blist(s, [
"Phase 1 — Prodromal (years):",
" Allergic rhinitis, nasal polyposis, asthma",
"",
"Phase 2 — Eosinophilic:",
" Peripheral eosinophilia (>10% or >1500/µL)",
" Eosinophilic pulmonary infiltrates (transient)",
" Eosinophilic gastroenteritis",
"",
"Phase 3 — Vasculitic:",
" Systemic necrotizing vasculitis",
" Mononeuritis multiplex (most common feature)",
" Cardiac involvement — major cause of death",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.5);
cardHead(s, "Pulmonary & Skin Features", 5.35, 1.18, 4.4, "A23B72");
blist(s, [
"Asthma — hallmark; often precedes vasculitis by years",
"Transient pulmonary infiltrates (Loeffler-like)",
"Pleural effusion with eosinophilia",
"Skin: palpable purpura, indurated nodules (scalp/extensors)",
"Histology: necrotizing granulomas + tissue eosinophilia",
"MPO-ANCA (p-ANCA) positive in ~40%",
], 5.5, 1.58, 4.1, 1.95, 11.5);
card(s, 5.35, 3.8, 4.4, 1.62);
cardHead(s, "Treatment", 5.35, 3.8, 4.4, "2D8A5E");
blist(s, [
"High-dose corticosteroids — mainstay of therapy",
"Cyclophosphamide for severe/refractory vasculitis",
"Mepolizumab (anti-IL-5) — approved for EGPA maintenance",
"Cardiac involvement → aggressive immunosuppression",
], 5.5, 4.2, 4.1, 1.1, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 15. GOODPASTURE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,15);
label(s, "Anti-GBM Disease");
title(s, "Goodpasture Syndrome");
rule(s, 1.1);
card(s, 0.55, 1.18, 4.35, 4.24);
cardHead(s, "Pathogenesis & Features", 0.55, 1.18, 4.35, "C85250");
blist(s, [
"Anti-GBM antibodies (IgG) against α3 chain of type IV collagen",
"Linear IgG deposition on alveolar AND glomerular BM",
"Classic triad: DAH + RPGN + anti-GBM antibodies",
"",
"Pulmonary features:",
" Diffuse alveolar hemorrhage — hemoptysis ± anaemia",
" Bilateral airspace consolidation on CXR/CT",
" Iron deficiency from recurrent alveolar bleeding",
"",
"Renal features:",
" Rapidly progressive crescentic GN",
" Hematuria, proteinuria → acute renal failure",
" Without treatment: ESRD within weeks",
], 0.7, 1.58, 4.05, 3.65, 11.5);
card(s, 5.35, 1.18, 4.4, 2.5);
cardHead(s, "Diagnosis", 5.35, 1.18, 4.4, ACC2);
blist(s, [
"Serum anti-GBM antibodies (ELISA) — highly sensitive",
"Renal biopsy: crescentic GN + linear IgG on IF",
"Bronchoalveolar lavage: hemosiderin-laden macrophages",
"ANCA co-positivity in 30% (double-positive disease)",
"CXR/CT: bilateral airspace disease, lower-lobe predominance",
], 5.5, 1.58, 4.1, 1.95, 11.5);
card(s, 5.35, 3.8, 4.4, 1.62);
cardHead(s, "Treatment", 5.35, 3.8, 4.4, "2D8A5E");
blist(s, [
"Plasma exchange (14 exchanges over 2 weeks) — removes Ab",
"High-dose IV methylprednisolone",
"Oral cyclophosphamide",
"Avoid smoking — major trigger for DAH in susceptible patients",
"Renal transplant only after anti-GBM antibodies undetectable",
], 5.5, 4.2, 4.1, 1.1, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 16. SCREENING & MONITORING GUIDELINES
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,16);
label(s, "2023 ACR/CHEST Guideline");
title(s, "Screening & Monitoring CTD-ILD");
rule(s, 1.1);
s.addText("Johnson SR et al. Arthritis Rheumatol 2024 (PMID 38973714) — first ACR/CHEST joint guideline. Covers RA, SSc, IIM, MCTD, Sjögren disease.", {
x:0.55, y:1.16, w:8.9, h:0.28, fontSize:10.5, color:SOFT, italic:true, fontFace:"Calibri"
});
const recs = [
{ h:"Conditionally RECOMMEND — Screening", c:"2D8A5E", items:["PFTs (spirometry + DLCO) for all at-risk SARDs","HRCT chest for all at-risk SARDs"] },
{ h:"Conditionally RECOMMEND AGAINST — Screening", c:"E08A2E", items:["6-minute walk test distance (6MWD)","Chest radiography alone as primary screening","Ambulatory desaturation testing","Bronchoscopy"] },
{ h:"STRONGLY RECOMMEND AGAINST", c:"C85250", items:["Surgical lung biopsy for ILD screening purposes"] },
{ h:"Monitoring — Conditionally RECOMMEND", c:ACC, items:["Serial PFTs at regular intervals","HRCT chest when clinically indicated","Ambulatory desaturation testing"] },
{ h:"Monitoring — Conditionally AGAINST", c:SOFT, items:["6MWD, chest radiography, or bronchoscopy for routine monitoring"] },
{ h:"Disease-Specific Risk Factors", c:ACC2, items:["SSc: anti-Scl-70, dcSSc → higher ILD risk","RA: anti-CCP, MUC5B variant, smoking","IIM: anti-Jo-1/MDA5 → mandatory ILD screen","MCTD: anti-RNP, esp. with SSc overlap"] },
];
recs.forEach((r,i) => {
const col=i<3?0:1, row=i<3?i:i-3;
const x=col===0?0.55:5.35, y=1.52+row*1.34;
card(s, x, y, 4.4, 1.26);
cardHead(s, r.h, x, y, 4.4, r.c);
blist(s, r.items, x+0.12, y+0.36, 4.15, 0.85, 11);
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 17. TREATMENT GUIDELINES
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,17);
label(s, "2023 ACR/CHEST Guideline");
title(s, "Treatment of SARD-ILD");
rule(s, 1.1);
s.addText("Johnson SR et al. Arthritis Care Res 2024 (PMID 38973731) — 35 recommendations including 2 strong recommendations.", {
x:0.55, y:1.16, w:8.9, h:0.28, fontSize:10.5, color:SOFT, italic:true, fontFace:"Calibri"
});
warn(s, "STRONG: Against glucocorticoids as first-line in SSc-ILD | STRONG: Against glucocorticoids after ILD progression in SSc-ILD", 0.55, 1.52, 8.9);
rule(s, 1.92);
// Left: first-line
card(s, 0.55, 2.0, 4.35, 1.62);
cardHead(s, "First-Line Treatment (by SARD)", 0.55, 2.0, 4.35, ACC);
blist(s, [
"All SARDs except SSc: glucocorticoids conditionally recommended",
"SSc-ILD: mycophenolate (strong recommendation — ATS 2024)",
"Consider immunosuppression + antifibrotic together in progressive ILD",
], 0.7, 2.4, 4.05, 1.1, 11.5);
card(s, 0.55, 3.72, 4.35, 1.7);
cardHead(s, "Progressive ILD (despite 1st line)", 0.55, 3.72, 4.35, ACC2);
blist(s, [
"Add or switch immunosuppressive agent",
"Add nintedanib (progressive fibrosing ILD)",
"Add rituximab — particularly in IIM-ILD",
"Reassess diagnosis and exclude drug-induced ILD",
], 0.7, 4.12, 4.05, 1.15, 11.5);
// Right: rapidly progressive
card(s, 5.35, 2.0, 4.4, 3.42);
cardHead(s, "Rapidly Progressive ILD", 5.35, 2.0, 4.4, "C85250");
blist(s, [
"High-dose IV methylprednisolone (pulse)",
"IV cyclophosphamide (750 mg/m² monthly) OR",
"IV rituximab (1000 mg × 2 doses)",
"IVIG in refractory / anti-MDA5 IIM",
"Consider plasma exchange if anti-MDA5+",
"",
"Anti-MDA5 IIM — particularly poor prognosis:",
" Multi-drug combination from onset",
" High mortality despite aggressive treatment",
"",
"All severe/refractory cases:",
" Early referral to lung transplant centre",
" Palliative care discussion",
], 5.5, 2.4, 4.1, 2.85, 11.5);
}
// ══════════════════════════════════════════════════════════════════════════════
// 18. RECENT GUIDELINES OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,18);
label(s, "Guidelines 2024–2026");
title(s, "Major Practice Guidelines at a Glance");
rule(s, 1.1);
const guides = [
{ org:"ERS/EULAR 2026", title:"CTD-ILD Clinical Practice Guidelines", pmid:"40912974",
note:"25 PICO + 28 narrative questions. SSc, RA, IIM, Sjögren, SLE, MCTD. Full screening, diagnostic, monitoring and treatment algorithms.", c:CHIP_COLORS_MAP[0] },
{ org:"ATS 2024", title:"Treatment of SSc-ILD — Clinical Practice Guideline", pmid:"37772985",
note:"Recommends mycophenolate. Suggests cyclophosphamide, rituximab, tocilizumab, nintedanib, nintedanib+MMF combination. GRADE evidence.", c:CHIP_COLORS_MAP[1] },
{ org:"EULAR 2023", title:"Systemic Sclerosis Treatment: 2023 Update", pmid:"39874231",
note:"22 recommendations across 8 domains. First EULAR endorsement of MMF, nintedanib, rituximab and tocilizumab for SSc ILD and skin fibrosis.", c:CHIP_COLORS_MAP[2] },
{ org:"ACR/CHEST 2023", title:"ILD Screening & Monitoring in SARDs", pmid:"38973714",
note:"15 recommendations. HRCT + PFTs conditionally recommended for all at-risk SARDs. Strongly against surgical lung biopsy for screening.", c:CHIP_COLORS_MAP[3] },
{ org:"ACR/CHEST 2023", title:"ILD Treatment in SARDs", pmid:"38973731",
note:"35 recommendations, 2 strong. Against glucocorticoids in SSc-ILD. First comprehensive treatment guideline across all SARD subtypes.", c:CHIP_COLORS_MAP[4] },
];
guides.forEach((g,i) => {
const y = 1.18 + i*0.87;
card(s, 0.55, y, 8.9, 0.8);
s.addShape("rect", { x:0.55, y, w:1.35, h:0.8, fill:{color:g.c}, line:{type:"none"}, rounding:0.05 });
s.addText(g.org, { x:0.6, y:y+0.1, w:1.25, h:0.36, fontSize:10.5, bold:true, color:W, align:"center", fontFace:"Calibri", margin:0 });
s.addText(`PMID ${g.pmid}`, { x:0.6, y:y+0.52, w:1.25, h:0.2, fontSize:8, color:"CCDDEE", align:"center", fontFace:"Calibri", margin:0 });
s.addText(g.title, { x:2.05, y:y+0.08, w:6.2, h:0.26, fontSize:11.5, bold:true, color:INK, fontFace:"Calibri", margin:0 });
s.addText(g.note, { x:2.05, y:y+0.36, w:6.2, h:0.38, fontSize:10, color:SOFT, fontFace:"Calibri", margin:0 });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 19. SUMMARY TABLE
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,19);
label(s, "Summary");
title(s, "Pulmonary Manifestations at a Glance");
rule(s, 1.1);
const cols = ["Disease","ILD Pattern","Pleura","PAH","Hallmark Feature"];
const cw = [1.38, 1.58, 1.32, 1.08, 3.22];
const cx = [0.2, 1.58, 3.16, 4.48, 5.56];
const rows = [
["RA", "UIP, NSIP", "Common (exudate)", "Uncommon", "Caplan; Anti-CCP; avoid MTX"],
["Systemic Sclerosis","NSIP >> UIP", "Uncommon", "Major (lcSSc)","Scl-70→ILD; centromere→PAH"],
["SLE", "LIP, NSIP", "Common (pleuritis)","Emboli/vascu.","Shrinking lung; APS; DAH"],
["DM/PM", "NSIP, UIP, OP, DAD", "Rare", "Rare", "Anti-Jo-1; DAD=poor prognosis"],
["Sjögren", "LIP, OP", "Rare", "Rare", "Bronchiectasis; lymphoma risk"],
["MCTD", "NSIP", "Pleuritis (40%)", "Significant", "Anti-RNP; 5-yr surv ↓ w/PAH"],
["Ankylosing Sp.", "Apical fibrobullous", "Rare", "Rare", "Upper lobe cavities; chest rigidity"],
["Sarcoidosis", "Granulomatous", "Rare", "Vasocentric", "ACE↑; Stage I–IV; BHL"],
["GPA", "Nodules/cavities/DAH", "Rare", "Rare", "PR3-ANCA; saddle-nose; GN"],
["EGPA", "Eosinophilic infiltr.","Rare", "Rare", "Asthma + eosinophilia; MPO-ANCA"],
["Goodpasture", "DAH", "Rare", "Rare", "Anti-GBM; RPGN; linear IgG"],
];
const rowH = 0.405, startY = 1.15;
cols.forEach((h,c) => {
s.addShape("rect", { x:cx[c], y:startY, w:cw[c]-0.04, h:0.37, fill:{color:ACC}, line:{type:"none"} });
s.addText(h, { x:cx[c]+0.04, y:startY, w:cw[c]-0.1, h:0.37, fontSize:9.5, bold:true, color:W, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
});
rows.forEach((row,r) => {
const y = startY+0.39+r*rowH;
s.addShape("rect", { x:0.2, y, w:9.62, h:rowH-0.015, fill:{color:r%2===0?W:BG}, line:{color:LINE, pt:0.5} });
row.forEach((cell,c) => {
s.addText(cell, { x:cx[c]+0.04, y:y+0.01, w:cw[c]-0.1, h:rowH-0.04,
fontSize:9, color:c===0?ACC:INK, bold:c===0, align:"center", valign:"middle", fontFace:"Calibri", margin:0 });
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 20. IMAGING GALLERY
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:10, h:5.625, fill:{color:"0D1B2A"}, line:{type:"none"} });
s.addShape("rect", { x:0, y:0, w:10, h:0.06, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Imaging Gallery", { x:0.5, y:0.12, w:9, h:0.5, fontSize:22, bold:true, color:W, fontFace:"Calibri" });
s.addText(`${TOTAL-1} / ${TOTAL}`, { x:8.8, y:5.42, w:1.0, h:0.18, fontSize:8, color:"444444", align:"right", fontFace:"Calibri", margin:0 });
const gallery = [
{ idx:0, cap:"NSIP in CTD-ILD: GGO + bilateral septal thickening" },
{ idx:3, cap:"Stage I Sarcoidosis: bilateral hilar lymphadenopathy" },
{ idx:6, cap:"SSc NSIP progression: cellular → fibrotic (10 months)" },
{ idx:4, cap:"MCTD-ILD: reticulation + traction bronchiectasis" },
];
gallery.forEach(({idx,cap},i) => {
const col=i%2, row=Math.floor(i/2);
const x=0.2+col*5.05, y=0.74+row*2.48;
if(imgs[idx]&&!imgs[idx].error) s.addImage({ data:imgs[idx].base64, x, y, w:4.8, h:2.12 });
s.addText(cap, { x, y:y+2.14, w:4.8, h:0.28, fontSize:9, color:"AAAAAA", italic:true, align:"center", fontFace:"Calibri" });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 21. REFERENCES
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s); chrome(s,21);
label(s, "References");
title(s, "References & Further Reading");
rule(s, 1.1);
const refs = [
"Goldman-Cecil Medicine, 27th ed. (2024). Chapters 80, 243–248. Elsevier.",
"Fishman's Pulmonary Diseases and Disorders, 6th ed. (2023). Chapter 58. McGraw-Hill.",
"Robbins & Cotran Pathologic Basis of Disease, 10th ed. (2021). Chapter 15. Elsevier.",
"Johnson SR et al. 2023 ACR/CHEST Guideline — Screening & Monitoring of ILD in SARDs.\n Arthritis Rheumatol. 2024;76(8):1076–1089. PMID 38973714.",
"Johnson SR et al. 2023 ACR/CHEST Guideline — Treatment of ILD in SARDs.\n Arthritis Care Res (Hoboken). 2024. PMID 38973731.",
"Raghu G et al. Treatment of SSc-ILD — ATS Clinical Practice Guideline.\n Am J Respir Crit Care Med. 2024;209(2):137–152. PMID 37772985.",
"Del Galdo F et al. EULAR recommendations for treatment of SSc: 2023 update.\n Ann Rheum Dis. 2025;84(1):42–55. PMID 39874231.",
"Antoniou KM et al. ERS/EULAR CTD-ILD Clinical Practice Guidelines.\n Ann Rheum Dis / Eur Respir J. 2026. PMID 40912974.",
"Podolanczuk AJ et al. Evaluation & Management of ILA — ATS Clinical Statement.\n Am J Respir Crit Care Med. 2025. PMID 40387336.",
];
refs.forEach((r,i) => {
const y = 1.22 + i*0.47;
s.addShape("rect", { x:0.55, y:y+0.08, w:0.06, h:0.22, fill:{color:i<3?ACC:ACC2}, line:{type:"none"} });
s.addText(r, { x:0.72, y, w:8.85, h:0.44, fontSize:10.5, color:INK, fontFace:"Calibri", valign:"top", margin:0 });
});
}
// ══════════════════════════════════════════════════════════════════════════════
// 22. THANK YOU
// ══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.addShape("rect", { x:0, y:0, w:10, h:5.625, fill:{color:ACC}, line:{type:"none"} });
s.addShape("rect", { x:5.8, y:0, w:4.2, h:5.625, fill:{color:W}, line:{type:"none"} });
s.addShape("rect", { x:5.78, y:0.5, w:0.025, h:4.6, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Thank you", { x:0.55, y:1.8, w:5.0, h:0.9, fontSize:38, bold:true, color:W, fontFace:"Calibri" });
s.addText("Questions & Discussion", { x:0.55, y:2.78, w:5.0, h:0.4, fontSize:14, color:"A8C4D9", fontFace:"Calibri", italic:true });
s.addShape("rect", { x:0.55, y:3.35, w:3.2, h:0.03, fill:{color:ACC2}, line:{type:"none"} });
s.addText("Sources: Goldman-Cecil Medicine · Fishman's Pulmonary Diseases\nFishman's · Robbins Pathology · ACR/CHEST 2023 · ATS 2024 · ERS/EULAR 2026", {
x:0.55, y:3.45, w:5.0, h:0.8, fontSize:10, color:"A8C4D9", fontFace:"Calibri" });
const toc2 = ["RA","SSc","SLE","DM/PM","Sjögren","MCTD","AS","Sarcoidosis","GPA","EGPA","Goodpasture"];
s.addText("Diseases Covered", { x:6.1, y:0.8, w:3.6, h:0.28, fontSize:10, charSpacing:4, color:ACC2, fontFace:"Calibri" });
s.addText(toc2.map((t,i)=>({ text:`${i+1}. ${t}`, options:{fontSize:12, color:INK, breakLine:i<toc2.length-1, fontFace:"Calibri"} })),
{ x:6.1, y:1.15, w:3.6, h:4.2, valign:"top" });
}
// ── chip color map workaround ─────────────────────────────────────────────────
var CHIP_COLORS_MAP = [ACC,"1A7A8A","A23B72","2D8A5E","E08A2E"];
const outPath = "/home/daytona/workspace/pulmonary-systemic-disease/Pulmonary_Systemic_Disease_v3.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("SUCCESS:", outPath);
}).catch(e => console.error("ERROR:", e));
cd /home/daytona/workspace/pulmonary-systemic-disease && node build3.js 2>&1