Prepare a PowerPoint presentation on the topic landmark and pns vs USG guided blocks highlighting mainly the advantages of landmark pns USG guided blocks, introduction principle and technique and inclusion criteria and exclusion criteria
landmark PNS vs ultrasound guided nerve blocks advantages introduction principle technique inclusion exclusion criteria
http://impactfactor.org/PDF/IJCPR/17/IJCPR,Vol17,Issue3,Arti…
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace && ls -la /home/daytona/workspace/
~/nerve-blocks-ppt/create_presentation.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'Landmark vs PNS vs USG Guided Nerve Blocks';
pres.author = 'Regional Anaesthesia';
// ─── COLOUR PALETTE ───────────────────────────────────────────────────────────
const C = {
darkNavy: '0D1B2A', // dominant dark background
navy: '1B3A5C', // secondary panel
teal: '1E8BC3', // accent / highlights
gold: 'F0A500', // accent 2
white: 'FFFFFF',
lightGray: 'E8EFF6',
midGray: 'B0C4D8',
red: 'E84040',
green: '27AE60',
orange: 'F39C12',
};
// ─── HELPER FUNCTIONS ─────────────────────────────────────────────────────────
function addSlideBg(slide, dark = true) {
slide.background = { color: dark ? C.darkNavy : C.lightGray };
}
function addTitle(slide, text, y = 0.28, color = C.gold) {
slide.addText(text, {
x: 0.4, y, w: 9.2, h: 0.55,
fontSize: 26, bold: true, color,
fontFace: 'Calibri', align: 'left', margin: 0,
});
}
function addDivider(slide, y = 0.9, color = C.teal) {
slide.addShape(pres.ShapeType.rect, {
x: 0.4, y, w: 9.2, h: 0.04, fill: { color }, line: { type: 'none' },
});
}
function addBullets(slide, items, x, y, w, h, fontSize = 14, color = C.white) {
const arr = items.map((item, i) => ({
text: item,
options: { bullet: { code: '25B6', color: C.teal }, breakLine: i < items.length - 1, color, fontSize, fontFace: 'Calibri' },
}));
slide.addText(arr, { x, y, w, h, valign: 'top' });
}
function addSmallBullets(slide, items, x, y, w, h, bulletColor = C.gold, textColor = C.white, fontSize = 13) {
const arr = items.map((item, i) => ({
text: item,
options: { bullet: { code: '25CF', color: bulletColor }, breakLine: i < items.length - 1, color: textColor, fontSize, fontFace: 'Calibri' },
}));
slide.addText(arr, { x, y, w, h, valign: 'top' });
}
function addCard(slide, x, y, w, h, bgColor, title, bullets, titleColor = C.darkNavy, bulletColor = C.darkNavy, bulletDot = C.teal) {
// card background
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill: { color: bgColor },
line: { color: C.teal, width: 1.5 },
rectRadius: 0.12,
});
// card title
slide.addText(title, {
x: x + 0.15, y: y + 0.1, w: w - 0.3, h: 0.38,
fontSize: 14, bold: true, color: titleColor, fontFace: 'Calibri', margin: 0,
});
// bullets
const arr = bullets.map((b, i) => ({
text: b,
options: { bullet: { code: '25CF', color: bulletDot }, breakLine: i < bullets.length - 1, color: bulletColor, fontSize: 11.5, fontFace: 'Calibri' },
}));
slide.addText(arr, { x: x + 0.15, y: y + 0.5, w: w - 0.3, h: h - 0.6, valign: 'top' });
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.darkNavy };
// Large teal band top
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: C.navy }, line: { type: 'none' } });
// Gold accent stripe
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.08, w: 10, h: 0.06, fill: { color: C.gold }, line: { type: 'none' } });
s.addText('REGIONAL ANAESTHESIA', {
x: 0.5, y: 0.18, w: 9, h: 0.6,
fontSize: 14, bold: false, color: C.midGray, fontFace: 'Calibri', align: 'center', charSpacing: 6,
});
s.addText('Landmark, PNS &\nUltrasound-Guided\nNerve Blocks', {
x: 0.5, y: 1.3, w: 9, h: 2.4,
fontSize: 38, bold: true, color: C.white, fontFace: 'Calibri', align: 'center', valign: 'middle',
});
// teal highlight under main title
s.addShape(pres.ShapeType.rect, { x: 2.5, y: 3.7, w: 5, h: 0.05, fill: { color: C.teal }, line: { type: 'none' } });
s.addText('A Comparative Review: Introduction, Principles, Techniques &\nIndications', {
x: 0.5, y: 3.9, w: 9, h: 0.7,
fontSize: 14, color: C.midGray, fontFace: 'Calibri', align: 'center', italic: true,
});
// bottom bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.2, w: 10, h: 0.42, fill: { color: C.navy }, line: { type: 'none' } });
s.addText('Department of Anaesthesiology | June 2026', {
x: 0.5, y: 5.25, w: 9, h: 0.32, fontSize: 11, color: C.midGray, fontFace: 'Calibri', align: 'center',
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — TABLE OF CONTENTS
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Overview', 0.28, C.gold);
addDivider(s, 0.9);
const topics = [
['01', 'Introduction to Peripheral Nerve Blocks'],
['02', 'Landmark-Based Technique'],
['03', 'Peripheral Nerve Stimulator (PNS) Guided Technique'],
['04', 'Ultrasound-Guided (USG) Technique'],
['05', 'Head-to-Head Comparison'],
['06', 'Inclusion & Exclusion Criteria'],
['07', 'Advantages Summary & Conclusion'],
];
topics.forEach(([num, label], i) => {
const row = Math.floor(i / 1);
const yPos = 1.05 + row * 0.59;
s.addShape(pres.ShapeType.rect, {
x: 0.4, y: yPos, w: 0.5, h: 0.42,
fill: { color: C.teal }, line: { type: 'none' },
});
s.addText(num, { x: 0.4, y: yPos, w: 0.5, h: 0.42, fontSize: 15, bold: true, color: C.darkNavy, fontFace: 'Calibri', align: 'center', valign: 'middle', margin: 0 });
s.addText(label, { x: 1.05, y: yPos + 0.04, w: 8.5, h: 0.35, fontSize: 14, color: C.white, fontFace: 'Calibri', valign: 'middle' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Introduction to Peripheral Nerve Blocks', 0.28, C.gold);
addDivider(s, 0.9);
s.addText('What is a Peripheral Nerve Block (PNB)?', {
x: 0.4, y: 1.0, w: 9.2, h: 0.38, fontSize: 16, bold: true, color: C.teal, fontFace: 'Calibri',
});
addSmallBullets(s, [
'Deliberate interruption of nerve conduction by depositing local anaesthetic (LA) around a target nerve or plexus',
'Provides surgical anaesthesia and/or postoperative analgesia without the systemic effects of general anaesthesia',
'Reduces opioid consumption, PONV, and facilitates early mobilisation',
], 0.4, 1.42, 9.2, 1.0, C.teal, C.white, 13);
s.addText('Three Guidance Modalities', {
x: 0.4, y: 2.5, w: 9.2, h: 0.38, fontSize: 16, bold: true, color: C.teal, fontFace: 'Calibri',
});
// Three boxes
const mods = [
{ title: 'LANDMARK', sub: 'Anatomical surface landmarks\n& tactile feel\n(Traditional)', color: C.navy, border: C.orange },
{ title: 'PNS', sub: 'Peripheral Nerve Stimulator\n(Electrical confirmation\nof nerve proximity)', color: C.navy, border: C.teal },
{ title: 'USG', sub: 'Ultrasound-Guided\n(Real-time visualisation\nof nerve & needle)', color: C.navy, border: C.gold },
];
mods.forEach((m, i) => {
const x = 0.4 + i * 3.1;
s.addShape(pres.ShapeType.roundRect, { x, y: 2.95, w: 2.9, h: 2.4, fill: { color: m.color }, line: { color: m.border, width: 2.5 }, rectRadius: 0.15 });
s.addText(m.title, { x, y: 3.0, w: 2.9, h: 0.5, fontSize: 18, bold: true, color: m.border, fontFace: 'Calibri', align: 'center' });
s.addText(m.sub, { x, y: 3.52, w: 2.9, h: 1.6, fontSize: 12.5, color: C.white, fontFace: 'Calibri', align: 'center', valign: 'middle' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — LANDMARK TECHNIQUE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Landmark-Based Technique', 0.28, C.orange);
addDivider(s, 0.9, C.orange);
// Left column
s.addText('Principle', { x: 0.4, y: 1.0, w: 4.5, h: 0.38, fontSize: 15, bold: true, color: C.orange, fontFace: 'Calibri' });
addSmallBullets(s, [
'Relies on surface anatomical landmarks (bony prominences, vessels, muscles)',
'Needle inserted blind to a predetermined depth/direction',
'Paraesthesia elicitation or "click/pop" of fascial plane used as endpoint',
'No real-time guidance — experience-dependent',
], 0.4, 1.42, 4.5, 1.6, C.orange, C.white, 12.5);
s.addText('Technique Steps', { x: 0.4, y: 3.1, w: 4.5, h: 0.38, fontSize: 15, bold: true, color: C.orange, fontFace: 'Calibri' });
addSmallBullets(s, [
'Patient positioning & identification of bony/vascular landmarks',
'Skin preparation and local infiltration',
'Needle insertion at mapped angle & depth',
'Aspiration check before injection',
'Incremental injection of LA',
], 0.4, 3.5, 4.5, 1.85, C.orange, C.white, 12.5);
// Right column — advantages
s.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 0.95, w: 4.4, h: 4.55, fill: { color: C.navy }, line: { color: C.orange, width: 1.5 }, rectRadius: 0.15 });
s.addText('Advantages', { x: 5.35, y: 1.05, w: 4.1, h: 0.38, fontSize: 15, bold: true, color: C.orange, fontFace: 'Calibri' });
const advLM = [
'No specialised equipment required',
'Low cost — widely accessible in resource-limited settings',
'Rapid setup — no machine warm-up time',
'Teachable with basic anatomy knowledge',
'Suitable when USG machine unavailable / malfunctions',
'Useful for superficial blocks where anatomy is predictable',
'Not affected by patient movement artifact',
'Battery-free; no electrical/mechanical failure risk',
];
addSmallBullets(s, advLM, 5.35, 1.5, 4.05, 3.8, C.orange, C.white, 12);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — PNS TECHNIQUE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Peripheral Nerve Stimulator (PNS) Guided Technique', 0.28, C.teal);
addDivider(s, 0.9, C.teal);
// Principle box left
s.addText('Principle', { x: 0.4, y: 1.0, w: 4.5, h: 0.38, fontSize: 15, bold: true, color: C.teal, fontFace: 'Calibri' });
addSmallBullets(s, [
'Electrical stimulation of the target nerve via an insulated needle',
'Current (0.1–1.0 mA) delivered at 1–2 Hz, 0.1 ms pulse width',
'Motor twitch confirms needle proximity to the nerve',
'LA injected when twitch elicited at ≤0.5 mA (Raj criterion)',
'Disappearance of twitch after test dose confirms perineural placement',
], 0.4, 1.42, 4.5, 2.0, C.teal, C.white, 12.5);
s.addText('Technique Steps', { x: 0.4, y: 3.5, w: 4.5, h: 0.38, fontSize: 15, bold: true, color: C.teal, fontFace: 'Calibri' });
addSmallBullets(s, [
'Surface landmark identification as starting point',
'Connect insulated nerve-block needle to PNS',
'Advance needle — observe for muscle twitch',
'Reduce current to 0.3–0.5 mA; confirm twitch persists',
'Aspirate → slow incremental injection',
], 0.4, 3.9, 4.5, 1.6, C.teal, C.white, 12.5);
// Right — advantages
s.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 0.95, w: 4.4, h: 4.55, fill: { color: C.navy }, line: { color: C.teal, width: 1.5 }, rectRadius: 0.15 });
s.addText('Advantages', { x: 5.35, y: 1.05, w: 4.1, h: 0.38, fontSize: 15, bold: true, color: C.teal, fontFace: 'Calibri' });
const advPNS = [
'Objective endpoint — motor twitch removes subjectivity',
'Better accuracy than pure landmark alone',
'Avoids eliciting paraesthesia (less patient discomfort)',
'Portable and relatively affordable',
'Suitable when USG view is poor (obesity, oedema)',
'Effective in deeply located nerves',
'Useful adjunct with USG (combined technique)',
'Works well in unconscious / sedated patients',
'Insulated needle reduces inadvertent intravascular placement',
'Validated technique with decades of clinical evidence',
];
addSmallBullets(s, advPNS, 5.35, 1.5, 4.05, 3.8, C.teal, C.white, 12);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — PNS Principle diagram-like slide
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'PNS: How It Works', 0.28, C.teal);
addDivider(s, 0.9, C.teal);
// Step flow boxes
const steps = [
{ num: '1', label: 'Set current\n1.0 mA\n2 Hz', color: C.orange },
{ num: '2', label: 'Advance\nneedle,\nseek twitch', color: C.orange },
{ num: '3', label: 'Twitch at\n0.5–1.0 mA\n→ Near nerve', color: C.teal },
{ num: '4', label: 'Reduce to\n0.3 mA;\ntwitch persists', color: C.teal },
{ num: '5', label: 'Aspirate\n→ Inject LA\nslowly', color: C.green },
];
steps.forEach((st, i) => {
const x = 0.35 + i * 1.88;
s.addShape(pres.ShapeType.roundRect, { x, y: 1.1, w: 1.6, h: 1.8, fill: { color: C.navy }, line: { color: st.color, width: 2 }, rectRadius: 0.12 });
s.addText(st.num, { x, y: 1.15, w: 1.6, h: 0.42, fontSize: 22, bold: true, color: st.color, fontFace: 'Calibri', align: 'center' });
s.addText(st.label, { x, y: 1.6, w: 1.6, h: 1.2, fontSize: 12, color: C.white, fontFace: 'Calibri', align: 'center', valign: 'middle' });
// Arrow
if (i < steps.length - 1) {
s.addShape(pres.ShapeType.rect, { x: x + 1.63, y: 1.95, w: 0.22, h: 0.08, fill: { color: C.midGray }, line: { type: 'none' } });
}
});
// Current thresholds table
s.addText('Current Thresholds & Interpretation', {
x: 0.4, y: 3.2, w: 9.2, h: 0.38, fontSize: 15, bold: true, color: C.teal, fontFace: 'Calibri',
});
const rows = [
['Current (mA)', 'Interpretation', 'Action'],
['> 1.0 mA', 'Far from nerve', 'Continue advancing'],
['0.5 – 1.0 mA', 'In vicinity of nerve', 'Slow advance'],
['0.3 – 0.5 mA', 'Optimal proximity', 'Inject LA'],
['< 0.2 mA', 'Intraneural placement risk', 'Withdraw slightly!'],
];
rows.forEach((row, ri) => {
const isHeader = ri === 0;
const yPos = 3.65 + ri * 0.38;
row.forEach((cell, ci) => {
const widths = [2.5, 4.0, 2.7];
const xPos = 0.4 + widths.slice(0, ci).reduce((a, b) => a + b, 0);
s.addShape(pres.ShapeType.rect, {
x: xPos, y: yPos, w: widths[ci], h: 0.36,
fill: { color: isHeader ? C.teal : (ri % 2 === 0 ? C.navy : '162840') },
line: { color: C.midGray, width: 0.5 },
});
s.addText(cell, {
x: xPos + 0.05, y: yPos + 0.04, w: widths[ci] - 0.1, h: 0.28,
fontSize: 12, bold: isHeader, color: isHeader ? C.darkNavy : (ci === 2 && ri === 4 ? C.red : C.white),
fontFace: 'Calibri', valign: 'middle',
});
});
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — USG TECHNIQUE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Ultrasound-Guided (USG) Technique', 0.28, C.gold);
addDivider(s, 0.9, C.gold);
s.addText('Principle', { x: 0.4, y: 1.0, w: 9.2, h: 0.38, fontSize: 15, bold: true, color: C.gold, fontFace: 'Calibri' });
addSmallBullets(s, [
'High-frequency ultrasound (6–15 MHz linear probe) provides real-time imaging of nerves, adjacent structures, and needle tip',
'Nerves appear as hyperechoic honeycomb structures on short-axis ("target sign") or fibrillar patterns in long-axis',
'LA spread visualised as hypoechoic halo surrounding the nerve — confirms correct placement',
'Doppler mode identifies adjacent vessels to avoid inadvertent vascular puncture',
], 0.4, 1.42, 9.2, 1.5, C.gold, C.white, 13);
s.addText('Technique Steps', { x: 0.4, y: 3.0, w: 9.2, h: 0.38, fontSize: 15, bold: true, color: C.gold, fontFace: 'Calibri' });
// Two column technique steps
const left = [
'Probe selection: 10–15 MHz linear (superficial), 5 MHz curvilinear (deep)',
'Scan in short axis to identify nerve; optimise depth & gain',
'In-plane (IP) approach: needle visualised along entire length',
];
const right = [
'Out-of-plane (OOP) approach: needle seen as bright dot in cross-section',
'Advance needle to nerve; confirm with hydrolocalisation',
'Aspirate → inject LA incrementally; observe circumferential spread',
];
addSmallBullets(s, left, 0.4, 3.42, 4.7, 1.8, C.gold, C.white, 12.5);
addSmallBullets(s, right, 5.2, 3.42, 4.4, 1.8, C.gold, C.white, 12.5);
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — USG ADVANTAGES (DETAILED)
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'USG: Key Advantages', 0.28, C.gold);
addDivider(s, 0.9, C.gold);
const cards = [
{
title: 'Safety',
pts: ['Real-time vascular identification (Doppler)', 'Avoids intravascular injection', 'Reduces pneumothorax risk (e.g., supraclavicular)', 'Detects aberrant anatomy'],
},
{
title: 'Efficacy',
pts: ['Higher block success rate (96% USG vs 84% PNS, 76% landmark)', 'Faster onset of sensory & motor block', 'Prolonged duration of analgesia', 'Reduced volume of LA needed'],
},
{
title: 'Precision',
pts: ['Exact perineural deposition confirmed visually', 'Intraneural injection detected & prevented', 'Confirms spread in fascial planes (TAP, ESPB)', 'Adjustable in real-time'],
},
{
title: 'Patient Experience',
pts: ['No paraesthesia elicitation required', 'Less needle passes → less discomfort', 'Higher patient satisfaction scores', 'Suitable for awake patients'],
},
{
title: 'Clinical Scope',
pts: ['Enables novel/fascial plane blocks (TAP, ESPB, PECS)', 'Useful in obese/oedematous patients', 'Continuous catheter placement easier', 'Paediatric & obstetric safety'],
},
{
title: 'Teaching',
pts: ['Visual learning — real-time feedback for trainees', 'Documentation via image/video capture', 'Standardisation of technique', 'Research and audit friendly'],
},
];
cards.forEach((card, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.3 + col * 3.17;
const y = 1.05 + row * 2.15;
addCard(s, x, y, 3.0, 2.0, C.navy, card.title, card.pts, C.gold, C.white, C.gold);
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — HEAD-TO-HEAD COMPARISON TABLE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Head-to-Head Comparison', 0.28, C.teal);
addDivider(s, 0.9, C.teal);
const headers = ['Parameter', 'Landmark', 'PNS', 'USG'];
const colW = [2.4, 2.35, 2.35, 2.5];
const rows2 = [
['Success Rate', '60–75%', '80–90%', '93–97%'],
['Equipment Cost', 'Nil', 'Low-moderate', 'High'],
['Vascular Safety', 'Poor', 'Moderate', 'Excellent'],
['LA Volume Needed', 'Higher', 'Moderate', 'Reduced'],
['Onset Time', 'Variable', 'Moderate', 'Faster'],
['Block Duration', 'Variable', 'Good', 'Prolonged'],
['Skill Required', 'Anatomy-based', 'Moderate', 'USG training'],
['Resource-limited use', 'Ideal', 'Good', 'Limited'],
['Paediatric suitability', 'Moderate', 'Moderate', 'Excellent'],
['Real-time feedback', 'None', 'Motor twitch', 'Full visual'],
];
// Header row
let startX = 0.3;
headers.forEach((h, ci) => {
s.addShape(pres.ShapeType.rect, { x: startX, y: 1.0, w: colW[ci], h: 0.42, fill: { color: C.teal }, line: { type: 'none' } });
s.addText(h, { x: startX + 0.05, y: 1.0, w: colW[ci] - 0.1, h: 0.42, fontSize: 13, bold: true, color: C.darkNavy, fontFace: 'Calibri', align: 'center', valign: 'middle' });
startX += colW[ci];
});
rows2.forEach((row, ri) => {
startX = 0.3;
const yPos = 1.44 + ri * 0.39;
row.forEach((cell, ci) => {
const bgColor = ci === 0 ? C.navy : (ci === 3 ? '1A3A20' : (ri % 2 === 0 ? C.navy : '162840'));
const textColor = ci === 3 ? C.green : (ci === 0 ? C.teal : C.white);
s.addShape(pres.ShapeType.rect, { x: startX, y: yPos, w: colW[ci], h: 0.37, fill: { color: bgColor }, line: { color: '233B55', width: 0.5 } });
s.addText(cell, { x: startX + 0.05, y: yPos + 0.03, w: colW[ci] - 0.1, h: 0.3, fontSize: 11.5, bold: ci === 0, color: textColor, fontFace: 'Calibri', align: ci === 0 ? 'left' : 'center', valign: 'middle' });
startX += colW[ci];
});
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — INCLUSION CRITERIA
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Inclusion Criteria for Peripheral Nerve Blocks', 0.28, C.green);
addDivider(s, 0.9, C.green);
// 3 columns
const cols = [
{
heading: 'General Criteria',
items: [
'Age ≥ 18 years (or appropriate paediatric consent)',
'ASA physical status I – III',
'Written informed consent obtained',
'Elective or semi-urgent surgery of limb/trunk',
'Patient cooperative and communicable',
'Normal coagulation profile (INR < 1.5, platelets > 80×10⁹/L)',
],
color: C.green,
},
{
heading: 'Surgical Indications',
items: [
'Upper limb surgery (brachial plexus blocks)',
'Lower limb surgery (femoral, sciatic, popliteal blocks)',
'Inguinal/abdominal procedures (TAP, ilioinguinal blocks)',
'Thoracic procedures (ESPB, serratus, paravertebral)',
'Regional top-up for inadequate spinal/GA',
'Paediatric circumcision, hernia repair',
],
color: C.teal,
},
{
heading: 'Patient Suitability',
items: [
'Patient preference for regional over GA',
'High-risk GA patients (respiratory/cardiac comorbidity)',
'Chronic pain requiring targeted analgesia',
'Day-care surgery requiring early mobilisation',
'Obstetric patients requiring labour/post-Cs analgesia',
'Patients in whom opioid sparing is desired',
],
color: C.gold,
},
];
cols.forEach((col, i) => {
const x = 0.3 + i * 3.15;
s.addShape(pres.ShapeType.roundRect, { x, y: 0.95, w: 3.0, h: 4.55, fill: { color: C.navy }, line: { color: col.color, width: 2 }, rectRadius: 0.12 });
s.addText(col.heading, { x: x + 0.1, y: 1.02, w: 2.8, h: 0.42, fontSize: 13.5, bold: true, color: col.color, fontFace: 'Calibri', align: 'center' });
s.addShape(pres.ShapeType.rect, { x: x + 0.1, y: 1.47, w: 2.8, h: 0.04, fill: { color: col.color }, line: { type: 'none' } });
const arr = col.items.map((item, idx) => ({
text: item,
options: { bullet: { code: '2714', color: col.color }, breakLine: idx < col.items.length - 1, color: C.white, fontSize: 11.5, fontFace: 'Calibri' },
}));
s.addText(arr, { x: x + 0.12, y: 1.55, w: 2.76, h: 3.8, valign: 'top' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — EXCLUSION CRITERIA
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Exclusion Criteria for Peripheral Nerve Blocks', 0.28, C.red);
addDivider(s, 0.9, C.red);
const exclusions = [
{ cat: 'Absolute Contraindications', items: ['Patient refusal / inability to consent', 'Local infection or cellulitis at injection site', 'Known allergy to local anaesthetics', 'Tumour or anatomical distortion at block site'], color: C.red },
{ cat: 'Coagulation / Haematological', items: ['Bleeding disorders (haemophilia, vWD)', 'Anticoagulant therapy (case-by-case ASRA guidelines)', 'Thrombocytopenia < 80 × 10⁹/L', 'Active antiplatelet therapy for deep blocks'], color: C.orange },
{ cat: 'Neurological', items: ['Pre-existing neurological deficit in target limb', 'Peripheral neuropathy (diabetes, CMT)', 'Patient unable to report paraesthesia/pain', 'Active demyelinating disease in target region'], color: C.gold },
{ cat: 'Patient / Technical Factors', items: ['Morbid obesity impairing USG visualisation (BMI > 45 for deep blocks)', 'Severe oedema / extensive burns', 'Uncooperative or confused patient (relative)', 'Lack of resuscitation equipment / trained personnel'], color: C.teal },
];
exclusions.forEach((exc, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.85;
const y = 1.0 + row * 2.25;
s.addShape(pres.ShapeType.roundRect, { x, y, w: 4.6, h: 2.1, fill: { color: C.navy }, line: { color: exc.color, width: 2 }, rectRadius: 0.12 });
s.addText(exc.cat, { x: x + 0.15, y: y + 0.1, w: 4.3, h: 0.38, fontSize: 13.5, bold: true, color: exc.color, fontFace: 'Calibri' });
const arr = exc.items.map((item, idx) => ({
text: item,
options: { bullet: { code: '274C', color: exc.color }, breakLine: idx < exc.items.length - 1, color: C.white, fontSize: 11.5, fontFace: 'Calibri' },
}));
s.addText(arr, { x: x + 0.15, y: y + 0.52, w: 4.3, h: 1.5, valign: 'top' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — ADVANTAGES SUMMARY
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'Advantages at a Glance', 0.28, C.gold);
addDivider(s, 0.9, C.gold);
// Three modality summary bars
const mods = [
{
name: 'LANDMARK', color: C.orange, bg: '1C1200',
pros: ['✓ Zero equipment cost', '✓ No setup time', '✓ Works anywhere', '✓ Core skill foundation', '✓ Quick for experienced hands'],
best: 'Best for: resource-limited settings, superficial blocks',
},
{
name: 'PNS', color: C.teal, bg: '001520',
pros: ['✓ Objective twitch endpoint', '✓ Portable & affordable', '✓ Suitable in poor USG windows', '✓ Effective in deep nerves', '✓ Combines with USG'],
best: 'Best for: deep blocks, adjunct to USG, conscious patients',
},
{
name: 'USG', color: C.gold, bg: '1A1500',
pros: ['✓ Highest success rate (96%)', '✓ Real-time visualisation', '✓ Maximum safety profile', '✓ Reduced LA volumes', '✓ Enables fascial plane blocks'],
best: 'Best for: all blocks where USG available; standard of care',
},
];
mods.forEach((m, i) => {
const x = 0.3 + i * 3.15;
s.addShape(pres.ShapeType.roundRect, { x, y: 0.98, w: 3.02, h: 4.2, fill: { color: m.bg }, line: { color: m.color, width: 2.5 }, rectRadius: 0.15 });
s.addShape(pres.ShapeType.rect, { x, y: 0.98, w: 3.02, h: 0.52, fill: { color: m.color }, line: { type: 'none' } });
s.addText(m.name, { x, y: 0.98, w: 3.02, h: 0.52, fontSize: 16, bold: true, color: C.darkNavy, fontFace: 'Calibri', align: 'center', valign: 'middle' });
const arr = m.pros.map((p, idx) => ({
text: p,
options: { breakLine: idx < m.pros.length - 1, color: C.white, fontSize: 12.5, fontFace: 'Calibri' },
}));
s.addText(arr, { x: x + 0.15, y: 1.58, w: 2.72, h: 2.5, valign: 'top' });
s.addShape(pres.ShapeType.rect, { x: x + 0.1, y: 4.1, w: 2.82, h: 0.04, fill: { color: m.color }, line: { type: 'none' } });
s.addText(m.best, { x: x + 0.1, y: 4.17, w: 2.82, h: 0.72, fontSize: 11, color: m.color, fontFace: 'Calibri', italic: true, valign: 'top' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — COMBINED/COMPLEMENTARY USE
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, true);
addTitle(s, 'When to Combine Techniques', 0.28, C.teal);
addDivider(s, 0.9, C.teal);
s.addText('USG + PNS Combined Approach', {
x: 0.4, y: 1.0, w: 9.2, h: 0.38, fontSize: 16, bold: true, color: C.teal, fontFace: 'Calibri',
});
addSmallBullets(s, [
'USG visualises the nerve and needle trajectory in real time',
'PNS provides an additional safety check — absence of motor twitch at < 0.2 mA confirms the needle is NOT intraneural',
'Particularly valuable for: brachial plexus blocks, sciatic nerve at gluteal level, infraclavicular approach',
'Studies show combined USG+PNS reduces inadvertent intraneural injection and local anaesthetic systemic toxicity (LAST)',
], 0.4, 1.42, 9.2, 1.35, C.teal, C.white, 13);
// When to use which
s.addText('Decision Framework', {
x: 0.4, y: 2.88, w: 9.2, h: 0.38, fontSize: 16, bold: true, color: C.gold, fontFace: 'Calibri',
});
const scenarios = [
{ scenario: 'Resource-limited / field setting', choice: 'Landmark', color: C.orange },
{ scenario: 'No USG but reliable anatomy', choice: 'Landmark / PNS', color: C.orange },
{ scenario: 'Deep block, poor USG window', choice: 'PNS ± Landmark', color: C.teal },
{ scenario: 'Obese patient, superficial block', choice: 'USG preferred', color: C.gold },
{ scenario: 'High-risk patient, vascular proximity', choice: 'USG (+ Doppler)', color: C.gold },
{ scenario: 'Teaching / training environment', choice: 'USG + PNS', color: C.green },
{ scenario: 'Novel fascial plane block', choice: 'USG mandatory', color: C.gold },
];
scenarios.forEach((sc, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.85;
const y = 3.32 + row * 0.42;
if (i === 6) {
// last one centered
}
s.addShape(pres.ShapeType.rect, { x, y, w: 4.6, h: 0.38, fill: { color: C.navy }, line: { color: sc.color, width: 0.8 } });
s.addText(sc.scenario, { x: x + 0.08, y: y + 0.04, w: 3.1, h: 0.3, fontSize: 12, color: C.white, fontFace: 'Calibri', valign: 'middle' });
s.addText(sc.choice, { x: x + 3.1, y: y + 0.04, w: 1.42, h: 0.3, fontSize: 12, bold: true, color: sc.color, fontFace: 'Calibri', align: 'center', valign: 'middle' });
});
}
// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — CONCLUSION
// ═══════════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
s.background = { color: C.darkNavy };
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.8, fill: { color: C.navy }, line: { type: 'none' } });
s.addShape(pres.ShapeType.rect, { x: 0, y: 0.78, w: 10, h: 0.05, fill: { color: C.gold }, line: { type: 'none' } });
s.addText('CONCLUSION', {
x: 0.5, y: 0.1, w: 9, h: 0.58, fontSize: 14, bold: true, color: C.gold, fontFace: 'Calibri', align: 'center', charSpacing: 8,
});
const points = [
{ icon: '▸', text: 'Landmark technique remains the foundational skill — essential where resources are limited and in anatomically predictable blocks.' },
{ icon: '▸', text: 'PNS adds an objective endpoint, improving accuracy over landmark alone, and is a valuable complementary tool especially for deep nerves.' },
{ icon: '▸', text: 'USG guidance is the current gold standard — offering the highest success rate, best safety profile, reduced LA volumes, and enabling novel fascial plane blocks.' },
{ icon: '▸', text: 'Combined USG + PNS offers maximum safety for high-risk blocks by providing dual confirmation of needle position.' },
{ icon: '▸', text: 'Choice of technique should be guided by patient factors, available resources, block type, and operator expertise.' },
];
points.forEach((p, i) => {
const y = 1.0 + i * 0.86;
s.addShape(pres.ShapeType.roundRect, { x: 0.4, y, w: 9.2, h: 0.74, fill: { color: C.navy }, line: { color: C.teal, width: 1 }, rectRadius: 0.08 });
s.addText(p.icon, { x: 0.55, y: y + 0.15, w: 0.35, h: 0.44, fontSize: 16, bold: true, color: C.teal, fontFace: 'Calibri' });
s.addText(p.text, { x: 0.95, y: y + 0.08, w: 8.5, h: 0.58, fontSize: 12.5, color: C.white, fontFace: 'Calibri', valign: 'middle' });
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.38, fill: { color: C.navy }, line: { type: 'none' } });
s.addText('"The best nerve block technique is the one you can perform safely and successfully for your patient."', {
x: 0.5, y: 5.27, w: 9, h: 0.32, fontSize: 11, color: C.midGray, fontFace: 'Calibri', align: 'center', italic: true,
});
}
// ─── SAVE ─────────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: '/home/daytona/workspace/nerve-blocks-ppt/Landmark_PNS_USG_Nerve_Blocks.pptx' })
.then(() => console.log('SAVED OK'))
.catch(err => { console.error('ERROR:', err); process.exit(1); });
cd /home/daytona/workspace/nerve-blocks-ppt && node create_presentation.js
ls -lh /home/daytona/workspace/nerve-blocks-ppt/
Landmark PNS USG Nerve Blocks
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide — styled cover with subtitle |
| 2 | Overview / Table of Contents |
| 3 | Introduction — what is a PNB, the three modalities explained with comparison boxes |
| 4 | Landmark Technique — principle, technique steps, and advantages panel |
| 5 | PNS Technique — principle (Raj criterion), technique steps, and advantages panel |
| 6 | PNS: How It Works — step flow diagram + current threshold table (with danger callout for < 0.2 mA) |
| 7 | USG Technique — principle (nerve echogenicity, LA halo), in-plane vs out-of-plane steps |
| 8 | USG Advantages (Detailed) — 6-card grid covering Safety, Efficacy, Precision, Patient Experience, Clinical Scope, Teaching |
| 9 | Head-to-Head Comparison Table — 10 parameters, all 3 techniques side by side, USG column highlighted in green |
| 10 | Inclusion Criteria — 3-column layout: General, Surgical Indications, Patient Suitability |
| 11 | Exclusion Criteria — 4 card layout: Absolute, Coagulation, Neurological, Patient/Technical factors |
| 12 | Advantages at a Glance — 3-column summary with "best for" context per technique |
| 13 | When to Combine Techniques — USG+PNS rationale + decision framework table (7 clinical scenarios) |
| 14 | Conclusion — 5 key take-home messages + closing quote |