PRE SITE VISIT PPTX SIMPLE AND STANDARD WITH THANK YOU 20 PAGES
IM PHARMACY STUDENT SO BRIEF description of what the pre-site visit
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
~/pre-site-visit-assignment/pre_site_visit.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Pre-Site Visit Presentation";
pres.author = "Pharmacy Student";
// ─── COLOR PALETTE ───────────────────────────────────────────────────────────
const C = {
navy: "0D2B55", // dominant
blue: "1A5EA8", // secondary
teal: "0F9DAE", // accent
white: "FFFFFF",
light: "EDF4FB", // slide bg
muted: "6B8CAE", // sub-text
divider: "D0E3F0",
pill: "E8F4FD",
};
// ─── HELPER: header bar ──────────────────────────────────────────────────────
function headerBar(slide, title, subtitle) {
// full-width navy header
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: 1.2,
fill: { color: C.navy }, line: { color: C.navy }
});
// teal accent stripe
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 1.2, w: "100%", h: 0.07,
fill: { color: C.teal }, line: { color: C.teal }
});
slide.addText(title, {
x: 0.5, y: 0.1, w: 9, h: 0.6,
fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", margin: 0
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.5, y: 0.7, w: 9, h: 0.45,
fontSize: 12, color: C.teal, fontFace: "Calibri", italic: true, margin: 0
});
}
}
// ─── HELPER: footer ──────────────────────────────────────────────────────────
function footer(slide, pageNum) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 5.35, w: "100%", h: 0.28,
fill: { color: C.divider }, line: { color: C.divider }
});
slide.addText("Pre-Site Visit | Pharmacy Student Rotation", {
x: 0.3, y: 5.35, w: 7, h: 0.28,
fontSize: 8, color: C.muted, fontFace: "Calibri", valign: "middle", margin: 0
});
slide.addText(`${pageNum} / 20`, {
x: 9.2, y: 5.35, w: 0.7, h: 0.28,
fontSize: 8, color: C.muted, fontFace: "Calibri", align: "right", valign: "middle", margin: 0
});
}
// ─── HELPER: bullet card ─────────────────────────────────────────────────────
function bulletCard(slide, x, y, w, h, title, bullets, iconColor) {
slide.addShape(pres.ShapeType.rect, {
x, y, w, h,
fill: { color: C.white },
line: { color: C.divider, pt: 1 },
shadow: { type: "outer", color: "000000", blur: 4, offset: 2, angle: 135, opacity: 0.08 }
});
// card top accent
slide.addShape(pres.ShapeType.rect, {
x, y, w, h: 0.06,
fill: { color: iconColor || C.teal }, line: { color: iconColor || C.teal }
});
slide.addText(title, {
x: x + 0.15, y: y + 0.1, w: w - 0.3, h: 0.38,
fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri", margin: 0
});
const items = bullets.map((b, i) => ({
text: b,
options: { bullet: true, breakLine: i < bullets.length - 1, fontSize: 10, color: "333333", fontFace: "Calibri" }
}));
slide.addText(items, {
x: x + 0.15, y: y + 0.52, w: w - 0.3, h: h - 0.62,
valign: "top", margin: 0
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – COVER
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// full bg
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { color: C.navy }, line: { color: C.navy }
});
// teal diagonal accent (simulated with wide rectangle, rotated)
s.addShape(pres.ShapeType.rect, {
x: 6.5, y: -1, w: 6, h: 8.5,
fill: { color: C.blue }, line: { color: C.blue }
});
s.addShape(pres.ShapeType.rect, {
x: 8.2, y: -1, w: 3, h: 8.5,
fill: { color: C.teal }, line: { color: C.teal },
shadow: { type: "outer", color: "000000", blur: 12, offset: 0, angle: 135, opacity: 0.3 }
});
// pill tag
s.addShape(pres.ShapeType.rect, {
x: 0.5, y: 1.05, w: 2.5, h: 0.35,
fill: { color: C.teal }, line: { color: C.teal }
});
s.addText("PHARMACY STUDENT ROTATION", {
x: 0.5, y: 1.05, w: 2.5, h: 0.35,
fontSize: 7, bold: true, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", charSpacing: 1.5, margin: 0
});
s.addText("PRE-SITE VISIT", {
x: 0.45, y: 1.55, w: 7, h: 1.1,
fontSize: 46, bold: true, color: C.white, fontFace: "Calibri", margin: 0
});
s.addText("PRESENTATION", {
x: 0.45, y: 2.55, w: 7, h: 0.7,
fontSize: 30, bold: false, color: C.teal, fontFace: "Calibri", charSpacing: 6, margin: 0
});
s.addShape(pres.ShapeType.rect, {
x: 0.45, y: 3.35, w: 2.5, h: 0.04,
fill: { color: C.teal }, line: { color: C.teal }
});
s.addText("[Student Name] | [University Name]\n[Date] | Batch [Year]", {
x: 0.45, y: 3.5, w: 7, h: 0.7,
fontSize: 12, color: "A8C8E8", fontFace: "Calibri", margin: 0
});
s.addText("Site: [Pharmacy / Hospital Name]", {
x: 0.45, y: 4.3, w: 7, h: 0.4,
fontSize: 11, color: C.teal, fontFace: "Calibri", italic: true, margin: 0
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 – TABLE OF CONTENTS
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Table of Contents", "What we'll cover today");
footer(s, 2);
const items = [
["01", "Introduction & Purpose of Visit"],
["02", "About the Site / Pharmacy"],
["03", "Objectives of the Pre-Site Visit"],
["04", "Pharmacy Operations Overview"],
["05", "Dispensing & Medication Management"],
["06", "Patient Counselling"],
["07", "Inventory & Supply Chain"],
["08", "Regulatory Compliance & Quality"],
["09", "Drug Information Services"],
["10", "Health Promotion Activities"],
["11", "Roles & Responsibilities Observed"],
["12", "Team & Staffing Structure"],
["13", "Technology & Information Systems"],
["14", "Safety & Infection Control"],
["15", "Learning Objectives"],
["16", "Questions I Plan to Ask"],
["17", "Expected Challenges"],
["18", "Pre-Visit Preparation Checklist"],
["19", "Key Takeaways & Reflections"],
["20", "Thank You"],
];
const col1 = items.slice(0, 10);
const col2 = items.slice(10);
col1.forEach(([num, label], i) => {
const yPos = 1.45 + i * 0.365;
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yPos, w: 0.38, h: 0.28,
fill: { color: C.navy }, line: { color: C.navy }
});
s.addText(num, {
x: 0.3, y: yPos, w: 0.38, h: 0.28,
fontSize: 9, bold: true, color: C.teal, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(label, {
x: 0.75, y: yPos + 0.01, w: 4.1, h: 0.27,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
col2.forEach(([num, label], i) => {
const yPos = 1.45 + i * 0.365;
s.addShape(pres.ShapeType.rect, {
x: 5.3, y: yPos, w: 0.38, h: 0.28,
fill: { color: C.navy }, line: { color: C.navy }
});
s.addText(num, {
x: 5.3, y: yPos, w: 0.38, h: 0.28,
fontSize: 9, bold: true, color: C.teal, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(label, {
x: 5.75, y: yPos + 0.01, w: 4.0, h: 0.27,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 – INTRODUCTION & PURPOSE
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Introduction & Purpose of Visit", "Why this pre-site visit matters");
footer(s, 3);
s.addText("As a pharmacy student, the pre-site visit is a critical preparatory step before commencing an experiential training rotation. It enables students to familiarize themselves with the environment, workflow, and expectations of the placement site.", {
x: 0.5, y: 1.45, w: 9, h: 0.85,
fontSize: 11, color: "444444", fontFace: "Calibri", margin: 0
});
const cards = [
["Orientation", ["Understand the site layout", "Meet key pharmacy staff", "Learn daily workflows"]],
["Expectations", ["Clarify learning objectives", "Understand student responsibilities", "Discuss dress code & conduct"]],
["Preparation", ["Identify required documents", "Review site-specific protocols", "Prepare relevant questions"]],
["Professionalism", ["Build rapport with supervisors", "Demonstrate initiative", "Show commitment to learning"]],
];
cards.forEach(([title, bullets], i) => {
const x = 0.3 + i * 2.35;
bulletCard(s, x, 2.45, 2.2, 2.8, title, bullets, [C.teal, C.blue, C.navy, C.teal][i]);
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 – ABOUT THE SITE
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "About the Site / Pharmacy", "Overview of the placement facility");
footer(s, 4);
// Left info panel
slide4InfoRow(s, 1.45, "Site Name:", "[Pharmacy / Hospital Name]");
slide4InfoRow(s, 2.05, "Type:", "Community / Hospital / Industrial Pharmacy");
slide4InfoRow(s, 2.65, "Location:", "[City, State / Country]");
slide4InfoRow(s, 3.25, "Operating Hours:", "Mon–Sat: 8:00 AM – 9:00 PM");
slide4InfoRow(s, 3.85, "Number of Staff:", "[Pharmacists + Technicians + Support]");
slide4InfoRow(s, 4.45, "Supervisor:", "[Preceptor / Pharmacist-in-Charge Name]");
function slide4InfoRow(sl, yy, label, value) {
sl.addText(label, {
x: 0.4, y: yy, w: 2.5, h: 0.45,
fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri", margin: 0
});
sl.addShape(pres.ShapeType.rect, {
x: 2.95, y: yy + 0.05, w: 6.6, h: 0.38,
fill: { color: C.white }, line: { color: C.divider, pt: 1 }
});
sl.addText(value, {
x: 3.05, y: yy + 0.05, w: 6.4, h: 0.38,
fontSize: 11, color: "333333", fontFace: "Calibri", valign: "middle", margin: 4
});
}
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 – OBJECTIVES
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Objectives of the Pre-Site Visit", "Specific goals I aim to achieve");
footer(s, 5);
const objectives = [
["1", "Familiarize with the physical layout and departments of the pharmacy."],
["2", "Understand the daily workflow, patient flow, and peak hours."],
["3", "Identify the scope of pharmaceutical services offered at the site."],
["4", "Meet and establish a professional relationship with the preceptor and staff."],
["5", "Clarify the expectations, responsibilities, and schedule for my rotation."],
["6", "Review any site-specific policies, SOPs, or protocols I need to know."],
["7", "Identify learning opportunities aligned with my academic objectives."],
];
objectives.forEach(([num, text], i) => {
const yPos = 1.45 + i * 0.53;
s.addShape(pres.ShapeType.rect, {
x: 0.35, y: yPos, w: "100%", h: 0.46,
fill: { color: i % 2 === 0 ? C.white : C.pill },
line: { color: C.divider, pt: 0.5 }
});
s.addShape(pres.ShapeType.rect, {
x: 0.35, y: yPos, w: 0.45, h: 0.46,
fill: { color: C.navy }, line: { color: C.navy }
});
s.addText(num, {
x: 0.35, y: yPos, w: 0.45, h: 0.46,
fontSize: 13, bold: true, color: C.teal, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(text, {
x: 0.9, y: yPos + 0.02, w: 8.8, h: 0.42,
fontSize: 11, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 – PHARMACY OPERATIONS OVERVIEW
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Pharmacy Operations Overview", "Core functional areas of the pharmacy");
footer(s, 6);
bulletCard(s, 0.3, 1.45, 4.5, 1.85, "Outpatient / Retail Services",
["OTC medication dispensing", "Prescription filling & verification", "Patient waiting area & queue management"], C.teal);
bulletCard(s, 5.1, 1.45, 4.5, 1.85, "Clinical / Inpatient Services",
["Ward round participation", "Drug therapy monitoring", "IV admixture & sterile compounding"], C.blue);
bulletCard(s, 0.3, 3.45, 4.5, 1.85, "Administrative Functions",
["Prescription record keeping", "Insurance & billing processes", "Staff scheduling & management"], C.navy);
bulletCard(s, 5.1, 3.45, 4.5, 1.85, "Support Services",
["Drug information & queries", "Health education for patients", "Liaison with medical teams"], C.teal);
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 – DISPENSING & MEDICATION MANAGEMENT
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Dispensing & Medication Management", "How medications are handled at the site");
footer(s, 7);
const steps = [
["Receive", "Prescription received from patient or medical team"],
["Screen", "Pharmacist screens for completeness, legibility & clinical appropriateness"],
["Verify", "Drug interaction, allergy & dosage checks performed"],
["Dispense", "Medication labelled, packaged & accurately counted/prepared"],
["Counsel", "Patient receives clear instructions on use, storage & side effects"],
["Document", "Transaction recorded in pharmacy information system (PIS)"],
];
steps.forEach(([step, desc], i) => {
const x = 0.35 + (i % 3) * 3.1;
const y = 1.5 + Math.floor(i / 3) * 1.85;
s.addShape(pres.ShapeType.rect, {
x, y, w: 2.95, h: 1.7,
fill: { color: C.white }, line: { color: C.divider, pt: 1 },
shadow: { type: "outer", color: "000000", blur: 4, offset: 2, angle: 135, opacity: 0.07 }
});
s.addShape(pres.ShapeType.rect, {
x, y, w: 2.95, h: 0.06,
fill: { color: [C.teal, C.blue, C.navy, C.teal, C.blue, C.navy][i] },
line: { color: [C.teal, C.blue, C.navy, C.teal, C.blue, C.navy][i] }
});
s.addText(`${i + 1}. ${step}`, {
x: x + 0.12, y: y + 0.12, w: 2.7, h: 0.38,
fontSize: 13, bold: true, color: C.navy, fontFace: "Calibri", margin: 0
});
s.addText(desc, {
x: x + 0.12, y: y + 0.52, w: 2.7, h: 1.05,
fontSize: 10, color: "444444", fontFace: "Calibri", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 – PATIENT COUNSELLING
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Patient Counselling", "Communicating effectively with patients");
footer(s, 8);
s.addText("Pharmacists play a pivotal role in patient education. Effective counselling improves medication adherence, reduces errors, and empowers patients.", {
x: 0.5, y: 1.45, w: 9, h: 0.6,
fontSize: 11, color: "444444", fontFace: "Calibri", margin: 0
});
bulletCard(s, 0.35, 2.15, 4.5, 1.4, "Key Counselling Topics",
["Correct dosage & frequency", "Potential side effects to watch for", "Drug-food & drug-drug interactions", "Storage requirements"], C.teal);
bulletCard(s, 5.1, 2.15, 4.5, 1.4, "Communication Skills",
["Use plain, non-technical language", "Confirm patient understanding (teach-back)", "Respect cultural & language differences", "Maintain confidentiality (HIPAA/PDPA)"], C.blue);
bulletCard(s, 0.35, 3.7, 4.5, 1.4, "Special Populations",
["Elderly patients: simplified regimens", "Paediatric dosing accuracy", "Pregnancy & lactation drug safety"], C.navy);
bulletCard(s, 5.1, 3.7, 4.5, 1.4, "Documentation",
["Record counselling sessions", "Note patient concerns or refusals", "Follow-up recommendations"], C.teal);
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 – INVENTORY & SUPPLY CHAIN
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Inventory & Supply Chain Management", "Ensuring continuous medication availability");
footer(s, 9);
const rows = [
["Procurement", "Orders placed with approved suppliers; verified against formulary"],
["Receiving", "Stock inspected for quantity, expiry dates, cold chain integrity"],
["Storage", "Classified by temperature requirements: ambient, refrigerated, frozen"],
["FIFO/FEFO", "First In First Out / First Expire First Out rotation enforced"],
["Stock Control", "Par levels set; automated reorder triggers or manual reordering"],
["Expiry Checks", "Regular audits; expired stock quarantined & returned/destroyed"],
["Controlled Drugs", "Separate lock-up; dual-signature recording; balance maintained"],
];
rows.forEach(([label, desc], i) => {
const yy = 1.5 + i * 0.52;
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 9.4, h: 0.45,
fill: { color: i % 2 === 0 ? C.white : C.pill },
line: { color: C.divider, pt: 0.5 }
});
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 2.0, h: 0.45,
fill: { color: C.navy }, line: { color: C.navy }
});
s.addText(label, {
x: 0.3, y: yy, w: 2.0, h: 0.45,
fontSize: 10, bold: true, color: C.teal, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(desc, {
x: 2.4, y: yy + 0.03, w: 7.2, h: 0.4,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 – REGULATORY COMPLIANCE & QUALITY
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Regulatory Compliance & Quality Assurance", "Standards and governance in pharmacy practice");
footer(s, 10);
bulletCard(s, 0.3, 1.45, 3.0, 2.7, "Regulatory Bodies",
["Pharmacy Board / MOH", "National Medicines Authority", "Drug regulatory agency", "Pharmacy Act & guidelines", "Good Dispensing Practice (GDP)"], C.navy);
bulletCard(s, 3.5, 1.45, 3.0, 2.7, "Quality Systems",
["Standard Operating Procedures (SOPs)", "Regular internal & external audits", "Incident & error reporting system", "Near-miss tracking & root cause analysis", "Quality improvement initiatives"], C.blue);
bulletCard(s, 6.7, 1.45, 3.0, 2.7, "Documentation",
["Prescription records retention", "Cold chain temperature logs", "Controlled drug registers", "Staff training records", "Adverse drug reaction (ADR) reporting"], C.teal);
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: 4.25, w: 9.4, h: 0.85,
fill: { color: C.navy }, line: { color: C.navy }
});
s.addText("Key principle: Every pharmacy must operate within the legal framework to ensure patient safety, medication efficacy, and professional accountability.", {
x: 0.5, y: 4.28, w: 9.0, h: 0.8,
fontSize: 11, color: C.white, fontFace: "Calibri", valign: "middle", italic: true, margin: 0
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 – DRUG INFORMATION SERVICES
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Drug Information Services", "Supporting evidence-based medication decisions");
footer(s, 11);
s.addText("Drug Information (DI) services provide accurate, unbiased, and clinically relevant medication information to healthcare professionals and patients.", {
x: 0.4, y: 1.45, w: 9.2, h: 0.6,
fontSize: 11, color: "444444", fontFace: "Calibri", margin: 0
});
const diItems = [
["Sources Used", ["British National Formulary (BNF)", "Martindale: The Complete Drug Reference", "Micromedex / UpToDate", "Drug package inserts (PILs)", "Peer-reviewed journals"]],
["Types of Queries", ["Dosing & administration", "Drug interactions & contraindications", "Adverse effects management", "Therapeutic alternatives", "Stability & compatibility"]],
["Who Requests DI?", ["Physicians & nurses", "Patients & caregivers", "Fellow pharmacists", "Students on rotation", "Hospital committees"]],
];
diItems.forEach(([title, bullets], i) => {
bulletCard(s, 0.3 + i * 3.15, 2.15, 3.0, 3.0, title, bullets, [C.teal, C.blue, C.navy][i]);
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 – HEALTH PROMOTION
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Health Promotion Activities", "Pharmacy's role in public health");
footer(s, 12);
const hpItems = [
["Chronic Disease Management", ["Hypertension monitoring & counselling", "Diabetes medication adherence", "Asthma inhaler technique checks", "Lipid-lowering therapy guidance"]],
["Vaccination Services", ["Influenza vaccination campaigns", "Pneumococcal vaccination for elderly", "Travel health vaccines", "Vaccination record keeping"]],
["Public Health Campaigns", ["Antibiotic awareness week", "World Diabetes Day activities", "Smoking cessation programmes", "Weight management advice"]],
["Screening Services", ["Blood pressure measurement", "Blood glucose screening", "BMI & cardiovascular risk", "Medication therapy review (MTR)"]],
];
hpItems.forEach(([title, bullets], i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 1.45 + Math.floor(i / 2) * 2.05;
bulletCard(s, x, y, 4.5, 1.9, title, bullets, [C.teal, C.blue, C.navy, C.teal][i]);
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 13 – ROLES & RESPONSIBILITIES OBSERVED
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Roles & Responsibilities Observed", "Understanding the team's scope of practice");
footer(s, 13);
const roles = [
["Registered Pharmacist", "Final drug verification, patient counselling, clinical reviews, pharmacy management"],
["Pharmacy Technician", "Prescription processing, medication preparation, stock management, labelling"],
["Pharmacy Assistant", "Customer service, OTC sales guidance, basic administrative tasks"],
["Pharmacist-in-Charge (PIC)", "Overall pharmacy governance, regulatory compliance, staff supervision"],
["Clinical Pharmacist", "Ward rounds, TPN/IV therapy, pharmacokinetic monitoring, MDT collaboration"],
["Pharmacy Student (Me)", "Supervised dispensing, patient counselling practice, documentation support"],
];
roles.forEach(([role, resp], i) => {
const yy = 1.48 + i * 0.6;
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 9.4, h: 0.53,
fill: { color: i % 2 === 0 ? C.white : C.pill },
line: { color: C.divider, pt: 0.5 }
});
if (i === roles.length - 1) {
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 9.4, h: 0.53,
fill: { color: "E8F8F1" }, line: { color: "C3E8D5", pt: 1 }
});
}
s.addText(role, {
x: 0.45, y: yy + 0.05, w: 3.0, h: 0.43,
fontSize: 10, bold: true, color: C.navy, fontFace: "Calibri", valign: "middle", margin: 0
});
s.addText(resp, {
x: 3.55, y: yy + 0.05, w: 6.1, h: 0.43,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 14 – TECHNOLOGY & INFORMATION SYSTEMS
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Technology & Information Systems", "Digital tools used in modern pharmacy practice");
footer(s, 14);
bulletCard(s, 0.3, 1.45, 4.5, 1.9, "Pharmacy Information System (PIS)",
["Electronic prescription management", "Patient medication history & profiles", "Automated drug interaction alerts", "Billing & inventory integration"], C.teal);
bulletCard(s, 5.1, 1.45, 4.5, 1.9, "Electronic Medical Records (EMR)",
["Access to patient clinical notes", "Lab & diagnostic results review", "Prescriber communication", "Medication reconciliation support"], C.blue);
bulletCard(s, 0.3, 3.5, 4.5, 1.75, "Automation & Robotics",
["Automated dispensing cabinets (ADC)", "Robotic tablet counting systems", "Barcode & RFID tracking", "Smart IV compounding devices"], C.navy);
bulletCard(s, 5.1, 3.5, 4.5, 1.75, "Communication Tools",
["Secure messaging with clinical teams", "Telepharmacy & remote consultation", "E-prescribing platforms", "Digital patient education materials"], C.teal);
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 15 – SAFETY & INFECTION CONTROL
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Safety & Infection Control", "Maintaining a safe pharmacy environment");
footer(s, 15);
s.addText("The pharmacy environment must adhere to strict safety and hygiene protocols to protect both staff and patients.", {
x: 0.4, y: 1.45, w: 9.2, h: 0.5,
fontSize: 11, color: "444444", fontFace: "Calibri", margin: 0
});
const safetyItems = [
["Hand Hygiene", ["5 Moments of Hand Hygiene", "Alcohol-based sanitisers available", "Routine handwashing before & after patient contact"]],
["PPE Use", ["Gloves for hazardous drugs", "Masks during compounding", "Eye protection when required", "Gowns in sterile areas"]],
["Sharps & Waste", ["Sharps disposed in approved containers", "Pharmaceutical waste segregation", "Cytotoxic waste separate disposal", "Regular waste audits"]],
["Environment", ["Regular surface disinfection", "Clean room maintenance (ISO class)", "Temperature & humidity monitoring", "Pest control programmes"]],
];
safetyItems.forEach(([title, bullets], i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 2.1 + Math.floor(i / 2) * 1.75;
bulletCard(s, x, y, 4.5, 1.65, title, bullets, [C.teal, C.blue, C.navy, C.teal][i]);
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 16 – LEARNING OBJECTIVES
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "My Learning Objectives", "What I aim to gain from this rotation");
footer(s, 16);
const domains = [
["Knowledge", C.navy, [
"Understand the full prescription dispensing workflow",
"Learn about the site's formulary and drug stocking policy",
"Understand regulatory requirements governing the pharmacy",
]],
["Skills", C.blue, [
"Practice accurate medication dispensing & labelling",
"Develop effective patient counselling techniques",
"Gain proficiency in using the pharmacy information system",
]],
["Attitude", C.teal, [
"Demonstrate professionalism and ethical behaviour",
"Show initiative and willingness to learn from all staff",
"Respect patient confidentiality and dignity at all times",
]],
];
domains.forEach(([domain, color, items], i) => {
const x = 0.3 + i * 3.15;
s.addShape(pres.ShapeType.rect, {
x, y: 1.45, w: 3.0, h: 3.7,
fill: { color: C.white }, line: { color: C.divider, pt: 1 },
shadow: { type: "outer", color: "000000", blur: 5, offset: 2, angle: 135, opacity: 0.08 }
});
s.addShape(pres.ShapeType.rect, {
x, y: 1.45, w: 3.0, h: 0.55,
fill: { color: color }, line: { color: color }
});
s.addText(domain, {
x: x + 0.1, y: 1.45, w: 2.8, h: 0.55,
fontSize: 15, bold: true, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
const bulletItems = items.map((b, bi) => ({
text: b,
options: { bullet: true, breakLine: bi < items.length - 1, fontSize: 10, color: "333333", fontFace: "Calibri" }
}));
s.addText(bulletItems, {
x: x + 0.15, y: 2.1, w: 2.7, h: 2.9,
valign: "top", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 17 – QUESTIONS I PLAN TO ASK
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Questions I Plan to Ask", "Demonstrating curiosity and preparedness");
footer(s, 17);
const questions = [
"What is the typical daily workflow, and what will be my primary responsibilities during the rotation?",
"How does the pharmacy handle medication errors or near-miss incidents?",
"What type of documentation am I expected to complete, and how is it reviewed?",
"Are there any specific therapeutic areas or clinical services I will be primarily exposed to?",
"How does the pharmacy collaborate with physicians and other members of the healthcare team?",
"What are the learning outcomes expected of pharmacy students at this site?",
"Is there an opportunity to participate in patient counselling or ward rounds?",
];
questions.forEach((q, i) => {
const yy = 1.45 + i * 0.53;
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 9.4, h: 0.47,
fill: { color: i % 2 === 0 ? C.white : C.pill },
line: { color: C.divider, pt: 0.5 }
});
s.addText(`Q${i + 1}`, {
x: 0.35, y: yy + 0.03, w: 0.45, h: 0.4,
fontSize: 11, bold: true, color: C.teal, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
s.addText(q, {
x: 0.88, y: yy + 0.03, w: 8.75, h: 0.4,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 18 – EXPECTED CHALLENGES & STRATEGIES
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Expected Challenges & How I'll Address Them", "Proactive problem-solving mindset");
footer(s, 18);
const challenges = [
["Adapting to workflow speed", "Observe and shadow first; gradually increase pace with guidance from preceptor"],
["Unfamiliar drug names/brands", "Carry a drug reference app (e.g., Medscape); review site formulary beforehand"],
["Patient communication", "Practice teach-back method; use simple language; ask supervising pharmacist for tips"],
["System & software navigation", "Request a brief orientation to the PIS; practice in observation mode first"],
["Handling difficult patients", "Remain calm and empathetic; escalate to pharmacist when needed"],
["Time management", "Prioritize urgent prescriptions; use downtime for self-study & documentation review"],
];
challenges.forEach(([challenge, strategy], i) => {
const yy = 1.45 + i * 0.62;
s.addShape(pres.ShapeType.rect, {
x: 0.3, y: yy, w: 4.3, h: 0.55,
fill: { color: i % 2 === 0 ? C.navy : C.blue }, line: { color: "transparent" }
});
s.addText(challenge, {
x: 0.4, y: yy + 0.03, w: 4.1, h: 0.49,
fontSize: 10, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0
});
s.addShape(pres.ShapeType.rect, {
x: 4.6, y: yy, w: 5.1, h: 0.55,
fill: { color: i % 2 === 0 ? C.white : C.pill }, line: { color: C.divider, pt: 0.5 }
});
s.addText(strategy, {
x: 4.7, y: yy + 0.03, w: 4.9, h: 0.49,
fontSize: 10, color: "333333", fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 19 – PRE-VISIT PREPARATION CHECKLIST
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.light };
headerBar(s, "Pre-Visit Preparation Checklist", "Everything I need to do before arriving");
footer(s, 19);
const checks = [
["Documents Ready", ["Student ID & university letter of placement", "Immunisation & health screening records", "Professional indemnity insurance confirmation", "Any required consent or confidentiality forms"]],
["Academic Prep", ["Review dispensing & counselling competencies", "Revise common drug classes at this site", "Study relevant SOPs if shared in advance", "Prepare questions for the preceptor"]],
["Professional", ["Confirm appropriate dress code & uniform", "Plan punctual arrival (know directions & parking)", "Save preceptor's contact number", "Review professional conduct guidelines"]],
["Personal Readiness",["Adequate rest the night before", "Bring lunch / know on-site facilities", "Notebook & pen for observations", "Positive mindset & willingness to learn"]],
];
checks.forEach(([title, items], i) => {
const x = 0.3 + (i % 2) * 4.85;
const y = 1.45 + Math.floor(i / 2) * 1.9;
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.5, h: 1.75,
fill: { color: C.white }, line: { color: C.divider, pt: 1 },
shadow: { type: "outer", color: "000000", blur: 4, offset: 2, angle: 135, opacity: 0.07 }
});
s.addShape(pres.ShapeType.rect, {
x, y, w: 4.5, h: 0.06,
fill: { color: [C.teal, C.blue, C.navy, C.teal][i] },
line: { color: [C.teal, C.blue, C.navy, C.teal][i] }
});
s.addText(`✓ ${title}`, {
x: x + 0.15, y: y + 0.1, w: 4.2, h: 0.38,
fontSize: 11, bold: true, color: C.navy, fontFace: "Calibri", margin: 0
});
const bulletItems = items.map((b, bi) => ({
text: b,
options: { bullet: true, breakLine: bi < items.length - 1, fontSize: 9.5, color: "333333", fontFace: "Calibri" }
}));
s.addText(bulletItems, {
x: x + 0.15, y: y + 0.52, w: 4.2, h: 1.1, valign: "top", margin: 0
});
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 20 – THANK YOU
// ════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// full navy bg
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: "100%",
fill: { color: C.navy }, line: { color: C.navy }
});
// right panel teal
s.addShape(pres.ShapeType.rect, {
x: 7.5, y: 0, w: 2.5, h: "100%",
fill: { color: C.teal }, line: { color: C.teal }
});
s.addShape(pres.ShapeType.rect, {
x: 6.8, y: 0, w: 0.7, h: "100%",
fill: { color: C.blue }, line: { color: C.blue }
});
// horizontal divider line
s.addShape(pres.ShapeType.rect, {
x: 0.5, y: 3.25, w: 6.0, h: 0.05,
fill: { color: C.teal }, line: { color: C.teal }
});
// main thank you text
s.addText("THANK YOU", {
x: 0.4, y: 1.3, w: 6.2, h: 1.3,
fontSize: 56, bold: true, color: C.white, fontFace: "Calibri",
align: "left", charSpacing: 4, margin: 0
});
s.addText("for your time and the opportunity to visit.", {
x: 0.4, y: 2.65, w: 6.2, h: 0.55,
fontSize: 14, color: C.teal, fontFace: "Calibri", italic: true, margin: 0
});
s.addText("I look forward to learning and contributing during my rotation.", {
x: 0.4, y: 3.45, w: 6.2, h: 0.55,
fontSize: 12, color: "A8C8E8", fontFace: "Calibri", margin: 0
});
s.addText("[Student Name]", {
x: 0.4, y: 4.15, w: 4, h: 0.38,
fontSize: 13, bold: true, color: C.white, fontFace: "Calibri", margin: 0
});
s.addText("[University Name] | [Email Address] | [Contact Number]", {
x: 0.4, y: 4.55, w: 6.2, h: 0.35,
fontSize: 10, color: "A8C8E8", fontFace: "Calibri", margin: 0
});
// right panel text rotated — label
s.addText("PRE-SITE VISIT", {
x: 7.55, y: 2.3, w: 2.4, h: 0.55,
fontSize: 11, bold: true, color: C.white, fontFace: "Calibri",
align: "center", charSpacing: 3, margin: 0
});
s.addText("PHARMACY ROTATION", {
x: 7.55, y: 2.9, w: 2.4, h: 0.45,
fontSize: 9, color: C.white, fontFace: "Calibri",
align: "center", charSpacing: 2, margin: 0
});
}
// ─── WRITE FILE ──────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/pre-site-visit-assignment/Pre_Site_Visit_Pharmacy.pptx" })
.then(() => console.log("✅ Saved: Pre_Site_Visit_Pharmacy.pptx"))
.catch(e => { console.error("❌ Error:", e); process.exit(1); });
cd /home/daytona/workspace/pre-site-visit-assignment && node pre_site_visit.js
sed -i 's/line: { color: "transparent" }/line: { color: "0D2B55" }/g' /home/daytona/workspace/pre-site-visit-assignment/pre_site_visit.js && node /home/daytona/workspace/pre-site-visit-assignment/pre_site_visit.js
"line: { color: "transparent"" in ~/pre-site-visit-assignment
Pre Site Visit Pharmacy
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Cover — bold navy/teal design with student & site placeholders |
| 2 | Table of Contents — all 20 slides listed |
| 3 | Introduction & Purpose — why the pre-site visit matters |
| 4 | About the Site — facility info fields (fill in your details) |
| 5 | Objectives — 7 specific visit goals |
| 6 | Pharmacy Operations Overview — 4 core service areas |
| 7 | Dispensing & Medication Management — 6-step dispensing flow |
| 8 | Patient Counselling — techniques, populations, documentation |
| 9 | Inventory & Supply Chain — procurement to controlled drugs |
| 10 | Regulatory Compliance & QA — boards, SOPs, audits |
| 11 | Drug Information Services — sources, query types, who uses them |
| 12 | Health Promotion — chronic disease, vaccination, screening |
| 13 | Roles & Responsibilities — all pharmacy team roles including student |
| 14 | Technology & Information Systems — PIS, EMR, automation |
| 15 | Safety & Infection Control — PPE, hand hygiene, waste |
| 16 | Learning Objectives — Knowledge / Skills / Attitude domains |
| 17 | Questions I Plan to Ask — 7 prepared questions |
| 18 | Expected Challenges & Strategies — 6 challenge/solution pairs |
| 19 | Pre-Visit Checklist — documents, academic prep, professional, personal |
| 20 | Thank You — clean closing slide with contact placeholders |
[bracketed placeholders] with your actual name, university, site name, and date before submitting.I'M M PHARMACY PHARMACY PRACTICE STUDENT SO BRIEF description of what the pre-site visit IN CLINICAL RESEARCH SUBJECT
PREPARE PPTX
~/pre-site-visit-assignment/clinical_research_presite.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Pre-Site Visit – Clinical Research | M.Pharmacy Pharmacy Practice";
pres.author = "M.Pharmacy Student";
// ── PALETTE ──────────────────────────────────────────────────────────────────
const C = {
ink: "0B1F3A", // dominant dark
royal: "1B3F8B", // secondary blue
sky: "2979C8", // mid blue
aqua: "00B4C8", // accent
white: "FFFFFF",
ice: "EEF4FB", // slide background
frost: "D6E8F7", // subtle
muted: "6B8EB5", // footer text
divider: "C9DDF0",
pill: "E4F2FB",
};
// ── HELPERS ───────────────────────────────────────────────────────────────────
function bg(slide) {
slide.background = { color: C.ice };
}
function header(slide, title, sub) {
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.18,
fill:{color:C.ink}, line:{color:C.ink} });
slide.addShape(pres.ShapeType.rect, { x:0, y:1.18, w:"100%", h:0.06,
fill:{color:C.aqua}, line:{color:C.aqua} });
slide.addText(title, { x:0.5, y:0.1, w:9, h:0.6,
fontSize:21, bold:true, color:C.white, fontFace:"Calibri", margin:0 });
if (sub) slide.addText(sub, { x:0.5, y:0.72, w:9, h:0.42,
fontSize:11, color:C.aqua, fontFace:"Calibri", italic:true, margin:0 });
}
function foot(slide, n) {
slide.addShape(pres.ShapeType.rect, { x:0, y:5.33, w:"100%", h:0.3,
fill:{color:C.frost}, line:{color:C.frost} });
slide.addText("Pre-Site Visit | Clinical Research | M.Pharmacy Pharmacy Practice", {
x:0.3, y:5.33, w:7.5, h:0.3,
fontSize:8, color:C.muted, fontFace:"Calibri", valign:"middle", margin:0 });
slide.addText(`${n} / 20`, { x:9.2, y:5.33, w:0.7, h:0.3,
fontSize:8, color:C.muted, fontFace:"Calibri", align:"right", valign:"middle", margin:0 });
}
// card with top-accent bar
function card(slide, x, y, w, h, title, bullets, accent) {
const col = accent || C.aqua;
slide.addShape(pres.ShapeType.rect, { x, y, w, h,
fill:{color:C.white}, line:{color:C.divider, pt:1},
shadow:{type:"outer",color:"000000",blur:5,offset:2,angle:135,opacity:0.08} });
slide.addShape(pres.ShapeType.rect, { x, y, w, h:0.06,
fill:{color:col}, line:{color:col} });
slide.addText(title, { x:x+0.14, y:y+0.1, w:w-0.28, h:0.38,
fontSize:11, bold:true, color:C.ink, fontFace:"Calibri", margin:0 });
const items = bullets.map((b,i)=>({
text:b, options:{ bullet:true, breakLine:i<bullets.length-1,
fontSize:9.5, color:"333333", fontFace:"Calibri" }
}));
slide.addText(items, { x:x+0.14, y:y+0.52, w:w-0.28, h:h-0.62,
valign:"top", margin:0 });
}
// zebra row (label | value)
function zrow(slide, y, label, value, even) {
slide.addShape(pres.ShapeType.rect, { x:0.3, y, w:9.4, h:0.5,
fill:{color: even ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
slide.addShape(pres.ShapeType.rect, { x:0.3, y, w:2.2, h:0.5,
fill:{color:C.ink}, line:{color:C.ink} });
slide.addText(label, { x:0.3, y, w:2.2, h:0.5,
fontSize:9.5, bold:true, color:C.aqua, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
slide.addText(value, { x:2.6, y:y+0.04, w:7.0, h:0.42,
fontSize:10, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
}
// numbered row (single wide)
function nrow(slide, y, num, text, even) {
slide.addShape(pres.ShapeType.rect, { x:0.3, y, w:9.4, h:0.5,
fill:{color: even ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
slide.addShape(pres.ShapeType.rect, { x:0.3, y, w:0.46, h:0.5,
fill:{color:C.ink}, line:{color:C.ink} });
slide.addText(`${num}`, { x:0.3, y, w:0.46, h:0.5,
fontSize:12, bold:true, color:C.aqua, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
slide.addText(text, { x:0.85, y:y+0.04, w:8.75, h:0.42,
fontSize:10, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 — COVER
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// full ink bg
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%",
fill:{color:C.ink}, line:{color:C.ink} });
// right-side sky panel
s.addShape(pres.ShapeType.rect, { x:7.0, y:0, w:3.0, h:"100%",
fill:{color:C.royal}, line:{color:C.royal} });
// aqua accent strip
s.addShape(pres.ShapeType.rect, { x:8.6, y:0, w:1.4, h:"100%",
fill:{color:C.aqua}, line:{color:C.aqua} });
// top tag pill
s.addShape(pres.ShapeType.rect, { x:0.5, y:0.9, w:3.2, h:0.36,
fill:{color:C.aqua}, line:{color:C.aqua} });
s.addText("M.PHARMACY · PHARMACY PRACTICE", { x:0.5, y:0.9, w:3.2, h:0.36,
fontSize:7.5, bold:true, color:C.ink, fontFace:"Calibri",
align:"center", valign:"middle", charSpacing:1.5, margin:0 });
// main heading
s.addText("PRE-SITE VISIT", { x:0.45, y:1.4, w:6.3, h:1.0,
fontSize:48, bold:true, color:C.white, fontFace:"Calibri", margin:0 });
s.addText("PRESENTATION", { x:0.45, y:2.35, w:6.3, h:0.65,
fontSize:28, bold:false, color:C.aqua, fontFace:"Calibri", charSpacing:6, margin:0 });
// divider
s.addShape(pres.ShapeType.rect, { x:0.45, y:3.1, w:2.8, h:0.05,
fill:{color:C.aqua}, line:{color:C.aqua} });
// subject badge
s.addText("SUBJECT: CLINICAL RESEARCH", { x:0.45, y:3.25, w:5.5, h:0.38,
fontSize:12, bold:true, color:C.aqua, fontFace:"Calibri", margin:0 });
s.addText("[Student Name] | [University / Institution]", { x:0.45, y:3.72, w:6.0, h:0.36,
fontSize:11, color:"A8C8E8", fontFace:"Calibri", margin:0 });
s.addText("[Enrollment No.] | [Date of Visit]", { x:0.45, y:4.1, w:6.0, h:0.33,
fontSize:10, color:"A8C8E8", fontFace:"Calibri", margin:0 });
s.addText("Site: [CRO / Hospital / Research Centre Name]", { x:0.45, y:4.52, w:6.0, h:0.35,
fontSize:10.5, color:C.aqua, fontFace:"Calibri", italic:true, margin:0 });
// right panel label
s.addText("CLINICAL\nRESEARCH", { x:8.65, y:2.3, w:1.2, h:1.1,
fontSize:10, bold:true, color:C.ink, fontFace:"Calibri",
align:"center", valign:"middle", charSpacing:1, margin:0 });
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 — TABLE OF CONTENTS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Table of Contents", "Overview of the presentation");
foot(s, 2);
const toc = [
["01","Introduction & Purpose of Visit"],
["02","About the Clinical Research Site"],
["03","Objectives of the Pre-Site Visit"],
["04","What is Clinical Research?"],
["05","Types of Clinical Trials"],
["06","Regulatory Framework & Ethics"],
["07","ICH-GCP Guidelines Overview"],
["08","Site Infrastructure & Facilities"],
["09","Key Personnel & Their Roles"],
["10","Role of Pharmacist in Clinical Trials"],
["11","Investigational Product (IP) Management"],
["12","Informed Consent Process"],
["13","Source Documents & Case Report Forms (CRF)"],
["14","Adverse Event & Pharmacovigilance"],
["15","Data Management & Integrity"],
["16","My Learning Objectives"],
["17","Questions I Plan to Ask"],
["18","Expected Challenges & Strategies"],
["19","Pre-Visit Preparation Checklist"],
["20","Thank You"],
];
const col1 = toc.slice(0, 10);
const col2 = toc.slice(10);
col1.forEach(([num, label], i) => {
const yy = 1.42 + i * 0.365;
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:0.4, h:0.3,
fill:{color:C.ink}, line:{color:C.ink} });
s.addText(num, { x:0.3, y:yy, w:0.4, h:0.3,
fontSize:9, bold:true, color:C.aqua, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
s.addText(label, { x:0.78, y:yy+0.01, w:4.3, h:0.28,
fontSize:10, color:"222222", fontFace:"Calibri", valign:"middle", margin:0 });
});
col2.forEach(([num, label], i) => {
const yy = 1.42 + i * 0.365;
s.addShape(pres.ShapeType.rect, { x:5.25, y:yy, w:0.4, h:0.3,
fill:{color:C.ink}, line:{color:C.ink} });
s.addText(num, { x:5.25, y:yy, w:0.4, h:0.3,
fontSize:9, bold:true, color:C.aqua, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
s.addText(label, { x:5.73, y:yy+0.01, w:4.0, h:0.28,
fontSize:10, color:"222222", fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION & PURPOSE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Introduction & Purpose of the Pre-Site Visit",
"Why this preliminary visit is critical before clinical research training");
foot(s, 3);
s.addText(
"A Pre-Site Visit is a structured orientation conducted before the formal clinical research rotation begins. "+
"As an M.Pharmacy Pharmacy Practice student specialising in Clinical Research, this visit helps bridge the gap "+
"between academic knowledge and real-world trial site operations.",
{ x:0.4, y:1.4, w:9.2, h:0.75,
fontSize:11, color:"333333", fontFace:"Calibri", margin:0 });
card(s, 0.3, 2.28, 2.25, 2.9, "Orientation",
["Understand site layout & departments","Meet PI, CRC & site pharmacist","Observe day-to-day trial activity","Review site master file (SMF)"], C.aqua);
card(s, 2.7, 2.28, 2.25, 2.9, "Regulatory Readiness",
["Confirm ethics & IEC approvals","Review ICH-GCP compliance","Understand protocol & amendments","Check delegation log requirements"], C.sky);
card(s, 5.1, 2.28, 2.25, 2.9, "IP Awareness",
["Identify IP storage & handling area","Understand randomisation process","Check dispensing & accountability records","Blinding procedures overview"], C.royal);
card(s, 7.5, 2.28, 2.25, 2.9, "Student Readiness",
["Clarify roles & responsibilities","Confirm schedule & attendance","Review SOPs relevant to role","Prepare learning objectives"], C.aqua);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 — ABOUT THE SITE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "About the Clinical Research Site", "Facility profile and key information");
foot(s, 4);
const rows = [
["Site Name", "[Hospital / CRO / Research Centre Name]"],
["Type of Site", "Academic Medical Centre / CRO / Investigator Site"],
["Location", "[City, State, Country]"],
["Principal Investigator", "[Dr. Name, Designation, Department]"],
["Therapeutic Areas", "[Oncology / Cardiology / Infectious Disease / etc.]"],
["No. of Active Trials", "[Number] trials — Phase [I / II / III / IV]"],
["Regulatory Approvals", "CDSCO, IEC/IRB, ICH-GCP certified"],
["Preceptor / Mentor", "[Name, Designation, Contact]"],
];
rows.forEach(([label, val], i) => zrow(s, 1.42 + i*0.51, label, val, i%2===0));
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 — WHAT IS CLINICAL RESEARCH?
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "What is Clinical Research?", "Foundation knowledge every clinical research pharmacist must have");
foot(s, 5);
s.addText(
"Clinical research is a systematic investigation conducted in humans to evaluate the safety, efficacy, and quality "+
"of investigational products or interventions under a defined protocol, following ethical and regulatory guidelines.",
{ x:0.4, y:1.4, w:9.2, h:0.7, fontSize:11, color:"333333", fontFace:"Calibri", margin:0 });
card(s, 0.3, 2.22, 4.5, 1.5, "Key Definitions",
["Clinical Trial: prospective study with human subjects",
"Protocol: blueprint governing the trial",
"Sponsor: entity responsible for initiating the trial",
"Investigator: qualified person conducting the trial"], C.aqua);
card(s, 5.1, 2.22, 4.5, 1.5, "Phases of Clinical Trials",
["Phase I — Safety & dosage (healthy volunteers)",
"Phase II — Efficacy & side effects (patients)",
"Phase III — Efficacy vs. standard treatment (large RCT)",
"Phase IV — Post-marketing surveillance"], C.sky);
// bottom banner
s.addShape(pres.ShapeType.rect, { x:0.3, y:3.86, w:9.4, h:1.1,
fill:{color:C.ink}, line:{color:C.ink} });
s.addText(
"The pharmacist's role spans all phases — from IP preparation, dispensing, accountability to patient counselling and safety monitoring.",
{ x:0.5, y:3.9, w:9.0, h:1.0,
fontSize:11, color:C.white, fontFace:"Calibri", valign:"middle", italic:true, margin:0 });
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 — TYPES OF CLINICAL TRIALS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Types of Clinical Trials", "Categorising research by design, purpose & intervention");
foot(s, 6);
const types = [
["By Intervention", C.aqua,
["Interventional (drug, device, procedure)","Observational (no intervention)","Expanded access / compassionate use","Registry / epidemiological studies"]],
["By Design", C.sky,
["Randomised Controlled Trial (RCT)","Open-label vs. blinded (single/double)","Crossover & parallel group designs","Adaptive trial designs"]],
["By Therapeutic Area",C.royal,
["Oncology trials (most common globally)","Infectious diseases & vaccines","Cardiovascular & metabolic","CNS, rare diseases, paediatric"]],
["By Sponsor", C.aqua,
["Industry-sponsored (pharma / biotech)","Investigator-Initiated Trials (IIT)","Government / public health funded","Academic / institutional trials"]],
];
types.forEach(([title, acc, bullets], i) => {
const x = 0.3 + (i%2)*4.85;
const y = 1.42 + Math.floor(i/2)*1.95;
card(s, x, y, 4.5, 1.82, title, bullets, acc);
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 — REGULATORY FRAMEWORK & ETHICS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Regulatory Framework & Ethics in Clinical Research",
"Governing laws, guidelines and ethical principles");
foot(s, 7);
card(s, 0.3, 1.42, 3.0, 2.6, "Indian Regulations",
["Drugs & Cosmetics Act 1940 (Schedule Y)","New Drugs & Clinical Trials Rules 2019 (NDCT)","CDSCO — central regulatory authority","Ethics Committee registration (mandatory)","GCP guidelines — ICMR & CDSCO"], C.aqua);
card(s, 3.5, 1.42, 3.0, 2.6, "International Guidelines",
["ICH-E6 (R2) — Good Clinical Practice","Declaration of Helsinki","Belmont Report principles","ISO 14155 — medical device trials","FDA 21 CFR (Parts 50, 56, 312)"], C.sky);
card(s, 6.7, 1.42, 3.0, 2.6, "Ethical Principles",
["Respect for persons (autonomy)","Beneficence — do good","Non-maleficence — do no harm","Justice — fair subject selection","Voluntary & informed participation"], C.royal);
s.addShape(pres.ShapeType.rect, { x:0.3, y:4.16, w:9.4, h:0.9,
fill:{color:C.aqua}, line:{color:C.aqua} });
s.addText(
"No clinical trial can commence without IEC/IRB approval + CDSCO permission + valid protocol + signed investigator agreement.",
{ x:0.5, y:4.19, w:9.0, h:0.84,
fontSize:11, color:C.ink, fontFace:"Calibri", bold:true, valign:"middle", margin:0 });
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 — ICH-GCP OVERVIEW
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "ICH-GCP E6(R2) Guidelines Overview",
"The gold standard for clinical trial conduct");
foot(s, 8);
s.addText(
"ICH Good Clinical Practice (GCP) is an international ethical and scientific quality standard for designing, "+
"conducting, recording, and reporting trials involving human subjects. Compliance ensures credibility of data and "+
"protection of trial subjects.",
{ x:0.4, y:1.4, w:9.2, h:0.72, fontSize:11, color:"333333", fontFace:"Calibri", margin:0 });
const gcpPrinciples = [
"Trials conducted in accordance with ethical principles from Declaration of Helsinki",
"Anticipated risks & inconveniences are weighed against benefits before trial initiation",
"Rights, safety & well-being of subjects take priority over science and society",
"Available non-clinical and clinical information supports the proposed investigation",
"Informed consent is freely given by every subject before participation",
"All clinical trial information is recorded, handled and stored to allow accurate reporting",
"Investigational products are manufactured, handled and stored per applicable GMP",
"Systems with procedures to assure quality of every aspect of the trial are implemented",
];
gcpPrinciples.forEach((p, i) => {
nrow(s, 2.25 + i*0.36, i+1, p, i%2===0);
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 — SITE INFRASTRUCTURE & FACILITIES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Site Infrastructure & Facilities", "What I observed / expect to observe during the visit");
foot(s, 9);
card(s, 0.3, 1.42, 2.9, 2.25, "Clinical Areas",
["Screening & enrolment room","Examination & procedure rooms","Sample collection & processing lab","Patient waiting & observation area"], C.aqua);
card(s, 3.35, 1.42, 2.9, 2.25, "Research Pharmacy",
["IP storage (ambient, refrigerated, frozen)","Randomisation & dispensing area","IP accountability records & logs","Secure cabinets for blinded IP"], C.sky);
card(s, 6.4, 1.42, 2.9, 2.25, "Administrative Areas",
["Trial master file (TMF) room","IRB & sponsor communication files","CRF & source document storage","IT systems — EDC, CTMS access"], C.royal);
card(s, 0.3, 3.82, 2.9, 1.72, "Safety Systems",
["Emergency resuscitation equipment","AE/SAE reporting infrastructure","Unblinding procedure capability","24-hr on-call medical officer"], C.aqua);
card(s, 3.35, 3.82, 2.9, 1.72, "Laboratory",
["Central lab kit storage","Cold-chain sample shipping","In-house assay capability","Lab manual & reference ranges"], C.sky);
card(s, 6.4, 3.82, 2.9, 1.72, "Quality Systems",
["SOPs library & version control","Audit trail & deviation log","Training records for all staff","Internal QA audit schedule"], C.royal);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 — KEY PERSONNEL & ROLES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Key Personnel & Their Roles at the Clinical Trial Site",
"Understanding the research team structure");
foot(s, 10);
const roles = [
["Principal Investigator (PI)", "Overall responsible for trial conduct; signs protocol, delegation log & consent"],
["Sub-Investigator (Sub-I)", "Assists PI; performs procedures as delegated; medically qualified"],
["Clinical Research Coordinator (CRC)","Day-to-day trial management; patient scheduling, source docs, CRF entry"],
["Site Pharmacist", "IP receipt, storage, dispensing, accountability & return/destruction"],
["Clinical Research Associate (CRA)", "Sponsor's monitor; verifies protocol compliance & data accuracy (SDV/SDR)"],
["Data Manager", "Manages EDC, resolves data queries, maintains audit trail"],
["IEC/IRB Committee", "Reviews & approves protocol, consent forms, amendments, SAE reports"],
["M.Pharm Student (My Role)", "Supervised IP handling, documentation support, protocol review, CRF assistance"],
];
roles.forEach(([role, resp], i) => {
const yy = 1.42 + i * 0.505;
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:9.4, h:0.46,
fill:{color: i%2===0 ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
if (i === roles.length-1) {
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:9.4, h:0.46,
fill:{color:"E6F4EE"}, line:{color:"B8DFC8", pt:1} });
}
s.addText(role, { x:0.42, y:yy+0.04, w:3.3, h:0.38,
fontSize:9.5, bold:true, color:C.ink, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText(resp, { x:3.85, y:yy+0.04, w:5.8, h:0.38,
fontSize:9.5, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 — ROLE OF PHARMACIST IN CLINICAL TRIALS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Role of the Pharmacist in Clinical Research",
"A critical but often underestimated member of the trial team");
foot(s, 11);
s.addText(
"The clinical trial pharmacist ensures the safe and compliant management of investigational products throughout the "+
"trial lifecycle — from receipt to final disposition. Their role is indispensable to GCP compliance and patient safety.",
{ x:0.4, y:1.4, w:9.2, h:0.72, fontSize:11, color:"333333", fontFace:"Calibri", margin:0 });
card(s, 0.3, 2.22, 3.0, 2.95, "IP Management",
["Receipt & inspection of IP shipments","Temperature-controlled storage verification","Randomisation code management","Dispensing per protocol & prescription","IP return, destruction & reconciliation"], C.aqua);
card(s, 3.5, 2.22, 3.0, 2.95, "Documentation & Compliance",
["Maintaining IP accountability logs","Completing pharmacy section of CRF","Chain-of-custody records","Protocol deviation reporting","Regulatory document filing (TMF/ISF)"], C.sky);
card(s, 6.7, 2.22, 3.0, 2.95, "Clinical Support",
["Drug information to investigative team","AE/SAE medical review support","Patient counselling on IP use","Interaction with sponsor & CRA","Preparation of IMP at satellite sites"], C.royal);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 — INVESTIGATIONAL PRODUCT (IP) MANAGEMENT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Investigational Product (IP) Management",
"End-to-end lifecycle of the trial drug at site");
foot(s, 12);
const steps = [
["Receipt", "IP received from sponsor; shipment verified against packing list; condition & temp-excursion checked"],
["Storage", "Stored per label conditions (2–8°C / 15–25°C / -20°C); monitored continuously; quarantine if deviation"],
["Randomisation", "Subject assigned treatment per IVRS/IWRS or manual randomisation code; pharmacist records assignment"],
["Dispensing", "IP dispensed on valid prescription; label generated per protocol; quantity dispensed documented"],
["Accountability", "Every unit tracked: received–dispensed–returned–destroyed; zero discrepancy required for audit"],
["Return/Destroy", "Unused/expired IP returned to sponsor or destroyed per approved procedure with witness signature"],
];
steps.forEach(([step, desc], i) => {
const x = 0.3 + (i%3)*3.12;
const y = 1.42 + Math.floor(i/3)*1.9;
s.addShape(pres.ShapeType.rect, { x, y, w:2.97, h:1.76,
fill:{color:C.white}, line:{color:C.divider, pt:1},
shadow:{type:"outer",color:"000000",blur:4,offset:2,angle:135,opacity:0.07} });
s.addShape(pres.ShapeType.rect, { x, y, w:2.97, h:0.07,
fill:{color:[C.aqua,C.sky,C.royal,C.aqua,C.sky,C.royal][i]},
line:{color:[C.aqua,C.sky,C.royal,C.aqua,C.sky,C.royal][i]} });
s.addText(`${i+1}. ${step}`, { x:x+0.12, y:y+0.12, w:2.73, h:0.38,
fontSize:12, bold:true, color:C.ink, fontFace:"Calibri", margin:0 });
s.addText(desc, { x:x+0.12, y:y+0.54, w:2.73, h:1.1,
fontSize:9.5, color:"444444", fontFace:"Calibri", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 13 — INFORMED CONSENT PROCESS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Informed Consent Process (ICP)", "Cornerstone of ethical clinical trial conduct");
foot(s, 13);
s.addText(
"Informed consent is a voluntary, ongoing process — not merely a form. It ensures the subject understands "+
"the trial's purpose, procedures, risks, benefits, and their right to withdraw at any time without consequence.",
{ x:0.4, y:1.4, w:9.2, h:0.72, fontSize:11, color:"333333", fontFace:"Calibri", margin:0 });
const icSteps = [
["1","Patient Identification","Eligible subject identified by PI/Sub-I per inclusion/exclusion criteria"],
["2","Information Provision","ICF & PIL provided in subject's local language; sufficient time given to read"],
["3","Discussion & Q&A","Investigator answers all queries; no coercion; comprehension assessed"],
["4","Signature & Dating","Subject (or LAR) signs & dates ICF; investigator countersigns; witness if illiterate"],
["5","Copy to Subject","Original filed in ISF; copy given to subject; version control maintained"],
["6","Re-Consent", "Required for protocol amendments affecting subject risk/burden or new safety data"],
];
icSteps.forEach(([num, title, desc], i) => {
const yy = 2.25 + i*0.505;
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:9.4, h:0.47,
fill:{color: i%2===0 ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:0.44, h:0.47,
fill:{color:C.aqua}, line:{color:C.aqua} });
s.addText(num, { x:0.3, y:yy, w:0.44, h:0.47,
fontSize:12, bold:true, color:C.ink, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
s.addText(title, { x:0.84, y:yy+0.04, w:2.4, h:0.39,
fontSize:10, bold:true, color:C.ink, fontFace:"Calibri", valign:"middle", margin:0 });
s.addText(desc, { x:3.35, y:yy+0.04, w:6.3, h:0.39,
fontSize:10, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 14 — SOURCE DOCUMENTS & CRF
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Source Documents & Case Report Forms (CRF)",
"Foundation of trial data quality and integrity");
foot(s, 14);
card(s, 0.3, 1.42, 4.5, 1.9, "Source Documents (SD)",
["Original records: medical notes, lab reports, pharmacy records, vital signs logs",
"Must be ALCOA-C: Attributable, Legible, Contemporaneous, Original, Accurate, Complete",
"No corrections without reason; use single strikethrough, initial & date","Retained at site per regulatory requirement (usually 15 years)"], C.aqua);
card(s, 5.1, 1.42, 4.5, 1.9, "Case Report Forms (CRF / eCRF)",
["Data transcription tool: paper CRF or electronic EDC (e.g. Medidata Rave, OpenClinica)",
"Every field traceable to source document (SDV by CRA/monitor)","Protocol deviations & exceptions must be noted","Queries raised for inconsistencies; resolved with audit trail"], C.sky);
card(s, 0.3, 3.46, 4.5, 1.7, "Common Documents at Site",
["Screening & enrolment log","Concomitant medication log","IP dispensing & accountability log","AE/SAE log & follow-up reports"], C.royal);
card(s, 5.1, 3.46, 4.5, 1.7, "Data Integrity Principles (ALCOA+)",
["Attributable — who did what & when","Legible — readable now and in future","Original — first capture of data","Accurate & Complete — no missing entries"], C.aqua);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 15 — ADVERSE EVENTS & PHARMACOVIGILANCE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Adverse Events & Pharmacovigilance in Clinical Trials",
"Protecting subject safety throughout the trial");
foot(s, 15);
const aeRows = [
["Adverse Event (AE)", "Any untoward medical occurrence in a trial subject; not necessarily causal"],
["Serious AE (SAE)", "Death, life-threatening, hospitalisation, disability, congenital anomaly, or medically significant"],
["Adverse Drug Reaction (ADR)", "AE where a causal relationship with the IP is at least a reasonable possibility"],
["SUSAR", "Suspected Unexpected Serious Adverse Reaction — expedited reporting to IEC & CDSCO (7/15 days)"],
["Expectedness", "Compared to Investigator's Brochure (IB) or product label; unexpected = not in IB"],
["Causality", "Assessed by PI: Not related / Unlikely / Possible / Probable / Definite"],
];
aeRows.forEach(([label, val], i) => zrow(s, 1.42 + i*0.52, label, val, i%2===0));
s.addShape(pres.ShapeType.rect, { x:0.3, y:4.6, w:9.4, h:0.7,
fill:{color:C.ink}, line:{color:C.ink} });
s.addText(
"Pharmacist's duty: monitor for AEs, document accurately, assist PI in reporting SAEs within mandated timelines.",
{ x:0.5, y:4.63, w:9.0, h:0.64,
fontSize:11, color:C.white, fontFace:"Calibri", valign:"middle", italic:true, margin:0 });
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 16 — DATA MANAGEMENT & INTEGRITY
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Clinical Data Management & Integrity",
"Ensuring the reliability of trial data from collection to submission");
foot(s, 16);
card(s, 0.3, 1.42, 4.5, 1.85, "Data Collection & Entry",
["Electronic Data Capture (EDC) — Medidata Rave, Oracle InForm, REDCap","Real-time data entry reduces transcription error","Role-based EDC access (site vs. sponsor vs. CRA)","Audit trail: every entry timestamped & attributed"], C.aqua);
card(s, 5.1, 1.42, 4.5, 1.85, "Data Validation & Cleaning",
["Edit checks triggered for out-of-range values","Queries sent to site; resolved with source document","Data review meetings between sponsor & site DM","Database lock after final clean data confirmation"], C.sky);
card(s, 0.3, 3.42, 4.5, 1.7, "Regulatory Data Requirements",
["21 CFR Part 11 / EU Annex 11 for eCRF","CDSCO requires data dossier with submission","Archive data for 15+ years post-trial","Statistical analysis plan (SAP) pre-specified"], C.royal);
card(s, 5.1, 3.42, 4.5, 1.7, "Pharmacist's Data Responsibilities",
["IP dispensing log accuracy","Temperature deviation documentation","Pharmacy section CRF completion","Reconciliation of IP at trial closure"], C.aqua);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 17 — MY LEARNING OBJECTIVES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "My Learning Objectives", "What I aim to achieve through this clinical research rotation");
foot(s, 17);
const domains = [
["Knowledge", C.ink, [
"Understand end-to-end clinical trial conduct per ICH-GCP E6(R2)",
"Learn IP receipt, storage, dispensing & accountability procedures",
"Understand informed consent, AE reporting & documentation standards",
"Gain knowledge of CDSCO/NDCT 2019 & IEC requirements",
]],
["Skills", C.royal, [
"Prepare & verify IP dispensing records accurately",
"Complete source documents & CRF entries (ALCOA-C)",
"Conduct protocol deviation & SAE documentation",
"Use EDC system under supervision",
]],
["Attitude", C.aqua, [
"Uphold ethical principles and subject safety at all times",
"Demonstrate GCP-compliant behaviour in all activities",
"Show initiative and critical thinking in trial operations",
"Respect confidentiality of trial subjects & data",
]],
];
domains.forEach(([dom, col, items], i) => {
const x = 0.3 + i*3.15;
s.addShape(pres.ShapeType.rect, { x, y:1.42, w:3.0, h:3.75,
fill:{color:C.white}, line:{color:C.divider, pt:1},
shadow:{type:"outer",color:"000000",blur:5,offset:2,angle:135,opacity:0.08} });
s.addShape(pres.ShapeType.rect, { x, y:1.42, w:3.0, h:0.56,
fill:{color:col}, line:{color:col} });
s.addText(dom, { x:x+0.1, y:1.42, w:2.8, h:0.56,
fontSize:15, bold:true, color:C.white, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
const bi = items.map((b,j) => ({ text:b, options:{
bullet:true, breakLine:j<items.length-1,
fontSize:9.5, color:"333333", fontFace:"Calibri" }}));
s.addText(bi, { x:x+0.15, y:2.06, w:2.7, h:3.0, valign:"top", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 18 — QUESTIONS I PLAN TO ASK
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Questions I Plan to Ask", "Demonstrating GCP knowledge and academic preparedness");
foot(s, 18);
const qs = [
"How is the randomisation sequence generated and who has access to the randomisation code at this site?",
"What is the procedure for handling and documenting temperature excursions in IP storage?",
"How does the site pharmacist manage IP for a blinded trial — who holds the unblinding envelopes?",
"What is the process for documenting a protocol deviation, and how are repeat deviations escalated?",
"How are SAEs reported — what is the internal escalation pathway before regulatory submission?",
"What EDC system is used, and what level of access will a student have during the rotation?",
"How does the CRA conduct source data verification (SDV) and what documents are typically reviewed?",
];
qs.forEach((q, i) => {
const yy = 1.42 + i*0.54;
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:9.4, h:0.47,
fill:{color: i%2===0 ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
s.addText(`Q${i+1}`, { x:0.35, y:yy+0.03, w:0.48, h:0.41,
fontSize:11, bold:true, color:C.aqua, fontFace:"Calibri",
align:"center", valign:"middle", margin:0 });
s.addText(q, { x:0.9, y:yy+0.04, w:8.73, h:0.39,
fontSize:10, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 19 — EXPECTED CHALLENGES & STRATEGIES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide(); bg(s);
header(s, "Expected Challenges & My Strategies", "Proactive preparation for a GCP-compliant rotation");
foot(s, 19);
const items = [
["Understanding complex protocol", "Read full protocol & amendments before visit; prepare a protocol summary sheet"],
["Navigating EDC system", "Request a demo/training session; review EDC user manual provided by sponsor"],
["IP accountability accuracy", "Double-check every dispensing entry; use accountability templates from site SOPs"],
["SAE/AE documentation timelines", "Note timeline requirements per protocol; maintain AE tracking log proactively"],
["Confidentiality & data privacy", "Study site's confidentiality agreement; never record subject identifiers externally"],
["Keeping up with regulatory updates", "Subscribe to CDSCO circulars; maintain a regulatory update log during rotation"],
];
items.forEach(([challenge, strategy], i) => {
const yy = 1.42 + i*0.62;
s.addShape(pres.ShapeType.rect, { x:0.3, y:yy, w:4.35, h:0.55,
fill:{color: i%2===0 ? C.ink : C.royal}, line:{color: i%2===0 ? C.ink : C.royal} });
s.addText(challenge, { x:0.42, y:yy+0.04, w:4.15, h:0.47,
fontSize:10, bold:true, color:C.white, fontFace:"Calibri", valign:"middle", margin:0 });
s.addShape(pres.ShapeType.rect, { x:4.75, y:yy, w:5.0, h:0.55,
fill:{color: i%2===0 ? C.white : C.pill}, line:{color:C.divider, pt:0.5} });
s.addText(strategy, { x:4.85, y:yy+0.04, w:4.82, h:0.47,
fontSize:10, color:"333333", fontFace:"Calibri", valign:"middle", margin:0 });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 20 — THANK YOU
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
// full bg
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%",
fill:{color:C.ink}, line:{color:C.ink} });
// right accent panel
s.addShape(pres.ShapeType.rect, { x:7.3, y:0, w:2.7, h:"100%",
fill:{color:C.royal}, line:{color:C.royal} });
s.addShape(pres.ShapeType.rect, { x:8.8, y:0, w:1.2, h:"100%",
fill:{color:C.aqua}, line:{color:C.aqua} });
// top badge
s.addShape(pres.ShapeType.rect, { x:0.45, y:0.85, w:3.6, h:0.36,
fill:{color:C.aqua}, line:{color:C.aqua} });
s.addText("M.PHARMACY · PHARMACY PRACTICE · CLINICAL RESEARCH",
{ x:0.45, y:0.85, w:3.6, h:0.36,
fontSize:6.5, bold:true, color:C.ink, fontFace:"Calibri",
align:"center", valign:"middle", charSpacing:1.2, margin:0 });
// THANK YOU
s.addText("THANK YOU", { x:0.4, y:1.35, w:6.7, h:1.15,
fontSize:58, bold:true, color:C.white, fontFace:"Calibri",
align:"left", charSpacing:3, margin:0 });
s.addText("for the opportunity to visit and learn.", { x:0.4, y:2.55, w:6.6, h:0.5,
fontSize:14, color:C.aqua, fontFace:"Calibri", italic:true, margin:0 });
// divider
s.addShape(pres.ShapeType.rect, { x:0.4, y:3.15, w:3.0, h:0.05,
fill:{color:C.aqua}, line:{color:C.aqua} });
s.addText(
"I look forward to contributing to clinical research operations and upholding\nthe highest standards of GCP during my rotation.",
{ x:0.4, y:3.3, w:6.6, h:0.7,
fontSize:11, color:"A8C8E8", fontFace:"Calibri", margin:0 });
s.addText("[Student Name]", { x:0.4, y:4.1, w:4.5, h:0.38,
fontSize:13, bold:true, color:C.white, fontFace:"Calibri", margin:0 });
s.addText("[Enrollment No.] | [University Name] | [Email] | [Contact]",
{ x:0.4, y:4.52, w:6.8, h:0.32,
fontSize:9.5, color:"A8C8E8", fontFace:"Calibri", margin:0 });
// right panel label
s.addText("PRE-SITE\nVISIT", { x:7.4, y:2.4, w:1.35, h:0.9,
fontSize:10, bold:true, color:C.white, fontFace:"Calibri",
align:"center", valign:"middle", charSpacing:2, margin:0 });
}
// ── WRITE ──────────────────────────────────────────────────────────────────
pres.writeFile({ fileName:"/home/daytona/workspace/pre-site-visit-assignment/Pre_Site_Visit_Clinical_Research_MPharm.pptx" })
.then(() => console.log("✅ Done: Pre_Site_Visit_Clinical_Research_MPharm.pptx"))
.catch(e => { console.error("❌ Error:", e); process.exit(1); });
node /home/daytona/workspace/pre-site-visit-assignment/clinical_research_presite.js
Pre Site Visit Clinical Research MPharm
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Cover — navy/aqua theme, subject clearly stated as Clinical Research |
| 2 | Table of Contents — all 20 slides |
| 3 | Introduction & Purpose — why a pre-site visit matters in CR |
| 4 | About the Site — CRO/hospital info fields to fill in |
| 5 | What is Clinical Research? — definition, phases, pharmacist's core role |
| 6 | Types of Clinical Trials — by intervention, design, therapeutic area, sponsor |
| 7 | Regulatory Framework & Ethics — CDSCO, NDCT 2019, ICH, Declaration of Helsinki |
| 8 | ICH-GCP E6(R2) Overview — all 8 core principles |
| 9 | Site Infrastructure & Facilities — clinical areas, research pharmacy, QA, lab |
| 10 | Key Personnel & Roles — PI, CRC, site pharmacist, CRA, DM, IEC, student |
| 11 | Role of Pharmacist in Clinical Trials — IP management, documentation, clinical support |
| 12 | Investigational Product (IP) Management — full 6-step lifecycle (receipt → destruction) |
| 13 | Informed Consent Process — 6-step ICP with ALCOA principles |
| 14 | Source Documents & CRF — ALCOA-C, EDC, SDV, common site documents |
| 15 | Adverse Events & Pharmacovigilance — AE, SAE, ADR, SUSAR, causality |
| 16 | Data Management & Integrity — EDC, data cleaning, 21 CFR Part 11, pharmacist duties |
| 17 | My Learning Objectives — Knowledge / Skills / Attitude |
| 18 | Questions I Plan to Ask — 7 GCP-specific, site-relevant questions |
| 19 | Expected Challenges & Strategies — 6 challenge/strategy pairs |
| 20 | Thank You — professional closing slide |
[bracketed placeholders] with your actual name, site, enrollment number, and date.PREPARE PPTX
Pre Site Visit Clinical Research MPharm
Presentation · PPTX