Provide professional ppt using above content
python -m markitdown "/home/daytona/workspace/attachments/d5c14b05-c595-4513-9bc…
cd /home/daytona/workspace && python3 -c " from pptx import Presentation prs = P…
cd /home/daytona/workspace && pip install python-pptx --quiet && python3 -c " fr…
python3 -c " from pptx import Presentation from pptx.util import Inches prs = Pr…
mkdir -p /home/daytona/workspace/plaque-psoriasis-ppt && ls /home/daytona/worksp…
~/plaque-psoriasis-ppt/build.js
const pptxgen = require("pptxgenjs");
const prs = new pptxgen();
prs.layout = "LAYOUT_16x9";
prs.title = "Plaque Psoriasis Case";
prs.author = "Ganavi C";
// ─── COLOUR PALETTE ───────────────────────────────────────────────
const DARK_BG = "0D1B2A"; // deep navy
const MID_BG = "1B3A5C"; // rich blue
const ACCENT = "3AB4F2"; // sky-blue accent
const ACCENT2 = "F26B3A"; // warm coral for highlights
const WHITE = "FFFFFF";
const LIGHT_TEXT = "D0E8F5";
const CARD_BG = "132840"; // card background
const TABLE_HDR = "1E4D78";
const TABLE_ROW1 = "0F2236";
const TABLE_ROW2 = "132840";
const GREEN_OK = "4CAF50";
const RED_FLAG = "EF5350";
// Helper – add a dark slide background with optional top accent bar
function addBg(slide, barColor) {
slide.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_BG } });
if (barColor) {
slide.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.07, fill: { color: barColor } });
slide.addShape(prs.ShapeType.rect, { x: 0, y: 5.555, w: 10, h: 0.07, fill: { color: barColor } });
}
}
// Helper – section header band
function sectionBand(slide, label, y) {
slide.addShape(prs.ShapeType.rect, { x: 0, y: y, w: 10, h: 0.44, fill: { color: MID_BG } });
slide.addShape(prs.ShapeType.rect, { x: 0, y: y, w: 0.06, h: 0.44, fill: { color: ACCENT } });
slide.addText(label, { x: 0.15, y: y, w: 9.6, h: 0.44, fontSize: 11, bold: true, color: ACCENT, valign: "middle", margin: 0 });
}
// Helper – info card
function card(slide, x, y, w, h, title, lines) {
slide.addShape(prs.ShapeType.rect, { x, y, w, h, fill: { color: CARD_BG }, line: { color: ACCENT, width: 1 } });
slide.addText(title, { x: x + 0.12, y: y + 0.08, w: w - 0.24, h: 0.3, fontSize: 9, bold: true, color: ACCENT, margin: 0 });
const items = lines.map((l, i) => ({ text: l, options: { breakLine: i < lines.length - 1, bullet: false } }));
slide.addText(items, { x: x + 0.12, y: y + 0.38, w: w - 0.24, h: h - 0.5, fontSize: 8, color: LIGHT_TEXT, valign: "top", margin: 0 });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
// background
s.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_BG } });
// dramatic left panel
s.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 3.6, h: 5.625, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 3.6, y: 0, w: 0.06, h: 5.625, fill: { color: ACCENT } });
// decorative circles
s.addShape(prs.ShapeType.ellipse, { x: 0.4, y: 0.3, w: 1.4, h: 1.4, fill: { color: ACCENT, transparency: 80 } });
s.addShape(prs.ShapeType.ellipse, { x: 1.8, y: 3.9, w: 1.8, h: 1.8, fill: { color: ACCENT2, transparency: 85 } });
// Left panel text
s.addText("CASE\nREPORT", { x: 0.15, y: 1.0, w: 3.2, h: 1.2, fontSize: 28, bold: true, color: ACCENT, align: "center", charSpacing: 8 });
s.addShape(prs.ShapeType.line, { x: 0.5, y: 2.25, w: 2.6, h: 0, line: { color: ACCENT2, width: 2 } });
s.addText("Dermatology &\nClinical Pharmacy", { x: 0.15, y: 2.4, w: 3.2, h: 0.8, fontSize: 11, color: LIGHT_TEXT, align: "center", italic: true });
// Presenter box
s.addShape(prs.ShapeType.rect, { x: 0.25, y: 3.5, w: 3.1, h: 1.6, fill: { color: DARK_BG }, line: { color: ACCENT, width: 1 } });
s.addText("PRESENTED BY", { x: 0.35, y: 3.6, w: 2.9, h: 0.3, fontSize: 8, bold: true, color: ACCENT2, align: "center", charSpacing: 3 });
s.addText([
{ text: "Ganavi C", options: { breakLine: true, bold: true } },
{ text: "V Pharm D", options: { breakLine: true } },
{ text: "21Q0275", options: {} }
], { x: 0.35, y: 3.95, w: 2.9, h: 0.9, fontSize: 11, color: WHITE, align: "center" });
// Main title area
s.addText("Plaque Psoriasis", { x: 3.9, y: 0.7, w: 5.8, h: 1.1, fontSize: 36, bold: true, color: WHITE });
s.addText("Clinical Case Study", { x: 3.9, y: 1.8, w: 5.8, h: 0.6, fontSize: 20, color: ACCENT, italic: true });
s.addShape(prs.ShapeType.line, { x: 3.9, y: 2.5, w: 5.5, h: 0, line: { color: ACCENT2, width: 1.5 } });
// Key disease tags
const tags = ["Severe", "Chronic", "Uncontrolled", "Biologic Candidate"];
tags.forEach((t, i) => {
const tx = 3.9 + i * 1.5;
s.addShape(prs.ShapeType.roundRect, { x: tx, y: 2.7, w: 1.38, h: 0.34, fill: { color: ACCENT2, transparency: 20 }, rectRadius: 0.05 });
s.addText(t, { x: tx, y: 2.7, w: 1.38, h: 0.34, fontSize: 8, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
});
s.addText("A 50-year-old male with a 27-year history of plaque psoriasis presenting\nwith severe, uncontrolled disease despite multiple lines of therapy.", {
x: 3.9, y: 3.2, w: 5.8, h: 0.9, fontSize: 10, color: LIGHT_TEXT, italic: true
});
// Bottom bar
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("V Pharm D | Clinical Pharmacy Case Presentation | 2024", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 2 – SUBJECTIVE: PATIENT PROFILE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
// Title bar
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("SUBJECTIVE DATA", { x: 0.18, y: 0.07, w: 5, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
s.addText("Patient Profile", { x: 5.2, y: 0.07, w: 4.6, h: 0.65, fontSize: 11, color: LIGHT_TEXT, valign: "middle", italic: true, align: "right", margin: 0 });
// Patient info card (left)
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.87, w: 4.5, h: 3.0, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.87, w: 4.5, h: 0.38, fill: { color: MID_BG } });
s.addText("PATIENT INFORMATION", { x: 0.3, y: 0.87, w: 4.3, h: 0.38, fontSize: 9, bold: true, color: ACCENT, valign: "middle", charSpacing: 2, margin: 0 });
const patRows = [
["Age", "50 years"], ["Gender", "Male"], ["Occupation", "Elementary School Teacher"],
["Weight", "75 kg"], ["Height", "5'9\""], ["Allergies", "NKA"]
];
patRows.forEach(([k, v], i) => {
const ry = 1.32 + i * 0.4;
const fill = i % 2 === 0 ? TABLE_ROW1 : TABLE_ROW2;
s.addShape(prs.ShapeType.rect, { x: 0.2, y: ry, w: 4.5, h: 0.38, fill: { color: fill } });
s.addText(k, { x: 0.32, y: ry, w: 1.8, h: 0.38, fontSize: 9, bold: true, color: ACCENT, valign: "middle", margin: 0 });
s.addText(v, { x: 2.15, y: ry, w: 2.4, h: 0.38, fontSize: 9, color: WHITE, valign: "middle", margin: 0 });
});
// Chief complaint
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 0.87, w: 4.75, h: 1.1, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 0.87, w: 4.75, h: 0.35, fill: { color: ACCENT2, transparency: 30 } });
s.addText("CHIEF COMPLAINT", { x: 5.1, y: 0.87, w: 4.5, h: 0.35, fontSize: 9, bold: true, color: WHITE, valign: "middle", charSpacing: 2, margin: 0 });
s.addText('"Nothing is helping my psoriasis."', { x: 5.1, y: 1.25, w: 4.5, h: 0.65, fontSize: 12, color: LIGHT_TEXT, italic: true, valign: "middle" });
// Social & Family History
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 2.1, w: 4.75, h: 1.77, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 2.1, w: 4.75, h: 0.35, fill: { color: MID_BG } });
s.addText("SOCIAL & FAMILY HISTORY", { x: 5.1, y: 2.1, w: 4.5, h: 0.35, fontSize: 9, bold: true, color: ACCENT, valign: "middle", charSpacing: 2, margin: 0 });
const socLines = [
"• Former heavy smoker",
"• Drinks one glass of wine daily",
"• Increased occupational stress",
"• Married with children",
"• Brother: Psoriasis | Father: HTN, T2DM"
];
s.addText(socLines.map((l, i) => ({ text: l, options: { breakLine: i < socLines.length - 1 } })), {
x: 5.1, y: 2.5, w: 4.5, h: 1.3, fontSize: 9, color: LIGHT_TEXT, valign: "top"
});
// PMH
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 3.98, w: 4.5, h: 0.58, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 0.75 } });
s.addText("PAST MEDICAL HISTORY", { x: 0.32, y: 3.98, w: 2.5, h: 0.3, fontSize: 8, bold: true, color: ACCENT2, margin: 0 });
s.addText("Major depressive episode — 16 years ago", { x: 0.32, y: 4.3, w: 4.2, h: 0.22, fontSize: 8.5, color: LIGHT_TEXT, margin: 0 });
// Footer
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 2 | Subjective Data – Patient Profile", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 3 – HISTORY OF PRESENT ILLNESS (split across 2 slides condensed)
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("HISTORY OF PRESENT ILLNESS", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Timeline
const events = [
{ age: "23 yrs", label: "Diagnosis", detail: "Plaque Psoriasis diagnosed\nInitial control: medium-potency topical corticosteroids" },
{ age: "Mid-30s", label: "Calcipotriol Added", detail: "Topical corticosteroids alone insufficient\nCalcipotriol therapy added" },
{ age: "Later", label: "PUVA Phototherapy", detail: "Psoralen + UVA initiated\nTemporary improvement, gradually lost effectiveness" },
{ age: "Ongoing", label: "Methotrexate", detail: "Escalated to 25 mg/week\nCumulative dose: 2.2 g\nShort-contact anthralin (SCAT) for acute flares" },
{ age: "1 yr ago", label: "Cyclosporine + Acitretin", detail: "Acitretin DC'd: severe xerosis\nCyclosporine 75 mg BD alone — 1 yr good control" },
{ age: "Now", label: "3rd Severe Flare", detail: "2 severe flares in past 6 months\nCurrent: most severe presentation yet" }
];
const colors = [ACCENT, "#3AB4F2", "#2E9BD4", "#F26B3A", "#E05520", RED_FLAG];
events.forEach((e, i) => {
const x = 0.2 + (i % 3) * 3.27;
const y = i < 3 ? 0.9 : 3.05;
const col = colors[i];
s.addShape(prs.ShapeType.rect, { x, y, w: 3.1, h: 1.9, fill: { color: CARD_BG }, line: { color: col, width: 1 } });
// top bar with age
s.addShape(prs.ShapeType.rect, { x, y, w: 3.1, h: 0.38, fill: { color: col, transparency: 20 } });
s.addText(e.age, { x: x + 0.1, y, w: 1.2, h: 0.38, fontSize: 8.5, bold: true, color: WHITE, valign: "middle", margin: 0 });
s.addText(e.label, { x: x + 1.3, y, w: 1.7, h: 0.38, fontSize: 8, color: WHITE, valign: "middle", align: "right", margin: 0 });
s.addText(e.detail, { x: x + 0.1, y: y + 0.44, w: 2.9, h: 1.35, fontSize: 8.5, color: LIGHT_TEXT, valign: "top" });
});
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 3 | Subjective – HPI Timeline", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 4 – OBJECTIVE: VITALS & PHYSICAL EXAM
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("OBJECTIVE DATA", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Vital signs – 4 cards
const vitals = [
{ label: "Blood Pressure", val: "129/83", unit: "mmHg", flag: false },
{ label: "Pulse", val: "88", unit: "bpm", flag: false },
{ label: "Temperature", val: "37.0", unit: "°C", flag: false },
{ label: "Appearance", val: "Alert", unit: "Mild anxiety", flag: false }
];
vitals.forEach((v, i) => {
const x = 0.2 + i * 2.45;
s.addShape(prs.ShapeType.rect, { x, y: 0.85, w: 2.3, h: 1.1, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x, y: 0.85, w: 2.3, h: 0.3, fill: { color: MID_BG } });
s.addText(v.label, { x: x + 0.08, y: 0.85, w: 2.14, h: 0.3, fontSize: 8, bold: true, color: ACCENT, valign: "middle", margin: 0 });
s.addText(v.val, { x: x + 0.08, y: 1.18, w: 2.14, h: 0.45, fontSize: 20, bold: true, color: WHITE, valign: "middle", align: "center" });
s.addText(v.unit, { x: x + 0.08, y: 1.63, w: 2.14, h: 0.28, fontSize: 9, color: LIGHT_TEXT, align: "center" });
});
// Skin exam
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 2.1, w: 9.6, h: 2.85, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 2.1, w: 9.6, h: 0.38, fill: { color: ACCENT2, transparency: 30 } });
s.addText("SKIN EXAMINATION – Severe Plaque Psoriasis", { x: 0.32, y: 2.1, w: 9.3, h: 0.38, fontSize: 10, bold: true, color: WHITE, valign: "middle", charSpacing: 1, margin: 0 });
// Location grid
const locs = ["Abdomen", "Arms", "Legs", "Back", "Scalp", "Palms", "Soles", "Elbows", "Knees"];
locs.forEach((loc, i) => {
const x = 0.35 + (i % 5) * 1.9;
const y = 2.6 + Math.floor(i / 5) * 0.5;
s.addShape(prs.ShapeType.roundRect, { x, y, w: 1.75, h: 0.38, fill: { color: RED_FLAG, transparency: 30 }, rectRadius: 0.04 });
s.addText(loc, { x, y, w: 1.75, h: 0.38, fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
});
// Characteristics
const chars = ["Thick plaques", "Erythematous lesions", "Well-demarcated borders", "Confluent lesions", "Silvery-white scales", "Excoriations from scratching"];
s.addText("Characteristics: ", { x: 0.35, y: 3.65, w: 1.6, h: 0.3, fontSize: 8.5, bold: true, color: ACCENT2, margin: 0 });
s.addText(chars.join(" • "), { x: 1.9, y: 3.65, w: 7.8, h: 0.3, fontSize: 8.5, color: LIGHT_TEXT, margin: 0 });
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 4 | Objective Data – Vitals & Skin Exam", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 5 – LABORATORY DATA (Part 1: CBC + RFT + LFT)
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("LABORATORY DATA", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Left col – CBC
const cbcData = [
["Hb", "13.5 g/dL", "13.5–17.5 g/dL", "N"],
["Hct", "35%", "40–52%", "L"],
["WBC", "6.0 ×10³/mm³", "4–11 × 10³/mm³", "N"],
["Platelets", "255 ×10³/mm³", "150–400 × 10³/mm³", "N"],
];
const rftData = [
["BUN", "14 mg/dL", "7–20 mg/dL", "N"],
["Creatinine", "1.0 mg/dL", "0.6–1.3 mg/dL", "N"],
];
const lftData = [
["AST (SGOT)", "22 IU/L", "10–40 IU/L", "N"],
["ALT (SGPT)", "38 IU/L", "7–56 IU/L", "N"],
["ALP", "98 IU/L", "44–147 IU/L", "N"],
["Total Bilirubin", "1.0 mg/dL", "0.1–1.2 mg/dL", "N"],
["Albumin", "3.7 g/dL", "3.5–5.0 g/dL", "N"],
];
function labTable(slide, x, y, w, title, rows) {
slide.addShape(prs.ShapeType.rect, { x, y, w, h: 0.35, fill: { color: TABLE_HDR } });
slide.addText(title, { x: x + 0.08, y, w: w - 0.1, h: 0.35, fontSize: 9, bold: true, color: ACCENT, valign: "middle", margin: 0 });
// header
const hdrH = 0.32;
const colW = [w * 0.38, w * 0.32, w * 0.22, w * 0.08];
const hdrs = ["Parameter", "Result", "Normal", ""];
slide.addShape(prs.ShapeType.rect, { x, y: y + 0.35, w, h: hdrH, fill: { color: MID_BG } });
let cx = x;
hdrs.forEach((h, ci) => {
slide.addText(h, { x: cx + 0.04, y: y + 0.35, w: colW[ci] - 0.04, h: hdrH, fontSize: 7.5, bold: true, color: LIGHT_TEXT, valign: "middle", margin: 0 });
cx += colW[ci];
});
rows.forEach((row, ri) => {
const ry = y + 0.35 + hdrH + ri * 0.33;
const fill = ri % 2 === 0 ? TABLE_ROW1 : TABLE_ROW2;
slide.addShape(prs.ShapeType.rect, { x, y: ry, w, h: 0.33, fill: { color: fill } });
let rcx = x;
const vals = [row[0], row[1], row[2]];
vals.forEach((v, ci) => {
let col = LIGHT_TEXT;
if (ci === 1 && row[3] === "L") col = ACCENT2;
if (ci === 1 && row[3] === "H") col = RED_FLAG;
slide.addText(v, { x: rcx + 0.04, y: ry, w: colW[ci] - 0.04, h: 0.33, fontSize: 8, color: col, valign: "middle", margin: 0 });
rcx += colW[ci];
});
// flag badge
if (row[3] === "L" || row[3] === "H") {
const fc = row[3] === "L" ? ACCENT2 : RED_FLAG;
slide.addShape(prs.ShapeType.roundRect, { x: x + w - colW[3] + 0.01, y: ry + 0.05, w: colW[3] - 0.02, h: 0.22, fill: { color: fc, transparency: 20 }, rectRadius: 0.04 });
slide.addText(row[3], { x: x + w - colW[3] + 0.01, y: ry + 0.05, w: colW[3] - 0.02, h: 0.22, fontSize: 7, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
}
});
}
labTable(s, 0.2, 0.85, 4.55, "COMPLETE BLOOD COUNT", cbcData);
labTable(s, 0.2, 3.05, 4.55, "RENAL FUNCTION TEST", rftData);
labTable(s, 5.05, 0.85, 4.7, "LIVER FUNCTION TEST", lftData);
// Electrolytes & others on right bottom
const electData = [
["Sodium (Na⁺)", "139 mEq/L", "135–145 mEq/L", "N"],
["Potassium (K⁺)", "4.0 mEq/L", "3.5–5.0 mEq/L", "N"],
["Chloride (Cl⁻)", "102 mEq/L", "98–106 mEq/L", "N"],
["HCO₃⁻", "25 mEq/L", "22–28 mEq/L", "N"],
["Uric Acid", "4 mg/dL", "3.5–7.2 mg/dL", "N"],
["Total Cholesterol", "180 mg/dL", "<200 mg/dL", "N"],
["Blood Glucose", "98 mg/dL", "70–110 mg/dL", "N"],
];
labTable(s, 5.05, 3.05, 4.7, "ELECTROLYTES & OTHERS", electData);
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 5 | Laboratory Data", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 6 – ASSESSMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("ASSESSMENT", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Diagnosis highlight
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 9.6, h: 0.7, fill: { color: RED_FLAG, transparency: 25 }, line: { color: RED_FLAG, width: 1 } });
s.addText("PRIMARY DIAGNOSIS", { x: 0.4, y: 0.85, w: 3, h: 0.35, fontSize: 8, bold: true, color: WHITE, charSpacing: 2, margin: 0 });
s.addText("Severe Chronic Plaque Psoriasis (Uncontrolled)", { x: 0.4, y: 1.2, w: 9.1, h: 0.32, fontSize: 13, bold: true, color: WHITE, margin: 0 });
// Severity indicators – 3 metric boxes
const metrics = [
{ label: "BSA Involvement", val: ">20%", sub: "Severe (>10% = Severe)" },
{ label: "Estimated PASI", val: ">20", sub: "Severe disease threshold" },
{ label: "Disease Duration", val: "27 yrs", sub: "Chronic, refractory" },
];
metrics.forEach((m, i) => {
const x = 0.2 + i * 3.27;
s.addShape(prs.ShapeType.rect, { x, y: 1.7, w: 3.1, h: 1.05, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 1 } });
s.addText(m.label, { x: x + 0.1, y: 1.72, w: 2.9, h: 0.3, fontSize: 8, bold: true, color: ACCENT, margin: 0 });
s.addText(m.val, { x: x + 0.1, y: 2.0, w: 2.9, h: 0.42, fontSize: 22, bold: true, color: WHITE, align: "center" });
s.addText(m.sub, { x: x + 0.1, y: 2.42, w: 2.9, h: 0.28, fontSize: 7.5, color: LIGHT_TEXT, align: "center" });
});
// Areas affected
const areas = ["Scalp", "Arms", "Legs", "Abdomen", "Back", "Palms", "Soles"];
s.addText("Areas Affected:", { x: 0.25, y: 2.85, w: 2, h: 0.3, fontSize: 9, bold: true, color: ACCENT2, margin: 0 });
areas.forEach((a, i) => {
s.addShape(prs.ShapeType.roundRect, { x: 0.25 + i * 1.38, y: 3.18, w: 1.25, h: 0.3, fill: { color: MID_BG }, line: { color: ACCENT, width: 0.5 }, rectRadius: 0.04 });
s.addText(a, { x: 0.25 + i * 1.38, y: 3.18, w: 1.25, h: 0.3, fontSize: 8.5, color: WHITE, align: "center", valign: "middle", margin: 0 });
});
// Drug Therapy Problems
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 3.6, w: 9.6, h: 1.55, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 3.6, w: 9.6, h: 0.35, fill: { color: MID_BG } });
s.addText("DRUG THERAPY PROBLEMS", { x: 0.32, y: 3.6, w: 9, h: 0.35, fontSize: 9, bold: true, color: ACCENT, valign: "middle", charSpacing: 2, margin: 0 });
const dtps = [
"1. Uncontrolled severe plaque psoriasis despite cyclosporine",
"2. Inadequate response to current cyclosporine dose",
"3. Previous failures: topicals, PUVA, methotrexate",
"4. Acitretin intolerance (severe xerosis)",
"5. Severe pruritus causing excoriations",
"6. Stress-triggered disease flare-ups",
];
const half = Math.ceil(dtps.length / 2);
dtps.slice(0, half).forEach((d, i) => {
s.addText(d, { x: 0.35, y: 4.0 + i * 0.36, w: 4.65, h: 0.32, fontSize: 8.5, color: LIGHT_TEXT, margin: 0 });
});
dtps.slice(half).forEach((d, i) => {
s.addText(d, { x: 5.1, y: 4.0 + i * 0.36, w: 4.6, h: 0.32, fontSize: 8.5, color: LIGHT_TEXT, margin: 0 });
});
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 6 | Assessment & Drug Therapy Problems", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 7 – PLANNING: GOALS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("PLANNING", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Short-term goals
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 4.65, h: 3.35, fill: { color: CARD_BG }, line: { color: ACCENT, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 4.65, h: 0.4, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 0.07, h: 0.4, fill: { color: ACCENT } });
s.addText("SHORT-TERM GOALS (4–8 Weeks)", { x: 0.35, y: 0.85, w: 4.4, h: 0.4, fontSize: 10, bold: true, color: ACCENT, valign: "middle", charSpacing: 1, margin: 0 });
const st = ["Reduce erythema (redness)", "Reduce scaling", "Relieve itching (pruritus)", "Stop disease progression", "Improve sleep and comfort"];
st.forEach((g, i) => {
const ry = 1.35 + i * 0.5;
s.addShape(prs.ShapeType.ellipse, { x: 0.35, y: ry + 0.08, w: 0.22, h: 0.22, fill: { color: ACCENT } });
s.addText(`${i + 1}`, { x: 0.35, y: ry + 0.08, w: 0.22, h: 0.22, fontSize: 8, bold: true, color: DARK_BG, align: "center", valign: "middle", margin: 0 });
s.addText(g, { x: 0.65, y: ry, w: 4.1, h: 0.4, fontSize: 10, color: LIGHT_TEXT, valign: "middle" });
});
// Long-term goals
s.addShape(prs.ShapeType.rect, { x: 5.15, y: 0.85, w: 4.65, h: 3.35, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 5.15, y: 0.85, w: 4.65, h: 0.4, fill: { color: ACCENT2, transparency: 25 } });
s.addShape(prs.ShapeType.rect, { x: 5.15, y: 0.85, w: 0.07, h: 0.4, fill: { color: ACCENT2 } });
s.addText("LONG-TERM GOALS (3–6 Months)", { x: 5.3, y: 0.85, w: 4.4, h: 0.4, fontSize: 10, bold: true, color: WHITE, valign: "middle", charSpacing: 1, margin: 0 });
const lt = ["Achieve PASI-75 or PASI-90 response", "Prevent future flare-ups", "Improve quality of life", "Maintain long-term disease control", "Minimize treatment-related toxicity"];
lt.forEach((g, i) => {
const ry = 1.35 + i * 0.5;
s.addShape(prs.ShapeType.ellipse, { x: 5.3, y: ry + 0.08, w: 0.22, h: 0.22, fill: { color: ACCENT2 } });
s.addText(`${i + 1}`, { x: 5.3, y: ry + 0.08, w: 0.22, h: 0.22, fontSize: 8, bold: true, color: WHITE, align: "center", valign: "middle", margin: 0 });
s.addText(g, { x: 5.6, y: ry, w: 4.1, h: 0.4, fontSize: 10, color: LIGHT_TEXT, valign: "middle" });
});
// Non-pharm label at bottom
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 4.3, w: 9.6, h: 0.75, fill: { color: MID_BG }, line: { color: ACCENT, width: 0.75 } });
s.addText("NON-PHARMACOLOGICAL TREATMENT", { x: 0.35, y: 4.3, w: 4, h: 0.35, fontSize: 9, bold: true, color: ACCENT, valign: "middle", charSpacing: 2, margin: 0 });
const npt = ["Regular moisturization (emollients 3-4×/day)", "Lukewarm water bathing", "Stress management (yoga, meditation)", "Avoid skin trauma & Koebner phenomenon", "Stop smoking, limit alcohol, exercise regularly"];
s.addText(npt.join(" • "), { x: 0.35, y: 4.65, w: 9.3, h: 0.32, fontSize: 8.5, color: LIGHT_TEXT });
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 7 | Planning – Therapeutic Goals", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 8 – PHARMACOLOGICAL TREATMENT TABLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("PHARMACOLOGICAL TREATMENT", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
const rxData = [
["1", "Inj. Secukinumab", "300 mg", "SC", "Wks 0,1,2,3,4 → q4w", "Long-term maintenance"],
["2", "Tab. Cyclosporine", "75 mg", "PO", "Twice daily", "4–8 wks → taper"],
["3", "Clobetasol 0.05% Oint.", "–", "Topical", "Twice daily", "2–4 weeks"],
["4", "Clobetasol 0.05% Scalp Sol.", "–", "Topical", "Once daily", "2–4 weeks"],
["5", "Calcipotriol 0.005% Oint.", "–", "Topical", "Twice daily", "Long-term maintenance"],
["6", "Tab. Cetirizine", "10 mg", "PO", "Once daily (bedtime)", "2–4 wks (until resolved)"],
["7", "Emollients/Moisturizers", "–", "Topical", "3–4 times daily", "Continuous"],
];
// Table header
const cols = ["#", "DRUG", "DOSE", "ROA", "FREQUENCY", "DURATION"];
const cw = [0.35, 2.5, 0.7, 0.6, 2.4, 2.7];
const startX = 0.2;
let cx = startX;
s.addShape(prs.ShapeType.rect, { x: startX, y: 0.85, w: 9.6, h: 0.4, fill: { color: TABLE_HDR } });
cols.forEach((c, ci) => {
s.addText(c, { x: cx + 0.05, y: 0.85, w: cw[ci], h: 0.4, fontSize: 8.5, bold: true, color: ACCENT, valign: "middle", margin: 0 });
cx += cw[ci];
});
const rowColors = [TABLE_ROW1, TABLE_ROW2];
const rowAccents = [ACCENT, ACCENT2, "#4CAF50", "#4CAF50", "#3AB4F2", "#F9A825", "#8BC34A"];
rxData.forEach((row, ri) => {
const ry = 1.25 + ri * 0.54;
s.addShape(prs.ShapeType.rect, { x: startX, y: ry, w: 9.6, h: 0.52, fill: { color: rowColors[ri % 2] } });
// left accent
s.addShape(prs.ShapeType.rect, { x: startX, y: ry, w: 0.04, h: 0.52, fill: { color: rowAccents[ri] } });
let rcx = startX;
row.forEach((cell, ci) => {
const textCol = ci === 1 ? WHITE : LIGHT_TEXT;
const bold = ci === 0 || ci === 1;
s.addText(cell, { x: rcx + 0.07, y: ry, w: cw[ci] - 0.07, h: 0.52, fontSize: ci === 1 ? 9 : 8.5, bold, color: textCol, valign: "middle", margin: 0 });
rcx += cw[ci];
});
});
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 8 | Pharmacological Treatment Plan", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 9 – MONITORING PARAMETERS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("MONITORING PARAMETERS", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Efficacy
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 4.55, h: 2.5, fill: { color: CARD_BG }, line: { color: GREEN_OK, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 4.55, h: 0.4, fill: { color: GREEN_OK, transparency: 30 } });
s.addText("EFFICACY MONITORING", { x: 0.35, y: 0.85, w: 4.2, h: 0.4, fontSize: 10, bold: true, color: WHITE, valign: "middle", margin: 0 });
const eff = ["Reduction in redness (erythema)", "Reduction in scaling", "Reduction in itching (pruritus)", "Decrease in plaque thickness", "Improvement in BSA and PASI score", "Fewer flare-ups, better quality of life"];
eff.forEach((e, i) => {
s.addText("✓ " + e, { x: 0.35, y: 1.33 + i * 0.33, w: 4.2, h: 0.3, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
});
// Safety - Cyclosporine
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 0.85, w: 4.75, h: 1.4, fill: { color: CARD_BG }, line: { color: ACCENT2, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 0.85, w: 4.75, h: 0.38, fill: { color: ACCENT2, transparency: 30 } });
s.addText("CYCLOSPORINE – Safety", { x: 5.12, y: 0.85, w: 4.5, h: 0.38, fontSize: 9.5, bold: true, color: WHITE, valign: "middle", margin: 0 });
const cyclo = ["Blood pressure", "Serum creatinine (SCr)", "BUN, electrolytes (K⁺)", "Uric acid levels"];
cyclo.forEach((c, i) => {
s.addText("⚠ " + c, { x: 5.12, y: 1.3 + i * 0.3, w: 4.5, h: 0.28, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
});
// Safety - Secukinumab
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 2.38, w: 4.75, h: 1.35, fill: { color: CARD_BG }, line: { color: ACCENT, width: 1 } });
s.addShape(prs.ShapeType.rect, { x: 5.0, y: 2.38, w: 4.75, h: 0.38, fill: { color: MID_BG } });
s.addText("SECUKINUMAB (Biologic) – Safety", { x: 5.12, y: 2.38, w: 4.5, h: 0.38, fontSize: 9.5, bold: true, color: ACCENT, valign: "middle", margin: 0 });
const seku = ["Signs of infection; TB screening pre-treatment", "CBC, LFT, RFT periodically"];
seku.forEach((c, i) => {
s.addText("⚠ " + c, { x: 5.12, y: 2.82 + i * 0.3, w: 4.5, h: 0.28, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
});
s.addText("Topical Corticosteroids: skin atrophy, striae, irritation", { x: 5.12, y: 3.42, w: 4.5, h: 0.28, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
// Follow-up band
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 3.5, w: 4.55, h: 0.72, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addText("FOLLOW-UP", { x: 0.35, y: 3.5, w: 2, h: 0.3, fontSize: 9, bold: true, color: ACCENT2, margin: 0 });
s.addText("Review every 4–8 weeks to assess treatment response and adverse effects", { x: 0.35, y: 3.82, w: 4.2, h: 0.35, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
// PASI timeline note
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 4.35, w: 9.6, h: 0.78, fill: { color: MID_BG } });
s.addText("Target: PASI-75 by Week 16 | PASI-90 by Month 6 | Sustained PASI-90 for long-term maintenance", {
x: 0.35, y: 4.35, w: 9.3, h: 0.78, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle"
});
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 9 | Monitoring Parameters", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 10 – PATIENT COUNSELLING
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
addBg(s, ACCENT);
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 10, h: 0.65, fill: { color: MID_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0.07, w: 0.08, h: 0.65, fill: { color: ACCENT2 } });
s.addText("PATIENT COUNSELLING", { x: 0.18, y: 0.07, w: 9, h: 0.65, fontSize: 13, bold: true, color: ACCENT, valign: "middle", charSpacing: 3, margin: 0 });
// Disease education card
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 9.6, h: 1.05, fill: { color: CARD_BG }, line: { color: ACCENT, width: 0.75 } });
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 0.85, w: 9.6, h: 0.35, fill: { color: MID_BG } });
s.addText("DISEASE EDUCATION", { x: 0.35, y: 0.85, w: 9, h: 0.35, fontSize: 9, bold: true, color: ACCENT, valign: "middle", charSpacing: 2, margin: 0 });
const edu = ["Psoriasis is a chronic autoimmune skin disease — NOT contagious.", "Treatment controls symptoms and prevents flares; it does not permanently cure the disease."];
edu.forEach((e, i) => {
s.addText("• " + e, { x: 0.35, y: 1.25 + i * 0.3, w: 9.2, h: 0.28, fontSize: 9, color: LIGHT_TEXT, margin: 0 });
});
// 3 medication cards
const meds = [
{
name: "Cyclosporine", color: ACCENT2,
points: ["Take regularly as prescribed", "Avoid grapefruit juice (↑ drug levels)", "Report reduced urine output or swelling", "Monitor BP regularly at home"]
},
{
name: "Secukinumab (Biologic)", color: ACCENT,
points: ["Store in refrigerator (2–8°C)", "Rotate injection site each time", "Report fever, cough, signs of infection", "Do not miss doses — follow schedule"]
},
{
name: "Topical Steroids", color: GREEN_OK,
points: ["Apply thin layer to affected areas only", "Do not use longer than prescribed", "Wash hands after application", "Do not apply to face unless directed"]
}
];
meds.forEach((m, i) => {
const x = 0.2 + i * 3.27;
s.addShape(prs.ShapeType.rect, { x, y: 2.07, w: 3.1, h: 2.05, fill: { color: CARD_BG }, line: { color: m.color, width: 1 } });
s.addShape(prs.ShapeType.rect, { x, y: 2.07, w: 3.1, h: 0.38, fill: { color: m.color, transparency: 25 } });
s.addText(m.name, { x: x + 0.1, y: 2.07, w: 2.9, h: 0.38, fontSize: 9.5, bold: true, color: WHITE, valign: "middle", margin: 0 });
m.points.forEach((p, pi) => {
s.addText("→ " + p, { x: x + 0.1, y: 2.5 + pi * 0.4, w: 2.9, h: 0.38, fontSize: 8.5, color: LIGHT_TEXT, valign: "middle", margin: 0 });
});
});
// Lifestyle row
s.addShape(prs.ShapeType.rect, { x: 0.2, y: 4.27, w: 9.6, h: 0.8, fill: { color: MID_BG } });
s.addText("LIFESTYLE COUNSELLING", { x: 0.35, y: 4.27, w: 3, h: 0.3, fontSize: 9, bold: true, color: ACCENT, margin: 0 });
s.addText("Use moisturizers daily • Avoid scratching lesions • Manage stress (yoga, sleep) • Stop smoking • Limit alcohol", {
x: 0.35, y: 4.57, w: 9.3, h: 0.47, fontSize: 9, color: LIGHT_TEXT, valign: "middle"
});
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.35, w: 10, h: 0.28, fill: { color: MID_BG } });
s.addText("Slide 10 | Patient Counselling", { x: 0, y: 5.35, w: 10, h: 0.28, fontSize: 8, color: ACCENT, align: "center", valign: "middle" });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 11 – THANK YOU / CONCLUSION
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
s.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK_BG } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: ACCENT } });
s.addShape(prs.ShapeType.rect, { x: 0, y: 5.565, w: 10, h: 0.06, fill: { color: ACCENT } });
// Decorative half-circle
s.addShape(prs.ShapeType.ellipse, { x: -2, y: 0.5, w: 6, h: 6, fill: { color: MID_BG, transparency: 60 } });
s.addShape(prs.ShapeType.ellipse, { x: 6.5, y: -0.5, w: 5, h: 5, fill: { color: ACCENT2, transparency: 85 } });
s.addText("Thank You", { x: 1, y: 1.0, w: 8, h: 1.2, fontSize: 48, bold: true, color: WHITE, align: "center" });
s.addShape(prs.ShapeType.line, { x: 2.5, y: 2.25, w: 5, h: 0, line: { color: ACCENT2, width: 2 } });
s.addText("Questions & Discussion", { x: 1, y: 2.4, w: 8, h: 0.5, fontSize: 16, color: LIGHT_TEXT, align: "center", italic: true });
// Summary box
s.addShape(prs.ShapeType.rect, { x: 1.2, y: 3.0, w: 7.6, h: 1.5, fill: { color: CARD_BG }, line: { color: ACCENT, width: 1 } });
s.addText("Case Summary", { x: 1.4, y: 3.05, w: 7.2, h: 0.35, fontSize: 10, bold: true, color: ACCENT, charSpacing: 2 });
s.addText("50M | Severe Plaque Psoriasis | 27-yr history | Multiple therapy failures | Recommended: Secukinumab (biologic) + Bridge cyclosporine + Topical agents + Cetirizine + Emollients", {
x: 1.4, y: 3.4, w: 7.2, h: 1.0, fontSize: 9, color: LIGHT_TEXT, italic: true
});
s.addText("Ganavi C | V Pharm D | 21Q0275", { x: 1, y: 4.65, w: 8, h: 0.35, fontSize: 10, color: ACCENT2, align: "center" });
}
// ─── WRITE FILE ───────────────────────────────────────────────────
prs.writeFile({ fileName: "/home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Case_Professional.pptx" })
.then(() => console.log("SUCCESS: File written"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/plaque-psoriasis-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/plaque-psoriasis-ppt/
Plaque Psoriasis Case Professional
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide - Bold layout with presenter details (Ganavi C, V Pharm D, 21Q0275), disease tags (Severe, Chronic, Uncontrolled, Biologic Candidate) |
| 2 | Subjective - Patient Profile - Info table, chief complaint highlight, social & family history |
| 3 | HPI Timeline - 6-card visual timeline from age 23 to current 3rd severe flare |
| 4 | Objective Data - Vital sign metric cards + skin exam findings (location grid + characteristics) |
| 5 | Laboratory Data - Color-coded tables for CBC, RFT, LFT, Electrolytes & Others (with low-value flags) |
| 6 | Assessment - Primary diagnosis highlighted in red, PASI/BSA metrics, Drug Therapy Problems |
| 7 | Planning - Goals - Short-term (4-8 wks) vs Long-term (3-6 months) side-by-side + non-pharm treatment |
| 8 | Pharmacological Treatment - Full 7-drug table (Secukinumab, Cyclosporine, Clobetasol, Calcipotriol, Cetirizine, Emollients) |
| 9 | Monitoring Parameters - Efficacy + safety cards with PASI target timeline |
| 10 | Patient Counselling - Disease education + 3 medication cards + lifestyle counselling |
| 11 | Thank You / Conclusion - Case summary + discussion |
Provide light background and create ppt with the headline font size 28 and subline in 24
python3 -c " from pptx import Presentation prs = Presentation('/home/daytona/wor…
pip install python-pptx -q && python3 -c " from pptx import Presentation prs = P…
python3 -c " from pptx import Presentation prs = Presentation('/home/daytona/wor…
~/plaque-psoriasis-ppt/build_light.js
const pptxgen = require("pptxgenjs");
const prs = new pptxgen();
prs.layout = "LAYOUT_16x9";
prs.title = "Plaque Psoriasis Case Study";
prs.author = "Ganavi C";
// ─── LIGHT COLOUR PALETTE ──────────────────────────────────────────
const BG = "F5F7FA"; // near-white page background
const WHITE = "FFFFFF";
const NAVY = "1A3557"; // primary dark text / header bars
const TEAL = "0D7377"; // accent 1 (teal)
const CORAL = "E05A2B"; // accent 2 (warm coral)
const LIGHT_TEAL = "E8F5F5"; // card fill
const LIGHT_CORAL = "FEF0EA"; // card fill alt
const LIGHT_NAVY = "EBF0F7"; // section band fill
const MID_GRAY = "5A6A7A"; // body text
const LIGHT_GRAY = "DDE3EA"; // table alt row / borders
const GREEN = "2E7D32";
const RED = "C62828";
const AMBER = "F57F17";
// Sizes
const HEAD = 28; // headline
const SUB = 24; // sub-headline / section header
const BODY = 11;
const SMALL = 9.5;
// ─── Helpers ───────────────────────────────────────────────────────
function bg(slide) {
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: BG } });
}
function footer(slide, num, label) {
slide.addShape(prs.ShapeType.rect, { x:0, y:5.43, w:10, h:0.195, fill:{ color: NAVY } });
slide.addText(`Slide ${num} · ${label}`, {
x:0.2, y:5.43, w:9.6, h:0.195,
fontSize:8, color:"AECBEA", valign:"middle", margin:0
});
slide.addText("Plaque Psoriasis Case | Ganavi C | V Pharm D | 21Q0275", {
x:0, y:5.43, w:9.8, h:0.195,
fontSize:8, color:"AECBEA", align:"right", valign:"middle", margin:0
});
}
function titleBar(slide, headline, sub) {
// Solid header strip
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:1.05, fill:{ color: NAVY } });
slide.addShape(prs.ShapeType.rect, { x:0, y:1.05, w:10, h:0.05, fill:{ color: TEAL } });
slide.addText(headline, {
x:0.35, y:0.05, w:9.3, h:0.6,
fontSize: HEAD, bold:true, color: WHITE, valign:"bottom", margin:0
});
if (sub) {
slide.addText(sub, {
x:0.35, y:0.65, w:9.3, h:0.38,
fontSize: SUB, color:"AECBEA", valign:"top", margin:0, italic:true
});
}
}
function card(slide, x, y, w, h, title, titleColor, fillColor, borderColor) {
slide.addShape(prs.ShapeType.rect, {
x, y, w, h, fill:{ color: fillColor || LIGHT_TEAL },
line:{ color: borderColor || TEAL, width:1 }
});
if (title) {
slide.addShape(prs.ShapeType.rect, { x, y, w, h:0.36, fill:{ color: titleColor || TEAL } });
slide.addText(title, {
x: x+0.12, y, w: w-0.2, h:0.36,
fontSize: SMALL+1, bold:true, color: WHITE, valign:"middle", margin:0
});
}
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
// Two-tone background
s.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: WHITE } });
s.addShape(prs.ShapeType.rect, { x:0, y:0, w:4.2, h:5.625, fill:{ color: NAVY } });
s.addShape(prs.ShapeType.rect, { x:4.2, y:0, w:0.07, h:5.625, fill:{ color: TEAL } });
// Decorative circles on navy side
s.addShape(prs.ShapeType.ellipse, { x:-0.9, y:-0.9, w:3.5, h:3.5, fill:{ color: TEAL, transparency:80 } });
s.addShape(prs.ShapeType.ellipse, { x:0.3, y:3.8, w:2.5, h:2.5, fill:{ color: CORAL, transparency:82 } });
// Left panel
s.addText("CASE\nSTUDY", {
x:0.2, y:0.55, w:3.7, h:1.5,
fontSize:38, bold:true, color: WHITE, align:"center", charSpacing:6
});
s.addShape(prs.ShapeType.line, { x:0.6, y:2.15, w:2.9, h:0, line:{ color: TEAL, width:2 } });
s.addText("Dermatology\nClinical Pharmacy", {
x:0.2, y:2.28, w:3.7, h:0.75,
fontSize:13, color:"AECBEA", align:"center", italic:true
});
// Presenter card
s.addShape(prs.ShapeType.rect, { x:0.3, y:3.3, w:3.55, h:1.6, fill:{ color:"0D2237" }, line:{ color: TEAL, width:1 } });
s.addText("PRESENTED BY", { x:0.42, y:3.38, w:3.3, h:0.28, fontSize:8, bold:true, color: TEAL, align:"center", charSpacing:3 });
s.addText([
{ text:"Ganavi C\n", options:{ bold:true, fontSize:15 } },
{ text:"V Pharm D\n", options:{ fontSize:12 } },
{ text:"Reg No: 21Q0275", options:{ fontSize:11, color:"AECBEA" } }
], { x:0.42, y:3.7, w:3.3, h:1.1, color: WHITE, align:"center" });
// Right panel – main title
s.addText("Plaque Psoriasis", {
x:4.5, y:0.65, w:5.3, h:1.0,
fontSize: HEAD+8, bold:true, color: NAVY
});
s.addText("Clinical Case Study", {
x:4.5, y:1.65, w:5.3, h:0.55,
fontSize: SUB, color: TEAL, italic:true
});
s.addShape(prs.ShapeType.line, { x:4.5, y:2.28, w:5.0, h:0, line:{ color: CORAL, width:2 } });
// Tag chips
const tags = ["Severe","Chronic","Uncontrolled","Biologic Candidate"];
tags.forEach((t, i) => {
s.addShape(prs.ShapeType.roundRect, { x:4.5+i*1.3, y:2.42, w:1.22, h:0.32, fill:{ color: LIGHT_CORAL }, line:{ color: CORAL, width:1 }, rectRadius:0.04 });
s.addText(t, { x:4.5+i*1.3, y:2.42, w:1.22, h:0.32, fontSize:8, bold:true, color: CORAL, align:"center", valign:"middle", margin:0 });
});
s.addText(
"A 50-year-old male with a 27-year history of plaque psoriasis\npresenting with severe, uncontrolled disease despite multiple lines of therapy.",
{ x:4.5, y:2.9, w:5.3, h:0.9, fontSize:11, color: MID_GRAY, italic:true }
);
// Bottom strip
s.addShape(prs.ShapeType.rect, { x:0, y:5.43, w:10, h:0.195, fill:{ color: LIGHT_GRAY } });
s.addText("V Pharm D · Clinical Pharmacy Case Presentation · 2024", {
x:0, y:5.43, w:10, h:0.195, fontSize:8.5, color: MID_GRAY, align:"center", valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 2 – PATIENT PROFILE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "SUBJECTIVE DATA", "Patient Profile");
footer(s, 2, "Subjective Data – Patient Profile");
// Patient info table
card(s, 0.25, 1.18, 4.5, 3.35, "PATIENT INFORMATION", NAVY, LIGHT_NAVY, NAVY);
const patRows = [
["Age","50 years"], ["Gender","Male"],
["Occupation","Elementary School Teacher"],
["Weight","75 kg"], ["Height","5'9\""], ["Allergies","NKA"]
];
patRows.forEach(([k,v], i) => {
const ry = 1.6 + i*0.47;
const fill = i%2===0 ? WHITE : LIGHT_NAVY;
s.addShape(prs.ShapeType.rect, { x:0.25, y:ry, w:4.5, h:0.44, fill:{ color:fill } });
s.addText(k, { x:0.38, y:ry, w:1.8, h:0.44, fontSize:SMALL+0.5, bold:true, color:NAVY, valign:"middle", margin:0 });
s.addText(v, { x:2.2, y:ry, w:2.42, h:0.44, fontSize:SMALL+0.5, color:MID_GRAY, valign:"middle", margin:0 });
});
// Chief complaint
s.addShape(prs.ShapeType.rect, { x:5.0, y:1.18, w:4.75, h:1.1, fill:{ color: LIGHT_CORAL }, line:{ color: CORAL, width:1.5 } });
s.addText("CHIEF COMPLAINT", { x:5.15, y:1.22, w:4.45, h:0.3, fontSize:SMALL, bold:true, color:CORAL, charSpacing:2, margin:0 });
s.addText('"Nothing is helping my psoriasis."', {
x:5.15, y:1.52, w:4.45, h:0.68,
fontSize:14, color:NAVY, italic:true, valign:"middle"
});
// Note
s.addShape(prs.ShapeType.rect, { x:5.0, y:2.42, w:4.75, h:2.11, fill:{ color: LIGHT_TEAL }, line:{ color: TEAL, width:1 } });
s.addText("CLINICAL NOTE", { x:5.15, y:2.48, w:4.45, h:0.3, fontSize:SMALL, bold:true, color:TEAL, charSpacing:2, margin:0 });
s.addText(
"Subjective input emphasizes significant mental burden and clinical therapeutic non-response to conventional routes. Patient presents with clear frustration after years of escalating treatment without adequate disease control.",
{ x:5.15, y:2.82, w:4.45, h:1.65, fontSize:SMALL+0.5, color:MID_GRAY }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 3 – HPI TIMELINE PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "HISTORY OF PRESENT ILLNESS", "27-Year Treatment Chronology (Part 1)");
footer(s, 3, "HPI – Treatment Timeline Part 1");
s.addText("Chronological course of medical interventions since early diagnosis:", {
x:0.3, y:1.18, w:9.4, h:0.3, fontSize:SMALL+1, color:MID_GRAY, italic:true
});
const events = [
{ label:"Initial Diagnosis", age:"Age 23", color: TEAL, bg: LIGHT_TEAL,
text:"Plaque psoriasis diagnosed. Initially achieved good control with medium-potency topical corticosteroids." },
{ label:"Combination Course", age:"Mid-course", color: NAVY, bg: LIGHT_NAVY,
text:"Calcipotriol therapy added when topical corticosteroids alone became insufficient for disease control." },
{ label:"Phototherapy Run", age:"Disease progression", color:"6A5ACD", bg:"F0EEF9",
text:"PUVA (Psoralen + UVA) phototherapy initiated — provided temporary improvement." },
{ label:"Efficacy Loss", age:"Later", color: CORAL, bg: LIGHT_CORAL,
text:"PUVA gradually lost effectiveness, resulting in inadequate disease control and recurrent lesions." },
];
events.forEach((e, i) => {
const x = 0.25 + (i%2)*4.9;
const y = i < 2 ? 1.58 : 3.2;
s.addShape(prs.ShapeType.rect, { x, y, w:4.6, h:1.48, fill:{ color:e.bg }, line:{ color:e.color, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x, y, w:4.6, h:0.42, fill:{ color:e.color } });
s.addText(e.label, { x:x+0.12, y, w:3.0, h:0.42, fontSize:SMALL+1.5, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText(e.age, { x:x+3.1, y, w:1.38, h:0.42, fontSize:SMALL, color:WHITE, align:"right", valign:"middle", margin:0 });
s.addText(e.text, { x:x+0.12, y:y+0.48, w:4.35, h:0.96, fontSize:SMALL+0.5, color:MID_GRAY, valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 4 – HPI TIMELINE PART 2
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "HISTORY OF PRESENT ILLNESS", "27-Year Treatment Chronology (Part 2)");
footer(s, 4, "HPI – Treatment Timeline Part 2");
const events = [
{ label:"Systemic Methotrexate Escalation", color: NAVY, bg: LIGHT_NAVY,
text1:"Frequent psoriasis flare-ups despite increasing methotrexate doses, requiring short-contact anthralin therapy (SCAT) for acute exacerbations.",
text2:"Methotrexate escalated to 25 mg/week — cumulative lifetime dose: 2.2 g." },
{ label:"Switch to Cyclosporine + Acitretin", color: TEAL, bg: LIGHT_TEAL,
text1:"Treatment changed to cyclosporine 75 mg twice daily + acitretin 25 mg daily.",
text2:"Acitretin discontinued due to severe xerosis." },
{ label:"Acitretin Intolerance & Current Flare", color: CORAL, bg: LIGHT_CORAL,
text1:"Cyclosporine alone provided good control for 1 year.",
text2:"Last 6 months: two severe flare-ups. Current presentation = 3rd and most severe flare." },
];
events.forEach((e, i) => {
const y = 1.22 + i*1.35;
s.addShape(prs.ShapeType.rect, { x:0.25, y, w:9.5, h:1.22, fill:{ color:e.bg }, line:{ color:e.color, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x:0.25, y, w:9.5, h:0.4, fill:{ color:e.color } });
s.addText(`${i+1}. ${e.label}`, { x:0.4, y, w:9.1, h:0.4, fontSize:11, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText("• " + e.text1, { x:0.4, y:y+0.44, w:4.55, h:0.73, fontSize:SMALL+0.5, color:MID_GRAY, valign:"top" });
s.addText("• " + e.text2, { x:5.1, y:y+0.44, w:4.5, h:0.73, fontSize:SMALL+0.5, color:MID_GRAY, valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 5 – MEDICAL / FAMILY / SOCIAL HISTORY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "MEDICAL, FAMILY & SOCIAL HISTORY", "Background & Risk Factors");
footer(s, 5, "Medical / Family / Social History");
// Med & Family
card(s, 0.25, 1.18, 4.5, 2.3, "MEDICAL & FAMILY HISTORY", NAVY, LIGHT_NAVY, NAVY);
const mfRows = [
["PMH","Major depressive episode — 16 years ago"],
["Brother","Has psoriasis"],
["Father","Hypertension + Type 2 Diabetes"],
];
mfRows.forEach(([k,v], i) => {
const ry = 1.6 + i*0.58;
s.addShape(prs.ShapeType.rect, { x:0.25, y:ry, w:4.5, h:0.54, fill:{ color: i%2===0?WHITE:LIGHT_NAVY } });
s.addText(k, { x:0.38, y:ry, w:1.1, h:0.54, fontSize:SMALL, bold:true, color:NAVY, valign:"middle", margin:0 });
s.addText(v, { x:1.5, y:ry, w:3.1, h:0.54, fontSize:SMALL+0.5, color:MID_GRAY, valign:"middle" });
});
// Social
card(s, 5.0, 1.18, 4.75, 2.3, "SOCIAL PROFILE & TRIGGERS", TEAL, LIGHT_TEAL, TEAL);
const socRows = [
["Smoking","Former heavy smoker"],
["Alcohol","One glass of wine daily"],
["Stress","Increased occupational stress"],
["Family","Married with children"],
];
socRows.forEach(([k,v], i) => {
const ry = 1.6 + i*0.47;
s.addShape(prs.ShapeType.rect, { x:5.0, y:ry, w:4.75, h:0.43, fill:{ color: i%2===0?WHITE:LIGHT_TEAL } });
s.addText(k, { x:5.12, y:ry, w:1.2, h:0.43, fontSize:SMALL, bold:true, color:TEAL, valign:"middle", margin:0 });
s.addText(v, { x:6.35, y:ry, w:3.25, h:0.43, fontSize:SMALL+0.5, color:MID_GRAY, valign:"middle" });
});
// Allergies
card(s, 0.25, 3.62, 4.5, 1.0, "ALLERGIES & TOLERABILITY", CORAL, LIGHT_CORAL, CORAL);
s.addText([
{ text:"NKA ", options:{ bold:true, color:GREEN } },
{ text:"(No Known Allergies)", options:{} }
], { x:0.38, y:4.02, w:4.2, h:0.26, fontSize:SMALL+1, color:MID_GRAY });
s.addText("Drug intolerance: Acitretin — confirmed severe xerosis", { x:0.38, y:4.3, w:4.2, h:0.26, fontSize:SMALL, color:MID_GRAY });
// Smoking/alcohol risk note
card(s, 5.0, 3.62, 4.75, 1.0, "RISK AMPLIFIERS", CORAL, LIGHT_CORAL, CORAL);
s.addText("Smoking, alcohol, and occupational stress are well-established triggers for psoriasis flares and may contribute to treatment resistance.", {
x:5.12, y:4.02, w:4.5, h:0.55, fontSize:SMALL+0.5, color:MID_GRAY
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 6 – OBJECTIVE: VITALS & SKIN EXAM
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "OBJECTIVE DATA", "Vital Signs & Physical Examination");
footer(s, 6, "Objective Data – Vitals & Skin Exam");
// Vital metric boxes
const vitals = [
{ label:"BLOOD PRESSURE", val:"129/83", unit:"mmHg", col: NAVY },
{ label:"PULSE RATE", val:"88", unit:"bpm", col: TEAL },
{ label:"TEMPERATURE", val:"37°C", unit:"Normal", col:"6A5ACD" },
{ label:"APPEARANCE", val:"Alert", unit:"Mild anxiety", col: CORAL },
];
vitals.forEach((v, i) => {
const x = 0.25 + i*2.42;
s.addShape(prs.ShapeType.rect, { x, y:1.18, w:2.3, h:1.25, fill:{ color: WHITE }, line:{ color: v.col, width:2 } });
s.addShape(prs.ShapeType.rect, { x, y:1.18, w:2.3, h:0.35, fill:{ color: v.col } });
s.addText(v.label, { x:x+0.07, y:1.18, w:2.16, h:0.35, fontSize:7.5, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText(v.val, { x:x+0.07, y:1.55, w:2.16, h:0.52, fontSize:22, bold:true, color:v.col, align:"center" });
s.addText(v.unit, { x:x+0.07, y:2.07, w:2.16, h:0.32, fontSize:SMALL, color:MID_GRAY, align:"center" });
});
// Skin examination card
s.addShape(prs.ShapeType.rect, { x:0.25, y:2.57, w:9.5, h:2.62, fill:{ color: WHITE }, line:{ color: RED, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x:0.25, y:2.57, w:9.5, h:0.4, fill:{ color: RED } });
s.addText("SKIN EXAMINATION — Severe Plaque Psoriasis", {
x:0.4, y:2.57, w:9.15, h:0.4, fontSize:11, bold:true, color:WHITE, valign:"middle", charSpacing:1, margin:0
});
// Location chips
const locs = ["Abdomen","Arms","Legs","Back","Scalp","Palms","Soles","Elbows","Knees"];
s.addText("Affected Locations:", { x:0.4, y:3.03, w:2.0, h:0.3, fontSize:SMALL, bold:true, color:NAVY, margin:0 });
locs.forEach((loc, i) => {
const x = 2.35 + i*0.81;
s.addShape(prs.ShapeType.roundRect, { x, y:3.03, w:0.75, h:0.28, fill:{ color: LIGHT_CORAL }, line:{ color: CORAL, width:0.75 }, rectRadius:0.04 });
s.addText(loc, { x, y:3.03, w:0.75, h:0.28, fontSize:7.5, bold:true, color: CORAL, align:"center", valign:"middle", margin:0 });
});
// Visual + secondary signs
s.addText("Visual Profile:", { x:0.4, y:3.42, w:1.5, h:0.28, fontSize:SMALL, bold:true, color:NAVY, margin:0 });
s.addText("Thick plaques · Erythematous lesions · Well-demarcated borders · Confluent lesions", {
x:1.9, y:3.42, w:7.6, h:0.28, fontSize:SMALL+0.5, color:MID_GRAY, margin:0
});
s.addText("Secondary Signs:", { x:0.4, y:3.76, w:1.8, h:0.28, fontSize:SMALL, bold:true, color:NAVY, margin:0 });
s.addText("Silvery-white scales · Excoriations due to scratching", {
x:2.2, y:3.76, w:7.3, h:0.28, fontSize:SMALL+0.5, color:MID_GRAY, margin:0
});
s.addText("General Status:", { x:0.4, y:4.1, w:1.8, h:0.28, fontSize:SMALL, bold:true, color:NAVY, margin:0 });
s.addText("Alert, oriented — Mild anxiety noted.", {
x:2.2, y:4.1, w:7.3, h:0.28, fontSize:SMALL+0.5, color:MID_GRAY, margin:0
});
}
// ═══════════════════════════════════════════════════════════════════
// HELPER – lab table renderer
// ═══════════════════════════════════════════════════════════════════
function labTable(slide, x, y, w, title, rows) {
const HDR_H = 0.36;
const ROW_H = 0.38;
const totalH = HDR_H * 2 + rows.length * ROW_H;
slide.addShape(prs.ShapeType.rect, { x, y, w, h: HDR_H, fill:{ color: NAVY } });
slide.addText(title, { x:x+0.1, y, w:w-0.15, h:HDR_H, fontSize:SMALL+1, bold:true, color:WHITE, valign:"middle", margin:0 });
const cw = [w*0.44, w*0.28, w*0.28];
const hdrs = ["Parameter","Result","Normal Range"];
let cx = x;
slide.addShape(prs.ShapeType.rect, { x, y:y+HDR_H, w, h:HDR_H, fill:{ color: LIGHT_NAVY } });
hdrs.forEach((h, ci) => {
slide.addText(h, { x:cx+0.06, y:y+HDR_H, w:cw[ci]-0.06, h:HDR_H, fontSize:SMALL, bold:true, color:NAVY, valign:"middle", margin:0 });
cx += cw[ci];
});
rows.forEach((row, ri) => {
const ry = y + HDR_H*2 + ri*ROW_H;
const fill = ri%2===0 ? WHITE : LIGHT_GRAY;
slide.addShape(prs.ShapeType.rect, { x, y:ry, w, h:ROW_H, fill:{ color:fill }, line:{ color: LIGHT_GRAY, width:0.5 } });
let rcx = x;
const isLow = row[1].toLowerCase().includes("low") || row[3]==="L";
const isHigh = row[3]==="H";
row.slice(0,3).forEach((cell, ci) => {
let tc = MID_GRAY;
if (ci===1 && isLow) tc = AMBER;
if (ci===1 && isHigh) tc = RED;
if (ci===0) tc = NAVY;
slide.addText(cell, { x:rcx+0.06, y:ry, w:cw[ci]-0.06, h:ROW_H, fontSize:SMALL, color:tc, bold:ci===0, valign:"middle", margin:0 });
rcx += cw[ci];
});
});
return y + HDR_H*2 + rows.length*ROW_H;
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 7 – LAB DATA: CBC & RENAL
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "LABORATORY DATA", "Complete Blood Count & Renal Panel");
footer(s, 7, "Lab Data – CBC & Renal");
const cbcRows = [
["Hemoglobin (Hb)", "13.5 g/dL", "13.5–17.5 g/dL", "N"],
["Hematocrit (Hct)", "35% (Mildly Low)", "40–52%", "L"],
["WBC", "6.0 ×10³/mm³", "4–11 × 10³/mm³", "N"],
["Platelets", "255 ×10³/mm³", "150–400 × 10³/mm³","N"],
];
const rftRows = [
["Blood Urea Nitrogen (BUN)", "14 mg/dL", "7–20 mg/dL", "N"],
["Creatinine (SCr)", "1.0 mg/dL","0.6–1.3 mg/dL","N"],
];
labTable(s, 0.25, 1.18, 9.5, "COMPLETE BLOOD COUNT (CBC)", cbcRows);
labTable(s, 0.25, 3.65, 9.5, "RENAL FUNCTION TEST (RFT)", rftRows);
// Hct flag note
s.addShape(prs.ShapeType.rect, { x:0.25, y:5.15, w:9.5, h:0.25, fill:{ color: LIGHT_CORAL }, line:{ color: AMBER, width:0.75 } });
s.addText("⚠ Hematocrit (35%) is mildly below normal range (40–52%) — may indicate mild anemia. Clinically monitor.", {
x:0.4, y:5.15, w:9.2, h:0.25, fontSize:8.5, color: AMBER, valign:"middle", margin:0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 8 – LAB DATA: LIVER FUNCTION
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "LABORATORY DATA", "Liver Function Profile");
footer(s, 8, "Lab Data – Liver Function");
const lftRows = [
["AST (SGOT)", "22 IU/L", "10–40 IU/L", "N"],
["ALT (SGPT)", "38 IU/L", "7–56 IU/L", "N"],
["Alkaline Phosphatase (ALP)","98 IU/L","44–147 IU/L", "N"],
["Total Bilirubin", "1.0 mg/dL","0.1–1.2 mg/dL","N"],
["Albumin", "3.7 g/dL", "3.5–5.0 g/dL","N"],
];
labTable(s, 0.25, 1.18, 9.5, "LIVER FUNCTION TEST (LFT)", lftRows);
// Interpretation note
s.addShape(prs.ShapeType.rect, { x:0.25, y:4.05, w:9.5, h:1.1, fill:{ color: LIGHT_TEAL }, line:{ color: TEAL, width:1 } });
s.addText("CLINICAL INTERPRETATION", { x:0.4, y:4.1, w:9, h:0.3, fontSize:SMALL, bold:true, color:TEAL, charSpacing:2, margin:0 });
s.addText(
"All liver function parameters are within normal limits. This is clinically significant as the patient has a history of methotrexate use (cumulative dose 2.2 g), which can cause hepatotoxicity. Normal LFTs support the transition to biologic therapy (Secukinumab).",
{ x:0.4, y:4.42, w:9.1, h:0.68, fontSize:SMALL+0.5, color:MID_GRAY }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 9 – LAB DATA: ELECTROLYTES & CHEMISTRY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "LABORATORY DATA", "Electrolytes & Chemistry Panel");
footer(s, 9, "Lab Data – Electrolytes & Chemistry");
const eRows = [
["Sodium (Na⁺)", "139 mEq/L", "135–145 mEq/L","N"],
["Potassium (K⁺)", "4.0 mEq/L", "3.5–5.0 mEq/L","N"],
["Chloride (Cl⁻)", "102 mEq/L", "98–106 mEq/L", "N"],
["Bicarbonate (HCO₃⁻/CO₂)","25 mEq/L", "22–28 mEq/L", "N"],
["Uric Acid", "4 mg/dL", "3.5–7.2 mg/dL","N"],
["Total Cholesterol", "180 mg/dL", "<200 mg/dL", "N"],
["Blood Glucose", "98 mg/dL", "70–110 mg/dL", "N"],
];
labTable(s, 0.25, 1.18, 9.5, "ELECTROLYTES & CHEMISTRY", eRows);
// Cyclosporine note
s.addShape(prs.ShapeType.rect, { x:0.25, y:4.82, w:9.5, h:0.8, fill:{ color: LIGHT_TEAL }, line:{ color: TEAL, width:1 } });
s.addText("CYCLOSPORINE SAFETY NOTE", { x:0.4, y:4.87, w:9, h:0.28, fontSize:SMALL, bold:true, color:TEAL, charSpacing:2, margin:0 });
s.addText("Potassium and renal parameters are within normal limits — important for cyclosporine safety monitoring (hyperkalemia and nephrotoxicity risk).", {
x:0.4, y:5.15, w:9.1, h:0.42, fontSize:SMALL+0.5, color:MID_GRAY
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 10 – ASSESSMENT: DIAGNOSIS & SEVERITY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "ASSESSMENT", "Diagnosis & Severity Profile");
footer(s, 10, "Assessment – Diagnosis & Severity");
// Diagnosis highlight
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:9.5, h:0.65, fill:{ color: LIGHT_CORAL }, line:{ color: CORAL, width:2 } });
s.addText("PRIMARY DIAGNOSIS", { x:0.42, y:1.22, w:3, h:0.28, fontSize:SMALL, bold:true, color:CORAL, charSpacing:2, margin:0 });
s.addText("Severe Chronic Plaque Psoriasis (Uncontrolled)", {
x:0.42, y:1.48, w:9, h:0.32, fontSize:14, bold:true, color:NAVY, margin:0
});
// Metric boxes
const metrics = [
{ label:"BSA Involvement", val:">20%", sub:"Severe threshold: >10%", col: RED },
{ label:"Estimated PASI", val:">20", sub:"Severe disease index", col: CORAL },
{ label:"Disease Duration",val:"27 yrs", sub:"Chronic, refractory", col: NAVY },
];
metrics.forEach((m, i) => {
const x = 0.25 + i*3.25;
s.addShape(prs.ShapeType.rect, { x, y:1.98, w:3.1, h:1.2, fill:{ color: WHITE }, line:{ color: m.col, width:2 } });
s.addText(m.label, { x:x+0.1, y:2.0, w:2.9, h:0.3, fontSize:SMALL, bold:true, color:m.col, margin:0 });
s.addText(m.val, { x:x+0.1, y:2.28, w:2.9, h:0.55, fontSize:28, bold:true, color:m.col, align:"center" });
s.addText(m.sub, { x:x+0.1, y:2.83, w:2.9, h:0.28, fontSize:SMALL-0.5, color:MID_GRAY, align:"center" });
});
// Evidence & severity area
s.addShape(prs.ShapeType.rect, { x:0.25, y:3.3, w:4.65, h:1.85, fill:{ color: LIGHT_NAVY }, line:{ color: NAVY, width:1 } });
s.addText("CLINICAL EVIDENCE", { x:0.4, y:3.34, w:4.3, h:0.3, fontSize:SMALL, bold:true, color:NAVY, charSpacing:2, margin:0 });
const evidence = [
"Typical erythematous plaques with silvery scales",
"Extensive body involvement",
"Long-standing disease (27 years)",
"Positive family history of psoriasis",
];
evidence.forEach((e, i) => {
s.addText("✓ " + e, { x:0.4, y:3.68+i*0.35, w:4.3, h:0.32, fontSize:SMALL+0.5, color:MID_GRAY });
});
s.addShape(prs.ShapeType.rect, { x:5.1, y:3.3, w:4.65, h:1.85, fill:{ color: LIGHT_CORAL }, line:{ color: CORAL, width:1 } });
s.addText("SEVERITY BENCHMARKS", { x:5.25, y:3.34, w:4.3, h:0.3, fontSize:SMALL, bold:true, color:CORAL, charSpacing:2, margin:0 });
const sev = [
"BSA Involvement: >20%",
"Areas: Scalp, Arms, Legs, Abdomen, Back, Palms, Soles",
"Severity: Severe (>10% BSA)",
"PASI Score: >20 (Severe disease index)",
];
sev.forEach((e, i) => {
s.addText("• " + e, { x:5.25, y:3.68+i*0.35, w:4.3, h:0.32, fontSize:SMALL+0.5, color:MID_GRAY });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 11 – ASSESSMENT: DRUG THERAPY PROBLEMS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "ASSESSMENT", "Drug Therapy Problems (DTPs)");
footer(s, 11, "Assessment – Drug Therapy Problems");
const dtps = [
{ num:"DTP 1", title:"Refractory Uncontrolled Status", col: RED, bg: LIGHT_CORAL,
text:"Uncontrolled severe plaque psoriasis despite active cyclosporine therapy." },
{ num:"DTP 2", title:"Subtherapeutic Efficacy", col: CORAL, bg: LIGHT_CORAL,
text:"Inadequate physiological response to current cyclosporine dosing regimen." },
{ num:"DTP 3", title:"Historical Failures", col: AMBER, bg:"FFF8E1",
text:"Previous treatment failures: topical therapy, PUVA, and methotrexate." },
{ num:"DTP 4", title:"Adverse Event Intolerance", col:"6A5ACD", bg:"F0EEF9",
text:"Oral acitretin intolerance due to secondary severe xerosis (dry skin)." },
{ num:"DTP 5", title:"Severe Pruritus Burden", col: TEAL, bg: LIGHT_TEAL,
text:"Severe pruritus causing chronic scratching and excoriations on skin." },
{ num:"DTP 6", title:"Psychosocial Exacerbation", col: NAVY, bg: LIGHT_NAVY,
text:"Occupational stress contributing to disease flare-ups and worsening symptoms." },
];
dtps.forEach((d, i) => {
const x = 0.25 + (i%2)*4.9;
const y = 1.18 + Math.floor(i/2)*1.4;
s.addShape(prs.ShapeType.rect, { x, y, w:4.6, h:1.28, fill:{ color:d.bg }, line:{ color:d.col, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x, y, w:4.6, h:0.4, fill:{ color:d.col } });
s.addText(d.num, { x:x+0.1, y, w:0.75, h:0.4, fontSize:SMALL, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText(d.title, { x:x+0.85, y, w:3.65, h:0.4, fontSize:SMALL+0.5, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText(d.text, { x:x+0.12, y:y+0.45, w:4.35, h:0.78, fontSize:SMALL+0.5, color:MID_GRAY, valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 12 – PLANNING: GOALS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "PLANNING", "Goals of Therapy");
footer(s, 12, "Planning – Goals of Therapy");
// Short-term
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:4.65, h:3.35, fill:{ color: WHITE }, line:{ color: TEAL, width:2 } });
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:4.65, h:0.45, fill:{ color: TEAL } });
s.addText("SHORT-TERM GOALS", { x:0.4, y:1.18, w:3.2, h:0.45, fontSize:SUB-8, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText("4–8 Weeks", { x:3.6, y:1.18, w:1.2, h:0.45, fontSize:SMALL, color:"B2EBF2", align:"right", valign:"middle", margin:0 });
const stGoals = ["Reduce erythema (redness)","Reduce scaling","Relieve itching (pruritus)","Stop disease progression","Improve sleep and comfort"];
stGoals.forEach((g, i) => {
s.addShape(prs.ShapeType.ellipse, { x:0.42, y:1.72+i*0.52, w:0.25, h:0.25, fill:{ color: TEAL } });
s.addText(`${i+1}`, { x:0.42, y:1.72+i*0.52, w:0.25, h:0.25, fontSize:8, bold:true, color:WHITE, align:"center", valign:"middle", margin:0 });
s.addText(g, { x:0.76, y:1.68+i*0.52, w:4.0, h:0.4, fontSize:11, color:MID_GRAY, valign:"middle" });
});
// Long-term
s.addShape(prs.ShapeType.rect, { x:5.1, y:1.18, w:4.65, h:3.35, fill:{ color: WHITE }, line:{ color: NAVY, width:2 } });
s.addShape(prs.ShapeType.rect, { x:5.1, y:1.18, w:4.65, h:0.45, fill:{ color: NAVY } });
s.addText("LONG-TERM GOALS", { x:5.25, y:1.18, w:3.2, h:0.45, fontSize:SUB-8, bold:true, color:WHITE, valign:"middle", margin:0 });
s.addText("3–6 Months", { x:8.45, y:1.18, w:1.2, h:0.45, fontSize:SMALL, color:"AECBEA", align:"right", valign:"middle", margin:0 });
const ltGoals = ["Achieve PASI-75 or PASI-90 response","Prevent future flare-ups","Improve quality of life","Maintain long-term disease control","Minimize treatment-related toxicity"];
ltGoals.forEach((g, i) => {
s.addShape(prs.ShapeType.ellipse, { x:5.27, y:1.72+i*0.52, w:0.25, h:0.25, fill:{ color: NAVY } });
s.addText(`${i+1}`, { x:5.27, y:1.72+i*0.52, w:0.25, h:0.25, fontSize:8, bold:true, color:WHITE, align:"center", valign:"middle", margin:0 });
s.addText(g, { x:5.62, y:1.68+i*0.52, w:4.0, h:0.4, fontSize:11, color:MID_GRAY, valign:"middle" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 13 – NON-PHARMACOLOGICAL MANAGEMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "NON-PHARMACOLOGICAL MANAGEMENT", "Lifestyle & Supportive Interventions");
footer(s, 13, "Non-Pharmacological Management");
const items = [
{ title:"Regular Moisturization", col: TEAL, bg: LIGHT_TEAL,
text:"Apply emollients (petroleum jelly, paraffin, ceramide creams) 3–4 times daily to reduce dryness, scaling, and itching." },
{ title:"Proper Skin Care", col: NAVY, bg: LIGHT_NAVY,
text:"Lukewarm water for bathing; avoid hot showers and harsh soaps; pat skin dry and apply moisturizer immediately after." },
{ title:"Stress Management", col:"6A5ACD", bg:"F0EEF9",
text:"Practice yoga, meditation, deep breathing, and ensure adequate sleep." },
{ title:"Avoid Skin Trauma", col: CORAL, bg: LIGHT_CORAL,
text:"Avoid scratching, rubbing, and tight clothing to prevent the Koebner phenomenon." },
{ title:"Lifestyle Modification", col: GREEN, bg:"E8F5E9",
text:"Stop smoking, limit alcohol consumption, maintain a healthy body weight." },
{ title:"Regular Exercise", col:"0277BD", bg:"E3F2FD",
text:"Moderate physical activity to improve overall health and reduce stress levels." },
{ title:"Avoid Triggers", col: AMBER, bg:"FFF8E1",
text:"Avoid stress, skin injury, infections, and medications that may worsen psoriasis." },
{ title:"Patient Education", col:"546E7A", bg:"ECEFF1",
text:"Psoriasis is a chronic, non-contagious disease requiring long-term management and adherence." },
];
items.forEach((item, i) => {
const x = 0.25 + (i%2)*4.9;
const y = 1.18 + Math.floor(i/2)*1.04;
s.addShape(prs.ShapeType.rect, { x, y, w:4.6, h:0.96, fill:{ color:item.bg }, line:{ color:item.col, width:1 } });
s.addShape(prs.ShapeType.rect, { x, y, w:0.08, h:0.96, fill:{ color:item.col } });
s.addText(item.title, { x:x+0.16, y:y+0.04, w:4.3, h:0.3, fontSize:SMALL+1, bold:true, color:item.col, margin:0 });
s.addText(item.text, { x:x+0.16, y:y+0.36, w:4.3, h:0.56, fontSize:SMALL, color:MID_GRAY, valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 14 – PHARMACOLOGICAL TREATMENT TABLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "PHARMACOLOGICAL TREATMENT REGIMEN", "Drug Therapy Plan");
footer(s, 14, "Pharmacological Treatment Regimen");
const rxData = [
["Inj. Secukinumab", "300 mg","SC", "Wks 0,1,2,3,4 → q4w", "Long-term maintenance"],
["Tab. Cyclosporine", "75 mg", "PO", "Twice daily", "4–8 wks → taper after biologic response"],
["Clobetasol Propionate 0.05% Oint.","–", "Topical","Twice daily", "2–4 weeks"],
["Clobetasol 0.05% Scalp Solution", "–", "Topical","Once daily", "2–4 weeks"],
["Calcipotriol 0.005% Ointment", "–", "Topical","Twice daily", "Long-term maintenance"],
["Tab. Cetirizine", "10 mg", "PO", "Once daily (bedtime)", "2–4 wks or until resolved"],
["Emollients / Moisturizers", "–", "Topical","3–4 times daily", "Continuous / Long-term"],
];
const cols = ["DRUG","DOSE","ROA","FREQUENCY","DURATION"];
const cw = [2.7, 0.7, 0.6, 2.4, 3.1];
const startX = 0.25;
let cx = startX;
s.addShape(prs.ShapeType.rect, { x:startX, y:1.18, w:9.5, h:0.42, fill:{ color: NAVY } });
cols.forEach((c, ci) => {
s.addText(c, { x:cx+0.06, y:1.18, w:cw[ci]-0.06, h:0.42, fontSize:SMALL, bold:true, color:WHITE, valign:"middle", margin:0 });
cx += cw[ci];
});
const rowColors = [WHITE, LIGHT_GRAY];
const leftColors = [TEAL, NAVY, "6A5ACD", "6A5ACD", "0277BD", AMBER, GREEN];
rxData.forEach((row, ri) => {
const ry = 1.6 + ri*0.54;
s.addShape(prs.ShapeType.rect, { x:startX, y:ry, w:9.5, h:0.52, fill:{ color:rowColors[ri%2] }, line:{ color: LIGHT_GRAY, width:0.5 } });
s.addShape(prs.ShapeType.rect, { x:startX, y:ry, w:0.05, h:0.52, fill:{ color:leftColors[ri] } });
let rcx = startX;
row.forEach((cell, ci) => {
const bold = ci===0;
const col = ci===0 ? NAVY : MID_GRAY;
s.addText(cell, { x:rcx+0.08, y:ry, w:cw[ci]-0.08, h:0.52, fontSize:SMALL, bold, color:col, valign:"middle", margin:0 });
rcx += cw[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 15 – MONITORING FRAMEWORK
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "CLINICAL MONITORING FRAMEWORK", "Efficacy & Safety Parameters");
footer(s, 15, "Clinical Monitoring Framework");
// Efficacy
card(s, 0.25, 1.18, 4.65, 2.72, "EFFICACY MONITORING", GREEN, "E8F5E9", GREEN);
const eff = [
"Reduction in redness (erythema)",
"Reduction in scaling",
"Reduction in itching (pruritus)",
"Decrease in plaque thickness",
"Improvement in BSA and PASI score",
"Fewer flare-ups, better quality of life",
];
eff.forEach((e, i) => {
s.addText("✓ " + e, { x:0.4, y:1.62+i*0.36, w:4.35, h:0.33, fontSize:SMALL+0.5, color:MID_GRAY, margin:0 });
});
// Safety columns
const safetyItems = [
{ title:"Cyclosporine", col: CORAL, bg: LIGHT_CORAL,
items:["Blood pressure","Serum creatinine (SCr)","BUN & electrolytes (K⁺)","Uric acid"] },
{ title:"Secukinumab (Biologic)", col: NAVY, bg: LIGHT_NAVY,
items:["Signs of infection","TB screening (pre-treatment)","CBC, LFT, RFT periodically"] },
{ title:"Topical Corticosteroids", col:"6A5ACD", bg:"F0EEF9",
items:["Skin atrophy","Striae (stretch marks)","Local skin irritation"] },
];
safetyItems.forEach((item, i) => {
const y = 1.18 + i*1.0;
s.addShape(prs.ShapeType.rect, { x:5.1, y, w:4.65, h:0.92, fill:{ color:item.bg }, line:{ color:item.col, width:1 } });
s.addShape(prs.ShapeType.rect, { x:5.1, y, w:4.65, h:0.35, fill:{ color:item.col } });
s.addText(item.title, { x:5.22, y, w:4.4, h:0.35, fontSize:SMALL+0.5, bold:true, color:WHITE, valign:"middle", margin:0 });
item.items.forEach((t, ti) => {
s.addText("⚠ " + t, { x:5.22, y:y+0.38+ti*0.19, w:4.4, h:0.18, fontSize:SMALL, color:MID_GRAY, margin:0 });
});
});
// Follow-up
s.addShape(prs.ShapeType.rect, { x:5.1, y:4.18, w:4.65, h:0.72, fill:{ color: LIGHT_TEAL }, line:{ color: TEAL, width:1.5 } });
s.addText("FOLLOW-UP SCHEDULE", { x:5.25, y:4.22, w:4.3, h:0.28, fontSize:SMALL, bold:true, color:TEAL, charSpacing:2, margin:0 });
s.addText("Review every 4–8 weeks to assess treatment response and adverse effects.", {
x:5.25, y:4.52, w:4.35, h:0.32, fontSize:SMALL+0.5, color:MID_GRAY
});
// PASI target banner
s.addShape(prs.ShapeType.rect, { x:0.25, y:5.0, w:9.5, h:0.4, fill:{ color: NAVY } });
s.addText("TARGET: PASI-75 by Week 16 | PASI-90 by Month 6 | Sustained PASI-90 for long-term maintenance", {
x:0.4, y:5.0, w:9.1, h:0.4, fontSize:10, bold:true, color:WHITE, align:"center", valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 16 – PATIENT COUNSELLING PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "PATIENT COUNSELLING", "Part 1 – Disease Education & Medication");
footer(s, 16, "Patient Counselling – Part 1");
// Disease Education
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:9.5, h:0.95, fill:{ color: LIGHT_TEAL }, line:{ color: TEAL, width:1.5 } });
s.addText("DISEASE EDUCATION", { x:0.4, y:1.22, w:9.1, h:0.28, fontSize:SMALL, bold:true, color:TEAL, charSpacing:2, margin:0 });
const edu = [
"Psoriasis is a long-term autoimmune skin disease — it is NOT contagious.",
"Treatment controls symptoms and prevents flare-ups; it does not permanently cure the disease.",
];
edu.forEach((e, i) => {
s.addText("• " + e, { x:0.4, y:1.52+i*0.3, w:9.1, h:0.28, fontSize:SMALL+0.5, color:MID_GRAY });
});
// Two medication cards
const meds = [
{ name:"Cyclosporine", col: CORAL, bg: LIGHT_CORAL,
points:["Take regularly as prescribed","Avoid grapefruit juice (↑ drug levels)","Inform doctor of reduced urine output or swelling","Monitor blood pressure regularly at home"] },
{ name:"Secukinumab (Biologic)", col: NAVY, bg: LIGHT_NAVY,
points:["Store injection in refrigerator (2–8°C)","Rotate injection site each time","Report fever, cough, or any signs of infection","Do not miss doses — follow the schedule"] },
];
meds.forEach((m, i) => {
const x = 0.25 + i*4.9;
s.addShape(prs.ShapeType.rect, { x, y:2.28, w:4.65, h:2.85, fill:{ color: m.bg }, line:{ color: m.col, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x, y:2.28, w:4.65, h:0.42, fill:{ color: m.col } });
s.addText(m.name, { x:x+0.12, y:2.28, w:4.4, h:0.42, fontSize:11, bold:true, color:WHITE, valign:"middle", margin:0 });
m.points.forEach((p, pi) => {
s.addText("→ " + p, { x:x+0.15, y:2.74+pi*0.56, w:4.35, h:0.52, fontSize:SMALL+0.5, color:MID_GRAY, valign:"middle" });
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 17 – PATIENT COUNSELLING PART 2 + THANK YOU
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bg(s);
titleBar(s, "PATIENT COUNSELLING", "Part 2 – Topical Steroids & Lifestyle");
footer(s, 17, "Patient Counselling – Part 2");
// Topical steroids card
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:4.65, h:2.0, fill:{ color:"F0EEF9" }, line:{ color:"6A5ACD", width:1.5 } });
s.addShape(prs.ShapeType.rect, { x:0.25, y:1.18, w:4.65, h:0.42, fill:{ color:"6A5ACD" } });
s.addText("TOPICAL STEROIDS", { x:0.4, y:1.18, w:4.4, h:0.42, fontSize:11, bold:true, color:WHITE, valign:"middle", margin:0 });
const topPoints = [
"Apply only a thin layer to affected areas",
"Do not use longer than prescribed",
"Wash hands after applying the medication",
"Do not apply to face unless specifically directed",
];
topPoints.forEach((p, i) => {
s.addText("→ " + p, { x:0.4, y:1.65+i*0.37, w:4.4, h:0.34, fontSize:SMALL+0.5, color:MID_GRAY });
});
// Lifestyle card
s.addShape(prs.ShapeType.rect, { x:0.25, y:3.32, w:4.65, h:1.82, fill:{ color:"E8F5E9" }, line:{ color: GREEN, width:1.5 } });
s.addShape(prs.ShapeType.rect, { x:0.25, y:3.32, w:4.65, h:0.42, fill:{ color: GREEN } });
s.addText("LIFESTYLE COUNSELLING", { x:0.4, y:3.32, w:4.4, h:0.42, fontSize:11, bold:true, color:WHITE, valign:"middle", margin:0 });
const lifestyle = [
"Use moisturizers daily to keep the skin hydrated",
"Avoid scratching the lesions",
"Manage stress through relaxation techniques and adequate sleep",
"Stop smoking and limit alcohol intake",
];
lifestyle.forEach((p, i) => {
s.addText("✓ " + p, { x:0.4, y:3.78+i*0.34, w:4.4, h:0.31, fontSize:SMALL+0.5, color:MID_GRAY });
});
// Thank you / summary panel
s.addShape(prs.ShapeType.rect, { x:5.1, y:1.18, w:4.65, h:3.96, fill:{ color: NAVY }, line:{ color: TEAL, width:2 } });
s.addShape(prs.ShapeType.ellipse, { x:5.5, y:0.9, w:3, h:3, fill:{ color: TEAL, transparency:88 } });
s.addText("Thank You", { x:5.2, y:1.55, w:4.4, h:0.9, fontSize:34, bold:true, color:WHITE, align:"center" });
s.addShape(prs.ShapeType.line, { x:5.6, y:2.52, w:3.5, h:0, line:{ color: TEAL, width:2 } });
s.addText("Questions & Discussion", { x:5.2, y:2.6, w:4.4, h:0.42, fontSize:14, color:"AECBEA", align:"center", italic:true });
s.addShape(prs.ShapeType.rect, { x:5.3, y:3.15, w:4.3, h:1.5, fill:{ color:"0D2237" }, line:{ color: TEAL, width:1 } });
s.addText("CASE SUMMARY", { x:5.45, y:3.2, w:3.9, h:0.28, fontSize:SMALL, bold:true, color: TEAL, charSpacing:3, align:"center" });
s.addText(
"50M · Severe Plaque Psoriasis\n27-yr refractory disease\nRec: Secukinumab + Cyclosporine bridge\n+ Topicals + Cetirizine + Emollients",
{ x:5.45, y:3.5, w:3.9, h:1.1, fontSize:SMALL+0.5, color:WHITE, align:"center" }
);
}
// ─── WRITE FILE ───────────────────────────────────────────────────
prs.writeFile({ fileName: "/home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Case_Light.pptx" })
.then(() => console.log("SUCCESS"))
.catch(e => { console.error("ERROR:", e); process.exit(1); });
cd /home/daytona/workspace/plaque-psoriasis-ppt && node build_light.js 2>&1
ls -lh /home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Case_Light.…
Plaque Psoriasis Case Light
Presentation · PPTX
| Feature | Details |
|---|---|
| Background | Light (#F5F7FA near-white) with white cards — clean, printable look |
| Headline font | 28 pt bold on all slide header bars |
| Sub-headline font | 24 pt italic on all secondary title lines |
| Colour theme | Navy (#1A3557) + Teal (#0D7377) + Coral accent — professional medical palette on white |
| Total slides | 17 slides matching the uploaded content exactly |
Use three shade of same colour and prepare ppt
~/plaque-psoriasis-ppt/build_mono.js
const pptxgen = require("pptxgenjs");
const prs = new pptxgen();
prs.layout = "LAYOUT_16x9";
prs.title = "Plaque Psoriasis Case Study";
prs.author = "Ganavi C";
// ─── THREE SHADES OF TEAL ──────────────────────────────────────────
const DARK = "0B4F6C"; // shade 1 – deep teal (headers, accents)
const MID = "1A8A9B"; // shade 2 – mid teal (cards, bands)
const LIGHT = "D6F0F4"; // shade 3 – pale teal (backgrounds, alt rows)
const WHITE = "FFFFFF";
const TEXT_D = "0B3A4F"; // very dark teal for body text
const TEXT_M = "1D5C6E"; // mid-dark teal for secondary text
// Font sizes as required
const HEAD = 28; // headline
const SUB = 24; // sub-headline
const BODY = 11;
const SMALL = 9.5;
// ─── HELPERS ──────────────────────────────────────────────────────
function bgLight(slide) {
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: WHITE } });
}
function titleBar(slide, headline, sub) {
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:1.05, fill:{ color: DARK } });
slide.addShape(prs.ShapeType.rect, { x:0, y:1.05, w:10, h:0.06, fill:{ color: MID } });
slide.addText(headline, {
x:0.35, y:0.04, w:9.3, h:0.62,
fontSize:HEAD, bold:true, color:WHITE, valign:"bottom", margin:0
});
if (sub) {
slide.addText(sub, {
x:0.35, y:0.66, w:9.3, h:0.36,
fontSize:SUB, color:LIGHT, valign:"top", italic:true, margin:0
});
}
}
function footer(slide, num, label) {
slide.addShape(prs.ShapeType.rect, { x:0, y:5.43, w:10, h:0.195, fill:{ color: DARK } });
slide.addText(`Slide ${num} · ${label}`, {
x:0.2, y:5.43, w:5, h:0.195, fontSize:7.5, color:LIGHT, valign:"middle", margin:0
});
slide.addText("Plaque Psoriasis Case · Ganavi C · V Pharm D · 21Q0275", {
x:5, y:5.43, w:4.8, h:0.195, fontSize:7.5, color:LIGHT, align:"right", valign:"middle", margin:0
});
}
// Card with optional title strip
function card(slide, x, y, w, h, title) {
slide.addShape(prs.ShapeType.rect, {
x, y, w, h, fill:{ color: LIGHT }, line:{ color: MID, width:1 }
});
if (title) {
slide.addShape(prs.ShapeType.rect, { x, y, w, h:0.38, fill:{ color: MID } });
slide.addText(title, {
x:x+0.12, y, w:w-0.2, h:0.38,
fontSize:SMALL+1, bold:true, color:WHITE, valign:"middle", charSpacing:1, margin:0
});
}
}
// Lab table (3-col)
function labTable(slide, x, y, w, title, rows) {
const HDR_H = 0.36, COL_H = 0.38;
const cw = [w*0.44, w*0.28, w*0.28];
// title row
slide.addShape(prs.ShapeType.rect, { x, y, w, h:HDR_H, fill:{ color: DARK } });
slide.addText(title, { x:x+0.1, y, w:w-0.15, h:HDR_H, fontSize:SMALL+1, bold:true, color:WHITE, valign:"middle", margin:0 });
// sub-header
const sy = y+HDR_H;
slide.addShape(prs.ShapeType.rect, { x, y:sy, w, h:HDR_H, fill:{ color: MID } });
let cx = x;
["Parameter","Result","Normal Range"].forEach((h,ci)=>{
slide.addText(h,{ x:cx+0.06, y:sy, w:cw[ci]-0.06, h:HDR_H, fontSize:SMALL, bold:true, color:WHITE, valign:"middle", margin:0 });
cx += cw[ci];
});
// data rows
rows.forEach((row,ri)=>{
const ry = sy+HDR_H+ri*COL_H;
const fill = ri%2===0 ? WHITE : LIGHT;
slide.addShape(prs.ShapeType.rect,{ x, y:ry, w, h:COL_H, fill:{ color:fill }, line:{ color:LIGHT, width:0.5 } });
let rcx = x;
row.slice(0,3).forEach((cell,ci)=>{
const isLow = row[3]==="L" || (typeof cell==="string" && cell.toLowerCase().includes("low"));
const tc = ci===0 ? TEXT_D : (ci===1 && isLow) ? MID : TEXT_M;
slide.addText(cell,{ x:rcx+0.06, y:ry, w:cw[ci]-0.06, h:COL_H, fontSize:SMALL, bold:ci===0, color:tc, valign:"middle", margin:0 });
rcx += cw[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
// Full background – white
s.addShape(prs.ShapeType.rect,{ x:0,y:0,w:10,h:5.625, fill:{ color:WHITE } });
// Left panel – dark teal
s.addShape(prs.ShapeType.rect,{ x:0,y:0,w:3.8,h:5.625, fill:{ color:DARK } });
// Divider strip – mid teal
s.addShape(prs.ShapeType.rect,{ x:3.8,y:0,w:0.07,h:5.625, fill:{ color:MID } });
// Decorative circles
s.addShape(prs.ShapeType.ellipse,{ x:-1.0,y:-1.0,w:4,h:4, fill:{ color:MID, transparency:80 } });
s.addShape(prs.ShapeType.ellipse,{ x:0.5,y:3.9,w:2.6,h:2.6, fill:{ color:LIGHT, transparency:70 } });
// Left text
s.addText("CASE\nSTUDY",{ x:0.15,y:0.55,w:3.5,h:1.45, fontSize:36,bold:true,color:WHITE,align:"center",charSpacing:7 });
s.addShape(prs.ShapeType.line,{ x:0.55,y:2.1,w:2.6,h:0, line:{ color:MID,width:2 } });
s.addText("Dermatology &\nClinical Pharmacy",{ x:0.15,y:2.22,w:3.5,h:0.7, fontSize:13,color:LIGHT,align:"center",italic:true });
// Presenter box
s.addShape(prs.ShapeType.rect,{ x:0.28,y:3.3,w:3.2,h:1.65, fill:{ color:"062D3F" }, line:{ color:MID,width:1 } });
s.addText("PRESENTED BY",{ x:0.38,y:3.37,w:3.0,h:0.28, fontSize:8,bold:true,color:MID,align:"center",charSpacing:3,margin:0 });
s.addText([
{ text:"Ganavi C\n", options:{ bold:true,fontSize:15 } },
{ text:"V Pharm D\n", options:{ fontSize:12 } },
{ text:"Reg No: 21Q0275", options:{ fontSize:10,color:LIGHT } }
],{ x:0.38,y:3.68,w:3.0,h:1.05,color:WHITE,align:"center" });
// Right main title
s.addText("Plaque Psoriasis",{ x:4.1,y:0.6,w:5.65,h:1.05, fontSize:HEAD+10,bold:true,color:DARK });
s.addText("Clinical Case Study",{ x:4.1,y:1.65,w:5.65,h:0.52, fontSize:SUB,color:MID,italic:true });
s.addShape(prs.ShapeType.line,{ x:4.1,y:2.25,w:5.2,h:0, line:{ color:MID,width:2 } });
// Tag chips – three teal shades
const tags = [
{ t:"Severe", fill:DARK },
{ t:"Chronic", fill:MID },
{ t:"Uncontrolled", fill:DARK },
{ t:"Biologic Candidate", fill:MID },
];
tags.forEach((tg,i)=>{
s.addShape(prs.ShapeType.roundRect,{ x:4.1+i*1.42,y:2.38,w:1.34,h:0.33, fill:{ color:tg.fill }, line:{ color:MID,width:0 }, rectRadius:0.05 });
s.addText(tg.t,{ x:4.1+i*1.42,y:2.38,w:1.34,h:0.33, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
});
s.addText("A 50-year-old male with a 27-year history of plaque psoriasis\npresenting with severe, uncontrolled disease despite multiple lines of therapy.",{
x:4.1,y:2.85,w:5.65,h:0.8, fontSize:10.5,color:TEXT_M,italic:true
});
// Bottom footer strip
s.addShape(prs.ShapeType.rect,{ x:0,y:5.43,w:10,h:0.195, fill:{ color:LIGHT } });
s.addText("V Pharm D · Clinical Pharmacy Case Presentation · 2024",{
x:0,y:5.43,w:10,h:0.195, fontSize:8.5,color:DARK,align:"center",valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 2 – PATIENT PROFILE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"SUBJECTIVE DATA","Patient Profile");
footer(s,2,"Subjective Data – Patient Profile");
// Patient table card
card(s, 0.25,1.18,4.55,3.35,"PATIENT INFORMATION");
const patRows=[
["Age","50 years"],["Gender","Male"],
["Occupation","Elementary School Teacher"],
["Weight","75 kg"],["Height","5'9\""],["Allergies","NKA"]
];
patRows.forEach(([k,v],i)=>{
const ry=1.6+i*0.47;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:4.55,h:0.44, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:0.38,y:ry,w:1.85,h:0.44, fontSize:SMALL+0.5,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:2.25,y:ry,w:2.42,h:0.44, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle",margin:0 });
});
// Chief complaint
s.addShape(prs.ShapeType.rect,{ x:5.05,y:1.18,w:4.7,h:1.12, fill:{ color:LIGHT }, line:{ color:DARK,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:5.05,y:1.18,w:4.7,h:0.36, fill:{ color:DARK } });
s.addText("CHIEF COMPLAINT",{ x:5.18,y:1.18,w:4.4,h:0.36, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",charSpacing:2,margin:0 });
s.addText('"Nothing is helping my psoriasis."',{
x:5.18,y:1.57,w:4.4,h:0.68, fontSize:13.5,color:DARK,italic:true,valign:"middle"
});
// Clinical note
card(s, 5.05,2.44,4.7,2.09,"CLINICAL NOTE");
s.addText(
"Subjective data emphasizes significant mental burden and clinical therapeutic non-response to conventional treatment routes.\n\nPatient presents with clear frustration after years of escalating treatment without adequate disease control.",
{ x:5.18,y:2.87,w:4.45,h:1.6, fontSize:SMALL+0.5,color:TEXT_M }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 3 – HPI PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"HISTORY OF PRESENT ILLNESS","27-Year Treatment Chronology – Part 1");
footer(s,3,"HPI – Treatment Timeline Part 1");
s.addText("Chronological course of medical interventions since early diagnosis:",{
x:0.3,y:1.18,w:9.4,h:0.28, fontSize:SMALL+1,color:TEXT_M,italic:true
});
// 4 event cards — alternating dark/mid/light tones
const events=[
{ label:"Initial Diagnosis", age:"Age 23",
text:"Plaque psoriasis diagnosed. Initially achieved good control with medium-potency topical corticosteroids.",
hdr:DARK, bg:LIGHT },
{ label:"Combination Course", age:"Mid-course",
text:"Calcipotriol therapy added when topical corticosteroids alone became insufficient for disease control.",
hdr:MID, bg:WHITE },
{ label:"Phototherapy Run", age:"Disease progression",
text:"PUVA (Psoralen + UVA) phototherapy initiated — provided temporary improvement before losing efficacy.",
hdr:DARK, bg:LIGHT },
{ label:"Efficacy Loss", age:"Later",
text:"PUVA gradually lost effectiveness, resulting in inadequate disease control and recurrent lesions.",
hdr:MID, bg:WHITE },
];
events.forEach((e,i)=>{
const x=0.25+(i%2)*4.9, y=i<2?1.58:3.2;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:1.48, fill:{ color:e.bg }, line:{ color:e.hdr,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.42, fill:{ color:e.hdr } });
s.addText(e.label,{ x:x+0.12,y,w:3.1,h:0.42, fontSize:SMALL+1.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(e.age,{ x:x+3.2,y,w:1.28,h:0.42, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
s.addText(e.text,{ x:x+0.12,y:y+0.48,w:4.35,h:0.96, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 4 – HPI PART 2
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"HISTORY OF PRESENT ILLNESS","27-Year Treatment Chronology – Part 2");
footer(s,4,"HPI – Treatment Timeline Part 2");
const events=[
{ label:"Systemic Methotrexate Escalation", hdr:DARK, bg:LIGHT,
left:"Frequent flare-ups despite increasing methotrexate doses — SCAT used for acute exacerbations.",
right:"MTX escalated to 25 mg/week. Cumulative lifetime dose reached 2.2 g." },
{ label:"Switch: Cyclosporine + Acitretin", hdr:MID, bg:WHITE,
left:"Treatment changed to cyclosporine 75 mg twice daily + acitretin 25 mg daily.",
right:"Acitretin discontinued due to severe xerosis (dry skin side effect)." },
{ label:"Current Presentation – 3rd Severe Flare", hdr:DARK, bg:LIGHT,
left:"Cyclosporine alone provided good control for 1 year after acitretin stopped.",
right:"Two severe flare-ups in past 6 months. Current = 3rd and most severe flare." },
];
events.forEach((e,i)=>{
const y=1.22+i*1.35;
s.addShape(prs.ShapeType.rect,{ x:0.25,y,w:9.5,h:1.22, fill:{ color:e.bg }, line:{ color:e.hdr,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y,w:9.5,h:0.4, fill:{ color:e.hdr } });
s.addText(`${i+1}. ${e.label}`,{ x:0.4,y,w:9.1,h:0.4, fontSize:11,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("• "+e.left,{ x:0.4,y:y+0.44,w:4.55,h:0.73, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
s.addText("• "+e.right,{ x:5.1,y:y+0.44,w:4.5,h:0.73, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 5 – MEDICAL / FAMILY / SOCIAL HISTORY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"MEDICAL, FAMILY & SOCIAL HISTORY","Background & Risk Factors");
footer(s,5,"Medical / Family / Social History");
// Medical & Family
card(s,0.25,1.18,4.55,2.4,"MEDICAL & FAMILY HISTORY");
const mf=[["PMH","Major depressive episode — 16 years ago"],["Brother","Has psoriasis"],["Father","Hypertension + Type 2 Diabetes"]];
mf.forEach(([k,v],i)=>{
const ry=1.62+i*0.6;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:4.55,h:0.56, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:0.38,y:ry,w:1.1,h:0.56, fontSize:SMALL,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:1.5,y:ry,w:3.15,h:0.56, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
// Social
card(s,5.05,1.18,4.7,2.4,"SOCIAL PROFILE & TRIGGERS");
const soc=[["Smoking","Former heavy smoker"],["Alcohol","One glass of wine daily"],["Stress","Increased occupational stress"],["Family","Married with children"]];
soc.forEach(([k,v],i)=>{
const ry=1.62+i*0.48;
s.addShape(prs.ShapeType.rect,{ x:5.05,y:ry,w:4.7,h:0.44, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:5.18,y:ry,w:1.2,h:0.44, fontSize:SMALL,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:6.4,y:ry,w:3.2,h:0.44, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
// Allergies
card(s,0.25,3.72,4.55,0.95,"ALLERGIES & TOLERABILITY");
s.addText("NKA — No Known Allergies",{ x:0.4,y:4.14,w:4.3,h:0.28, fontSize:SMALL+1,bold:true,color:DARK });
s.addText("Drug intolerance: Acitretin — severe xerosis confirmed",{ x:0.4,y:4.42,w:4.3,h:0.22, fontSize:SMALL,color:TEXT_M });
// Risk note
card(s,5.05,3.72,4.7,0.95,"RISK AMPLIFIERS");
s.addText("Smoking, alcohol, and occupational stress are established psoriasis flare triggers and may contribute to treatment resistance.",{
x:5.18,y:4.14,w:4.45,h:0.55, fontSize:SMALL+0.5,color:TEXT_M
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 6 – OBJECTIVE DATA
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"OBJECTIVE DATA","Vital Signs & Physical Examination");
footer(s,6,"Objective Data – Vitals & Skin Exam");
// Vital boxes – dark / mid / dark / mid shading
const vitals=[
{ label:"BLOOD PRESSURE", val:"129/83", unit:"mmHg", col:DARK },
{ label:"PULSE RATE", val:"88", unit:"bpm", col:MID },
{ label:"TEMPERATURE", val:"37°C", unit:"Normal", col:DARK },
{ label:"APPEARANCE", val:"Alert", unit:"Mild anxiety",col:MID },
];
vitals.forEach((v,i)=>{
const x=0.25+i*2.42;
s.addShape(prs.ShapeType.rect,{ x,y:1.18,w:2.3,h:1.25, fill:{ color:LIGHT }, line:{ color:v.col,width:2 } });
s.addShape(prs.ShapeType.rect,{ x,y:1.18,w:2.3,h:0.36, fill:{ color:v.col } });
s.addText(v.label,{ x:x+0.07,y:1.18,w:2.16,h:0.36, fontSize:7.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(v.val,{ x:x+0.07,y:1.56,w:2.16,h:0.52, fontSize:22,bold:true,color:v.col,align:"center" });
s.addText(v.unit,{ x:x+0.07,y:2.09,w:2.16,h:0.3, fontSize:SMALL,color:TEXT_M,align:"center" });
});
// Skin exam card
s.addShape(prs.ShapeType.rect,{ x:0.25,y:2.57,w:9.5,h:2.62, fill:{ color:LIGHT }, line:{ color:DARK,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:2.57,w:9.5,h:0.42, fill:{ color:DARK } });
s.addText("SKIN EXAMINATION — Severe Plaque Psoriasis",{
x:0.4,y:2.57,w:9.15,h:0.42, fontSize:11,bold:true,color:WHITE,valign:"middle",charSpacing:1,margin:0
});
// Location chips
const locs=["Abdomen","Arms","Legs","Back","Scalp","Palms","Soles","Elbows","Knees"];
s.addText("Locations:",{ x:0.4,y:3.06,w:1.3,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
locs.forEach((loc,i)=>{
const lx=1.65+i*0.86;
s.addShape(prs.ShapeType.roundRect,{ x:lx,y:3.06,w:0.8,h:0.28, fill:{ color:MID }, line:{ color:DARK,width:0 }, rectRadius:0.04 });
s.addText(loc,{ x:lx,y:3.06,w:0.8,h:0.28, fontSize:7.5,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
});
s.addText("Visual Profile:",{ x:0.4,y:3.44,w:1.6,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Thick plaques · Erythematous lesions · Well-demarcated borders · Confluent lesions",{
x:1.95,y:3.44,w:7.55,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0
});
s.addText("Secondary Signs:",{ x:0.4,y:3.78,w:1.8,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Silvery-white scales · Excoriations due to scratching",{
x:2.2,y:3.78,w:7.3,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0
});
s.addText("General Status:",{ x:0.4,y:4.12,w:1.8,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Alert, oriented · Mild anxiety noted",{
x:2.2,y:4.12,w:7.3,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 7 – LAB: CBC & RENAL
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Complete Blood Count & Renal Panel");
footer(s,7,"Lab Data – CBC & Renal");
labTable(s,0.25,1.18,9.5,"COMPLETE BLOOD COUNT (CBC)",[
["Hemoglobin (Hb)", "13.5 g/dL", "13.5–17.5 g/dL","N"],
["Hematocrit (Hct)", "35% (Mildly Low)", "40–52%", "L"],
["WBC", "6.0 ×10³/mm³", "4–11 ×10³/mm³", "N"],
["Platelets", "255 ×10³/mm³", "150–400 ×10³/mm³","N"],
]);
labTable(s,0.25,3.72,9.5,"RENAL FUNCTION TEST (RFT)",[
["Blood Urea Nitrogen (BUN)","14 mg/dL","7–20 mg/dL", "N"],
["Creatinine (SCr)", "1.0 mg/dL","0.6–1.3 mg/dL","N"],
]);
// Flag note
s.addShape(prs.ShapeType.rect,{ x:0.25,y:5.18,w:9.5,h:0.24, fill:{ color:LIGHT }, line:{ color:MID,width:0.75 } });
s.addText("⚠ Hematocrit (35%) is mildly below normal (40–52%) — monitor for anemia.",{
x:0.4,y:5.18,w:9.2,h:0.24, fontSize:8.5,color:DARK,valign:"middle",margin:0
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 8 – LAB: LFT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Liver Function Profile");
footer(s,8,"Lab Data – Liver Function");
labTable(s,0.25,1.18,9.5,"LIVER FUNCTION TEST (LFT)",[
["AST (SGOT)", "22 IU/L", "10–40 IU/L", "N"],
["ALT (SGPT)", "38 IU/L", "7–56 IU/L", "N"],
["Alkaline Phosphatase (ALP)","98 IU/L", "44–147 IU/L", "N"],
["Total Bilirubin", "1.0 mg/dL","0.1–1.2 mg/dL","N"],
["Albumin", "3.7 g/dL", "3.5–5.0 g/dL", "N"],
]);
card(s,0.25,4.1,9.5,1.02,"CLINICAL INTERPRETATION");
s.addText(
"All liver function parameters are within normal limits — clinically significant given the patient's history of methotrexate use (cumulative dose 2.2 g), which carries hepatotoxicity risk. Normal LFTs support safe transition to biologic therapy (Secukinumab).",
{ x:0.4,y:4.52,w:9.2,h:0.55, fontSize:SMALL+0.5,color:TEXT_M }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 9 – LAB: ELECTROLYTES & CHEMISTRY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Electrolytes & Chemistry Panel");
footer(s,9,"Lab Data – Electrolytes & Chemistry");
labTable(s,0.25,1.18,9.5,"ELECTROLYTES & CHEMISTRY",[
["Sodium (Na⁺)", "139 mEq/L","135–145 mEq/L","N"],
["Potassium (K⁺)", "4.0 mEq/L","3.5–5.0 mEq/L","N"],
["Chloride (Cl⁻)", "102 mEq/L","98–106 mEq/L", "N"],
["Bicarbonate (HCO₃⁻/CO₂)","25 mEq/L", "22–28 mEq/L", "N"],
["Uric Acid", "4 mg/dL", "3.5–7.2 mg/dL","N"],
["Total Cholesterol", "180 mg/dL","<200 mg/dL", "N"],
["Blood Glucose", "98 mg/dL", "70–110 mg/dL", "N"],
]);
card(s,0.25,4.92,9.5,0.65,"CYCLOSPORINE SAFETY NOTE");
s.addText(
"Potassium and renal parameters are within normal limits — important for cyclosporine safety (hyperkalemia and nephrotoxicity monitoring).",
{ x:0.4,y:5.18,w:9.2,h:0.35, fontSize:SMALL+0.5,color:TEXT_M }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 10 – ASSESSMENT: DIAGNOSIS & SEVERITY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"ASSESSMENT","Diagnosis & Severity Profile");
footer(s,10,"Assessment – Diagnosis & Severity");
// Diagnosis strip
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.62, fill:{ color:DARK } });
s.addText("PRIMARY DIAGNOSIS",{ x:0.42,y:1.2,w:2.8,h:0.28, fontSize:SMALL,bold:true,color:LIGHT,charSpacing:2,margin:0 });
s.addText("Severe Chronic Plaque Psoriasis (Uncontrolled)",{
x:0.42,y:1.46,w:9.0,h:0.3, fontSize:14,bold:true,color:WHITE,margin:0
});
// Metric cards
const metrics=[
{ label:"BSA Involvement", val:">20%", sub:"Severe threshold: >10%", shade:DARK },
{ label:"Estimated PASI", val:">20", sub:"Severe disease index", shade:MID },
{ label:"Disease Duration",val:"27 yrs", sub:"Chronic, refractory", shade:DARK },
];
metrics.forEach((m,i)=>{
const x=0.25+i*3.25;
s.addShape(prs.ShapeType.rect,{ x,y:1.95,w:3.1,h:1.25, fill:{ color:LIGHT }, line:{ color:m.shade,width:2 } });
s.addText(m.label,{ x:x+0.1,y:1.98,w:2.9,h:0.3, fontSize:SMALL,bold:true,color:m.shade,margin:0 });
s.addText(m.val,{ x:x+0.1,y:2.26,w:2.9,h:0.6, fontSize:28,bold:true,color:m.shade,align:"center" });
s.addText(m.sub,{ x:x+0.1,y:2.86,w:2.9,h:0.28, fontSize:SMALL-0.5,color:TEXT_M,align:"center" });
});
// Evidence
card(s,0.25,3.34,4.65,1.82,"CLINICAL EVIDENCE");
["Erythematous plaques with silvery scales",
"Extensive body involvement",
"Long-standing disease (27 years)",
"Positive family history of psoriasis"
].forEach((e,i)=>{
s.addText("✓ "+e,{ x:0.4,y:3.76+i*0.35,w:4.35,h:0.32, fontSize:SMALL+0.5,color:TEXT_M });
});
// Severity benchmarks
card(s,5.1,3.34,4.65,1.82,"SEVERITY BENCHMARKS");
["BSA Involvement: >20%",
"Areas: Scalp, Arms, Legs, Abdomen, Back, Palms, Soles",
"Severity: Severe (>10% BSA)",
"PASI Score: >20 (Severe disease index)"
].forEach((e,i)=>{
s.addText("• "+e,{ x:5.25,y:3.76+i*0.35,w:4.35,h:0.32, fontSize:SMALL+0.5,color:TEXT_M });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 11 – ASSESSMENT: DTPS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"ASSESSMENT","Drug Therapy Problems (DTPs)");
footer(s,11,"Assessment – Drug Therapy Problems");
const dtps=[
{ num:"DTP 1", title:"Refractory Uncontrolled Status",
text:"Uncontrolled severe plaque psoriasis despite active cyclosporine therapy.", shade:DARK },
{ num:"DTP 2", title:"Subtherapeutic Efficacy",
text:"Inadequate physiological response to current cyclosporine dosing regimen.", shade:MID },
{ num:"DTP 3", title:"Historical Treatment Failures",
text:"Previous failures: topical therapy, PUVA phototherapy, and methotrexate.", shade:DARK },
{ num:"DTP 4", title:"Adverse Event Intolerance",
text:"Oral acitretin intolerance due to secondary severe xerosis (dry skin).", shade:MID },
{ num:"DTP 5", title:"Severe Pruritus Burden",
text:"Severe pruritus causing chronic scratching and skin excoriations.", shade:DARK },
{ num:"DTP 6", title:"Psychosocial Exacerbation",
text:"Occupational stress contributing to disease flare-ups and worsening.", shade:MID },
];
dtps.forEach((d,i)=>{
const x=0.25+(i%2)*4.9, y=1.18+Math.floor(i/2)*1.38;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:1.26, fill:{ color:LIGHT }, line:{ color:d.shade,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.42, fill:{ color:d.shade } });
s.addText(d.num,{ x:x+0.1,y,w:0.75,h:0.42, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(d.title,{ x:x+0.85,y,w:3.65,h:0.42, fontSize:SMALL+0.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(d.text,{ x:x+0.12,y:y+0.48,w:4.35,h:0.72, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 12 – PLANNING: GOALS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PLANNING","Goals of Therapy");
footer(s,12,"Planning – Goals of Therapy");
// Short-term
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:4.65,h:3.35, fill:{ color:LIGHT }, line:{ color:DARK,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:4.65,h:0.45, fill:{ color:DARK } });
s.addText("SHORT-TERM GOALS",{ x:0.4,y:1.18,w:3.2,h:0.45, fontSize:SUB-8,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("4–8 Weeks",{ x:3.6,y:1.18,w:1.2,h:0.45, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
["Reduce erythema (redness)","Reduce scaling","Relieve itching (pruritus)",
"Stop disease progression","Improve sleep and comfort"].forEach((g,i)=>{
s.addShape(prs.ShapeType.ellipse,{ x:0.4,y:1.72+i*0.52,w:0.26,h:0.26, fill:{ color:DARK } });
s.addText(`${i+1}`,{ x:0.4,y:1.72+i*0.52,w:0.26,h:0.26, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
s.addText(g,{ x:0.76,y:1.68+i*0.52,w:4.0,h:0.4, fontSize:11,color:TEXT_M,valign:"middle" });
});
// Long-term
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:3.35, fill:{ color:LIGHT }, line:{ color:MID,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:0.45, fill:{ color:MID } });
s.addText("LONG-TERM GOALS",{ x:5.25,y:1.18,w:3.2,h:0.45, fontSize:SUB-8,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("3–6 Months",{ x:8.45,y:1.18,w:1.2,h:0.45, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
["Achieve PASI-75 or PASI-90 response","Prevent future flare-ups","Improve quality of life",
"Maintain long-term disease control","Minimize treatment-related toxicity"].forEach((g,i)=>{
s.addShape(prs.ShapeType.ellipse,{ x:5.27,y:1.72+i*0.52,w:0.26,h:0.26, fill:{ color:MID } });
s.addText(`${i+1}`,{ x:5.27,y:1.72+i*0.52,w:0.26,h:0.26, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
s.addText(g,{ x:5.63,y:1.68+i*0.52,w:4.0,h:0.4, fontSize:11,color:TEXT_M,valign:"middle" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 13 – NON-PHARMACOLOGICAL MANAGEMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"NON-PHARMACOLOGICAL MANAGEMENT","Lifestyle & Supportive Interventions");
footer(s,13,"Non-Pharmacological Management");
const items=[
{ title:"Regular Moisturization", shade:DARK,
text:"Apply emollients (petroleum jelly, paraffin, ceramide creams) 3–4 times daily to reduce dryness, scaling, and itching." },
{ title:"Proper Skin Care", shade:MID,
text:"Lukewarm water for bathing; avoid hot showers and harsh soaps; pat dry and apply moisturizer immediately after." },
{ title:"Stress Management", shade:DARK,
text:"Practice yoga, meditation, deep breathing, and ensure adequate sleep to reduce flare triggers." },
{ title:"Avoid Skin Trauma", shade:MID,
text:"Avoid scratching, rubbing, and tight clothing to prevent the Koebner phenomenon." },
{ title:"Lifestyle Modification", shade:DARK,
text:"Stop smoking, limit alcohol consumption, and maintain a healthy body weight." },
{ title:"Regular Exercise", shade:MID,
text:"Moderate physical activity to improve overall health and reduce psychological stress." },
{ title:"Avoid Triggers", shade:DARK,
text:"Avoid stress, skin injury, infections, and medications that may worsen psoriasis symptoms." },
{ title:"Patient Education", shade:MID,
text:"Psoriasis is a chronic, non-contagious disease requiring long-term management and treatment adherence." },
];
items.forEach((item,i)=>{
const x=0.25+(i%2)*4.9, y=1.18+Math.floor(i/2)*1.04;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.96, fill:{ color:LIGHT }, line:{ color:item.shade,width:1 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:0.08,h:0.96, fill:{ color:item.shade } });
s.addText(item.title,{ x:x+0.16,y:y+0.04,w:4.3,h:0.3, fontSize:SMALL+1,bold:true,color:item.shade,margin:0 });
s.addText(item.text,{ x:x+0.16,y:y+0.37,w:4.3,h:0.56, fontSize:SMALL,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 14 – PHARMACOLOGICAL TREATMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PHARMACOLOGICAL TREATMENT REGIMEN","Drug Therapy Plan");
footer(s,14,"Pharmacological Treatment Regimen");
const rxData=[
["Inj. Secukinumab", "300 mg","SC", "Wks 0,1,2,3,4 → q4w", "Long-term maintenance"],
["Tab. Cyclosporine", "75 mg", "PO", "Twice daily", "4–8 wks → taper after biologic response"],
["Clobetasol Propionate 0.05% Oint.","–", "Topical","Twice daily", "2–4 weeks"],
["Clobetasol 0.05% Scalp Solution", "–", "Topical","Once daily", "2–4 weeks"],
["Calcipotriol 0.005% Ointment", "–", "Topical","Twice daily", "Long-term maintenance"],
["Tab. Cetirizine", "10 mg", "PO", "Once daily (bedtime)", "2–4 wks or until resolved"],
["Emollients / Moisturizers", "–", "Topical","3–4 times daily", "Continuous / Long-term"],
];
const cols=["DRUG","DOSE","ROA","FREQUENCY","DURATION"];
const cw=[2.7,0.7,0.6,2.4,3.1];
let cx=0.25;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.42, fill:{ color:DARK } });
cols.forEach((c,ci)=>{
s.addText(c,{ x:cx+0.06,y:1.18,w:cw[ci]-0.06,h:0.42, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",margin:0 });
cx+=cw[ci];
});
// Alternate row shading: white / LIGHT
const leftShades=[DARK,MID,DARK,MID,DARK,MID,DARK];
rxData.forEach((row,ri)=>{
const ry=1.6+ri*0.54;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:9.5,h:0.52, fill:{ color:ri%2===0?WHITE:LIGHT }, line:{ color:LIGHT,width:0.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:0.05,h:0.52, fill:{ color:leftShades[ri] } });
let rcx=0.25;
row.forEach((cell,ci)=>{
s.addText(cell,{ x:rcx+0.08,y:ry,w:cw[ci]-0.08,h:0.52, fontSize:SMALL,bold:ci===0,color:ci===0?DARK:TEXT_M,valign:"middle",margin:0 });
rcx+=cw[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 15 – MONITORING
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"CLINICAL MONITORING FRAMEWORK","Efficacy & Safety Parameters");
footer(s,15,"Clinical Monitoring Framework");
// Efficacy card (left)
card(s,0.25,1.18,4.65,2.72,"EFFICACY MONITORING");
["Reduction in redness (erythema)","Reduction in scaling",
"Reduction in itching (pruritus)","Decrease in plaque thickness",
"Improvement in BSA and PASI score","Fewer flare-ups, better quality of life"
].forEach((e,i)=>{
s.addText("✓ "+e,{ x:0.4,y:1.62+i*0.36,w:4.35,h:0.33, fontSize:SMALL+0.5,color:TEXT_M,margin:0 });
});
// Safety cards (right)
const safety=[
{ title:"Cyclosporine", shade:DARK,
items:["Blood pressure","Serum creatinine (SCr)","BUN & electrolytes (K⁺)","Uric acid"] },
{ title:"Secukinumab (Biologic)", shade:MID,
items:["Signs of infection","TB screening pre-treatment","CBC, LFT, RFT periodically"] },
{ title:"Topical Corticosteroids", shade:DARK,
items:["Skin atrophy","Striae (stretch marks)","Local skin irritation"] },
];
safety.forEach((item,i)=>{
const y=1.18+i*1.0;
s.addShape(prs.ShapeType.rect,{ x:5.1,y,w:4.65,h:0.92, fill:{ color:LIGHT }, line:{ color:item.shade,width:1 } });
s.addShape(prs.ShapeType.rect,{ x:5.1,y,w:4.65,h:0.36, fill:{ color:item.shade } });
s.addText(item.title,{ x:5.22,y,w:4.4,h:0.36, fontSize:SMALL+0.5,bold:true,color:WHITE,valign:"middle",margin:0 });
item.items.forEach((t,ti)=>{
s.addText("⚠ "+t,{ x:5.22,y:y+0.4+ti*0.19,w:4.4,h:0.18, fontSize:SMALL,color:TEXT_M,margin:0 });
});
});
// Follow-up
card(s,5.1,4.18,4.65,0.72,"FOLLOW-UP SCHEDULE");
s.addText("Review every 4–8 weeks to assess treatment response and adverse effects.",{
x:5.25,y:4.56,w:4.4,h:0.3, fontSize:SMALL+0.5,color:TEXT_M
});
// PASI target bar
s.addShape(prs.ShapeType.rect,{ x:0.25,y:5.0,w:9.5,h:0.4, fill:{ color:DARK } });
s.addText("TARGET: PASI-75 by Week 16 | PASI-90 by Month 6 | Sustained PASI-90 for long-term maintenance",{
x:0.4,y:5.0,w:9.1,h:0.4, fontSize:10,bold:true,color:WHITE,align:"center",valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 16 – PATIENT COUNSELLING PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PATIENT COUNSELLING","Part 1 – Disease Education & Medication");
footer(s,16,"Patient Counselling – Part 1");
// Disease education
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.95, fill:{ color:LIGHT }, line:{ color:MID,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.36, fill:{ color:MID } });
s.addText("DISEASE EDUCATION",{ x:0.4,y:1.18,w:9.1,h:0.36, fontSize:SMALL,bold:true,color:WHITE,charSpacing:2,valign:"middle",margin:0 });
["Psoriasis is a long-term autoimmune skin disease — it is NOT contagious.",
"Treatment controls symptoms and prevents flare-ups; it does not permanently cure the disease."
].forEach((e,i)=>{
s.addText("• "+e,{ x:0.4,y:1.58+i*0.3,w:9.1,h:0.28, fontSize:SMALL+0.5,color:TEXT_M });
});
// Medication cards
const meds=[
{ name:"Cyclosporine", shade:DARK,
points:["Take regularly as prescribed","Avoid grapefruit juice (↑ drug levels)","Report reduced urine output or swelling","Monitor blood pressure at home regularly"] },
{ name:"Secukinumab (Biologic)", shade:MID,
points:["Store injection in refrigerator (2–8°C)","Rotate injection site each time","Report fever, cough, or signs of infection","Do not miss doses — follow schedule strictly"] },
];
meds.forEach((m,i)=>{
const x=0.25+i*4.9;
s.addShape(prs.ShapeType.rect,{ x,y:2.28,w:4.65,h:2.85, fill:{ color:LIGHT }, line:{ color:m.shade,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y:2.28,w:4.65,h:0.42, fill:{ color:m.shade } });
s.addText(m.name,{ x:x+0.12,y:2.28,w:4.4,h:0.42, fontSize:11,bold:true,color:WHITE,valign:"middle",margin:0 });
m.points.forEach((p,pi)=>{
s.addText("→ "+p,{ x:x+0.15,y:2.74+pi*0.56,w:4.35,h:0.52, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 17 – PATIENT COUNSELLING PART 2 + THANK YOU
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PATIENT COUNSELLING","Part 2 – Topical Steroids & Lifestyle");
footer(s,17,"Patient Counselling – Part 2");
// Topical steroids
card(s,0.25,1.18,4.65,2.0,"TOPICAL STEROIDS");
["Apply only a thin layer to affected areas",
"Do not use longer than prescribed",
"Wash hands after applying medication",
"Do not apply to face unless specifically directed"
].forEach((p,i)=>{
s.addText("→ "+p,{ x:0.4,y:1.62+i*0.37,w:4.4,h:0.34, fontSize:SMALL+0.5,color:TEXT_M });
});
// Lifestyle card
s.addShape(prs.ShapeType.rect,{ x:0.25,y:3.32,w:4.65,h:1.82, fill:{ color:LIGHT }, line:{ color:MID,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:3.32,w:4.65,h:0.42, fill:{ color:MID } });
s.addText("LIFESTYLE COUNSELLING",{ x:0.4,y:3.32,w:4.4,h:0.42, fontSize:11,bold:true,color:WHITE,valign:"middle",margin:0 });
["Use moisturizers daily to keep skin hydrated",
"Avoid scratching the lesions",
"Manage stress through relaxation techniques and adequate sleep",
"Stop smoking and limit alcohol intake"
].forEach((p,i)=>{
s.addText("✓ "+p,{ x:0.4,y:3.78+i*0.34,w:4.4,h:0.31, fontSize:SMALL+0.5,color:TEXT_M });
});
// Thank you panel
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:3.96, fill:{ color:DARK }, line:{ color:MID,width:2 } });
// decorative circle
s.addShape(prs.ShapeType.ellipse,{ x:5.5,y:0.9,w:3.2,h:3.2, fill:{ color:MID,transparency:88 } });
s.addText("Thank You",{ x:5.2,y:1.55,w:4.4,h:0.9, fontSize:34,bold:true,color:WHITE,align:"center" });
s.addShape(prs.ShapeType.line,{ x:5.65,y:2.52,w:3.4,h:0, line:{ color:MID,width:2 } });
s.addText("Questions & Discussion",{ x:5.2,y:2.6,w:4.4,h:0.42, fontSize:14,color:LIGHT,align:"center",italic:true });
// Summary box
s.addShape(prs.ShapeType.rect,{ x:5.28,y:3.15,w:4.3,h:1.6, fill:{ color:"072435" }, line:{ color:MID,width:1 } });
s.addText("CASE SUMMARY",{ x:5.4,y:3.2,w:4.0,h:0.28, fontSize:SMALL,bold:true,color:LIGHT,charSpacing:3,align:"center" });
s.addText(
"50M · Severe Plaque Psoriasis\n27-yr refractory disease\nRec: Secukinumab + Cyclosporine bridge\n+ Topicals + Cetirizine + Emollients",
{ x:5.4,y:3.52,w:4.0,h:1.16, fontSize:SMALL+0.5,color:WHITE,align:"center" }
);
}
// ─── WRITE ────────────────────────────────────────────────────────
prs.writeFile({ fileName:"/home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Monochrome_Teal.pptx" })
.then(()=>console.log("SUCCESS"))
.catch(e=>{ console.error("ERROR:",e); process.exit(1); });
cd /home/daytona/workspace/plaque-psoriasis-ppt && node build_mono.js 2>&1
ls -lh /home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Monochrome_…
Plaque Psoriasis Monochrome Teal
Presentation · PPTX
| Shade | Hex | Used for |
|---|---|---|
Dark Teal ■ | #0B4F6C | Header bars, primary cards, table titles, DTP odd cards |
Mid Teal ■ | #1A8A9B | Divider strips, sub-cards, table sub-headers, even cards |
Pale Teal ■ | #D6F0F4 | Slide backgrounds, card fills, alt table rows, chips |
Provide
~/plaque-psoriasis-ppt/build_blue.js
const pptxgen = require("pptxgenjs");
const prs = new pptxgen();
prs.layout = "LAYOUT_16x9";
prs.title = "Plaque Psoriasis Case Study";
prs.author = "Ganavi C";
// ─── THREE SHADES OF BLUE / INDIGO ────────────────────────────────
const DARK = "1A237E"; // deep indigo – headers, primary strips
const MID = "3F51B5"; // mid blue – cards, bands, chips
const LIGHT = "E8EAF6"; // pale lavender-blue – backgrounds, alt rows
const WHITE = "FFFFFF";
const TEXT_D = "1A237E"; // deep indigo for bold text
const TEXT_M = "283593"; // mid-dark indigo for body text
// Font sizes
const HEAD = 28;
const SUB = 24;
const BODY = 11;
const SMALL = 9.5;
// ─── HELPERS ──────────────────────────────────────────────────────
function bgLight(slide) {
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color:WHITE } });
}
function titleBar(slide, headline, sub) {
slide.addShape(prs.ShapeType.rect, { x:0, y:0, w:10, h:1.05, fill:{ color:DARK } });
slide.addShape(prs.ShapeType.rect, { x:0, y:1.05, w:10, h:0.06, fill:{ color:MID } });
slide.addText(headline, {
x:0.35, y:0.04, w:9.3, h:0.62,
fontSize:HEAD, bold:true, color:WHITE, valign:"bottom", margin:0
});
if (sub) {
slide.addText(sub, {
x:0.35, y:0.66, w:9.3, h:0.36,
fontSize:SUB, color:LIGHT, valign:"top", italic:true, margin:0
});
}
}
function footer(slide, num, label) {
slide.addShape(prs.ShapeType.rect, { x:0, y:5.43, w:10, h:0.195, fill:{ color:DARK } });
slide.addText(`Slide ${num} · ${label}`, {
x:0.2, y:5.43, w:5, h:0.195, fontSize:7.5, color:LIGHT, valign:"middle", margin:0
});
slide.addText("Plaque Psoriasis Case · Ganavi C · V Pharm D · 21Q0275", {
x:5, y:5.43, w:4.8, h:0.195, fontSize:7.5, color:LIGHT, align:"right", valign:"middle", margin:0
});
}
function card(slide, x, y, w, h, title, hdrShade) {
const hdr = hdrShade || MID;
slide.addShape(prs.ShapeType.rect, {
x, y, w, h, fill:{ color:LIGHT }, line:{ color:hdr, width:1 }
});
if (title) {
slide.addShape(prs.ShapeType.rect, { x, y, w, h:0.38, fill:{ color:hdr } });
slide.addText(title, {
x:x+0.12, y, w:w-0.2, h:0.38,
fontSize:SMALL+1, bold:true, color:WHITE, valign:"middle", charSpacing:1, margin:0
});
}
}
function labTable(slide, x, y, w, title, rows) {
const HDR_H = 0.36, COL_H = 0.38;
const cw = [w*0.44, w*0.28, w*0.28];
slide.addShape(prs.ShapeType.rect, { x, y, w, h:HDR_H, fill:{ color:DARK } });
slide.addText(title, { x:x+0.1, y, w:w-0.15, h:HDR_H, fontSize:SMALL+1, bold:true, color:WHITE, valign:"middle", margin:0 });
const sy = y + HDR_H;
slide.addShape(prs.ShapeType.rect, { x, y:sy, w, h:HDR_H, fill:{ color:MID } });
let cx = x;
["Parameter","Result","Normal Range"].forEach((h,ci)=>{
slide.addText(h, { x:cx+0.06, y:sy, w:cw[ci]-0.06, h:HDR_H, fontSize:SMALL, bold:true, color:WHITE, valign:"middle", margin:0 });
cx += cw[ci];
});
rows.forEach((row,ri)=>{
const ry = sy + HDR_H + ri*COL_H;
const fill = ri%2===0 ? WHITE : LIGHT;
slide.addShape(prs.ShapeType.rect, { x, y:ry, w, h:COL_H, fill:{ color:fill }, line:{ color:LIGHT, width:0.5 } });
let rcx = x;
row.slice(0,3).forEach((cell,ci)=>{
const isLow = row[3]==="L" || (typeof cell==="string" && cell.toLowerCase().includes("low"));
const tc = ci===0 ? TEXT_D : (ci===1 && isLow) ? MID : TEXT_M;
slide.addText(cell, { x:rcx+0.06, y:ry, w:cw[ci]-0.06, h:COL_H, fontSize:SMALL, bold:ci===0, color:tc, valign:"middle", margin:0 });
rcx += cw[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide();
s.addShape(prs.ShapeType.rect, { x:0,y:0,w:10,h:5.625, fill:{ color:WHITE } });
// Left panel – deep indigo
s.addShape(prs.ShapeType.rect, { x:0,y:0,w:3.8,h:5.625, fill:{ color:DARK } });
// Divider – mid blue
s.addShape(prs.ShapeType.rect, { x:3.8,y:0,w:0.07,h:5.625, fill:{ color:MID } });
// Decorative circles
s.addShape(prs.ShapeType.ellipse, { x:-1.1,y:-1.0,w:4.2,h:4.2, fill:{ color:MID, transparency:82 } });
s.addShape(prs.ShapeType.ellipse, { x:0.4,y:3.85,w:2.8,h:2.8, fill:{ color:LIGHT, transparency:68 } });
// Left panel
s.addText("CASE\nSTUDY", {
x:0.15,y:0.5,w:3.5,h:1.5, fontSize:36,bold:true,color:WHITE,align:"center",charSpacing:7
});
s.addShape(prs.ShapeType.line, { x:0.55,y:2.1,w:2.6,h:0, line:{ color:MID,width:2 } });
s.addText("Dermatology &\nClinical Pharmacy", {
x:0.15,y:2.23,w:3.5,h:0.7, fontSize:13,color:LIGHT,align:"center",italic:true
});
// Presenter box
s.addShape(prs.ShapeType.rect, { x:0.28,y:3.3,w:3.2,h:1.65, fill:{ color:"0D1454" }, line:{ color:MID,width:1 } });
s.addText("PRESENTED BY", { x:0.38,y:3.37,w:3.0,h:0.28, fontSize:8,bold:true,color:LIGHT,align:"center",charSpacing:3,margin:0 });
s.addText([
{ text:"Ganavi C\n", options:{ bold:true, fontSize:15 } },
{ text:"V Pharm D\n", options:{ fontSize:12 } },
{ text:"Reg No: 21Q0275", options:{ fontSize:10, color:LIGHT } }
], { x:0.38,y:3.68,w:3.0,h:1.05, color:WHITE, align:"center" });
// Right – main title
s.addText("Plaque Psoriasis", { x:4.1,y:0.58,w:5.65,h:1.05, fontSize:HEAD+10,bold:true,color:DARK });
s.addText("Clinical Case Study", { x:4.1,y:1.65,w:5.65,h:0.52, fontSize:SUB,color:MID,italic:true });
s.addShape(prs.ShapeType.line, { x:4.1,y:2.25,w:5.2,h:0, line:{ color:MID,width:2 } });
// Tags – dark / mid alternating
const tags = [
{ t:"Severe", fill:DARK },
{ t:"Chronic", fill:MID },
{ t:"Uncontrolled", fill:DARK },
{ t:"Biologic Candidate", fill:MID },
];
tags.forEach((tg,i)=>{
s.addShape(prs.ShapeType.roundRect, { x:4.1+i*1.42,y:2.38,w:1.34,h:0.33, fill:{ color:tg.fill }, rectRadius:0.05 });
s.addText(tg.t, { x:4.1+i*1.42,y:2.38,w:1.34,h:0.33, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
});
s.addText(
"A 50-year-old male with a 27-year history of plaque psoriasis\npresenting with severe, uncontrolled disease despite multiple lines of therapy.",
{ x:4.1,y:2.85,w:5.65,h:0.8, fontSize:10.5,color:TEXT_M,italic:true }
);
// Bottom bar – pale
s.addShape(prs.ShapeType.rect, { x:0,y:5.43,w:10,h:0.195, fill:{ color:LIGHT } });
s.addText("V Pharm D · Clinical Pharmacy Case Presentation · 2024", {
x:0,y:5.43,w:10,h:0.195, fontSize:8.5,color:DARK,align:"center",valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 2 – PATIENT PROFILE
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"SUBJECTIVE DATA","Patient Profile");
footer(s,2,"Subjective Data – Patient Profile");
card(s,0.25,1.18,4.55,3.35,"PATIENT INFORMATION",DARK);
const patRows=[["Age","50 years"],["Gender","Male"],["Occupation","Elementary School Teacher"],["Weight","75 kg"],["Height","5'9\""],["Allergies","NKA"]];
patRows.forEach(([k,v],i)=>{
const ry=1.6+i*0.47;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:4.55,h:0.44, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:0.38,y:ry,w:1.85,h:0.44, fontSize:SMALL+0.5,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:2.25,y:ry,w:2.42,h:0.44, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle",margin:0 });
});
// Chief complaint
s.addShape(prs.ShapeType.rect,{ x:5.05,y:1.18,w:4.7,h:1.12, fill:{ color:LIGHT }, line:{ color:DARK,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:5.05,y:1.18,w:4.7,h:0.36, fill:{ color:DARK } });
s.addText("CHIEF COMPLAINT",{ x:5.18,y:1.18,w:4.4,h:0.36, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",charSpacing:2,margin:0 });
s.addText('"Nothing is helping my psoriasis."',{ x:5.18,y:1.57,w:4.4,h:0.68, fontSize:13.5,color:DARK,italic:true,valign:"middle" });
card(s,5.05,2.44,4.7,2.09,"CLINICAL NOTE",MID);
s.addText(
"Subjective data emphasizes significant mental burden and clinical therapeutic non-response to conventional treatment routes.\n\nPatient presents with clear frustration after years of escalating treatment without adequate disease control.",
{ x:5.18,y:2.87,w:4.45,h:1.6, fontSize:SMALL+0.5,color:TEXT_M }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 3 – HPI PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"HISTORY OF PRESENT ILLNESS","27-Year Treatment Chronology – Part 1");
footer(s,3,"HPI – Treatment Timeline Part 1");
s.addText("Chronological course of medical interventions since early diagnosis:",{ x:0.3,y:1.18,w:9.4,h:0.28, fontSize:SMALL+1,color:TEXT_M,italic:true });
const events=[
{ label:"Initial Diagnosis", age:"Age 23", hdr:DARK, bg:LIGHT,
text:"Plaque psoriasis diagnosed. Good initial control with medium-potency topical corticosteroids." },
{ label:"Combination Course", age:"Mid-course", hdr:MID, bg:WHITE,
text:"Calcipotriol therapy added when topical corticosteroids alone became insufficient." },
{ label:"Phototherapy Run", age:"Disease progression",hdr:DARK, bg:LIGHT,
text:"PUVA (Psoralen + UVA) phototherapy initiated — provided temporary improvement." },
{ label:"Efficacy Loss", age:"Later", hdr:MID, bg:WHITE,
text:"PUVA gradually lost effectiveness, resulting in inadequate control and recurrent lesions." },
];
events.forEach((e,i)=>{
const x=0.25+(i%2)*4.9, y=i<2?1.58:3.2;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:1.48, fill:{ color:e.bg }, line:{ color:e.hdr,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.42, fill:{ color:e.hdr } });
s.addText(e.label,{ x:x+0.12,y,w:3.1,h:0.42, fontSize:SMALL+1.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(e.age, { x:x+3.2, y,w:1.28,h:0.42, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
s.addText(e.text,{ x:x+0.12,y:y+0.48,w:4.35,h:0.96, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 4 – HPI PART 2
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"HISTORY OF PRESENT ILLNESS","27-Year Treatment Chronology – Part 2");
footer(s,4,"HPI – Treatment Timeline Part 2");
const events=[
{ label:"Systemic Methotrexate Escalation", hdr:DARK, bg:LIGHT,
left:"Frequent flare-ups despite increasing MTX doses — SCAT used for acute exacerbations.",
right:"MTX escalated to 25 mg/week. Cumulative lifetime dose reached 2.2 g." },
{ label:"Switch: Cyclosporine + Acitretin", hdr:MID, bg:WHITE,
left:"Treatment changed to cyclosporine 75 mg twice daily + acitretin 25 mg daily.",
right:"Acitretin discontinued due to severe xerosis (drug-induced dry skin)." },
{ label:"Current Presentation — 3rd Severe Flare", hdr:DARK, bg:LIGHT,
left:"Cyclosporine alone provided good control for 1 year after acitretin was stopped.",
right:"Two severe flares in past 6 months. Current = 3rd and most severe presentation." },
];
events.forEach((e,i)=>{
const y=1.22+i*1.35;
s.addShape(prs.ShapeType.rect,{ x:0.25,y,w:9.5,h:1.22, fill:{ color:e.bg }, line:{ color:e.hdr,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y,w:9.5,h:0.4, fill:{ color:e.hdr } });
s.addText(`${i+1}. ${e.label}`,{ x:0.4,y,w:9.1,h:0.4, fontSize:11,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("• "+e.left, { x:0.4, y:y+0.44,w:4.55,h:0.73, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
s.addText("• "+e.right,{ x:5.1, y:y+0.44,w:4.5, h:0.73, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 5 – HISTORY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"MEDICAL, FAMILY & SOCIAL HISTORY","Background & Risk Factors");
footer(s,5,"Medical / Family / Social History");
card(s,0.25,1.18,4.55,2.4,"MEDICAL & FAMILY HISTORY",DARK);
[["PMH","Major depressive episode — 16 years ago"],["Brother","Has psoriasis"],["Father","Hypertension + Type 2 Diabetes"]].forEach(([k,v],i)=>{
const ry=1.62+i*0.6;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:4.55,h:0.56, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:0.38,y:ry,w:1.1,h:0.56, fontSize:SMALL,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:1.5,y:ry,w:3.15,h:0.56, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
card(s,5.05,1.18,4.7,2.4,"SOCIAL PROFILE & TRIGGERS",MID);
[["Smoking","Former heavy smoker"],["Alcohol","One glass of wine daily"],["Stress","Increased occupational stress"],["Family","Married with children"]].forEach(([k,v],i)=>{
const ry=1.62+i*0.48;
s.addShape(prs.ShapeType.rect,{ x:5.05,y:ry,w:4.7,h:0.44, fill:{ color:i%2===0?WHITE:LIGHT } });
s.addText(k,{ x:5.18,y:ry,w:1.2,h:0.44, fontSize:SMALL,bold:true,color:DARK,valign:"middle",margin:0 });
s.addText(v,{ x:6.4,y:ry, w:3.2,h:0.44, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
card(s,0.25,3.72,4.55,0.95,"ALLERGIES & TOLERABILITY",DARK);
s.addText("NKA — No Known Allergies",{ x:0.4,y:4.14,w:4.3,h:0.28, fontSize:SMALL+1,bold:true,color:DARK });
s.addText("Drug intolerance: Acitretin — severe xerosis confirmed",{ x:0.4,y:4.42,w:4.3,h:0.22, fontSize:SMALL,color:TEXT_M });
card(s,5.05,3.72,4.7,0.95,"RISK AMPLIFIERS",MID);
s.addText("Smoking, alcohol, and occupational stress are established psoriasis flare triggers and may contribute to treatment resistance.",{
x:5.18,y:4.12,w:4.45,h:0.5, fontSize:SMALL+0.5,color:TEXT_M
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 6 – OBJECTIVE DATA
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"OBJECTIVE DATA","Vital Signs & Physical Examination");
footer(s,6,"Objective Data – Vitals & Skin Exam");
const vitals=[
{ label:"BLOOD PRESSURE",val:"129/83",unit:"mmHg", col:DARK },
{ label:"PULSE RATE", val:"88", unit:"bpm", col:MID },
{ label:"TEMPERATURE", val:"37°C", unit:"Normal", col:DARK },
{ label:"APPEARANCE", val:"Alert", unit:"Mild anxiety",col:MID },
];
vitals.forEach((v,i)=>{
const x=0.25+i*2.42;
s.addShape(prs.ShapeType.rect,{ x,y:1.18,w:2.3,h:1.25, fill:{ color:LIGHT }, line:{ color:v.col,width:2 } });
s.addShape(prs.ShapeType.rect,{ x,y:1.18,w:2.3,h:0.36, fill:{ color:v.col } });
s.addText(v.label,{ x:x+0.07,y:1.18,w:2.16,h:0.36, fontSize:7.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(v.val, { x:x+0.07,y:1.56,w:2.16,h:0.52, fontSize:22,bold:true,color:v.col,align:"center" });
s.addText(v.unit, { x:x+0.07,y:2.09,w:2.16,h:0.3, fontSize:SMALL,color:TEXT_M,align:"center" });
});
s.addShape(prs.ShapeType.rect,{ x:0.25,y:2.57,w:9.5,h:2.62, fill:{ color:LIGHT }, line:{ color:DARK,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:2.57,w:9.5,h:0.42, fill:{ color:DARK } });
s.addText("SKIN EXAMINATION — Severe Plaque Psoriasis",{ x:0.4,y:2.57,w:9.15,h:0.42, fontSize:11,bold:true,color:WHITE,valign:"middle",charSpacing:1,margin:0 });
const locs=["Abdomen","Arms","Legs","Back","Scalp","Palms","Soles","Elbows","Knees"];
s.addText("Locations:",{ x:0.4,y:3.06,w:1.3,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
locs.forEach((loc,i)=>{
const lx=1.65+i*0.86;
s.addShape(prs.ShapeType.roundRect,{ x:lx,y:3.06,w:0.8,h:0.28, fill:{ color:MID }, rectRadius:0.04 });
s.addText(loc,{ x:lx,y:3.06,w:0.8,h:0.28, fontSize:7.5,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
});
s.addText("Visual Profile:", { x:0.4,y:3.44,w:1.6,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Thick plaques · Erythematous lesions · Well-demarcated borders · Confluent lesions",{ x:1.95,y:3.44,w:7.55,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0 });
s.addText("Secondary Signs:", { x:0.4,y:3.78,w:1.8,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Silvery-white scales · Excoriations due to scratching",{ x:2.2,y:3.78,w:7.3,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0 });
s.addText("General Status:", { x:0.4,y:4.12,w:1.8,h:0.28, fontSize:SMALL,bold:true,color:DARK,margin:0 });
s.addText("Alert, oriented · Mild anxiety noted",{ x:2.2,y:4.12,w:7.3,h:0.28, fontSize:SMALL+0.5,color:TEXT_M,margin:0 });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 7 – LAB: CBC & RENAL
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Complete Blood Count & Renal Panel");
footer(s,7,"Lab Data – CBC & Renal");
labTable(s,0.25,1.18,9.5,"COMPLETE BLOOD COUNT (CBC)",[
["Hemoglobin (Hb)", "13.5 g/dL", "13.5–17.5 g/dL","N"],
["Hematocrit (Hct)", "35% (Mildly Low)", "40–52%", "L"],
["WBC", "6.0 ×10³/mm³", "4–11 ×10³/mm³", "N"],
["Platelets", "255 ×10³/mm³", "150–400 ×10³/mm³","N"],
]);
labTable(s,0.25,3.72,9.5,"RENAL FUNCTION TEST (RFT)",[
["Blood Urea Nitrogen (BUN)","14 mg/dL","7–20 mg/dL", "N"],
["Creatinine (SCr)", "1.0 mg/dL","0.6–1.3 mg/dL","N"],
]);
s.addShape(prs.ShapeType.rect,{ x:0.25,y:5.17,w:9.5,h:0.25, fill:{ color:LIGHT }, line:{ color:MID,width:0.75 } });
s.addText("⚠ Hematocrit (35%) is mildly below normal (40–52%) — monitor for mild anemia.",{ x:0.4,y:5.17,w:9.2,h:0.25, fontSize:8.5,color:DARK,valign:"middle",margin:0 });
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 8 – LAB: LFT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Liver Function Profile");
footer(s,8,"Lab Data – Liver Function");
labTable(s,0.25,1.18,9.5,"LIVER FUNCTION TEST (LFT)",[
["AST (SGOT)", "22 IU/L", "10–40 IU/L", "N"],
["ALT (SGPT)", "38 IU/L", "7–56 IU/L", "N"],
["Alkaline Phosphatase (ALP)","98 IU/L", "44–147 IU/L", "N"],
["Total Bilirubin", "1.0 mg/dL","0.1–1.2 mg/dL","N"],
["Albumin", "3.7 g/dL", "3.5–5.0 g/dL", "N"],
]);
card(s,0.25,4.1,9.5,1.02,"CLINICAL INTERPRETATION",MID);
s.addText(
"All liver function parameters are within normal limits — clinically significant given the patient's history of methotrexate use (cumulative dose 2.2 g). Normal LFTs support safe transition to biologic therapy (Secukinumab).",
{ x:0.4,y:4.52,w:9.2,h:0.55, fontSize:SMALL+0.5,color:TEXT_M }
);
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 9 – LAB: ELECTROLYTES & CHEMISTRY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"LABORATORY DATA","Electrolytes & Chemistry Panel");
footer(s,9,"Lab Data – Electrolytes & Chemistry");
labTable(s,0.25,1.18,9.5,"ELECTROLYTES & CHEMISTRY",[
["Sodium (Na⁺)", "139 mEq/L","135–145 mEq/L","N"],
["Potassium (K⁺)", "4.0 mEq/L","3.5–5.0 mEq/L","N"],
["Chloride (Cl⁻)", "102 mEq/L","98–106 mEq/L", "N"],
["Bicarbonate (HCO₃⁻/CO₂)","25 mEq/L", "22–28 mEq/L", "N"],
["Uric Acid", "4 mg/dL", "3.5–7.2 mg/dL","N"],
["Total Cholesterol", "180 mg/dL","<200 mg/dL", "N"],
["Blood Glucose", "98 mg/dL", "70–110 mg/dL", "N"],
]);
card(s,0.25,4.9,9.5,0.68,"CYCLOSPORINE SAFETY NOTE",DARK);
s.addText("Potassium and renal parameters are within normal limits — important for cyclosporine safety monitoring (hyperkalemia and nephrotoxicity risk).",{
x:0.4,y:5.18,w:9.2,h:0.35, fontSize:SMALL+0.5,color:TEXT_M
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 10 – ASSESSMENT: DIAGNOSIS & SEVERITY
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"ASSESSMENT","Diagnosis & Severity Profile");
footer(s,10,"Assessment – Diagnosis & Severity");
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.62, fill:{ color:DARK } });
s.addText("PRIMARY DIAGNOSIS",{ x:0.42,y:1.2,w:2.8,h:0.28, fontSize:SMALL,bold:true,color:LIGHT,charSpacing:2,margin:0 });
s.addText("Severe Chronic Plaque Psoriasis (Uncontrolled)",{ x:0.42,y:1.46,w:9.0,h:0.3, fontSize:14,bold:true,color:WHITE,margin:0 });
const metrics=[
{ label:"BSA Involvement", val:">20%", sub:"Severe threshold: >10%", shade:DARK },
{ label:"Estimated PASI", val:">20", sub:"Severe disease index", shade:MID },
{ label:"Disease Duration",val:"27 yrs", sub:"Chronic, refractory", shade:DARK },
];
metrics.forEach((m,i)=>{
const x=0.25+i*3.25;
s.addShape(prs.ShapeType.rect,{ x,y:1.95,w:3.1,h:1.25, fill:{ color:LIGHT }, line:{ color:m.shade,width:2 } });
s.addText(m.label,{ x:x+0.1,y:1.98,w:2.9,h:0.3, fontSize:SMALL,bold:true,color:m.shade,margin:0 });
s.addText(m.val, { x:x+0.1,y:2.26,w:2.9,h:0.6, fontSize:28,bold:true,color:m.shade,align:"center" });
s.addText(m.sub, { x:x+0.1,y:2.86,w:2.9,h:0.28, fontSize:SMALL-0.5,color:TEXT_M,align:"center" });
});
card(s,0.25,3.34,4.65,1.82,"CLINICAL EVIDENCE",DARK);
["Erythematous plaques with silvery scales","Extensive body involvement","Long-standing disease (27 years)","Positive family history of psoriasis"].forEach((e,i)=>{
s.addText("✓ "+e,{ x:0.4,y:3.76+i*0.35,w:4.35,h:0.32, fontSize:SMALL+0.5,color:TEXT_M });
});
card(s,5.1,3.34,4.65,1.82,"SEVERITY BENCHMARKS",MID);
["BSA Involvement: >20%","Areas: Scalp, Arms, Legs, Abdomen, Back, Palms, Soles","Severity: Severe (>10% BSA)","PASI Score: >20 (Severe disease index)"].forEach((e,i)=>{
s.addText("• "+e,{ x:5.25,y:3.76+i*0.35,w:4.35,h:0.32, fontSize:SMALL+0.5,color:TEXT_M });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 11 – ASSESSMENT: DTPS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"ASSESSMENT","Drug Therapy Problems (DTPs)");
footer(s,11,"Assessment – Drug Therapy Problems");
const dtps=[
{ num:"DTP 1",title:"Refractory Uncontrolled Status", shade:DARK, text:"Uncontrolled severe plaque psoriasis despite active cyclosporine therapy." },
{ num:"DTP 2",title:"Subtherapeutic Efficacy", shade:MID, text:"Inadequate physiological response to current cyclosporine dosing regimen." },
{ num:"DTP 3",title:"Historical Treatment Failures", shade:DARK, text:"Previous failures: topical therapy, PUVA phototherapy, and methotrexate." },
{ num:"DTP 4",title:"Adverse Event Intolerance", shade:MID, text:"Oral acitretin intolerance due to secondary severe xerosis (dry skin)." },
{ num:"DTP 5",title:"Severe Pruritus Burden", shade:DARK, text:"Severe pruritus causing chronic scratching and skin excoriations." },
{ num:"DTP 6",title:"Psychosocial Exacerbation", shade:MID, text:"Occupational stress contributing to disease flare-ups and worsening." },
];
dtps.forEach((d,i)=>{
const x=0.25+(i%2)*4.9, y=1.18+Math.floor(i/2)*1.38;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:1.26, fill:{ color:LIGHT }, line:{ color:d.shade,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.42, fill:{ color:d.shade } });
s.addText(d.num, { x:x+0.1, y,w:0.75,h:0.42, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(d.title,{ x:x+0.85,y,w:3.65,h:0.42, fontSize:SMALL+0.5,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText(d.text, { x:x+0.12,y:y+0.48,w:4.35,h:0.72, fontSize:SMALL+0.5,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 12 – PLANNING: GOALS
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PLANNING","Goals of Therapy");
footer(s,12,"Planning – Goals of Therapy");
// Short-term
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:4.65,h:3.35, fill:{ color:LIGHT }, line:{ color:DARK,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:4.65,h:0.45, fill:{ color:DARK } });
s.addText("SHORT-TERM GOALS",{ x:0.4,y:1.18,w:3.2,h:0.45, fontSize:SUB-8,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("4–8 Weeks", { x:3.6,y:1.18,w:1.2,h:0.45, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
["Reduce erythema (redness)","Reduce scaling","Relieve itching (pruritus)","Stop disease progression","Improve sleep and comfort"].forEach((g,i)=>{
s.addShape(prs.ShapeType.ellipse,{ x:0.4,y:1.72+i*0.52,w:0.26,h:0.26, fill:{ color:DARK } });
s.addText(`${i+1}`,{ x:0.4,y:1.72+i*0.52,w:0.26,h:0.26, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
s.addText(g,{ x:0.76,y:1.68+i*0.52,w:4.0,h:0.4, fontSize:11,color:TEXT_M,valign:"middle" });
});
// Long-term
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:3.35, fill:{ color:LIGHT }, line:{ color:MID,width:2 } });
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:0.45, fill:{ color:MID } });
s.addText("LONG-TERM GOALS",{ x:5.25,y:1.18,w:3.2,h:0.45, fontSize:SUB-8,bold:true,color:WHITE,valign:"middle",margin:0 });
s.addText("3–6 Months", { x:8.45,y:1.18,w:1.2,h:0.45, fontSize:SMALL,color:LIGHT,align:"right",valign:"middle",margin:0 });
["Achieve PASI-75 or PASI-90 response","Prevent future flare-ups","Improve quality of life","Maintain long-term disease control","Minimize treatment-related toxicity"].forEach((g,i)=>{
s.addShape(prs.ShapeType.ellipse,{ x:5.27,y:1.72+i*0.52,w:0.26,h:0.26, fill:{ color:MID } });
s.addText(`${i+1}`,{ x:5.27,y:1.72+i*0.52,w:0.26,h:0.26, fontSize:8,bold:true,color:WHITE,align:"center",valign:"middle",margin:0 });
s.addText(g,{ x:5.63,y:1.68+i*0.52,w:4.0,h:0.4, fontSize:11,color:TEXT_M,valign:"middle" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 13 – NON-PHARMACOLOGICAL
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"NON-PHARMACOLOGICAL MANAGEMENT","Lifestyle & Supportive Interventions");
footer(s,13,"Non-Pharmacological Management");
const items=[
{ title:"Regular Moisturization", shade:DARK, text:"Apply emollients (petroleum jelly, paraffin, ceramide creams) 3–4 times daily to reduce dryness, scaling, and itching." },
{ title:"Proper Skin Care", shade:MID, text:"Lukewarm water for bathing; avoid hot showers and harsh soaps; pat dry and apply moisturizer immediately after." },
{ title:"Stress Management", shade:DARK, text:"Practice yoga, meditation, deep breathing, and ensure adequate sleep to reduce flare triggers." },
{ title:"Avoid Skin Trauma", shade:MID, text:"Avoid scratching, rubbing, and tight clothing to prevent the Koebner phenomenon." },
{ title:"Lifestyle Modification", shade:DARK, text:"Stop smoking, limit alcohol consumption, and maintain a healthy body weight." },
{ title:"Regular Exercise", shade:MID, text:"Moderate physical activity to improve overall health and reduce psychological stress." },
{ title:"Avoid Triggers", shade:DARK, text:"Avoid stress, skin injury, infections, and medications that may worsen psoriasis symptoms." },
{ title:"Patient Education", shade:MID, text:"Psoriasis is a chronic, non-contagious disease requiring long-term management and treatment adherence." },
];
items.forEach((item,i)=>{
const x=0.25+(i%2)*4.9, y=1.18+Math.floor(i/2)*1.04;
s.addShape(prs.ShapeType.rect,{ x,y,w:4.6,h:0.96, fill:{ color:LIGHT }, line:{ color:item.shade,width:1 } });
s.addShape(prs.ShapeType.rect,{ x,y,w:0.08,h:0.96, fill:{ color:item.shade } });
s.addText(item.title,{ x:x+0.16,y:y+0.04,w:4.3,h:0.3, fontSize:SMALL+1,bold:true,color:item.shade,margin:0 });
s.addText(item.text, { x:x+0.16,y:y+0.37,w:4.3,h:0.56, fontSize:SMALL,color:TEXT_M,valign:"top" });
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 14 – PHARMACOLOGICAL TREATMENT
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PHARMACOLOGICAL TREATMENT REGIMEN","Drug Therapy Plan");
footer(s,14,"Pharmacological Treatment Regimen");
const rxData=[
["Inj. Secukinumab", "300 mg","SC", "Wks 0,1,2,3,4 → q4w", "Long-term maintenance"],
["Tab. Cyclosporine", "75 mg", "PO", "Twice daily", "4–8 wks → taper after biologic response"],
["Clobetasol Propionate 0.05% Oint.","–", "Topical","Twice daily", "2–4 weeks"],
["Clobetasol 0.05% Scalp Solution", "–", "Topical","Once daily", "2–4 weeks"],
["Calcipotriol 0.005% Ointment", "–", "Topical","Twice daily", "Long-term maintenance"],
["Tab. Cetirizine", "10 mg", "PO", "Once daily (bedtime)", "2–4 wks or until resolved"],
["Emollients / Moisturizers", "–", "Topical","3–4 times daily", "Continuous / Long-term"],
];
const cols=["DRUG","DOSE","ROA","FREQUENCY","DURATION"];
const cw=[2.7,0.7,0.6,2.4,3.1];
let cx=0.25;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.42, fill:{ color:DARK } });
cols.forEach((c,ci)=>{
s.addText(c,{ x:cx+0.06,y:1.18,w:cw[ci]-0.06,h:0.42, fontSize:SMALL,bold:true,color:WHITE,valign:"middle",margin:0 });
cx+=cw[ci];
});
rxData.forEach((row,ri)=>{
const ry=1.6+ri*0.54;
const leftShade = ri%2===0 ? DARK : MID;
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:9.5,h:0.52, fill:{ color:ri%2===0?WHITE:LIGHT }, line:{ color:LIGHT,width:0.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:ry,w:0.05,h:0.52, fill:{ color:leftShade } });
let rcx=0.25;
row.forEach((cell,ci)=>{
s.addText(cell,{ x:rcx+0.08,y:ry,w:cw[ci]-0.08,h:0.52, fontSize:SMALL,bold:ci===0,color:ci===0?DARK:TEXT_M,valign:"middle",margin:0 });
rcx+=cw[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 15 – MONITORING
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"CLINICAL MONITORING FRAMEWORK","Efficacy & Safety Parameters");
footer(s,15,"Clinical Monitoring Framework");
card(s,0.25,1.18,4.65,2.72,"EFFICACY MONITORING",DARK);
["Reduction in redness (erythema)","Reduction in scaling","Reduction in itching (pruritus)",
"Decrease in plaque thickness","Improvement in BSA and PASI score","Fewer flare-ups, better quality of life"
].forEach((e,i)=>{
s.addText("✓ "+e,{ x:0.4,y:1.62+i*0.36,w:4.35,h:0.33, fontSize:SMALL+0.5,color:TEXT_M,margin:0 });
});
[
{ title:"Cyclosporine", shade:DARK, items:["Blood pressure","Serum creatinine (SCr)","BUN & electrolytes (K⁺)","Uric acid"] },
{ title:"Secukinumab (Biologic)", shade:MID, items:["Signs of infection","TB screening pre-treatment","CBC, LFT, RFT periodically"] },
{ title:"Topical Corticosteroids", shade:DARK, items:["Skin atrophy","Striae (stretch marks)","Local skin irritation"] },
].forEach((item,i)=>{
const y=1.18+i*1.0;
s.addShape(prs.ShapeType.rect,{ x:5.1,y,w:4.65,h:0.92, fill:{ color:LIGHT }, line:{ color:item.shade,width:1 } });
s.addShape(prs.ShapeType.rect,{ x:5.1,y,w:4.65,h:0.36, fill:{ color:item.shade } });
s.addText(item.title,{ x:5.22,y,w:4.4,h:0.36, fontSize:SMALL+0.5,bold:true,color:WHITE,valign:"middle",margin:0 });
item.items.forEach((t,ti)=>{
s.addText("⚠ "+t,{ x:5.22,y:y+0.4+ti*0.19,w:4.4,h:0.18, fontSize:SMALL,color:TEXT_M,margin:0 });
});
});
card(s,5.1,4.18,4.65,0.72,"FOLLOW-UP SCHEDULE",MID);
s.addText("Review every 4–8 weeks to assess treatment response and adverse effects.",{ x:5.25,y:4.56,w:4.4,h:0.3, fontSize:SMALL+0.5,color:TEXT_M });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:5.0,w:9.5,h:0.4, fill:{ color:DARK } });
s.addText("TARGET: PASI-75 by Week 16 | PASI-90 by Month 6 | Sustained PASI-90 for long-term maintenance",{
x:0.4,y:5.0,w:9.1,h:0.4, fontSize:10,bold:true,color:WHITE,align:"center",valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 16 – COUNSELLING PART 1
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PATIENT COUNSELLING","Part 1 – Disease Education & Medication");
footer(s,16,"Patient Counselling – Part 1");
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.95, fill:{ color:LIGHT }, line:{ color:MID,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x:0.25,y:1.18,w:9.5,h:0.36, fill:{ color:MID } });
s.addText("DISEASE EDUCATION",{ x:0.4,y:1.18,w:9.1,h:0.36, fontSize:SMALL,bold:true,color:WHITE,charSpacing:2,valign:"middle",margin:0 });
["Psoriasis is a long-term autoimmune skin disease — it is NOT contagious.",
"Treatment controls symptoms and prevents flare-ups; it does not permanently cure the disease."
].forEach((e,i)=>{
s.addText("• "+e,{ x:0.4,y:1.58+i*0.3,w:9.1,h:0.28, fontSize:SMALL+0.5,color:TEXT_M });
});
[
{ name:"Cyclosporine", shade:DARK, points:["Take regularly as prescribed","Avoid grapefruit juice (↑ drug levels)","Report reduced urine output or swelling","Monitor blood pressure at home regularly"] },
{ name:"Secukinumab (Biologic)", shade:MID, points:["Store injection in refrigerator (2–8°C)","Rotate injection site each time","Report fever, cough, or signs of infection","Do not miss doses — follow schedule strictly"] },
].forEach((m,i)=>{
const x=0.25+i*4.9;
s.addShape(prs.ShapeType.rect,{ x,y:2.28,w:4.65,h:2.85, fill:{ color:LIGHT }, line:{ color:m.shade,width:1.5 } });
s.addShape(prs.ShapeType.rect,{ x,y:2.28,w:4.65,h:0.42, fill:{ color:m.shade } });
s.addText(m.name,{ x:x+0.12,y:2.28,w:4.4,h:0.42, fontSize:11,bold:true,color:WHITE,valign:"middle",margin:0 });
m.points.forEach((p,pi)=>{
s.addText("→ "+p,{ x:x+0.15,y:2.74+pi*0.56,w:4.35,h:0.52, fontSize:SMALL+0.5,color:TEXT_M,valign:"middle" });
});
});
}
// ═══════════════════════════════════════════════════════════════════
// SLIDE 17 – COUNSELLING PART 2 + THANK YOU
// ═══════════════════════════════════════════════════════════════════
{
const s = prs.addSlide(); bgLight(s);
titleBar(s,"PATIENT COUNSELLING","Part 2 – Topical Steroids & Lifestyle");
footer(s,17,"Patient Counselling – Part 2");
card(s,0.25,1.18,4.65,2.0,"TOPICAL STEROIDS",DARK);
["Apply only a thin layer to affected areas","Do not use longer than prescribed",
"Wash hands after applying medication","Do not apply to face unless specifically directed"
].forEach((p,i)=>{
s.addText("→ "+p,{ x:0.4,y:1.62+i*0.37,w:4.4,h:0.34, fontSize:SMALL+0.5,color:TEXT_M });
});
card(s,0.25,3.32,4.65,1.82,"LIFESTYLE COUNSELLING",MID);
["Use moisturizers daily to keep skin hydrated","Avoid scratching the lesions",
"Manage stress through relaxation and adequate sleep","Stop smoking and limit alcohol intake"
].forEach((p,i)=>{
s.addText("✓ "+p,{ x:0.4,y:3.78+i*0.34,w:4.4,h:0.31, fontSize:SMALL+0.5,color:TEXT_M });
});
// Thank you panel – deep indigo
s.addShape(prs.ShapeType.rect,{ x:5.1,y:1.18,w:4.65,h:3.96, fill:{ color:DARK }, line:{ color:MID,width:2 } });
s.addShape(prs.ShapeType.ellipse,{ x:5.5,y:0.9,w:3.2,h:3.2, fill:{ color:MID, transparency:88 } });
s.addText("Thank You",{ x:5.2,y:1.55,w:4.4,h:0.9, fontSize:34,bold:true,color:WHITE,align:"center" });
s.addShape(prs.ShapeType.line,{ x:5.65,y:2.52,w:3.4,h:0, line:{ color:MID,width:2 } });
s.addText("Questions & Discussion",{ x:5.2,y:2.6,w:4.4,h:0.42, fontSize:14,color:LIGHT,align:"center",italic:true });
s.addShape(prs.ShapeType.rect,{ x:5.28,y:3.15,w:4.3,h:1.6, fill:{ color:"0D1454" }, line:{ color:MID,width:1 } });
s.addText("CASE SUMMARY",{ x:5.4,y:3.2,w:4.0,h:0.28, fontSize:SMALL,bold:true,color:LIGHT,charSpacing:3,align:"center" });
s.addText("50M · Severe Plaque Psoriasis\n27-yr refractory disease\nRec: Secukinumab + Cyclosporine bridge\n+ Topicals + Cetirizine + Emollients",{
x:5.4,y:3.52,w:4.0,h:1.16, fontSize:SMALL+0.5,color:WHITE,align:"center"
});
}
// ─── WRITE ────────────────────────────────────────────────────────
prs.writeFile({ fileName:"/home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Blue_Indigo.pptx" })
.then(()=>console.log("SUCCESS"))
.catch(e=>{ console.error("ERROR:",e); process.exit(1); });
cd /home/daytona/workspace/plaque-psoriasis-ppt && node build_blue.js 2>&1
ls -lh /home/daytona/workspace/plaque-psoriasis-ppt/Plaque_Psoriasis_Blue_Indigo…
Plaque Psoriasis Blue Indigo
Presentation · PPTX
| Shade | Hex | Role |
|---|---|---|
Deep Indigo ■ | #1A237E | Header bars, primary card headers, odd DTP cards, dark accents |
Mid Blue ■ | #3F51B5 | Sub-bands, even cards, divider strips, location chips |
Pale Lavender-Blue ■ | #E8EAF6 | Slide card fills, alternating table rows, footer strips |