Indications of renal dialysis with reference to davidson and archit baloor
| Letter | Indication |
|---|---|
| A | Acidosis - severe metabolic acidosis refractory to bicarbonate therapy |
| E | Electrolyte abnormalities - principally refractory hyperkalemia |
| I | Intoxications - certain poisonings (methanol, ethylene glycol, salicylates, lithium) |
| O | Overload - fluid/volume overload refractory to diuretics |
| U | Uremic symptoms - uremic encephalopathy, pericarditis, coagulopathy, bleeding |
| Uremic Feature | Notes |
|---|---|
| Uremic encephalopathy | Confusion, asterixis, seizures - urgent indication |
| Uremic pericarditis | Friction rub; can progress to tamponade - urgent indication |
| Uremic coagulopathy | Platelet dysfunction, spontaneous bleeding |
| Uremic nausea/vomiting | Persistent anorexia, weight loss, malnutrition |
| Uremic pruritus | Intractable itching unresponsive to other measures |
| Uremic frost | Very late sign (BUN extremely high) |
| Parameter | Threshold Triggering Dialysis Consideration |
|---|---|
| BUN | > 100 mg/dL (emergency); some use > 60 mg/dL for pre-emptive |
| Serum Creatinine | > 10 mg/dL |
| Serum K⁺ | > 6.5 mEq/L with ECG changes or unresponsive to treatment |
| Blood pH | < 7.1, refractory to bicarbonate |
| Fluid overload | Pulmonary edema not responding to diuretics |
| Category | Specific Indication |
|---|---|
| Acidosis | Severe metabolic acidosis (pH < 7.1), refractory to treatment |
| Electrolytes | Refractory hyperkalemia; also hyperphosphatemia, hyperuricemia (TLS) |
| Intoxications | Methanol, ethylene glycol, salicylates, lithium |
| Overload | Pulmonary edema, anasarca - refractory to diuretics |
| Uremia | Encephalopathy, pericarditis, coagulopathy, nausea/malnutrition, pruritus |
Make this pdf better using the above chat
cd /home/daytona/workspace/attachments/404f423d-a0eb-4b09-8134-7f95cd843294 && p…
mkdir -p /home/daytona/workspace/renal-dialysis-pdf && ls /home/daytona/workspac…
~/renal-dialysis-pdf/build_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import Flowable
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import os
OUTPUT = "/home/daytona/workspace/renal-dialysis-pdf/Indications_Renal_Dialysis_Enhanced.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DEEP_BLUE = colors.HexColor("#1A3A5C")
MED_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#D6E8FA")
ACCENT = colors.HexColor("#E8550A") # orange-red accent
TEAL = colors.HexColor("#0E7C7B")
LIGHT_TEAL = colors.HexColor("#D0EFEF")
YELLOW_BG = colors.HexColor("#FFF9E6")
YELLOW_BORD = colors.HexColor("#F0C040")
RED_BG = colors.HexColor("#FDE8E8")
RED_BORD = colors.HexColor("#C0392B")
GREEN_BG = colors.HexColor("#E8F5E9")
GREEN_BORD = colors.HexColor("#27AE60")
LIGHT_GRAY = colors.HexColor("#F4F6F9")
MID_GRAY = colors.HexColor("#7F8C8D")
WHITE = colors.white
BLACK = colors.HexColor("#1C1C1C")
W, H = A4 # 595.27 x 841.89 pt
# ── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Indications for Renal Dialysis",
author="Orris Medical Reference"
)
styles = getSampleStyleSheet()
# ── Custom styles ─────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
H1 = S("H1", fontSize=22, textColor=WHITE, fontName="Helvetica-Bold",
spaceAfter=4, leading=28, alignment=TA_CENTER)
H2 = S("H2", fontSize=15, textColor=DEEP_BLUE, fontName="Helvetica-Bold",
spaceAfter=4, spaceBefore=10, leading=20)
H3 = S("H3", fontSize=12, textColor=MED_BLUE, fontName="Helvetica-Bold",
spaceAfter=3, spaceBefore=6, leading=16)
H4 = S("H4", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
spaceAfter=2, spaceBefore=4, leading=14)
BODY = S("BODY", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
spaceAfter=4, leading=14, alignment=TA_JUSTIFY)
BODY_SM = S("BODY_SM", fontSize=8.5, textColor=BLACK, fontName="Helvetica",
spaceAfter=3, leading=12, alignment=TA_JUSTIFY)
BULLET = S("BULLET", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
spaceAfter=3, leading=13, leftIndent=14, bulletIndent=0)
CAPTION = S("CAPTION", fontSize=8, textColor=MID_GRAY, fontName="Helvetica-Oblique",
spaceAfter=2, leading=10, alignment=TA_CENTER)
REF_STYLE = S("REF", fontSize=8, textColor=MID_GRAY, fontName="Helvetica-Oblique",
leading=11, spaceAfter=2)
MNEMO = S("MNEMO", fontSize=28, textColor=DEEP_BLUE, fontName="Helvetica-Bold",
leading=34, alignment=TA_CENTER)
MNEMO_LABEL = S("MNEMO_LABEL", fontSize=10, textColor=DEEP_BLUE, fontName="Helvetica",
leading=13, alignment=TA_CENTER)
WHITE_BOLD = S("WHITE_BOLD", fontSize=10, textColor=WHITE, fontName="Helvetica-Bold",
leading=14, alignment=TA_CENTER)
WHITE_BODY = S("WHITE_BODY", fontSize=8.5, textColor=WHITE, fontName="Helvetica",
leading=12, alignment=TA_CENTER)
TH = S("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
leading=13, alignment=TA_CENTER)
TD = S("TD", fontSize=8.5, textColor=BLACK, fontName="Helvetica",
leading=12, alignment=TA_LEFT)
TD_C = S("TD_C", fontSize=8.5, textColor=BLACK, fontName="Helvetica",
leading=12, alignment=TA_CENTER)
WARN = S("WARN", fontSize=9, textColor=RED_BORD, fontName="Helvetica-Bold",
leading=13, alignment=TA_LEFT)
# ── Helper flowables ──────────────────────────────────────────────────────────
def rule(color=MED_BLUE, thickness=1.5):
return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=6, spaceBefore=2)
def vspace(h=0.3):
return Spacer(1, h*cm)
def section_header(text, color=DEEP_BLUE):
"""Full-width coloured banner for section title."""
data = [[Paragraph(text, H2)]]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING",(0,0), (-1,-1), 7),
("ROUNDEDCORNERS", [4]),
("LINEBELOW", (0,0), (-1,-1), 2, MED_BLUE),
]))
return t
def callout_box(title, body_paras, bg=LIGHT_TEAL, border=TEAL):
"""Coloured callout box with optional title."""
inner = []
if title:
inner.append(Paragraph(f"<b>{title}</b>", H4))
for p in body_paras:
inner.append(p)
data = [[inner]]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.5, border),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
def bullet(text):
return Paragraph(f"• {text}", BULLET)
def build_table(headers, rows, col_widths=None, header_color=DEEP_BLUE):
if col_widths is None:
n = len(headers)
col_widths = [(W - 4*cm) / n] * n
data = [[Paragraph(h, TH) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), TD) if i==0 else Paragraph(str(c), TD_C) for i, c in enumerate(row)])
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), header_color),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("LINEBELOW", (0,0), (-1,0), 2, header_color),
]
t.setStyle(TableStyle(style))
return t
# ─────────────────────────────────────────────────────────────────────────────
# PAGE BACKGROUND
# ─────────────────────────────────────────────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
# Header bar
canvas.setFillColor(DEEP_BLUE)
canvas.rect(0, H - 1.8*cm, W, 1.8*cm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 9)
canvas.drawString(2*cm, H - 1.2*cm, "Indications for Renal Dialysis | Davidson's & Archit Baloor")
canvas.setFont("Helvetica", 8)
canvas.drawRightString(W - 2*cm, H - 1.2*cm, f"Page {doc.page}")
# Footer bar
canvas.setFillColor(LIGHT_BLUE)
canvas.rect(0, 0, W, 1.5*cm, fill=1, stroke=0)
canvas.setFillColor(MED_BLUE)
canvas.setFont("Helvetica-Oblique", 7.5)
canvas.drawCentredString(W/2, 0.55*cm,
"For educational use only. Combine with local protocols and specialist consultation.")
canvas.restoreState()
# ─────────────────────────────────────────────────────────────────────────────
# CONTENT
# ─────────────────────────────────────────────────────────────────────────────
story = []
# ══════════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ══════════════════════════════════════════════════════════════════════════════
def cover_page():
# Big blue banner
cov_data = [[
Paragraph("Indications for Renal Dialysis", H1),
Paragraph("Insights from Archit Baloor &<br/>Davidson's Principles of Medicine", H1),
]]
cov = Table(cov_data, colWidths=[W - 4*cm])
cov.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
("TOPPADDING", (0,0), (-1,-1), 30),
("BOTTOMPADDING",(0,0), (-1,-1), 30),
]))
story.append(vspace(1.5))
story.append(cov)
story.append(vspace(0.5))
# Sub-headline
sub = Paragraph(
"A comprehensive, evidence-oriented reference synthesising Davidson's Principles of Medicine, "
"Archit Baloor's Medicine, and leading international textbooks (Harrison's 22e, "
"Fischer's Mastery of Surgery 8e, Brenner & Rector's The Kidney, Washington Manual). "
"Covers all accepted clinical indications for initiating renal replacement therapy (RRT) "
"across acute and chronic settings, with practical decision thresholds and the "
"<b>A-E-I-O-U mnemonic.</b>",
BODY
)
story.append(sub)
story.append(vspace(0.4))
# Quick-reference box
qr_items = [
["Setting", "Primary Goal", "Key Tool"],
["Acute AKI", "Reverse life-threatening derangements", "A-E-I-O-U mnemonic"],
["CKD/ESRD", "Manage symptoms, maintain quality of life", "eGFR + symptom burden"],
["Toxin ingestion", "Remove dialysable poison", "Molecular properties + toxicology"],
["Special populations", "Individualised modality & timing", "Shared decision-making"],
]
story.append(build_table(
qr_items[0], qr_items[1:],
col_widths=[5.5*cm, 7.5*cm, 5.5*cm]
))
story.append(vspace(0.3))
story.append(Paragraph(
"<i>References: Harrison's 22e, Fischer's Mastery of Surgery 8e, "
"Brenner & Rector's The Kidney, Washington Manual, Sabiston, Rosen's EM, "
"Comprehensive Clinical Nephrology 7e, Morgan & Mikhail's Anesthesiology.</i>",
REF_STYLE
))
story.append(PageBreak())
cover_page()
# ══════════════════════════════════════════════════════════════════════════════
# 1. OVERVIEW — THE A-E-I-O-U MNEMONIC
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("1. The A-E-I-O-U Mnemonic for Dialysis Indications"))
story.append(vspace(0.2))
story.append(Paragraph(
"Both Davidson's and Archit Baloor organise dialysis indications using the "
"<b>A-E-I-O-U</b> mnemonic. This is the cornerstone framework taught in undergraduate and "
"postgraduate medicine examinations and mirrors international consensus from Harrison's, "
"KDIGO, and leading nephrology textbooks.",
BODY
))
story.append(vspace(0.3))
# Big mnemonic table
mnemo_rows = [
["A", "Acidosis", "Severe metabolic acidosis refractory to bicarbonate (pH < 7.1)"],
["E", "Electrolytes", "Refractory hyperkalemia (K⁺ > 6.5 mEq/L with ECG changes); also hyperphosphataemia, hyperuricaemia (TLS)"],
["I", "Intoxications", "Dialysable poisons: methanol, ethylene glycol, salicylates, lithium, severe metformin-associated lactic acidosis"],
["O", "Overload (Fluid)", "Pulmonary oedema / anasarca unresponsive to diuretics"],
["U", "Uraemia", "Uraemic encephalopathy, pericarditis, coagulopathy, intractable nausea/malnutrition, pruritus"],
]
# Build coloured mnemonic card
letter_style = ParagraphStyle("letter", fontSize=22, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=28)
word_style = ParagraphStyle("word", fontSize=11, fontName="Helvetica-Bold",
textColor=DEEP_BLUE, leading=14)
desc_style = ParagraphStyle("desc", fontSize=9, fontName="Helvetica",
textColor=BLACK, leading=13)
letter_colors = [MED_BLUE, TEAL, ACCENT, colors.HexColor("#7B2D8B"), colors.HexColor("#C0392B")]
mnemo_data = []
for (letter, word, desc), lc in zip(mnemo_rows, letter_colors):
mnemo_data.append([
Paragraph(letter, letter_style),
Paragraph(word, word_style),
Paragraph(desc, desc_style),
])
mt = Table(mnemo_data, colWidths=[1.2*cm, 4*cm, 13.3*cm])
mt_style = TableStyle([
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("LINEBELOW", (0,0), (-1,-2), 0.5, colors.HexColor("#CCCCCC")),
("ROWBACKGROUNDS", (0,0), (-1,-1), [LIGHT_BLUE, WHITE]),
])
# colour each letter cell
for i, (_, _, lc_) in enumerate(zip(mnemo_rows, mnemo_rows, letter_colors)):
mt_style.add("BACKGROUND", (0,i), (0,i), letter_colors[i])
mt.setStyle(mt_style)
story.append(mt)
story.append(vspace(0.3))
story.append(Paragraph(
"<i>Sources: Washington Manual; Fischer's Mastery of Surgery 8e; "
"Harrison's 22e; Morgan & Mikhail's Clinical Anesthesiology 7e.</i>",
REF_STYLE
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 2. ACUTE KIDNEY INJURY — EMERGENCY INDICATIONS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("2. Acute Kidney Injury (AKI) — Emergency Dialysis Indications"))
story.append(vspace(0.2))
story.append(Paragraph(
"In AKI, RRT initiation is driven by <b>clinical instability and life-threatening complications</b> "
"rather than a single creatinine or urea cut-off. The following are the accepted emergency indications "
"(Brenner & Rector; Harrison's 22e; Washington Manual; Campbell-Walsh Urology):",
BODY
))
story.append(vspace(0.2))
aki_data = [
["Indication", "Clinical Features", "Threshold / Notes"],
["Refractory Hyperkalemia",
"Persistent K⁺ elevation with peaked T waves, wide QRS, sine wave, or VF",
"K⁺ > 6.5 mEq/L with ECG changes; unresponsive to insulin-glucose, calcium, β-agonists, bicarbonate"],
["Severe Metabolic Acidosis",
"Haemodynamic instability, impaired vasopressor response, Kussmaul breathing",
"pH < 7.1 (some use < 7.15–7.20) refractory to bicarbonate therapy"],
["Refractory Fluid Overload",
"Pulmonary oedema with hypoxaemia, anasarca, JVD, worsening SOB",
"Most common indication for RRT in AKI; unresponsive to high-dose loop diuretics"],
["Uraemic Complications",
"Encephalopathy, pericarditis (friction rub ± tamponade risk), bleeding diathesis",
"Urgent/emergency indication; do not wait for these — ideally dialyse before they develop"],
["Toxin / Poisoning Removal",
"High-risk ingestions with rising toxin levels, deteriorating clinical status",
"Methanol, ethylene glycol, salicylates, lithium — see Section 6"],
["Oliguria / Anuria",
"Urine output < 0.5 mL/kg/hr for > 6–12 hrs despite adequate resuscitation",
"KDIGO AKI Stage 3 criterion; consider RRT when other indications co-exist"],
["Severe Azotaemia",
"Nausea, vomiting, anorexia, encephalopathy",
"BUN > 100 mg/dL (some use > 60 mg/dL pre-emptively); creatinine > 10 mg/dL — use as guides, not absolutes"],
]
story.append(build_table(
aki_data[0], aki_data[1:],
col_widths=[3.8*cm, 5.5*cm, 9.2*cm],
header_color=ACCENT
))
story.append(vspace(0.3))
story.append(callout_box(
"⚠ Key Clinical Principle",
[Paragraph(
"RRT should not be triggered by a single lab value alone. Integrate: "
"trend of kidney function, oliguria duration, cumulative fluid balance, "
"severity scores (KDIGO staging), and clinical symptoms. "
"Early vs. delayed RRT RCTs (ELAIN, AKIKI, STARRT-AKI) show <b>no consistent "
"mortality benefit from early start</b> in the absence of emergent indications "
"— individualised judgement is paramount. <i>(Brenner & Rector; Harrison's 22e)</i>",
BODY_SM
)],
bg=YELLOW_BG, border=YELLOW_BORD
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 3. CHRONIC KIDNEY DISEASE — MAINTENANCE DIALYSIS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("3. Chronic Kidney Disease (CKD) / ESRD — Maintenance Dialysis"))
story.append(vspace(0.2))
story.append(Paragraph(
"For CKD, Harrison's 22e states: <i>'Clear indications for initiation of renal replacement "
"therapy for patients with CKD include anorexia and nausea not attributable to reversible causes, "
"evidence of malnutrition, and fluid and electrolyte abnormalities refractory to other measures.'</i> "
"Davidson's and Archit Baloor emphasise planning and shared decision-making over arbitrary biochemical thresholds.",
BODY
))
story.append(vspace(0.2))
# Two-column layout: Indications | eGFR / Timing
ckd_ind = [
Paragraph("<b>Indications for Maintenance Dialysis</b>", H3),
bullet("Persistent uraemic symptoms: anorexia, nausea, vomiting"),
bullet("Intractable pruritus not responding to other treatments"),
bullet("Uraemic encephalopathy or neuropathy"),
bullet("Uraemic pericarditis (friction rub — late sign)"),
bullet("Refractory hypertension uncontrolled medically"),
bullet("Volume overload / refractory oedema"),
bullet("Refractory electrolyte disturbance (especially hyperkalemia)"),
bullet("Progressive malnutrition / failure to thrive"),
bullet("Declining functional status attributable to renal failure"),
vspace(0.2),
Paragraph("<i>Harrison's 22e, p.2440; Comprehensive Clinical Nephrology 7e</i>", REF_STYLE),
]
ckd_egfr = [
Paragraph("<b>eGFR Thresholds & Timing</b>", H3),
Paragraph(
"eGFR alone should <b>not</b> dictate dialysis start. However, practice guidelines suggest:",
BODY_SM
),
bullet("eGFR 5–10 mL/min/1.73m²: typical range for initiation in symptomatic patients"),
bullet("eGFR < 6 mL/min/1.73m²: consider even if asymptomatic (high-risk of sudden deterioration)"),
bullet("Early start (eGFR 10–14) vs. late start (eGFR 5–7) — IDEAL-HD trial showed no survival benefit with early start"),
bullet("Rate of decline matters more than a single eGFR value"),
vspace(0.2),
Paragraph("<b>Preparation (start at CKD Stage 4):</b>", H4),
bullet("AV fistula creation (6 months lead time recommended)"),
bullet("Peritoneal dialysis catheter insertion"),
bullet("Patient education: HD vs PD vs transplant"),
bullet("Pre-emptive transplant listing if eligible"),
Paragraph("<i>Harrison's 22e; Comprehensive Clinical Nephrology 7e</i>", REF_STYLE),
]
ckd_tbl = Table([[ckd_ind, ckd_egfr]], colWidths=[9*cm, 9.5*cm])
ckd_tbl.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("LINEAFTER", (0,0), (0,-1), 1, colors.HexColor("#CCCCCC")),
]))
story.append(ckd_tbl)
story.append(vspace(0.3))
story.append(callout_box(
"Davidson's Key Principle",
[Paragraph(
"It is <b>ill-advised to assign an arbitrary urea nitrogen or creatinine level</b> to the need "
"to start dialysis. Patients may become accustomed to chronic uraemia and deny symptoms, "
"only to realise in retrospect how poorly they felt before dialysis. "
"Encephalopathy and pericarditis are <b>very late</b> complications and should not be waited for. "
"<i>(Harrison's 22e, p.2440)</i>",
BODY_SM
)],
bg=GREEN_BG, border=GREEN_BORD
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 4. DETAILED INDICATION-BY-INDICATION BREAKDOWN
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("4. Detailed Breakdown of Each Indication"))
story.append(vspace(0.1))
# 4A Acidosis
story.append(Paragraph("A — Acidosis (Metabolic)", H3))
story.append(rule(TEAL, 1))
story.append(Paragraph(
"Severe metabolic acidosis can be fatal and impairs vasopressor action and myocardial contractility. "
"Alkali (bicarbonate) replacement carries risks of volume overload and hypernatraemia, making "
"RRT the preferred modality for refractory cases. There is <b>no universally agreed pH threshold</b>, "
"but most centres initiate RRT when:",
BODY
))
story.append(bullet("pH < 7.1 despite adequate bicarbonate therapy"))
story.append(bullet("Bicarbonate < 10 mEq/L with haemodynamic instability"))
story.append(bullet("Acidosis contributing to impaired cardiac contractility or respiratory failure"))
story.append(bullet("Lactic acidosis in critically ill patients with AKI (particularly metformin-associated)"))
story.append(Paragraph(
"<b>Modality tip:</b> CRRT (continuous RRT) is preferred in haemodynamically unstable patients "
"for slower, more controlled pH correction. Avoid overly rapid correction in patients with "
"chronic compensated metabolic acidosis to protect respiratory drive.",
BODY_SM
))
story.append(Paragraph("<i>Fischer's Mastery of Surgery 8e; Washington Manual; Brenner & Rector</i>", REF_STYLE))
story.append(vspace(0.2))
# 4B Electrolytes
story.append(Paragraph("E — Electrolyte Abnormalities", H3))
story.append(rule(TEAL, 1))
elec_rows = [
["Electrolyte", "Threshold for Dialysis", "Notes"],
["Hyperkalemia (K⁺)", "K⁺ > 6.5 mEq/L with ECG changes; or rising K⁺ unresponsive to treatment",
"Most dangerous; temporising measures (insulin-glucose, calcium, salbutamol) buy time only. Dialysis is definitive."],
["Hyperphosphatemia", "Refractory to phosphate binders; symptomatic hypocalcemia (tetany)",
"Especially in tumour lysis syndrome (TLS) — dialysis prevents permanent renal injury"],
["Hyperuricaemia", "TLS: uric acid causing oliguria/AKI unresponsive to rasburicase",
"Remove uric acid and phosphate simultaneously with RRT"],
["Hypermagnesemia", "Mg²⁺ causing respiratory depression or cardiac arrest",
"In renal failure, Mg²⁺ cannot be cleared — dialysis required"],
["Hypo/Hypernatraemia", "Severe, with concurrent renal failure preventing safe correction",
"Rate of correction must be controlled to avoid osmotic demyelination syndrome"],
]
story.append(build_table(elec_rows[0], elec_rows[1:],
col_widths=[3.5*cm, 6*cm, 9*cm], header_color=TEAL))
story.append(Paragraph("<i>Fischer's Mastery of Surgery 8e; Washington Manual; Harriet Lane Handbook</i>", REF_STYLE))
story.append(vspace(0.25))
# 4C Intoxications
story.append(Paragraph("I — Intoxications / Poisonings", H3))
story.append(rule(ACCENT, 1))
story.append(Paragraph(
"Haemodialysis is indicated for toxins that are <b>water-soluble, low molecular weight, "
"low protein-bound, and have a small volume of distribution</b>. "
"Early dialysis is associated with better outcomes in methanol/ethylene glycol poisoning. "
"Coordinate with toxicology. Use adjunctive antidotes in parallel where available.",
BODY
))
tox_rows = [
["Toxin", "Selection Criteria / Notes", "Antidote to Co-administer"],
["Methanol", "Causes blindness, anion-gap acidosis; HD rapidly removes methanol and formate",
"Fomepizole (4-methylpyrazole)"],
["Ethylene Glycol", "Oxalate nephropathy; HD removes glycolate/oxalate",
"Fomepizole"],
["Salicylates (Aspirin)", "Severe overdose (level > 100 mg/dL or CNS/renal involvement); HD enhances clearance 6-fold",
"Urinary alkalinisation first; HD if severe"],
["Lithium", "Li⁺ > 4 mEq/L (chronic) or > 5 mEq/L (acute); neurological features; HD removes Li⁺",
"Supportive; avoid activated charcoal (not adsorbed)"],
["Metformin", "Metformin-associated lactic acidosis with renal failure; pH < 7.1",
"Supportive; discontinue metformin"],
["Theophylline", "Levels > 90 mg/L (acute) or > 40 mg/L with clinical deterioration",
"Activated charcoal; haemoperfusion preferred if available"],
["Barbiturates (selected)", "Phenobarbitone: significant removal by HD; pentobarbital less so",
"Supportive"],
]
story.append(build_table(tox_rows[0], tox_rows[1:],
col_widths=[3.5*cm, 8.5*cm, 6.5*cm], header_color=ACCENT))
story.append(Paragraph("<i>Washington Manual; Rosen's Emergency Medicine; Brenner & Rector</i>", REF_STYLE))
story.append(PageBreak())
# 4D Volume Overload
story.append(Paragraph("O — Volume/Fluid Overload", H3))
story.append(rule(MED_BLUE, 1))
story.append(Paragraph(
"<b>Volume overload is the most common indication for RRT in AKI.</b> (Fischer's Mastery of Surgery 8e) "
"Patients show evidence of impaired cardiac and respiratory function when diuretics fail:",
BODY
))
vol_items = [
"Acute pulmonary oedema with increasing oxygen requirements (SpO₂ < 90% on supplemental O₂)",
"Radiographic pulmonary oedema or bilateral pleural effusions",
"Basilar crackles on auscultation + jugular venous distension",
"Worsening shortness of breath / respiratory failure requiring mechanical ventilation",
"Anasarca (generalised oedema) impairing wound healing or organ function",
"Positive fluid balance leading to abdominal compartment syndrome or third-spacing",
"Peripheral oedema causing skin breakdown or impaired mobility",
]
for item in vol_items:
story.append(bullet(item))
story.append(vspace(0.15))
story.append(callout_box(
"Haemodynamic Instability — Modality Choice",
[Paragraph(
"In haemodynamically unstable patients, <b>CRRT or SLED (Sustained Low-Efficiency Dialysis)</b> "
"allow slower ultrafiltration and are preferred over intermittent HD to avoid intradialytic "
"hypotension. Careful assessment of dry weight and stepwise ultrafiltration goals reduce complications. "
"<i>(Brenner & Rector; Washington Manual)</i>",
BODY_SM
)],
bg=LIGHT_BLUE, border=MED_BLUE
))
story.append(Paragraph("<i>Fischer's Mastery of Surgery 8e; Campbell-Walsh Urology; Rosen's EM</i>", REF_STYLE))
story.append(vspace(0.25))
# 4E Uraemia
story.append(Paragraph("U — Uraemia and Uraemic Complications", H3))
story.append(rule(colors.HexColor("#C0392B"), 1))
story.append(Paragraph(
"Uraemic toxins cause systemic dysfunction across multiple organ systems. "
"Modern practice aims to <b>initiate dialysis before late complications develop</b>:",
BODY
))
ur_rows = [
["Feature", "Mechanism", "Urgency", "Notes"],
["Uraemic Encephalopathy", "Retained toxins cross BBB → asterixis, confusion, seizures, coma",
"URGENT", "Reverses with dialysis; protect airway"],
["Uraemic Pericarditis", "Toxin-induced fibrinous pericarditis → friction rub → tamponade risk",
"URGENT", "Anticoagulation contraindicated; use heparin-free HD or CRRT"],
["Uraemic Coagulopathy", "Platelet dysfunction (von Willebrand factor abnormality)",
"Moderate", "Spontaneous bleeding, subdural haematoma risk"],
["Anorexia / Nausea / Vomiting", "Gastric uraemic toxin effect → weight loss, malnutrition",
"Planned", "Often first symptom of ESRD requiring dialysis planning"],
["Uraemic Pruritus", "Retained toxins + secondary hyperparathyroidism",
"Elective/Planned", "Intractable; dialysis provides relief"],
["Uraemic Frost", "Crystallisation of urea on skin (BUN very high, > 200–300 mg/dL)",
"Very Late Sign", "Indicates severe, prolonged uraemia — requires emergency dialysis"],
["Uraemic Neuropathy", "Peripheral sensorimotor neuropathy from toxin accumulation",
"Elective", "Symptoms improve slowly after dialysis initiation"],
["Restless Legs / Sleep", "Uraemic neurotoxin effect", "Elective", "Improves with dialysis"],
]
story.append(build_table(ur_rows[0], ur_rows[1:],
col_widths=[3.5*cm, 6.5*cm, 2.5*cm, 6*cm],
header_color=colors.HexColor("#C0392B")))
story.append(Paragraph("<i>Harrison's 22e; Washington Manual; Fischer's Mastery of Surgery 8e</i>", REF_STYLE))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 5. KEY BIOCHEMICAL THRESHOLDS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("5. Key Biochemical Thresholds for Dialysis Initiation"))
story.append(vspace(0.2))
story.append(Paragraph(
"These are <b>clinical guides</b>, not absolute cutoffs. Clinical context, trajectory, "
"and symptom burden must always be integrated. <i>(Harrison's 22e)</i>",
BODY
))
story.append(vspace(0.2))
thresh_rows = [
["Parameter", "Threshold Considered", "Interpretation / Caveat"],
["Serum Potassium (K⁺)", "> 6.5 mEq/L with ECG changes",
"Emergency dialysis. Temporise first, but dialysis is definitive"],
["Blood pH", "< 7.1 refractory to bicarbonate",
"Lactic acidosis, toxic ingestion, or severe AKI — urgent indication"],
["Serum Bicarbonate", "< 10 mEq/L with instability",
"Used alongside pH; not used in isolation"],
["BUN (Blood Urea Nitrogen)", "> 100 mg/dL emergency; > 60 mg/dL pre-emptive",
"Rosen's EM: initiate when BUN > 100 mg/dL; not a stand-alone indication"],
["Serum Creatinine", "> 10 mg/dL",
"Used as contextual guide; trajectory matters more than a single value"],
["eGFR (CKD)", "5–10 mL/min/1.73m² in symptomatic patients",
"Earlier (10–14) not shown to improve survival in IDEAL-HD trial"],
["Urine Output", "< 0.5 mL/kg/hr for > 6–12 hrs (KDIGO AKI Stage 3)",
"Oliguria/anuria despite resuscitation — consider RRT if other indications co-exist"],
["Fluid Balance", "Cumulative positive balance > 10% body weight",
"Associated with worse outcomes in ICU; may prompt earlier RRT"],
["Serum Uric Acid (TLS)", "> 10 mg/dL with AKI unresponsive to rasburicase",
"Tumour lysis syndrome — RRT removes urate and phosphate together"],
]
story.append(build_table(thresh_rows[0], thresh_rows[1:],
col_widths=[4.5*cm, 5.5*cm, 8.5*cm],
header_color=DEEP_BLUE))
story.append(vspace(0.2))
story.append(callout_box(
"KDIGO AKI Staging Relevant to RRT",
[
Paragraph("<b>Stage 1:</b> Cr ×1.5–1.9 baseline or rise ≥ 0.3 mg/dL; UO < 0.5 mL/kg/hr for 6–12 hrs", BODY_SM),
Paragraph("<b>Stage 2:</b> Cr ×2.0–2.9 baseline; UO < 0.5 mL/kg/hr for ≥ 12 hrs", BODY_SM),
Paragraph("<b>Stage 3:</b> Cr ×3.0 baseline or ≥ 4.0 mg/dL or RRT or GFR < 35 mL/min; UO < 0.3 mL/kg/hr for ≥ 24 hrs or anuria ≥ 12 hrs — <b>RRT typically indicated at this stage with clinical indications</b>", BODY_SM),
Paragraph("<i>Sabiston Textbook of Surgery; Brenner & Rector</i>", REF_STYLE),
],
bg=LIGHT_BLUE, border=MED_BLUE
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 6. MODALITY SELECTION
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("6. Modality Selection — Matching RRT to the Patient"))
story.append(vspace(0.2))
story.append(Paragraph(
"The choice of RRT modality should be tailored to haemodynamic stability, clinical context, "
"available resources, and patient goals. There is <b>no single modality proven superior in mortality</b> "
"across all settings. <i>(Brenner & Rector; Washington Manual)</i>",
BODY
))
story.append(vspace(0.2))
mod_rows = [
["Modality", "Full Name", "Best For", "Advantages", "Limitations"],
["IHD", "Intermittent Haemodialysis",
"Haemodynamically stable; toxin removal; hyperkalaemia",
"Rapid solute clearance; widely available",
"Hypotension risk; not ideal for unstable patients"],
["CRRT", "Continuous Renal Replacement Therapy",
"ICU/haemodynamic instability; ARDS; acute liver failure",
"Slow continuous correction; better haemodynamic tolerance",
"Requires ICU, anticoagulation; filter clotting"],
["SLED", "Sustained Low-Efficiency Dialysis",
"Bridge between IHD and CRRT; haemodynamic instability",
"Extended sessions (6–12 hrs); good haemodynamic tolerance",
"Less available; operator experience required"],
["PD", "Peritoneal Dialysis",
"Chronic ESRD; home dialysis; paediatrics; resource-limited settings",
"No vascular access; home-based; gentler",
"Slow clearance; peritonitis risk; not for acute life-threatening indications"],
["Haemo-perfusion", "Haemoperfusion (activated charcoal/resin column)",
"Selected drug overdoses (theophylline, paraquat)",
"Excellent for large lipid-soluble molecules",
"Limited availability; specific indications only"],
]
story.append(build_table(mod_rows[0], mod_rows[1:],
col_widths=[1.8*cm, 3.5*cm, 4*cm, 4.5*cm, 4.7*cm],
header_color=TEAL))
story.append(vspace(0.2))
story.append(Paragraph(
"<b>Note:</b> CRRT effluent flow should be targeted to <b>25 mL/kg/hour</b> in critically ill patients "
"with AKI. Higher doses (35–45 mL/kg/hr) have not shown improved outcomes (ATN trial, RENAL trial). "
"<i>(Brenner & Rector)</i>",
BODY_SM
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 7. SPECIAL POPULATIONS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("7. Special Populations"))
story.append(vspace(0.2))
pop_rows = [
["Population", "Special Considerations", "Modality Preference"],
["Elderly / Frail",
"Assess frailty score and functional status. Dialysis may prolong life without improving quality. "
"Conservative non-dialytic management is a valid alternative after shared decision-making.",
"PD or home HD preferred for independence; IHD if access feasible"],
["Critically Ill / ICU",
"Haemodynamic instability common. Permissive hypercapnia (ARDS) may require CRRT to correct mixed acidosis. "
"Balance anticoagulation needs with bleeding risk. Catheter-related infection prevention critical.",
"CRRT or SLED first-line"],
["Pregnancy",
"Standard indications apply (hyperkalemia, refractory fluid overload, AKI). "
"Potential fetotoxicity of urea prompts earlier initiation. "
"Optimal serum urea target is lower than non-pregnant (< 17 mmol/L). "
"Intensified dialysis schedules (≥ 20 hrs/week) in ESRD pregnancy improve fetal outcomes.",
"CRRT preferred for AKI; IHD acceptable for ESRD maintenance"],
["Paediatric",
"Indications same as adults: A-E-I-O-U framework applies. "
"Weight-based dosing for CRRT. Vascular access size constraints. "
"TLS is common indication in paediatric oncology.",
"CRRT most common in critically ill children; PD in infants"],
["Liver Failure",
"Hepatorenal syndrome and AKI common. CRRT preferred to minimise risk of cerebral oedema and herniation "
"in acute liver failure (key point from Brenner & Rector).",
"CRRT preferred — protects against cerebral oedema"],
["Post-cardiac Surgery",
"AKI after CPB common. Contrast nephropathy, haemodynamic instability, rhabdomyolysis. "
"Early RRT if AKI Stage 3 with any AEIOU indication.",
"CRRT or SLED in early post-op period"],
]
story.append(build_table(pop_rows[0], pop_rows[1:],
col_widths=[3.5*cm, 10*cm, 5*cm],
header_color=colors.HexColor("#7B2D8B")))
story.append(vspace(0.2))
story.append(Paragraph(
"<b>Key unifying principle:</b> Individualise modality, timing, and goals; "
"emphasise communication, advanced care planning, and integration with palliative care where appropriate. "
"<i>(Davidson's; Archit Baloor; Harrison's 22e)</i>",
BODY_SM
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 8. QUICK-REFERENCE SUMMARY TABLE
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("8. Quick-Reference Summary — All Indications"))
story.append(vspace(0.2))
all_ind_rows = [
["Category", "Specific Indication", "Urgency", "Key Threshold"],
["A — Acidosis", "Severe metabolic acidosis refractory to bicarbonate",
"Urgent", "pH < 7.1; bicarb < 10 mEq/L"],
["E — Electrolytes", "Refractory hyperkalemia with ECG changes",
"Emergency", "K⁺ > 6.5 mEq/L + ECG changes"],
["E — Electrolytes", "Hyperphosphatemia / hyperuricemia in TLS",
"Urgent", "Refractory to medical Rx"],
["I — Intoxications", "Methanol poisoning",
"Emergency", "Clinical severity + toxin level"],
["I — Intoxications", "Ethylene glycol poisoning",
"Emergency", "Clinical severity + oxalate crystals"],
["I — Intoxications", "Severe salicylate overdose",
"Emergency", "Level > 100 mg/dL or CNS/renal involvement"],
["I — Intoxications", "Lithium toxicity",
"Urgent", "Li⁺ > 4 mEq/L (chronic) or neurological features"],
["I — Intoxications", "Metformin-associated lactic acidosis",
"Urgent", "pH < 7.1 with renal failure"],
["O — Overload", "Pulmonary oedema refractory to diuretics",
"Emergency", "Hypoxaemia despite O₂ ± NIV"],
["O — Overload", "Refractory anasarca / generalised oedema",
"Urgent", "Impaired organ function"],
["U — Uraemia", "Uraemic encephalopathy",
"Emergency", "Confusion, asterixis, seizures"],
["U — Uraemia", "Uraemic pericarditis",
"Emergency", "Friction rub; tamponade risk"],
["U — Uraemia", "Uraemic coagulopathy / bleeding",
"Urgent", "Spontaneous bleeding"],
["U — Uraemia", "Uraemic anorexia / malnutrition (CKD)",
"Planned (CKD)", "Progressive weight loss, protein-energy malnutrition"],
["U — Uraemia", "Intractable pruritus (CKD)",
"Elective (CKD)", "Unresponsive to antihistamines, UV-B"],
["CKD — Maintenance", "eGFR 5–10 with symptoms",
"Planned", "Symptoms + eGFR trajectory"],
["CKD — Maintenance", "Refractory HTN uncontrolled medically",
"Planned", "BP despite ≥ 3 agents"],
]
story.append(build_table(all_ind_rows[0], all_ind_rows[1:],
col_widths=[3.8*cm, 6*cm, 3*cm, 5.7*cm],
header_color=DEEP_BLUE))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 9. CLINICAL DECISION FRAMEWORK
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("9. Clinical Decision Framework"))
story.append(vspace(0.2))
story.append(Paragraph(
"Davidson's and Archit Baloor both emphasise integrating <b>multiple clinical factors</b> rather "
"than relying on any single threshold. The following framework guides RRT decision-making:",
BODY
))
story.append(vspace(0.2))
framework_data = [
[Paragraph("<b>Step 1</b>\nIs there an EMERGENCY indication?", WHITE_BOLD),
Paragraph("<b>Step 2</b>\nAssess the full clinical picture", WHITE_BOLD),
Paragraph("<b>Step 3</b>\nChoose modality", WHITE_BOLD),
Paragraph("<b>Step 4</b>\nCommunicate & monitor", WHITE_BOLD)],
[Paragraph("Check A-E-I-O-U:\n• K⁺ > 6.5 + ECG changes\n• pH < 7.1 refractory\n• Pulmonary oedema\n• Uraemic encephalopathy/pericarditis\n• Dialysable toxin\n→ YES: initiate immediately", WHITE_BODY),
Paragraph("• Trend of kidney function\n• Oliguria duration\n• Cumulative fluid balance\n• KDIGO AKI stage\n• Symptom burden (CKD)\n• Rate of eGFR decline\n• Patient goals of care", WHITE_BODY),
Paragraph("• Stable → IHD\n• Unstable → CRRT or SLED\n• Home/chronic → PD\n• Toxin removal → HD\n• Liver failure → CRRT\n• Pregnancy → CRRT/IHD", WHITE_BODY),
Paragraph("• Inform patient/family\n• Nephrology consult\n• Anticoagulation decision\n• Monitor K⁺, pH, UO, BP\n• Review medications (dose adjust)\n• Avoid nephrotoxins\n• Plan for long-term access", WHITE_BODY)],
]
fw_tbl = Table(framework_data, colWidths=[4.4*cm, 4.4*cm, 4.4*cm, 4.4*cm])
fw_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DEEP_BLUE),
("BACKGROUND", (0,1), (-1,-1), MED_BLUE),
("TEXTCOLOR", (0,0), (-1,-1), WHITE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 7),
("RIGHTPADDING", (0,0), (-1,-1), 7),
("VALIGN", (0,0), (-1,-1), "TOP"),
("LINEAFTER", (0,0), (2,-1), 1, WHITE),
("LINEBELOW", (0,0), (-1,0), 2, WHITE),
("BOX", (0,0), (-1,-1), 1.5, DEEP_BLUE),
]))
story.append(fw_tbl)
story.append(vspace(0.3))
story.append(callout_box(
"Early vs. Delayed RRT — What the Evidence Says",
[Paragraph(
"ELAIN (2016): Earlier RRT improved 90-day mortality in one German centre (stage 2 AKI). "
"<b>AKIKI (2016)</b> and <b>STARRT-AKI (2020)</b>: No mortality benefit from early RRT vs. watchful waiting. "
"Two subsequent meta-analyses including ELAIN data found no overall mortality benefit. "
"<b>Conclusion:</b> In the absence of emergent indications, withhold RRT and reassess frequently. "
"Exposing patients who may recover to unnecessary RRT risks infection, bleeding, and haemodynamic instability. "
"<i>(Brenner & Rector; Harrison's 22e)</i>",
BODY_SM
)],
bg=YELLOW_BG, border=YELLOW_BORD
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# 10. REFERENCES AND CONCLUSIONS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("10. Key Takeaways & References"))
story.append(vspace(0.2))
takeaways = [
("<b>1. Use the A-E-I-O-U mnemonic</b>",
"Acidosis, Electrolytes, Intoxications, Overload, Uraemia — the framework taught in Davidson's "
"and Archit Baloor that covers all emergency indications."),
("<b>2. Prioritise clinical indications over single lab thresholds</b>",
"No single creatinine, urea, or eGFR value should automatically trigger dialysis. "
"Integrate symptoms, trajectory, and overall clinical picture."),
("<b>3. Volume overload is the most common acute indication</b>",
"Refractory pulmonary oedema and fluid overload top the frequency list in AKI "
"— act before respiratory failure develops."),
("<b>4. Uraemic pericarditis/encephalopathy are late signs — don't wait for them</b>",
"Modern practice aims to initiate dialysis before these develop. They indicate severely prolonged uraemia."),
("<b>5. Match modality to haemodynamic status</b>",
"CRRT/SLED for unstable patients; IHD for stable; PD for home/chronic; "
"intermittent HD for rapid toxin clearance."),
("<b>6. In CKD/ESRD, symptom burden drives timing more than eGFR alone</b>",
"Prepare for dialysis at Stage 4 CKD. Early education improves outcomes and enables home dialysis."),
("<b>7. Individualise for special populations</b>",
"Elderly (consider conservative care), pregnancy (lower urea targets, intensified schedules), "
"liver failure (CRRT), critically ill (CRRT/SLED)."),
("<b>8. Early-start RRT has no proven mortality benefit (without emergent indications)</b>",
"STARRT-AKI and AKIKI trials confirm: in the absence of A-E-I-O-U indications, watchful waiting is safe."),
]
for heading, content in takeaways:
story.append(Paragraph(heading, H4))
story.append(Paragraph(content, BODY_SM))
story.append(vspace(0.1))
story.append(vspace(0.2))
story.append(rule(MED_BLUE))
story.append(Paragraph("<b>Primary References:</b>", H4))
refs = [
"Harrison's Principles of Internal Medicine 22E (2025) — Chapter on CKD, RRT preparation",
"Fischer's Mastery of Surgery 8e — Indications for Renal Replacement Therapy",
"The Washington Manual of Medical Therapeutics — Nephrology section",
"Brenner and Rector's The Kidney (2-volume set) — RRT in the ICU; AKI management",
"Campbell-Walsh Wein Urology — Management of Acute Kidney Injury",
"Sabiston Textbook of Surgery — Renal Failure chapter",
"Rosen's Emergency Medicine — Dialysis/RRT section",
"Comprehensive Clinical Nephrology, 7th Edition",
"Morgan & Mikhail's Clinical Anesthesiology 7e — Table 31-7: Indications for RRT",
"Maingot's Abdominal Operations — Perioperative RRT guidelines",
"Davidson's Principles and Practice of Medicine (referenced framework)",
"Archit Baloor's Medicine (referenced framework)",
]
for ref in refs:
story.append(Paragraph(f"• {ref}", REF_STYLE))
story.append(vspace(0.3))
story.append(callout_box(
"Disclaimer",
[Paragraph(
"This document is for educational purposes only. Clinical decisions must be based on "
"real-time patient assessment, local protocols, current clinical guidelines, and "
"specialist (nephrology/critical care) consultation. Drug doses, thresholds, and "
"recommendations should be verified against current guidelines before application.",
BODY_SM
)],
bg=RED_BG, border=RED_BORD
))
# ─────────────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF written to: {OUTPUT}")
cd /home/daytona/workspace/renal-dialysis-pdf && python3 build_pdf.py 2>&1
python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/…
Indications Renal Dialysis Enhanced
PDF Document · PDF