Make a study model for dexmed for intra thecal use with nipping lscs
dexmedetomidine intrathecal spinal caesarean section
PMID: 39194198
PMID: 40147822
PMID: 41185983
PMID: 42219838
| Parameter | Detail |
|---|---|
| Class | Highly selective alpha-2 (α2) adrenergic agonist |
| α2 : α1 selectivity ratio | 8:1 (clonidine is ~200:1; dexmed is ~1600:1 - approximately 10x more α2-selective than clonidine) |
| Mechanism (intrathecal) | Acts on prejunctional and postjunctional α2 receptors in the dorsal horn of the spinal cord. Presynaptic: reduces neurotransmitter release. Postsynaptic: causes hyperpolarization, reduces pain pulse transmission |
| Intrathecal dose range | 3-10 mcg (as little as 3 mcg can prolong motor and sensory block) |
| Most studied dose in LSCS | 5 mcg added to hyperbaric bupivacaine 0.5% |
| Formulation used | Preservative-free (critical for neuraxial use) |
Miller's Anesthesia 10e, p. 6062
| Group | Drug | Volume |
|---|---|---|
| Group A (Control) | Hyperbaric Bupivacaine 0.5% 10 mg + Normal Saline 0.5 mL | 2.5 mL total |
| Group B (Dex 5) | Hyperbaric Bupivacaine 0.5% 10 mg + Dexmedetomidine 5 mcg | 2.5 mL total |
| Group C (Dex 10) | Hyperbaric Bupivacaine 0.5% 10 mg + Dexmedetomidine 10 mcg | 2.5 mL total |
| Level | Landmark |
|---|---|
| T10 | Umbilicus |
| T6 | Xiphisternum |
| T5 | Just below nipple line |
| T4 | Nipple line - MINIMUM for LSCS |
| T2 | Upper chest |
| Outcome | Measurement Tool |
|---|---|
| Onset of sensory block to T10 | Stopwatch (minutes) |
| Onset of sensory block to T4 | Stopwatch (minutes) |
| Maximum sensory level achieved | Nipping test + dermatomal mapping |
| Duration of motor block | Bromage scale (0=none, 3=complete) |
| Intraoperative pain/discomfort | NRS 0-10 |
| Sedation score | Ramsay sedation scale |
| Hemodynamic changes | HR, SBP, DBP at 0, 5, 10, 15, 30, 60 min |
| Incidence of hypotension | SBP <90 mmHg or >20% fall from baseline |
| Incidence of bradycardia | HR <50 bpm |
| Shivering | 4-point scale (0=none to 3=severe) |
| Nausea/vomiting | Present/Absent |
| Pruritus | Present/Absent |
| Postoperative analgesia (24h VAS) | Visual Analogue Scale |
| Total rescue analgesic consumption | Diclofenac mg / tramadol mg in 24h |
| Neonatal outcome | APGAR at 1 & 5 min, Umbilical artery pH |
| Parameter | Dex group vs Control | Evidence |
|---|---|---|
| Sensory block onset | Faster with dexmed (statistically significant) | Meta-analysis 2026 |
| Sensory block duration | Significantly prolonged | Multiple meta-analyses |
| Motor block duration | Prolonged (by ~29.7 min vs fentanyl) | Boshoff et al. 2025 |
| Max sensory level | Similar (dexmed does not raise the level) | Giaccari 2024 |
| Time to first analgesic request | +81.74 minutes longer with dexmed vs fentanyl | Huda 2026 |
| Postoperative analgesia | Better pain scores at 4h post-op vs fentanyl | Boshoff 2025 |
| Side Effect | Dexmed | Advantage |
|---|---|---|
| Pruritus | Significantly LESS | Major advantage over fentanyl |
| Shivering | Significantly LESS (8% absolute risk reduction) | Significant benefit |
| Nausea/Vomiting | Significantly LESS (7% absolute risk reduction) | Benefit |
| Hypotension | Slight increase risk (~2%) | Minor concern |
| Bradycardia | Slight increase risk (~2%) | Minor concern |
| Respiratory depression | Not seen with intrathecal dose | Safe for neonate |
Network meta-analysis by Ollosu et al. (Reg Anesth Pain Med 2026) - 166 RCTs, 14,925 patients - confirms dexmedetomidine significantly prolongs motor block duration; safety profile adequate.
Intrathecal Dexmedetomidine
↓
Binds α2 receptors in Dorsal Horn (Substantia Gelatinosa)
↓
┌─────────────────────────────┐
│ Presynaptic │ Reduces neurotransmitter
│ (Primary afferent terminal) │ release (substance P, glutamate)
└─────────────────────────────┘
+
┌─────────────────────────────┐
│ Postsynaptic │ Hyperpolarization → blocks
│ (Dorsal horn neuron) │ pain pulse transmission
└─────────────────────────────┘
↓
Prolonged sensory + motor blockade
Anti-shivering effect (thermoregulatory center in locus coeruleus)
Sedation (locus coeruleus α2 receptors)
| Item | Detail |
|---|---|
| Study design | Prospective, randomized, double-blind, 3-arm parallel RCT |
| Randomization | Computer-generated random number table |
| Blinding | Anesthesiologist giving drug (open) + Assessor + Patient (blinded) |
| Block size | Variable (4 or 6) |
| Allocation concealment | Sealed opaque envelopes |
| Sample size | ~30/group (based on prior RCTs - consult statistician with SD of primary outcome) |
| Spinal technique | L3-4 or L2-3 interspace, sitting/lateral position, 25G Quincke or 27G Whitacre needle |
| Drug preparation | Dexmed 100 mcg/mL ampoule → diluted with CSF to required volume (preservative-free) |
| Intraop monitoring | Continuous pulse oximetry, NIBP every 2.5 min, continuous ECG |
| Vasopressor protocol | Ephedrine 5 mg IV / Phenylephrine 50 mcg IV for hypotension |
| Atropine ready | 0.6 mg IV for bradycardia (HR <50 bpm) |
| Time | Sensory Level (Nipping) | Motor Block (Bromage) | HR | SBP | Sedation Score | Shivering |
|---|---|---|---|---|---|---|
| Baseline (T0) | - | 0 | 1 | 0 | ||
| 2 min | ||||||
| 5 min | ||||||
| 10 min | T10 expected | 1-2 | ||||
| 15 min | T4-T6 expected | 3 | ||||
| 30 min | Max level | 3 | ||||
| 60 min | 2-dermatome regression | |||||
| 90 min | ||||||
| Incision | Pain: Yes/No | |||||
| Baby out | ||||||
| End of surgery | ||||||
| PACU 30 min | 0-1 | |||||
| 2h postop | 0 | VAS | ||||
| 4h postop | VAS | |||||
| 6h, 12h, 24h | VAS |
| Data type | Test |
|---|---|
| Continuous normally distributed (HR, BP) | ANOVA + Tukey post-hoc |
| Continuous non-normal (pain scores, time to block) | Kruskal-Wallis + Mann-Whitney |
| Categorical (nausea, shivering, hypotension incidence) | Chi-square or Fisher's exact test |
| Time-series hemodynamics | Repeated measures ANOVA |
| Significance level | p < 0.05 |
"Dexmed IT in LSCS"
- Dose: 5-10 mcg
- Drug: Preservative-free, diluted in CSF
- Block: Faster onset, longer sensory + motor duration
- Analgesia: +~90 min longer than fentanyl
- Wins vs opioids: No pruritus, less shivering, less PONV
- Watch for: Bradycardia (2%), Hypotension (2%)
- Neonates: SAFE - APGAR scores unaffected
- Nipping test target: T4 (nipple line) before skin incision
In comparison to fentanyl intra thecal use
| Parameter | Dexmedetomidine (Dexmed) | Fentanyl |
|---|---|---|
| Class | α2-adrenergic agonist | Opioid (mu-receptor agonist) |
| Receptor | α2 receptors - dorsal horn (pre + postjunctional) | Mu (μ), kappa (κ) opioid receptors - dorsal horn |
| Mechanism | Reduces neurotransmitter release (presynaptic) + hyperpolarization (postsynaptic) → blocks pain transmission | Opioid receptor activation → inhibits substance P release, reduces pain transmission |
| Intrathecal dose | 5-10 mcg | 10-25 mcg |
| Most common dose in LSCS | 5 mcg | 25 mcg |
| Lipid solubility | Moderate | High (rapid CSF spread) |
| Onset of action | Faster (slightly) | Fast |
| Duration of sensory block | Longer | Shorter |
| Preservative required | Preservative-free | Preservative-free |
| Group | Drug Combination | Volume |
|---|---|---|
| Group D (Dexmed) | Hyperbaric Bupivacaine 0.5% 10 mg + Dexmedetomidine 5 mcg | 2.5 mL total |
| Group F (Fentanyl) | Hyperbaric Bupivacaine 0.5% 10 mg + Fentanyl 25 mcg | 2.5 mL total |
Both groups receive the same volume. Drug preparation by a non-blinded assistant anesthesiologist. Assessor and patient remain blinded.
T4 → Nipple line ← TARGET for LSCS
T6 → Xiphoid process
T8 → Costal margin
T10 → Umbilicus ← Earliest clinically meaningful level
T12 → Inguinal ligament
L1 → Groin
S1 → Lateral foot
| Parameter | Definition |
|---|---|
| Onset of sensory block | Time from injection → loss of nipping sensation at T10 |
| Time to T4 | Time to reach nipple line block |
| Maximum sensory level | Highest dermatomal level where nipping = dull |
| Two-dermatomal regression time | From peak level, time to fall 2 dermatomes |
| Time to S1 recovery | Complete sensory recovery (end of block) |
| Duration of effective analgesia | Injection → first NRS ≥4 / first rescue analgesic request |
| Outcome | Tool |
|---|---|
| Onset time to T10 | Stopwatch (min) |
| Onset time to T4 (nipping test) | Stopwatch (min) |
| Maximum sensory level | Nipping/dermatomal mapping |
| Duration of motor block | Bromage Scale (0-3) |
| Intraoperative pain | NRS 0-10 at incision, peritoneal handling, uterine closure |
| Postoperative pain (VAS) | At 0, 2, 4, 6, 12, 24 h |
| Sedation | Ramsay Sedation Scale (1-6) |
| Shivering | 0-3 scale (0=none, 1=no visible, 2=mild, 3=severe) |
| Pruritus | Absent / Mild / Moderate / Severe |
| Nausea/Vomiting | Present/Absent |
| Respiratory depression | SpO2 <94% on room air |
| Hypotension | SBP <90 or >20% fall - episodes and vasopressor dose |
| Bradycardia | HR <50 bpm, atropine required |
| Total rescue analgesic (24h) | Diclofenac mg / Tramadol mg |
| Neonatal APGAR | At 1 min and 5 min |
| Umbilical artery pH | Blood gas at delivery |
| Parameter | Dexmedetomidine | Fentanyl | Winner | Evidence Quality |
|---|---|---|---|---|
| Sensory block onset | Faster | Baseline | Dexmed | Moderate |
| Duration of sensory block | Longer | Shorter | Dexmed | Low-Moderate |
| Duration of motor block | +29.68 min longer (95% CI: 0.96-58.40) | Baseline | Dexmed | Very Low |
| Duration of analgesia | +93.3 min longer (95% CI: 62.4-124.2) | Baseline | Dexmed | Low |
| Pain score at 4h post-op | Lower (MD -1.26 on NRS, CI: -1.78 to -0.74) | Baseline | Dexmed | Low-Moderate |
| Pruritus | 11% absolute risk REDUCTION | Higher | Dexmed wins | Moderate |
| Shivering | 8% absolute risk REDUCTION | Higher | Dexmed wins | Moderate |
| Nausea/Vomiting | 7% absolute risk REDUCTION | Higher | Dexmed wins | Moderate |
| Hypotension | 2% absolute risk INCREASE | Baseline | Fentanyl | Low |
| Bradycardia | 2% absolute risk INCREASE | Baseline | Fentanyl | Low |
| Respiratory depression | No difference | No difference | Equal | - |
| APGAR 1 min | No difference | No difference | Equal | - |
| APGAR 5 min | No difference | No difference | Equal | - |
| Parameter | Result |
|---|---|
| Sensory block onset | Significantly faster with Dexmed (95% CI: -0.43 to -0.02, p=0.03) |
| Sensory block duration | Significantly longer with Dexmed |
| Time to first analgesic request | +81.74 minutes longer with Dexmed (95% CI: 63.03-100.45, p<0.001) |
| Shivering | Lower incidence with Dexmed vs Fentanyl |
INTRATHECAL FENTANYL INTRATHECAL DEXMEDETOMIDINE
↓ ↓
Binds μ-opioid receptors Binds α2-adrenergic receptors
in dorsal horn in dorsal horn
↓ ↓
Inhibits substance P release Presynaptic: ↓ neurotransmitter release
Reduces Ca²⁺ influx Postsynaptic: Hyperpolarization
Opens K⁺ channels (K⁺ channel activation)
↓ ↓
Rapid onset (lipophilic) Moderately fast onset
Short-medium duration LONGER duration
↓ ↓
SIDE EFFECTS: SIDE EFFECTS:
• Pruritus (most common) • Bradycardia (mild)
• Nausea/Vomiting • Hypotension (mild)
• Respiratory depression (rare) • Sedation
• Shivering ✓ No pruritus
• Urinary retention ✓ Less shivering
✓ Less PONV
✓ Neonatal safe
| Side Effect | Fentanyl IT | Dexmed IT | Clinical Significance in LSCS |
|---|---|---|---|
| Pruritus | 30-50% incidence | Near zero | Major comfort issue in awake patient during surgery |
| Shivering | Common | Significantly less | Dexmed has direct anti-shivering effect via locus coeruleus; critical in LSCS where mothers are awake |
| Nausea/Vomiting | Common (peritoneal handling) | Less | Improves maternal experience |
| Respiratory depression | Possible (rare at 25 mcg) | Not seen intrathecally | Both safe at standard doses |
| Hypotension | Rare | Slightly higher | Treat with phenylephrine/ephedrine |
| Bradycardia | Rare | Slightly higher | Treat with atropine 0.6 mg IV |
| Fetal effects | Crosses placenta (rapid) | Minimal placental transfer | Dexmed has better fetal safety profile |
| Urinary retention | Possible | Less | Relevant postoperatively |
| Time Point | Sensory Level (Nipping) | Motor (Bromage 0-3) | HR (bpm) | SBP (mmHg) | NRS Pain | Shivering (0-3) | Pruritus | Sedation (Ramsay) |
|---|---|---|---|---|---|---|---|---|
| T0 (Baseline) | No block | 0 | 0 | 0 | No | 1 | ||
| 2 min | ||||||||
| 5 min | ||||||||
| 10 min | T10 expected | 1 | ||||||
| 15 min | T6-T4 expected | 2-3 | ||||||
| Incision (skin) | T4 confirm | 3 | Record | |||||
| Baby delivery | ||||||||
| Uterine closure | ||||||||
| End surgery | 1-2 | |||||||
| PACU 30 min | 0-1 | VAS | ||||||
| 2h post-op | 0 | VAS | ||||||
| 4h post-op | 0 | VAS | ||||||
| 6h post-op | 0 | VAS | ||||||
| 12h post-op | 0 | VAS | ||||||
| 24h post-op | 0 | VAS |
┌────────────────────────────────────────────────────────────────────┐
│ DEXMED vs FENTANYL — INTRATHECAL in LSCS │
├─────────────────────┬─────────────────────┬───────────────────────┤
│ Parameter │ Dexmed (5 mcg) │ Fentanyl (25 mcg) │
├─────────────────────┼─────────────────────┼───────────────────────┤
│ Onset │ FASTER │ Fast │
│ Sensory duration │ LONGER │ Shorter │
│ Analgesia duration │ +82-93 min more │ Baseline │
│ Nipping test T4 │ Achieved faster │ Achieved │
│ Motor block │ Prolonged slightly │ Shorter │
│ Pruritus │ RARE │ 30-50% │
│ Shivering │ LESS │ Common │
│ PONV │ LESS │ Common │
│ Bradycardia │ Monitor (2% more) │ Rare │
│ Hypotension │ Monitor (2% more) │ Rare │
│ Neonatal safety │ SAFE │ SAFE │
└─────────────────────┴─────────────────────┴───────────────────────┘
VERDICT: Dexmed SUPERIOR for quality of block + side effect profile
in awake LSCS patients
Make study sample for me so can do study
What format do you want the study sample in? · What should the study sample include?
Word document
ls /home/daytona/workspace/ 2>/dev/null && ls /home/daytona/skills/docx/scripts/office/ 2>/dev/null
mkdir -p /home/daytona/workspace/dexmed-lscs-study && ls /home/daytona/workspace/dexmed-lscs-study/
~/dexmed-lscs-study/create_study_doc.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
HeadingLevel, AlignmentType, BorderStyle, WidthType, VerticalAlign,
PageNumber, Header, Footer, ShadingType, PageBreak, TableOfContents,
LevelFormat, convertInchesToTwip, UnderlineType
} = require('docx');
const fs = require('fs');
// ─── Helper functions ──────────────────────────────────────────────
function heading1(text) {
return new Paragraph({
text,
heading: HeadingLevel.HEADING_1,
spacing: { before: 300, after: 120 },
});
}
function heading2(text) {
return new Paragraph({
text,
heading: HeadingLevel.HEADING_2,
spacing: { before: 200, after: 80 },
});
}
function heading3(text) {
return new Paragraph({
text,
heading: HeadingLevel.HEADING_3,
spacing: { before: 160, after: 60 },
});
}
function para(text, options = {}) {
return new Paragraph({
children: [new TextRun({ text, size: 22, font: 'Calibri', ...options })],
spacing: { after: 100 },
alignment: AlignmentType.JUSTIFIED,
});
}
function boldPara(text) {
return new Paragraph({
children: [new TextRun({ text, bold: true, size: 22, font: 'Calibri' })],
spacing: { after: 80 },
});
}
function bullet(text, level = 0) {
return new Paragraph({
children: [new TextRun({ text, size: 22, font: 'Calibri' })],
bullet: { level },
spacing: { after: 60 },
});
}
function emptyLine() {
return new Paragraph({ children: [new TextRun('')], spacing: { after: 60 } });
}
function pageBreak() {
return new Paragraph({ children: [new PageBreak()] });
}
// ─── Table builder ─────────────────────────────────────────────────
function makeTable(headers, rows, colWidths) {
const headerRow = new TableRow({
tableHeader: true,
children: headers.map((h, i) =>
new TableCell({
children: [new Paragraph({
children: [new TextRun({ text: h, bold: true, size: 20, font: 'Calibri', color: 'FFFFFF' })],
alignment: AlignmentType.CENTER,
})],
width: { size: colWidths ? colWidths[i] : Math.floor(9000 / headers.length), type: WidthType.DXA },
shading: { fill: '1F4E79', type: ShadingType.CLEAR, color: '1F4E79' },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 80, bottom: 80, left: 100, right: 100 },
})
),
});
const dataRows = rows.map((row, ri) =>
new TableRow({
children: row.map((cell, ci) =>
new TableCell({
children: [new Paragraph({
children: [new TextRun({ text: String(cell), size: 20, font: 'Calibri' })],
alignment: AlignmentType.LEFT,
})],
width: { size: colWidths ? colWidths[ci] : Math.floor(9000 / headers.length), type: WidthType.DXA },
shading: { fill: ri % 2 === 0 ? 'DEEAF1' : 'FFFFFF', type: ShadingType.CLEAR },
margins: { top: 80, bottom: 80, left: 100, right: 100 },
})
),
})
);
return new Table({
rows: [headerRow, ...dataRows],
width: { size: 9000, type: WidthType.DXA },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: '1F4E79' },
bottom: { style: BorderStyle.SINGLE, size: 4, color: '1F4E79' },
left: { style: BorderStyle.SINGLE, size: 4, color: '1F4E79' },
right: { style: BorderStyle.SINGLE, size: 4, color: '1F4E79' },
insideH: { style: BorderStyle.SINGLE, size: 2, color: 'AED6F1' },
insideV: { style: BorderStyle.SINGLE, size: 2, color: 'AED6F1' },
},
});
}
// ─── Title Page ────────────────────────────────────────────────────
const titlePage = [
emptyLine(), emptyLine(), emptyLine(),
new Paragraph({
children: [new TextRun({ text: 'RESEARCH PROTOCOL', bold: true, size: 32, font: 'Calibri', color: '1F4E79', allCaps: true })],
alignment: AlignmentType.CENTER, spacing: { after: 200 },
}),
new Paragraph({
children: [new TextRun({ text: 'A Comparative Study of', size: 26, font: 'Calibri', color: '2E4057' })],
alignment: AlignmentType.CENTER, spacing: { after: 100 },
}),
new Paragraph({
children: [new TextRun({ text: 'Intrathecal Dexmedetomidine vs Fentanyl', bold: true, size: 30, font: 'Calibri', color: '1F4E79' })],
alignment: AlignmentType.CENTER, spacing: { after: 100 },
}),
new Paragraph({
children: [new TextRun({ text: 'as Adjuvants to Hyperbaric Bupivacaine 0.5% for', size: 26, font: 'Calibri', color: '2E4057' })],
alignment: AlignmentType.CENTER, spacing: { after: 100 },
}),
new Paragraph({
children: [new TextRun({ text: 'Spinal Anaesthesia in Lower Segment Caesarean Section (LSCS)', bold: true, size: 26, font: 'Calibri', color: '1F4E79' })],
alignment: AlignmentType.CENTER, spacing: { after: 300 },
}),
new Paragraph({
children: [new TextRun({ text: '─────────────────────────────────────', size: 22, font: 'Calibri', color: '1F4E79' })],
alignment: AlignmentType.CENTER, spacing: { after: 200 },
}),
new Paragraph({
children: [new TextRun({ text: 'A Double-Blind Randomized Controlled Trial', bold: true, size: 24, font: 'Calibri', color: '2E4057' })],
alignment: AlignmentType.CENTER, spacing: { after: 400 },
}),
emptyLine(), emptyLine(),
new Paragraph({
children: [new TextRun({ text: 'Principal Investigator: ___________________________________', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 120 },
}),
new Paragraph({
children: [new TextRun({ text: 'Co-Investigator(s): ___________________________________', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 120 },
}),
new Paragraph({
children: [new TextRun({ text: 'Department of Anaesthesiology', size: 22, font: 'Calibri', bold: true })],
alignment: AlignmentType.CENTER, spacing: { after: 80 },
}),
new Paragraph({
children: [new TextRun({ text: '___________________________________ Hospital / Medical College', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 80 },
}),
new Paragraph({
children: [new TextRun({ text: 'Date: July 2026', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 80 },
}),
new Paragraph({
children: [new TextRun({ text: 'EC/IEC Registration No.: ___________________________________', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 80 },
}),
new Paragraph({
children: [new TextRun({ text: 'CTRI Registration No.: ___________________________________', size: 22, font: 'Calibri' })],
alignment: AlignmentType.CENTER, spacing: { after: 80 },
}),
pageBreak(),
];
// ─── Section 1: Abbreviations ──────────────────────────────────────
const abbrevSection = [
heading1('LIST OF ABBREVIATIONS'),
makeTable(
['Abbreviation', 'Full Form'],
[
['LSCS', 'Lower Segment Caesarean Section'],
['IT', 'Intrathecal'],
['SA', 'Spinal Anaesthesia'],
['Dex / Dexmed', 'Dexmedetomidine'],
['Fen / Fent', 'Fentanyl'],
['BPV', 'Bupivacaine'],
['HR', 'Heart Rate'],
['SBP', 'Systolic Blood Pressure'],
['DBP', 'Diastolic Blood Pressure'],
['MAP', 'Mean Arterial Pressure'],
['SpO2', 'Peripheral Oxygen Saturation'],
['NRS', 'Numeric Rating Scale'],
['VAS', 'Visual Analogue Scale'],
['PONV', 'Postoperative Nausea and Vomiting'],
['PACU', 'Post-Anaesthesia Care Unit'],
['ASA', 'American Society of Anesthesiologists'],
['RCT', 'Randomized Controlled Trial'],
['CSF', 'Cerebrospinal Fluid'],
['IEC', 'Institutional Ethics Committee'],
['CTRI', 'Clinical Trials Registry - India'],
['GA', 'General Anaesthesia'],
['BMI', 'Body Mass Index'],
['APGAR', 'Appearance, Pulse, Grimace, Activity, Respiration'],
],
[2000, 7000]
),
emptyLine(),
pageBreak(),
];
// ─── Section 2: Background ─────────────────────────────────────────
const backgroundSection = [
heading1('1. INTRODUCTION AND BACKGROUND'),
heading2('1.1 Background'),
para('Lower segment caesarean section (LSCS) is one of the most frequently performed major surgical procedures worldwide. Spinal anaesthesia (SA) is the preferred anaesthetic technique for LSCS due to its rapid onset, reliable block, avoidance of airway manipulation, and maternal awareness during delivery. However, single-shot spinal anaesthesia has inherent limitations including finite duration of block, postoperative pain, and side effects such as shivering, nausea, and vomiting in awake parturients.'),
para('Adjuvants added to intrathecal local anaesthetics aim to prolong block duration, improve intraoperative analgesia, and reduce rescue analgesic requirements postoperatively. Intrathecal opioids - particularly fentanyl (10-25 mcg) - have been widely used for this purpose. While fentanyl reliably enhances spinal block, its opioid-related side effects including pruritus (30-50% incidence), nausea/vomiting, and occasional respiratory depression remain significant concerns, particularly in the awake obstetric patient.'),
para('Dexmedetomidine (dexmed), a highly selective alpha-2 (α2) adrenergic agonist, has emerged as a promising non-opioid intrathecal adjuvant. It is approximately 10-fold more α2-selective than clonidine and acts on prejunctional and postjunctional α2 receptors in the dorsal horn of the spinal cord. Intrathecal dexmedetomidine in doses of 3-10 mcg has been shown to prolong sensory and motor block, improve postoperative analgesia, reduce shivering, and avoid opioid-related side effects.'),
para('Several recent systematic reviews and meta-analyses have compared intrathecal dexmedetomidine with fentanyl in LSCS. A 2025 JBI systematic review (Boshoff et al., 15 studies, n=1098) demonstrated that dexmedetomidine prolongs duration of analgesia by approximately 93 minutes, reduces pruritus by 11%, shivering by 8%, and PONV by 7% compared to fentanyl - all with no significant difference in neonatal outcomes. A 2026 meta-analysis (Huda & Minhas, JCPSP) specific to LSCS confirmed faster sensory block onset and +81.74 minutes additional analgesia with dexmedetomidine over fentanyl.'),
para('Despite this growing evidence, the optimal dose of intrathecal dexmedetomidine and its direct clinical comparison with fentanyl in a controlled local setting requires further study. The nipping/pinching test - a standard bedside assessment of dermatomal sensory block level - is used to confirm adequate block before surgical incision and to track block progression and regression.'),
emptyLine(),
heading2('1.2 Rationale'),
para('A direct, double-blind, head-to-head comparison of intrathecal dexmedetomidine 5 mcg versus fentanyl 25 mcg in LSCS patients will provide local data on block quality (assessed by nipping test), analgesia duration, hemodynamic stability, and side effect profiles. This study will contribute to evidence-based selection of intrathecal adjuvants in obstetric anaesthesia practice.'),
emptyLine(),
pageBreak(),
];
// ─── Section 3: Aims & Objectives ─────────────────────────────────
const objectivesSection = [
heading1('2. AIMS AND OBJECTIVES'),
heading2('2.1 Primary Objectives'),
bullet('To compare the duration of effective analgesia (time from intrathecal injection to first rescue analgesic request, NRS ≥4) between intrathecal dexmedetomidine 5 mcg and fentanyl 25 mcg as adjuvants to hyperbaric bupivacaine 0.5% in LSCS.'),
bullet('To compare the duration of sensory block (time to two-dermatomal regression from maximum sensory level by nipping test) between the two groups.'),
emptyLine(),
heading2('2.2 Secondary Objectives'),
bullet('To compare onset time of sensory block to T10 and T4 levels by nipping/pinching test.'),
bullet('To compare maximum sensory level achieved by nipping test.'),
bullet('To compare duration of motor block (Bromage scale).'),
bullet('To assess intraoperative analgesia quality (NRS at incision, peritoneal handling, uterine closure).'),
bullet('To compare postoperative pain scores (VAS/NRS at 0, 2, 4, 6, 12, 24 hours).'),
bullet('To compare sedation level (Ramsay Sedation Scale).'),
bullet('To compare incidence of shivering, pruritus, nausea/vomiting, hypotension, and bradycardia.'),
bullet('To compare total rescue analgesic consumption in first 24 hours.'),
bullet('To assess neonatal outcomes (APGAR score at 1 and 5 minutes, umbilical artery pH).'),
emptyLine(),
pageBreak(),
];
// ─── Section 4: Methodology ────────────────────────────────────────
const methodologySection = [
heading1('3. METHODOLOGY'),
heading2('3.1 Study Design'),
para('Prospective, randomized, double-blind, parallel-group, active-controlled clinical trial.'),
emptyLine(),
heading2('3.2 Study Setting'),
para('Department of Anaesthesiology and Department of Obstetrics & Gynaecology, [Name of Hospital / Medical College], [City].'),
para('Duration of Study: [e.g., 12 months from date of IEC approval]'),
emptyLine(),
heading2('3.3 Eligibility Criteria'),
heading3('Inclusion Criteria'),
bullet('Parturients scheduled for elective or emergency LSCS under spinal anaesthesia'),
bullet('ASA Physical Status I or II'),
bullet('Age 18 to 40 years'),
bullet('Term pregnancy (≥37 weeks of gestation)'),
bullet('Singleton pregnancy, vertex presentation'),
bullet('Weight 50-90 kg, BMI <40 kg/m²'),
bullet('Willing to participate with written informed consent'),
emptyLine(),
heading3('Exclusion Criteria'),
bullet('Patient refusal'),
bullet('Contraindications to spinal anaesthesia: coagulopathy, local infection at site, raised intracranial pressure, severe hypovolemia'),
bullet('Known allergy or hypersensitivity to any study drug'),
bullet('Pre-existing neurological disease (peripheral neuropathy, spinal cord disorder)'),
bullet('Severe cardiac disease (arrhythmia, pre-existing significant bradycardia HR <60, heart block)'),
bullet('Severe preeclampsia or HELLP syndrome requiring immediate GA'),
bullet('Fetal distress requiring crash LSCS under GA'),
bullet('Height <150 cm'),
bullet('Scheduled for combined spinal-epidural or epidural anaesthesia'),
bullet('Failed spinal or conversion to GA'),
emptyLine(),
heading2('3.4 Sample Size Calculation'),
para('Based on the meta-analysis by Boshoff et al. (2025), mean difference in duration of analgesia between dexmedetomidine and fentanyl groups was 93.3 minutes (SD approximately 120 minutes). Using the following parameters:'),
bullet('Level of significance (α) = 0.05 (two-tailed)'),
bullet('Power of study (1-β) = 80%'),
bullet('Mean difference to detect = 90 minutes'),
bullet('Standard deviation = 120 minutes (pooled from literature)'),
bullet('Formula: n = 2 × [(Zα/2 + Zβ)² × σ²] / d²'),
bullet('Calculated n = 28 per group → Rounded up to 35 per group to account for 20% dropouts'),
boldPara('Total sample size: 70 patients (35 per group)'),
emptyLine(),
heading2('3.5 Randomization and Blinding'),
heading3('Randomization'),
para('Patients will be randomized using computer-generated random number table (www.random.org or SPSS random number generator). Block randomization with variable block sizes (4 and 6) will be used to ensure equal allocation.'),
heading3('Allocation Concealment'),
para('Sealed, sequentially numbered, opaque envelopes (SNOSEs) containing group allocation will be prepared and maintained by a designated pharmacist not involved in the study.'),
heading3('Blinding'),
bullet('Patient: Blinded to group allocation throughout.'),
bullet('Assessor: The anaesthesiologist performing block assessment, nipping test, and recording outcomes will be blinded to group allocation.'),
bullet('Drug preparation: A separate anaesthesiologist (non-blinded) will prepare the drug syringe and will not participate in patient assessment.'),
bullet('Statistician: Data will be coded and analyzed in a blinded manner.'),
emptyLine(),
heading2('3.6 Study Groups and Drug Preparation'),
makeTable(
['Group', 'Drug Combination', 'Volume', 'Baricity'],
[
['Group D (Dexmedetomidine)', 'Hyperbaric Bupivacaine 0.5% 10 mg\n+ Dexmedetomidine 5 mcg\n(preservative-free)', '2.5 mL total\n(made up with NS to volume)', 'Hyperbaric'],
['Group F (Fentanyl)', 'Hyperbaric Bupivacaine 0.5% 10 mg\n+ Fentanyl 25 mcg\n(preservative-free)', '2.5 mL total\n(made up with NS to volume)', 'Hyperbaric'],
],
[2500, 4000, 1500, 1000]
),
emptyLine(),
para('Drug preparation: Dexmedetomidine is available as 200 mcg/2mL (100 mcg/mL) ampoule. For 5 mcg: dilute 0.5 mL of dexmedetomidine in 9.5 mL normal saline to get 10 mcg/mL; draw 0.5 mL = 5 mcg. Fentanyl is available as 50 mcg/mL ampoule. For 25 mcg: draw 0.5 mL = 25 mcg. Both preparations must be preservative-free.'),
emptyLine(),
heading2('3.7 Anaesthetic Technique - Standard Protocol'),
bullet('Pre-procedure: IV access (18G), preloading with Ringer\'s Lactate 500 mL over 15 minutes, baseline vitals recorded.'),
bullet('Monitoring: Pulse oximetry (SpO2), non-invasive blood pressure (NIBP) every 2.5 minutes, continuous ECG.'),
bullet('Position: Sitting or left lateral decubitus (standardized within institution).'),
bullet('Level: L3-L4 or L2-L3 interspace under strict aseptic technique.'),
bullet('Needle: 25G Quincke or 27G Whitacre (pencil-point) spinal needle - standardized within study.'),
bullet('Confirm CSF: Free flow of clear CSF before injection.'),
bullet('Injection: Drug injected over 15-20 seconds at rate of 0.2 mL/sec.'),
bullet('Post-injection: Patient placed immediately supine with 15° left lateral tilt (wedge under right hip).'),
bullet('Oxygen: 4-6 L/min via face mask or nasal prongs.'),
bullet('Hypotension management: Phenylephrine 50 mcg IV bolus or Ephedrine 5 mg IV if SBP falls >20% from baseline or <90 mmHg.'),
bullet('Bradycardia management: Atropine 0.6 mg IV if HR <50 bpm.'),
bullet('Surgery start: Only after confirming T4 sensory block by nipping test.'),
bullet('Intraoperative rescue: If NRS >4 despite T4 block: Inj. Ketamine 0.5 mg/kg IV or conversion to GA as per protocol.'),
bullet('Postoperative analgesia: Inj. Diclofenac 75 mg IM every 8 hours as baseline. Rescue: Inj. Tramadol 50 mg IV if NRS ≥4 (first rescue analgesic request time = primary endpoint).'),
emptyLine(),
pageBreak(),
];
// ─── Section 5: Nipping Test ───────────────────────────────────────
const nippingSection = [
heading1('4. NIPPING / PINCHING TEST - DETAILED PROTOCOL'),
heading2('4.1 Method'),
para('The nipping (pinching) test is the primary bedside method used to assess dermatomal sensory block level before and during surgery. It evaluates sharp pain sensation (A-delta fibre function) which corresponds to surgical anaesthesia level.'),
heading3('Instrument'),
para('Toothed Allis tissue forceps (toothed forceps) - standard technique. Alternatively, a firm fingernail pinch may be used. Pinprick with a sterile 23G needle is equivalent and may be used as per institutional practice.'),
heading3('Procedure'),
bullet('Begin testing 2 minutes after completion of intrathecal injection.'),
bullet('Repeat every 2 minutes until T4 is achieved or 20 minutes have elapsed.'),
bullet('Test bilaterally; record the higher level if asymmetric.'),
bullet('Start at the foot (S1 level), move cephalad in dermatomal sequence.'),
bullet('Apply firm nipping/pinching to skin at each dermatomal level.'),
bullet('Ask patient: "Does this feel sharp like a pinch, or just pressure/dull?"'),
bullet('Sharp = pain felt = block ABSENT at that level.'),
bullet('Dull / Pressure only = no sharp pain = block PRESENT at that level.'),
emptyLine(),
heading2('4.2 Dermatomal Reference Chart'),
makeTable(
['Dermatomal Level', 'Anatomical Landmark', 'Clinical Significance'],
[
['T4', 'Nipple line (4th intercostal space)', 'MINIMUM level required for LSCS'],
['T5', 'Just below nipple line', 'Adequate for LSCS with margin'],
['T6', 'Xiphoid process', 'Adequate for uterine manipulation'],
['T8', 'Costal margin', 'Adequate for lower uterine incision'],
['T10', 'Umbilicus', 'Minimum for uterine incision (not sufficient for whole LSCS)'],
['T12', 'Inguinal ligament', 'Lower abdomen'],
['L1', 'Groin / Inguinal region', 'Groin sensation'],
['L2', 'Mid anterior thigh', 'Thigh sensation'],
['L3', 'Knee', 'Knee sensation'],
['S1', 'Lateral foot / Little toe', 'End of block recovery'],
],
[1500, 3500, 4000]
),
emptyLine(),
heading2('4.3 Block Timing Parameters (Nipping Test)'),
makeTable(
['Parameter', 'Definition', 'Measurement'],
[
['Onset of sensory block (T10)', 'Time from injection to loss of nipping sensation at T10 bilaterally', 'Minutes from injection'],
['Time to T4 block', 'Time from injection to loss of nipping sensation at T4 (nipple line)', 'Minutes from injection'],
['Maximum sensory level', 'Highest dermatomal level where nipping sensation is absent', 'Dermatomal level (e.g., T4, T3)'],
['Time to maximum level', 'Time from injection to stabilization of maximum sensory level', 'Minutes from injection'],
['Two-dermatomal regression', 'Time from injection to fall of 2 dermatomes from peak level', 'Minutes from injection'],
['Complete sensory recovery (S1)', 'Return of normal sharp nipping sensation at S1 (lateral foot)', 'Minutes from injection'],
],
[2500, 4000, 2500]
),
emptyLine(),
heading2('4.4 Motor Block Assessment (Bromage Scale)'),
makeTable(
['Grade', 'Description', 'Interpretation'],
[
['0', 'No paralysis - full flexion of knees and feet possible', 'No motor block'],
['1', 'Inability to raise extended leg; can flex knee', 'Partial motor block'],
['2', 'Inability to flex knee; can flex ankle/foot', 'Almost complete motor block'],
['3', 'Complete paralysis of foot and leg', 'Complete motor block'],
],
[1000, 5000, 3000]
),
emptyLine(),
pageBreak(),
];
// ─── Section 6: Data Collection Form ───────────────────────────────
const dataFormSection = [
heading1('5. CASE RECORD FORM (CRF) / DATA COLLECTION PROFORMA'),
emptyLine(),
heading2('5.1 Patient Identification'),
makeTable(
['Field', 'Entry'],
[
['Study ID (Randomization No.)', ''],
['Patient Name (initials only)', ''],
['Age (years)', ''],
['IP/OP Number', ''],
['Date of Surgery', ''],
['Group Allocated (D / F)', ''],
['Gravida / Para', ''],
['Gestational Age (weeks)', ''],
['Mode of LSCS (Elective / Emergency)', ''],
['Height (cm)', ''],
['Weight (kg)', ''],
['BMI (kg/m²)', ''],
['ASA Grade (I / II)', ''],
['Indication for LSCS', ''],
],
[4000, 5000]
),
emptyLine(),
heading2('5.2 Preoperative Baseline Parameters'),
makeTable(
['Parameter', 'Value'],
[
['Baseline HR (bpm)', ''],
['Baseline SBP (mmHg)', ''],
['Baseline DBP (mmHg)', ''],
['Baseline MAP (mmHg)', ''],
['Baseline SpO2 (%)', ''],
['Baseline Temp (°C)', ''],
['IV fluid preloaded (mL)', ''],
['Spinal needle used (gauge/type)', ''],
['Level of spinal injection (L2-3 / L3-4)', ''],
['Position (sitting / left lateral)', ''],
['Time of injection (24h format)', ''],
['Any difficulty in spinal (Y/N) - details if Y', ''],
],
[4000, 5000]
),
emptyLine(),
heading2('5.3 Block Assessment - Nipping Test + Motor Block'),
makeTable(
['Time (min)', 'Sensory Level (Nipping)', 'Motor Block (Bromage 0-3)', 'HR (bpm)', 'SBP (mmHg)', 'MAP (mmHg)', 'SpO2 (%)'],
[
['0 (Baseline)', '', '0', '', '', '', ''],
['2 min', '', '', '', '', '', ''],
['5 min', '', '', '', '', '', ''],
['8 min', '', '', '', '', '', ''],
['10 min', '', '', '', '', '', ''],
['12 min', '', '', '', '', '', ''],
['15 min', '', '', '', '', '', ''],
['20 min', '', '', '', '', '', ''],
['At Skin Incision', '', '', '', '', '', ''],
['At Baby Delivery', '', '', '', '', '', ''],
['At Uterine Closure', '', '', '', '', '', ''],
['At End of Surgery', '', '', '', '', '', ''],
],
[1400, 1800, 1500, 1000, 1000, 1000, 1300]
),
emptyLine(),
heading2('5.4 Block Parameter Summary'),
makeTable(
['Parameter', 'Time / Value'],
[
['Onset of sensory block to T10 (min)', ''],
['Time to achieve T4 block (min)', ''],
['Maximum sensory level achieved (dermatomal level)', ''],
['Time to maximum sensory level (min)', ''],
['Two-dermatomal regression time from peak (min)', ''],
['Complete sensory recovery to S1 (min)', ''],
['Duration of motor block - Bromage 3 to 0 (min)', ''],
['Bromage 3 achieved at (min post-injection)', ''],
['Surgery start time (min post-injection)', ''],
['Surgery end time (min post-injection)', ''],
['Duration of surgery (min)', ''],
['Adequate surgical anaesthesia: Yes / No', ''],
['Intraoperative supplementation required: Yes / No', ''],
],
[5000, 4000]
),
emptyLine(),
heading2('5.5 Intraoperative Pain / Discomfort'),
makeTable(
['Time Point', 'NRS Score (0-10)', 'Pain / Discomfort Type', 'Intervention Required'],
[
['At skin incision', '', '', ''],
['At peritoneal entry', '', '', ''],
['At uterine incision', '', '', ''],
['At baby delivery', '', '', ''],
['At uterine closure', '', '', ''],
['At skin closure', '', '', ''],
],
[2500, 1500, 3000, 2000]
),
emptyLine(),
heading2('5.6 Intraoperative Events & Interventions'),
makeTable(
['Event', 'Occurred (Y/N)', 'Time (min)', 'Intervention Given', 'Dose'],
[
['Hypotension (SBP <90 or >20% fall)', '', '', '', ''],
['Bradycardia (HR <50 bpm)', '', '', '', ''],
['Nausea/Vomiting', '', '', '', ''],
['Shivering', '', '', '', ''],
['Pruritus', '', '', '', ''],
['Respiratory Depression (SpO2 <94%)', '', '', '', ''],
['High block (above T2)', '', '', '', ''],
['Conversion to GA', '', '', '', ''],
],
[2500, 1200, 1200, 2500, 1600]
),
emptyLine(),
heading2('5.7 Postoperative Monitoring'),
makeTable(
['Time Post-op', 'NRS / VAS (0-10)', 'Motor Block (Bromage)', 'Shivering (0-3)', 'Pruritus (0/1/2/3)', 'PONV (Y/N)', 'Sedation (Ramsay)', 'Rescue Analgesic (Y/N)'],
[
['0 h (PACU arrival)', '', '', '', '', '', '', ''],
['30 min', '', '', '', '', '', '', ''],
['1 h', '', '', '', '', '', '', ''],
['2 h', '', '', '', '', '', '', ''],
['4 h', '', '', '', '', '', '', ''],
['6 h', '', '', '', '', '', '', ''],
['12 h', '', '', '', '', '', '', ''],
['24 h', '', '', '', '', '', '', ''],
],
[1500, 1200, 1200, 1100, 1100, 900, 1100, 1500]
),
emptyLine(),
heading2('5.8 Analgesic Outcome Summary'),
makeTable(
['Parameter', 'Value'],
[
['Time to first rescue analgesic request (min from injection)', ''],
['NRS at time of rescue analgesic request', ''],
['Total diclofenac consumed in 24h (mg)', ''],
['Total tramadol consumed in 24h (mg)', ''],
['Patient satisfied: Yes / No / Partial', ''],
],
[5500, 3500]
),
emptyLine(),
heading2('5.9 Neonatal Outcome'),
makeTable(
['Parameter', 'Value'],
[
['Baby weight (kg)', ''],
['APGAR Score at 1 minute (0-10)', ''],
['APGAR Score at 5 minutes (0-10)', ''],
['Umbilical artery pH', ''],
['NICU admission required: Yes / No', ''],
['If yes, reason', ''],
],
[5000, 4000]
),
emptyLine(),
heading2('5.10 Side Effect Summary - Tick Sheet'),
makeTable(
['Side Effect', 'Intraoperative', 'Postoperative (0-24h)', 'Treatment Given'],
[
['Pruritus - Mild', '', '', ''],
['Pruritus - Moderate/Severe', '', '', ''],
['Shivering - Grade 1', '', '', ''],
['Shivering - Grade 2/3', '', '', ''],
['Nausea', '', '', ''],
['Vomiting', '', '', ''],
['Hypotension', '', '', ''],
['Bradycardia', '', '', ''],
['Excessive sedation', '', '', ''],
['Respiratory depression', '', '', ''],
['Any other adverse event', '', '', ''],
],
[3000, 1800, 2200, 2000]
),
emptyLine(),
boldPara("Investigator's Signature: ____________________ Date: ____________"),
emptyLine(),
pageBreak(),
];
// ─── Section 7: Statistical Analysis ──────────────────────────────
const statsSection = [
heading1('6. STATISTICAL ANALYSIS PLAN'),
heading2('6.1 Software'),
para('IBM SPSS Statistics version 26 or later, or GraphPad Prism 9.0 or equivalent. p value <0.05 considered statistically significant.'),
emptyLine(),
heading2('6.2 Analysis Tests'),
makeTable(
['Data Type', 'Statistical Test'],
[
['Normally distributed continuous data (HR, SBP, weight, height)', 'Unpaired Student\'s t-test; data presented as Mean ± SD'],
['Non-normally distributed continuous data (block onset times, pain scores, analgesic consumption)', 'Mann-Whitney U test; data presented as Median (IQR)'],
['Categorical/dichotomous data (incidence of PONV, pruritus, hypotension etc.)', 'Chi-square test or Fisher\'s Exact test; data as frequencies and percentages'],
['Repeated hemodynamic measurements over time', 'Repeated measures ANOVA with Bonferroni correction'],
['Normality testing', 'Shapiro-Wilk test (n<50 per group)'],
],
[4500, 4500]
),
emptyLine(),
heading2('6.3 Primary Endpoints Analysis'),
bullet('Duration of effective analgesia: Kaplan-Meier survival curve + Log-rank test (time-to-event analysis) or unpaired t-test if normally distributed.'),
bullet('Duration of sensory block: Mann-Whitney U test or unpaired t-test.'),
emptyLine(),
pageBreak(),
];
// ─── Section 8: Ethical Considerations ────────────────────────────
const ethicsSection = [
heading1('7. ETHICAL CONSIDERATIONS'),
heading2('7.1 Ethics Approval'),
para('This study will be conducted only after obtaining approval from the Institutional Ethics Committee (IEC). The trial will be registered with Clinical Trials Registry - India (CTRI) before commencement of enrolment.'),
emptyLine(),
heading2('7.2 Informed Consent'),
para('Written informed consent will be obtained from all participants during the preanaesthetic visit (at least 24 hours before surgery). The consent form will be in English and the local language. Participants will be informed of their right to withdraw without affecting their medical care.'),
emptyLine(),
heading2('7.3 Patient Safety'),
bullet('All intrathecal drugs will be preservative-free formulations.'),
bullet('Resuscitation equipment (oxygen, suction, crash cart, intubation equipment) will be immediately available.'),
bullet('Vasopressors (phenylephrine, ephedrine) and atropine will be drawn up before spinal injection.'),
bullet('Neonatal resuscitation team will be present at delivery.'),
bullet('Study will adhere to Declaration of Helsinki (2013 revision) and ICH-GCP guidelines.'),
emptyLine(),
heading2('7.4 Confidentiality'),
para('All patient data will be coded. Name and identifying information will not be included in any publications. Data will be stored securely for 5 years after study completion.'),
emptyLine(),
pageBreak(),
];
// ─── Section 9: References ─────────────────────────────────────────
const referencesSection = [
heading1('8. REFERENCES'),
para('1. Boshoff J, Fourtounas M, Pegu K, McInerney P. Effectiveness of intrathecal dexmedetomidine versus fentanyl as additives to hyperbaric bupivacaine on postoperative analgesia in patients undergoing Cesarean section: a systematic review and meta-analysis. JBI Evid Synth. 2025. PMID: 41185983.'),
para('2. Huda AU, Minhas MR. Intrathecal Dexmedetomidine versus Fentanyl for Improving the Quality of Spinal Block in Lower Segment Caesarean Section: A Meta-Analysis. J Coll Physicians Surg Pak. 2026;36(6):779. PMID: 42219838.'),
para('3. Giaccari LG, Coppolino F, Aurilio C, Pace MC, Passavanti MB, Pota V. Is intrathecal bupivacaine plus dexmedetomidine superior to bupivacaine in spinal anesthesia for a cesarean section? A systematic review and meta-analysis. Eur Rev Med Pharmacol Sci. 2024. PMID: 39194198.'),
para('4. Ollosu M, Tripodi VF, Bonu A, et al. Efficacy and safety of intrathecal adjuvants for perioperative management of cesarean delivery: a systematic review and network meta-analysis of randomized controlled trials. Reg Anesth Pain Med. 2026. PMID: 40147822.'),
para('5. Miller RD et al. Miller\'s Anesthesia. 10th ed. Elsevier; 2023. Chapter 41: Spinal Anaesthesia. pp. 6062-6063.'),
para('6. Barash PG, Cullen BF, Stoelting RK et al. Clinical Anesthesia. 9th ed. Wolters Kluwer; 2022. Chapter 35: Spinal Anaesthesia - Adjuvants. p. 2843.'),
emptyLine(),
pageBreak(),
];
// ─── Section 10: Consent Form ──────────────────────────────────────
const consentSection = [
heading1('APPENDIX A: PATIENT INFORMATION SHEET & INFORMED CONSENT FORM'),
emptyLine(),
boldPara('Study Title: A Comparative Study of Intrathecal Dexmedetomidine vs Fentanyl as Adjuvants to Hyperbaric Bupivacaine for Spinal Anaesthesia in LSCS'),
emptyLine(),
heading2('Patient Information Sheet'),
para('You are being invited to take part in a research study. Before you decide, it is important for you to understand why the research is being done and what it will involve. Please read this information carefully and discuss it with your relatives if you wish. Ask us if there is anything that is not clear or if you would like more information.'),
emptyLine(),
heading3('Why is this study being done?'),
para('When you have a caesarean section under spinal anaesthesia (injection in the back), your doctor gives you a painkilling drug along with the numbing medicine to help the anaesthesia work better and relieve pain after surgery. Two such drugs are commonly used: Dexmedetomidine and Fentanyl. We want to find out which drug is better in terms of pain relief, duration, and fewer side effects after your caesarean section.'),
heading3('What will happen to me if I take part?'),
para('If you agree to join the study, you will be assigned by chance (like tossing a coin) to receive either Dexmedetomidine or Fentanyl along with the spinal injection. Both drugs are approved and routinely used. You will not know which drug you receive. A doctor will check your pain level and feeling in your legs using a simple pinch test at regular intervals. We will record your pain scores, blood pressure, heart rate, and any side effects.'),
heading3('What are the risks?'),
para('Both drugs are safe and routinely used. Possible minor side effects of Dexmedetomidine include a slight slowing of heart rate or drop in blood pressure, which will be promptly treated. Fentanyl may cause itching or nausea, which are also treated. Your baby\'s condition will be carefully monitored. You and your baby\'s safety are our highest priority.'),
heading3('Is participation voluntary?'),
para('Yes. Your participation is entirely voluntary. Refusing to participate or withdrawing at any time will not affect the quality of care you receive.'),
emptyLine(),
heading2('Informed Consent'),
para('I, ________________________________________ (Patient name), have read the above patient information sheet. The study has been explained to me in my own language. My questions have been answered satisfactorily. I voluntarily consent to participate in this study.'),
emptyLine(),
para('I understand that:'),
bullet('I may withdraw from the study at any time without giving reasons.'),
bullet('My medical care will not be affected if I withdraw.'),
bullet('My personal information will remain confidential.'),
bullet('My identity will not appear in any publications.'),
emptyLine(),
makeTable(
['', 'Patient', 'Witness', 'Principal Investigator'],
[
['Name', '', '', ''],
['Signature / Thumb impression', '', '', ''],
['Date', '', '', ''],
['Relationship (for witness)', '-', '', '-'],
],
[2000, 2000, 2500, 2500]
),
emptyLine(),
];
// ─── Assemble document ─────────────────────────────────────────────
const doc = new Document({
styles: {
default: {
document: {
run: { font: 'Calibri', size: 22 },
},
},
paragraphStyles: [
{
id: 'Heading1',
name: 'Heading 1',
basedOn: 'Normal',
next: 'Normal',
run: { font: 'Calibri', size: 28, bold: true, color: '1F4E79' },
paragraph: {
spacing: { before: 300, after: 120 },
border: { bottom: { style: BorderStyle.SINGLE, size: 4, color: '1F4E79', space: 4 } },
},
},
{
id: 'Heading2',
name: 'Heading 2',
basedOn: 'Normal',
next: 'Normal',
run: { font: 'Calibri', size: 24, bold: true, color: '2E75B6' },
paragraph: { spacing: { before: 200, after: 80 } },
},
{
id: 'Heading3',
name: 'Heading 3',
basedOn: 'Normal',
next: 'Normal',
run: { font: 'Calibri', size: 22, bold: true, color: '2E4057', italics: true },
paragraph: { spacing: { before: 160, after: 60 } },
},
],
},
sections: [
{
headers: {
default: new Header({
children: [
new Paragraph({
children: [
new TextRun({ text: 'Study Protocol: Intrathecal Dexmedetomidine vs Fentanyl in LSCS', size: 18, font: 'Calibri', color: '1F4E79', italics: true }),
],
alignment: AlignmentType.RIGHT,
border: { bottom: { style: BorderStyle.SINGLE, size: 2, color: '1F4E79', space: 4 } },
}),
],
}),
},
footers: {
default: new Footer({
children: [
new Paragraph({
children: [
new TextRun({ text: 'Department of Anaesthesiology | Confidential Research Document | Page ', size: 18, font: 'Calibri', color: '888888' }),
new TextRun({ children: [PageNumber.CURRENT], size: 18, font: 'Calibri', color: '888888' }),
new TextRun({ text: ' of ', size: 18, font: 'Calibri', color: '888888' }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 18, font: 'Calibri', color: '888888' }),
],
alignment: AlignmentType.CENTER,
border: { top: { style: BorderStyle.SINGLE, size: 2, color: '1F4E79', space: 4 } },
}),
],
}),
},
children: [
...titlePage,
...abbrevSection,
...backgroundSection,
...objectivesSection,
...methodologySection,
...nippingSection,
...dataFormSection,
...statsSection,
...ethicsSection,
...referencesSection,
...consentSection,
],
},
],
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync('/home/daytona/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_LSCS_Study_Protocol.docx', buffer);
console.log('Document created successfully!');
}).catch(err => {
console.error('Error:', err);
process.exit(1);
});
cd /home/daytona/workspace/dexmed-lscs-study && node create_study_doc.js 2>&1
python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_LSCS_Study_Protocol.docx 2>&1
# Validate by checking file exists and is a valid ZIP (docx = ZIP) ls -lh /home/daytona/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_LSCS_Study_Protocol.docx && python3 -c "import zipfile; z = zipfile.ZipFile('/home/daytona/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_LSCS_Study_Protocol.docx'); print('Valid ZIP/DOCX. Files inside:', z.namelist()[:8])"
Dexmed vs Fentanyl LSCS Study Protocol
Word Document · DOCX
| Section | Content |
|---|---|
| Title Page | Study title, PI/Co-PI fields, institution, date, IEC/CTRI number fields |
| List of Abbreviations | All short forms used in the study |
| 1. Introduction & Background | Literature review with all 4 recent meta-analyses cited |
| 2. Aims & Objectives | 2 primary + 9 secondary objectives |
| 3. Methodology | Study design, setting, inclusion/exclusion criteria, sample size calculation (n=70, 35/group), randomization, blinding, drug groups, standard anaesthetic protocol |
| 4. Nipping Test Protocol | Dermatomal reference table, step-by-step nipping method, block timing definitions, Bromage scale |
| 5. Case Record Form (CRF) | Patient ID, baseline vitals, block assessment table, intraoperative events, postoperative monitoring chart (0-24h), analgesic outcome, neonatal outcome, side effect tick sheet |
| 6. Statistical Analysis Plan | Test selection table (t-test, Mann-Whitney, Chi-square, ANOVA) |
| 7. Ethical Considerations | IEC approval, consent, safety protocol, GCP compliance |
| 8. References | All 6 key references (PMID numbers included) |
| Appendix A | Patient Information Sheet + Informed Consent Form in full |
How to make checklist for data collection
ls /home/daytona/workspace/dexmed-lscs-study/ && python3 -c "import openpyxl; print('openpyxl OK')"
mkdir -p /tmp/workspace/dexmed-lscs-study && python3 -c "import openpyxl; print('openpyxl OK')"
~/dexmed-lscs-study/make_checklist.py
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import (
PatternFill, Font, Alignment, Border, Side, GradientFill
)
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.datavalidation import DataValidation
wb = Workbook()
# ── Colour palette ──────────────────────────────────────────────────
DARK_BLUE = "1F4E79"
MED_BLUE = "2E75B6"
LIGHT_BLUE = "BDD7EE"
PALE_BLUE = "DEEAF1"
HEADER_TXT = "FFFFFF"
GREEN_FILL = "E2EFDA"
YELLOW_FILL = "FFF2CC"
RED_FILL = "FCE4D6"
GREY_FILL = "F2F2F2"
WHITE = "FFFFFF"
def hdr_font(sz=11, bold=True, color=HEADER_TXT):
return Font(name="Calibri", size=sz, bold=bold, color=color)
def cell_font(sz=10, bold=False, color="000000"):
return Font(name="Calibri", size=sz, bold=bold, color=color)
def fill(hex_col):
return PatternFill("solid", fgColor=hex_col)
def center_align(wrap=True):
return Alignment(horizontal="center", vertical="center", wrap_text=wrap)
def left_align(wrap=True):
return Alignment(horizontal="left", vertical="center", wrap_text=wrap)
def thin_border():
s = Side(border_style="thin", color="A6A6A6")
return Border(left=s, right=s, top=s, bottom=s)
def thick_border():
s = Side(border_style="medium", color=DARK_BLUE)
return Border(left=s, right=s, top=s, bottom=s)
def set_row(ws, row, col_start, values, bg, font_obj, align_fn=center_align, border_fn=thin_border):
for ci, val in enumerate(values, start=col_start):
c = ws.cell(row=row, column=ci, value=val)
c.fill = fill(bg)
c.font = font_obj
c.alignment = align_fn()
c.border = border_fn()
def section_header(ws, row, col_start, col_end, text, bg=DARK_BLUE):
ws.merge_cells(start_row=row, start_column=col_start,
end_row=row, end_column=col_end)
c = ws.cell(row=row, column=col_start, value=text)
c.fill = fill(bg)
c.font = Font(name="Calibri", size=12, bold=True, color=HEADER_TXT)
c.alignment = center_align()
c.border = thick_border()
# ════════════════════════════════════════════════════════════════════
# SHEET 1 – INSTRUCTIONS
# ════════════════════════════════════════════════════════════════════
ws_inst = wb.active
ws_inst.title = "INSTRUCTIONS"
ws_inst.sheet_view.showGridLines = False
ws_inst.column_dimensions["A"].width = 5
ws_inst.column_dimensions["B"].width = 60
ws_inst.column_dimensions["C"].width = 40
ws_inst.merge_cells("B2:C2")
c = ws_inst["B2"]
c.value = "DATA COLLECTION CHECKLIST — INSTRUCTIONS"
c.fill = fill(DARK_BLUE)
c.font = Font(name="Calibri", size=14, bold=True, color=HEADER_TXT)
c.alignment = center_align()
c.border = thick_border()
ws_inst.row_dimensions[2].height = 30
study_info = [
("Study Title:", "Intrathecal Dexmedetomidine vs Fentanyl in LSCS (Spinal Anaesthesia)"),
("Study Design:", "Prospective Double-Blind RCT"),
("Groups:", "Group D = Dexmedetomidine 5 mcg | Group F = Fentanyl 25 mcg"),
("Adjuvant:", "Both added to Hyperbaric Bupivacaine 0.5% 10 mg"),
]
for ri, (label, val) in enumerate(study_info, start=4):
ws_inst.cell(row=ri, column=2, value=label).font = Font(name="Calibri", size=10, bold=True)
ws_inst.cell(row=ri, column=3, value=val).font = Font(name="Calibri", size=10)
ws_inst.row_dimensions[ri].height = 18
instructions = [
("SHEET 2 – PATIENT MASTER", "Enter one row per patient. All demographic and basic data goes here."),
("SHEET 3 – BLOCK ASSESSMENT", "Record nipping test level + Bromage score + hemodynamics at every time point."),
("SHEET 4 – INTRAOP EVENTS", "Record any intraoperative events (hypotension, bradycardia, PONV, shivering etc.)"),
("SHEET 5 – POSTOP MONITORING","Record pain scores (NRS/VAS), sedation, shivering, pruritus every 2-4-6-12-24h."),
("SHEET 6 – OUTCOMES SUMMARY", "Auto-populated outcome summary per patient for final analysis export."),
("SHEET 7 – NEONATAL", "APGAR scores, birth weight, umbilical pH, NICU admission."),
]
ws_inst.cell(row=9, column=2, value="SHEET GUIDE").font = Font(name="Calibri", size=11, bold=True, color=DARK_BLUE)
ws_inst.cell(row=9, column=3, value="PURPOSE").font = Font(name="Calibri", size=11, bold=True, color=DARK_BLUE)
for ri, (sheet, purpose) in enumerate(instructions, start=10):
ws_inst.cell(row=ri, column=2, value=sheet).font = Font(name="Calibri", size=10, bold=True)
c = ws_inst.cell(row=ri, column=3, value=purpose)
c.font = Font(name="Calibri", size=10)
c.alignment = left_align()
ws_inst.row_dimensions[ri].height = 18
notes = [
"HOW TO USE THIS CHECKLIST",
"1. Open the correct sheet for the time point you are recording.",
"2. Each patient has a unique Study ID (e.g., D-01, F-01).",
"3. Fill ALL fields. Leave blank only if data genuinely not available — write 'NA'.",
"4. Nipping test: Record dermatomal level where nipping = DULL (e.g., T4, T6, T10).",
"5. Bromage scale: 0 = No block, 1 = Cannot raise leg, 2 = Cannot flex knee, 3 = Complete paralysis.",
"6. Hypotension = SBP <90 mmHg OR >20% fall from baseline.",
"7. Bradycardia = HR <50 bpm.",
"8. NRS/VAS: 0 = No pain, 10 = Worst imaginable pain.",
"9. Shivering: 0=None, 1=Mild (not visible), 2=Moderate (muscle groups), 3=Severe (whole body).",
"10. Pruritus: 0=None, 1=Mild, 2=Moderate, 3=Severe.",
"11. Ramsay Sedation: 1=Anxious, 2=Cooperative calm, 3=Follows commands, 4=Brisk response, 5=Sluggish, 6=No response.",
"12. First rescue analgesic request time = PRIMARY ENDPOINT. Record precisely in minutes.",
"13. Do NOT alter Study ID or Group columns — these are locked for blinded analysis.",
]
for ri, note in enumerate(notes, start=18):
c = ws_inst.cell(row=ri, column=2, value=note)
c.font = Font(name="Calibri", size=10, bold=(ri == 18), color=DARK_BLUE if ri == 18 else "000000")
c.fill = fill(PALE_BLUE if ri == 18 else (GREY_FILL if ri % 2 == 0 else WHITE))
ws_inst.merge_cells(start_row=ri, start_column=2, end_row=ri, end_column=3)
c.alignment = left_align()
ws_inst.row_dimensions[ri].height = 18
# ════════════════════════════════════════════════════════════════════
# SHEET 2 – PATIENT MASTER
# ════════════════════════════════════════════════════════════════════
ws2 = wb.create_sheet("PATIENT MASTER")
ws2.sheet_view.showGridLines = False
master_headers = [
"Study ID", "Group\n(D/F)", "Patient\nInitials", "Age\n(yrs)",
"IP No.", "Date of\nSurgery", "ASA\nGrade",
"Gravida", "Para", "Gest. Age\n(wks)",
"Height\n(cm)", "Weight\n(kg)", "BMI\n(kg/m²)",
"Type of LSCS\n(Elective/Emerg.)", "Indication\nfor LSCS",
"Spinal\nNeedle (G)", "Level\n(L2-3/L3-4)",
"Position\n(Sit/Lat)", "Time of\nInjection",
"Baseline\nHR (bpm)", "Baseline\nSBP (mmHg)",
"Baseline\nDBP (mmHg)", "Baseline\nMAP (mmHg)",
"Baseline\nSpO2 (%)", "Baseline\nTemp (°C)",
"IV Fluid\nPreloaded (mL)", "Any difficulty\nin spinal (Y/N)", "Remarks"
]
col_widths_m = [10,8,12,7,10,12,7,8,7,10,9,9,9,18,20,12,13,12,12,10,12,12,12,11,11,14,16,20]
section_header(ws2, 1, 1, len(master_headers), "SHEET 2 — PATIENT MASTER REGISTER")
set_row(ws2, 2, 1, master_headers, DARK_BLUE, hdr_font(10), center_align)
ws2.row_dimensions[1].height = 28
ws2.row_dimensions[2].height = 45
for ci, w in enumerate(col_widths_m, start=1):
ws2.column_dimensions[get_column_letter(ci)].width = w
# Sample data rows + empty rows
sample_pts = [
["D-01","D","AB","28","IP-001","12-Jul-26","I","G2","P1","39","158","62","24.8","Elective","Previous LSCS","25G Whitacre","L3-4","Sitting","09:15","78","118","76","90","99","36.6","500","No",""],
["F-01","F","CD","32","IP-002","12-Jul-26","II","G3","P2","40","160","70","27.3","Elective","CPD","25G Whitacre","L3-4","Sitting","10:30","80","122","80","94","99","36.5","500","No",""],
]
for ri, row in enumerate(sample_pts, start=3):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci, val in enumerate(row, start=1):
c = ws2.cell(row=ri, column=ci, value=val)
c.font = cell_font()
c.alignment = center_align()
c.border = thin_border()
c.fill = fill(bg)
for ri in range(5, 75):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, len(master_headers)+1):
c = ws2.cell(row=ri, column=ci, value="")
c.fill = fill(bg)
c.border = thin_border()
c.alignment = center_align()
ws2.freeze_panes = "C3"
# ════════════════════════════════════════════════════════════════════
# SHEET 3 – BLOCK ASSESSMENT (Nipping Test + Hemodynamics)
# ════════════════════════════════════════════════════════════════════
ws3 = wb.create_sheet("BLOCK ASSESSMENT")
ws3.sheet_view.showGridLines = False
time_points = [
"Baseline\n(T0)", "2 min", "5 min", "8 min", "10 min", "12 min",
"15 min", "20 min", "Skin\nIncision", "Baby\nOut",
"Uterine\nClosure", "End of\nSurgery"
]
# Row 1: Main header
section_header(ws3, 1, 1, 3 + len(time_points)*4 + 3,
"SHEET 3 — BLOCK ASSESSMENT (Nipping Test + Motor Block + Hemodynamics)")
ws3.row_dimensions[1].height = 28
# Row 2: Column group headers
ws3.cell(row=2, column=1, value="Study\nID")
ws3.cell(row=2, column=2, value="Group\n(D/F)")
ws3.cell(row=2, column=3, value="Time of\nSpinal (hh:mm)")
for ci in [1,2,3]:
c = ws3.cell(row=2, column=ci)
c.fill = fill(DARK_BLUE); c.font = hdr_font(9); c.alignment = center_align(); c.border = thin_border()
col = 4
for tp in time_points:
for sub in ["Sensory\n(Nipping)", "Bromage\n(0-3)", "HR\n(bpm)", "SBP\n(mmHg)"]:
c = ws3.cell(row=2, column=col, value=sub)
c.fill = fill(MED_BLUE); c.font = hdr_font(8); c.alignment = center_align(); c.border = thin_border()
col += 1
# Row 3: time point labels merged
col = 4
for tp in time_points:
ws3.merge_cells(start_row=3, start_column=col, end_row=3, end_column=col+3)
c = ws3.cell(row=3, column=col, value=tp)
c.fill = fill(LIGHT_BLUE); c.font = hdr_font(9, color=DARK_BLUE); c.alignment = center_align(); c.border = thin_border()
col += 4
# Extra columns after time points
extras = ["Max Sensory\nLevel", "Time to T4\n(min)", "Time to\n2-derm regress (min)"]
for i, ex in enumerate(extras):
c = ws3.cell(row=2, column=col+i, value=ex)
c.fill = fill(DARK_BLUE); c.font = hdr_font(9); c.alignment = center_align(); c.border = thin_border()
ws3.row_dimensions[2].height = 45
ws3.row_dimensions[3].height = 40
# Set column widths
ws3.column_dimensions["A"].width = 9
ws3.column_dimensions["B"].width = 8
ws3.column_dimensions["C"].width = 14
col = 4
for _ in time_points:
for sub_i in range(4):
ws3.column_dimensions[get_column_letter(col)].width = 8
col += 1
for i in range(3):
ws3.column_dimensions[get_column_letter(col+i)].width = 14
# Data rows
for ri in range(4, 74):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, 3 + len(time_points)*4 + 4):
c = ws3.cell(row=ri, column=ci, value="")
c.fill = fill(bg); c.border = thin_border(); c.alignment = center_align()
ws3.freeze_panes = "D4"
# ════════════════════════════════════════════════════════════════════
# SHEET 4 – INTRAOPERATIVE EVENTS
# ════════════════════════════════════════════════════════════════════
ws4 = wb.create_sheet("INTRAOP EVENTS")
ws4.sheet_view.showGridLines = False
section_header(ws4, 1, 1, 12, "SHEET 4 — INTRAOPERATIVE EVENTS & INTERVENTIONS")
ws4.row_dimensions[1].height = 28
intraop_hdrs = [
"Study ID", "Group\n(D/F)",
"Hypotension\n(Y/N)", "Episodes\n(n)", "Vasopressor\nUsed", "Total\nDose (mcg)",
"Bradycardia\n(Y/N)", "Atropine\n(Y/N)", "Atropine\nDose (mg)",
"Nausea\n(Y/N)", "Vomiting\n(Y/N)", "Ondansetron\n(Y/N)",
"Shivering\n(Grade 0-3)", "Pruritus\n(Grade 0-3)",
"Resp. Dep.\n(SpO2<94%)", "High Block\n(above T2)",
"Intraop Rescue\nAnalgesia (Y/N)", "Rescue Drug\n& Dose",
"Convert\nto GA (Y/N)", "Reason for\nConversion", "Remarks"
]
col_w4 = [9,8,11,9,12,10,11,9,11,9,9,12,13,12,12,12,14,15,12,18,20]
set_row(ws4, 2, 1, intraop_hdrs, DARK_BLUE, hdr_font(9), center_align)
ws4.row_dimensions[2].height = 50
for ci, w in enumerate(col_w4, start=1):
ws4.column_dimensions[get_column_letter(ci)].width = w
for ri in range(3, 73):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, len(intraop_hdrs)+1):
c = ws4.cell(row=ri, column=ci, value="")
c.fill = fill(bg); c.border = thin_border(); c.alignment = center_align()
# Data validation – Y/N dropdowns
dv_yn = DataValidation(type="list", formula1='"Y,N,NA"', allow_blank=True, showDropDown=False)
ws4.add_data_validation(dv_yn)
for col_i in [3,7,8,10,11,12,15,16,17,19]:
for ri in range(3, 73):
dv_yn.add(ws4.cell(row=ri, column=col_i))
ws4.freeze_panes = "C3"
# ════════════════════════════════════════════════════════════════════
# SHEET 5 – POSTOP MONITORING
# ════════════════════════════════════════════════════════════════════
ws5 = wb.create_sheet("POSTOP MONITORING")
ws5.sheet_view.showGridLines = False
postop_times = ["PACU\n0h", "30 min", "1h", "2h", "4h", "6h", "12h", "24h"]
postop_subs = ["NRS\n(0-10)", "Motor\n(Bromage)", "Shiver\n(0-3)", "Pruritus\n(0-3)", "PONV\n(Y/N)", "Sedation\n(Ramsay)"]
section_header(ws5, 1, 1, 2 + len(postop_times)*len(postop_subs) + 4,
"SHEET 5 — POSTOPERATIVE MONITORING (0 to 24 hours)")
ws5.row_dimensions[1].height = 28
ws5.cell(row=2, column=1, value="Study\nID"); ws5.cell(row=2, column=2, value="Group\n(D/F)")
for ci in [1,2]:
c = ws5.cell(row=2, column=ci)
c.fill = fill(DARK_BLUE); c.font = hdr_font(9); c.alignment = center_align(); c.border = thin_border()
col = 3
for tp in postop_times:
for sub in postop_subs:
c = ws5.cell(row=2, column=col, value=sub)
c.fill = fill(MED_BLUE); c.font = hdr_font(8); c.alignment = center_align(); c.border = thin_border()
col += 1
col = 3
for tp in postop_times:
ws5.merge_cells(start_row=3, start_column=col, end_row=3, end_column=col+len(postop_subs)-1)
c = ws5.cell(row=3, column=col, value=tp)
c.fill = fill(LIGHT_BLUE); c.font = hdr_font(9, color=DARK_BLUE); c.alignment = center_align(); c.border = thin_border()
col += len(postop_subs)
# Extra summary columns
extra_cols = ["Time to 1st\nRescue (min)", "Total Rescue\nAnalgesic (mg)", "Patient\nSatisfied (Y/N)", "Remarks"]
for i, ex in enumerate(extra_cols):
c = ws5.cell(row=2, column=col+i, value=ex)
c.fill = fill(DARK_BLUE); c.font = hdr_font(9); c.alignment = center_align(); c.border = thin_border()
ws5.row_dimensions[2].height = 45; ws5.row_dimensions[3].height = 40
ws5.column_dimensions["A"].width = 9; ws5.column_dimensions["B"].width = 8
col = 3
for _ in postop_times:
for _ in postop_subs:
ws5.column_dimensions[get_column_letter(col)].width = 8; col += 1
for i, w in enumerate([14,15,13,18]):
ws5.column_dimensions[get_column_letter(col+i)].width = w
for ri in range(4, 74):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, 2 + len(postop_times)*len(postop_subs) + 5):
c = ws5.cell(row=ri, column=ci, value="")
c.fill = fill(bg); c.border = thin_border(); c.alignment = center_align()
ws5.freeze_panes = "C4"
# ════════════════════════════════════════════════════════════════════
# SHEET 6 – OUTCOMES SUMMARY
# ════════════════════════════════════════════════════════════════════
ws6 = wb.create_sheet("OUTCOMES SUMMARY")
ws6.sheet_view.showGridLines = False
section_header(ws6, 1, 1, 20, "SHEET 6 — OUTCOMES SUMMARY (Per Patient — For Statistical Analysis)")
ws6.row_dimensions[1].height = 28
outcome_hdrs = [
"Study ID", "Group\n(D/F)",
"Onset to\nT10 (min)", "Time to\nT4 (min)",
"Max Sensory\nLevel", "Motor Block\nDuration (min)",
"Time to\n2-derm Regress (min)", "Duration of\nEffective Analgesia (min)",
"Time to 1st\nRescue Analgesic (min)", "NRS at\nRescue",
"Total Rescue\nDrug 24h (mg)",
"Hypotension\n(Y/N)", "Bradycardia\n(Y/N)",
"Pruritus\n(Max Grade)", "Shivering\n(Max Grade)",
"PONV\n(Y/N)", "Sedation\n(Max Ramsay)",
"APGAR\n1 min", "APGAR\n5 min", "Remarks"
]
col_w6 = [9,8,10,10,12,14,16,16,16,10,14,11,11,12,12,10,14,10,10,18]
set_row(ws6, 2, 1, outcome_hdrs, DARK_BLUE, hdr_font(9), center_align)
ws6.row_dimensions[2].height = 55
for ci, w in enumerate(col_w6, start=1):
ws6.column_dimensions[get_column_letter(ci)].width = w
for ri in range(3, 73):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, len(outcome_hdrs)+1):
c = ws6.cell(row=ri, column=ci, value="")
c.fill = fill(bg); c.border = thin_border(); c.alignment = center_align()
# Summary rows at bottom
for ri in range(73, 77):
labels = {73: "GROUP D — Mean/Median", 74: "GROUP D — SD/IQR",
75: "GROUP F — Mean/Median", 76: "GROUP F — SD/IQR"}
ws6.merge_cells(start_row=ri, start_column=1, end_row=ri, end_column=2)
c = ws6.cell(row=ri, column=1, value=labels[ri])
c.fill = fill(YELLOW_FILL if ri < 75 else GREEN_FILL)
c.font = Font(name="Calibri", size=10, bold=True)
c.alignment = center_align()
for ci in range(3, len(outcome_hdrs)+1):
cc = ws6.cell(row=ri, column=ci, value="")
cc.fill = fill(YELLOW_FILL if ri < 75 else GREEN_FILL)
cc.border = thin_border()
ws6.freeze_panes = "C3"
# ════════════════════════════════════════════════════════════════════
# SHEET 7 – NEONATAL OUTCOMES
# ════════════════════════════════════════════════════════════════════
ws7 = wb.create_sheet("NEONATAL OUTCOMES")
ws7.sheet_view.showGridLines = False
section_header(ws7, 1, 1, 12, "SHEET 7 — NEONATAL OUTCOMES")
ws7.row_dimensions[1].height = 28
neo_hdrs = [
"Study ID", "Group\n(D/F)",
"Baby\nWeight (kg)", "APGAR\n1 min (0-10)", "APGAR\n5 min (0-10)",
"Umbilical\nArtery pH", "Need for\nNICU (Y/N)", "NICU\nReason",
"Neonatal\nResuscitation (Y/N)", "Details if\nResuscitation Done",
"Paediatrician\nSign", "Remarks"
]
col_w7 = [9,8,12,14,14,13,12,20,16,22,14,18]
set_row(ws7, 2, 1, neo_hdrs, DARK_BLUE, hdr_font(9), center_align)
ws7.row_dimensions[2].height = 45
for ci, w in enumerate(col_w7, start=1):
ws7.column_dimensions[get_column_letter(ci)].width = w
for ri in range(3, 73):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci in range(1, len(neo_hdrs)+1):
c = ws7.cell(row=ri, column=ci, value="")
c.fill = fill(bg); c.border = thin_border(); c.alignment = center_align()
ws7.freeze_panes = "C3"
# ════════════════════════════════════════════════════════════════════
# SHEET 8 – NIPPING TEST QUICK REFERENCE
# ════════════════════════════════════════════════════════════════════
ws8 = wb.create_sheet("NIPPING TEST REFERENCE")
ws8.sheet_view.showGridLines = False
ws8.column_dimensions["A"].width = 5
ws8.column_dimensions["B"].width = 16
ws8.column_dimensions["C"].width = 32
ws8.column_dimensions["D"].width = 30
ws8.column_dimensions["E"].width = 30
section_header(ws8, 1, 2, 5, "NIPPING / PINCHING TEST — QUICK REFERENCE CARD")
ws8.row_dimensions[1].height = 28
# Dermatomal table
derm_hdrs = ["Level", "Anatomical Landmark", "Clinical Meaning"]
set_row(ws8, 2, 2, derm_hdrs, DARK_BLUE, hdr_font(10), center_align)
ws8.row_dimensions[2].height = 25
derm_rows = [
("T4", "Nipple line (4th ICS)", "★ MINIMUM REQUIRED for LSCS — check before incision"),
("T5", "Just below nipple", "Adequate level with safety margin"),
("T6", "Xiphoid process", "Good level for uterine manipulation"),
("T8", "Costal margin", "Lower uterine incision adequate"),
("T10", "Umbilicus", "Adequate for skin incision; NOT enough for whole LSCS"),
("T12", "Inguinal ligament", "Lower abdominal sensation"),
("L1", "Groin", "Groin/inguinal region"),
("L2", "Mid anterior thigh", "Thigh sensation present"),
("L3", "Knee", "Knee sensation present"),
("S1", "Lateral foot / little toe", "Last level to recover — marks end of block"),
]
for ri, (level, landmark, meaning) in enumerate(derm_rows, start=3):
bg = RED_FILL if level == "T4" else (PALE_BLUE if ri % 2 == 0 else WHITE)
bold = level == "T4"
for ci, val in enumerate([level, landmark, meaning], start=2):
c = ws8.cell(row=ri, column=ci, value=val)
c.fill = fill(bg)
c.font = Font(name="Calibri", size=10, bold=bold)
c.alignment = left_align()
c.border = thin_border()
ws8.row_dimensions[ri].height = 18
# Bromage scale on same sheet
ws8.cell(row=14, column=2, value="BROMAGE SCALE — MOTOR BLOCK")
ws8.cell(row=14, column=2).font = Font(name="Calibri", size=11, bold=True, color=DARK_BLUE)
ws8.merge_cells("B14:E14")
brom_hdrs = ["Grade", "Description", "Motor Block Status"]
set_row(ws8, 15, 2, brom_hdrs, DARK_BLUE, hdr_font(10), center_align)
bromage_rows = [
("0", "Full movement — raises leg, flexes knee and foot", "NO motor block"),
("1", "Cannot raise extended leg; can flex knee", "Partial motor block"),
("2", "Cannot flex knee; can move ankle/foot only", "Almost complete motor block"),
("3", "Complete paralysis of leg and foot", "COMPLETE motor block"),
]
for ri, row in enumerate(bromage_rows, start=16):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
for ci, val in enumerate(row, start=2):
c = ws8.cell(row=ri, column=ci, value=val)
c.fill = fill(bg); c.font = cell_font(10); c.alignment = left_align(); c.border = thin_border()
ws8.row_dimensions[ri].height = 20
# Scoring scales
ws8.cell(row=21, column=2, value="QUICK SCORING SCALES").font = Font(name="Calibri", size=11, bold=True, color=DARK_BLUE)
ws8.merge_cells("B21:E21")
scales = [
("NRS/VAS Pain:", "0 = No pain | 1-3 = Mild | 4-6 = Moderate | 7-10 = Severe"),
("Shivering:", "0=None | 1=Mild/not visible | 2=Moderate (muscle groups) | 3=Severe (whole body)"),
("Pruritus:", "0=None | 1=Mild | 2=Moderate | 3=Severe/unbearable"),
("Ramsay Sedation:", "1=Anxious | 2=Calm/cooperative | 3=Follows commands | 4=Brisk response | 5=Sluggish | 6=No response"),
("APGAR:", "0-3=Severe depression | 4-6=Moderate | 7-10=Normal"),
]
for ri, (label, desc) in enumerate(scales, start=22):
bg = PALE_BLUE if ri % 2 == 0 else WHITE
c = ws8.cell(row=ri, column=2, value=label)
c.fill = fill(bg); c.font = Font(name="Calibri", size=10, bold=True); c.alignment = left_align(); c.border = thin_border()
ws8.merge_cells(start_row=ri, start_column=3, end_row=ri, end_column=5)
cc = ws8.cell(row=ri, column=3, value=desc)
cc.fill = fill(bg); cc.font = cell_font(10); cc.alignment = left_align(); cc.border = thin_border()
ws8.row_dimensions[ri].height = 20
# ════════════════════════════════════════════════════════════════════
# Set tab colours
# ════════════════════════════════════════════════════════════════════
tab_colors = {
"INSTRUCTIONS": "1F4E79",
"PATIENT MASTER": "2E75B6",
"BLOCK ASSESSMENT": "00B050",
"INTRAOP EVENTS": "FF0000",
"POSTOP MONITORING": "FFC000",
"OUTCOMES SUMMARY": "7030A0",
"NEONATAL OUTCOMES": "00B0F0",
"NIPPING TEST REFERENCE":"ED7D31",
}
for ws in wb.worksheets:
if ws.title in tab_colors:
ws.sheet_properties.tabColor = tab_colors[ws.title]
# Save
out = "/tmp/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_DataCollection_Checklist.xlsx"
wb.save(out)
print(f"Saved: {out}")
cd /tmp/workspace/dexmed-lscs-study && python3 make_checklist.py 2>&1
python3 -c " import openpyxl wb = openpyxl.load_workbook('/tmp/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_DataCollection_Checklist.xlsx') print('Sheets:', wb.sheetnames) print('File size:', __import__('os').path.getsize('/tmp/workspace/dexmed-lscs-study/Dexmed_vs_Fentanyl_DataCollection_Checklist.xlsx'), 'bytes') "
Dexmed vs Fentanyl DataCollection Checklist
Spreadsheet · XLSX
| Tab Colour | Sheet | What you fill here |
|---|---|---|
| 🔵 Dark Blue | INSTRUCTIONS | How to use guide + study overview |
| 🔵 Blue | PATIENT MASTER | Demographics, baseline vitals, spinal details - one row per patient |
| 🟢 Green | BLOCK ASSESSMENT | Nipping test level + Bromage scale + HR + SBP at every time point (2, 5, 8, 10, 12, 15, 20 min, incision, baby out, end) |
| 🔴 Red | INTRAOP EVENTS | Hypotension, bradycardia, shivering, PONV, pruritus, rescue drugs, conversion to GA |
| 🟡 Yellow | POSTOP MONITORING | NRS pain + shivering + pruritus + sedation at 30min, 1h, 2h, 4h, 6h, 12h, 24h |
| 🟣 Purple | OUTCOMES SUMMARY | One row per patient - all primary & secondary endpoints ready for SPSS export |
| 🔵 Light Blue | NEONATAL OUTCOMES | APGAR 1 & 5 min, birth weight, umbilical pH, NICU |
| 🟠 Orange | NIPPING TEST Reference | Dermatomal chart, Bromage scale, all scoring scales - keep open while examining patient |
Study IDs: Group D patients = D-01, D-02... | Group F patients = F-01, F-02... (70 rows pre-formatted for 35 per group)