Hypertensive pt posted for Ca ovary Cyto reduction surgery and in post op pt on Sodium thiosulfate and KCL and hypothermic explained all this
sodium thiosulfate cisplatin HIPEC ovarian cancer cytoreduction postoperative use
| Mechanism | Details |
|---|---|
| Renal potassium wasting | Kidneys excrete 30-60 mEq/L of K+ daily regardless of serum levels; cannot conserve K+ like they conserve Na+ |
| Postoperative aldosteronism | Surgical stress + any intraoperative hypotension elevates circulating aldosterone, driving K+ excretion in exchange for Na+ retention |
| ADH elevation | Causes sodium/water retention; dilutional effect on K+ |
| Third spacing | Extensive peritoneal dissection during CRS causes 1-3 L/day fluid sequestration; K+ shifts into third space |
| Cisplatin-specific effect | Cisplatin causes renal tubular wasting of K+ and Mg²+ (Fanconi-syndrome-like tubular toxicity), worsening hypokalemia |
| Metabolic alkalosis | From intraoperative fluid losses/transfusions; alkalosis drives K+ intracellularly |
| Effect | Clinical Significance |
|---|---|
| Delayed emergence | Core temp <33°C has anesthetic effect; potentiates CNS depressants (Morgan & Mikhail, p.2427) |
| Coagulopathy | Impairs platelet function and coagulation enzyme activity - dangerous after already bloody surgery |
| Shivering | Increases O₂ consumption 200-500%; poorly tolerated in hypertensive/cardiac patients |
| Cardiac arrhythmias | Especially combined with hypokalemia (from KCl issue above) - dangerous combination |
| Impaired drug metabolism | Slower biotransformation of anesthetic agents, NMBDs, analgesics |
| Immune suppression | Increases surgical site infection risk |
| Postoperative Finding/Drug | Why It Happens / Why It's Given |
|---|---|
| Sodium Thiosulfate | Cisplatin renal protectant - scavenges systemic cisplatin after HIPEC to prevent AKI; given as postop maintenance infusion after pre-HIPEC bolus |
| KCl supplementation | Mandatory after Day 1 postop; worsened by aldosterone response, ADH, cisplatin tubular wasting, diuretics (if on antihypertensives) |
| Hypothermia | Prolonged open CRS surgery + large abdominal exposure + massive fluids + post-HIPEC rebound cooling; treat with forced-air warming |
| Hypertension context | Adds cardiac risk; increases AKI vulnerability; antihypertensives must be managed carefully perioperatively |
Create a postoperative monitoring checklist for HIPEC patients with STS/KCl protocols
mkdir -p /tmp/workspace/hipec-checklist && ls /tmp/workspace/hipec-checklist/
~/hipec-checklist/generate_checklist.py
from docx import Document
from docx.shared import Pt, Inches, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import copy
doc = Document()
# ── Page margins ──────────────────────────────────────────────
section = doc.sections[0]
section.top_margin = Cm(1.5)
section.bottom_margin = Cm(1.5)
section.left_margin = Cm(2.0)
section.right_margin = Cm(2.0)
# ── Helper: shade a table cell ─────────────────────────────────
def shade_cell(cell, fill_hex):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement("w:shd")
shd.set(qn("w:val"), "clear")
shd.set(qn("w:color"), "auto")
shd.set(qn("w:fill"), fill_hex)
tcPr.append(shd)
# ── Helper: set cell border ────────────────────────────────────
def set_cell_border(cell, **kwargs):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
tcBorders = OxmlElement("w:tcBorders")
for side in ("top","left","bottom","right","insideH","insideV"):
tag = OxmlElement(f"w:{side}")
tag.set(qn("w:val"), kwargs.get("val", "single"))
tag.set(qn("w:sz"), kwargs.get("sz", "4"))
tag.set(qn("w:space"), "0")
tag.set(qn("w:color"), kwargs.get("color", "BFBFBF"))
tcBorders.append(tag)
tcPr.append(tcBorders)
# ── Helper: add a styled paragraph inside a cell ───────────────
def cell_para(cell, text, bold=False, size=9, color=None, align=None, italic=False):
cell.paragraphs[0].clear()
p = cell.paragraphs[0]
run = p.add_run(text)
run.bold = bold
run.italic = italic
run.font.size = Pt(size)
run.font.name = "Calibri"
if color:
run.font.color.rgb = RGBColor.from_string(color)
if align:
p.alignment = align
p.paragraph_format.space_before = Pt(1)
p.paragraph_format.space_after = Pt(1)
# ── Colour palette ─────────────────────────────────────────────
DARK_BLUE = "1F3864" # deep navy (header bg)
MID_BLUE = "2E75B6" # section headers
LIGHT_BLUE = "D6E4F0" # alternate row tint
TEAL = "1ABC9C"
ORANGE = "E67E22"
RED = "C0392B"
WHITE = "FFFFFF"
LIGHT_GRAY = "F2F2F2"
AMBER = "F39C12"
GREEN = "27AE60"
DARK_GRAY = "404040"
# ══════════════════════════════════════════════════════════════
# TITLE BLOCK
# ══════════════════════════════════════════════════════════════
tbl = doc.add_table(rows=1, cols=1)
tbl.style = "Table Grid"
tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
hdr_cell = tbl.cell(0, 0)
shade_cell(hdr_cell, DARK_BLUE)
p = hdr_cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.paragraph_format.space_before = Pt(4)
p.paragraph_format.space_after = Pt(4)
r1 = p.add_run("POSTOPERATIVE MONITORING CHECKLIST\n")
r1.bold = True; r1.font.size = Pt(16); r1.font.name = "Calibri"
r1.font.color.rgb = RGBColor.from_string(WHITE)
r2 = p.add_run("CRS + HIPEC | Sodium Thiosulfate / KCl Protocols | Hypertensive Patients")
r2.bold = False; r2.font.size = Pt(10); r2.font.name = "Calibri"
r2.font.color.rgb = RGBColor.from_string("BDD7EE")
doc.add_paragraph()
# ── Sub-header: patient & date fields ──────────────────────────
info_tbl = doc.add_table(rows=1, cols=4)
info_tbl.style = "Table Grid"
info_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
labels = ["Patient Name / MRD#:", "Date of Surgery:", "Surgeon:", "Anaesthetist:"]
for i, lbl in enumerate(labels):
c = info_tbl.cell(0, i)
shade_cell(c, LIGHT_GRAY)
set_cell_border(c)
p = c.paragraphs[0]
r = p.add_run(lbl + "\n_________________________")
r.bold = False; r.font.size = Pt(8); r.font.name = "Calibri"
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# HELPER: section header row
# ══════════════════════════════════════════════════════════════
def add_section_header(table, text, cols, color=MID_BLUE):
row = table.add_row()
cell = row.cells[0]
# merge across all columns
for i in range(1, cols):
cell = cell.merge(row.cells[i])
shade_cell(cell, color)
p = cell.paragraphs[0]
r = p.add_run(text)
r.bold = True; r.font.size = Pt(10); r.font.name = "Calibri"
r.font.color.rgb = RGBColor.from_string(WHITE)
p.paragraph_format.space_before = Pt(2)
p.paragraph_format.space_after = Pt(2)
return row
def add_col_header_row(table, headers, fills=None):
row = table.add_row()
fills = fills or [LIGHT_BLUE] * len(headers)
for i, (hdr, fill) in enumerate(zip(headers, fills)):
c = row.cells[i]
shade_cell(c, fill)
set_cell_border(c)
cell_para(c, hdr, bold=True, size=8.5, color=DARK_GRAY,
align=WD_ALIGN_PARAGRAPH.CENTER)
return row
def add_check_row(table, cols_data, shade=WHITE):
row = table.add_row()
for i, txt in enumerate(cols_data):
c = row.cells[i]
shade_cell(c, shade)
set_cell_border(c)
cell_para(c, txt, size=8.5)
return row
# ══════════════════════════════════════════════════════════════
# SECTION 1 – VITALS & HAEMODYNAMICS
# ══════════════════════════════════════════════════════════════
p_h = doc.add_paragraph()
r_h = p_h.add_run("1. VITALS & HAEMODYNAMIC MONITORING")
r_h.bold = True; r_h.font.size = Pt(11); r_h.font.name = "Calibri"
r_h.font.color.rgb = RGBColor.from_string(MID_BLUE)
v_tbl = doc.add_table(rows=0, cols=5)
v_tbl.style = "Table Grid"
v_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
# Set col widths
widths = [Cm(4.5), Cm(2.5), Cm(2.5), Cm(2.5), Cm(5.5)]
for i, w in enumerate(widths):
for row in v_tbl.rows:
row.cells[i].width = w
add_col_header_row(v_tbl,
["Parameter", "0-2 h", "2-6 h", "6-12 h", "Target / Alert Threshold"],
fills=[MID_BLUE, MID_BLUE, MID_BLUE, MID_BLUE, MID_BLUE])
# fix header text colour
for cell in v_tbl.rows[0].cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.color.rgb = RGBColor.from_string(WHITE)
rows_v = [
["BP (Systolic/Diastolic) mmHg", "□ q30 min", "□ q1 h", "□ q2 h", "SBP 100-160 mmHg\n⚠ SBP >180 or <90 → act immediately (hypertensive pt)"],
["HR (bpm)", "□ q30 min", "□ q1 h", "□ q2 h", "60-100 bpm\n⚠ <50 or >120 → ECG + review"],
["SpO2 (%)", "□ Continuous", "□ Continuous", "□ q1 h", "≥95%\n⚠ <92% → O2, CXR, ABG"],
["Core Temperature (°C)", "□ q30 min", "□ q1 h", "□ q2 h", "36.5-37.5°C\n⚠ <36°C → warming measures\n⚠ >38.5°C post-HIPEC → sepsis workup"],
["Urine Output (mL/kg/h)", "□ Hourly", "□ Hourly", "□ q2 h", "≥0.5 mL/kg/h\n⚠ <0.5 mL/kg/h → fluid challenge\n⚠ Oliguria + rising Cr → STS toxicity?"],
["CVP (if applicable)", "□ q1 h", "□ q2 h", "□ q4 h", "8-12 mmHg"],
["GCS / Sedation Score", "□ q1 h", "□ q1 h", "□ q2 h", "Alert or RASS target\n⚠ Prolonged sedation: exclude hypothermia"],
["Pain Score (NRS 0-10)", "□ q1 h", "□ q1 h", "□ q2 h", "NRS ≤3\n→ Multimodal analgesia; avoid NSAIDs"],
]
for i, r in enumerate(rows_v):
add_check_row(v_tbl, r, shade=LIGHT_BLUE if i % 2 == 0 else WHITE)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 2 – TEMPERATURE / HYPOTHERMIA PROTOCOL
# ══════════════════════════════════════════════════════════════
p_h2 = doc.add_paragraph()
r_h2 = p_h2.add_run("2. HYPOTHERMIA MANAGEMENT PROTOCOL")
r_h2.bold = True; r_h2.font.size = Pt(11); r_h2.font.name = "Calibri"
r_h2.font.color.rgb = RGBColor.from_string(RED)
temp_tbl = doc.add_table(rows=0, cols=4)
temp_tbl.style = "Table Grid"
temp_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
add_col_header_row(temp_tbl,
["Core Temp", "Grade", "Action Required", "Done / Time"],
fills=["1F3864","1F3864","1F3864","1F3864"])
for c in temp_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
temp_rows = [
["36.5 – 37.5°C", "Normal", "□ Continue routine monitoring", "____"],
["36.0 – 36.4°C", "Mild Hypothermia", "□ Forced-air warming blanket ON\n□ Warm IV fluids\n□ Raise ambient temp to 24°C", "____"],
["35.0 – 35.9°C", "Moderate", "□ Above + warming mattress\n□ Warm humidified O2\n□ Check coagulation profile\n□ Notify ICU consultant", "____"],
["< 35.0°C", "Severe", "□ Emergency warming protocol\n□ ABG + coags STAT\n□ Consider warm bladder irrigation\n□ Rewarming target: 0.5-1°C / hour", "____"],
]
colors = [WHITE, LIGHT_BLUE, "FFF3CD", "FFE0E0"]
for row_data, col in zip(temp_rows, colors):
add_check_row(temp_tbl, row_data, shade=col)
# note
note_p = doc.add_paragraph()
r_note = note_p.add_run("⚠ HIPEC-SPECIFIC NOTE: Intraoperative hyperthermic phase (40-42°C perfusate) may mask hypothermia development. "
"Core temp MUST be re-checked immediately on arrival to ICU/PACU regardless of intraoperative readings.")
r_note.font.size = Pt(8); r_note.italic = True; r_note.font.name = "Calibri"
r_note.font.color.rgb = RGBColor.from_string(RED)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 3 – SODIUM THIOSULFATE (STS) PROTOCOL
# ══════════════════════════════════════════════════════════════
p_h3 = doc.add_paragraph()
r_h3 = p_h3.add_run("3. SODIUM THIOSULFATE (STS) PROTOCOL — Cisplatin Nephroprotection")
r_h3.bold = True; r_h3.font.size = Pt(11); r_h3.font.name = "Calibri"
r_h3.font.color.rgb = RGBColor.from_string(TEAL)
sts_tbl = doc.add_table(rows=0, cols=4)
sts_tbl.style = "Table Grid"
sts_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
add_col_header_row(sts_tbl,
["Phase", "Dose / Rate", "Monitoring During Infusion", "Checkbox"],
fills=["0E6655","0E6655","0E6655","0E6655"])
for c in sts_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
sts_rows = [
["Pre-HIPEC Bolus\n(Intraoperative)",
"9 g IV over 15 min\n(~300 mL of 3% solution)\nGiven 20 min before cisplatin instillation",
"• BP q5 min during bolus\n• Watch for nausea/vomiting\n• Note time of administration",
"□ Given\nTime: ____"],
["Post-HIPEC Maintenance\n(Start in Recovery)",
"12 g IV over 6 hours\n(~400 mL of 3% solution)\nBegin 3-6 h after HIPEC completion",
"• BP + HR q30 min\n• UO hourly (target ≥0.5 mL/kg/h)\n• Watch for hyponatraemia (STS contains Na+)\n• Serum Na+ at 6 h",
"□ Started\nTime: ____\n□ Completed\nTime: ____"],
["Renal Function Monitoring\n(Days 1-5 post-op)",
"No further STS infusion\n(monitor only)",
"• Serum Cr, BUN, eGFR DAILY (Days 1-5)\n• Urine Na+, K+, Cr (Day 2)\n• ⚠ Cr rise >25% from baseline = AKI alert\n• 24 h urine if oliguria",
"□ Day 1 labs\n□ Day 2 labs\n□ Day 3 labs\n□ Day 5 labs"],
]
shade_sts = [WHITE, LIGHT_BLUE, "E8F8F5"]
for row_data, col in zip(sts_rows, shade_sts):
add_check_row(sts_tbl, row_data, shade=col)
sts_note = doc.add_paragraph()
r_sn = sts_note.add_run("STS Mechanism: Binds and inactivates systemic cisplatin via thiosulfate-platinum complex formation → prevents cisplatin accumulation in proximal renal tubules. "
"Intraperitoneal cisplatin efficacy is NOT significantly reduced (compartmental separation). "
"Evidence: OVHIPEC-1 protocol; Kurreck et al. Ann Surg Oncol 2022; Chambers et al. 2021 (PMID 34141848).")
r_sn.font.size = Pt(7.5); r_sn.italic = True; r_sn.font.name = "Calibri"
r_sn.font.color.rgb = RGBColor.from_string("2C7A7B")
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 4 – KCl / ELECTROLYTE PROTOCOL
# ══════════════════════════════════════════════════════════════
p_h4 = doc.add_paragraph()
r_h4 = p_h4.add_run("4. KCl / ELECTROLYTE REPLACEMENT PROTOCOL")
r_h4.bold = True; r_h4.font.size = Pt(11); r_h4.font.name = "Calibri"
r_h4.font.color.rgb = RGBColor.from_string(ORANGE)
kcl_tbl = doc.add_table(rows=0, cols=5)
kcl_tbl.style = "Table Grid"
kcl_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
add_col_header_row(kcl_tbl,
["Serum K+ (mEq/L)", "Grade", "KCl Dose / Route", "Rate Limit", "Monitoring"],
fills=["7D6608","7D6608","7D6608","7D6608","7D6608"])
for c in kcl_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
kcl_rows = [
["≥ 3.5", "Normal", "Maintenance only\nAdd 20 mEq/L to maintenance IVF", "Routine IV rate", "□ q6h electrolytes Day 0\n□ Daily thereafter"],
["3.0 – 3.4", "Mild Hypokalaemia","KCl 20-40 mEq IV over 2-4 h\n(or oral K+ if tolerating)", "Max 10 mEq/h peripheral\nMax 20 mEq/h central line", "□ ECG\n□ Repeat K+ in 4 h\n□ Check Mg²+"],
["2.5 – 2.9", "Moderate", "KCl 40 mEq IV over 2-4 h\n→ Repeat until K+ ≥3.5", "Max 20 mEq/h via CENTRAL only", "□ Continuous cardiac monitor\n□ ECG\n□ Mg²+ replacement if <0.8 mmol/L\n□ Re-check K+ q2h"],
["< 2.5", "Severe", "KCl 60-80 mEq IV\nCentral line MANDATORY\nICU consult", "Max 20 mEq/h central\nNEVER IV push", "□ Continuous ECG monitoring\n□ Q1h K+ check\n□ Mg²+, PO4, Ca²+ panel\n□ ABG (metabolic alkalosis?)"],
]
colors_kcl = [WHITE, "FFF9C4", "FFE0B2", "FFE0E0"]
for row_data, col in zip(kcl_rows, colors_kcl):
add_check_row(kcl_tbl, row_data, shade=col)
# KCl causes table
doc.add_paragraph()
p_h4b = doc.add_paragraph()
r_h4b = p_h4b.add_run(" Why Hypokalaemia Occurs in HIPEC Patients (Reference Reasons)")
r_h4b.bold = True; r_h4b.font.size = Pt(9); r_h4b.font.name = "Calibri"
r_h4b.font.color.rgb = RGBColor.from_string(DARK_GRAY)
cause_tbl = doc.add_table(rows=0, cols=2)
cause_tbl.style = "Table Grid"
add_col_header_row(cause_tbl, ["Mechanism", "Clinical Relevance"], fills=[DARK_GRAY, DARK_GRAY])
for c in cause_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
causes = [
["Mandatory renal K+ excretion (30-60 mEq/day)", "Kidneys cannot conserve K+ → continuous loss regardless of serum level"],
["Elevated aldosterone (surgical stress)", "Drives K+ loss in exchange for Na+ retention"],
["Cisplatin tubular toxicity", "Proximal tubular damage → Fanconi-type K+/Mg²+ wasting, persists 3-5 days post-HIPEC"],
["Third spacing (peritoneal dissection)", "1-3 L/day fluid sequestration; K+ shifts into third space"],
["Thiazide/Loop diuretics (hypertensive pts)", "Additive urinary K+ wasting - review antihypertensive medication list"],
["Metabolic alkalosis", "Alkalosis drives K+ intracellularly (transcellular shift)"],
]
for i, c in enumerate(causes):
add_check_row(cause_tbl, c, shade=LIGHT_BLUE if i % 2 == 0 else WHITE)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 5 – RENAL FUNCTION MONITORING
# ══════════════════════════════════════════════════════════════
p_h5 = doc.add_paragraph()
r_h5 = p_h5.add_run("5. RENAL FUNCTION & AKI MONITORING")
r_h5.bold = True; r_h5.font.size = Pt(11); r_h5.font.name = "Calibri"
r_h5.font.color.rgb = RGBColor.from_string("7B241C")
renal_tbl = doc.add_table(rows=0, cols=4)
renal_tbl.style = "Table Grid"
add_col_header_row(renal_tbl,
["Investigation", "Timing", "Alert Value", "Action"],
fills=["7B241C","7B241C","7B241C","7B241C"])
for c in renal_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
renal_rows = [
["Serum Creatinine", "Pre-op baseline; Days 1, 2, 3, 5 post-op", "Rise >25% from baseline", "AKI staging (KDIGO)\nNephrology consult\nReview nephrotoxins"],
["BUN / Urea", "Days 1, 3, 5", ">40 mg/dL rising", "Fluid adequacy review\nProtein catabolism vs AKI"],
["eGFR", "Days 1, 3, 5", "< 60 mL/min/1.73m²", "Hold nephrotoxic agents\nReview drug doses"],
["Urine Output", "Hourly (ICU/HDU)", "< 0.5 mL/kg/h × 2 h", "Fluid bolus 250 mL\nFurosemide only if euvolaemic\nRecheck K+"],
["Urine Na+, K+, Osmolality", "Day 2 if AKI concern", "FeNa > 2% (intrinsic AKI)", "Distinguish pre-renal vs intrinsic\nSTS effectiveness check"],
["Serum Mg²+", "Days 1, 3", "< 0.7 mmol/L", "IV MgSO4 replacement\n(Cisplatin causes Mg²+ wasting)\nCorrect before K+ rises"],
["Serum Na+", "q6h Day 0, daily thereafter", "< 130 or > 150 mEq/L", "STS infusion contains Na+\nHyponatraemia risk if over-hydrated\nAdjust fluids"],
]
for i, r in enumerate(renal_rows):
add_check_row(renal_tbl, r, shade=LIGHT_BLUE if i % 2 == 0 else WHITE)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 6 – HYPERTENSION SPECIFIC MANAGEMENT
# ══════════════════════════════════════════════════════════════
p_h6 = doc.add_paragraph()
r_h6 = p_h6.add_run("6. HYPERTENSION-SPECIFIC POSTOPERATIVE MANAGEMENT")
r_h6.bold = True; r_h6.font.size = Pt(11); r_h6.font.name = "Calibri"
r_h6.font.color.rgb = RGBColor.from_string(DARK_BLUE)
htn_tbl = doc.add_table(rows=0, cols=3)
htn_tbl.style = "Table Grid"
add_col_header_row(htn_tbl,
["Item", "Protocol", "Checkbox / Time"],
fills=["1F3864","1F3864","1F3864"])
for c in htn_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
htn_rows = [
["Antihypertensive Review",
"• List all home antihypertensives\n• Beta-blockers: NEVER stop abruptly → restart via NG/IV if NBM\n• ACE-I / ARBs: hold Day 0-1 (renal protection post-cisplatin), restart Day 2 if Cr stable\n• Thiazides / Loop diuretics: assess K+ before restart",
"□ Meds reviewed\n□ Beta-blocker continued\n□ ACE-I restart plan noted"],
["BP Target Postoperatively",
"• Target SBP: 130-160 mmHg (avoid aggressive lowering - risk of renal hypoperfusion)\n• If SBP >180 mmHg: IV labetalol or hydralazine\n• If SBP <100 mmHg: hold antihypertensives, IV fluid challenge, vasopressor if needed",
"□ BP target documented\n□ Nursing escalation criteria set"],
["Cardiac Monitoring",
"• Continuous ECG monitoring first 24 h (HTN + hypokalaemia = arrhythmia risk)\n• 12-lead ECG at 0 h, 6 h, Day 1\n• Watch for: ST changes, prolonged QTc (cisplatin + hypokalaemia)\n• Echo if haemodynamic instability",
"□ ECG 0h ____\n□ ECG 6h ____\n□ ECG Day 1 ____"],
["Analgesic Restrictions",
"• AVOID NSAIDs (worsen hypertension + renal function)\n• Preferred: paracetamol + opioid (PCA) + epidural/regional if placed\n• Gabapentin/pregabalin: caution in elderly\n• Dexamethasone: monitor BP (steroid effect)",
"□ NSAIDs avoided\n□ Analgesia plan documented"],
["Fluid Management",
"• Goal-directed fluid therapy: target CVP 8-12 / MAP ≥65 mmHg\n• Avoid excessive free water (risk of dilutional hyponatraemia + STS Na+ load)\n• Maintain adequate intravascular volume for renal perfusion\n• Albumin 4% if oncotic pressure low",
"□ Fluid balance q6h\n□ Target MAP documented"],
]
for i, r_data in enumerate(htn_rows):
add_check_row(htn_tbl, r_data, shade=LIGHT_BLUE if i % 2 == 0 else WHITE)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 7 – LABS SCHEDULE SUMMARY TABLE
# ══════════════════════════════════════════════════════════════
p_h7 = doc.add_paragraph()
r_h7 = p_h7.add_run("7. LABORATORY INVESTIGATIONS SCHEDULE")
r_h7.bold = True; r_h7.font.size = Pt(11); r_h7.font.name = "Calibri"
r_h7.font.color.rgb = RGBColor.from_string(GREEN)
lab_tbl = doc.add_table(rows=0, cols=7)
lab_tbl.style = "Table Grid"
add_col_header_row(lab_tbl,
["Investigation", "Pre-op", "0-2h", "Day 1", "Day 2", "Day 3", "Day 5"],
fills=["1E8449","1E8449","1E8449","1E8449","1E8449","1E8449","1E8449"])
for c in lab_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
labs = [
["CBC / FBC", "✓", "✓", "✓", "✓", "✓", "✓"],
["Serum Creatinine", "✓", "—", "✓", "✓", "✓", "✓"],
["BUN / Urea", "✓", "—", "✓", "—", "✓", "✓"],
["Na+, K+, Cl-, HCO3-", "✓", "✓", "✓", "✓", "✓", "✓"],
["Serum Mg²+", "✓", "—", "✓", "—", "✓", "—"],
["Serum Ca²+ (ionised)", "✓", "—", "✓", "—", "✓", "—"],
["Coagulation (PT/aPTT/INR)", "✓", "—", "✓", "—", "✓", "—"],
["Serum Albumin", "✓", "—", "—", "✓", "—", "✓"],
["LFTs (ALT, AST, Bili)", "✓", "—", "—", "✓", "—", "✓"],
["ABG + Lactate", "✓", "✓", "If concern", "—", "—", "—"],
["Urine Na+, K+, Cr", "—", "—", "—", "If AKI", "—", "—"],
["12-lead ECG", "✓", "On arrival", "✓", "—", "—", "—"],
["CXR", "✓", "On arrival", "—", "✓", "—", "—"],
]
for i, r_data in enumerate(labs):
add_check_row(lab_tbl, r_data, shade=LIGHT_BLUE if i % 2 == 0 else WHITE)
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# SECTION 8 – ESCALATION CRITERIA
# ══════════════════════════════════════════════════════════════
p_h8 = doc.add_paragraph()
r_h8 = p_h8.add_run("8. ESCALATION / RED FLAG CRITERIA")
r_h8.bold = True; r_h8.font.size = Pt(11); r_h8.font.name = "Calibri"
r_h8.font.color.rgb = RGBColor.from_string(RED)
esc_tbl = doc.add_table(rows=0, cols=3)
esc_tbl.style = "Table Grid"
add_col_header_row(esc_tbl,
["Red Flag Finding", "Likely Cause", "Immediate Action"],
fills=["922B21","922B21","922B21"])
for c in esc_tbl.rows[0].cells:
for p in c.paragraphs:
for r in p.runs:
r.font.color.rgb = RGBColor.from_string(WHITE)
esc_rows = [
["UO < 0.3 mL/kg/h × 2h despite fluids", "Cisplatin AKI / Hypovolaemia", "Nephrology consult\nReview STS administration\nCheck Cr, electrolytes STAT"],
["K+ < 2.5 mEq/L", "Severe hypokalaemia\n(cisplatin + aldosterone + diuretics)", "Central line KCl replacement\nContinuous ECG\nICU escalation"],
["Core temp < 35°C", "Severe hypothermia", "Emergency warming protocol\nABG + coagulation STAT\nICU consultant"],
["SBP > 200 mmHg sustained", "Uncontrolled hypertension\n+ pain / anxiety", "IV labetalol / hydralazine\nAnalgesia review\nCardiologist if needed"],
["New ECG changes / arrhythmia", "Hypokalaemia + hypomagnesaemia\n+ cisplatin cardiotoxicity", "12-lead ECG\nElectrolyte correction\nCardiology consult"],
["Serum Cr rise > 25% Day 1-3", "Cisplatin nephrotoxicity\n(AKI Stage 1+)", "Stop nephrotoxins\nNephrology\nOptimise fluid balance\nUrine FeNa"],
["Hyponatraemia Na+ < 130", "STS Na+ load + fluid retention\n(ADH/aldosterone response)", "Restrict free water\nStop hypotonic fluids\nRecheck q4h"],
["Altered consciousness / delayed emergence", "Hypothermia / metabolic / drug effect", "Core temp, ABG, glucose, Na+\nReverse residual agents\nCT head if focal deficit"],
]
for i, r_data in enumerate(esc_rows):
add_check_row(esc_tbl, r_data, shade="FFE0E0" if i % 2 == 0 else "FFF5F5")
doc.add_paragraph()
# ══════════════════════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════════════════════
footer_tbl = doc.add_table(rows=1, cols=1)
footer_tbl.style = "Table Grid"
fc = footer_tbl.cell(0, 0)
shade_cell(fc, DARK_BLUE)
fp = fc.paragraphs[0]
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = fp.add_run(
"HIPEC Postoperative Monitoring Checklist | Version 1.0 | July 2026\n"
"Based on: OVHIPEC-1 Trial | NCCN Guidelines | Berek & Novak's Gynecology | Morgan & Mikhail's Anesthesiology\n"
"This checklist is a clinical aid only. Always apply individual clinical judgement. Not a substitute for clinical guidelines."
)
fr.font.size = Pt(7); fr.font.name = "Calibri"
fr.font.color.rgb = RGBColor.from_string("BDD7EE")
# ── Save ──────────────────────────────────────────────────────
out_path = "/tmp/workspace/hipec-checklist/HIPEC_Postop_Monitoring_Checklist.docx"
doc.save(out_path)
print(f"Saved: {out_path}")
cd /tmp/workspace/hipec-checklist && python generate_checklist.py
ls -lh /tmp/workspace/hipec-checklist/HIPEC_Postop_Monitoring_Checklist.docx
HIPEC Postop Monitoring Checklist
Word Document · DOCX
| Section | Contents |
|---|---|
| 1. Vitals & Haemodynamics | BP, HR, SpO2, Core Temp, UO, CVP, GCS, Pain - with frequency (0-2h / 2-6h / 6-12h) and alert thresholds |
| 2. Hypothermia Protocol | 4-grade table (Normal → Mild → Moderate → Severe) with specific warming actions per grade + HIPEC-specific rebound hypothermia warning |
| 3. STS Protocol | Pre-HIPEC bolus (9 g/15 min) + Post-HIPEC maintenance (12 g/6h) with timing checkboxes + Days 1-5 renal monitoring; mechanism note |
| 4. KCl Protocol | Hypokalaemia grading table (K+ ≥3.5 → <2.5), dose/route/rate limits per grade + cause table (cisplatin tubular wasting, aldosterone, diuretics, third spacing) |
| 5. Renal / AKI Monitoring | Cr, BUN, eGFR, UO, urine electrolytes, Mg²+, Na+ - with alert values and actions |
| 6. Hypertension-Specific | Antihypertensive restart plan (ACE-I hold Day 0-1, beta-blocker never stop), BP targets, cardiac monitoring, NSAID restrictions |
| 7. Labs Schedule | Grid: Pre-op / 0-2h / Day 1 / Day 2 / Day 3 / Day 5 for all key investigations |
| 8. Red Flag Escalation | 8 critical findings (oliguria, K+ <2.5, severe hypothermia, SBP >200, arrhythmia, Cr rise, hyponatraemia, altered consciousness) with likely cause and immediate action |