ergonomics and physiotherapy session for radiology and Patient care department . ( who work for long standing , walking)
What format do you need for this ergonomics/physiotherapy session? · Who is the primary audience for this session? · What depth of content do you need?
ergonomics musculoskeletal disorders radiology healthcare workers standing
ergonomics physiotherapy exercises healthcare workers prolonged standing walking radiology patient care 2024
musculoskeletal disorders healthcare workers prolonged standing intervention
mkdir -p /home/daytona/workspace/ergonomics-session
~/ergonomics-session/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE";
pres.title = "Ergonomics & Physiotherapy Session – Radiology & Patient Care";
pres.author = "Physiotherapy Department";
// ─────────────────────────────────────────────
// COLOR PALETTE
// ─────────────────────────────────────────────
const C = {
navy: "0A2342", // dominant dark background
teal: "0E7C7B", // accent panels
aqua: "17BEBB", // highlights / icons
white: "FFFFFF",
offWhite:"F0F4F8",
amber: "F4A261", // warm alert / warning
lightGray:"D9E6F2",
midGray: "7B9CBF",
text: "1A2E4A",
};
// ─────────────────────────────────────────────
// HELPERS
// ─────────────────────────────────────────────
function addSectionBg(slide, color = C.navy) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color } });
}
function addTopBand(slide, color = C.teal, h = 1.1) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h, fill: { color } });
}
function addBottomBand(slide, color = C.navy, h = 0.45) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 7.5 - h, w: 13.3, h, fill: { color } });
}
function addCard(slide, x, y, w, h, fillColor = C.lightGray, radius = 0.12) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill: { color: fillColor },
rectRadius: radius,
line: { color: fillColor },
});
}
function slideTitle(slide, title, subtitle = "", titleColor = C.white) {
addTopBand(slide, C.teal, subtitle ? 1.4 : 1.0);
slide.addText(title, {
x: 0.45, y: 0.1, w: 12.4, h: 0.75,
fontSize: 24, bold: true, color: titleColor, fontFace: "Calibri",
margin: 0,
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.45, y: 0.78, w: 12.4, h: 0.5,
fontSize: 14, color: C.offWhite, fontFace: "Calibri", italic: true, margin: 0,
});
}
addBottomBand(slide, C.navy, 0.38);
slide.addText("Ergonomics & Physiotherapy | Radiology & Patient Care Dept.", {
x: 0.3, y: 7.16, w: 12.7, h: 0.3,
fontSize: 9, color: C.midGray, fontFace: "Calibri", margin: 0,
});
}
// ─────────────────────────────────────────────
// SLIDE 1 — TITLE SLIDE
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
addSectionBg(s, C.navy);
// Left accent stripe
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 7.5, fill: { color: C.aqua } });
// Decorative circles (background)
s.addShape(pres.ShapeType.ellipse, { x: 9.5, y: -1.2, w: 5.5, h: 5.5, fill: { color: C.teal }, line: { color: C.teal } });
s.addShape(pres.ShapeType.ellipse, { x: 10.5, y: 4.0, w: 3.8, h: 3.8, fill: { color: "0B5959" }, line: { color: "0B5959" } });
// Main heading
s.addText("ERGONOMICS &", {
x: 0.7, y: 1.2, w: 9, h: 0.95,
fontSize: 46, bold: true, color: C.white, fontFace: "Calibri",
charSpacing: 3, margin: 0,
});
s.addText("PHYSIOTHERAPY SESSION", {
x: 0.7, y: 2.0, w: 10, h: 0.95,
fontSize: 42, bold: true, color: C.aqua, fontFace: "Calibri",
charSpacing: 2, margin: 0,
});
// Divider line
s.addShape(pres.ShapeType.rect, { x: 0.7, y: 3.1, w: 7.5, h: 0.045, fill: { color: C.amber } });
// Subtitle
s.addText("Radiology Department | Patient Care Department", {
x: 0.7, y: 3.3, w: 9.5, h: 0.5,
fontSize: 18, color: C.offWhite, fontFace: "Calibri", margin: 0,
});
s.addText("Staff working in prolonged standing & walking roles", {
x: 0.7, y: 3.75, w: 9.5, h: 0.45,
fontSize: 15, color: C.midGray, fontFace: "Calibri", italic: true, margin: 0,
});
// Info pills
const pills = [
{ icon: "🗓", label: "June 2026" },
{ icon: "⏱", label: "~60 min Session" },
{ icon: "🏥", label: "Hospital Setting" },
];
pills.forEach((p, i) => {
addCard(s, 0.7 + i * 2.95, 4.7, 2.7, 0.65, "0B3A6A");
s.addText(`${p.icon} ${p.label}`, {
x: 0.75 + i * 2.95, y: 4.74, w: 2.6, h: 0.57,
fontSize: 13, color: C.offWhite, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0,
});
});
// Bottom tag
s.addText("Physiotherapy Department – Occupational Health & Wellness", {
x: 0.7, y: 6.85, w: 10, h: 0.35,
fontSize: 10, color: C.midGray, fontFace: "Calibri", italic: true, margin: 0,
});
}
// ─────────────────────────────────────────────
// SLIDE 2 — SESSION OVERVIEW / AGENDA
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Session Overview", "What we will cover today");
const items = [
{ num: "01", topic: "Why Ergonomics Matters in Your Department", time: "5 min" },
{ num: "02", topic: "Common Injuries from Prolonged Standing & Walking", time: "8 min" },
{ num: "03", topic: "Ergonomic Principles & Workplace Adjustments", time: "12 min" },
{ num: "04", topic: "Posture Correction & Body Mechanics", time: "10 min" },
{ num: "05", topic: "Practical Stretching & Exercise Programme", time: "15 min" },
{ num: "06", topic: "Footwear, Flooring & Equipment Guidance", time: "5 min" },
{ num: "07", topic: "Recovery & Self-Care Strategies", time: "5 min" },
];
items.forEach((item, i) => {
const col = i < 4 ? 0 : 1;
const row = i < 4 ? i : i - 4;
const x = col === 0 ? 0.4 : 6.85;
const y = 1.65 + row * 1.35;
// Card bg
addCard(s, x, y, 6.1, 1.1, C.white);
// Number badge
s.addShape(pres.ShapeType.roundRect, {
x: x + 0.12, y: y + 0.18, w: 0.62, h: 0.62,
fill: { color: C.teal }, rectRadius: 0.08, line: { color: C.teal },
});
s.addText(item.num, {
x: x + 0.12, y: y + 0.18, w: 0.62, h: 0.62,
fontSize: 13, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0,
});
// Topic text
s.addText(item.topic, {
x: x + 0.88, y: y + 0.12, w: 4.7, h: 0.6,
fontSize: 13, bold: true, color: C.text, fontFace: "Calibri", margin: 0,
});
// Time badge
s.addShape(pres.ShapeType.roundRect, {
x: x + 4.8, y: y + 0.65, w: 1.1, h: 0.32,
fill: { color: C.amber }, rectRadius: 0.05, line: { color: C.amber },
});
s.addText(`⏱ ${item.time}`, {
x: x + 4.8, y: y + 0.64, w: 1.1, h: 0.33,
fontSize: 9.5, color: C.navy, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 3 — WHY ERGONOMICS MATTERS
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Why Ergonomics Matters", "The cost of ignoring workplace posture");
const stats = [
{ val: "60–80%", label: "of healthcare workers report back pain at some point in their career" },
{ val: "Top 3", label: "MSDs are among the top 3 causes of sick leave in hospital settings" },
{ val: "6–8 hrs", label: "average continuous standing time for radiology & ward staff per shift" },
{ val: "40%↑", label: "increased injury risk with every 1 hour added of uninterrupted standing" },
];
stats.forEach((st, i) => {
const x = 0.4 + (i % 2) * 6.45;
const y = 1.6 + Math.floor(i / 2) * 2.5;
addCard(s, x, y, 6.0, 2.1, C.white);
s.addShape(pres.ShapeType.rect, { x, y, w: 0.12, h: 2.1, fill: { color: C.teal } });
s.addText(st.val, {
x: x + 0.3, y: y + 0.2, w: 5.5, h: 0.9,
fontSize: 34, bold: true, color: C.teal, fontFace: "Calibri", margin: 0,
});
s.addText(st.label, {
x: x + 0.3, y: y + 1.05, w: 5.5, h: 0.85,
fontSize: 13, color: C.text, fontFace: "Calibri", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 4 — COMMON INJURIES (Anatomy overview)
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Common Work-Related Injuries", "Areas most affected in standing & walking roles");
const zones = [
{
region: "Neck & Shoulders",
icon: "🔵",
color: "D0ECF5",
accent: "2196A6",
issues: ["Neck muscle fatigue & tension", "Cervical strain from poor head posture", "Shoulder impingement (reaching/bending)"],
},
{
region: "Lower Back",
icon: "🟠",
color: "FDE8D0",
accent: C.amber,
issues: ["Lumbar disc stress", "Facet joint irritation", "Muscle strain (erector spinae)"],
},
{
region: "Knees & Legs",
icon: "🟢",
color: "D5F2E3",
accent: "2E9E62",
issues: ["Knee osteoarthritis onset", "Varicose veins & leg swelling", "Patellofemoral pain syndrome"],
},
{
region: "Feet & Ankles",
icon: "🟣",
color: "E8D5F5",
accent: "7C4DCC",
issues: ["Plantar fasciitis", "Ankle swelling & tendinopathy", "Metatarsalgia (forefoot pain)"],
},
];
zones.forEach((z, i) => {
const x = 0.35 + i * 3.2;
addCard(s, x, 1.55, 2.9, 5.45, z.color);
s.addShape(pres.ShapeType.rect, { x, y: 1.55, w: 2.9, h: 0.06, fill: { color: z.accent } });
s.addText(z.region, {
x: x + 0.15, y: 1.7, w: 2.6, h: 0.55,
fontSize: 14, bold: true, color: z.accent, fontFace: "Calibri", margin: 0,
});
z.issues.forEach((issue, j) => {
s.addText([
{ text: "▸ ", options: { color: z.accent, bold: true } },
{ text: issue, options: { color: C.text } },
], {
x: x + 0.15, y: 2.45 + j * 0.78, w: 2.62, h: 0.68,
fontSize: 12, fontFace: "Calibri", margin: 0,
});
});
// Risk label
addCard(s, x + 0.15, 6.5, 2.55, 0.35, z.accent);
s.addText("HIGH RISK AREA", {
x: x + 0.15, y: 6.5, w: 2.55, h: 0.35,
fontSize: 9.5, bold: true, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 5 — ERGONOMIC PRINCIPLES
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Ergonomic Principles at Work", "Fit the job to the person, not the person to the job");
const principles = [
{ icon: "📏", title: "Work Surface Height", tip: "Adjust surfaces to elbow height. For radiology consoles & nursing stations, the surface should sit 2–5 cm below the elbow when standing." },
{ icon: "🦶", title: "Anti-Fatigue Matting", tip: "Use gel or foam anti-fatigue mats at fixed workstations (reporting rooms, medication bays). Reduces lower limb fatigue by up to 35%." },
{ icon: "🪑", title: "Sit-Stand Variation", tip: "Alternate sitting and standing every 20–30 minutes. Use sit-stand stools at imaging workstations when possible." },
{ icon: "📦", title: "Reach Zone Management", tip: "Keep frequently used items within the primary reach zone (arm length). Avoid twisting or over-reaching for equipment." },
{ icon: "💡", title: "Lighting & Screens", tip: "Position monitors at eye level; top of screen at or slightly below eye level. Reduce glare for radiology PACS screens to prevent forward head posture." },
{ icon: "🔄", title: "Task Rotation", tip: "Rotate between high-load and low-load tasks every 45–60 min. In patient care, alternate patient transfer duties with admin tasks." },
];
principles.forEach((p, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.3 + col * 4.35;
const y = 1.55 + row * 2.7;
addCard(s, x, y, 4.1, 2.4, C.white);
// Top color bar
s.addShape(pres.ShapeType.rect, { x, y, w: 4.1, h: 0.07, fill: { color: C.aqua } });
s.addText(p.icon + " " + p.title, {
x: x + 0.18, y: y + 0.15, w: 3.72, h: 0.52,
fontSize: 13, bold: true, color: C.teal, fontFace: "Calibri", margin: 0,
});
s.addShape(pres.ShapeType.rect, { x: x + 0.18, y: y + 0.72, w: 3.5, h: 0.025, fill: { color: C.lightGray } });
s.addText(p.tip, {
x: x + 0.18, y: y + 0.82, w: 3.74, h: 1.45,
fontSize: 11, color: C.text, fontFace: "Calibri", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 6 — POSTURE & BODY MECHANICS
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Posture & Body Mechanics", "The neutral spine principle");
// Left side: Ideal posture checklist
addCard(s, 0.35, 1.55, 5.8, 5.5, C.white);
s.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.55, w: 5.8, h: 0.07, fill: { color: C.teal } });
s.addText("✅ Ideal Standing Posture Checklist", {
x: 0.5, y: 1.65, w: 5.5, h: 0.52,
fontSize: 14, bold: true, color: C.teal, fontFace: "Calibri", margin: 0,
});
const checks = [
"Head directly above shoulders (chin slightly tucked)",
"Ears aligned over the mid-shoulder",
"Shoulders relaxed – not elevated or rolled forward",
"Core lightly engaged – do not tuck pelvis excessively",
"Natural lumbar curve maintained (slight inward curve)",
"Knees soft – not locked in full extension",
"Weight evenly distributed on both feet",
"Feet hip-width apart, toes facing forward",
];
checks.forEach((c, i) => {
s.addText([
{ text: "✔ ", options: { color: C.teal, bold: true } },
{ text: c, options: { color: C.text } },
], {
x: 0.5, y: 2.3 + i * 0.55, w: 5.5, h: 0.5,
fontSize: 11.5, fontFace: "Calibri", margin: 0,
});
});
// Right side: What to avoid
addCard(s, 6.6, 1.55, 6.4, 2.55, "FDE8D0");
s.addShape(pres.ShapeType.rect, { x: 6.6, y: 1.55, w: 6.4, h: 0.07, fill: { color: C.amber } });
s.addText("❌ Common Postural Faults", {
x: 6.75, y: 1.65, w: 6.1, h: 0.52,
fontSize: 14, bold: true, color: "C04C0A", fontFace: "Calibri", margin: 0,
});
const faults = [
"Forward head posture (\"tech neck\")",
"Swayback / excessive lumbar lordosis",
"Locking knees while standing",
"Shifting weight to one hip repetitively",
"Leaning on workstation for prolonged periods",
];
faults.forEach((f, i) => {
s.addText([
{ text: "✗ ", options: { color: C.amber, bold: true } },
{ text: f, options: { color: C.text } },
], {
x: 6.75, y: 2.3 + i * 0.48, w: 6.1, h: 0.44,
fontSize: 11.5, fontFace: "Calibri", margin: 0,
});
});
// Right bottom: Patient handling
addCard(s, 6.6, 4.3, 6.4, 2.7, "D0ECF5");
s.addShape(pres.ShapeType.rect, { x: 6.6, y: 4.3, w: 6.4, h: 0.07, fill: { color: C.teal } });
s.addText("🏥 Patient Handling Mechanics", {
x: 6.75, y: 4.4, w: 6.1, h: 0.52,
fontSize: 14, bold: true, color: C.teal, fontFace: "Calibri", margin: 0,
});
const handling = [
"Always bend at the hips & knees – not the back",
"Keep load close to your body when transferring patients",
"Use mechanical aids (hoists, slide sheets) for transfers > 16 kg",
"Communicate clearly with colleagues before any lift",
"Never twist your back – pivot using your feet",
];
handling.forEach((h, i) => {
s.addText([
{ text: "▸ ", options: { color: C.teal, bold: true } },
{ text: h, options: { color: C.text } },
], {
x: 6.75, y: 4.95 + i * 0.47, w: 6.1, h: 0.43,
fontSize: 11.5, fontFace: "Calibri", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 7 — STRETCHING PROGRAMME (Part 1)
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Stretching & Exercise Programme – Part 1", "Do these stretches during micro-breaks (every 45–60 min)");
const stretches = [
{
name: "Calf Raises",
muscle: "Calves / Ankles",
color: "D5F2E3",
accent: "2E9E62",
steps: ["Stand with feet hip-width apart", "Rise onto tiptoes slowly", "Hold 2 seconds, lower slowly", "10–15 reps × 2 sets"],
benefit: "Activates calf muscle pump – reduces leg swelling & varicose vein risk",
},
{
name: "Standing Hip Flexor Stretch",
muscle: "Hip Flexors / Lumbar",
color: "D0ECF5",
accent: "2196A6",
steps: ["Step one foot forward into a lunge", "Keep back knee straight, push hips forward", "Feel stretch at front of back hip", "Hold 20–30 sec, switch sides"],
benefit: "Counteracts hip flexor tightening from prolonged standing",
},
{
name: "Thoracic Extension",
muscle: "Upper Back / Spine",
color: "E8D5F5",
accent: "7C4DCC",
steps: ["Clasp hands behind head", "Gently arch backwards, looking upward", "Hold 10–15 sec, slowly return", "Repeat 5 times"],
benefit: "Relieves thoracic kyphosis and upper back fatigue",
},
{
name: "Neck Side Tilt",
muscle: "Cervical Spine / Trapezius",
color: "FDE8D0",
accent: C.amber,
steps: ["Sit or stand with spine upright", "Tilt head to right, ear towards shoulder", "Use hand to gently increase stretch", "20–30 sec each side"],
benefit: "Releases upper trapezius tension from screen work & patient care",
},
];
stretches.forEach((st, i) => {
const x = 0.3 + i * 3.2;
addCard(s, x, 1.55, 2.95, 5.5, st.color);
s.addShape(pres.ShapeType.rect, { x, y: 1.55, w: 2.95, h: 0.07, fill: { color: st.accent } });
s.addText(st.name, {
x: x + 0.15, y: 1.65, w: 2.68, h: 0.55,
fontSize: 13, bold: true, color: st.accent, fontFace: "Calibri", margin: 0,
});
s.addText("Target: " + st.muscle, {
x: x + 0.15, y: 2.2, w: 2.68, h: 0.38,
fontSize: 10, color: C.text, italic: true, fontFace: "Calibri", margin: 0,
});
st.steps.forEach((step, j) => {
s.addText([
{ text: `${j + 1}. `, options: { bold: true, color: st.accent } },
{ text: step, options: { color: C.text } },
], {
x: x + 0.15, y: 2.65 + j * 0.62, w: 2.68, h: 0.57,
fontSize: 11, fontFace: "Calibri", margin: 0,
});
});
// Benefit tag at bottom
addCard(s, x + 0.1, 6.27, 2.75, 0.67, st.accent);
s.addText("💡 " + st.benefit, {
x: x + 0.12, y: 6.27, w: 2.73, h: 0.67,
fontSize: 9, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", margin: 4,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 8 — STRETCHING PROGRAMME (Part 2)
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Stretching & Exercise Programme – Part 2", "Strengthening exercises to be done 3× per week");
const exercises = [
{
name: "Wall Squat",
muscle: "Quadriceps / Glutes",
color: "D5F2E3",
accent: "2E9E62",
steps: ["Stand with back against wall", "Slide down until thighs are parallel to floor", "Hold 20–40 seconds", "3 sets of 10–12 reps"],
benefit: "Strengthens legs – reduces fatigue during long standing shifts",
},
{
name: "Glute Bridges",
muscle: "Glutes / Core",
color: "D0ECF5",
accent: "2196A6",
steps: ["Lie on back, knees bent, feet flat", "Push through heels, lift hips to ceiling", "Squeeze glutes at the top", "Hold 3 sec, lower slowly – 15 reps"],
benefit: "Key for pelvic stability and reducing lower back load",
},
{
name: "Bird-Dog",
muscle: "Core / Lumbar Stabilisers",
color: "E8D5F5",
accent: "7C4DCC",
steps: ["Start on all fours (hands & knees)", "Extend opposite arm and leg together", "Hold 5 seconds, keep spine neutral", "10 reps each side"],
benefit: "Builds deep core stability without spinal compression",
},
{
name: "Ankle Circles & Foot Rolls",
muscle: "Feet / Ankles",
color: "FDE8D0",
accent: C.amber,
steps: ["Sit or stand on one leg", "Rotate ankle clockwise 10×", "Rotate anticlockwise 10×", "Roll foot on a tennis ball 60 sec"],
benefit: "Prevents plantar fasciitis and ankle stiffness",
},
];
exercises.forEach((ex, i) => {
const x = 0.3 + i * 3.2;
addCard(s, x, 1.55, 2.95, 5.5, ex.color);
s.addShape(pres.ShapeType.rect, { x, y: 1.55, w: 2.95, h: 0.07, fill: { color: ex.accent } });
s.addText(ex.name, {
x: x + 0.15, y: 1.65, w: 2.68, h: 0.55,
fontSize: 13, bold: true, color: ex.accent, fontFace: "Calibri", margin: 0,
});
s.addText("Target: " + ex.muscle, {
x: x + 0.15, y: 2.2, w: 2.68, h: 0.38,
fontSize: 10, color: C.text, italic: true, fontFace: "Calibri", margin: 0,
});
ex.steps.forEach((step, j) => {
s.addText([
{ text: `${j + 1}. `, options: { bold: true, color: ex.accent } },
{ text: step, options: { color: C.text } },
], {
x: x + 0.15, y: 2.65 + j * 0.62, w: 2.68, h: 0.57,
fontSize: 11, fontFace: "Calibri", margin: 0,
});
});
addCard(s, x + 0.1, 6.27, 2.75, 0.67, ex.accent);
s.addText("💡 " + ex.benefit, {
x: x + 0.12, y: 6.27, w: 2.73, h: 0.67,
fontSize: 9, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", margin: 4,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 9 — MICRO-BREAK PROTOCOL
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "The Micro-Break Protocol", "Small breaks = big protection against injury");
// Timeline / schedule
const schedule = [
{ time: "0 – 20 min", action: "Begin shift standing", color: C.teal, tip: "Use anti-fatigue mat. Maintain neutral posture." },
{ time: "20 min mark", action: "Micro-break #1", color: C.aqua, tip: "Calf raises × 15. Shoulder rolls × 10." },
{ time: "40 min mark", action: "Posture reset", color: C.teal, tip: "Check your posture. Shift weight if on one leg." },
{ time: "60 min mark", action: "Active micro-break #2", color: C.aqua, tip: "Neck stretch + Thoracic extension × 5 each." },
{ time: "90 min mark", action: "SIT DOWN", color: C.amber, tip: "If possible: sit for 5–10 minutes. Elevate feet slightly." },
{ time: "120 min mark", action: "Walking reset", color: C.teal, tip: "Take a short 3–5 min walk. Hydrate." },
];
schedule.forEach((item, i) => {
const y = 1.6 + i * 0.95;
// Timeline dot
s.addShape(pres.ShapeType.ellipse, {
x: 0.55, y: y + 0.2, w: 0.45, h: 0.45,
fill: { color: item.color }, line: { color: item.color },
});
// Connecting line (not for last item)
if (i < schedule.length - 1) {
s.addShape(pres.ShapeType.rect, {
x: 0.74, y: y + 0.65, w: 0.07, h: 0.47,
fill: { color: item.color },
});
}
// Time label
addCard(s, 1.2, y + 0.1, 1.7, 0.42, item.color);
s.addText(item.time, {
x: 1.22, y: y + 0.1, w: 1.66, h: 0.42,
fontSize: 10.5, bold: true, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0,
});
// Action card
addCard(s, 3.1, y + 0.05, 3.5, 0.65, C.white);
s.addText(item.action, {
x: 3.2, y: y + 0.08, w: 3.3, h: 0.55,
fontSize: 13, bold: true, color: C.text, fontFace: "Calibri",
valign: "middle", margin: 0,
});
// Tip card
addCard(s, 6.85, y + 0.05, 6.1, 0.65, "EDF6F6");
s.addText("💬 " + item.tip, {
x: 6.95, y: y + 0.08, w: 5.88, h: 0.55,
fontSize: 11.5, color: C.text, fontFace: "Calibri",
valign: "middle", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 10 — FOOTWEAR & FLOORING
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Footwear, Flooring & Equipment", "Your feet are the foundation");
// Footwear recommendations
addCard(s, 0.35, 1.55, 6.0, 5.55, C.white);
s.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.55, w: 6.0, h: 0.07, fill: { color: C.teal } });
s.addText("👟 Footwear Recommendations", {
x: 0.5, y: 1.65, w: 5.7, h: 0.52,
fontSize: 15, bold: true, color: C.teal, fontFace: "Calibri", margin: 0,
});
const footwear = [
{ label: "Arch Support", detail: "Choose shoes with firm arch support (orthotics if flat-footed). Avoid completely flat soles." },
{ label: "Cushioning", detail: "Adequate midsole cushioning reduces impact – especially on hard hospital tile floors." },
{ label: "Heel Height", detail: "Keep heel height to 1–3 cm maximum. Avoid completely flat and very high heels." },
{ label: "Fit", detail: "Shoes should fit snugly at the heel and have at least 1 cm space beyond the longest toe." },
{ label: "Compression Stockings", detail: "Class I (15–21 mmHg) graduated compression socks are recommended for shifts > 6 hrs. Reduces venous pooling by 30–40%." },
{ label: "Replacement", detail: "Replace work shoes every 6–12 months or when cushioning is visibly compressed." },
];
footwear.forEach((f, i) => {
s.addText([
{ text: f.label + ": ", options: { bold: true, color: C.teal } },
{ text: f.detail, options: { color: C.text } },
], {
x: 0.5, y: 2.3 + i * 0.72, w: 5.7, h: 0.65,
fontSize: 11.5, fontFace: "Calibri", margin: 0,
});
});
// Flooring & equipment
addCard(s, 6.65, 1.55, 6.3, 2.6, "D5F2E3");
s.addShape(pres.ShapeType.rect, { x: 6.65, y: 1.55, w: 6.3, h: 0.07, fill: { color: "2E9E62" } });
s.addText("🏗 Flooring & Workstation Equipment", {
x: 6.8, y: 1.65, w: 6.0, h: 0.52,
fontSize: 14, bold: true, color: "2E9E62", fontFace: "Calibri", margin: 0,
});
const flooring = [
"Anti-fatigue mats at fixed standing stations (min. 1.5 cm thick)",
"Footrest rails at radiology reporting desks",
"Height-adjustable worktops where available",
"Sit-stand stools at imaging consoles",
];
flooring.forEach((f, i) => {
s.addText([
{ text: "✔ ", options: { color: "2E9E62", bold: true } },
{ text: f, options: { color: C.text } },
], {
x: 6.8, y: 2.3 + i * 0.52, w: 5.98, h: 0.47,
fontSize: 11.5, fontFace: "Calibri", margin: 0,
});
});
// Radiology-specific
addCard(s, 6.65, 4.35, 6.3, 2.7, "D0ECF5");
s.addShape(pres.ShapeType.rect, { x: 6.65, y: 4.35, w: 6.3, h: 0.07, fill: { color: "2196A6" } });
s.addText("🔬 Radiology-Specific Ergonomics", {
x: 6.8, y: 4.45, w: 6.0, h: 0.52,
fontSize: 14, bold: true, color: "2196A6", fontFace: "Calibri", margin: 0,
});
const radiology = [
"PACS monitors at eye level to prevent forward head posture",
"Mouse positioned within comfortable reach – no reaching",
"Dimmed room: avoid hunching towards the screen",
"Lead aprons: hang on proper stand, wear only when necessary",
"Rotate between scan positioning (physical) & reporting (seated)",
];
radiology.forEach((r, i) => {
s.addText([
{ text: "▸ ", options: { color: "2196A6", bold: true } },
{ text: r, options: { color: C.text } },
], {
x: 6.8, y: 5.05 + i * 0.46, w: 5.98, h: 0.42,
fontSize: 11, fontFace: "Calibri", margin: 0,
});
});
}
// ─────────────────────────────────────────────
// SLIDE 11 — RECOVERY & SELF-CARE
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Recovery & Self-Care Strategies", "What you do after your shift matters just as much");
const categories = [
{
icon: "💧", title: "Hydration",
color: "D0ECF5", accent: "2196A6",
points: [
"Aim for 2–2.5 L of water per shift",
"Dehydration increases muscle fatigue & cramping",
"Avoid excess caffeine – acts as a diuretic",
],
},
{
icon: "🦵", title: "Post-Shift Leg Recovery",
color: "D5F2E3", accent: "2E9E62",
points: [
"Elevate legs 15–20 min after standing shifts",
"Cold-water foot soak (10 min) reduces swelling",
"Self-massage calf muscles upward (towards the heart)",
],
},
{
icon: "😴", title: "Sleep & Rest",
color: "E8D5F5", accent: "7C4DCC",
points: [
"7–9 hours of sleep for tissue repair",
"Sleep with a pillow between knees if back sore",
"Avoid screens 1 hour before bed to improve sleep quality",
],
},
{
icon: "🏃", title: "Active Recovery",
color: "FDE8D0", accent: C.amber,
points: [
"Light walking / swimming on days off",
"Yoga or Pilates 2× per week (core & flexibility)",
"Avoid sedentary rest – gentle movement heals faster",
],
},
{
icon: "🍎", title: "Nutrition",
color: "D0ECF5", accent: "2196A6",
points: [
"Anti-inflammatory diet: omega-3, leafy greens, berries",
"Magnesium-rich foods (nuts, seeds) help muscle recovery",
"Limit processed food – increases systemic inflammation",
],
},
{
icon: "🚨", title: "When to Seek Help",
color: "FDECEA", accent: "C0392B",
points: [
"Pain lasting > 2 weeks – see physiotherapist",
"Radiating pain in legs or arms – urgent review",
"Numbness or tingling – do not ignore",
],
},
];
categories.forEach((cat, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.3 + col * 4.35;
const y = 1.55 + row * 2.7;
addCard(s, x, y, 4.1, 2.4, cat.color);
s.addShape(pres.ShapeType.rect, { x, y, w: 4.1, h: 0.07, fill: { color: cat.accent } });
s.addText(`${cat.icon} ${cat.title}`, {
x: x + 0.18, y: y + 0.12, w: 3.72, h: 0.52,
fontSize: 13, bold: true, color: cat.accent, fontFace: "Calibri", margin: 0,
});
cat.points.forEach((pt, j) => {
s.addText([
{ text: "• ", options: { bold: true, color: cat.accent } },
{ text: pt, options: { color: C.text } },
], {
x: x + 0.18, y: y + 0.72 + j * 0.52, w: 3.72, h: 0.48,
fontSize: 11, fontFace: "Calibri", margin: 0,
});
});
});
}
// ─────────────────────────────────────────────
// SLIDE 12 — DAILY ACTION PLAN (Summary)
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
slideTitle(s, "Your Daily Action Plan", "Simple habits that prevent injuries over time");
const timeline = [
{
phase: "Before Shift",
color: C.teal,
light: "D0ECF5",
items: [
"Put on compression socks before starting",
"Do 5 min light warm-up (leg swings, shoulder circles)",
"Check footwear is appropriate",
"Prepare your workstation to correct height",
],
},
{
phase: "During Shift",
color: "2E9E62",
light: "D5F2E3",
items: [
"Micro-break every 45–60 min (stretch & posture reset)",
"Rotate between tasks (physical vs. sedentary)",
"Stay hydrated – 1 glass of water per hour",
"Use anti-fatigue mat at standing stations",
],
},
{
phase: "After Shift",
color: "7C4DCC",
light: "E8D5F5",
items: [
"Elevate legs for 15–20 min",
"10 min cool-down stretching programme",
"Self-massage calves and feet",
"Report any new pain to supervisor / physiotherapist",
],
},
];
timeline.forEach((phase, i) => {
const x = 0.3 + i * 4.35;
addCard(s, x, 1.55, 4.15, 5.5, phase.light);
s.addShape(pres.ShapeType.rect, { x, y: 1.55, w: 4.15, h: 0.07, fill: { color: phase.color } });
s.addText(phase.phase, {
x: x + 0.2, y: 1.65, w: 3.8, h: 0.6,
fontSize: 18, bold: true, color: phase.color, fontFace: "Calibri", margin: 0,
});
phase.items.forEach((item, j) => {
s.addText([
{ text: "✔ ", options: { bold: true, color: phase.color } },
{ text: item, options: { color: C.text } },
], {
x: x + 0.2, y: 2.42 + j * 0.97, w: 3.78, h: 0.87,
fontSize: 12, fontFace: "Calibri", margin: 0,
});
});
});
// Bottom motivation bar
addCard(s, 0.3, 7.0, 12.7, 0.36, C.navy);
s.addText("Remember: Your health is your most important asset. Invest in it daily.", {
x: 0.35, y: 7.0, w: 12.6, h: 0.36,
fontSize: 12, bold: true, color: C.aqua, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0,
});
}
// ─────────────────────────────────────────────
// SLIDE 13 — CLOSING / THANK YOU
// ─────────────────────────────────────────────
{
const s = pres.addSlide();
addSectionBg(s, C.navy);
s.addShape(pres.ShapeType.ellipse, { x: -1.0, y: -0.5, w: 6, h: 6, fill: { color: C.teal }, line: { color: C.teal } });
s.addShape(pres.ShapeType.ellipse, { x: 10.5, y: 4.5, w: 4.5, h: 4.5, fill: { color: "0B3A6A" }, line: { color: "0B3A6A" } });
s.addText("STAY STRONG,", {
x: 1.2, y: 1.3, w: 11, h: 1.0,
fontSize: 50, bold: true, color: C.white, fontFace: "Calibri",
charSpacing: 5, align: "center", margin: 0,
});
s.addText("STAY HEALTHY.", {
x: 1.2, y: 2.2, w: 11, h: 1.0,
fontSize: 50, bold: true, color: C.aqua, fontFace: "Calibri",
charSpacing: 5, align: "center", margin: 0,
});
s.addShape(pres.ShapeType.rect, { x: 3.5, y: 3.35, w: 6.3, h: 0.05, fill: { color: C.amber } });
s.addText("Thank you for attending this session.", {
x: 1.5, y: 3.55, w: 10.3, h: 0.52,
fontSize: 17, color: C.offWhite, fontFace: "Calibri",
align: "center", italic: true, margin: 0,
});
const contacts = [
"📋 Complete the post-session feedback form",
"🤝 Contact Physiotherapy for individual assessments",
"📱 Scan QR code for the digital exercise booklet",
];
contacts.forEach((c, i) => {
s.addText(c, {
x: 1.5, y: 4.3 + i * 0.65, w: 10.3, h: 0.55,
fontSize: 15, color: C.lightGray, fontFace: "Calibri",
align: "center", margin: 0,
});
});
s.addText("Physiotherapy Department | Occupational Health & Wellness | June 2026", {
x: 0.5, y: 7.0, w: 12.3, h: 0.35,
fontSize: 9.5, color: C.midGray, fontFace: "Calibri",
align: "center", margin: 0,
});
}
// ─────────────────────────────────────────────
// SAVE
// ─────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/ergonomics-session/Ergonomics_Physiotherapy_Session.pptx" })
.then(() => console.log("✅ PPTX saved successfully."))
.catch(err => { console.error("❌ Error:", err); process.exit(1); });
cd /home/daytona/workspace/ergonomics-session && node build.js 2>&1
ls -lh /home/daytona/workspace/ergonomics-session/Ergonomics_Physiotherapy_Session.pptx
Ergonomics Physiotherapy Session
Presentation · PPTX
| # | Slide | Content |
|---|---|---|
| 1 | Title Slide | Professional cover with department branding |
| 2 | Session Overview | Full agenda with time allocations (~60 min total) |
| 3 | Why Ergonomics Matters | Key statistics (60-80% back pain, 6-8 hrs standing, risk data) |
| 4 | Common Injuries | 4 body zones - Neck/Shoulders, Lower Back, Knees/Legs, Feet/Ankles |
| 5 | Ergonomic Principles | 6 workplace adjustments (surface height, mats, sit-stand, reach zones, lighting, task rotation) |
| 6 | Posture & Body Mechanics | Standing posture checklist, common faults, patient handling mechanics |
| 7 | Stretching Programme Pt. 1 | 4 stretches with step-by-step instructions (calf raises, hip flexor, thoracic extension, neck tilt) |
| 8 | Exercise Programme Pt. 2 | 4 strengthening exercises (wall squat, glute bridge, bird-dog, ankle circles) |
| 9 | Micro-Break Protocol | Timeline-based break schedule every 20-60 min through a shift |
| 10 | Footwear & Equipment | Footwear guide, compression stockings, radiology-specific ergonomics (PACS, lead aprons) |
| 11 | Recovery & Self-Care | 6 categories: hydration, leg recovery, sleep, active recovery, nutrition, when to seek help |
| 12 | Daily Action Plan | Before/During/After shift checklists |
| 13 | Closing Slide | Thank you + follow-up actions |
no need of ppt format , i need it in text format
| Fault | What It Looks Like | Why It's Harmful |
|---|---|---|
| Forward head posture | Chin protruding forward | Adds up to 27 kg of load on cervical spine |
| Swayback | Hips pushed forward, back arched | Compresses lumbar facet joints |
| Locked knees | Knees hyperextended | Reduces blood flow, stresses knee joint |
| Weight on one hip | Leaning to one side habitually | Creates pelvic imbalance and spinal scoliosis over time |
| Leaning on workstation | Resting forearms or abdomen on desk | Creates forward spine flexion and shoulder strain |
| Time Point | Action | What to Do |
|---|---|---|
| 0-20 min | Begin shift | Use anti-fatigue mat. Set up workstation at correct height. |
| 20 min mark | Micro-break 1 | Calf raises x 15. Shoulder rolls x 10. |
| 40 min mark | Posture reset | Check your posture. Shift weight to other foot. Soft knees. |
| 60 min mark | Active micro-break 2 | Neck stretch + thoracic extension x 5 each. |
| 90 min mark | SIT DOWN | Sit for 5-10 minutes if possible. Slightly elevate feet. |
| 120 min mark | Walking reset | Take a 3-5 minute walk. Drink a glass of water. |