ergonomics and physiotherapy session for radiology and Patient care department . ( who work for long standing , walking)
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. |