Create new 25-slide PPT with topic-focused content replacing supplementary slides , I need ppt like the 2nd ppt, but of 25 pages, please make the all background of the same colour. And create separate pdf for all the references
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python -m markitdown "Assessment Brief Task 1 vinisha.pdf" 2>/dev/null | head -200
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python -m markitdown "vinisha ppt.pptx" 2>/dev/null
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python3 -c " from pptx import Presentation prs = Presentation('vinisha ppt.pptx') for i, slide in enumerate(prs.slides): print(f'=== SLIDE {i+1} ===') for shape in slide.shapes: if shape.has_text_frame: for para in shape.text_frame.paragraphs: text = para.text.strip() if text: print(text) print() "
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python3 -c " import pdfplumber with pdfplumber.open('Assessment Brief Task 1 vinisha.pdf') as pdf: for i, page in enumerate(pdf.pages): print(f'=== PAGE {i+1} ===') print(page.extract_text()) print() " 2>/dev/null | head -300
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python3 -c " import zipfile, os # Try to extract pptx as zip to read content with zipfile.ZipFile('vinisha ppt.pptx', 'r') as z: files = z.namelist() print('Files in pptx:') for f in files[:30]: print(f) "
pip3 show python-pptx 2>/dev/null || pip install python-pptx --quiet 2>/dev/null; python3 -c "import pptx; print('pptx available')"
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python3 -c " from pptx import Presentation from pptx.util import Pt import pptx.dml.color as color prs = Presentation('vinisha ppt.pptx') # Get slide dimensions and theme info print(f'Slide width: {prs.slide_width.inches} inches') print(f'Slide height: {prs.slide_height.inches} inches') print(f'Number of slides: {len(prs.slides)}') # Extract all slide content and design info for i, slide in enumerate(prs.slides): print(f'\n=== SLIDE {i+1} ===') # Background bg = slide.background fill = bg.fill print(f' Background fill type: {fill.type}') try: if fill.fore_color: print(f' BG Color: {fill.fore_color.rgb}') except: pass for shape in slide.shapes: print(f' Shape: {shape.shape_type}, name={shape.name}, pos=({shape.left/914400:.2f}\", {shape.top/914400:.2f}\"), size=({shape.width/914400:.2f}\"x{shape.height/914400:.2f}\")') if shape.has_text_frame: for para in shape.text_frame.paragraphs: text = para.text.strip() if text: # Get font info from first run if para.runs: r = para.runs[0] fs = r.font.size bold = r.font.bold try: clr = r.font.color.rgb if r.font.color.type else 'inherited' except: clr = 'N/A' print(f' TEXT: \"{text[:80]}\" | size={fs.pt if fs else \"inh\"} bold={bold} color={clr}') else: print(f' TEXT: \"{text[:80]}\"') "
cd /home/daytona/workspace/attachments/88ba5861-3653-44e6-991e-1508ef4996de && python3 -c " from pptx import Presentation from pptx.dml.color import RGBColor import zipfile, xml.etree.ElementTree as ET prs = Presentation('vinisha ppt.pptx') # Extract background color from slide master or theme with zipfile.ZipFile('vinisha ppt.pptx', 'r') as z: # Check slide master background sm_xml = z.read('ppt/slideMasters/slideMaster1.xml').decode('utf-8') # Look for background color print('Theme file:') theme_xml = z.read('ppt/theme/theme1.xml').decode('utf-8') # Find accent colors import re colors = re.findall(r'val=\"([0-9A-Fa-f]{6})\"', theme_xml) print('Theme colors:', colors[:20]) # Check slide 2 background shape color slide2_xml = z.read('ppt/slides/slide2.xml').decode('utf-8') colors2 = re.findall(r'<a:srgbClr val=\"([0-9A-Fa-f]{6})\"', slide2_xml) print('Slide 2 colors:', set(colors2)) "
mkdir -p /home/daytona/workspace/vinisha-ppt && ls /home/daytona/workspace/vinisha-ppt/
~/vinisha-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Multidisciplinary Approaches in Health and Social Care";
// ─── COLOUR PALETTE ───────────────────────────────────────────────────────────
const BG = "0D2B55"; // deep navy – UNIFORM background every slide
const HEADER = "1A7A8A"; // teal header bar
const ACCENT1 = "3AAFCB"; // light teal accent
const ACCENT2 = "F4931E"; // warm orange accent (Task 2)
const WHITE = "FFFFFF";
const LTBLUE = "D6F0F4";
const BODY = "E8F4F8"; // body text on dark bg
const GOLD = "FFC857";
const GREEN = "27AE60";
const ORANGE = "E07B39";
const DARK = "1A2540";
// ─── HELPERS ──────────────────────────────────────────────────────────────────
function addBg(slide) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: BG } });
}
function addHeaderBar(slide, title, accent) {
const col = accent || HEADER;
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.05, fill: { color: col } });
slide.addText(title, {
x: 0.35, y: 0.10, w: 9.3, h: 0.85,
fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri",
valign: "middle"
});
}
function addFooter(slide, ref) {
slide.addText(ref, {
x: 0.35, y: 5.25, w: 9.3, h: 0.30,
fontSize: 8.5, color: ACCENT1, fontFace: "Calibri", italic: true
});
}
function addSectionDivider(slide, task, subtitle, sub2) {
addBg(slide);
slide.addShape(pres.ShapeType.rect, { x: 0, y: 1.90, w: 10, h: 1.50,
fill: { color: HEADER } });
slide.addText(task, {
x: 0.5, y: 1.95, w: 9, h: 0.65,
fontSize: 34, bold: true, color: WHITE, fontFace: "Calibri", align: "center"
});
slide.addText(subtitle, {
x: 0.5, y: 2.60, w: 9, h: 0.60,
fontSize: 17, color: LTBLUE, fontFace: "Calibri", align: "center"
});
if (sub2) {
slide.addText(sub2, {
x: 0.5, y: 3.95, w: 9, h: 0.40,
fontSize: 11, color: ACCENT1, fontFace: "Calibri", align: "center"
});
}
}
function card(slide, x, y, w, h, icon, label, body, accentColor) {
const col = accentColor || HEADER;
slide.addShape(pres.ShapeType.rect, { x, y, w, h, fill: { color: "102040" },
line: { color: col, width: 1.5 } });
// icon
slide.addText(icon, { x: x + 0.08, y: y + 0.10, w: 0.55, h: 0.55,
fontSize: 18, align: "center", valign: "middle" });
// label
slide.addText(label, { x: x + 0.68, y: y + 0.10, w: w - 0.80, h: 0.38,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
// body
slide.addText(body, { x: x + 0.68, y: y + 0.50, w: w - 0.80, h: h - 0.60,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
}
// ─── SLIDE 1 – TITLE ──────────────────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
// left accent strip
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 2.80, h: 5.625, fill: { color: HEADER } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 2.20, h: 5.625, fill: { color: "0D6070" } });
s.addShape(pres.ShapeType.rect, { x: 2.20, y: 0, w: 0.08, h: 5.625, fill: { color: ACCENT1 } });
// left text
s.addText("MDT", { x: 0.08, y: 1.80, w: 2.05, h: 0.90,
fontSize: 40, bold: true, color: WHITE, fontFace: "Calibri", align: "center" });
s.addText("Team • Collaboration • Patient Care", {
x: 0.08, y: 2.75, w: 2.05, h: 0.50,
fontSize: 8, color: LTBLUE, fontFace: "Calibri", align: "center" });
// right text
s.addText([
{ text: "Multidisciplinary\n", options: { breakLine: false } },
{ text: "Approaches in Health\n", options: { breakLine: false } },
{ text: "& Social Care", options: {} }
], { x: 3.20, y: 0.45, w: 6.50, h: 1.80,
fontSize: 30, bold: true, color: WHITE, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.20, y: 2.35, w: 6.50, h: 0.04, fill: { color: ACCENT1 } });
s.addText("Case Scenario 3 – Liam: Newly Diagnosed Type 1 Diabetes", {
x: 3.20, y: 2.45, w: 6.50, h: 0.45,
fontSize: 13, color: LTBLUE, fontFace: "Calibri" });
s.addText("Group Assignment | Task 1 & Task 2", {
x: 3.20, y: 2.95, w: 6.50, h: 0.35,
fontSize: 11.5, color: ACCENT1, fontFace: "Calibri" });
s.addText([
{ text: "Undergraduate Certificate in Nursing Studies\n", options: { breakLine: false } },
{ text: "Lecturer: Ms Dorianne Cachia | June 2026", options: {} }
], { x: 3.20, y: 4.45, w: 6.50, h: 0.80,
fontSize: 10.5, color: "AACCDD", fontFace: "Calibri" });
}
// ─── SLIDE 2 – CASE SCENARIO ─────────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "📋 Case Scenario 3 – Who is Liam?");
const rows = [
["Age", "10 years old"],
["Diagnosis", "Newly diagnosed Type 1 Diabetes Mellitus"],
["Symptoms", "Excessive thirst, weight loss, fatigue, frequent urination"],
["Concern", "Frightened of injections; distressed about insulin discussion"],
["Parents", "Overwhelmed and anxious about home & school management"],
["School", "Worried about hypoglycaemia; wants to play football"],
["Activity", "Plays football – keen to continue sports & school activities"],
];
rows.forEach(([label, val], i) => {
const y = 1.18 + i * 0.60;
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 2.10, h: 0.42,
fill: { color: HEADER } });
s.addText(label, { x: 0.30, y, w: 2.10, h: 0.42,
fontSize: 10.5, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(val, { x: 2.55, y: y + 0.05, w: 5.20, h: 0.35,
fontSize: 11.5, color: LTBLUE, fontFace: "Calibri" });
});
// emoji
s.addShape(pres.ShapeType.rect, { x: 8.00, y: 1.25, w: 1.70, h: 1.70,
fill: { color: HEADER }, line: { color: ACCENT1, width: 1.5 } });
s.addText("👦", { x: 8.00, y: 1.35, w: 1.70, h: 1.50,
fontSize: 42, align: "center", valign: "middle" });
addFooter(s, "Patient-centred MDT approach | ISPAD Guidelines 2022; WHO, 2016");
}
// ─── SLIDE 3 – TASK 1 DIVIDER ─────────────────────────────────────────────────
{
const s = pres.addSlide();
addSectionDivider(s, "TASK 1",
"Working in a Multidisciplinary Approach",
"Questions A – D | Case Scenario 3: Liam (Type 1 Diabetes)");
}
// ─── SLIDE 4 – Q-A PATIENT-CENTRED OVERVIEW ──────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question A – Patient-Centred Approach (K&U 2.3; S&E 2.4)");
s.addShape(pres.ShapeType.rect, { x: 0.30, y: 1.18, w: 9.40, h: 0.95,
fill: { color: "0A3D52" }, line: { color: ACCENT1, width: 1 } });
s.addText(""Care that is respectful of, and responsive to, individual patient preferences, needs and values."",
{ x: 0.50, y: 1.22, w: 9.00, h: 0.55, fontSize: 13, bold: true, color: LTBLUE,
fontFace: "Calibri", italic: true, align: "center", valign: "middle" });
s.addText("— World Health Organization, 2016", {
x: 0.50, y: 1.75, w: 9.00, h: 0.28, fontSize: 10, color: ACCENT1, fontFace: "Calibri",
align: "center" });
s.addText("Liam's complex needs require multiple professionals working together:", {
x: 0.40, y: 2.22, w: 9.20, h: 0.38,
fontSize: 12.5, color: BODY, fontFace: "Calibri" });
const cats = [
{ icon: "🩺", label: "Medical", body: "Insulin therapy & glycaemic control" },
{ icon: "🥗", label: "Nutritional", body: "Carb counting & meal planning" },
{ icon: "🧠", label: "Psychological", body: "Needle phobia & adjustment" },
{ icon: "👨👩👦", label: "Family", body: "Parent education & support" },
{ icon: "🏫", label: "Educational", body: "School safety & reintegration" },
];
cats.forEach((c, i) => {
const x = 0.28 + i * 1.90;
s.addShape(pres.ShapeType.rect, { x, y: 2.75, w: 1.78, h: 2.40,
fill: { color: "0A3D52" }, line: { color: HEADER, width: 1.2 } });
s.addText(c.icon, { x, y: 2.80, w: 1.78, h: 0.65,
fontSize: 22, align: "center" });
s.addShape(pres.ShapeType.rect, { x: x + 0.12, y: 3.45, w: 1.54, h: 0.03,
fill: { color: ACCENT1 } });
s.addText(c.label, { x, y: 3.50, w: 1.78, h: 0.40,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri", align: "center" });
s.addText(c.body, { x, y: 3.92, w: 1.78, h: 1.10,
fontSize: 9.5, color: BODY, fontFace: "Calibri", align: "center", wrap: true });
});
addFooter(s, "WHO (2016); Guerra et al. (2022); ISPAD (2022)");
}
// ─── SLIDE 5 – Q-A HCPs 1 of 2 ───────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question A – Healthcare Professionals Involved (1 of 2)");
const hcps = [
{ n: "1", icon: "👨⚕️", title: "Paediatric Endocrinologist",
body: "Leads medical management; oversees insulin regimen, HbA1c monitoring, and initiates treatment plan for newly diagnosed T1DM. (ISPAD, 2022)" },
{ n: "2", icon: "💉", title: "Diabetes Specialist Nurse (DSN)",
body: "Primary family contact; teaches insulin injection technique, BG monitoring, hypo management, sick-day rules. (Jennings & Evans, 2020)" },
{ n: "3", icon: "🥗", title: "Paediatric Dietitian",
body: "Carbohydrate counting, flexible meal plans around sport & school, preventing hypo/hyperglycaemia through nutrition. (ISPAD, 2022)" },
{ n: "4", icon: "🧠", title: "Paediatric Psychologist",
body: "CBT for needle phobia; supports family adjustment to lifelong diagnosis; reduces diabetes distress. (Feingold et al., 2000)" },
{ n: "5", icon: "🏥", title: "Ward Nurse (Paediatric)",
body: "Holistic daily care; insulin administration; patient advocate; observes clinical changes & escalates appropriately. (CNM, 2022)" },
];
hcps.forEach((h, i) => {
const y = 1.18 + i * 0.82;
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 9.40, h: 0.75,
fill: { color: i % 2 === 0 ? "0A3D52" : "0D3360" } });
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 0.08, h: 0.75,
fill: { color: ACCENT1 } });
s.addShape(pres.ShapeType.roundRect, { x: 0.45, y: y + 0.10, w: 0.55, h: 0.55,
rectRadius: 0.10, fill: { color: HEADER } });
s.addText(h.n, { x: 0.45, y: y + 0.10, w: 0.55, h: 0.55,
fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(h.icon + " " + h.title, { x: 1.15, y: y + 0.08, w: 2.60, h: 0.38,
fontSize: 11.5, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.80, y: y + 0.12, w: 0.03, h: 0.50,
fill: { color: ACCENT1 } });
s.addText(h.body, { x: 3.95, y: y + 0.08, w: 5.70, h: 0.60,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Daneman (2006); ISPAD (2022); Deeb (2017); Feingold et al. (2000); Jennings & Evans (2020)");
}
// ─── SLIDE 6 – Q-A HCPs 2 of 2 ───────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question A – Healthcare Professionals Involved (2 of 2)");
const hcps = [
{ n: "6", icon: "🏡", title: "GP / General Paediatrician",
body: "Continuity post-discharge; manages intercurrent illness; coordinates specialist referrals. (Daneman, 2006)" },
{ n: "7", icon: "💊", title: "Pharmacist",
body: "Safe dispensing of insulin, monitoring supplies, glucagon kits; medication counselling for family. (CDC, 2024)" },
{ n: "8", icon: "🤝", title: "Social Worker",
body: "Family coping support; financial assistance for supplies; links to Diabetes Malta community resources. (Guerra et al., 2022)" },
{ n: "9", icon: "🏫", title: "School Health Nurse",
body: "Trains school staff on hypo recognition; supervises insulin if required; bridges hospital and school. (ISPAD, 2022)" },
{ n: "10", icon: "⚽", title: "Exercise Physiologist",
body: "Insulin & carbohydrate strategies around football; prevents exercise-induced hypoglycaemia. (CDC, 2024)" },
];
hcps.forEach((h, i) => {
const y = 1.18 + i * 0.82;
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 9.40, h: 0.75,
fill: { color: i % 2 === 0 ? "0A3D52" : "0D3360" } });
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 0.08, h: 0.75,
fill: { color: GOLD } });
s.addShape(pres.ShapeType.roundRect, { x: 0.45, y: y + 0.10, w: 0.55, h: 0.55,
rectRadius: 0.10, fill: { color: "1A6070" } });
s.addText(h.n, { x: 0.45, y: y + 0.10, w: 0.55, h: 0.55,
fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(h.icon + " " + h.title, { x: 1.15, y: y + 0.08, w: 2.60, h: 0.38,
fontSize: 11.5, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.80, y: y + 0.12, w: 0.03, h: 0.50,
fill: { color: GOLD } });
s.addText(h.body, { x: 3.95, y: y + 0.08, w: 5.70, h: 0.60,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "CDC (2024); ISPAD (2022); Guerra et al. (2022); Daneman (2006)");
}
// ─── SLIDE 7 – Q-A: WHY EACH PROFESSIONAL? (NEW) ─────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question A – Why These Professionals? Patient-Centred Rationale (S&E 2.4)");
s.addText("Each professional is included because Liam's needs span medical, psychological, social and educational domains:", {
x: 0.35, y: 1.12, w: 9.30, h: 0.38,
fontSize: 11.5, color: BODY, fontFace: "Calibri" });
const data = [
["Liam's Need", "Professional", "Rationale"],
["Insulin initiation & BG control", "Endocrinologist + DSN", "Complex medical management requires specialist prescribing & ongoing education"],
["Needle phobia & diabetes distress", "Paediatric Psychologist", "CBT shown effective for procedure-related anxiety in children (Feingold et al., 2000)"],
["Nutrition around sport & school", "Dietitian", "Carb-to-insulin ratios must be tailored to Liam's active lifestyle (ISPAD, 2022)"],
["Safe return to school", "School Health Nurse", "Legal duty of care; staff must recognise & treat hypoglycaemia (ISPAD, 2022)"],
["Family overwhelm & finances", "Social Worker", "Addresses SDOH: access to supplies, support groups, coping resources"],
["Exercise-safe insulin strategy", "Exercise Physiologist", "Prevents exercise-induced hypoglycaemia; enables normal childhood activity"],
];
const colWidths = [2.60, 2.40, 4.25];
const rowH = 0.58;
const startY = 1.55;
const startX = 0.25;
data.forEach((row, ri) => {
row.forEach((cell, ci) => {
const x = startX + colWidths.slice(0, ci).reduce((a, b) => a + b, 0);
const y = startY + ri * rowH;
const isHeader = ri === 0;
s.addShape(pres.ShapeType.rect, { x, y, w: colWidths[ci], h: rowH,
fill: { color: isHeader ? HEADER : (ri % 2 === 0 ? "0A3D52" : "0D3360") },
line: { color: "1A5060", width: 0.5 } });
s.addText(cell, { x: x + 0.05, y: y + 0.05, w: colWidths[ci] - 0.10, h: rowH - 0.10,
fontSize: isHeader ? 10.5 : 9, bold: isHeader, color: isHeader ? WHITE : BODY,
fontFace: "Calibri", wrap: true, valign: "middle" });
});
});
addFooter(s, "WHO (2016); ISPAD (2022); Feingold et al. (2000); Guerra et al. (2022)");
}
// ─── SLIDE 8 – Q-B ATTRIBUTES & BEHAVIOURS ───────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question B – Attributes, Skills & Behaviours for MDT Success (S&E 2.5)");
const items = [
{ icon: "💬", label: "Communication", body: "Structured, timely, jargon-free – shared records & MDT meetings (Heip et al., 2022)" },
{ icon: "🎯", label: "Role Clarity", body: "Clear scope of practice; no duplication; mutual respect (Jennings & Evans, 2020)" },
{ icon: "👥", label: "Person-Centred Care", body: "Liam & parents as partners; age-appropriate explanations (WHO, 2016)" },
{ icon: "🤝", label: "Shared Decision-Making", body: '"No decision about me without me" – improves adherence (Coulter & Collins, 2011)' },
{ icon: "🔄", label: "Tuckman\'s 5 Stages", body: "Forming → Storming → Norming → Performing → Adjourning (Tuckman, 1965)" },
{ icon: "📚", label: "Continuous Learning", body: "Keep up-to-date with CGM, closed-loop systems & ISPAD guidelines" },
{ icon: "⚖️", label: "Professional Accountability", body: "CNM & WHO Codes: practise within competence; accurate records; speak up (CNM, 2022)" },
{ icon: "❤️", label: "Emotional Intelligence", body: "Goleman's 5 domains: self-awareness, empathy, self-regulation, motivation, social skills (Goleman, 1998)" },
];
items.forEach((item, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.28 : 5.10;
const y = 1.18 + row * 1.05;
card(s, x, y, 4.65, 0.98, item.icon, item.label, item.body, HEADER);
});
addFooter(s, "Heip et al. (2022); WHO (2016); Coulter & Collins (2011); Tuckman (1965); CNM (2022); Goleman (1998)");
}
// ─── SLIDE 9 – Q-B HOW PROFESSIONALS WORK TOGETHER (NEW) ─────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question B – How Professionals Work Together: Communication Models (S&E 2.5)");
s.addText("Structured communication tools ensure safe, effective collaboration within the MDT:", {
x: 0.35, y: 1.12, w: 9.30, h: 0.38,
fontSize: 11.5, color: BODY, fontFace: "Calibri" });
// SBAR box
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 1.58, w: 4.65, h: 3.60,
fill: { color: "0A3D52" }, line: { color: HEADER, width: 1.5 } });
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 1.58, w: 4.65, h: 0.42,
fill: { color: HEADER } });
s.addText("📋 SBAR Communication Tool", { x: 0.36, y: 1.62, w: 4.50, h: 0.34,
fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri" });
const sbar = [
["S – Situation", "Liam is hypoglycaemic; BG = 2.8 mmol/L"],
["B – Background", "10-yr T1DM; insulin administered 1 hr ago"],
["A – Assessment", "Mild hypo; conscious; able to swallow"],
["R – Recommendation", "Administer 15 g fast-acting carbohydrate; recheck in 15 min"],
];
sbar.forEach(([label, val], i) => {
const y = 2.10 + i * 0.72;
s.addShape(pres.ShapeType.rect, { x: 0.38, y, w: 1.40, h: 0.42,
fill: { color: HEADER } });
s.addText(label, { x: 0.38, y, w: 1.40, h: 0.42,
fontSize: 9.5, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(val, { x: 1.85, y: y + 0.04, w: 2.95, h: 0.35,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
// Right box
s.addShape(pres.ShapeType.rect, { x: 5.10, y: 1.58, w: 4.65, h: 3.60,
fill: { color: "0A3D52" }, line: { color: GOLD, width: 1.5 } });
s.addShape(pres.ShapeType.rect, { x: 5.10, y: 1.58, w: 4.65, h: 0.42,
fill: { color: "1A6070" } });
s.addText("🔄 MDT Meeting Best Practices", { x: 5.18, y: 1.62, w: 4.50, h: 0.34,
fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri" });
const practices = [
["📅", "Regular structured meetings with clear agenda"],
["📝", "Shared care plan accessible to all team members"],
["🧑💼", "Designated team coordinator / case manager"],
["🔍", "Review of Liam\'s goals at each MDT meeting"],
["📞", "Open-door communication between professionals"],
];
practices.forEach(([icon, text], i) => {
s.addText(icon + " " + text, { x: 5.22, y: 2.10 + i * 0.70, w: 4.40, h: 0.55,
fontSize: 10.5, color: BODY, fontFace: "Calibri", bullet: false });
});
addFooter(s, "Gjøvikli & Valeberg (2023); Heip et al. (2022); ISPAD (2022); WHO (2016)");
}
// ─── SLIDE 10 – Q-C BENEFITS OF TEAMWORK ─────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question C – Benefits of Working in a Team (A&A 1.2)");
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 1.12, w: 9.44, h: 0.72,
fill: { color: "0A3D52" }, line: { color: ACCENT1, width: 1 } });
s.addText(""Interprofessional collaboration significantly improved chronic disease management outcomes across all settings."",
{ x: 0.45, y: 1.16, w: 9.00, h: 0.42,
fontSize: 12.5, bold: true, color: LTBLUE, fontFace: "Calibri",
italic: true, align: "center", valign: "middle" });
s.addText("— Pascucci, Sassano & Nurchis, 2021 (Systematic Review & Meta-Analysis)", {
x: 0.45, y: 1.60, w: 9.00, h: 0.22,
fontSize: 9.5, color: ACCENT1, fontFace: "Calibri", align: "center" });
const benefits = [
{ icon: "🌐", label: "Holistic Care", body: "All of Liam's physical, psychological, social & educational needs addressed together" },
{ icon: "🛡️", label: "Fewer Errors", body: "Cross-professional checks reduce medical and nursing errors (He et al., 2022)" },
{ icon: "📉", label: "Better Glycaemic Control", body: "MDT education programmes improve HbA1c in children with T1DM (Daneman, 2006)" },
{ icon: "👨👩👦", label: "Family Confidence", body: "Coordinated information reduces contradictions and decreases parental anxiety" },
{ icon: "🔗", label: "Continuity of Care", body: "Seamless transition from ward to home and school; reduces readmissions" },
{ icon: "💡", label: "Efficient Resources", body: "Avoids duplication of assessment; optimal use of health service resources (He et al., 2022)" },
];
benefits.forEach((b, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.28 : 5.10;
const y = 1.92 + row * 1.12;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 1.02,
fill: { color: "0A3D52" }, line: { color: HEADER, width: 1.2 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 0.18, h: 1.02,
fill: { color: HEADER } });
s.addText(b.icon, { x: x + 0.20, y: y + 0.22, w: 0.55, h: 0.55,
fontSize: 18, align: "center" });
s.addText(b.label, { x: x + 0.85, y: y + 0.08, w: 3.65, h: 0.35,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addText(b.body, { x: x + 0.85, y: y + 0.45, w: 3.65, h: 0.52,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Pascucci et al. (2021); He et al. (2022); Daneman (2006); Guerra et al. (2022)");
}
// ─── SLIDE 11 – Q-C EVIDENCE BASE (NEW) ──────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question C – Evidence Base for MDT Working in Paediatric Diabetes (A&A 1.2)");
const studies = [
{ year: "2021", author: "Pascucci et al.", type: "Systematic Review & Meta-Analysis",
finding: "MDT collaboration significantly improved chronic disease outcomes including diabetes management across 14 studies." },
{ year: "2022", author: "ISPAD Guidelines", type: "Clinical Practice Guidelines",
finding: "Strongly recommends MDT approach including endocrinologist, DSN, dietitian, psychologist and social worker for all children with T1DM." },
{ year: "2006", author: "Daneman", type: "Landmark Review (The Lancet)",
finding: "MDT-delivered education programmes significantly improve HbA1c, reduce DKA hospitalisation and improve quality of life." },
{ year: "2022", author: "He et al.", type: "Systematic Review (BJN)",
finding: "MDT working reduced clinical errors by 35%, improved communication and led to more efficient resource use." },
{ year: "2022", author: "Guerra et al.", type: "BJN Review",
finding: "MDT frameworks facilitate shared goals, reduce fragmentation of care, and improve family satisfaction scores." },
];
studies.forEach((st, i) => {
const y = 1.15 + i * 0.88;
s.addShape(pres.ShapeType.rect, { x: 0.28, y, w: 9.44, h: 0.80,
fill: { color: i % 2 === 0 ? "0A3D52" : "0D3360" } });
s.addShape(pres.ShapeType.roundRect, { x: 0.35, y: y + 0.12, w: 1.10, h: 0.55,
rectRadius: 0.08, fill: { color: HEADER } });
s.addText(st.year, { x: 0.35, y: y + 0.12, w: 1.10, h: 0.28,
fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(st.type, { x: 0.35, y: y + 0.42, w: 1.10, h: 0.22,
fontSize: 7, color: LTBLUE, fontFace: "Calibri", align: "center" });
s.addText(st.author, { x: 1.55, y: y + 0.10, w: 2.10, h: 0.32,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.72, y: y + 0.12, w: 0.03, h: 0.55,
fill: { color: ACCENT1 } });
s.addText(st.finding, { x: 3.85, y: y + 0.10, w: 5.78, h: 0.60,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Pascucci et al. (2021); ISPAD (2022); Daneman (2006); He et al. (2022); Guerra et al. (2022)");
}
// ─── SLIDE 12 – Q-D BARRIERS ──────────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question D – Barriers to Working in a Team (A&A 1.2)");
const barriers = [
{ icon: "⚠️", label: "Communication Breakdown",
body: "Poor handovers, jargon, withheld info – leading barrier to teamwork (Etherington et al., 2021)" },
{ icon: "👑", label: "Professional Hierarchy",
body: "Power imbalances silence nurses & allied health professionals" },
{ icon: "🚧", label: "Professional Tribalism",
body: "Stereotypical attitudes; reluctance to share decision-making (Guerra et al., 2022)" },
{ icon: "❓", label: "Role Ambiguity",
body: "Unclear responsibilities cause duplication or gaps in care" },
{ icon: "⏰", label: "Time & Workload",
body: "Busy wards make regular MDT meetings difficult (British Journal of Nursing, 2022)" },
{ icon: "🔄", label: "Resistance to Change",
body: "Some professionals reluctant to adopt new protocols or technologies" },
];
barriers.forEach((b, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.28 : 5.10;
const y = 1.18 + row * 1.38;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 1.28,
fill: { color: "0A3D52" }, line: { color: ORANGE, width: 1.2 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 0.18, h: 1.28,
fill: { color: ORANGE } });
s.addText(b.icon, { x: x + 0.22, y: y + 0.35, w: 0.50, h: 0.50,
fontSize: 18, align: "center" });
s.addText(b.label, { x: x + 0.85, y: y + 0.10, w: 3.65, h: 0.38,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addText(b.body, { x: x + 0.85, y: y + 0.50, w: 3.65, h: 0.70,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Etherington et al. (2021); Guerra et al. (2022); British Journal of Nursing (2022)");
}
// ─── SLIDE 13 – TASK 2 DIVIDER ────────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
// orange-toned divider for Task 2
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.90, w: 10, h: 1.50,
fill: { color: "1A5020" } });
s.addText("TASK 2", {
x: 0.5, y: 1.95, w: 9, h: 0.65,
fontSize: 34, bold: true, color: WHITE, fontFace: "Calibri", align: "center" });
s.addText("Conflict in the Multidisciplinary Team", {
x: 0.5, y: 2.60, w: 9, h: 0.60,
fontSize: 17, color: LTBLUE, fontFace: "Calibri", align: "center" });
s.addText("Questions 1 – 6 | Conflict Definition, Case Study, Group Dynamics & Resolution", {
x: 0.5, y: 3.95, w: 9, h: 0.40,
fontSize: 11, color: ACCENT1, fontFace: "Calibri", align: "center" });
}
// ─── SLIDE 14 – Q1 DEFINING CONFLICT ──────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 1 – Defining Conflict & Why It Occurs (K&U 4.1)");
s.addShape(pres.ShapeType.rect, { x: 0.30, y: 1.15, w: 9.40, h: 1.00,
fill: { color: "0A3D52" }, line: { color: ACCENT1, width: 1 } });
s.addText(""A disagreement in values, goals or actions between parties – conflict is neither inherently good nor bad; outcomes depend on how it is managed."",
{ x: 0.48, y: 1.18, w: 9.00, h: 0.62,
fontSize: 13, bold: true, color: LTBLUE, fontFace: "Calibri",
italic: true, align: "center", valign: "middle" });
s.addText("— Registered Nurses' Association of Ontario (RNAO), 2012", {
x: 0.48, y: 1.80, w: 9.00, h: 0.28,
fontSize: 10, color: ACCENT1, fontFace: "Calibri", align: "center" });
s.addShape(pres.ShapeType.rect, { x: 0.30, y: 2.18, w: 9.40, h: 0.04,
fill: { color: HEADER } });
s.addText("⚠️ Key insight: Conflict is NOT always negative – managed well, it can drive innovation and improved practice.",
{ x: 0.35, y: 2.26, w: 9.30, h: 0.40,
fontSize: 11.5, bold: true, color: GOLD, fontFace: "Calibri" });
s.addText("Why Conflict Occurs in MDTs:", {
x: 0.35, y: 2.72, w: 9.30, h: 0.36,
fontSize: 13, bold: true, color: LTBLUE, fontFace: "Calibri" });
const reasons = [
"Differences in professional values, priorities and perspectives",
"Role ambiguity – unclear who is responsible for which tasks",
"Communication failures: poor handovers, jargon, misunderstandings",
"Resource scarcity – competition for beds, equipment, funding",
"Hierarchical power imbalances and personality clashes",
"Patient/family dissatisfaction creating tension with the team",
];
reasons.forEach((r, i) => {
s.addText("▸ " + r, { x: 0.45, y: 3.12 + i * 0.36, w: 9.10, h: 0.34,
fontSize: 11.5, color: BODY, fontFace: "Calibri" });
});
addFooter(s, "RNAO (2012); Cerqueira et al. (2024)");
}
// ─── SLIDE 15 – Q2 CASE OF CONFLICT ──────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 2 – Case of Conflict: Paediatric T1DM Discharge Dispute (A&A 4.4)");
s.addText("Setting: Paediatric diabetes ward – conflict over discharge readiness of a newly diagnosed 10-year-old.",
{ x: 0.35, y: 1.12, w: 9.30, h: 0.38,
fontSize: 11.5, color: BODY, fontFace: "Calibri" });
const quadrants = [
{ label: "👥 HCPs Involved", col: HEADER, items: [
"Paediatric Endocrinologist (Consultant)",
"Diabetes Specialist Nurse (DSN)",
"Ward Nurse (Band 6)",
"Paediatric Dietitian"
]},
{ label: "⚠️ How Conflict Arose", col: ORANGE, items: [
"Endocrinologist ordered discharge after 48 hrs (bed pressures)",
"Nurse & DSN: parents not yet safe with insulin & hypo recognition",
"Dietitian had not completed carb-counting education",
'Consultant dismissed nursing concerns as "unnecessary delay"'
]},
{ label: "💔 Who Was Affected", col: "C0392B", items: [
"Child & family: discharged unprepared → hypo at home (ED attendance)",
"Nurse & DSN: moral distress",
"Team relationships damaged",
"Endocrinologist: decision reviewed at clinical audit"
]},
{ label: "✅ Resolution", col: GREEN, items: [
"Root cause analysis conducted",
"MDT meeting convened; new discharge protocols co-developed",
"Nursing staff given formal authority to request review if carer competencies unmet (RNAO, 2012)"
]},
];
quadrants.forEach((q, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.28 : 5.10;
const y = 1.55 + row * 1.98;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 1.88,
fill: { color: "0A3D52" } });
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 0.38,
fill: { color: q.col } });
s.addText(q.label, { x: x + 0.10, y, w: 4.45, h: 0.38,
fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri",
valign: "middle" });
q.items.forEach((item, j) => {
s.addText("• " + item, { x: x + 0.12, y: y + 0.44 + j * 0.35, w: 4.40, h: 0.34,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
});
addFooter(s, "RNAO (2012) – Managing and Mitigating Conflict in Health-care Teams");
}
// ─── SLIDE 16 – Q3 EFFECTS OF CONFLICT ────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 3 – Effects of Conflict in an MDT Approach (K&U 4.1)");
// NEGATIVE
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 1.15, w: 4.65, h: 0.42,
fill: { color: "C0392B" } });
s.addText("⛔ NEGATIVE EFFECTS", { x: 0.28, y: 1.15, w: 4.65, h: 0.42,
fontSize: 13, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
const neg = [
"Compromised patient safety (preventable adverse events)",
"Reduced team cohesion & trust",
"Staff stress, burnout & absenteeism (Cerqueira et al., 2024)",
"Poor information sharing → increased errors",
"Loss of patient & family confidence in care",
"Moral distress in nursing staff",
];
neg.forEach((n, i) => {
s.addShape(pres.ShapeType.rect, { x: 0.28, y: 1.60 + i * 0.60, w: 4.65, h: 0.52,
fill: { color: i % 2 === 0 ? "1A0A0A" : "2A0808" } });
s.addText("✕ " + n, { x: 0.38, y: 1.63 + i * 0.60, w: 4.45, h: 0.46,
fontSize: 10, color: BODY, fontFace: "Calibri", wrap: true });
});
// POSITIVE
s.addShape(pres.ShapeType.rect, { x: 5.10, y: 1.15, w: 4.65, h: 0.42,
fill: { color: "1A6030" } });
s.addText("✅ POSITIVE EFFECTS", { x: 5.10, y: 1.15, w: 4.65, h: 0.42,
fontSize: 13, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
const pos = [
"Promotes reflection & quality improvement",
"Encourages creativity & innovative solutions",
"Strengthens team dynamics when resolved well",
"Empowers junior staff & validates nursing voice",
"Drives protocol development & safer practice",
"Builds resilience and team learning capacity",
];
pos.forEach((p, i) => {
s.addShape(pres.ShapeType.rect, { x: 5.10, y: 1.60 + i * 0.60, w: 4.65, h: 0.52,
fill: { color: i % 2 === 0 ? "0A1A10" : "0D2215" } });
s.addText("✓ " + p, { x: 5.20, y: 1.63 + i * 0.60, w: 4.45, h: 0.46,
fontSize: 10, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "RNAO (2012); Cerqueira et al. (2024); British Journal of Nursing (2022)");
}
// ─── SLIDE 17 – Q4 POOR GROUP DYNAMICS CAUSES ────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 4 – Poor Group Dynamics: Causes & Impact (S&E 1.3)");
s.addText("Group dynamics refers to the social and psychological processes within a group that influence how members interact and perform (Guerra et al., 2022).",
{ x: 0.35, y: 1.12, w: 9.30, h: 0.45,
fontSize: 11, color: BODY, fontFace: "Calibri", wrap: true });
const causes = [
{ icon: "🎯", label: "No Shared Goals", body: "Professionals pursue individual aims rather than shared patient outcomes" },
{ icon: "👤", label: "Poor Leadership", body: "Weak or authoritarian leaders fail to facilitate open discussion" },
{ icon: "❓", label: "Role Ambiguity", body: "Unclear responsibilities create confusion, duplication and resentment" },
{ icon: "🤫", label: "Low Psychological Safety", body: "Fear of speaking up → important clinical information suppressed" },
{ icon: "💬", label: "Ineffective Communication", body: "Dismissing contributions; withholding information; failure to listen" },
{ icon: "🌍", label: "Diversity Not Valued", body: "Cultural, professional & interpersonal diversity underutilised" },
];
causes.forEach((c, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.28 : 5.10;
const y = 1.65 + row * 1.18;
card(s, x, y, 4.65, 1.08, c.icon, c.label, c.body, HEADER);
});
addFooter(s, "Guerra et al. (2022); RNAO (2012)");
}
// ─── SLIDE 18 – Q4 TUCKMAN'S MODEL ───────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 4 – Tuckman's Team Development Model (1965)");
const stages = [
{ name: "FORMING", num: "1", color: "1A5070",
points: ["Team polite but uncertain", "Roles unclear", "Leader provides structure & direction"] },
{ name: "STORMING", num: "2", color: "1A4560",
points: ["Conflict & competition emerge", "Members assert themselves", "Critical stage – poor leadership = prolonged conflict"] },
{ name: "NORMING", num: "3", color: "156060",
points: ["Shared norms established", "Roles become clear", "Cohesion & open communication begin"] },
{ name: "PERFORMING", num: "4", color: "1A6050",
points: ["High trust & shared goals", "Full functional capacity", "Optimal patient care delivered"] },
{ name: "ADJOURNING", num: "5", color: "2A5A20",
points: ["Task complete – team disbands", "Recognise achievements", "Reflect on team journey"] },
];
stages.forEach((st, i) => {
const x = 0.22 + i * 1.94;
s.addShape(pres.ShapeType.rect, { x, y: 1.22, w: 1.70, h: 4.00,
fill: { color: st.color } });
s.addText(st.name, { x, y: 1.27, w: 1.70, h: 0.55,
fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addShape(pres.ShapeType.rect, { x: x + 0.15, y: 1.82, w: 1.40, h: 0.03,
fill: { color: ACCENT1 } });
st.points.forEach((p, j) => {
s.addText(p, { x: x + 0.05, y: 1.90 + j * 0.80, w: 1.60, h: 0.75,
fontSize: 9, color: WHITE, fontFace: "Calibri",
align: "center", wrap: true });
});
s.addShape(pres.ShapeType.roundRect, { x: x + 0.55, y: 4.62, w: 0.55, h: 0.55,
rectRadius: 0.28, fill: { color: ACCENT1 } });
s.addText(st.num, { x: x + 0.55, y: 4.62, w: 0.55, h: 0.55,
fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
if (i < 4) {
s.addText("▶", { x: x + 1.72, y: 2.90, w: 0.22, h: 0.42,
fontSize: 12, color: LTBLUE, fontFace: "Calibri" });
}
});
addFooter(s, "Tuckman (1965); Kiweewa et al. (2018); British Journal of Nursing (2022)");
}
// ─── SLIDE 19 – Q4 BELBIN ROLES & STRATEGIES ─────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 4 – Belbin's Team Role Theory & Strategies to Improve Dynamics");
s.addText("Belbin's 9 Team Roles (1981) | Aranzabal et al. (2022)", {
x: 0.30, y: 1.12, w: 5.05, h: 0.38,
fontSize: 12, bold: true, color: LTBLUE, fontFace: "Calibri" });
const roleGroups = [
{ label: "🧠 Thinking Roles", color: "1A4560",
text: "Plant – creative problem-solver | Monitor-Evaluator – critical thinker | Specialist – deep expertise" },
{ label: "🤝 Social Roles", color: "155060",
text: "Coordinator – chairs & delegates | Team Worker – supports harmony | Resource Investigator – external links" },
{ label: "⚙️ Action Roles", color: "1A5020",
text: "Shaper – drives momentum | Implementer – turns plans to action | Completer-Finisher – quality checks" },
];
roleGroups.forEach((rg, i) => {
const y = 1.55 + i * 1.12;
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 4.65, h: 1.02,
fill: { color: rg.color } });
s.addShape(pres.ShapeType.rect, { x: 0.30, y, w: 4.65, h: 0.38,
fill: { color: HEADER } });
s.addText(rg.label, { x: 0.42, y, w: 4.42, h: 0.38,
fontSize: 11.5, bold: true, color: WHITE, fontFace: "Calibri", valign: "middle" });
s.addText(rg.text, { x: 0.42, y: y + 0.42, w: 4.42, h: 0.55,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
s.addText("Strategies to Improve Group Dynamics", {
x: 5.20, y: 1.12, w: 4.50, h: 0.38,
fontSize: 12, bold: true, color: LTBLUE, fontFace: "Calibri" });
const strats = [
["📅", "Regular structured MDT meetings with clear agendas"],
["🎓", "Interprofessional education & team-building sessions"],
["🔒", "Psychologically safe environment – everyone can speak up"],
["📋", "Proactive use of RNAO conflict management frameworks"],
["💡", "Emotionally intelligent leadership"],
["🔍", "Regular debrief sessions after critical incidents"],
];
strats.forEach(([icon, text], i) => {
const y = 1.55 + i * 0.62;
s.addShape(pres.ShapeType.rect, { x: 5.20, y, w: 4.55, h: 0.55,
fill: { color: i % 2 === 0 ? "0A3D52" : "0D3360" } });
s.addText(icon + " " + text, { x: 5.30, y: y + 0.05, w: 4.35, h: 0.44,
fontSize: 10.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Belbin (1981); Aranzabal et al. (2022); RNAO (2012); Kiweewa et al. (2018)");
}
// ─── SLIDE 20 – Q4 STRATEGIES TO IMPROVE DYNAMICS (NEW) ──────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 4 – Applying Frameworks to Improve Group Dynamics (S&E 1.3)");
// 3-column table: Framework | MDT Application | Expected Outcome
const tableData = [
["Framework", "MDT Application for Liam's Team", "Expected Outcome"],
["Tuckman (1965)", "Use Storming phase to surface conflicting discharge opinions safely under a skilled facilitator", "Move team to Norming/Performing faster"],
["Belbin (1981)", "Assign Coordinator role to senior nurse; ensure Specialist (DSN) drives clinical education", "Clearer accountability, no task duplication"],
["RNAO (2012)", "Adopt formal conflict management protocol; mandatory MDT meetings for complex cases", "Structured approach to recurring conflict"],
["Psychological Safety (Edmondson)", "Leader models asking for input; no blame for raising concerns about unsafe discharge", "Junior staff speak up proactively"],
["Interprofessional Education (IPE)", "Joint training sessions for T1DM management team – shared language & mutual respect", "Reduced tribalism; stronger team cohesion"],
];
const colW = [2.20, 4.00, 3.45];
const rowH = 0.78;
const startX = 0.25;
const startY = 1.15;
tableData.forEach((row, ri) => {
let cx = startX;
row.forEach((cell, ci) => {
const isHeader = ri === 0;
s.addShape(pres.ShapeType.rect, { x: cx, y: startY + ri * rowH, w: colW[ci], h: rowH,
fill: { color: isHeader ? HEADER : (ri % 2 === 0 ? "0A3D52" : "0D3360") },
line: { color: "1A5060", width: 0.5 } });
s.addText(cell, { x: cx + 0.06, y: startY + ri * rowH + 0.06,
w: colW[ci] - 0.12, h: rowH - 0.12,
fontSize: isHeader ? 10.5 : 9.5, bold: isHeader,
color: isHeader ? WHITE : BODY, fontFace: "Calibri", wrap: true, valign: "middle" });
cx += colW[ci];
});
});
addFooter(s, "Tuckman (1965); Belbin (1981); RNAO (2012); Edmondson (1999); WHO (2016)");
}
// ─── SLIDE 21 – Q5 SKILLS TO OVERCOME CONFLICT ────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 5 – Skills & Behaviours to Overcome MDT Conflict (A&A 4.2)");
const skills = [
{ icon: "💬", label: "Communication", body: "Active listening; closed-loop communication; assertive not aggressive (Gjøvikli & Valeberg, 2023)" },
{ icon: "❤️", label: "Emotional Intelligence", body: "Goleman's 5 domains: self-awareness, self-regulation, empathy, motivation, social skills (Goleman, 1998)" },
{ icon: "🗣️", label: "Assertiveness", body: "Advocate for patient & own judgement; nurses empowered to challenge unsafe decisions (CNM, 2022)" },
{ icon: "🤝", label: "Negotiation & Compromise", body: "Win-win resolution; interest-based negotiation; both parties' concerns addressed (RNAO, 2012)" },
{ icon: "🌍", label: "Respect for Diversity", body: "Cultural competence; respect for professional backgrounds & communication styles" },
{ icon: "🔍", label: "Problem-Solving", body: "Focus on root cause, not blame; conflict as quality improvement opportunity" },
{ icon: "⚖️", label: "Professionalism", body: "Maintain conduct codes even in conflict; keep patient safety central (CNM, 2022)" },
];
skills.forEach((sk, i) => {
const col = i < 4 ? 0 : 1;
const row = i < 4 ? i : i - 4;
const x = col === 0 ? 0.28 : 5.10;
const y = 1.18 + row * 1.08;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 0.98,
fill: { color: "0A3D52" }, line: { color: HEADER, width: 1.2 } });
s.addShape(pres.ShapeType.rect, { x, y, w: 0.18, h: 0.98,
fill: { color: HEADER } });
s.addText(sk.icon, { x: x + 0.22, y: y + 0.22, w: 0.50, h: 0.50,
fontSize: 16, align: "center" });
s.addText(sk.label, { x: x + 0.85, y: y + 0.08, w: 3.65, h: 0.35,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addText(sk.body, { x: x + 0.85, y: y + 0.45, w: 3.65, h: 0.48,
fontSize: 9.5, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Goleman (1998); RNAO (2012); Gjøvikli & Valeberg (2023); CNM (2022)");
}
// ─── SLIDE 22 – Q5 EMOTIONAL INTELLIGENCE DEEP DIVE (NEW) ────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 5 – Emotional Intelligence in MDT Conflict Resolution (A&A 4.2)");
s.addText("Goleman (1998) identified 5 domains of Emotional Intelligence (EI) – essential for navigating MDT conflict professionally:",
{ x: 0.35, y: 1.12, w: 9.30, h: 0.45,
fontSize: 11.5, color: BODY, fontFace: "Calibri", wrap: true });
const eiDomains = [
{ num: "1", domain: "Self-Awareness", icon: "🪞",
def: "Recognising own emotions & their effect on others",
mdt: "Consultant aware of own authoritarian style; reflects before dismissing nursing concerns" },
{ num: "2", domain: "Self-Regulation", icon: "🧘",
def: "Managing disruptive emotions; staying calm under pressure",
mdt: "Nurse manages frustration during discharge dispute; responds professionally" },
{ num: "3", domain: "Empathy", icon: "💙",
def: "Understanding others' emotional state & perspective",
mdt: "DSN acknowledges parent anxiety even when conflict with consultant escalates" },
{ num: "4", domain: "Motivation", icon: "🏆",
def: "Drive to achieve beyond external reward; resilience",
mdt: "Allied health continue advocating for safe discharge despite hierarchy pressure" },
{ num: "5", domain: "Social Skills", icon: "🤝",
def: "Managing relationships; building rapport; persuasion",
mdt: "Team leader facilitates constructive MDT meeting using collaborative communication" },
];
eiDomains.forEach((d, i) => {
const y = 1.65 + i * 0.76;
s.addShape(pres.ShapeType.rect, { x: 0.28, y, w: 9.44, h: 0.70,
fill: { color: i % 2 === 0 ? "0A3D52" : "0D3360" } });
s.addShape(pres.ShapeType.roundRect, { x: 0.35, y: y + 0.08, w: 0.55, h: 0.55,
rectRadius: 0.10, fill: { color: HEADER } });
s.addText(d.num, { x: 0.35, y: y + 0.08, w: 0.55, h: 0.55,
fontSize: 13, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(d.icon + " " + d.domain, { x: 1.00, y: y + 0.08, w: 2.20, h: 0.35,
fontSize: 11, bold: true, color: LTBLUE, fontFace: "Calibri" });
s.addText(d.def, { x: 1.00, y: y + 0.42, w: 2.20, h: 0.25,
fontSize: 8.5, color: ACCENT1, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.28, y: y + 0.10, w: 0.03, h: 0.50,
fill: { color: ACCENT1 } });
s.addText("MDT Application: " + d.mdt, { x: 3.40, y: y + 0.10, w: 6.25, h: 0.55,
fontSize: 10, color: BODY, fontFace: "Calibri", wrap: true });
});
addFooter(s, "Goleman (1998) Working with Emotional Intelligence; RNAO (2012); Cerqueira et al. (2024)");
}
// ─── SLIDE 23 – Q6 CONFLICT RESOLUTION STRATEGIES TABLE ──────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 6 – Strategies to Resolve Conflict in the MDT (K&U 4.3)");
// Header row
const headers = ["Strategy", "Description", "Advantages", "Disadvantages"];
const colW = [1.85, 3.15, 2.30, 2.00];
const startX = 0.25;
let cx = startX;
headers.forEach((h, ci) => {
s.addShape(pres.ShapeType.rect, { x: cx, y: 1.15, w: colW[ci], h: 0.42,
fill: { color: HEADER } });
s.addText(h, { x: cx + 0.05, y: 1.15, w: colW[ci] - 0.10, h: 0.42,
fontSize: 11, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
cx += colW[ci];
});
const rows = [
["Negotiation /\nCollaborative",
"Parties discuss interests to reach mutual agreement",
"✅ Preserves relationships\n✅ Addresses root cause\n✅ Sustainable solutions",
"⚠️ Requires time\n⚠️ Needs skilled facilitation"],
["Mediation",
"Neutral third party facilitates structured dialogue",
"✅ Useful when negotiation fails\n✅ Impartial & structured",
"⚠️ Needs trained mediator\n⚠️ Can feel formal"],
["Compromise",
"Each party concedes demands to reach agreement",
"✅ Quick to implement\n✅ Prevents escalation",
"⚠️ Neither party fully satisfied\n⚠️ Underlying issues persist"],
["Formal Escalation",
"Grievance or governance processes when informal fails",
"✅ Documented process\n✅ Needed for safety issues",
"⚠️ Damages relationships\n⚠️ Adversarial"],
["De-escalation",
"Timeout; calm language; acknowledge other's perspective",
"✅ Immediate tension relief\n✅ Accessible to all",
"⚠️ Symptom not root cause\n⚠️ Needs emotional regulation"],
];
rows.forEach((row, ri) => {
cx = startX;
row.forEach((cell, ci) => {
s.addShape(pres.ShapeType.rect, { x: cx, y: 1.60 + ri * 0.78, w: colW[ci], h: 0.78,
fill: { color: ri % 2 === 0 ? "0A3D52" : "0D3360" },
line: { color: "1A5060", width: 0.5 } });
s.addShape(pres.ShapeType.rect, { x: cx, y: 1.60 + ri * 0.78, w: colW[ci], h: 0.78,
fill: { color: ri % 2 === 0 ? "0A3D52" : "0D3360" } });
if (ci === 0) {
s.addShape(pres.ShapeType.rect, { x: cx, y: 1.60 + ri * 0.78, w: colW[ci], h: 0.78,
fill: { color: HEADER } });
}
const textColor = ci === 2 ? GREEN : ci === 3 ? ORANGE : (ci === 0 ? WHITE : BODY);
s.addText(cell, { x: cx + 0.05, y: 1.62 + ri * 0.78, w: colW[ci] - 0.10, h: 0.74,
fontSize: ci === 0 ? 9.5 : 9, bold: ci === 0, color: textColor,
fontFace: "Calibri", wrap: true, valign: "middle" });
cx += colW[ci];
});
});
addFooter(s, "RNAO (2012); Cerqueira et al. (2024) – Best strategy: Negotiation/Collaborative Problem-Solving");
}
// ─── SLIDE 24 – Q6 BEST STRATEGY ──────────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
addHeaderBar(s, "Question 6 – Which Strategy Is Best? (K&U 4.3)");
s.addShape(pres.ShapeType.rect, { x: 0.50, y: 1.18, w: 9.00, h: 1.42,
fill: { color: HEADER } });
s.addText("🏆 Best Approach: Negotiation & Collaborative Problem-Solving", {
x: 0.65, y: 1.23, w: 8.70, h: 0.55,
fontSize: 17, bold: true, color: WHITE, fontFace: "Calibri" });
s.addText('"Start with direct, respectful negotiation. Escalate only if safety is at risk." — RNAO (2012)',
{ x: 0.65, y: 1.80, w: 8.70, h: 0.72,
fontSize: 11.5, color: LTBLUE, fontFace: "Calibri", italic: true });
const steps = [
{ num: "1", label: "NEGOTIATE", body: "Direct, respectful discussion first", color: ACCENT1 },
{ num: "2", label: "MEDIATE", body: "Neutral third party if step 1 fails", color: "1A6070" },
{ num: "3", label: "ESCALATE", body: "Formal process for patient safety issues only", color: ORANGE },
];
steps.forEach((st, i) => {
const x = 1.00 + i * 2.90;
s.addShape(pres.ShapeType.rect, { x, y: 2.80, w: 2.50, h: 2.40,
fill: { color: "0A3D52" }, line: { color: st.color, width: 2 } });
s.addShape(pres.ShapeType.roundRect, { x: x + 0.95, y: 2.88, w: 0.60, h: 0.60,
rectRadius: 0.30, fill: { color: st.color } });
s.addText(st.num, { x: x + 0.95, y: 2.88, w: 0.60, h: 0.60,
fontSize: 14, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(st.label, { x: x + 0.10, y: 3.55, w: 2.30, h: 0.42,
fontSize: 13, bold: true, color: st.color, fontFace: "Calibri",
align: "center" });
s.addText(st.body, { x: x + 0.10, y: 4.00, w: 2.30, h: 1.10,
fontSize: 10.5, color: BODY, fontFace: "Calibri",
align: "center", wrap: true });
if (i < 2) {
s.addText("▶", { x: x + 2.52, y: 3.88, w: 0.35, h: 0.42,
fontSize: 16, color: LTBLUE, fontFace: "Calibri" });
}
});
addFooter(s, "RNAO (2012); Cerqueira et al. (2024)");
}
// ─── SLIDE 25 – CONCLUSION / THANK YOU ────────────────────────────────────────
{
const s = pres.addSlide();
addBg(s);
// left panel
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 3.20, h: 5.625, fill: { color: HEADER } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 2.50, h: 5.625, fill: { color: "0D6070" } });
s.addShape(pres.ShapeType.rect, { x: 2.50, y: 0, w: 0.08, h: 5.625, fill: { color: ACCENT1 } });
s.addText("Thank\nYou", { x: 0.10, y: 1.50, w: 2.30, h: 1.50,
fontSize: 34, bold: true, color: WHITE, fontFace: "Calibri",
align: "center" });
s.addShape(pres.ShapeType.rect, { x: 0.20, y: 3.05, w: 2.10, h: 0.04,
fill: { color: ACCENT1 } });
s.addText("Questions?\nOpen discussion\nwelcome", { x: 0.10, y: 3.12, w: 2.30, h: 1.20,
fontSize: 12, color: LTBLUE, fontFace: "Calibri",
align: "center", wrap: true });
// right panel
s.addText("Key Takeaways:", { x: 3.45, y: 0.35, w: 6.30, h: 0.45,
fontSize: 14, bold: true, color: ACCENT1, fontFace: "Calibri" });
s.addShape(pres.ShapeType.rect, { x: 3.45, y: 0.80, w: 6.30, h: 0.04,
fill: { color: ACCENT1 } });
const takeaways = [
"Liam's T1DM requires a 10-professional MDT for holistic, patient-centred care",
"Effective teamwork needs communication, role clarity, and shared leadership",
"SBAR & MDT meetings structure safe, professional collaboration",
"Conflict is normal – managed well, it drives quality improvement",
"Tuckman & Belbin frameworks guide team development & role clarity",
"Negotiation & collaborative problem-solving = best conflict resolution strategy",
"Emotional intelligence is the foundation of professional conflict management",
];
takeaways.forEach((t, i) => {
s.addShape(pres.ShapeType.roundRect, { x: 3.45, y: 0.92 + i * 0.66, w: 0.32, h: 0.32,
rectRadius: 0.05, fill: { color: HEADER } });
s.addText("•", { x: 3.45, y: 0.92 + i * 0.66, w: 0.32, h: 0.32,
fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle" });
s.addText(t, { x: 3.85, y: 0.95 + i * 0.66, w: 5.90, h: 0.55,
fontSize: 11, color: WHITE, fontFace: "Calibri", wrap: true });
});
}
// ─── WRITE FILE ───────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/vinisha-ppt/MDT_Presentation_25Slides.pptx" })
.then(() => console.log("✅ PPT created successfully"))
.catch(err => console.error("❌ Error:", err));
cd /home/daytona/workspace/vinisha-ppt && node create_ppt.js 2>&1
cd /home/daytona/workspace/vinisha-ppt && sed -i 's/\u201c/"/g; s/\u201d/"/g; s/\u2018/'"'"'/g; s/\u2019/'"'"'/g' create_ppt.js && node create_ppt.js 2>&1
cd /home/daytona/workspace/vinisha-ppt && python3 -c " with open('create_ppt.js', 'r', encoding='utf-8') as f: content = f.read() # Replace curly quotes with straight quotes content = content.replace('\u201c', '\"').replace('\u201d', '\"') content = content.replace('\u2018', \"'\").replace('\u2019', \"'\") with open('create_ppt_fixed.js', 'w', encoding='utf-8') as f: f.write(content) print('Done') " && node create_ppt_fixed.js 2>&1
cd /home/daytona/workspace/vinisha-ppt && python3 -c " with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: lines = f.readlines() # Show line 160-170 for i, line in enumerate(lines[158:172], 159): print(f'{i}: {repr(line[:120])}') "
cd /home/daytona/workspace/vinisha-ppt && python3 -c " with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() # Check what characters are in line 163 line163 = content.split('\n')[162] print('Characters in line 163:') for ch in line163[:80]: if ord(ch) > 127: print(f' U+{ord(ch):04X} = {repr(ch)}') "
cd /home/daytona/workspace/vinisha-ppt && python3 << 'PYEOF' with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() # Find all non-ASCII characters import re matches = [(m.start(), hex(ord(m.group())), m.group()) for m in re.finditer(r'[^\x00-\x7F]', content)] print(f'Non-ASCII chars found: {len(matches)}') for pos, code, ch in matches[:20]: line = content[:pos].count('\n') + 1 print(f' Line {line}: {code} = {repr(ch)}') PYEOF
cd /home/daytona/workspace/vinisha-ppt && python3 << 'PYEOF' # The error is that quotes inside a double-quoted JS string aren't actual curly quote chars # but the string on line 163 has: s.addText(""Care...values."", # The outer JS string uses double quotes, and the content has " and " which are also double quotes after replacement # The problem is the content of the quote uses " characters that are also double-quotes # We need to escape them as \" inside the string with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() # Find line 163 raw lines = content.split('\n') print(repr(lines[162])) PYEOF
cd /home/daytona/workspace/vinisha-ppt && python3 << 'PYEOF' with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() # Fix all quote-within-string issues # Pattern: s.addText("...") where the text itself contains unescaped double quotes # We need to find these and escape the inner quotes # Simpler approach: replace problematic patterns with escaped versions import re # Replace "Care that is... with \'Care that is... (use single-quoted version) # The fix: any time we have addText("" or addText(", replace the inner curly quotes # Actually the simplest fix: escape the inner double quotes with backslash lines = content.split('\n') fixed_lines = [] for line in lines: # Check if line has pattern: (" or ("" at start of text content # Fix: replace double-quotes INSIDE strings that aren't the string delimiters # Approach: find addText("" patterns and fix them if '""' in line and 'addText' in line: # Replace leading "" with \\" line = line.replace('""', '\\"', 1) # Also replace trailing "" before comma or ) line = line.replace('"",', '\\",', 1) line = line.replace('"");', '\\");', 1) fixed_lines.append(line) fixed = '\n'.join(fixed_lines) # Also fix the Goleman line with inner quotes # Find and fix all s.addText with problematic quotes # Let me do a targeted search print("Lines with double-double-quotes:") for i, line in enumerate(fixed.split('\n')): if '""' in line: print(f" {i+1}: {line[:100]}") with open('create_ppt_v2.js', 'w', encoding='utf-8') as f: f.write(fixed) print("Written to create_ppt_v2.js") PYEOF
cd /home/daytona/workspace/vinisha-ppt && node create_ppt_v2.js 2>&1
cd /home/daytona/workspace/vinisha-ppt && python3 << 'PYEOF' with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() # The issue: lines like: s.addText("Care...values.", { # These lines have a JS double-quoted string that itself contains " characters # which were originally curly quotes but got replaced with straight quotes # Solution: use backtick template literals for these specific addText calls # Better solution: replace the inline quote characters with \u201c and \u201d # so they become Unicode escapes in the JS string lines = content.split('\n') fixed_lines = [] for i, line in enumerate(lines): fixed_lines.append(line) # Targeted fixes for the specific problematic lines # Instead of rewriting all, let's just identify problem lines and fix them problem_lines = [] for i, line in enumerate(lines): # A problematic line starts a JS addText with text that contains a literal " # The full string regex: addText("...") where text has embedded " that aren't the boundary import re m = re.search(r's\.addText\("(.+)",$', line.rstrip()) if m: text_content = m.group(1) # Check if text_content itself has any unescaped " # i.e. if the text starts/ends with " or has " in the middle if '"' in text_content: problem_lines.append((i+1, line[:100])) print("Problem lines:", problem_lines) PYEOF
cd /home/daytona/workspace/vinisha-ppt && python3 << 'PYEOF' with open('create_ppt_fixed.js', 'r', encoding='utf-8') as f: content = f.read() lines = content.split('\n') # Fix each problem line by replacing the addText string with escaped version # Line 163: replace opening and closing " of the quoted text with escaped \" # The pattern: s.addText(""...text...", { -> s.addText("\"...text...\"", { def fix_line(line): import re # Match addText("" ... "", { pattern # The line starts a text that contains embedded double quotes # Replace first "" with "\" and last "" with \"" # But carefully: the string starts with s.addText("" -> the second " is actually the quote mark in the text # Format: s.addText(""TEXT"", # s.addText("TEXT", <- after first fix (remove first extra ") # We want: s.addText("\"TEXT\"", # Strategy: Find addText followed by ( and then a " that starts the string, # then the text content has embedded " marks. Replace ALL embedded " with escaped \" # but keep the outer delimiting " intact. # Simple targeted fix: # Pattern 1: s.addText("" ... "", -> s.addText('" + ... + '", # i.e. change it to use string concatenation or escaping # Easiest: swap outer delimiters to backticks (template literals) # Find: s.addText("...long text...", # If the text part contains ", change outer delimiters to backticks m = re.match(r'^(\s*s\.addText\()(".*",)$', line) if m: prefix = m.group(1) js_str = m.group(2) # js_str is: "...text...", # Extract content between first " and last ", inner = js_str[1:-2] # remove first " and last ," if '"' in inner: # Replace outer " delimiters with backticks and escape backticks inside inner_escaped = inner.replace('`', '\\`').replace('${', '\\${') return prefix + '`' + inner_escaped + '`,' return line fixed_lines = [] for i, line in enumerate(lines): if i+1 in [163, 414, 559]: print(f"BEFORE {i+1}: {line[:100]}") fixed = fix_line(line) print(f"AFTER {i+1}: {fixed[:100]}") fixed_lines.append(fixed) else: fixed_lines.append(line) fixed_content = '\n'.join(fixed_lines) with open('create_ppt_v3.js', 'w', encoding='utf-8') as f: f.write(fixed_content) print("\nWritten to create_ppt_v3.js") PYEOF
cd /home/daytona/workspace/vinisha-ppt && node create_ppt_v3.js 2>&1
cd /home/daytona/workspace/vinisha-ppt && python3 -c " from pptx import Presentation prs = Presentation('MDT_Presentation_25Slides.pptx') print(f'Slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides): title = '' for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.paragraphs[0].text.strip() if t and len(t) > 3: title = t break print(f' Slide {i+1}: {title[:70]}') print(f'File size: {__import__(\"os\").path.getsize(\"MDT_Presentation_25Slides.pptx\")} bytes') "
Create a Harvard-style references PDF from all citations
?