Ok I'm having a assignment on topic investigation use of drug and cover the topics like description, principle involved, classification, control, identification,role of hospital pharmacist , advisory committee give contents in human version and no phlagarism and I'm a b harmacy final year student and this topic is under pharmacy practice
investigational use of drugs pharmacy practice description classification identification hospital pharmacist role advisory committee
https://www.hoparx.org/documents/109/HOPA16_IDS_Guidelines.r…
investigational drug classification 4 classes FDA IND B pharmacy practice notes
Excellent so can you consize the each subtopic and convert into 2 slides for my presentation and it should be attractive
ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/investigational-drug-ppt
~/investigational-drug-ppt/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
// ─── COLOUR PALETTE ────────────────────────────────────────────────────────────
// Deep navy (dominant), electric teal (accent), white, soft platinum (cards)
const C = {
navy: "0A1628",
navyMid: "0D2040",
teal: "00C9B1",
tealDark: "009E8C",
white: "FFFFFF",
offWhite: "F0F4F8",
platinum: "E8EDF3",
lightText:"B8C8D8",
gold: "F5C842",
cardBg: "112240",
lineGray: "2A3F60",
};
// ─── HELPERS ────────────────────────────────────────────────────────────────────
function darkSlide(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.navy}, line:{color:C.navy} });
}
function addAccentBar(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:13.3, h:0.07, fill:{color:C.teal}, line:{color:C.teal} });
}
function addBottomBar(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0, y:7.35, w:13.3, h:0.15, fill:{color:C.tealDark}, line:{color:C.tealDark} });
}
function slideLabel(slide, num, total) {
slide.addText(`${num} / ${total}`, { x:12.4, y:7.1, w:0.8, h:0.25, fontSize:9, color:C.lightText, align:"right" });
}
function sectionTag(slide, tag) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, { x:0.35, y:0.2, w:2.6, h:0.35, fill:{color:C.teal}, line:{color:C.teal}, rectRadius:0.05 });
slide.addText(tag.toUpperCase(), { x:0.35, y:0.2, w:2.6, h:0.35, fontSize:9, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
}
function slideTitle(slide, title) {
slide.addText(title, { x:0.35, y:0.65, w:12.6, h:0.6, fontSize:24, bold:true, color:C.white, fontFace:"Calibri" });
slide.addShape(pres.shapes.RECTANGLE, { x:0.35, y:1.28, w:1.4, h:0.05, fill:{color:C.teal}, line:{color:C.teal} });
}
function card(slide, x, y, w, h) {
slide.addShape(pres.shapes.RECTANGLE, { x, y, w, h,
fill:{color:C.cardBg}, line:{color:C.lineGray},
shadow:{type:"outer", color:"000000", blur:8, offset:3, angle:135, opacity:0.3}
});
}
function iconCircle(slide, x, y, color, emoji) {
slide.addShape(pres.shapes.ELLIPSE, { x, y, w:0.52, h:0.52, fill:{color:color}, line:{color:color} });
slide.addText(emoji, { x, y, w:0.52, h:0.52, fontSize:18, align:"center", valign:"middle", margin:0 });
}
function bulletList(slide, items, x, y, w, h, fontSize=12) {
const rich = items.map((t, i) => ({
text: t,
options: { bullet:{type:"bullet"}, breakLine: i < items.length-1, fontSize, color:C.offWhite, fontFace:"Calibri" }
}));
slide.addText(rich, { x, y, w, h, paraSpaceAfter:4 });
}
const TOTAL = 17;
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ══════════════════════════════════════════════════════════════════════════════
let s = pres.addSlide();
darkSlide(s);
// Large teal circle decoration
s.addShape(pres.shapes.ELLIPSE, { x:9.5, y:-1, w:5.5, h:5.5, fill:{color:C.teal}, line:{color:C.teal}, transparency:85 });
s.addShape(pres.shapes.ELLIPSE, { x:10.3, y:3.5, w:3.8, h:3.8, fill:{color:C.gold}, line:{color:C.gold}, transparency:90 });
// Accent bar
addAccentBar(s);
addBottomBar(s);
// Main title
s.addText("Investigational Use of Drugs", { x:0.6, y:1.8, w:9.2, h:1.4, fontSize:44, bold:true, color:C.white, fontFace:"Calibri" });
s.addShape(pres.shapes.RECTANGLE, { x:0.6, y:3.25, w:3.0, h:0.07, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("B.Pharmacy Final Year | Pharmacy Practice", { x:0.6, y:3.4, w:9, h:0.4, fontSize:15, color:C.teal, fontFace:"Calibri" });
s.addText("A comprehensive overview for clinical and hospital pharmacy students", { x:0.6, y:3.9, w:9, h:0.4, fontSize:12, color:C.lightText, fontFace:"Calibri", italic:true });
// Bottom presenter info
s.addText("Presented by: B.Pharmacy Final Year Student", { x:0.6, y:6.6, w:9, h:0.3, fontSize:10, color:C.lightText });
slideLabel(s, 1, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — TABLE OF CONTENTS
// ══════════════════════════════════════════════════════════════════════════════
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
s.addText("Presentation Overview", { x:0.4, y:0.15, w:12.5, h:0.6, fontSize:26, bold:true, color:C.white, fontFace:"Calibri" });
s.addShape(pres.shapes.RECTANGLE, { x:0.4, y:0.78, w:1.2, h:0.05, fill:{color:C.teal}, line:{color:C.teal} });
const topics = [
["01", "Description & Introduction"],
["02", "Principles Involved"],
["03", "Classification of Investigational Drugs"],
["04", "Control of Investigational Drugs"],
["05", "Identification of Investigational Drugs"],
["06", "Role of the Hospital Pharmacist"],
["07", "Advisory Committee"],
];
const colors = ["00C9B1","009E8C","0087C8","6A5ACD","E05C5C","F5A623","F5C842"];
topics.forEach(([num, title], i) => {
const col = i < 4 ? 0 : (i < 7 ? 1 : 2);
const row = i < 4 ? i : i-4;
const x = 0.35 + col * 4.3;
const y = 0.95 + row * 1.4;
if (i >= 4 && i < 7) {
// right column
}
card(s, x, y, 4.0, 1.25);
s.addShape(pres.shapes.RECTANGLE, { x, y, w:0.55, h:1.25, fill:{color:"#"+colors[i]}, line:{color:"#"+colors[i]} });
s.addText(num, { x, y, w:0.55, h:1.25, fontSize:18, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
s.addText(title, { x:x+0.65, y:y+0.15, w:3.25, h:0.9, fontSize:13, color:C.white, fontFace:"Calibri", valign:"middle" });
});
slideLabel(s, 2, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 3-4 — DESCRIPTION & INTRODUCTION
// ══════════════════════════════════════════════════════════════════════════════
// Slide 3
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 01");
slideTitle(s, "Description & Introduction");
// Definition card (full width)
card(s, 0.35, 1.45, 12.6, 1.5);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y:1.45, w:0.12, h:1.5, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("What is an Investigational Drug?", { x:0.6, y:1.5, w:12, h:0.35, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri" });
s.addText("Any chemical or biological substance being evaluated in human subjects to determine its safety and efficacy — not yet approved by a regulatory authority (FDA / CDSCO) for general commercial use.", {
x:0.6, y:1.88, w:12, h:0.95, fontSize:12, color:C.offWhite, fontFace:"Calibri"
});
// 3 key cards
const descCards = [
["🔬","New Chemical Entity","A brand-new molecule — never tested in humans before. Only pre-clinical (animal) data exists."],
["💊","Approved Drug – New Use","An existing approved drug being studied for a new indication, dose, route, or population."],
["🏥","Compassionate / Expanded Use","Access to unapproved drugs for patients with serious/life-threatening conditions and no alternatives."],
];
descCards.forEach(([emoji, title, desc], i) => {
const x = 0.35 + i*4.32;
card(s, x, 3.1, 4.1, 3.9);
iconCircle(s, x+1.8, 3.2, C.teal, emoji);
s.addText(title, { x:x+0.15, y:3.82, w:3.8, h:0.45, fontSize:12, bold:true, color:C.teal, align:"center", fontFace:"Calibri" });
s.addText(desc, { x:x+0.15, y:4.3, w:3.8, h:2.6, fontSize:11, color:C.offWhite, fontFace:"Calibri", align:"center" });
});
slideLabel(s, 3, TOTAL);
// Slide 4
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 01 — continued");
slideTitle(s, "IND Application & Regulatory Framework");
card(s, 0.35, 1.45, 6.1, 5.6);
s.addText("IND Application (USA – 21 CFR Part 312)", { x:0.5, y:1.55, w:5.8, h:0.4, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri" });
bulletList(s, [
"Sponsor must file before first human trial",
"FDA has 30 days to review — no objection = proceed",
"Includes: pharmacology, toxicology, CMC data",
"Must include the clinical protocol & investigator credentials",
"Informed consent documents required",
], 0.5, 2.0, 5.8, 4.8);
card(s, 6.85, 1.45, 6.1, 5.6);
s.addText("India — Schedule Y & CT Rules 2019", { x:7.0, y:1.55, w:5.8, h:0.4, fontSize:13, bold:true, color:C.gold, fontFace:"Calibri" });
bulletList(s, [
"Governed by Drugs & Cosmetics Act Schedule Y",
"New Drugs & Clinical Trials Rules, 2019",
"CDSCO is the apex regulatory body",
"Ethics Committee approval mandatory",
"Phase-wise trial conduct identical to global standards",
], 7.0, 2.0, 5.8, 4.8);
// Central divider
s.addShape(pres.shapes.RECTANGLE, { x:6.6, y:1.45, w:0.05, h:5.6, fill:{color:C.lineGray}, line:{color:C.lineGray} });
slideLabel(s, 4, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 5-6 — PRINCIPLES INVOLVED
// ══════════════════════════════════════════════════════════════════════════════
// Slide 5
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 02");
slideTitle(s, "Principles Involved — Ethical & Scientific");
const principles1 = [
["⚖️","Declaration of Helsinki","Welfare of subject > interests of science. Voluntary, informed consent. Research must be scientifically sound."],
["📋","Good Clinical Practice (GCP)","ICH-E6 international standard for designing, conducting, recording and reporting clinical trials."],
["✍️","Informed Consent","Patient must understand purpose, risks, benefits, and right to withdraw — BEFORE any study procedure."],
];
principles1.forEach(([emoji, title, desc], i) => {
const y = 1.5 + i*1.9;
card(s, 0.35, y, 12.6, 1.75);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:0.12, h:1.75, fill:{color:C.teal}, line:{color:C.teal} });
iconCircle(s, 0.6, y+0.6, C.tealDark, emoji);
s.addText(title, { x:1.3, y:y+0.15, w:3.5, h:0.45, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri" });
s.addText(desc, { x:1.3, y:y+0.62, w:11.4, h:0.95, fontSize:11.5, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 5, TOTAL);
// Slide 6
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 02 — continued");
slideTitle(s, "Principles Involved — Regulatory & Oversight");
const principles2 = [
["🔬","Risk-Benefit Balance","Harris-Kefauver Amendments (1962): drug must demonstrate BOTH safety and efficacy. Stricter the disease, greater the acceptable risk."],
["🏛️","IRB / Ethics Committee Oversight","Independent review of protocol and consent before trial start. Can suspend or terminate trial if unacceptable risks emerge."],
["📊","Scientific Validity","Flawed study = ethical violation. Requires proper sample size, randomisation, blinding, and defined endpoints."],
];
principles2.forEach(([emoji, title, desc], i) => {
const y = 1.5 + i*1.9;
card(s, 0.35, y, 12.6, 1.75);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:0.12, h:1.75, fill:{color:C.gold}, line:{color:C.gold} });
iconCircle(s, 0.6, y+0.6, C.gold, emoji);
s.addText(title, { x:1.3, y:y+0.15, w:3.5, h:0.45, fontSize:13, bold:true, color:C.gold, fontFace:"Calibri" });
s.addText(desc, { x:1.3, y:y+0.62, w:11.4, h:0.95, fontSize:11.5, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 6, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 7-8 — CLASSIFICATION
// ══════════════════════════════════════════════════════════════════════════════
// Slide 7
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 03");
slideTitle(s, "Classification of Investigational Drugs");
// 4-class grid
const classData = [
["CLASS I","New Chemical Entities","00C9B1","Never tested in humans. Only pre-clinical data. Highest uncertainty — most rigorous monitoring required.","🧪"],
["CLASS II","Approved Drug – New Use","009E8C","Existing approved drug studied for new indication, dose form, route, or population. Fresh IND required.","💊"],
["CLASS III","Treatment IND / Expanded Access","F5A623","Serious/life-threatening illness with no alternative. Three types: individual, intermediate, widespread access.","🏥"],
["CLASS IV","Off-Label Under Investigation","6A5ACD","Approved drugs used beyond labelled indication. Formal study needs IRB oversight and usually an IND.","📁"],
];
classData.forEach(([cls, title, color, desc, emoji], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.35 + col * 6.5;
const y = 1.5 + row * 2.9;
card(s, x, y, 6.25, 2.6);
s.addShape(pres.shapes.RECTANGLE, { x, y, w:6.25, h:0.55, fill:{color:"#"+color}, line:{color:"#"+color} });
s.addText(`${emoji} ${cls}`, { x:x+0.1, y, w:6.05, h:0.55, fontSize:12, bold:true, color:C.navy, align:"left", valign:"middle", margin:8 });
s.addText(title, { x:x+0.15, y:y+0.6, w:6.0, h:0.4, fontSize:12, bold:true, color:"#"+color, fontFace:"Calibri" });
s.addText(desc, { x:x+0.15, y:y+1.05, w:6.0, h:1.4, fontSize:11, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 7, TOTAL);
// Slide 8 — Clinical Trial Phases
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 03 — continued");
slideTitle(s, "Clinical Trial Phases (Phase I – IV)");
const phases = [
["Phase I","First in Human","10–100\nHealthy Volunteers","Safety, dose-finding, PK/PD","00C9B1"],
["Phase II","First in Patient","50–500\nPatient subjects","Efficacy signals + safety","009E8C"],
["Phase III","Multisite Trial","100s–1000s\nPatient subjects","Confirm efficacy & safety","F5A623"],
["Phase IV","Post-Marketing","Many 1000s\nReal-world patients","New risks, new indications","6A5ACD"],
];
phases.forEach(([phase, subtitle, participants, focus, color], i) => {
const x = 0.35 + i * 3.2;
const y = 1.5;
card(s, x, y, 3.0, 5.6);
// Phase header
s.addShape(pres.shapes.RECTANGLE, { x, y, w:3.0, h:0.7, fill:{color:"#"+color}, line:{color:"#"+color} });
s.addText(phase, { x:x+0.05, y, w:2.9, h:0.38, fontSize:15, bold:true, color:C.navy, align:"center", valign:"bottom", margin:0 });
s.addText(subtitle, { x:x+0.05, y:y+0.38, w:2.9, h:0.32, fontSize:9.5, color:C.navy, align:"center", valign:"top", margin:0 });
// Arrow connector (except last)
if (i < 3) {
s.addShape(pres.shapes.RECTANGLE, { x:x+3.0, y:y+1.1, w:0.15, h:0.08, fill:{color:C.teal}, line:{color:C.teal} });
}
s.addText("PARTICIPANTS", { x:x+0.1, y:y+0.85, w:2.8, h:0.3, fontSize:9, bold:true, color:C.teal, align:"center" });
s.addText(participants, { x:x+0.1, y:y+1.15, w:2.8, h:0.65, fontSize:11, color:C.offWhite, align:"center", fontFace:"Calibri" });
s.addShape(pres.shapes.RECTANGLE, { x:x+0.5, y:y+1.85, w:2.0, h:0.04, fill:{color:C.lineGray}, line:{color:C.lineGray} });
s.addText("FOCUS", { x:x+0.1, y:y+1.95, w:2.8, h:0.3, fontSize:9, bold:true, color:C.teal, align:"center" });
s.addText(focus, { x:x+0.1, y:y+2.28, w:2.8, h:0.7, fontSize:11, color:C.offWhite, align:"center", fontFace:"Calibri" });
});
slideLabel(s, 8, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 9-10 — CONTROL
// ══════════════════════════════════════════════════════════════════════════════
// Slide 9
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 04");
slideTitle(s, "Control of Investigational Drugs — Part 1");
const controlData1 = [
["📦","Acquisition & Receipt","Receipt by pharmacy/IDS only. Verify drug vs. shipping manifest. Document: lot numbers, expiry, quantity, transport conditions."],
["❄️","Storage","Per sponsor specifications (temp, light, humidity). Controlled substances: locked limited-access area. Stored SEPARATELY from commercial drugs. Temperature logs maintained."],
["💬","Dispensing Rules","Only on receipt of PI-signed prescription. Confirm informed consent BEFORE dispensing. Document every dispensing event on Drug Accountability Record (DAR)."],
];
controlData1.forEach(([emoji, title, desc], i) => {
const y = 1.55 + i * 1.95;
card(s, 0.35, y, 12.6, 1.75);
iconCircle(s, 0.55, y+0.62, C.teal, emoji);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:0.1, h:1.75, fill:{color:C.teal}, line:{color:C.teal} });
s.addText(title, { x:1.25, y:y+0.12, w:4.0, h:0.4, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri" });
s.addText(desc, { x:1.25, y:y+0.55, w:11.2, h:1.05, fontSize:11.5, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 9, TOTAL);
// Slide 10
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 04 — continued");
slideTitle(s, "Control of Investigational Drugs — Part 2");
const controlData2 = [
["📂","Drug Accountability Records","Track every unit: date received, quantity dispensed, patient ID, returns, destruction. Retained 2 years after approval or trial discontinuation."],
["🔁","Returns & Destruction","Unused drugs returned to sponsor or destroyed per regulations. Documented destruction — NEVER regular waste disposal. Sponsor authorization required."],
["🎭","Blinding & Randomisation Control","Pharmacy holds randomisation codes. Maintain blinding integrity throughout. Emergency unblinding procedure must be pre-established and documented."],
];
controlData2.forEach(([emoji, title, desc], i) => {
const y = 1.55 + i * 1.95;
card(s, 0.35, y, 12.6, 1.75);
iconCircle(s, 0.55, y+0.62, C.gold, emoji);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:0.1, h:1.75, fill:{color:C.gold}, line:{color:C.gold} });
s.addText(title, { x:1.25, y:y+0.12, w:4.0, h:0.4, fontSize:13, bold:true, color:C.gold, fontFace:"Calibri" });
s.addText(desc, { x:1.25, y:y+0.55, w:11.2, h:1.05, fontSize:11.5, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 10, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 11-12 — IDENTIFICATION
// ══════════════════════════════════════════════════════════════════════════════
// Slide 11
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 05");
slideTitle(s, "Identification — Mandatory Labeling");
// Label requirements
card(s, 0.35, 1.45, 7.8, 5.6);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y:1.45, w:7.8, h:0.55, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("Mandatory Label Requirements (21 CFR Part 312)", { x:0.5, y:1.45, w:7.6, h:0.55, fontSize:13, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
const labelItems = [
"Caution: New Drug — Limited to Investigational Use",
"Sponsor name and address",
"IND / Protocol number",
"Name of Principal Investigator",
"Storage conditions (temperature, light)",
"Lot / Batch number",
"Expiry date (if known)",
"Quantity and strength",
];
bulletList(s, labelItems, 0.55, 2.1, 7.5, 4.7, 12);
// Blinded study note
card(s, 8.55, 1.45, 4.4, 5.6);
s.addShape(pres.shapes.RECTANGLE, { x:8.55, y:1.45, w:4.4, h:0.55, fill:{color:C.gold}, line:{color:C.gold} });
s.addText("Blinded Study Labels", { x:8.65, y:1.45, w:4.2, h:0.55, fontSize:13, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
s.addText("In blinded trials, the drug name is replaced by a randomisation/subject code to maintain blinding. The actual identity is held in a sealed emergency envelope only accessible under defined circumstances.", {
x:8.7, y:2.1, w:4.1, h:2.0, fontSize:11.5, color:C.offWhite, fontFace:"Calibri"
});
iconCircle(s, 10.2, 4.2, C.gold, "🔒");
s.addText("Blinding = Safety\nMaintain integrity\nuntil study close", { x:8.7, y:4.85, w:4.1, h:1.9, fontSize:11, color:C.offWhite, fontFace:"Calibri", align:"center" });
slideLabel(s, 11, TOTAL);
// Slide 12
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 05 — continued");
slideTitle(s, "Identification — Challenges & System Controls");
// Left column: challenges
card(s, 0.35, 1.45, 6.1, 5.6);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y:1.45, w:6.1, h:0.55, fill:{color:"E05C5C"}, line:{color:"E05C5C"} });
s.addText("⚠️ Physical Identification Challenges", { x:0.45, y:1.45, w:5.9, h:0.55, fontSize:13, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
bulletList(s, [
"Lack distinguishing visual features (blinding requirement)",
"Cannot use different colours, shapes or imprinted codes",
"Tall man lettering and packaging differences not applicable",
"Small manufacturing batches limit sophisticated packaging",
"Staff must rely on PROTOCOL documentation, not visual cues",
], 0.5, 2.1, 5.8, 4.7, 11.5);
// Right column: system controls
card(s, 6.85, 1.45, 6.1, 5.6);
s.addShape(pres.shapes.RECTANGLE, { x:6.85, y:1.45, w:6.1, h:0.55, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("✅ System-Based Identification Controls", { x:6.95, y:1.45, w:5.9, h:0.55, fontSize:13, bold:true, color:C.navy, align:"center", valign:"middle", margin:0 });
bulletList(s, [
"Pharmacy systems configured with protocol numbers & authorised prescribers",
"Barcode scanning as additional verification step",
"Protocol binders/electronic access at dispensing area at all times",
"Two-patient identifier verification before every dispensing",
"Confirm patient enrolment + valid consent at each visit",
], 7.0, 2.1, 5.8, 4.7, 11.5);
slideLabel(s, 12, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 13-14 — ROLE OF HOSPITAL PHARMACIST
// ══════════════════════════════════════════════════════════════════════════════
// Slide 13
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 06");
slideTitle(s, "Role of the Hospital Pharmacist — Part 1");
const pharmRole1 = [
["🔍","Protocol Review & Feasibility","Reviews protocol before trial starts. Checks pharmaceutical feasibility: compatibility, stability, dose preparation. Identifies medication-related safety concerns.", C.teal],
["📜","Regulatory Compliance","Ensures compliance with 21 CFR 312, ICH-GCP, Joint Commission MM.06.01.05, and institutional SOPs.", C.teal],
["📦","Procurement & Inventory","Coordinates receipt, maintains perpetual inventory, notifies PI when stock reaches minimum level. Manages trial closure accountability.", C.teal],
["💉","Preparation & Dispensing","Prepares drug (including sterile compounding). Dispenses only to enrolled, consented patients on valid investigator orders. Maintains complete DARs.", C.teal],
];
const cols13 = [[0,1],[2,3]];
pharmRole1.forEach(([emoji, title, desc, color], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.35 + col * 6.5;
const y = 1.45 + row * 2.95;
card(s, x, y, 6.25, 2.7);
iconCircle(s, x+0.25, y+0.9, C.tealDark, emoji);
s.addText(title, { x:x+0.9, y:y+0.15, w:5.2, h:0.45, fontSize:13, bold:true, color:C.teal, fontFace:"Calibri" });
s.addText(desc, { x:x+0.9, y:y+0.65, w:5.2, h:1.85, fontSize:11, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 13, TOTAL);
// Slide 14
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 06 — continued");
slideTitle(s, "Role of the Hospital Pharmacist — Part 2");
const pharmRole2 = [
["🗣️","Patient Counselling","How & when to take drug, storage at home, side effects to watch, right to withdraw, importance of returning unused drug.", C.gold],
["⚠️","ADR Monitoring & Reporting","Identifies, documents and reports Adverse Drug Reactions (ADRs) and Serious Adverse Events (SAEs) within required timeframes to sponsor and regulatory authority.", C.gold],
["📚","Drug Information Resource","Primary information source for nurses, physicians & other team members. Uses Investigator's Brochure, mechanism, dosing, interactions, handling procedures.", C.gold],
["🎓","Training & Emergency Handling","Trains pharmacy staff per each protocol. Maintains training records. Manages emergency unblinding. Ensures alternative treatment if patient is discontinued.", C.gold],
];
pharmRole2.forEach(([emoji, title, desc, color], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.35 + col * 6.5;
const y = 1.45 + row * 2.95;
card(s, x, y, 6.25, 2.7);
iconCircle(s, x+0.25, y+0.9, C.gold, emoji);
s.addText(title, { x:x+0.9, y:y+0.15, w:5.2, h:0.45, fontSize:13, bold:true, color:C.gold, fontFace:"Calibri" });
s.addText(desc, { x:x+0.9, y:y+0.65, w:5.2, h:1.85, fontSize:11, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 14, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDES 15-16 — ADVISORY COMMITTEE
// ══════════════════════════════════════════════════════════════════════════════
// Slide 15
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 07");
slideTitle(s, "Advisory Committee — Key Bodies");
const advData1 = [
["🏛️","FDA Advisory Committee","External expert panels convened by FDA. Evaluate clinical trial data. Make non-binding recommendations on drug approval. Public meetings ensure transparency. FDA follows recommendation in most cases.","009ED4"],
["🔬","IRB / Ethics Committee","Primary oversight body in hospitals/research institutions. Reviews & approves protocols before any study begins. Annual continuing reviews. Can suspend or terminate trials if risks emerge.","00C9B1"],
];
advData1.forEach(([emoji, title, desc, color], i) => {
const y = 1.5 + i * 2.85;
card(s, 0.35, y, 12.6, 2.5);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:1.5, h:2.5, fill:{color:"#"+color}, line:{color:"#"+color} });
s.addText(emoji, { x:0.35, y, w:1.5, h:2.5, fontSize:32, align:"center", valign:"middle", margin:0 });
s.addText(title, { x:2.05, y:y+0.15, w:10.7, h:0.5, fontSize:15, bold:true, color:"#"+color, fontFace:"Calibri" });
s.addText(desc, { x:2.05, y:y+0.7, w:10.7, h:1.65, fontSize:12, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 15, TOTAL);
// Slide 16
s = pres.addSlide();
darkSlide(s);
addAccentBar(s);
addBottomBar(s);
sectionTag(s, "Section 07 — continued");
slideTitle(s, "Advisory Committee — Institutional Bodies");
const advData2 = [
["💊","P&T Committee","Reviews and approves institutional policies for investigational drugs. Ensures alignment with hospital formulary. Reviews safety data. Advises on post-trial formulary inclusion.","F5A623"],
["🔬","Scientific Review Committee (SRC)","Evaluates proposed trials before IRB: scientific merit, institutional feasibility, resource adequacy, overlap with existing studies. IDS pharmacist is a KEY member.","9B59B6"],
["📊","DSMB / Data Monitoring Committee","Independent committee for larger trials. Reviews accumulating safety & efficacy data at intervals. Can recommend early termination. Operates independently of sponsor to avoid bias.","E05C5C"],
];
advData2.forEach(([emoji, title, desc, color], i) => {
const y = 1.45 + i * 1.95;
card(s, 0.35, y, 12.6, 1.75);
s.addShape(pres.shapes.RECTANGLE, { x:0.35, y, w:1.2, h:1.75, fill:{color:"#"+color}, line:{color:"#"+color} });
s.addText(emoji, { x:0.35, y, w:1.2, h:1.75, fontSize:26, align:"center", valign:"middle", margin:0 });
s.addText(title, { x:1.7, y:y+0.12, w:3.8, h:0.45, fontSize:13, bold:true, color:"#"+color, fontFace:"Calibri" });
s.addText(desc, { x:1.7, y:y+0.6, w:11.0, h:1.0, fontSize:11.5, color:C.offWhite, fontFace:"Calibri" });
});
slideLabel(s, 16, TOTAL);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 17 — CLOSING / SUMMARY
// ══════════════════════════════════════════════════════════════════════════════
s = pres.addSlide();
darkSlide(s);
// Decorative circles
s.addShape(pres.shapes.ELLIPSE, { x:-1, y:-1, w:5.5, h:5.5, fill:{color:C.teal}, line:{color:C.teal}, transparency:88 });
s.addShape(pres.shapes.ELLIPSE, { x:9.8, y:3.5, w:4.5, h:4.5, fill:{color:C.gold}, line:{color:C.gold}, transparency:90 });
addAccentBar(s);
addBottomBar(s);
s.addText("Key Takeaways", { x:0.6, y:0.7, w:12, h:0.6, fontSize:28, bold:true, color:C.white, fontFace:"Calibri" });
s.addShape(pres.shapes.RECTANGLE, { x:0.6, y:1.32, w:2.0, h:0.07, fill:{color:C.teal}, line:{color:C.teal} });
const takeaways = [
["💡","Investigational drugs are tightly regulated — every human trial begins with an IND application and ethical clearance."],
["⚖️","Core principles include GCP, Informed Consent, IRB oversight, and the risk-benefit framework mandated since 1962."],
["📋","Four-class system (NCE → New Use → Expanded Access → Off-Label Research) covers all investigational scenarios."],
["🔒","Control demands complete Drug Accountability Records, proper storage, and rigorous dispensing procedures."],
["🏥","The hospital pharmacist is a central safeguard — from protocol review through ADR monitoring and patient counselling."],
["🏛️","Advisory bodies (FDA panel, IRB, P&T, SRC, DSMB) provide layered oversight from national to bedside level."],
];
takeaways.forEach(([emoji, text], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.35 + col * 6.5;
const y = 1.55 + row * 1.82;
card(s, x, y, 6.25, 1.65);
s.addShape(pres.shapes.RECTANGLE, { x, y, w:0.1, h:1.65, fill:{color:i%2===0?C.teal:C.gold}, line:{color:i%2===0?C.teal:C.gold} });
s.addText(emoji, { x:x+0.2, y:y+0.4, w:0.6, h:0.8, fontSize:22, align:"center", valign:"middle", margin:0 });
s.addText(text, { x:x+0.9, y:y+0.15, w:5.2, h:1.35, fontSize:11.5, color:C.offWhite, fontFace:"Calibri", valign:"middle" });
});
slideLabel(s, 17, TOTAL);
// ─── WRITE FILE ────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/investigational-drug-ppt/Investigational_Use_of_Drugs.pptx" })
.then(() => console.log("SUCCESS: File written."))
.catch(e => console.error("ERROR:", e));
cd /home/daytona/workspace/investigational-drug-ppt && node build.js 2>&1
pres.shapes.RECTANGLE - I need to check the correct shape constants.node -e "const p = require('pptxgenjs'); const pr = new p(); console.log(Object.keys(pr.shapes).slice(0,20));"
node -e "const p = require('pptxgenjs'); const pr = new p(); const keys = Object.keys(pr.shapes); console.log(keys.filter(k => k.includes('RECT') || k.includes('ELLIP') || k.includes('ROUND')));"
node -e "const p = require('pptxgenjs'); const pr = new p(); const keys = Object.keys(pr.shapes); console.log(keys.filter(k => k.includes('ELLIP') || k.includes('OVAL') || k.includes('CIRC')));"
ELLIPSE should be OVAL. Let me fix all shape references in the script and re-run.sed -i 's/pres\.shapes\.ELLIPSE/pres.shapes.OVAL/g' /home/daytona/workspace/investigational-drug-ppt/build.js && echo "Fixed"
python3 -c " with open('/home/daytona/workspace/investigational-drug-ppt/build.js','r') as f: content = f.read() content = content.replace('pres.shapes.ELLIPSE','pres.shapes.OVAL') with open('/home/daytona/workspace/investigational-drug-ppt/build.js','w') as f: f.write(content) print('Done, count:', content.count('pres.shapes.OVAL')) "
cd /home/daytona/workspace/investigational-drug-ppt && node build.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Use_of_Drugs.pptx
Investigational Use of Drugs
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide - with decorative circles, teal accent |
| 2 | Table of Contents - color-coded topic cards |
| 3-4 | Description & Introduction - definition, 3 drug types, IND vs India regulations side-by-side |
| 5-6 | Principles Involved - Helsinki, GCP, Consent (slide 5) + Risk-Benefit, IRB, Scientific Validity (slide 6) |
| 7-8 | Classification - 4-class grid with color headers + Phase I-IV table |
| 9-10 | Control - Acquisition/Storage/Dispensing (slide 9) + DAR/Returns/Blinding (slide 10) |
| 11-12 | Identification - Mandatory label checklist + blinding challenges vs system controls side-by-side |
| 13-14 | Role of Hospital Pharmacist - 4-card grid per slide (8 roles total) |
| 15-16 | Advisory Committee - FDA/IRB (slide 15) + P&T/SRC/DSMB (slide 16) |
| 17 | Key Takeaways - 6 summary points with teal/gold alternating cards |
I mean cover the topics within 2 slides and the background must be white in color
~/investigational-drug-ppt/build2.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
// ─── COLOUR PALETTE (white background theme) ───────────────────────────────
const C = {
white: "FFFFFF",
darkBlue: "1A237E", // deep indigo for headings
blue: "1565C0", // medium blue
teal: "00897B", // teal green accent
orange: "E65100", // warm orange accent
purple: "6A1B9A", // purple
red: "C62828", // red
gold: "F9A825", // gold
navy: "0D47A1",
lightBg: "F5F7FA", // very light gray-blue for cards
cardBlue: "E3F2FD", // light blue card
cardTeal: "E0F2F1",
cardOrange:"FFF3E0",
cardPurple:"F3E5F5",
textDark: "212121",
textMid: "424242",
textLight:"757575",
line: "E0E0E0",
};
function addTopBar(slide, color) {
slide.addShape(pres.shapes.RECTANGLE, { x:0, y:0, w:13.3, h:0.12, fill:{color:color||C.darkBlue}, line:{color:color||C.darkBlue} });
}
function addBottomStrip(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0, y:7.35, w:13.3, h:0.15, fill:{color:C.darkBlue}, line:{color:C.darkBlue} });
slide.addText("B.Pharmacy Final Year | Pharmacy Practice | Investigational Use of Drugs", {
x:0, y:7.35, w:13.3, h:0.15, fontSize:7.5, color:C.white, align:"center", valign:"middle", margin:0
});
}
function miniCard(slide, x, y, w, h, fillColor, lineColor) {
slide.addShape(pres.shapes.RECTANGLE, {
x, y, w, h,
fill:{ color: fillColor || C.lightBg },
line:{ color: lineColor || C.line, pt:1 },
shadow:{ type:"outer", color:"BBBBBB", blur:4, offset:2, angle:135, opacity:0.2 }
});
}
function sectionHeader(slide, x, y, w, h, label, color) {
slide.addShape(pres.shapes.RECTANGLE, { x, y, w, h, fill:{color:color}, line:{color:color} });
slide.addText(label, { x, y, w, h, fontSize:9.5, bold:true, color:C.white, align:"center", valign:"middle", margin:0 });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1
// Covers: Description | Principles | Classification
// ══════════════════════════════════════════════════════════════════════════════
let s = pres.addSlide();
// White background (default), top color bar
s.addShape(pres.shapes.RECTANGLE, {x:0,y:0,w:13.3,h:7.5,fill:{color:C.white},line:{color:C.white}});
addTopBar(s, C.darkBlue);
// ── SLIDE TITLE ──
s.addText("Investigational Use of Drugs", {
x:0.3, y:0.18, w:9, h:0.52,
fontSize:22, bold:true, color:C.darkBlue, fontFace:"Calibri"
});
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y:0.72, w:5.5, h:0.04, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("Slide 1 of 2", { x:12.0, y:0.22, w:1.1, h:0.3, fontSize:9, color:C.textLight, align:"right" });
// ════════════════════════════
// SECTION A — DESCRIPTION
// ════════════════════════════
sectionHeader(s, 0.2, 0.85, 2.5, 0.32, "01 DESCRIPTION", C.darkBlue);
miniCard(s, 0.2, 1.22, 4.05, 1.62, C.cardBlue, "BBDEFB");
s.addText([
{ text: "Definition: ", options: { bold:true, color:C.darkBlue } },
{ text: "A drug not yet approved by regulatory authorities (FDA/CDSCO) for general use. Tested in humans under an ", options: { color:C.textDark } },
{ text: "Investigational New Drug (IND) Application", options: { bold:true, color:C.blue } },
{ text: " to establish safety & efficacy.", options: { color:C.textDark } },
], { x:0.35, y:1.27, w:3.75, h:1.52, fontSize:11, fontFace:"Calibri", valign:"top" });
miniCard(s, 4.45, 1.22, 4.05, 1.62, "FFF8E1", "FFE082");
s.addText([
{ text: "Scope includes:\n", options: { bold:true, color:C.orange } },
{ text: "• New Chemical Entities (NCE) — first in human\n• Approved drugs for new indications\n• Expanded / compassionate use\n• Off-label drugs under formal investigation", options: { color:C.textDark } },
], { x:4.6, y:1.27, w:3.75, h:1.52, fontSize:10.5, fontFace:"Calibri" });
miniCard(s, 8.9, 1.22, 4.2, 1.62, "F3E5F5", "CE93D8");
s.addText([
{ text: "IND Requirements:\n", options: { bold:true, color:C.purple } },
{ text: "• Pre-clinical pharmacology & toxicology data\n• CMC (Chemistry, Manufacturing, Controls)\n• Clinical protocol & investigator credentials\n• Informed consent documents\n• FDA reviews in 30 days", options: { color:C.textDark } },
], { x:9.05, y:1.27, w:3.9, h:1.52, fontSize:10.5, fontFace:"Calibri" });
// ════════════════════════════
// SECTION B — PRINCIPLES
// ════════════════════════════
sectionHeader(s, 0.2, 2.98, 2.5, 0.32, "02 PRINCIPLES INVOLVED", C.teal);
const principles = [
["⚖️ Declaration of\nHelsinki", "Subject welfare > science. Voluntary informed consent mandatory before any procedure.", C.cardTeal, "80CBC4"],
["📋 Good Clinical\nPractice (GCP)", "ICH-E6 standard for designing, conducting & reporting trials. Internationally binding.", C.cardBlue, "90CAF9"],
["✍️ Informed\nConsent", "Explain purpose, risks, benefits & right to withdraw. Obtained BEFORE any study activity.", "FFF3E0", "FFCC80"],
["🔬 Risk-Benefit\nBalance", "Harris-Kefauver 1962: Prove both safety AND efficacy. Acceptable risk = severity of disease.", "FCE4EC", "F48FB1"],
["🏛️ IRB / Ethics\nCommittee", "Independent review before trial start. Monitors ongoing trial. Can suspend for safety.", "F3E5F5", "CE93D8"],
["📊 Scientific\nValidity", "Flawed design = ethical violation. Needs proper sample size, randomisation & endpoints.", "FFFDE7", "FFF176"],
];
principles.forEach(([title, desc, fill, line], i) => {
const x = 0.2 + i * 2.15;
miniCard(s, x, 3.35, 2.0, 2.0, fill, line);
s.addText(title, { x:x+0.08, y:3.4, w:1.84, h:0.55, fontSize:10, bold:true, color:C.darkBlue, fontFace:"Calibri", align:"center" });
s.addShape(pres.shapes.RECTANGLE, { x:x+0.15, y:3.95, w:1.7, h:0.03, fill:{color:C.line}, line:{color:C.line} });
s.addText(desc, { x:x+0.08, y:4.0, w:1.84, h:1.3, fontSize:9.5, color:C.textMid, fontFace:"Calibri" });
});
// ════════════════════════════
// SECTION C — CLASSIFICATION
// ════════════════════════════
sectionHeader(s, 0.2, 5.42, 2.5, 0.32, "03 CLASSIFICATION", C.orange);
const classes = [
["Class I", "New Chemical Entities", "Never tested in humans. Highest uncertainty. Most rigorous monitoring.", C.darkBlue],
["Class II", "Approved Drug — New Use", "Existing approved drug studied for new indication, route or population.", C.teal],
["Class III", "Treatment IND / Expanded Access", "Serious/life-threatening illness, no alternatives. Individual or widespread access.", C.orange],
["Class IV", "Off-Label Under Investigation", "Approved drugs used beyond label. Formal study needs IND + IRB oversight.", C.purple],
];
classes.forEach(([cls, title, desc, color], i) => {
const x = 0.2 + i * 3.27;
miniCard(s, x, 5.8, 3.1, 1.55, C.lightBg, C.line);
s.addShape(pres.shapes.RECTANGLE, { x, y:5.8, w:3.1, h:0.36, fill:{color:color}, line:{color:color} });
s.addText(`${cls} | ${title}`, { x:x+0.08, y:5.8, w:2.94, h:0.36, fontSize:10, bold:true, color:C.white, valign:"middle", margin:4 });
s.addText(desc, { x:x+0.1, y:6.19, w:2.9, h:1.1, fontSize:10, color:C.textMid, fontFace:"Calibri" });
});
addBottomStrip(s);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2
// Covers: Control | Identification | Role of Hospital Pharmacist | Advisory Committee
// ══════════════════════════════════════════════════════════════════════════════
s = pres.addSlide();
s.addShape(pres.shapes.RECTANGLE, {x:0,y:0,w:13.3,h:7.5,fill:{color:C.white},line:{color:C.white}});
addTopBar(s, C.blue);
s.addText("Investigational Use of Drugs", {
x:0.3, y:0.18, w:9, h:0.52,
fontSize:22, bold:true, color:C.darkBlue, fontFace:"Calibri"
});
s.addShape(pres.shapes.RECTANGLE, { x:0.3, y:0.72, w:5.5, h:0.04, fill:{color:C.blue}, line:{color:C.blue} });
s.addText("Slide 2 of 2", { x:12.0, y:0.22, w:1.1, h:0.3, fontSize:9, color:C.textLight, align:"right" });
// ════════════════════════════
// LEFT COLUMN — CONTROL + IDENTIFICATION
// ════════════════════════════
// CONTROL
sectionHeader(s, 0.2, 0.85, 2.5, 0.32, "04 CONTROL", C.teal);
const controlPoints = [
["📦 Acquire","Pharmacy/IDS only. Verify against manifest. Log lot, expiry, qty."],
["❄️ Storage","Per sponsor specs. Locked area for controlled substances. Separate from commercial drugs."],
["💉 Dispense","PI-signed order required. Confirm consent. Document on Drug Accountability Record (DAR)."],
["📂 Records","DAR tracks every unit. Retained 2 years post-approval or trial end."],
["♻️ Returns","Unused drug returned or destroyed with documentation. Never regular waste."],
];
controlPoints.forEach(([label, desc], i) => {
const y = 1.25 + i * 0.65;
miniCard(s, 0.2, y, 6.2, 0.58, i%2===0?C.cardTeal:C.lightBg, C.line);
s.addText(label, { x:0.3, y:y+0.04, w:1.1, h:0.5, fontSize:9.5, bold:true, color:C.teal, fontFace:"Calibri", valign:"top" });
s.addShape(pres.shapes.RECTANGLE, { x:1.5, y:y+0.08, w:0.03, h:0.42, fill:{color:C.line}, line:{color:C.line} });
s.addText(desc, { x:1.6, y:y+0.05, w:4.7, h:0.5, fontSize:9.5, color:C.textMid, fontFace:"Calibri", valign:"top" });
});
// IDENTIFICATION
sectionHeader(s, 0.2, 4.55, 2.5, 0.32, "05 IDENTIFICATION", C.purple);
const idPoints = [
["🏷️ Label (Mandatory)","Must state: 'Caution: New Drug — Investigational Use Only', Sponsor, IND#, PI, storage, lot, expiry, strength."],
["⚠️ Challenge","No color/shape/imprint cues in blinded trials. Staff rely on protocol docs, not visual ID."],
["🖥️ System Controls","Pharmacy software with protocol IDs, barcode scan, 2-patient-identifier check before every dispense."],
];
idPoints.forEach(([label, desc], i) => {
const y = 4.95 + i * 0.72;
miniCard(s, 0.2, y, 6.2, 0.62, i%2===0?"F3E5F5":C.lightBg, C.line);
s.addText(label, { x:0.3, y:y+0.05, w:1.35, h:0.52, fontSize:9.5, bold:true, color:C.purple, fontFace:"Calibri", valign:"top" });
s.addShape(pres.shapes.RECTANGLE, { x:1.72, y:y+0.08, w:0.03, h:0.42, fill:{color:C.line}, line:{color:C.line} });
s.addText(desc, { x:1.82, y:y+0.05, w:4.5, h:0.52, fontSize:9.5, color:C.textMid, fontFace:"Calibri", valign:"top" });
});
// ════════════════════════════
// RIGHT COLUMN — PHARMACIST + ADVISORY
// ════════════════════════════
// ROLE OF HOSPITAL PHARMACIST
sectionHeader(s, 6.85, 0.85, 3.0, 0.32, "06 ROLE OF HOSPITAL PHARMACIST", C.darkBlue);
const pharmacistRoles = [
["🔍 Protocol Review", "Feasibility, compatibility, stability check before trial start."],
["📜 Regulatory Compliance", "Ensure 21 CFR 312, ICH-GCP, Joint Commission MM.06.01.05 adherence."],
["📦 Procurement & Inventory", "Receive drug, maintain perpetual DAR, notify PI at minimum stock."],
["💊 Preparation & Dispensing", "Sterile compounding if needed. Dispense only to consented, enrolled patients."],
["🗣️ Patient Counselling", "Dosing, storage, side effects, right to withdraw, return unused drug."],
["⚠️ ADR Monitoring", "Detect, document and report ADRs/SAEs to sponsor & regulatory authority."],
["📚 Drug Information", "Primary resource for team — mechanism, dosing, interactions from Investigator's Brochure."],
["🎓 Training & Unblinding", "Train staff per protocol. Manage emergency unblinding with documentation."],
];
pharmacistRoles.forEach(([label, desc], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 6.85 + col * 3.22;
const y = 1.25 + row * 0.72;
miniCard(s, x, y, 3.05, 0.62, row%2===0?C.cardBlue:C.lightBg, C.line);
s.addText(label, { x:x+0.08, y:y+0.04, w:2.9, h:0.28, fontSize:9, bold:true, color:C.darkBlue, fontFace:"Calibri" });
s.addText(desc, { x:x+0.08, y:y+0.33, w:2.9, h:0.27, fontSize:8.5, color:C.textMid, fontFace:"Calibri" });
});
// ADVISORY COMMITTEE
sectionHeader(s, 6.85, 4.22, 3.0, 0.32, "07 ADVISORY COMMITTEE", C.orange);
const advisory = [
["🏛️ FDA Advisory\nCommittee", "External expert panels. Evaluate trial data. Non-binding approval recommendations. Public meetings ensure transparency.", "FFF3E0", "FFB74D"],
["🔬 IRB / Ethics\nCommittee", "Reviews & approves protocols. Annual monitoring. Can suspend trial. Requires diverse membership incl. community.", "FFF8E1", "FFD54F"],
["💊 P&T Committee", "Approves hospital policies for investigational drugs. Formulary oversight. Reviews trial safety data.", "E8F5E9", "81C784"],
["📊 DSMB / DMC", "Independent body for large trials. Reviews interim safety/efficacy data. Recommends early stop if needed.", "F3E5F5", "BA68C8"],
];
advisory.forEach(([label, desc, fill, line], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 6.85 + col * 3.22;
const y = 4.62 + row * 1.35;
miniCard(s, x, y, 3.05, 1.22, fill, line);
s.addText(label, { x:x+0.1, y:y+0.06, w:2.85, h:0.45, fontSize:9.5, bold:true, color:C.orange, fontFace:"Calibri" });
s.addShape(pres.shapes.RECTANGLE, { x:x+0.1, y:y+0.52, w:2.85, h:0.03, fill:{color:C.line}, line:{color:C.line} });
s.addText(desc, { x:x+0.1, y:y+0.58, w:2.85, h:0.6, fontSize:8.8, color:C.textMid, fontFace:"Calibri" });
});
// SRC note
miniCard(s, 6.85, 6.35, 6.29, 0.72, "E8EAF6", "9FA8DA");
s.addText("🔬 Scientific Review Committee (SRC)", { x:6.95, y:6.38, w:3.0, h:0.28, fontSize:9.5, bold:true, color:C.darkBlue, fontFace:"Calibri" });
s.addText("Evaluates scientific merit, feasibility and resource adequacy of proposed trials before IRB review. The IDS pharmacist is a KEY member — provides pharmaceutical expertise for investigator-initiated trials.", {
x:6.95, y:6.65, w:6.1, h:0.38, fontSize:9, color:C.textMid, fontFace:"Calibri"
});
addBottomStrip(s);
// ─── WRITE ──────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/investigational-drug-ppt/Investigational_Use_of_Drugs_2slides.pptx" })
.then(() => console.log("SUCCESS"))
.catch(e => console.error("ERROR:", e));
cd /home/daytona/workspace/investigational-drug-ppt && node build2.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Use_of_Drugs_2slides.pptx
Investigational Use of Drugs 2slides
Presentation · PPTX
No dark colors the text color should be black and times new Roman
~/investigational-drug-ppt/build3.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
const F = "Times New Roman";
const C = {
white: "FFFFFF",
black: "000000",
gray: "555555",
line: "CCCCCC",
lightGray:"F7F7F7",
// Soft pastel accents — used ONLY for section header bars and card borders
blue: "4A90D9",
teal: "3BAA8C",
orange: "E8873A",
purple: "8B6FCB",
green: "5BAD72",
red: "D95B5B",
gold: "C9A227",
};
// ── helpers ──────────────────────────────────────────────────────────────────
function whiteBg(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:0,w:13.3,h:7.5,fill:{color:C.white},line:{color:C.white} });
}
function topBar(slide, color) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:0,w:13.3,h:0.1,fill:{color:color},line:{color:color} });
}
function bottomBar(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:7.38,w:13.3,h:0.12,fill:{color:C.line},line:{color:C.line} });
slide.addText("B.Pharmacy Final Year | Pharmacy Practice | Investigational Use of Drugs", {
x:0,y:7.38,w:13.3,h:0.12,fontSize:7,color:C.gray,align:"center",valign:"middle",margin:0,fontFace:F
});
}
function secLabel(slide, x, y, w, h, txt, color) {
slide.addShape(pres.shapes.RECTANGLE, { x,y,w,h,fill:{color:color},line:{color:color} });
slide.addText(txt, { x,y,w,h,fontSize:9,bold:true,color:C.white,align:"center",valign:"middle",margin:0,fontFace:F });
}
function card(slide, x, y, w, h, borderColor) {
slide.addShape(pres.shapes.RECTANGLE, {
x,y,w,h,
fill:{color:C.white},
line:{color:borderColor||C.line,pt:1},
shadow:{type:"outer",color:"DDDDDD",blur:3,offset:1,angle:135,opacity:0.3}
});
}
function row(slide, x, y, w, h, fill) {
slide.addShape(pres.shapes.RECTANGLE, {x,y,w,h,fill:{color:fill||C.lightGray},line:{color:C.line,pt:0.5}});
}
function txt(slide, text, x, y, w, h, opts) {
slide.addText(text, Object.assign({ x,y,w,h,fontFace:F,color:C.black,fontSize:10,valign:"middle" }, opts||{}));
}
function boldTxt(slide, text, x, y, w, h, opts) {
txt(slide, text, x, y, w, h, Object.assign({ bold:true }, opts||{}));
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — Description | Principles | Classification
// ══════════════════════════════════════════════════════════════════════════════
let s = pres.addSlide();
whiteBg(s);
topBar(s, C.blue);
// Slide heading
boldTxt(s,"Investigational Use of Drugs — Overview",0.25,0.13,10,0.48,{fontSize:20,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:0.25,y:0.63,w:6,h:0.035,fill:{color:C.blue},line:{color:C.blue}});
txt(s,"Slide 1 of 2",12.1,0.18,1.0,0.28,{fontSize:8.5,color:C.gray,align:"right"});
// ─── SECTION 01 — DESCRIPTION ────────────────────────────────────────────────
secLabel(s, 0.2,0.75,2.6,0.28,"01 DESCRIPTION",C.blue);
card(s,0.2,1.08,4.1,1.6,C.blue);
boldTxt(s,"What is an Investigational Drug?",0.32,1.11,3.86,0.3,{fontSize:10.5,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:0.32,y:1.42,w:3.86,h:0.025,fill:{color:C.blue},line:{color:C.blue}});
txt(s,"A drug not yet approved by FDA / CDSCO for general use, tested in humans under an Investigational New Drug (IND) application to establish safety and efficacy.",0.32,1.46,3.85,1.2,{fontSize:10,wrapText:true});
card(s,4.5,1.08,4.1,1.6,C.teal);
boldTxt(s,"Scope of Investigational Use",4.62,1.11,3.86,0.3,{fontSize:10.5,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:4.62,y:1.42,w:3.86,h:0.025,fill:{color:C.teal},line:{color:C.teal}});
s.addText([
{text:"• New Chemical Entities (NCE) — first in human\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• Approved drug for new indication/route/population\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• Expanded / compassionate use programs\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• Off-label drugs under formal study",options:{fontSize:10,color:C.black,fontFace:F}},
],{x:4.62,y:1.46,w:3.85,h:1.2});
card(s,8.9,1.08,4.2,1.6,C.orange);
boldTxt(s,"IND Application Requirements",9.02,1.11,3.96,0.3,{fontSize:10.5,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:9.02,y:1.42,w:3.96,h:0.025,fill:{color:C.orange},line:{color:C.orange}});
s.addText([
{text:"• Pre-clinical pharmacology & toxicology data\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• Chemistry, Manufacturing & Controls (CMC)\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• Clinical protocol & investigator credentials\n",options:{fontSize:10,color:C.black,fontFace:F}},
{text:"• FDA review: 30 days to approve/reject",options:{fontSize:10,color:C.black,fontFace:F}},
],{x:9.02,y:1.46,w:3.96,h:1.2});
// ─── SECTION 02 — PRINCIPLES ─────────────────────────────────────────────────
secLabel(s, 0.2,2.83,2.8,0.28,"02 PRINCIPLES INVOLVED",C.teal);
const principles = [
["Declaration of Helsinki","Subject welfare > science. Voluntary informed consent before any procedure. Research must be scientifically sound."],
["Good Clinical Practice (GCP)","ICH-E6 international standard for designing, conducting, recording and reporting clinical trials."],
["Informed Consent","Patient must understand purpose, risks, benefits and right to withdraw BEFORE any study activity begins."],
["Risk-Benefit Balance","Harris-Kefauver 1962: Prove both safety AND efficacy. Acceptable risk is proportional to disease severity."],
["IRB / Ethics Committee","Independent review and approval before trial start. Annual monitoring. Can suspend trial for patient safety."],
["Scientific Validity","Flawed study design is an ethical violation. Requires proper sample size, randomisation and clear endpoints."],
];
principles.forEach(([title,desc],i) => {
const col = i%3, row_ = Math.floor(i/3);
const x = 0.2 + col*4.35;
const y = 3.17 + row_*1.35;
card(s,x,y,4.18,1.25, [C.teal,C.blue,C.orange,C.purple,C.green,C.red][i]);
s.addShape(pres.shapes.RECTANGLE,{x,y,w:4.18,h:0.04,fill:{color:[C.teal,C.blue,C.orange,C.purple,C.green,C.red][i]},line:{color:[C.teal,C.blue,C.orange,C.purple,C.green,C.red][i]}});
boldTxt(s,title,x+0.1,y+0.06,3.98,0.28,{fontSize:10,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:x+0.1,y:y+0.36,w:3.98,h:0.025,fill:{color:C.line},line:{color:C.line}});
txt(s,desc,x+0.1,y+0.38,3.98,0.82,{fontSize:9.5,color:C.black,wrapText:true,valign:"top"});
});
// ─── SECTION 03 — CLASSIFICATION ─────────────────────────────────────────────
secLabel(s, 0.2,5.92,2.6,0.28,"03 CLASSIFICATION",C.orange);
const classes = [
["Class I","New Chemical Entity","Never tested in humans. Only pre-clinical data. Most rigorous monitoring required."],
["Class II","Approved Drug — New Use","Existing drug studied for new indication, dose, route or population. Fresh IND needed."],
["Class III","Treatment IND / Expanded Access","Serious illness with no alternative. Includes individual, intermediate and widespread access."],
["Class IV","Off-Label Under Investigation","Approved drug used beyond label under formal study. Requires IND + IRB oversight."],
];
classes.forEach(([cls,title,desc],i) => {
const x = 0.2 + i*3.27;
card(s,x,6.26,3.1,1.1, [C.blue,C.teal,C.orange,C.purple][i]);
s.addShape(pres.shapes.RECTANGLE,{x,y:6.26,w:3.1,h:0.3,fill:{color:[C.blue,C.teal,C.orange,C.purple][i]},line:{color:[C.blue,C.teal,C.orange,C.purple][i]}});
txt(s,`${cls} | ${title}`,x+0.08,6.26,2.94,0.3,{fontSize:9.5,bold:true,color:C.white,valign:"middle",margin:3});
txt(s,desc,x+0.1,6.59,2.9,0.73,{fontSize:9.5,color:C.black,valign:"top",wrapText:true});
});
bottomBar(s);
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — Control | Identification | Hospital Pharmacist | Advisory Committee
// ══════════════════════════════════════════════════════════════════════════════
s = pres.addSlide();
whiteBg(s);
topBar(s, C.teal);
boldTxt(s,"Investigational Use of Drugs — Management & Oversight",0.25,0.13,11,0.48,{fontSize:20,color:C.black});
s.addShape(pres.shapes.RECTANGLE,{x:0.25,y:0.63,w:6.5,h:0.035,fill:{color:C.teal},line:{color:C.teal}});
txt(s,"Slide 2 of 2",12.1,0.18,1.0,0.28,{fontSize:8.5,color:C.gray,align:"right"});
// ─── LEFT HALF ────────────────────────────────────────────────────────────────
// SECTION 04 — CONTROL
secLabel(s,0.2,0.75,2.2,0.28,"04 CONTROL",C.teal);
const controlRows = [
["Acquisition & Receipt","Received by pharmacy/IDS only. Verify against sponsor manifest. Document lot, expiry, quantity and transport conditions."],
["Storage","Per sponsor specs (temperature, light, humidity). Controlled substances in locked area. Stored separately from commercial drugs. Temperature logs maintained."],
["Dispensing","PI-signed prescription required. Confirm informed consent before dispensing. Every dispense documented on Drug Accountability Record (DAR)."],
["Drug Accountability Records","DAR tracks every unit from receipt to disposal. Retained for 2 years after approval or trial discontinuation."],
["Returns & Destruction","Unused drug returned to sponsor or destroyed per regulations. Documented destruction — never disposed as regular waste."],
];
controlRows.forEach(([label,desc],i) => {
const y = 1.1 + i*0.62;
const fill = i%2===0 ? "F2F9F7" : C.white;
s.addShape(pres.shapes.RECTANGLE,{x:0.2,y,w:6.3,h:0.56,fill:{color:fill},line:{color:C.line,pt:0.5}});
boldTxt(s,label,0.3,y+0.03,1.65,0.5,{fontSize:9.5,color:C.black,valign:"top"});
s.addShape(pres.shapes.RECTANGLE,{x:2.0,y:y+0.08,w:0.025,h:0.4,fill:{color:C.teal},line:{color:C.teal}});
txt(s,desc,2.07,y+0.03,4.35,0.5,{fontSize:9,color:C.black,valign:"top",wrapText:true});
});
// SECTION 05 — IDENTIFICATION
secLabel(s,0.2,4.25,2.4,0.28,"05 IDENTIFICATION",C.purple);
const idRows = [
["Mandatory Label","Must state: 'New Drug — Investigational Use Only', Sponsor name, IND#, PI name, storage conditions, lot number, expiry and strength."],
["Identification Challenge","No colour/shape/imprint cues in blinded trials. Staff must rely on protocol documentation, not visual identification."],
["System Controls","Pharmacy software with protocol IDs, barcode verification, and two-patient-identifier check before every dispensing event."],
];
idRows.forEach(([label,desc],i) => {
const y = 4.6 + i*0.71;
const fill = i%2===0 ? "F9F5FF" : C.white;
s.addShape(pres.shapes.RECTANGLE,{x:0.2,y,w:6.3,h:0.65,fill:{color:fill},line:{color:C.line,pt:0.5}});
boldTxt(s,label,0.3,y+0.03,1.75,0.59,{fontSize:9.5,color:C.black,valign:"top"});
s.addShape(pres.shapes.RECTANGLE,{x:2.1,y:y+0.08,w:0.025,h:0.45,fill:{color:C.purple},line:{color:C.purple}});
txt(s,desc,2.18,y+0.03,4.25,0.59,{fontSize:9,color:C.black,valign:"top",wrapText:true});
});
// ─── RIGHT HALF ───────────────────────────────────────────────────────────────
// SECTION 06 — HOSPITAL PHARMACIST
secLabel(s,6.8,0.75,3.1,0.28,"06 ROLE OF HOSPITAL PHARMACIST",C.blue);
const pharmaRoles = [
["Protocol Review","Check feasibility, compatibility, stability before trial start. Participate in Scientific Review Committee."],
["Regulatory Compliance","Ensure 21 CFR 312, ICH-GCP and Joint Commission MM.06.01.05 adherence."],
["Procurement & Inventory","Receive drug, maintain perpetual DAR, notify PI at minimum stock level."],
["Preparation & Dispensing","Sterile compounding if required. Dispense only to consented, enrolled patients on valid PI orders."],
["Patient Counselling","Explain dosing, storage, side effects, right to withdraw, and importance of returning unused drug."],
["ADR Monitoring","Detect, document and report Adverse Drug Reactions and Serious Adverse Events to sponsor and authority."],
["Drug Information","Primary resource for entire team — mechanism, interactions, dosing from Investigator's Brochure."],
["Training & Unblinding","Train staff per each protocol. Manage emergency unblinding with proper documentation."],
];
pharmaRoles.forEach(([label,desc],i) => {
const col = i%2, rw = Math.floor(i/2);
const x = 6.8 + col*3.22;
const y = 1.1 + rw*0.72;
const fill = rw%2===0 ? "F0F6FF" : C.white;
s.addShape(pres.shapes.RECTANGLE,{x,y,w:3.05,h:0.65,fill:{color:fill},line:{color:C.line,pt:0.5}});
boldTxt(s,label,x+0.1,y+0.03,2.85,0.25,{fontSize:9.5,color:C.black});
txt(s,desc,x+0.1,y+0.3,2.85,0.32,{fontSize:8.8,color:C.black,valign:"top",wrapText:true});
});
// SECTION 07 — ADVISORY COMMITTEE
secLabel(s,6.8,3.98,2.8,0.28,"07 ADVISORY COMMITTEE",C.orange);
const advisory = [
["FDA Advisory Committee","External expert panels evaluate trial data and make non-binding approval recommendations. Public meetings ensure transparency."],
["IRB / Ethics Committee","Reviews and approves protocols before trial start. Annual monitoring. Can suspend or terminate trial for patient safety."],
["P&T Committee","Approves hospital policies for investigational drugs. Oversees formulary alignment. Reviews ongoing trial safety data."],
["DSMB / Data Monitoring Committee","Independent body for large trials. Reviews interim safety/efficacy data. Can recommend early study termination."],
["Scientific Review Committee (SRC)","Assesses scientific merit and feasibility before IRB review. IDS pharmacist is a key member providing pharmaceutical expertise."],
];
advisory.forEach(([label,desc],i) => {
const col = i < 4 ? i%2 : 0;
const rw = i < 4 ? Math.floor(i/2) : 2;
const x = i < 4 ? 6.8 + col*3.22 : 6.8;
const w = i < 4 ? 3.05 : 6.3;
const y = 4.33 + rw*0.74;
const fill = rw%2===0 ? "FFF8F0" : C.white;
s.addShape(pres.shapes.RECTANGLE,{x,y,w,h:0.65,fill:{color:fill},line:{color:C.line,pt:0.5}});
boldTxt(s,label,x+0.1,y+0.03,i<4?2.85:3.5,0.25,{fontSize:9.5,color:C.black});
txt(s,desc,x+0.1,y+0.3,i<4?2.85:6.1,0.32,{fontSize:8.8,color:C.black,valign:"top",wrapText:true});
});
bottomBar(s);
// ─── WRITE ────────────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/investigational-drug-ppt/InvestigationalDrugs_Final.pptx" })
.then(()=>console.log("SUCCESS"))
.catch(e=>console.error("ERROR:",e));
cd /home/daytona/workspace/investigational-drug-ppt && node build3.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/InvestigationalDrugs_Final.pptx
InvestigationalDrugs Final
Presentation · PPTX
Can you even make flow chart
What flowchart do you want me to create? · What format should it be in?
~/investigational-drug-ppt/flowchart.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
const F = "Times New Roman";
// ── COLOURS (white bg, black text, soft accents for shapes only) ──
const WHITE = "FFFFFF";
const BLACK = "000000";
const LGRAY = "F0F0F0";
const BORDER = "AAAAAA";
// Step box fill colours (soft pastels — text stays black)
const COL = {
start: "D6EAF8", // light blue — start/end ovals
process: "EAF4FB", // very light blue — process rectangles
decision: "FEF9E7", // light yellow — diamond decisions
phase1: "E8F8F5", // mint
phase2: "E9F7EF", // light green
phase3: "FEF9E7", // light gold
phase4: "FDEDEC", // light rose
approval: "F9EBEA", // light red
success: "EAFAF1", // pale green
arrow: "2E86C1", // medium blue for arrows
};
const s = pres.addSlide();
// White background
s.addShape(pres.shapes.RECTANGLE, {x:0,y:0,w:13.3,h:7.5,fill:{color:WHITE},line:{color:WHITE}});
// ── TOP BAR + TITLE ──
s.addShape(pres.shapes.RECTANGLE, {x:0,y:0,w:13.3,h:0.08,fill:{color:"2E86C1"},line:{color:"2E86C1"}});
s.addText("Investigational Use of Drugs — Process Flowchart", {
x:0.3,y:0.1,w:12.7,h:0.5,
fontSize:18,bold:true,color:BLACK,fontFace:F,align:"center"
});
s.addShape(pres.shapes.RECTANGLE,{x:1.5,y:0.62,w:10.3,h:0.03,fill:{color:"2E86C1"},line:{color:"2E86C1"}});
// ── BOTTOM BAR ──
s.addShape(pres.shapes.RECTANGLE,{x:0,y:7.4,w:13.3,h:0.1,fill:{color:LGRAY},line:{color:LGRAY}});
s.addText("B.Pharmacy Final Year | Pharmacy Practice",{
x:0,y:7.4,w:13.3,h:0.1,fontSize:7,color:"666666",align:"center",valign:"middle",fontFace:F
});
// ─────────────────────────────────────────────────────────────────────────────
// LAYOUT: Two columns of flow
// LEFT column (x ≈ 0.35): Discovery → Pre-clinical → IND Application → IND Review
// Then merges to CENTER for Phase I → II → III → NDA → FDA Review → Approval → Phase IV
// We'll do a single top-to-bottom vertical flow centered on the slide.
// ─────────────────────────────────────────────────────────────────────────────
// Helper: draw a rounded-rect process box
function box(x, y, w, h, label, sublabel, fill, lineColor) {
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h,
fill: { color: fill || COL.process },
line: { color: lineColor || BORDER, pt: 1 },
rectRadius: 0.08,
shadow: { type:"outer", color:"CCCCCC", blur:3, offset:1, angle:135, opacity:0.25 }
});
if (sublabel) {
s.addText(label, { x:x+0.06, y:y+0.04, w:w-0.12, h:h*0.48, fontSize:9.5, bold:true, color:BLACK, fontFace:F, align:"center", valign:"bottom", margin:0 });
s.addText(sublabel, { x:x+0.06, y:y+h*0.5, w:w-0.12, h:h*0.46, fontSize:8.5, color:"333333", fontFace:F, align:"center", valign:"top", margin:0 });
} else {
s.addText(label, { x:x+0.06, y, w:w-0.12, h, fontSize:9.5, bold:true, color:BLACK, fontFace:F, align:"center", valign:"middle", margin:0 });
}
}
// Helper: draw an oval (start/end)
function oval(x, y, w, h, label, fill) {
s.addShape(pres.shapes.OVAL, {
x, y, w, h,
fill: { color: fill || COL.start },
line: { color: BORDER, pt: 1.2 },
shadow: { type:"outer", color:"CCCCCC", blur:3, offset:1, angle:135, opacity:0.25 }
});
s.addText(label, { x:x+0.05, y, w:w-0.1, h, fontSize:10, bold:true, color:BLACK, fontFace:F, align:"center", valign:"middle", margin:0 });
}
// Helper: diamond decision
function diamond(x, y, w, h, label, fill) {
s.addShape(pres.shapes.DIAMOND, {
x, y, w, h,
fill: { color: fill || COL.decision },
line: { color: BORDER, pt: 1 },
shadow: { type:"outer", color:"CCCCCC", blur:3, offset:1, angle:135, opacity:0.25 }
});
s.addText(label, { x:x+0.06, y, w:w-0.12, h, fontSize:9, bold:true, color:BLACK, fontFace:F, align:"center", valign:"middle", margin:0 });
}
// Helper: downward arrow
function arrowDown(x, y, h, label) {
s.addShape(pres.shapes.RECTANGLE, { x:x-0.01, y, w:0.04, h, fill:{color:COL.arrow}, line:{color:COL.arrow} });
// arrowhead triangle
s.addShape(pres.shapes.ISOSCELES_TRIANGLE, { x:x-0.09, y:y+h-0.01, w:0.22, h:0.14, fill:{color:COL.arrow}, line:{color:COL.arrow}, rotate:180 });
if (label) {
s.addText(label, { x:x+0.08, y:y+h/2-0.1, w:0.9, h:0.22, fontSize:8, color:"555555", fontFace:F, italic:true });
}
}
// Helper: side arrow (right)
function arrowRight(x, y, w, label) {
s.addShape(pres.shapes.RECTANGLE, { x, y:y-0.01, w, h:0.04, fill:{color:COL.arrow}, line:{color:COL.arrow} });
s.addShape(pres.shapes.ISOSCELES_TRIANGLE, { x:x+w-0.01, y:y-0.09, w:0.14, h:0.22, fill:{color:COL.arrow}, line:{color:COL.arrow}, rotate:90 });
if (label) {
s.addText(label, { x:x+w/2-0.3, y:y-0.22, w:0.8, h:0.2, fontSize:7.5, color:"555555", fontFace:F, italic:true, align:"center" });
}
}
// Helper: side arrow (left — for "Rejected" feedback)
function arrowLeft(x, y, w) {
s.addShape(pres.shapes.RECTANGLE, { x, y:y-0.01, w, h:0.04, fill:{color:"CC0000"}, line:{color:"CC0000"} });
s.addShape(pres.shapes.ISOSCELES_TRIANGLE, { x:x-0.13, y:y-0.09, w:0.14, h:0.22, fill:{color:"CC0000"}, line:{color:"CC0000"}, rotate:270 });
}
// ─────────────────────────────────────────────────────────────────────────────
// FLOWCHART NODES
// Layout: 3 columns flowing left→center→right in a Z/cascade pattern
// Left col x≈0.5, center x≈3.8, right col x≈9.2
// Vertical rows at y = 0.78, 1.62, 2.46, 3.30, 4.14, 4.98, 5.82, 6.55
// ─────────────────────────────────────────────────────────────────────────────
const BW = 2.55; // box width
const BH = 0.62; // box height
const DW = 2.3; // diamond width
const DH = 0.72; // diamond height
// ROW 1 — Start
const r1y = 0.78;
oval(5.4, r1y, 2.5, 0.52, "START: Drug Discovery / New Molecule Identified", "D6EAF8");
// Arrow down
arrowDown(6.65, r1y+0.52, 0.2);
// ROW 2 — Pre-clinical
const r2y = r1y + 0.52 + 0.2;
box(0.35, r2y, BW, BH, "Pre-Clinical Studies", "Animal pharmacology, toxicology\n& safety profiling", COL.process, BORDER);
box(5.4, r2y, 2.5, BH, "Pre-Clinical Studies", "Pharmacology · Toxicology · CMC · Safety in animals", COL.process, BORDER);
box(10.6, r2y, BW, BH, "Outcome", "Sufficient safety data\nto justify human trials?", COL.decision, BORDER);
// Annotations left and right
s.addText("Key data collected:", {x:0.4,y:r2y+0.04,w:BW-0.1,h:0.22,fontSize:8.5,bold:true,color:BLACK,fontFace:F});
s.addText("• Pharmacokinetics (ADME)\n• Acute & chronic toxicity\n• Genotoxicity / Carcinogenicity\n• Reproductive toxicity",{x:0.4,y:r2y+0.25,w:BW-0.1,h:BH-0.28,fontSize:8,color:"333333",fontFace:F});
// Arrow from pre-clinical box to decision
arrowRight(7.9, r2y+BH/2, 0.5);
// Decision diamond replacing the box on right
diamond(10.3, r2y-0.05, DW+0.2, DH, "Data\nSufficient?", COL.decision);
// Arrow down from pre-clinical centre
arrowDown(6.65, r2y+BH, 0.22);
// ROW 3 — IND Application
const r3y = r2y + BH + 0.22;
box(5.4, r3y, 2.5, BH, "IND Application Filed", "Sponsor submits to FDA (21 CFR Part 312)", COL.process, "2E86C1");
// Side note
s.addText("IND must include:\n• Pre-clinical data\n• CMC information\n• Clinical protocol\n• Investigator credentials\n• Informed consent docs",{x:8.18,y:r3y,w:2.5,h:BH+0.1,fontSize:8.5,color:BLACK,fontFace:F,
fill:{color:"EAF4FB"}, line:{color:BORDER,pt:0.5}
});
// bracket line connecting note to box
s.addShape(pres.shapes.RECTANGLE,{x:7.9,y:r3y+BH/2-0.01,w:0.28,h:0.04,fill:{color:BORDER},line:{color:BORDER}});
arrowDown(6.65, r3y+BH, 0.22);
// ROW 4 — FDA Review diamond
const r4y = r3y + BH + 0.22;
diamond(5.52, r4y, 2.26, DH, "FDA Review\n(30 days)", COL.decision);
// "Approved" arrow down
arrowDown(6.65, r4y+DH, 0.22);
s.addText("Approved /\nNo Objection",{x:6.72,y:r4y+DH/2,w:1.1,h:0.4,fontSize:8,color:"1A7E3C",fontFace:F,italic:true});
// "Rejected" arrow to left with label
arrowLeft(3.6, r4y+DH/2, 1.92);
s.addText("Rejected /\nMore Data",{x:3.55,y:r4y+DH/2-0.22,w:1.0,h:0.22,fontSize:8,color:"CC0000",fontFace:F,italic:true,align:"center"});
// ROW 5 — Phase I, II, III (horizontal flow)
const r5y = r4y + DH + 0.22;
box(0.35, r5y, BW, BH, "Phase I", "10–100 Healthy Volunteers\nSafety · Dose-finding · PK/PD", COL.phase1, "3BAA8C");
arrowRight(BW+0.35, r5y+BH/2, 0.25);
box(3.15, r5y, BW, BH, "Phase II", "50–500 Patients\nEfficacy signals + Safety", COL.phase2, "27AE60");
arrowRight(3.15+BW, r5y+BH/2, 0.25);
box(5.95, r5y, BW, BH, "Phase III", "Hundreds–Thousands Patients\nConfirm Efficacy & Safety\n(Randomised Controlled)", COL.phase3, "D4AC0D");
arrowRight(5.95+BW, r5y+BH/2, 0.25);
box(8.75, r5y, BW, BH, "NDA / BLA\nSubmission", "Sponsor submits to FDA\nwith full trial data", "FAE5D3", "E8873A");
arrowRight(8.75+BW, r5y+BH/2, 0.25);
// FDA Approval diamond
diamond(11.6, r5y-0.05, 1.5, DH, "FDA\nApproval?", COL.decision);
// Entry arrow from above into Phase I
arrowDown(1.67, r5y-0.22, 0.22);
// ROW 6 — Approved / Not Approved
const r6y = r5y + BH + 0.22;
// Arrow from approval diamond down-left to "Approved" box
// Arrow down from diamond (bottom)
arrowDown(12.35, r5y-0.05+DH, 0.22);
box(11.6, r6y, 1.7, BH, "APPROVED\nfor Marketing", "Drug enters\ncommercial market", COL.success, "1A7E3C");
// Not approved → back arrow
s.addShape(pres.shapes.RECTANGLE,{x:11.55,y:r5y+DH/2-0.05,w:1.6,h:0.04,fill:{color:"CC0000"},line:{color:"CC0000"}});
s.addText("Not Approved",{x:11.58,y:r5y+DH/2-0.24,w:1.5,h:0.22,fontSize:7.5,color:"CC0000",fontFace:F,italic:true,align:"center"});
arrowDown(12.35, r6y+BH, 0.2);
// ROW 7 — Phase IV
const r7y = r6y + BH + 0.2;
box(11.6, r7y, 1.7, BH, "Phase IV\n(Post-Marketing)", "Real-world safety\nNew indications · Long-term data", COL.phase4, "D95B5B");
// ── Final END oval
arrowDown(12.35, r7y+BH, 0.16);
oval(11.3, r7y+BH+0.16, 2.1, 0.42, "ONGOING PHARMACOVIGILANCE", COL.start);
// ── LEGEND ──
s.addShape(pres.shapes.RECTANGLE,{x:0.3,y:6.42,w:8.5,h:0.9,fill:{color:LGRAY},line:{color:BORDER,pt:0.5}});
s.addText("LEGEND:", {x:0.45,y:6.48,w:0.9,h:0.2,fontSize:8.5,bold:true,color:BLACK,fontFace:F});
const legItems = [
[COL.process,"Process / Step"],
[COL.decision,"Decision"],
[COL.phase1,"Phase I"],
[COL.phase2,"Phase II"],
[COL.phase3,"Phase III"],
[COL.success,"Approved"],
[COL.phase4,"Phase IV"],
];
legItems.forEach(([fill,label],i) => {
const lx = 0.42 + i*1.18;
s.addShape(pres.shapes.RECTANGLE,{x:lx,y:6.72,w:0.28,h:0.22,fill:{color:fill},line:{color:BORDER,pt:0.5}});
s.addText(label,{x:lx+0.32,y:6.72,w:0.85,h:0.22,fontSize:8,color:BLACK,fontFace:F,valign:"middle"});
});
// ─── WRITE ────────────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/investigational-drug-ppt/Investigational_Drug_Flowchart.pptx" })
.then(()=>console.log("SUCCESS"))
.catch(e=>console.error("ERROR:",e));
cd /home/daytona/workspace/investigational-drug-ppt && node flowchart.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Drug_Flowchart.pptx
Investigational Drug Flowchart
Presentation · PPTX
START (Oval)
↓
Pre-Clinical Studies
(Pharmacology · Toxicology · CMC · Animal Safety)
↓
IND Application Filed → [side note: what IND must include]
↓
FDA Review — 30 days (Diamond)
↙ Approved ↖ Rejected (red arrow back)
↓
Phase I → Phase II → Phase III → NDA/BLA Submission → FDA Approval? (Diamond)
↓ Approved
APPROVED for Marketing
↓
Phase IV (Post-Marketing)
↓
ONGOING PHARMACOVIGILANCE (Oval)
Can you still elaborate the content ain the slides youbhave preparedt
How many slides should the elaborated content span? · Should the style stay the same as the last version?
~/investigational-drug-ppt/build4.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
const F = "Times New Roman";
const BK = "000000";
const WH = "FFFFFF";
const GR = "555555";
const LN = "C8C8C8";
const LG = "F5F5F5";
// Soft pastel accents (borders & header bars only — never background)
const A = {
blue: "3A7BBF",
teal: "2E9E85",
orange: "D97A30",
purple: "7B5EA7",
green: "3A9E5F",
red: "C0392B",
navy: "1A3A6B",
};
// Card fill tints (barely visible — content-area backgrounds)
const T = {
blue: "EEF4FB",
teal: "EAF7F4",
orange: "FDF3EA",
purple: "F4EFF9",
green: "EAF6EF",
red: "FBF0EF",
plain: "F9F9F9",
};
// ── helpers ──────────────────────────────────────────────────────────────────
function bg(slide) {
slide.addShape(pres.shapes.RECTANGLE,{x:0,y:0,w:13.3,h:7.5,fill:{color:WH},line:{color:WH}});
}
function topBar(slide, col) {
slide.addShape(pres.shapes.RECTANGLE,{x:0,y:0,w:13.3,h:0.09,fill:{color:col||A.blue},line:{color:col||A.blue}});
}
function footer(slide) {
slide.addShape(pres.shapes.RECTANGLE,{x:0,y:7.4,w:13.3,h:0.1,fill:{color:LG},line:{color:LN}});
slide.addText("B.Pharmacy Final Year | Pharmacy Practice | Investigational Use of Drugs",
{x:0,y:7.4,w:13.3,h:0.1,fontSize:7,color:GR,align:"center",valign:"middle",fontFace:F});
}
function pageNum(slide, n) {
slide.addText(`${n} / 2`,{x:12.5,y:0.13,w:0.7,h:0.25,fontSize:8.5,color:GR,align:"right",fontFace:F});
}
function heading(slide, txt, x, y, col) {
slide.addText(txt,{x,y,w:13.3-x*2,h:0.32,fontSize:11,bold:true,color:BK,fontFace:F});
slide.addShape(pres.shapes.RECTANGLE,{x,y:y+0.33,w:13.3-x*2-0.1,h:0.025,fill:{color:col},line:{color:col}});
}
// Section label pill
function secPill(slide, x, y, w, label, col) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE,{x,y,w,h:0.27,fill:{color:col},line:{color:col},rectRadius:0.06});
slide.addText(label,{x,y,w,h:0.27,fontSize:8.5,bold:true,color:WH,align:"center",valign:"middle",margin:0,fontFace:F});
}
// Bordered card
function card(slide, x, y, w, h, fill, lineCol) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE,{
x,y,w,h,
fill:{color:fill||T.plain},
line:{color:lineCol||LN, pt:0.8},
rectRadius:0.06,
shadow:{type:"outer",color:"CCCCCC",blur:3,offset:1,angle:135,opacity:0.2}
});
}
// Key-value row inside a card
function kv(slide, x, y, w, key, val, keyCol) {
slide.addText(key,{x,y,w:2.0,h:0.22,fontSize:9,bold:true,color:keyCol||BK,fontFace:F,valign:"top"});
slide.addText(":",{x:x+2.0,y,w:0.15,h:0.22,fontSize:9,color:BK,fontFace:F});
slide.addText(val,{x:x+2.18,y,w:w-2.2,h:0.22,fontSize:9,color:BK,fontFace:F,valign:"top"});
}
// Bullet row
function bul(slide, x, y, w, items, col) {
const rich = items.map((t,i)=>({
text: t,
options:{ bullet:{type:"bullet"}, breakLine: i<items.length-1, fontSize:9.5, color:BK, fontFace:F }
}));
slide.addText(rich,{x,y,w,h:items.length*0.27,paraSpaceAfter:2});
}
// Small label above a box
function label(slide, x, y, w, txt_, col) {
slide.addText(txt_,{x,y,w,h:0.22,fontSize:9,bold:true,color:col||BK,fontFace:F});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — Description · Principles · Classification
// ══════════════════════════════════════════════════════════════════════════════
const s1 = pres.addSlide();
bg(s1);
topBar(s1, A.navy);
footer(s1);
pageNum(s1, 1);
// Main title
s1.addText("Investigational Use of Drugs",{
x:0.25,y:0.1,w:11.5,h:0.48,fontSize:20,bold:true,color:BK,fontFace:F
});
s1.addShape(pres.shapes.RECTANGLE,{x:0.25,y:0.6,w:7.0,h:0.04,fill:{color:A.navy},line:{color:A.navy}});
// ─── SECTION 01 — DESCRIPTION ────────────────────────────────────────────────
secPill(s1, 0.2, 0.72, 1.6, "01 Description", A.blue);
card(s1, 0.2, 1.04, 4.2, 2.2, T.blue, A.blue);
s1.addText("Definition",{x:0.35,y:1.08,w:4.0,h:0.24,fontSize:10,bold:true,color:BK,fontFace:F});
s1.addShape(pres.shapes.RECTANGLE,{x:0.35,y:1.32,w:4.0,h:0.02,fill:{color:A.blue},line:{color:A.blue}});
s1.addText(
"An investigational drug is any chemical or biological substance being evaluated in human subjects to determine its safety and efficacy. It has not yet received approval from a regulatory authority — such as the U.S. FDA or India's CDSCO — for general commercial use. The term also covers approved drugs being studied for a new indication, new dosage form, or new population.",
{x:0.35,y:1.36,w:3.95,h:1.84,fontSize:9.5,color:BK,fontFace:F,wrapText:true,valign:"top"}
);
card(s1, 4.6, 1.04, 4.2, 2.2, T.teal, A.teal);
s1.addText("Scope of Investigational Use",{x:4.75,y:1.08,w:4.0,h:0.24,fontSize:10,bold:true,color:BK,fontFace:F});
s1.addShape(pres.shapes.RECTANGLE,{x:4.75,y:1.32,w:4.0,h:0.02,fill:{color:A.teal},line:{color:A.teal}});
s1.addText([
{text:"• New Chemical Entities (NCE):",options:{bold:true,color:BK,fontSize:9.5,fontFace:F}},
{text:" Brand-new molecules never tested in humans; only pre-clinical data available.\n",options:{color:BK,fontSize:9.5,fontFace:F}},
{text:"• Approved Drug — New Use:",options:{bold:true,color:BK,fontSize:9.5,fontFace:F}},
{text:" Existing drug studied for new indication, route, dose or population (e.g. thalidomide).\n",options:{color:BK,fontSize:9.5,fontFace:F}},
{text:"• Expanded / Compassionate Use:",options:{bold:true,color:BK,fontSize:9.5,fontFace:F}},
{text:" Serious/life-threatening illness with no alternative — access before formal approval.\n",options:{color:BK,fontSize:9.5,fontFace:F}},
{text:"• Off-Label Under Investigation:",options:{bold:true,color:BK,fontSize:9.5,fontFace:F}},
{text:" Approved drug used beyond its label under a formal IRB-approved study.",options:{color:BK,fontSize:9.5,fontFace:F}},
],{x:4.75,y:1.36,w:3.95,h:1.84,valign:"top"});
card(s1, 9.0, 1.04, 4.1, 2.2, T.orange, A.orange);
s1.addText("IND Application Requirements",{x:9.15,y:1.08,w:3.9,h:0.24,fontSize:10,bold:true,color:BK,fontFace:F});
s1.addShape(pres.shapes.RECTANGLE,{x:9.15,y:1.32,w:3.9,h:0.02,fill:{color:A.orange},line:{color:A.orange}});
s1.addText([
{text:"Before any human trial, the sponsor files an IND with the FDA (21 CFR Part 312). It must include:\n",options:{color:BK,fontSize:9.5,fontFace:F}},
{text:"• Pre-clinical pharmacology & toxicology data\n• Chemistry, Manufacturing & Controls (CMC)\n• Proposed clinical protocol and design\n• Investigator qualifications and credentials\n• Informed consent documents\n• FDA reviews within 30 days — no objection = proceed",options:{color:BK,fontSize:9.5,fontFace:F}},
],{x:9.15,y:1.36,w:3.9,h:1.84,valign:"top"});
// ─── SECTION 02 — PRINCIPLES ─────────────────────────────────────────────────
secPill(s1, 0.2, 3.38, 2.0, "02 Principles Involved", A.teal);
const princ = [
["Declaration of Helsinki", A.teal, T.teal,
"The foundational ethical document for clinical research (WMA, 1964; revised 2013). Core mandates: (1) Welfare of the individual subject must always take priority over the interests of science and society. (2) Informed, voluntary consent must be obtained before any research activity. (3) Research must be scientifically valid and conducted by qualified persons. (4) Risks must be minimised and must not outweigh potential benefits."],
["Good Clinical Practice (GCP)", A.blue, T.blue,
"ICH-E6 is the internationally accepted standard governing the design, conduct, recording and reporting of clinical trials. It ensures subject rights, safety and well-being are protected and that trial data are credible and accurate. Compliance with GCP is legally required in all ICH member countries and is mandatory for regulatory submission."],
["Informed Consent", A.orange, T.orange,
"Every participant must provide written, voluntary informed consent before enrolment. The consent form must clearly explain: purpose of the study; all foreseeable risks and discomforts; expected benefits; available alternative treatments; the right to withdraw at any time without penalty; and confidentiality protections. Consent must never be coerced and must be obtained BEFORE any study-related procedure."],
["Risk-Benefit Balance", A.purple, T.purple,
"Mandated by the Harris-Kefauver Amendments (1962) following the thalidomide tragedy. A drug cannot be tested unless pre-clinical studies suggest plausible benefit AND the risk level is acceptable given the disease severity. The more serious the disease, the greater the acceptable risk. This framework is embedded in all IND applications."],
["IRB / Ethics Committee Oversight", A.green, T.green,
"An Institutional Review Board (IRB) or Institutional Ethics Committee (IEC) independently reviews every study protocol and consent form before any trial begins. It conducts continuing annual reviews and can place a clinical hold, modify, suspend or terminate any trial if unanticipated safety risks emerge. IRB membership must include scientists, non-scientists and at least one community member unaffiliated with the institution."],
["Scientific Validity", A.red, T.red,
"A scientifically flawed study is itself an ethical violation — it exposes participants to risk without producing useful knowledge. Valid research requires: appropriate sample size calculation; proper randomisation and control groups; blinding (where applicable) to reduce bias; clearly defined primary and secondary endpoints; and pre-specified statistical analysis plans. Regulatory agencies will reject data from poorly designed trials."],
];
princ.forEach(([title, acol, fill, desc], i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.2 + col * 4.35;
const y = 3.7 + row * 1.68;
card(s1, x, y, 4.2, 1.58, fill, acol);
s1.addText(title,{x:x+0.12,y:y+0.06,w:3.96,h:0.26,fontSize:9.5,bold:true,color:BK,fontFace:F});
s1.addShape(pres.shapes.RECTANGLE,{x:x+0.12,y:y+0.33,w:3.96,h:0.02,fill:{color:acol},line:{color:acol}});
s1.addText(desc,{x:x+0.12,y:y+0.37,w:3.96,h:1.16,fontSize:8.8,color:BK,fontFace:F,wrapText:true,valign:"top"});
});
// ─── SECTION 03 — CLASSIFICATION (inline row at bottom) ──────────────────────
secPill(s1, 0.2, 7.05, 2.1, "03 Classification", A.orange);
// Inline in footer band — overflow to Slide 2 top note says "continued below"
s1.addText("→ Classification of Investigational Drugs continues on Slide 2",
{x:2.5,y:7.05,w:7.5,h:0.27,fontSize:8.5,color:GR,fontFace:F,italic:true});
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — Classification (full) · Control · Identification · Pharmacist · Advisory
// ══════════════════════════════════════════════════════════════════════════════
const s2 = pres.addSlide();
bg(s2);
topBar(s2, A.teal);
footer(s2);
pageNum(s2, 2);
s2.addText("Investigational Use of Drugs",{
x:0.25,y:0.1,w:11.5,h:0.48,fontSize:20,bold:true,color:BK,fontFace:F
});
s2.addShape(pres.shapes.RECTANGLE,{x:0.25,y:0.6,w:7.0,h:0.04,fill:{color:A.teal},line:{color:A.teal}});
// ─── SECTION 03 — CLASSIFICATION ─────────────────────────────────────────────
secPill(s2, 0.2, 0.72, 1.8, "03 Classification", A.orange);
const cls = [
["Class I — New Chemical Entities (NCE)", A.blue, T.blue,
"Completely new molecules never previously tested in humans. Only pre-clinical (animal) data exists at this stage. These carry the highest level of uncertainty and require the most rigorous monitoring protocols. Examples include first-in-class kinase inhibitors entering Phase I trials for the first time."],
["Class II — Approved Drug, New Use", A.teal, T.teal,
"Drugs already approved and marketed for one indication now being studied for: a new disease indication; a new route of administration; a new dosage form or strength; or a new patient population (e.g. paediatrics, pregnancy). Even though the drug's basic safety profile is known, the new use requires a fresh IND as the risk-benefit profile may differ significantly."],
["Class III — Treatment IND / Expanded Access", A.orange, T.orange,
"Covers situations where patients with serious or life-threatening conditions have no satisfactory alternative and the investigational drug has shown sufficient promise. The FDA allows three types: (1) individual patient access (including emergency use); (2) intermediate-size patient populations; (3) widespread access via a Treatment IND or Treatment Protocol. Requires IRB and FDA approval."],
["Class IV — Off-Label Use Under Investigation", A.purple, T.purple,
"These are drugs used outside their approved indications but under systematic formal investigation to generate evidence. While off-label prescribing itself is not illegal, conducting a formal study to validate such use requires IRB oversight, informed consent from every participant, and typically an IND application depending on the risk level of the new use."],
];
cls.forEach(([title, acol, fill, desc], i) => {
const x = 0.2 + i * 3.27;
card(s2, x, 1.03, 3.12, 1.62, fill, acol);
s2.addShape(pres.shapes.RECTANGLE,{x,y:1.03,w:3.12,h:0.3,fill:{color:acol},line:{color:acol}});
s2.addText(title,{x:x+0.08,y:1.03,w:2.96,h:0.3,fontSize:9,bold:true,color:WH,valign:"middle",margin:3,fontFace:F});
s2.addText(desc,{x:x+0.1,y:1.36,w:2.92,h:1.26,fontSize:8.8,color:BK,fontFace:F,wrapText:true,valign:"top"});
});
// ─── LEFT COLUMN: CONTROL + IDENTIFICATION ───────────────────────────────────
secPill(s2, 0.2, 2.82, 1.4, "04 Control", A.teal);
const ctrlRows = [
["Acquisition & Receipt",
"The investigational drug must be received exclusively by the pharmacy department or the designated Investigational Drug Service (IDS). Upon receipt, the pharmacist verifies the drug against the sponsor's shipping manifest, documents lot numbers, expiry dates, quantity received, and transport conditions (temperature excursion records)."],
["Storage",
"Drug must be stored strictly per sponsor specifications (temperature range, light sensitivity, humidity). Controlled substances require a separate locked, limited-access storage area per DEA/regulatory requirements. Investigational drugs must be physically segregated from commercial medications to prevent mix-ups. Temperature excursion logs must be maintained at all times."],
["Dispensing",
"Investigational drugs may only be dispensed upon receipt of a valid prescription or physician's order signed by the Principal Investigator (PI) or their authorised designee. The pharmacist must confirm the patient's enrolment in the study and verify that a valid, current informed consent is on file before every dispensing event."],
["Drug Accountability Records (DAR)",
"A perpetual DAR must track every unit from receipt to final disposition: date and quantity received; patient identifiers and dispensing dates; quantities returned by patients; lot numbers; drug returns to sponsor; and destruction records. Records must be retained for 2 years after the marketing application is approved or if not approved, 2 years after investigation is discontinued."],
["Returns & Destruction",
"Unused investigational drug is generally returned to the sponsor at defined intervals or at study closure. If on-site destruction is authorised, it must be documented in writing and performed per applicable hazardous waste or pharmaceutical disposal regulations. Under no circumstances may investigational drugs be discarded as regular waste without written sponsor authorisation."],
];
ctrlRows.forEach(([key, val], i) => {
const y = 3.13 + i * 0.66;
const fill = i%2===0 ? T.teal : WH;
s2.addShape(pres.shapes.RECTANGLE,{x:0.2,y,w:6.35,h:0.6,fill:{color:fill},line:{color:LN,pt:0.6}});
s2.addText(key,{x:0.3,y:y+0.04,w:1.9,h:0.52,fontSize:8.8,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true});
s2.addShape(pres.shapes.RECTANGLE,{x:2.25,y:y+0.09,w:0.03,h:0.42,fill:{color:A.teal},line:{color:A.teal}});
s2.addText(val,{x:2.32,y:y+0.04,w:4.15,h:0.52,fontSize:8.5,color:BK,fontFace:F,valign:"top",wrapText:true});
});
secPill(s2, 0.2, 6.45, 1.8, "05 Identification", A.purple);
const idRows = [
["Mandatory Labeling (21 CFR 312)",
"Every investigational drug package must bear: 'CAUTION: New Drug — Limited by Federal law to Investigational Use'; sponsor name and address; IND/Protocol number; name of PI; storage conditions; lot/batch number; expiry date (if available); quantity and strength. In blinded trials, the drug name is replaced by a randomisation/subject code."],
["Physical ID Challenges",
"Unlike commercial drugs, investigational products often lack distinguishing visual features — no colour coding, no imprinted identification codes, no tall man lettering — because blinding requirements demand identical appearance between active and placebo. Staff must rely entirely on protocol documentation, system alerts and procedural controls, never on visual identification alone."],
["System-Based Controls",
"Pharmacy information systems must be configured with investigational drug identifiers, protocol numbers and list of authorised prescribers. Barcode scanning provides an additional verification layer. A minimum of two patient identifiers must be verified before every dispensing event. Protocol binders or electronic access to the Investigator's Brochure must be available in the dispensing area at all times."],
];
idRows.forEach(([key, val], i) => {
const y = 6.76 + i * 0.0; // we only have room for a compact version
// Use a single combined card since vertical space is tight — embed all three as a mini-table
});
// Since space is tight in slide 2 bottom-left, render identification as a compact 3-row table
idRows.forEach(([key,val],i)=>{
const y = 6.77 - (idRows.length-1-i)*0.0; // recalculate below
});
// Recalculate with actual y
const idStartY = 6.76;
idRows.forEach(([key,val],i)=>{
// Won't fit 3 full rows — use 1 merged card with 3 labeled points
});
// Use one card spanning the remaining space
card(s2, 0.2, 6.76, 6.35, 0.56, T.purple, A.purple);
s2.addText([
{text:"Labeling: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"'Investigational Use Only' + Sponsor + IND# + PI + Storage + Lot + Expiry + Strength. ",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"ID Challenge: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"No visual cues in blinded trials — rely on protocol docs + barcode scan + 2-patient identifier verification before every dispense.",options:{fontSize:8.5,color:BK,fontFace:F}},
],{x:0.32,y:6.78,w:6.1,h:0.5,valign:"middle",wrapText:true});
// ─── RIGHT COLUMN: PHARMACIST + ADVISORY ─────────────────────────────────────
secPill(s2, 6.75, 2.82, 2.8, "06 Role of Hospital Pharmacist", A.blue);
const pharma = [
["Protocol Review & Feasibility",
"Before any trial begins, the IDS pharmacist reviews the proposed protocol for pharmaceutical feasibility — assessing drug compatibility, stability, dosage preparation complexity, and storage requirements. Potential medication-related safety concerns are flagged and resolved before ethics approval is sought."],
["Regulatory Compliance",
"Ensures the institution complies with 21 CFR Part 312, ICH-GCP guidelines, Joint Commission Medication Management standard MM.06.01.05, and all applicable institutional SOPs. The pharmacist is the designated responsible party for storage and distributive activities of investigational drugs."],
["Procurement, Inventory & Dispensing",
"Coordinates receipt of the investigational drug, maintains a perpetual inventory, notifies the PI when stock reaches a preset minimum, and dispenses exclusively to enrolled, consented patients on valid investigator orders. Prepares the drug including sterile compounding when required, following GMP standards."],
["Patient Counselling",
"Counsels patients on: correct administration (how, when, with/without food); home storage requirements; side effects to monitor and when to contact the study team; the importance of returning all unused drug at each visit; and their unconditional right to withdraw from the study at any time without affecting their routine care."],
["ADR Monitoring & Reporting",
"Participates in ongoing safety surveillance throughout the trial. Identifies, documents and reports Adverse Drug Reactions (ADRs) and Serious Adverse Events (SAEs) to the sponsor and regulatory authority within mandated timeframes. Helps the clinical team distinguish drug-related events from disease-related changes."],
["Drug Information & Staff Training",
"Serves as the primary information resource for the entire care team — providing data on the drug's mechanism, dosing, interactions, and handling from the Investigator's Brochure. Trains all pharmacy and relevant study staff per protocol, maintains training records, and manages emergency unblinding with full documentation when clinically necessary."],
];
pharma.forEach(([key,val],i)=>{
const col = i%2, row = Math.floor(i/2);
const x = 6.75 + col*3.27;
const y = 3.13 + row*0.98;
const fill = row%2===0 ? T.blue : WH;
s2.addShape(pres.shapes.RECTANGLE,{x,y,w:3.12,h:0.9,fill:{color:fill},line:{color:LN,pt:0.6}});
s2.addText(key,{x:x+0.1,y:y+0.04,w:2.92,h:0.24,fontSize:8.8,bold:true,color:BK,fontFace:F});
s2.addText(val,{x:x+0.1,y:y+0.28,w:2.92,h:0.59,fontSize:8.2,color:BK,fontFace:F,wrapText:true,valign:"top"});
});
secPill(s2, 6.75, 6.09, 2.4, "07 Advisory Committee", A.orange);
const adv = [
["FDA Advisory Committee","External expert panels evaluate clinical trial data and make non-binding approval recommendations. Panels include therapeutic specialists, statisticians, consumer reps and patient advocates. Public meetings ensure transparency. The FDA follows committee recommendations in the majority of cases."],
["IRB / Ethics Committee","Mandatory independent review body that approves protocols before trial start, conducts annual continuing reviews, and can suspend or terminate a trial if risks emerge. Must include scientists, non-scientists and an unaffiliated community member."],
["P&T Committee","Hospital Pharmacy and Therapeutics Committee reviews and approves institutional policies for investigational drug handling, ensures alignment with the hospital formulary, and reviews ongoing trial safety data to guide formulary decisions post-approval."],
["DSMB & SRC","Data Safety Monitoring Board (DSMB): independent body for larger trials; reviews interim unblinded safety/efficacy data at set intervals; can recommend early termination. Scientific Review Committee (SRC): evaluates scientific merit and feasibility before IRB submission — the IDS pharmacist is a key SRC member."],
];
adv.forEach(([key,val],i)=>{
const col = i%2, row = Math.floor(i/2);
const x = 6.75 + col*3.27;
const y = 6.38 + row*0.5;
const fill = col===0 ? T.orange : WH;
s2.addShape(pres.shapes.RECTANGLE,{x,y,w:3.12,h:0.44,fill:{color:fill},line:{color:LN,pt:0.6}});
s2.addText(key,{x:x+0.1,y:y+0.02,w:0.9,h:0.4,fontSize:8.5,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true});
s2.addShape(pres.shapes.RECTANGLE,{x:x+1.05,y:y+0.06,w:0.025,h:0.3,fill:{color:A.orange},line:{color:A.orange}});
s2.addText(val,{x:x+1.1,y:y+0.02,w:1.95,h:0.4,fontSize:8,color:BK,fontFace:F,valign:"top",wrapText:true});
});
// ─── WRITE ────────────────────────────────────────────────────────────────────
pres.writeFile({fileName:"/home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_Elaborated.pptx"})
.then(()=>console.log("SUCCESS"))
.catch(e=>console.error("ERROR:",e));
cd /home/daytona/workspace/investigational-drug-ppt && node build4.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_Elaborated.pptx
Investigational Drugs Elaborated
Presentation · PPTX
Everything is ok but the alignment and some content are hided behind some topic and also add my name at the 1st slide right side topas Sruthika G
~/investigational-drug-ppt/build5.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5 inches
const F = "Times New Roman";
const BK = "000000";
const WH = "FFFFFF";
const GR = "666666";
const LN = "BBBBBB";
// Accent colors - used only for borders and section header bars
const A = {
navy: "1A3A6B",
blue: "2E6FAD",
teal: "217A65",
orange: "C2651A",
purple: "6B4A99",
green: "2E8050",
red: "B03030",
};
// Very faint tints for card backgrounds
const T = {
blue: "EEF4FB",
teal: "EAF6F2",
orange: "FBF2E8",
purple: "F2EEF8",
green: "EAF5EF",
red: "F9EDED",
plain: "F8F8F8",
};
// ── layout constants ─────────────────────────────────────────────────────────
// Slide: 13.3 wide x 7.5 tall
// Top bar: 0.0 – 0.09
// Slide title area: 0.12 – 0.68
// Content starts: 0.75
// Footer: 7.36 – 7.5 (reserved, do NOT place content below 7.32)
function bg(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:0,w:13.3,h:7.5, fill:{color:WH}, line:{color:WH} });
}
function topBar(slide, col) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:0,w:13.3,h:0.09, fill:{color:col}, line:{color:col} });
}
function footer(slide) {
slide.addShape(pres.shapes.RECTANGLE, { x:0,y:7.36,w:13.3,h:0.14, fill:{color:"F0F0F0"}, line:{color:LN} });
slide.addText("B.Pharmacy Final Year | Pharmacy Practice | Investigational Use of Drugs", {
x:0,y:7.36,w:13.3,h:0.14, fontSize:7, color:GR, align:"center", valign:"middle", fontFace:F
});
}
// Section pill label
function pill(slide, x, y, w, label, col) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, { x,y,w,h:0.26, fill:{color:col}, line:{color:col}, rectRadius:0.05 });
slide.addText(label, { x,y,w,h:0.26, fontSize:8.5, bold:true, color:WH, align:"center", valign:"middle", margin:0, fontFace:F });
}
// Bordered card (rounded rect)
function card(slide, x, y, w, h, fill, lineCol) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h,
fill:{ color: fill || T.plain },
line:{ color: lineCol || LN, pt:0.8 },
rectRadius: 0.06,
shadow:{ type:"outer", color:"CCCCCC", blur:3, offset:1, angle:135, opacity:0.18 }
});
}
// Thin color accent bar inside a card (top edge)
function cardTopAccent(slide, x, y, w, col) {
slide.addShape(pres.shapes.RECTANGLE, { x,y,w,h:0.035, fill:{color:col}, line:{color:col} });
}
// Bold heading inside a card
function cardHead(slide, x, y, w, text, col) {
slide.addText(text, { x,y,w,h:0.25, fontSize:9.5, bold:true, color:BK, fontFace:F });
slide.addShape(pres.shapes.RECTANGLE, { x,y:y+0.26,w,h:0.02, fill:{color:col}, line:{color:col} });
}
// Body text inside a card
function cardBody(slide, x, y, w, h, text) {
slide.addText(text, { x,y,w,h, fontSize:8.8, color:BK, fontFace:F, valign:"top", wrapText:true });
}
// Row in a table-style layout (alternating fill)
function tableRow(slide, x, y, w, h, keyW, key, val, acol, even) {
slide.addShape(pres.shapes.RECTANGLE, { x,y,w,h, fill:{color: even ? T.teal : WH }, line:{color:LN, pt:0.5} });
slide.addText(key, { x:x+0.1,y:y+0.04,w:keyW-0.1,h:h-0.08, fontSize:8.8, bold:true, color:BK, fontFace:F, valign:"top", wrapText:true });
slide.addShape(pres.shapes.RECTANGLE, { x:x+keyW,y:y+0.07,w:0.025,h:h-0.14, fill:{color:acol}, line:{color:acol} });
slide.addText(val, { x:x+keyW+0.07,y:y+0.04,w:w-keyW-0.1,h:h-0.08, fontSize:8.5, color:BK, fontFace:F, valign:"top", wrapText:true });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — Description | Principles | Classification
// Layout plan (y-positions):
// 0.00 – 0.09 top bar
// 0.10 – 0.55 slide title + student name
// 0.58 – 0.61 title underline
// 0.65 – 0.90 Section 01 pill + 3 description cards (h=1.72 each)
// 0.93 – 2.65 Description cards
// 2.70 – 2.96 Section 02 pill + 6 principle cards (2 rows of 3)
// 3.00 – 4.52 Principle cards row 1 (h=1.48)
// 4.58 – 6.06 Principle cards row 2 (h=1.48)
// 6.10 – 6.34 Section 03 pill + 4 class cards (h=1.00)
// 6.38 – 7.30 Classification cards
// 7.36 – 7.50 footer
// ══════════════════════════════════════════════════════════════════════════════
const s1 = pres.addSlide();
bg(s1);
topBar(s1, A.navy);
footer(s1);
// Slide title
s1.addText("Investigational Use of Drugs", {
x:0.25, y:0.12, w:9.5, h:0.44,
fontSize:19, bold:true, color:BK, fontFace:F
});
// Student name — top right
s1.addText("Sruthika G", {
x:10.5, y:0.12, w:2.6, h:0.44,
fontSize:13, bold:true, color:A.navy, fontFace:F, align:"right"
});
s1.addText("B.Pharmacy Final Year", {
x:10.5, y:0.54, w:2.6, h:0.18,
fontSize:8, color:GR, fontFace:F, align:"right", italic:true
});
// Underline
s1.addShape(pres.shapes.RECTANGLE, { x:0.25,y:0.58,w:9.8,h:0.035, fill:{color:A.navy}, line:{color:A.navy} });
// Slide number
s1.addText("1 / 2", { x:12.7,y:0.13,w:0.5,h:0.22, fontSize:8, color:GR, align:"right", fontFace:F });
// ─── SECTION 01 — DESCRIPTION ────────────────────────────────────────────────
pill(s1, 0.22, 0.68, 1.65, "01 Description", A.blue);
const descY = 0.98;
const descH = 1.7;
// Card 1 — Definition
card(s1, 0.22, descY, 4.18, descH, T.blue, A.blue);
cardTopAccent(s1, 0.22, descY, 4.18, A.blue);
cardHead(s1, 0.34, descY+0.06, 3.94, "What is an Investigational Drug?", A.blue);
cardBody(s1, 0.34, descY+0.32, 3.94, 1.32,
"An investigational drug is any chemical or biological substance being evaluated in human subjects to determine its safety and efficacy. It has NOT yet received approval from the FDA (USA) or CDSCO (India) for general commercial use. The term also includes approved drugs being studied for a new indication, new dosage form, new route or a new patient population."
);
// Card 2 — Scope
card(s1, 4.56, descY, 4.18, descH, T.teal, A.teal);
cardTopAccent(s1, 4.56, descY, 4.18, A.teal);
cardHead(s1, 4.68, descY+0.06, 3.94, "Scope of Investigational Use", A.teal);
s1.addText([
{text:"• NCE (New Chemical Entity): ",options:{bold:true,fontSize:8.8,color:BK,fontFace:F}},
{text:"Brand-new molecules; only pre-clinical data available.\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Approved Drug — New Use: ",options:{bold:true,fontSize:8.8,color:BK,fontFace:F}},
{text:"Existing drug studied for a new indication, route or population (e.g., thalidomide for myeloma).\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Expanded / Compassionate Use: ",options:{bold:true,fontSize:8.8,color:BK,fontFace:F}},
{text:"Serious illness, no alternative — access before formal approval.\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Off-Label Under Investigation: ",options:{bold:true,fontSize:8.8,color:BK,fontFace:F}},
{text:"Approved drug used beyond its label under a formal IRB-approved study.",options:{fontSize:8.8,color:BK,fontFace:F}},
], { x:4.68, y:descY+0.32, w:3.94, h:1.32, valign:"top" });
// Card 3 — IND Requirements
card(s1, 8.9, descY, 4.18, descH, T.orange, A.orange);
cardTopAccent(s1, 8.9, descY, 4.18, A.orange);
cardHead(s1, 9.02, descY+0.06, 3.94, "IND Application Requirements", A.orange);
s1.addText([
{text:"Before any human trial, the sponsor files an IND with the FDA (21 CFR Part 312):\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Pre-clinical pharmacology & toxicology data\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Chemistry, Manufacturing & Controls (CMC)\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Proposed clinical protocol design\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Investigator qualifications & credentials\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• Informed consent documents\n",options:{fontSize:8.8,color:BK,fontFace:F}},
{text:"• FDA reviews within 30 days — no objection = proceed to trial",options:{fontSize:8.8,color:BK,fontFace:F}},
], { x:9.02, y:descY+0.32, w:3.94, h:1.32, valign:"top" });
// ─── SECTION 02 — PRINCIPLES ─────────────────────────────────────────────────
pill(s1, 0.22, 2.82, 2.1, "02 Principles Involved", A.teal);
const pY1 = 3.13; // row 1 start
const pY2 = 4.64; // row 2 start
const pH = 1.46; // card height
const pW = 4.18; // card width
const pGap= 4.34; // column spacing
const princData = [
["Declaration of Helsinki", A.teal, T.teal,
"Foundational ethical framework (WMA, 1964; revised 2013).\n• Welfare of individual subject > interests of science\n• Voluntary informed consent mandatory before any procedure\n• Research must be scientifically sound and conducted by qualified investigators\n• Risks must be minimised and must not outweigh potential benefits"],
["Good Clinical Practice (GCP)", A.blue, T.blue,
"ICH-E6 international standard for designing, conducting, recording and reporting clinical trials. Ensures subject rights, safety and well-being are protected, and that all trial data are credible and accurate. Compliance is legally required in all ICH member countries and is mandatory for regulatory submissions."],
["Informed Consent", A.orange, T.orange,
"Every participant must provide written, voluntary consent before enrolment. Consent form must explain: study purpose; all risks and discomforts; expected benefits; available alternatives; right to withdraw at any time without penalty; and confidentiality protections. Consent must never be coerced."],
["Risk-Benefit Balance", A.purple, T.purple,
"Mandated by Harris-Kefauver Amendments (1962) after the thalidomide tragedy. A drug cannot be tested in humans unless pre-clinical studies suggest plausible benefit AND the risk level is acceptable relative to disease severity. The more serious the disease, the greater the acceptable risk threshold."],
["IRB / Ethics Committee Oversight", A.green, T.green,
"Independently reviews every study protocol and consent form before trial begins. Conducts annual continuing reviews. Can place a clinical hold, modify, suspend or terminate any trial if unanticipated safety risks emerge. Membership must include scientists, non-scientists and an unaffiliated community member."],
["Scientific Validity", A.red, T.red,
"A scientifically flawed study is itself an ethical violation — it exposes participants to risk without yielding useful knowledge. Valid research requires: adequate sample size; proper randomisation and controls; blinding where applicable; clearly defined endpoints; and pre-specified statistical analysis plans."],
];
princData.forEach(([title, acol, fill, desc], i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.22 + col * pGap;
const y = row === 0 ? pY1 : pY2;
card(s1, x, y, pW, pH, fill, acol);
cardTopAccent(s1, x, y, pW, acol);
cardHead(s1, x+0.12, y+0.06, pW-0.24, title, acol);
cardBody(s1, x+0.12, y+0.32, pW-0.24, pH-0.36, desc);
});
// ─── SECTION 03 — CLASSIFICATION ─────────────────────────────────────────────
pill(s1, 0.22, 6.23, 1.8, "03 Classification", A.orange);
const clsY = 6.53;
const clsH = 0.78;
const clsW = 3.19;
const clsData = [
["Class I — New Chemical Entity", A.blue, T.blue,
"Brand-new molecules; never tested in humans. Only pre-clinical data available. Highest uncertainty — most rigorous monitoring required. Typical example: a first-in-class kinase inhibitor entering Phase I."],
["Class II — Approved Drug, New Use", A.teal, T.teal,
"Existing approved drug studied for a new indication, route, dose or population (e.g., thalidomide for multiple myeloma). Fresh IND required because the risk-benefit profile for the new use may differ significantly."],
["Class III — Treatment IND / Expanded Access", A.orange, T.orange,
"Serious/life-threatening illness with no satisfactory alternative. Three types: (1) individual patient access including emergency use; (2) intermediate-size population; (3) widespread access via Treatment IND or Treatment Protocol. Requires FDA and IRB approval."],
["Class IV — Off-Label Under Investigation", A.purple, T.purple,
"Approved drug used beyond its labelled indication under formal study to generate scientific evidence. Requires IRB oversight, informed consent from all participants, and typically an IND application depending on the risk level of the new use being studied."],
];
clsData.forEach(([title, acol, fill, desc], i) => {
const x = 0.22 + i * (clsW + 0.09);
card(s1, x, clsY, clsW, clsH, fill, acol);
s1.addShape(pres.shapes.RECTANGLE, { x,y:clsY,w:clsW,h:0.27, fill:{color:acol}, line:{color:acol} });
s1.addText(title, { x:x+0.08,y:clsY,w:clsW-0.16,h:0.27, fontSize:8.5, bold:true, color:WH, valign:"middle", margin:2, fontFace:F });
cardBody(s1, x+0.08, clsY+0.3, clsW-0.16, clsH-0.34, desc);
});
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — Control | Identification | Hospital Pharmacist | Advisory Committee
// Layout plan:
// 0.00 – 0.09 top bar
// 0.10 – 0.55 slide title
// 0.58 underline
// Left col x=0.22 w=6.30
// Right col x=6.78 w=6.30
// Both cols end at y=7.32 (above footer)
// ══════════════════════════════════════════════════════════════════════════════
const s2 = pres.addSlide();
bg(s2);
topBar(s2, A.teal);
footer(s2);
s2.addText("Investigational Use of Drugs", {
x:0.25,y:0.12,w:9.5,h:0.44, fontSize:19,bold:true,color:BK,fontFace:F
});
s2.addText("Sruthika G", {
x:10.5,y:0.12,w:2.6,h:0.44, fontSize:13,bold:true,color:A.navy,fontFace:F,align:"right"
});
s2.addText("B.Pharmacy Final Year", {
x:10.5,y:0.54,w:2.6,h:0.18, fontSize:8,color:GR,fontFace:F,align:"right",italic:true
});
s2.addShape(pres.shapes.RECTANGLE, { x:0.25,y:0.58,w:9.8,h:0.035, fill:{color:A.teal}, line:{color:A.teal} });
s2.addText("2 / 2", { x:12.7,y:0.13,w:0.5,h:0.22, fontSize:8,color:GR,align:"right",fontFace:F });
// ═══════════════════
// LEFT COLUMN
// ═══════════════════
const LC = 0.22;
const LW = 6.32;
// ── SECTION 04 — CONTROL ────────────────────────────────────────────
pill(s2, LC, 0.68, 1.4, "04 Control", A.teal);
const ctrlData = [
["Acquisition & Receipt",
"Received exclusively by pharmacy/IDS. Verify drug against sponsor's shipping manifest. Document: lot numbers, expiry dates, quantity and transport conditions (temperature excursion records)."],
["Storage",
"Store per sponsor specifications (temperature, light, humidity). Controlled substances in a separate locked, limited-access area. Investigational drugs must be physically segregated from commercial medications. Maintain temperature excursion logs at all times."],
["Dispensing",
"Dispensed only on a valid prescription signed by the PI or their authorised designee. Confirm patient enrolment and current informed consent on file before every dispensing event. Document all dispensing on the Drug Accountability Record (DAR)."],
["Drug Accountability Records (DAR)",
"Perpetual DAR tracks every unit: date and quantity received; patient ID and dispensing date; quantities returned; lot numbers; sponsor return records and destruction records. Retained for 2 years after marketing approval or 2 years after investigation is discontinued."],
["Returns & Destruction",
"Unused drug returned to sponsor at defined intervals or at study closure. If on-site destruction is authorised, it must be documented and performed per hazardous pharmaceutical disposal regulations. Drug must never be discarded as regular waste without written sponsor authorisation."],
];
// Row heights for control — 5 rows to fit in available space
const ctrlStartY = 0.99;
const ctrlRowH = 0.62;
const ctrlKeyW = 1.88;
ctrlData.forEach(([key, val], i) => {
const y = ctrlStartY + i * ctrlRowH;
tableRow(s2, LC, y, LW, ctrlRowH-0.04, ctrlKeyW, key, val, A.teal, i%2===0);
});
// ── SECTION 05 — IDENTIFICATION ─────────────────────────────────────
const idPillY = ctrlStartY + ctrlData.length * ctrlRowH + 0.06;
pill(s2, LC, idPillY, 1.9, "05 Identification", A.purple);
const idData = [
["Mandatory Labeling (21 CFR 312)",
"Every package must bear: 'Caution: New Drug — Limited to Investigational Use'; sponsor name; IND/Protocol number; PI name; storage conditions; lot/batch number; expiry date; quantity and strength. In blinded trials, the drug name is replaced by a subject randomisation code."],
["Physical ID Challenges",
"Unlike commercial drugs, investigational products lack visual identification cues — no colour coding, no imprinted codes, no distinguishing packaging — because blinding demands identical appearance between active drug and placebo. Staff must rely on protocol documentation, never on visual identification alone."],
["System-Based Controls",
"Pharmacy systems configured with protocol numbers and authorised prescriber lists. Barcode scanning adds a verification layer. Minimum two-patient identifiers verified before every dispense. Protocol binder or electronic access to Investigator's Brochure available in the dispensing area at all times."],
];
const idStartY = idPillY + 0.30;
const idRowH = 0.66;
const idKeyW = 2.05;
idData.forEach(([key, val], i) => {
const y = idStartY + i * idRowH;
const fillCol = i%2===0 ? T.purple : WH;
s2.addShape(pres.shapes.RECTANGLE, { x:LC,y,w:LW,h:idRowH-0.04, fill:{color:fillCol}, line:{color:LN,pt:0.5} });
s2.addText(key, { x:LC+0.1,y:y+0.04,w:idKeyW-0.1,h:idRowH-0.1, fontSize:8.8,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true });
s2.addShape(pres.shapes.RECTANGLE, { x:LC+idKeyW,y:y+0.08,w:0.025,h:idRowH-0.2, fill:{color:A.purple}, line:{color:A.purple} });
s2.addText(val, { x:LC+idKeyW+0.07,y:y+0.04,w:LW-idKeyW-0.1,h:idRowH-0.1, fontSize:8.5,color:BK,fontFace:F,valign:"top",wrapText:true });
});
// ═══════════════════
// RIGHT COLUMN
// ═══════════════════
const RC = 6.78;
const RW = 6.30;
// ── SECTION 06 — ROLE OF HOSPITAL PHARMACIST ────────────────────────
pill(s2, RC, 0.68, 3.0, "06 Role of Hospital Pharmacist", A.blue);
const pharmaData = [
["Protocol Review & Feasibility",
"Reviews protocol before trial start: drug compatibility, stability, compounding feasibility, storage requirements. Flags medication-related safety concerns. Participates in Scientific Review Committee (SRC) as pharmaceutical expert."],
["Regulatory Compliance",
"Ensures compliance with 21 CFR Part 312, ICH-GCP, Joint Commission MM.06.01.05, and institutional SOPs. Designated responsible party for all storage and distributive activities of investigational drugs."],
["Procurement & Dispensing",
"Coordinates drug receipt, maintains perpetual DAR, notifies PI at minimum stock level. Dispenses exclusively to enrolled, consented patients on valid PI orders. Performs sterile compounding where required per GMP standards."],
["Patient Counselling",
"Counsels on: correct administration (dose, timing, food interaction); home storage; side effects to monitor; when to contact the study team; importance of returning unused drug; and the unconditional right to withdraw at any time without affecting routine care."],
["ADR Monitoring & Reporting",
"Participates in ongoing safety surveillance. Identifies, documents and reports Adverse Drug Reactions (ADRs) and Serious Adverse Events (SAEs) to sponsor and regulatory authority within mandated timeframes. Helps distinguish drug-related from disease-related events."],
["Drug Information & Staff Training",
"Primary information resource for entire care team — mechanism, dosing, interactions from Investigator's Brochure. Trains all pharmacy and study staff per each protocol. Maintains training records. Manages emergency unblinding with full documentation when clinically necessary."],
];
// 6 roles: 2-column grid, 3 rows
const phStartY = 0.99;
const phRowH = 0.86;
const phColW = (RW - 0.06) / 2; // each mini-col
pharmaData.forEach(([key, val], i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = RC + col * (phColW + 0.06);
const y = phStartY + row * phRowH;
const fill= row%2===0 ? T.blue : WH;
s2.addShape(pres.shapes.RECTANGLE, { x,y,w:phColW,h:phRowH-0.04, fill:{color:fill}, line:{color:LN,pt:0.5} });
s2.addText(key, { x:x+0.1,y:y+0.04,w:phColW-0.2,h:0.24, fontSize:8.8,bold:true,color:BK,fontFace:F,valign:"top" });
s2.addShape(pres.shapes.RECTANGLE, { x:x+0.1,y:y+0.29,w:phColW-0.2,h:0.02, fill:{color:A.blue}, line:{color:A.blue} });
s2.addText(val, { x:x+0.1,y:y+0.33,w:phColW-0.2,h:phRowH-0.42, fontSize:8.3,color:BK,fontFace:F,valign:"top",wrapText:true });
});
// ── SECTION 07 — ADVISORY COMMITTEE ─────────────────────────────────
const advPillY = phStartY + pharmaData.length/2 * phRowH + 0.08;
pill(s2, RC, advPillY, 2.4, "07 Advisory Committee", A.orange);
const advData = [
["FDA Advisory Committee",
"External expert panels convened by the FDA. Evaluate full clinical trial data and make non-binding recommendations on approval. Members include therapeutic specialists, statisticians, consumer representatives and patient advocates. Public meetings ensure transparency."],
["IRB / Ethics Committee",
"Mandatory independent body. Reviews and approves protocols before any study begins. Conducts annual continuing reviews. Can place clinical hold, suspend or terminate a trial if safety risks emerge. Must include scientists, non-scientists and an unaffiliated community member."],
["P&T Committee",
"Hospital Pharmacy & Therapeutics Committee reviews and approves institutional policies for investigational drug handling, ensures alignment with the hospital formulary, and reviews ongoing trial safety data to advise on formulary inclusion post-approval."],
["DSMB / DMC",
"Independent Data Safety Monitoring Board for larger trials. Reviews interim unblinded safety and efficacy data at set intervals. Can recommend early study termination for overwhelming benefit, harm or futility. Operates independently of sponsor to prevent bias."],
["Scientific Review Committee (SRC)",
"Evaluates scientific merit, feasibility and resource requirements of proposed trials before IRB submission. The IDS pharmacist is a KEY member, providing pharmaceutical expertise especially for investigator-initiated trials where investigators may be unaware of pharmacy complexity."],
];
const advStartY = advPillY + 0.30;
const advRowH = 0.58;
const advKeyW = 1.9;
advData.forEach(([key, val], i) => {
const y = advStartY + i * advRowH;
const fill = i%2===0 ? T.orange : WH;
s2.addShape(pres.shapes.RECTANGLE, { x:RC,y,w:RW,h:advRowH-0.04, fill:{color:fill}, line:{color:LN,pt:0.5} });
s2.addText(key, { x:RC+0.1,y:y+0.04,w:advKeyW-0.1,h:advRowH-0.1, fontSize:8.8,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true });
s2.addShape(pres.shapes.RECTANGLE, { x:RC+advKeyW,y:y+0.08,w:0.025,h:advRowH-0.18, fill:{color:A.orange}, line:{color:A.orange} });
s2.addText(val, { x:RC+advKeyW+0.07,y:y+0.04,w:RW-advKeyW-0.1,h:advRowH-0.1, fontSize:8.3,color:BK,fontFace:F,valign:"top",wrapText:true });
});
// Thin vertical divider between columns
s2.addShape(pres.shapes.RECTANGLE, { x:6.59,y:0.68,w:0.04,h:6.62, fill:{color:"DDDDDD"}, line:{color:"DDDDDD"} });
// ─── WRITE ────────────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_v2.pptx" })
.then(() => console.log("SUCCESS"))
.catch(e => console.error("ERROR:", e));
cd /home/daytona/workspace/investigational-drug-ppt && node build5.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_v2.pptx
Investigational Drugs v2
Presentation · PPTX
The content in the pdf should be a little humanises version and alignment of the ppt is not good kindly check that if the place is not enough conside the sentence
~/investigational-drug-ppt/build6.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3 x 7.5
const F = "Times New Roman";
const BK = "000000";
const WH = "FFFFFF";
const GR = "777777";
const LN = "C0C0C0";
const A = {
navy: "1A3A6B",
blue: "2E6FAD",
teal: "217A65",
orange: "C2651A",
purple: "6B4A99",
green: "2E8050",
red: "B03030",
};
const T = {
blue: "EEF4FB",
teal: "EAF6F2",
orange: "FBF2E8",
purple: "F2EEF8",
green: "EAF5EF",
red: "F9EDED",
plain: "F8F8F8",
};
// ── helpers ──────────────────────────────────────────────────────────────────
const wh = s => s.addShape(pres.shapes.RECTANGLE,{x:0,y:0,w:13.3,h:7.5,fill:{color:WH},line:{color:WH}});
const bar = (s,c) => s.addShape(pres.shapes.RECTANGLE,{x:0,y:0,w:13.3,h:0.09,fill:{color:c},line:{color:c}});
const foot = s => {
s.addShape(pres.shapes.RECTANGLE,{x:0,y:7.38,w:13.3,h:0.12,fill:{color:"F2F2F2"},line:{color:LN}});
s.addText("B.Pharmacy Final Year | Pharmacy Practice | Investigational Use of Drugs",
{x:0,y:7.38,w:13.3,h:0.12,fontSize:7,color:GR,align:"center",valign:"middle",fontFace:F});
};
const pill = (s,x,y,w,lbl,c) => {
s.addShape(pres.shapes.ROUNDED_RECTANGLE,{x,y,w,h:0.25,fill:{color:c},line:{color:c},rectRadius:0.05});
s.addText(lbl,{x,y,w,h:0.25,fontSize:8,bold:true,color:WH,align:"center",valign:"middle",margin:0,fontFace:F});
};
const rcard = (s,x,y,w,h,fill,lc) =>
s.addShape(pres.shapes.ROUNDED_RECTANGLE,{x,y,w,h,fill:{color:fill||T.plain},line:{color:lc||LN,pt:0.8},rectRadius:0.05,
shadow:{type:"outer",color:"BBBBBB",blur:3,offset:1,angle:135,opacity:0.15}});
const accent = (s,x,y,w,c) =>
s.addShape(pres.shapes.RECTANGLE,{x,y,w,h:0.035,fill:{color:c},line:{color:c}});
const hd = (s,x,y,w,txt,c,fs) => {
s.addText(txt,{x,y,w,h:0.24,fontSize:fs||9.5,bold:true,color:BK,fontFace:F});
s.addShape(pres.shapes.RECTANGLE,{x,y:y+0.25,w,h:0.02,fill:{color:c},line:{color:c}});
};
const body = (s,x,y,w,h,txt,fs) =>
s.addText(txt,{x,y,w,h,fontSize:fs||8.5,color:BK,fontFace:F,valign:"top",wrapText:true});
// Table row (key | divider | value)
const trow = (s,x,y,w,h,kw,k,v,ac,even,tint) => {
s.addShape(pres.shapes.RECTANGLE,{x,y,w,h,fill:{color:even?tint:WH},line:{color:LN,pt:0.5}});
s.addText(k,{x:x+0.08,y:y+0.05,w:kw-0.1,h:h-0.1,fontSize:8.5,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true});
s.addShape(pres.shapes.RECTANGLE,{x:x+kw,y:y+0.07,w:0.025,h:h-0.14,fill:{color:ac},line:{color:ac}});
s.addText(v,{x:x+kw+0.07,y:y+0.05,w:w-kw-0.12,h:h-0.1,fontSize:8.3,color:BK,fontFace:F,valign:"top",wrapText:true});
};
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1
// Strict y budget:
// 0.00–0.09 bar
// 0.10–0.60 title row
// 0.60–0.63 underline
// 0.66–0.91 Section 01 pill + 3 cards (h=1.72) y=0.94–2.66
// 2.70–2.95 Section 02 pill
// 3.00–4.44 Principle row 1 (h=1.40)
// 4.48–5.92 Principle row 2 (h=1.40)
// 5.96–6.20 Section 03 pill
// 6.24–7.30 Classification row (h=1.06)
// 7.38–7.50 footer
// ══════════════════════════════════════════════════════════════════════════════
let s = pres.addSlide();
wh(s); bar(s,A.navy); foot(s);
s.addText("Investigational Use of Drugs",
{x:0.22,y:0.11,w:9.8,h:0.44,fontSize:19,bold:true,color:BK,fontFace:F});
s.addText("Sruthika G",
{x:10.5,y:0.11,w:2.6,h:0.28,fontSize:14,bold:true,color:A.navy,fontFace:F,align:"right"});
s.addText("B.Pharmacy Final Year",
{x:10.5,y:0.39,w:2.6,h:0.18,fontSize:8,color:GR,fontFace:F,align:"right",italic:true});
s.addShape(pres.shapes.RECTANGLE,{x:0.22,y:0.60,w:10.0,h:0.03,fill:{color:A.navy},line:{color:A.navy}});
s.addText("1 / 2",{x:12.7,y:0.12,w:0.5,h:0.2,fontSize:8,color:GR,align:"right",fontFace:F});
// ── 01 Description ──────────────────────────────────────────────────────────
pill(s, 0.22, 0.67, 1.55, "01 Description", A.blue);
// 3 equal cards across full width: each w=4.20, gap=0.065
const DW=4.20, DH=1.72, DY=0.96;
const DX=[0.22, 4.485, 8.75];
// Card 1 — Definition
rcard(s,DX[0],DY,DW,DH,T.blue,A.blue);
accent(s,DX[0],DY,DW,A.blue);
hd(s,DX[0]+0.12,DY+0.06,DW-0.24,"What is an Investigational Drug?",A.blue);
body(s,DX[0]+0.12,DY+0.33,DW-0.24,DH-0.38,
"An investigational drug hasn't been approved yet by the FDA or CDSCO for public use. It's being tested in humans to check if it's safe and effective. This includes brand-new molecules, old drugs being tried for a new disease, or drugs used under special permission for patients with no other options.");
// Card 2 — Scope
rcard(s,DX[1],DY,DW,DH,T.teal,A.teal);
accent(s,DX[1],DY,DW,A.teal);
hd(s,DX[1]+0.12,DY+0.06,DW-0.24,"Scope of Investigational Use",A.teal);
s.addText([
{text:"• NCE: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"A brand-new molecule — only animal data exists.\n",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"• Approved drug, new use: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"Same drug, different disease or patient group.\n",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"• Compassionate use: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"For seriously ill patients when nothing else works.\n",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"• Off-label study: ",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
{text:"Approved drug used outside its label under a formal IRB-approved study.",options:{fontSize:8.5,color:BK,fontFace:F}},
],{x:DX[1]+0.12,y:DY+0.33,w:DW-0.24,h:DH-0.38,valign:"top"});
// Card 3 — IND
rcard(s,DX[2],DY,DW,DH,T.orange,A.orange);
accent(s,DX[2],DY,DW,A.orange);
hd(s,DX[2]+0.12,DY+0.06,DW-0.24,"IND Application — What It Needs",A.orange);
s.addText([
{text:"Before testing in humans, the sponsor sends an IND to the FDA. It must include:\n",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"• Animal pharmacology and toxicology data\n• Chemistry, Manufacturing & Controls (CMC)\n• The clinical trial plan and protocol\n• Investigator qualifications\n• Informed consent documents\n",options:{fontSize:8.5,color:BK,fontFace:F}},
{text:"FDA has 30 days to approve or ask for more data.",options:{bold:true,fontSize:8.5,color:BK,fontFace:F}},
],{x:DX[2]+0.12,y:DY+0.33,w:DW-0.24,h:DH-0.38,valign:"top"});
// ── 02 Principles ────────────────────────────────────────────────────────────
pill(s, 0.22, 2.82, 2.1, "02 Principles Involved", A.teal);
// 6 cards: 3 per row, 2 rows
const PW=4.20, PH=1.40, PGap=4.36;
const PY=[3.11, 4.55];
const PACOLS=[A.teal,A.blue,A.orange,A.purple,A.green,A.red];
const PFTILS=[T.teal,T.blue,T.orange,T.purple,T.green,T.red];
const princData=[
["Declaration of Helsinki",
"This is the global rulebook for research involving humans. The patient's safety always comes first — before science, before the study. Participation must be fully voluntary, with informed consent before anything starts."],
["Good Clinical Practice (GCP)",
"GCP (ICH-E6) is the international gold standard for running clinical trials. It sets rules for how trials are designed, conducted, and reported — making sure results are trustworthy and patients are protected."],
["Informed Consent",
"Every patient must understand and agree — in writing — before joining a study. They must know the risks, benefits, alternatives, and that they can leave at any time without any consequence to their regular care."],
["Risk-Benefit Balance",
"A drug can only be tested if its potential benefit outweighs the risk. This rule came in after the thalidomide disaster (1962). The more serious the disease, the more risk is considered acceptable — but never recklessly."],
["IRB / Ethics Committee",
"An independent body that reviews every study before it starts and monitors it throughout. It can pause or stop a trial if patients are being put at risk. Membership includes scientists, laypeople and community members."],
["Scientific Validity",
"A poorly designed study is also an ethical problem — it wastes patients' risk for nothing. Every trial must have a proper sample size, control groups, clear outcomes and a sound statistical plan before it is approved."],
];
princData.forEach(([title,desc],i)=>{
const col=i%3, row=Math.floor(i/3);
const x=0.22+col*PGap, y=PY[row];
rcard(s,x,y,PW,PH,PFTILS[i],PACOLS[i]);
accent(s,x,y,PW,PACOLS[i]);
hd(s,x+0.12,y+0.06,PW-0.24,title,PACOLS[i]);
body(s,x+0.12,y+0.33,PW-0.24,PH-0.37,desc);
});
// ── 03 Classification ────────────────────────────────────────────────────────
pill(s, 0.22, 6.07, 1.8, "03 Classification", A.orange);
const CLW=3.18, CLH=1.08, CLY=6.36;
const CLCOLS=[A.blue,A.teal,A.orange,A.purple];
const CLTILS=[T.blue,T.teal,T.orange,T.purple];
const clsData=[
["Class I — New Chemical Entity",
"A totally new molecule — never been in a human before. Only animal data exists. Needs the tightest monitoring of all four classes."],
["Class II — Approved Drug, New Use",
"An approved drug being tested for a different disease, dose or patient group. A fresh IND is needed even though the drug itself is known."],
["Class III — Treatment IND",
"For seriously ill patients with no other option. The drug has shown promise and gets fast-tracked. FDA and IRB both must approve before use."],
["Class IV — Off-Label Under Study",
"An approved drug being used beyond its label in a formal research setting. Needs IRB oversight and usually an IND depending on risk level."],
];
clsData.forEach(([title,desc],i)=>{
const x=0.22+i*(CLW+0.09);
rcard(s,x,CLY,CLW,CLH,CLTILS[i],CLCOLS[i]);
s.addShape(pres.shapes.RECTANGLE,{x,y:CLY,w:CLW,h:0.28,fill:{color:CLCOLS[i]},line:{color:CLCOLS[i]}});
s.addText(title,{x:x+0.07,y:CLY,w:CLW-0.14,h:0.28,fontSize:8.5,bold:true,color:WH,valign:"middle",margin:2,fontFace:F});
body(s,x+0.09,CLY+0.30,CLW-0.18,CLH-0.35,desc,8.3);
});
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2
// LEFT col x=0.22 w=6.28 — CONTROL + IDENTIFICATION
// RIGHT col x=6.78 w=6.28 — PHARMACIST + ADVISORY
// Divider x=6.60 w=0.04
// Row heights carefully set so everything fits above footer (y<7.36)
// ══════════════════════════════════════════════════════════════════════════════
s = pres.addSlide();
wh(s); bar(s,A.teal); foot(s);
s.addText("Investigational Use of Drugs",
{x:0.22,y:0.11,w:9.8,h:0.44,fontSize:19,bold:true,color:BK,fontFace:F});
s.addText("Sruthika G",
{x:10.5,y:0.11,w:2.6,h:0.28,fontSize:14,bold:true,color:A.navy,fontFace:F,align:"right"});
s.addText("B.Pharmacy Final Year",
{x:10.5,y:0.39,w:2.6,h:0.18,fontSize:8,color:GR,fontFace:F,align:"right",italic:true});
s.addShape(pres.shapes.RECTANGLE,{x:0.22,y:0.60,w:10.0,h:0.03,fill:{color:A.teal},line:{color:A.teal}});
s.addText("2 / 2",{x:12.7,y:0.12,w:0.5,h:0.2,fontSize:8,color:GR,align:"right",fontFace:F});
// Vertical divider
s.addShape(pres.shapes.RECTANGLE,{x:6.60,y:0.67,w:0.04,h:6.68,fill:{color:"DDDDDD"},line:{color:"DDDDDD"}});
const LC=0.22, LW=6.28, RC=6.78, RW=6.28;
// ── LEFT — SECTION 04: CONTROL ───────────────────────────────────────────────
pill(s,LC,0.67,1.35,"04 Control",A.teal);
// 5 rows. Available: 0.95 to ~4.30 = 3.35 / 5 = 0.67 each
const ctrlY=0.96, ctrlRH=0.62, ctrlKW=1.80;
const ctrlData=[
["Acquisition","Received by pharmacy only. Check against the sponsor's manifest. Log lot number, expiry, quantity and temperature during transport."],
["Storage","Follow sponsor's specs (temperature, light, humidity). Controlled drugs stay locked. Keep separate from regular stock. Log temperature daily."],
["Dispensing","Needs a signed PI order. Confirm patient consent before every dispense. Record everything on the Drug Accountability Record (DAR)."],
["Accountability Records","DAR tracks every unit — received, dispensed, returned, destroyed. Must be kept for 2 years after the study ends or drug is approved."],
["Returns & Disposal","Leftover drug goes back to the sponsor or is formally destroyed. Never throw into regular waste. Sponsor written approval needed for destruction."],
];
ctrlData.forEach(([k,v],i)=>{
trow(s,LC,ctrlY+i*ctrlRH,LW,ctrlRH-0.03,ctrlKW,k,v,A.teal,i%2===0,T.teal);
});
// ── LEFT — SECTION 05: IDENTIFICATION ───────────────────────────────────────
const idPY = ctrlY + ctrlData.length*ctrlRH + 0.07;
pill(s,LC,idPY,1.85,"05 Identification",A.purple);
// 3 rows. Available: idPY+0.29 to ~7.30 = about 0.66 each
const idRH=0.65, idKW=1.95;
const idStartY=idPY+0.29;
const idData=[
["Mandatory Label","Must say: 'Investigational Use Only'. Add: sponsor name, IND number, PI name, storage info, lot number, expiry date and strength."],
["ID Challenge","Blinded drugs look the same by design — no colours, codes or markings. Staff can't rely on visual cues; they must follow written protocols only."],
["System Controls","Pharmacy software shows protocol IDs and approved prescribers. Barcode scan at dispense. Always confirm two patient identifiers before handing over the drug."],
];
idData.forEach(([k,v],i)=>{
const fillC=i%2===0?T.purple:WH;
s.addShape(pres.shapes.RECTANGLE,{x:LC,y:idStartY+i*idRH,w:LW,h:idRH-0.03,fill:{color:fillC},line:{color:LN,pt:0.5}});
s.addText(k,{x:LC+0.08,y:idStartY+i*idRH+0.05,w:idKW-0.1,h:idRH-0.1,fontSize:8.5,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true});
s.addShape(pres.shapes.RECTANGLE,{x:LC+idKW,y:idStartY+i*idRH+0.08,w:0.025,h:idRH-0.17,fill:{color:A.purple},line:{color:A.purple}});
s.addText(v,{x:LC+idKW+0.07,y:idStartY+i*idRH+0.05,w:LW-idKW-0.11,h:idRH-0.1,fontSize:8.3,color:BK,fontFace:F,valign:"top",wrapText:true});
});
// ── RIGHT — SECTION 06: HOSPITAL PHARMACIST ──────────────────────────────────
pill(s,RC,0.67,2.95,"06 Role of Hospital Pharmacist",A.blue);
// 6 roles in a 2-col × 3-row mini grid
// Available height: 0.95 to ~4.45 = 3.50 / 3 rows = 1.16 each row
// Each mini card: w = (6.28 - 0.06) / 2 = 3.11, h = 1.12
const phRH=1.10, phCW=(RW-0.06)/2, phStartY=0.95;
const phData=[
["Protocol Review",
"Before the trial starts, the pharmacist checks if the drug can be prepared, stored and administered as planned. Any safety or feasibility issues are flagged early — before the study gets ethics approval."],
["Regulatory Compliance",
"Makes sure the hospital follows 21 CFR 312, GCP guidelines and Joint Commission standards. The pharmacy is legally the responsible unit for storing and distributing investigational drugs."],
["Procurement & Dispensing",
"Receives the drug, tracks stock and alerts the PI when supplies run low. Dispenses only to enrolled, consented patients. Does any special preparation (like sterile compounding) as needed."],
["Patient Counselling",
"Explains to the patient: how to take the drug, how to store it at home, what side effects to watch for, and that they can stop participating at any time — no questions asked."],
["ADR Monitoring",
"Watches for Adverse Drug Reactions (ADRs) and Serious Adverse Events (SAEs) throughout the trial. Reports them to the sponsor and regulator on time. Helps identify whether a reaction is from the drug or the disease."],
["Drug Info & Training",
"Acts as the team's go-to resource for drug information. Trains all pharmacy staff for each new protocol, keeps training records, and handles emergency unblinding when a doctor needs it urgently."],
];
phData.forEach(([k,v],i)=>{
const col=i%2, row=Math.floor(i/2);
const x=RC+col*(phCW+0.06), y=phStartY+row*phRH;
const fill=row%2===0?T.blue:WH;
s.addShape(pres.shapes.RECTANGLE,{x,y,w:phCW,h:phRH-0.04,fill:{color:fill},line:{color:LN,pt:0.5}});
s.addText(k,{x:x+0.09,y:y+0.05,w:phCW-0.18,h:0.23,fontSize:8.8,bold:true,color:BK,fontFace:F});
s.addShape(pres.shapes.RECTANGLE,{x:x+0.09,y:y+0.29,w:phCW-0.18,h:0.02,fill:{color:A.blue},line:{color:A.blue}});
s.addText(v,{x:x+0.09,y:y+0.33,w:phCW-0.18,h:phRH-0.42,fontSize:8.1,color:BK,fontFace:F,valign:"top",wrapText:true});
});
// ── RIGHT — SECTION 07: ADVISORY COMMITTEE ───────────────────────────────────
const advPY = phStartY + 3*phRH + 0.08;
pill(s,RC,advPY,2.3,"07 Advisory Committee",A.orange);
// 5 entries. Available: advPY+0.29 to 7.30
const advStartY=advPY+0.29;
const advAvail=7.30-advStartY;
const advRH=advAvail/5; // dynamic — fits exactly
const advKW=1.80;
const advData=[
["FDA Advisory Panel","External experts who review trial data and advise the FDA on approval. Meetings are open to the public. The FDA usually follows their recommendation."],
["IRB / Ethics Committee","Approves every study before it starts and checks in regularly. Can pause or stop a trial if patients are at risk. Must have both scientific and non-scientific members."],
["P&T Committee","The hospital's drug policy body. Approves how investigational drugs are managed inside the hospital and reviews trial safety data to decide on future formulary inclusion."],
["DSMB / DMC","An independent group that checks safety and effectiveness data partway through a trial. Can call an early stop if the drug is clearly helpful — or clearly harmful."],
["Scientific Review Committee","Reviews whether a trial makes scientific sense before it goes to the IRB. The IDS pharmacist sits on this committee as the drug expertise representative."],
];
advData.forEach(([k,v],i)=>{
const fill=i%2===0?T.orange:WH;
const y=advStartY+i*advRH;
s.addShape(pres.shapes.RECTANGLE,{x:RC,y,w:RW,h:advRH-0.03,fill:{color:fill},line:{color:LN,pt:0.5}});
s.addText(k,{x:RC+0.09,y:y+0.04,w:advKW-0.1,h:advRH-0.1,fontSize:8.5,bold:true,color:BK,fontFace:F,valign:"top",wrapText:true});
s.addShape(pres.shapes.RECTANGLE,{x:RC+advKW,y:y+0.07,w:0.025,h:advRH-0.15,fill:{color:A.orange},line:{color:A.orange}});
s.addText(v,{x:RC+advKW+0.07,y:y+0.04,w:RW-advKW-0.12,h:advRH-0.1,fontSize:8.3,color:BK,fontFace:F,valign:"top",wrapText:true});
});
// ── WRITE ─────────────────────────────────────────────────────────────────────
pres.writeFile({fileName:"/home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_Final_v3.pptx"})
.then(()=>console.log("SUCCESS"))
.catch(e=>console.error("ERROR:",e));
cd /home/daytona/workspace/investigational-drug-ppt && node build6.js 2>&1
ls -lh /home/daytona/workspace/investigational-drug-ppt/Investigational_Drugs_Final_v3.pptx
Investigational Drugs Final v3
Presentation · PPTX