How to manage a patient in immediate post op after Hysteroscopic myomectomy

Reading File
Finding Sources
Finding Sources
Searching PubMed

hysteroscopic myomectomy postoperative management complications

Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
Reading File
Finding Sources
Reading File
I now have comprehensive information from multiple authoritative sources. Here is the full structured answer:

Immediate Post-Op Management After Hysteroscopic Myomectomy

Hysteroscopic myomectomy is typically a day-case procedure, but the immediate recovery period requires vigilant monitoring for several procedure-specific complications alongside routine post-anaesthetic care.

1. Recovery Room Monitoring (PACU)

Standard vital signs:
  • Continuous pulse oximetry, heart rate, BP every 15 minutes for at least 1 hour
  • Temperature monitoring (early fever within 24 hours is usually non-infectious - atelectasis, tissue trauma, haematoma)
  • Respiratory rate and oxygen saturation - watch for pulmonary oedema from fluid overload
Urine output:
  • Catheterise if not already done, or confirm voiding
  • Monitor hourly urine output - oliguria may signal fluid shifts or haemodynamic compromise

2. Fluid Balance and Distension Media Monitoring (Highest Priority)

This is the most critical and unique post-operative concern for hysteroscopic procedures.
Intra-operative thresholds carried into immediate post-op:
Fluid DeficitAction
750 mLWarning sign - anaesthetist alerted
1,000-1,500 mL (hypotonic media: glycine, sorbitol)Terminate procedure; check electrolytes
2,500 mL (isotonic/saline with bipolar)Terminate; cardiac overload risk
Post-op actions based on total deficit:
  • Document the intra-operative fluid deficit in the handover
  • Check serum electrolytes (Na+, K+), glucose, and haematocrit in recovery if deficit exceeded 1,000 mL of non-electrolyte solution or 1,500 mL of saline
  • Obtain an ECG if hyponatraemia or cardiovascular symptoms are present
- Berek & Novak's Gynecology, p. 533 - Schwartz's Principles of Surgery, 11th ed., p. 1824

3. Recognition and Management of Distension Media Absorption Syndrome (TUR/TURP-like Syndrome)

Absorption of hypotonic distension media (glycine 1.5%, sorbitol 3%, sorbitol-mannitol) causes dilutional hyponatraemia and hypervolaemia - analogous to TURP syndrome. This can occur as late as several hours after the procedure ends.
Signs and symptoms to watch for:
  • Confusion, agitation, restlessness, headache
  • Nausea and vomiting
  • Hypertension followed by hypotension
  • Bradycardia, ECG changes
  • Pulmonary oedema (dyspnoea, crepitations)
  • Cerebral oedema (seizures, coma)
Management by severity:
Serum Na+Clinical StateTreatment
>120 mEq/L, mild symptomsFluid restriction + IV furosemide (loop diuretic)Watch and reassess
<120 mEq/L, severe symptomsIV hypertonic saline (3% NaCl) carefullyICU-level monitoring; avoid rapid correction (central pontine myelinolysis risk)
Cardiovascular collapseSupportive: O2, vasopressors, ventilation as neededCritical care
Note: If bipolar instruments with normal saline were used, hyponatraemia is avoided but hypervolaemia alone can still cause cardiac overload at deficits >1,500 mL.
- Miller's Anesthesia, 10th ed., pp. 8477-8478

4. Haemorrhage Monitoring

  • Assess vaginal bleeding - light spotting/discharge is normal
  • Heavy bleeding with clots, tachycardia, hypotension - suspect uterine perforation or inadequate haemostasis
  • Check haematocrit if bleeding appears significant
  • Have IV access with at least 1 large-bore cannula

5. Uterine Perforation - Post-op Surveillance

Perforation risk is highest with G2 fibroids (deep intramural extension). The first sign intra-operatively is a rapid increase in fluid deficit.
Post-op red flags suggesting perforation:
  • Disproportionate abdominal pain, especially if increasing
  • Peritoneal signs (guarding, rigidity)
  • Haemodynamic instability despite adequate fluid replacement
  • Fever with tachycardia in the first few hours
Management:
  • If perforation without electrode activation was identified intra-operatively and no bowel/bladder injury was found: observe and discharge if stable
  • If electrode was active at time of perforation, or if bowel/bladder injury is suspected: proceed to laparoscopy/laparotomy to inspect for visceral injury
- Berek & Novak's Gynecology, p. 533

6. Pain Management

  • Hysteroscopic myomectomy causes uterine cramping-type pain post-op (from uterine contractions helping expel fibroid fragments)
  • First-line: NSAIDs (e.g., ibuprofen, mefenamic acid) - also reduce uterine bleeding
  • Second-line: paracetamol ± weak opioids (e.g., tramadol) if NSAIDs contraindicated
  • Severe or colicky pain may represent uterine distension from haematometra - consider ultrasound if suspected

7. Antiemetics and Nausea

  • Nausea is common from general anaesthesia and from fluid shifts
  • Ondansetron 4 mg IV is first-line
  • Rule out hyponatraemia as a cause of persistent nausea or vomiting

8. Infection Prevention

  • Routine prophylactic antibiotics are typically given pre-operatively (single-dose cefazolin or co-amoxiclav)
  • Post-op antibiotics are not routinely required for uncomplicated cases
  • Early fever (<24 hours post-op) is usually non-infectious (tissue trauma, haematoma, atelectasis)
  • Fever after day 3-5 may indicate UTI; after day 4-6, consider VTE; after day 7+, consider surgical site infection

9. VTE Prophylaxis

  • Hysteroscopic myomectomy is a minimally invasive procedure with low VTE risk
  • Early mobilisation is the key intervention - encourage ambulation within 2-4 hours of recovery
  • Compression stockings (TED) in recovery
  • LMWH (e.g., enoxaparin) based on individual risk stratification (prolonged procedure, obesity, malignancy history)

10. Discharge Criteria (Day-Case)

The patient may be discharged when:
  • Haemodynamically stable with no active bleeding
  • Pain controlled on oral analgesia
  • Voiding spontaneously
  • Tolerating oral fluids
  • Serum electrolytes checked and within acceptable limits (if applicable)
  • No signs of peritonism or systemic infection
  • Responsible adult at home; written discharge instructions given
Discharge instructions to include:
  • Expect light vaginal bleeding/spotting for 1-2 weeks
  • Pelvic rest for 2 weeks (no intercourse, no tampons)
  • Return to ED if: heavy bleeding (soaking >1 pad/hour), severe abdominal pain, fever >38°C, dizziness/syncope
  • Follow-up in 4-6 weeks (or earlier for G2 fibroid cases requiring repeat resection)

Summary Checklist

PriorityAction
1Document intra-op fluid deficit at handover
2Monitor vitals and O2 saturation closely x1 hour
3Check electrolytes if deficit >1,000 mL
4Manage pain with NSAIDs + paracetamol
5Watch for signs of perforation, bleeding, or fluid absorption
6Early mobilisation; VTE prophylaxis
7Discharge only when stable, eating, voiding

Sources:
  • Berek & Novak's Gynecology, Procedure-Specific Risks / Fluid Absorption and Electrolyte Imbalance sections, pp. 532-533
  • Schwartz's Principles of Surgery, 11th ed., Operative Hysteroscopy, p. 1824
  • Miller's Anesthesia, 10th ed., Treatment of TURP Syndrome, pp. 8477-8478
  • Tintinalli's Emergency Medicine, Postoperative Gynecologic Complications, p. 3145

Create a post-op observation checklist template for hysteroscopic procedures

Asking for Preferences
Reading File
Running Command

ls /home/daytona/workspace/ && ls /home/daytona/skills/docx/scripts/office/ 2>/d…

Running Command

mkdir -p /home/daytona/workspace/hysteroscopy-checklist && ls /home/daytona/work…

Writing File

~/hysteroscopy-checklist/generate.js

const {
  Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
  AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
  VerticalAlign, PageOrientation, PageNumber, Footer, Header,
  UnderlineType
} = require('docx');
const fs = require('fs');

// ── Colour palette ──────────────────────────────────────────────────────────
const DARK_BLUE   = "1F3864";
const MID_BLUE    = "2E5FAC";
const LIGHT_BLUE  = "D6E4F0";
const LIGHT_GREY  = "F2F2F2";
const MEDIUM_GREY = "D9D9D9";
const WHITE       = "FFFFFF";
const RED_ALERT   = "C00000";

// ── Helpers ─────────────────────────────────────────────────────────────────
function noBorder() {
  return { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
}
function thinBorder() {
  return { style: BorderStyle.SINGLE, size: 4, color: "CCCCCC" };
}
function thickTopBorder() {
  return { style: BorderStyle.SINGLE, size: 12, color: MID_BLUE };
}

function shadedCell(text, shade, textColor = "000000", bold = false, colSpan = 1, width = null) {
  const cellOpts = {
    shading: { fill: shade, type: ShadingType.CLEAR, color: shade },
    borders: { top: thinBorder(), bottom: thinBorder(), left: thinBorder(), right: thinBorder() },
    verticalAlign: VerticalAlign.CENTER,
    margins: { top: 80, bottom: 80, left: 120, right: 120 },
  };
  if (colSpan > 1) cellOpts.columnSpan = colSpan;
  if (width) cellOpts.width = { size: width, type: WidthType.DXA };
  return new TableCell({
    ...cellOpts,
    children: [new Paragraph({
      alignment: AlignmentType.LEFT,
      children: [new TextRun({ text, bold, color: textColor, size: 20, font: "Calibri" })]
    })]
  });
}

function headerCell(text, shade = MID_BLUE, colSpan = 1, width = null) {
  return shadedCell(text, shade, WHITE, true, colSpan, width);
}

function dataCell(text, shade = WHITE, bold = false, colSpan = 1, width = null) {
  return shadedCell(text, shade, "000000", bold, colSpan, width);
}

function checkCell(shade = WHITE, width = 600) {
  return new TableCell({
    shading: { fill: shade, type: ShadingType.CLEAR, color: shade },
    borders: { top: thinBorder(), bottom: thinBorder(), left: thinBorder(), right: thinBorder() },
    verticalAlign: VerticalAlign.CENTER,
    margins: { top: 80, bottom: 80, left: 120, right: 120 },
    width: { size: width, type: WidthType.DXA },
    children: [new Paragraph({
      alignment: AlignmentType.CENTER,
      children: [new TextRun({ text: "☐", size: 22, font: "Calibri" })]
    })]
  });
}

function spacerRow(cols, shade = WHITE) {
  return new TableRow({
    children: Array(cols).fill(0).map(() => new TableCell({
      shading: { fill: shade, type: ShadingType.CLEAR, color: shade },
      borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
      margins: { top: 40, bottom: 40, left: 80, right: 80 },
      children: [new Paragraph({ children: [new TextRun({ text: "" })] })]
    }))
  });
}

function sectionHeaderRow(text, cols, shade = DARK_BLUE) {
  return new TableRow({
    children: [new TableCell({
      columnSpan: cols,
      shading: { fill: shade, type: ShadingType.CLEAR, color: shade },
      borders: { top: thinBorder(), bottom: thinBorder(), left: thinBorder(), right: thinBorder() },
      margins: { top: 100, bottom: 100, left: 160, right: 160 },
      children: [new Paragraph({
        alignment: AlignmentType.LEFT,
        children: [new TextRun({ text: text.toUpperCase(), bold: true, color: WHITE, size: 22, font: "Calibri" })]
      })]
    })]
  });
}

function itemRow(label, shade = WHITE, colWidths = [3800, 600, 600, 600, 600, 3000]) {
  // label | 15min | 30min | 45min | 60min | notes
  return new TableRow({
    children: [
      dataCell(label, shade, false, 1, colWidths[0]),
      checkCell(shade, colWidths[1]),
      checkCell(shade, colWidths[2]),
      checkCell(shade, colWidths[3]),
      checkCell(shade, colWidths[4]),
      dataCell("", shade, false, 1, colWidths[5]),
    ]
  });
}

function physItemRow(label, shade = WHITE, colWidths = [4400, 600, 4200]) {
  // label | checkbox | notes
  return new TableRow({
    children: [
      dataCell(label, shade, false, 1, colWidths[0]),
      checkCell(shade, colWidths[1]),
      dataCell("", shade, false, 1, colWidths[2]),
    ]
  });
}

function alertRow(text, cols, shade = "FFF2CC") {
  return new TableRow({
    children: [new TableCell({
      columnSpan: cols,
      shading: { fill: shade, type: ShadingType.CLEAR, color: shade },
      borders: { top: thinBorder(), bottom: thinBorder(), left: thinBorder(), right: thinBorder() },
      margins: { top: 80, bottom: 80, left: 160, right: 160 },
      children: [new Paragraph({
        alignment: AlignmentType.LEFT,
        children: [
          new TextRun({ text: "⚠  ACTION THRESHOLD: ", bold: true, color: RED_ALERT, size: 19, font: "Calibri" }),
          new TextRun({ text, bold: false, color: "000000", size: 19, font: "Calibri" })
        ]
      })]
    })]
  });
}

// ── Document ────────────────────────────────────────────────────────────────
const doc = new Document({
  creator: "Orris Clinical Tools",
  title: "Post-Op Observation Checklist – Hysteroscopic Procedures",
  description: "Nursing + Physician combined post-operative checklist for hysteroscopic procedures",
  sections: [{
    properties: {
      page: {
        margin: { top: 720, bottom: 720, left: 900, right: 900 },
      }
    },
    headers: {
      default: new Header({
        children: [
          new Table({
            width: { size: 100, type: WidthType.PERCENTAGE },
            borders: { top: noBorder(), bottom: { style: BorderStyle.SINGLE, size: 8, color: MID_BLUE }, left: noBorder(), right: noBorder(), insideH: noBorder(), insideV: noBorder() },
            rows: [new TableRow({
              children: [
                new TableCell({
                  borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
                  children: [new Paragraph({
                    children: [new TextRun({ text: "POST-OPERATIVE OBSERVATION CHECKLIST — HYSTEROSCOPIC PROCEDURES", bold: true, color: DARK_BLUE, size: 20, font: "Calibri" })]
                  })]
                }),
                new TableCell({
                  borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
                  children: [new Paragraph({
                    alignment: AlignmentType.RIGHT,
                    children: [new TextRun({ text: "Page ", size: 18, font: "Calibri", color: "666666" }), new PageNumber()]
                  })]
                }),
              ]
            })]
          })
        ]
      })
    },
    footers: {
      default: new Footer({
        children: [new Paragraph({
          alignment: AlignmentType.CENTER,
          children: [new TextRun({ text: "CONFIDENTIAL — FOR CLINICAL USE ONLY  |  Review annually or per institutional policy  |  Version 1.0 — May 2026", size: 16, color: "888888", font: "Calibri" })]
        })]
      })
    },
    children: [

      // ══ TITLE BLOCK ══════════════════════════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({
            children: [new TableCell({
              shading: { fill: DARK_BLUE, type: ShadingType.CLEAR, color: DARK_BLUE },
              borders: { top: noBorder(), bottom: noBorder(), left: noBorder(), right: noBorder() },
              margins: { top: 200, bottom: 140, left: 240, right: 240 },
              children: [
                new Paragraph({
                  alignment: AlignmentType.CENTER,
                  children: [new TextRun({ text: "POST-OPERATIVE OBSERVATION CHECKLIST", bold: true, color: WHITE, size: 32, font: "Calibri" })]
                }),
                new Paragraph({
                  alignment: AlignmentType.CENTER,
                  children: [new TextRun({ text: "Hysteroscopic Procedures", bold: false, color: "BDD7EE", size: 24, font: "Calibri" })]
                }),
              ]
            })]
          })
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 120 } }),

      // ══ PATIENT DETAILS ══════════════════════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({
            children: [
              headerCell("PATIENT DETAILS", MID_BLUE, 4),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Patient Name:", LIGHT_GREY, true, 1, 1800),
              dataCell("", WHITE, false, 1, 2400),
              dataCell("DOB:", LIGHT_GREY, true, 1, 900),
              dataCell("", WHITE, false, 1, 1400),
            ]
          }),
          new TableRow({
            children: [
              dataCell("MRN / Hospital No.:", LIGHT_GREY, true, 1, 1800),
              dataCell("", WHITE, false, 1, 2400),
              dataCell("Ward / Bay:", LIGHT_GREY, true, 1, 900),
              dataCell("", WHITE, false, 1, 1400),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Procedure Performed:", LIGHT_GREY, true, 1, 1800),
              dataCell("", WHITE, false, 1, 2400),
              dataCell("Date of Procedure:", LIGHT_GREY, true, 1, 900),
              dataCell("", WHITE, false, 1, 1400),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Surgeon:", LIGHT_GREY, true, 1, 1800),
              dataCell("", WHITE, false, 1, 2400),
              dataCell("Anaesthesia Type:", LIGHT_GREY, true, 1, 900),
              dataCell("", WHITE, false, 1, 1400),
            ]
          }),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 120 } }),

      // ══ INTRA-OP HANDOVER ════════════════════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({ children: [headerCell("INTRA-OPERATIVE HANDOVER DATA (to be completed by scrub/circulating nurse)", MID_BLUE, 4)] }),
          new TableRow({
            children: [
              dataCell("Distension Medium Used:", LIGHT_GREY, true, 1, 2200),
              dataCell("☐ Normal Saline (bipolar)   ☐ Glycine 1.5%   ☐ Sorbitol 3%   ☐ Sorbitol-Mannitol   ☐ Other: ________", WHITE, false, 3, 6300),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Total Fluid In (mL):", LIGHT_GREY, true, 1, 2200),
              dataCell("", WHITE, false, 1, 1800),
              dataCell("Total Fluid Out (mL):", LIGHT_GREY, true, 1, 2200),
              dataCell("", WHITE, false, 1, 2300),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Fluid Deficit (mL):", LIGHT_GREY, true, 1, 2200),
              dataCell("", WHITE, false, 1, 1800),
              dataCell("Operative Duration (min):", LIGHT_GREY, true, 1, 2200),
              dataCell("", WHITE, false, 1, 2300),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Intra-op Complications:", LIGHT_GREY, true, 1, 2200),
              dataCell("☐ None   ☐ Perforation (no electrode)   ☐ Perforation (electrode active)   ☐ Heavy bleeding   ☐ Other: ________", WHITE, false, 3, 6300),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Specimen Sent:", LIGHT_GREY, true, 1, 2200),
              dataCell("☐ Yes — Histology   ☐ Yes — MC&S   ☐ No", WHITE, false, 3, 6300),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Pre-op Antibiotics Given:", LIGHT_GREY, true, 1, 2200),
              dataCell("☐ Yes (Agent: ________________)   ☐ No   ☐ Deferred", WHITE, false, 3, 6300),
            ]
          }),
          alertRow("Fluid deficit ≥750 mL = warning; ≥1000 mL (hypotonic media) or ≥1500 mL (saline) = check electrolytes NOW; ≥2500 mL (saline) = cardiac overload risk.", 4),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 120 } }),

      // ══ SECTION A — NURSING OBSERVATIONS ════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          // Column header
          new TableRow({
            children: [
              headerCell("SECTION A — NURSING TIME-BASED OBSERVATIONS", DARK_BLUE, 1, 3800),
              headerCell("15 min", MID_BLUE, 1, 600),
              headerCell("30 min", MID_BLUE, 1, 600),
              headerCell("45 min", MID_BLUE, 1, 600),
              headerCell("60 min", MID_BLUE, 1, 600),
              headerCell("Notes / Values", MID_BLUE, 1, 3000),
            ]
          }),

          sectionHeaderRow("A1. Vital Signs", 6, "2E5FAC"),
          itemRow("Blood Pressure (mmHg) — record value in Notes", LIGHT_GREY),
          itemRow("Heart Rate (bpm) — record value in Notes", WHITE),
          itemRow("SpO₂ (%) — record value in Notes", LIGHT_GREY),
          itemRow("Respiratory Rate (breaths/min)", WHITE),
          itemRow("Temperature (°C)", LIGHT_GREY),
          itemRow("Pain Score (NRS 0–10)", WHITE),
          itemRow("Level of Consciousness (AVPU / GCS)", LIGHT_GREY),
          alertRow("BP <90/60 or >160/100; HR <50 or >110; SpO₂ <94%; RR <10 or >20; Pain ≥7 — escalate immediately.", 6),

          sectionHeaderRow("A2. Fluid Balance", 6, "2E5FAC"),
          itemRow("IV Fluid infusing — type and rate documented", LIGHT_GREY),
          itemRow("Urinary catheter in situ / voiding confirmed (tick when done)", WHITE),
          itemRow("Urine output measured (mL/hr) — record in Notes", LIGHT_GREY),
          itemRow("Nausea / vomiting present (Y/N)", WHITE),
          itemRow("Oral intake tolerated (sips → fluids → light diet)", LIGHT_GREY),
          alertRow("Urine output <0.5 mL/kg/hr for 2 consecutive hours — notify physician.", 6),

          sectionHeaderRow("A3. Vaginal Bleeding Assessment", 6, "2E5FAC"),
          itemRow("Pad check performed — document saturation level", LIGHT_GREY),
          itemRow("Colour of loss: Pink / Red / Dark — document in Notes", WHITE),
          itemRow("Clots noted (Y/N; describe size if Yes)", LIGHT_GREY),
          alertRow("Soaking >1 pad per 30 min, or clots larger than 50p coin — notify surgeon.", 6),

          sectionHeaderRow("A4. Neurological & Fluid Toxicity Screen", 6, "2E5FAC"),
          itemRow("Patient alert and oriented (Y/N)", LIGHT_GREY),
          itemRow("Headache reported (Y/N)", WHITE),
          itemRow("Nausea / vomiting (Y/N)", LIGHT_GREY),
          itemRow("Visual disturbance / blurring (Y/N)", WHITE),
          itemRow("Agitation / confusion (Y/N)", LIGHT_GREY),
          itemRow("Periorbital or peripheral oedema noted (Y/N)", WHITE),
          itemRow("Respiratory distress / crepitations (Y/N)", LIGHT_GREY),
          alertRow("Any neurological symptom (confusion, headache, visual change) PLUS fluid deficit ≥750 mL = suspect hypo-osmolar absorption syndrome. Check serum Na⁺ urgently.", 6),

          sectionHeaderRow("A5. Wound & Perineum", 6, "2E5FAC"),
          itemRow("Cervical / vaginal trauma noted on speculum (Y/N)", LIGHT_GREY),
          itemRow("Suprapubic or lower abdominal distension (Y/N)", WHITE),
          itemRow("Peritonism signs: guarding / rigidity (Y/N)", LIGHT_GREY),
          alertRow("Disproportionate abdominal pain + peritonism = suspect uterine perforation with visceral injury. Urgent surgical review.", 6),

          sectionHeaderRow("A6. Medications Administered in Recovery", 6, "2E5FAC"),
          itemRow("Analgesia given — agent, dose, time (record in Notes)", LIGHT_GREY),
          itemRow("Antiemetic given — agent, dose, time (record in Notes)", WHITE),
          itemRow("IV Fluids administered — type and volume (record in Notes)", LIGHT_GREY),
          itemRow("Diuretic given (furosemide) — Y/N, dose (record in Notes)", WHITE),

          sectionHeaderRow("A7. Nursing Discharge Readiness (tick all before discharge)", 6, "2E5FAC"),
          itemRow("Vitals stable ×2 consecutive readings", LIGHT_GREY),
          itemRow("Pain controlled on oral analgesia", WHITE),
          itemRow("Tolerating oral fluids", LIGHT_GREY),
          itemRow("Voiding spontaneously / catheter plan documented", WHITE),
          itemRow("Bleeding within acceptable limits (light spotting)", LIGHT_GREY),
          itemRow("Responsible adult escort confirmed", WHITE),
          itemRow("Written discharge instructions given to patient", LIGHT_GREY),
          itemRow("Patient verbally understands return-to-ED criteria", WHITE),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 160 } }),

      // ══ SECTION B — PHYSICIAN ASSESSMENT ════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({
            children: [
              headerCell("SECTION B — PHYSICIAN POST-OPERATIVE ASSESSMENT", DARK_BLUE, 1, 4400),
              headerCell("Done", MID_BLUE, 1, 600),
              headerCell("Findings / Actions", MID_BLUE, 1, 4200),
            ]
          }),

          sectionHeaderRow("B1. Fluid & Electrolyte Review", 3, "2E5FAC"),
          physItemRow("Review intra-op fluid deficit from handover", LIGHT_GREY),
          physItemRow("Order serum electrolytes (Na⁺, K⁺, Cl⁻) if deficit ≥1000 mL", WHITE),
          physItemRow("Order FBC if significant intra-op bleeding or haemodynamic instability", LIGHT_GREY),
          physItemRow("Order serum glucose and arterial blood gas if CNS symptoms present", WHITE),
          physItemRow("Order 12-lead ECG if hyponatraemia or arrhythmia suspected", LIGHT_GREY),
          physItemRow("Document electrolyte results and plan", WHITE),
          alertRow("Na⁺ >120 mEq/L (mild): fluid restrict + IV furosemide.  Na⁺ <120 mEq/L (severe): IV 3% NaCl with caution — risk of central pontine myelinolysis if corrected too rapidly.", 3),

          sectionHeaderRow("B2. Haemorrhage Assessment", 3, "2E5FAC"),
          physItemRow("Review estimated blood loss from operative record", LIGHT_GREY),
          physItemRow("Review post-op Hb / haematocrit if clinically indicated", WHITE),
          physItemRow("IV access patent and adequate (minimum 18G)", LIGHT_GREY),
          physItemRow("Group & Save / cross-match ordered if heavy bleeding", WHITE),
          alertRow("Haemodynamic instability + heavy bleeding: activate haemorrhage protocol; consider IV oxytocin, balloon tamponade, or return to theatre.", 3),

          sectionHeaderRow("B3. Perforation / Visceral Injury Assessment", 3, "2E5FAC"),
          physItemRow("Confirm whether perforation was noted intra-operatively", LIGHT_GREY),
          physItemRow("If perforation (no electrode): patient observed, discharge if stable", WHITE),
          physItemRow("If electrode active at time of perforation: arrange laparoscopy to inspect bowel/bladder", LIGHT_GREY),
          physItemRow("Abdominal examination: soft / tender / peritonism documented", WHITE),
          physItemRow("Surgical review requested if peritonism or haemodynamic compromise", LIGHT_GREY),

          sectionHeaderRow("B4. Pain & Analgesia Review", 3, "2E5FAC"),
          physItemRow("Pain score documented and acceptable (NRS ≤3 at rest)", LIGHT_GREY),
          physItemRow("NSAIDs prescribed (e.g. ibuprofen 400 mg TDS) unless contraindicated", WHITE),
          physItemRow("Paracetamol 1 g QDS prescribed as adjunct", LIGHT_GREY),
          physItemRow("Opioid prescribed PRN if NSAIDs insufficient (with monitoring plan)", WHITE),
          physItemRow("Severe colicky pain post-op: consider haematometra — USS abdomen/pelvis", LIGHT_GREY),

          sectionHeaderRow("B5. VTE Prophylaxis", 3, "2E5FAC"),
          physItemRow("VTE risk assessed (low / moderate / high)", LIGHT_GREY),
          physItemRow("TED compression stockings applied", WHITE),
          physItemRow("Early ambulation ordered (within 2–4 hours of recovery)", LIGHT_GREY),
          physItemRow("LMWH prescribed if moderate/high risk (e.g. enoxaparin 40 mg SC daily)", WHITE),

          sectionHeaderRow("B6. Infection / Antimicrobial Review", 3, "2E5FAC"),
          physItemRow("Prophylactic antibiotic given pre-op (confirmed in notes)", LIGHT_GREY),
          physItemRow("Post-op antibiotics NOT routinely required — documented", WHITE),
          physItemRow("Fever >38°C in first 24 h — assess for non-infectious causes first (atelectasis, haematoma)", LIGHT_GREY),
          physItemRow("If fever ≥day 3–5: MSU for MC&S; consider UTI", WHITE),

          sectionHeaderRow("B7. Follow-Up Plan", 3, "2E5FAC"),
          physItemRow("Follow-up appointment arranged (4–6 weeks, or earlier for G2 fibroids)", LIGHT_GREY),
          physItemRow("Histology result chase plan documented", WHITE),
          physItemRow("Repeat hysteroscopy planned if incomplete G2 resection", LIGHT_GREY),
          physItemRow("Intrauterine adhesion prevention discussed (if applicable)", WHITE),
          physItemRow("Contraception / fertility plan discussed with patient", LIGHT_GREY),

          sectionHeaderRow("B8. Physician Discharge Authorisation", 3, "2E5FAC"),
          physItemRow("All nursing discharge readiness criteria met (Section A7)", LIGHT_GREY),
          physItemRow("Electrolytes reviewed and within acceptable limits", WHITE),
          physItemRow("No ongoing haemorrhage, perforation concern, or fluid toxicity signs", LIGHT_GREY),
          physItemRow("Discharge summary / TTOs completed", WHITE),
          physItemRow("GP letter dictated / sent", LIGHT_GREY),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 120 } }),

      // ══ SECTION C — RETURN TO ED CRITERIA ═══════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({ children: [headerCell("SECTION C — PATIENT DISCHARGE INSTRUCTIONS: RETURN TO HOSPITAL IF...", RED_ALERT, 2)] }),
          new TableRow({
            children: [
              dataCell("• Vaginal bleeding soaking >1 pad per hour\n• Large clots passed (golf-ball size or larger)\n• Severe or worsening abdominal pain\n• Fever ≥38°C (100.4°F)", "FFF2CC", false, 1, 4500),
              dataCell("• Dizziness, fainting, or collapse\n• Persistent nausea/vomiting\n• Inability to pass urine\n• Any symptoms of concern not listed above", "FFF2CC", false, 1, 4000),
            ]
          }),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 120 } }),

      // ══ SIGNATURES ═══════════════════════════════════════════════════════
      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({ children: [headerCell("SIGNATURES", MID_BLUE, 4)] }),
          new TableRow({
            children: [
              dataCell("Nurse Name:", LIGHT_GREY, true, 1, 1400),
              dataCell("", WHITE, false, 1, 2200),
              dataCell("Signature:", LIGHT_GREY, true, 1, 1000),
              dataCell("", WHITE, false, 1, 3900),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Physician Name:", LIGHT_GREY, true, 1, 1400),
              dataCell("", WHITE, false, 1, 2200),
              dataCell("Signature:", LIGHT_GREY, true, 1, 1000),
              dataCell("", WHITE, false, 1, 3900),
            ]
          }),
          new TableRow({
            children: [
              dataCell("Date / Time of Discharge:", LIGHT_GREY, true, 1, 1400),
              dataCell("", WHITE, false, 3, 7100),
            ]
          }),
        ]
      }),

      new Paragraph({ children: [new TextRun({ text: "" })], spacing: { after: 200 } }),

      // ══ REFERENCE NOTE ═══════════════════════════════════════════════════
      new Paragraph({
        alignment: AlignmentType.LEFT,
        children: [
          new TextRun({ text: "Clinical References: ", bold: true, size: 16, color: "555555", font: "Calibri" }),
          new TextRun({ text: "Berek & Novak's Gynecology (pp. 532–533); Schwartz's Principles of Surgery 11e (p. 1824); Miller's Anesthesia 10e (pp. 8477–8478); Tintinalli's Emergency Medicine.", size: 16, color: "555555", font: "Calibri" }),
        ],
        spacing: { before: 80, after: 80 }
      }),
    ]
  }]
});

Packer.toBuffer(doc).then(buffer => {
  fs.writeFileSync("/home/daytona/workspace/hysteroscopy-checklist/PostOp_Hysteroscopy_Checklist.docx", buffer);
  console.log("SUCCESS: File written.");
}).catch(err => {
  console.error("ERROR:", err);
  process.exit(1);
});
Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.
This is a shared conversation. Sign in to Orris to start your own chat.