Refeeding syndrome
"refeeding syndrome"[MeSH Terms]

| Criterion | Threshold |
|---|---|
| BMI | < 16 kg/m² |
| Unintentional weight loss | > 15% in the last 3-6 months |
| No/negligible caloric intake | > 10 days |
| Pre-feeding electrolyte disturbance | Low K⁺, PO₄³⁻, or Mg²⁺ |
| Criterion | Threshold |
|---|---|
| BMI | 16-18.5 kg/m² |
| Unintentional weight loss | > 10% in 3-6 months |
| No/negligible intake | > 5 days |
| Comorbidities or medications | Alcohol abuse, insulin, chemotherapy, antacids, diuretics |
| System | Features |
|---|---|
| Cardiovascular | Cardiac arrhythmias, myocardial infarction, cardiac arrest, heart failure, edema |
| Respiratory | Respiratory failure (respiratory muscle weakness due to hypophosphatemia) |
| Neurological | Confusion, lethargy, seizures, Wernicke's encephalopathy (thiamine deficiency) |
| Musculoskeletal | Muscle weakness, rhabdomyolysis |
| Metabolic | Lactic acidosis, hyperglycemia (blunted insulin response in severe cases) |
| Feature | Key Point |
|---|---|
| Hallmark | Hypophosphatemia |
| Trigger | Reintroduction of carbohydrates after starvation |
| Mechanism | Insulin surge → intracellular shift of PO₄, K, Mg |
| Prevention | Start at 10 kcal/kg/day, give thiamine first, correct electrolytes |
| Monitoring | Daily electrolytes for first week of refeeding |
| Thiamine | Mandatory before first feed in all high-risk patients |
Find the latest ASPEN/AND nutrition support guidelines and any updates since 2020
ASPEN nutrition support guidelines refeeding syndrome
ASPEN AND nutrition guidelines
ASPEN AND nutrition support guidelines 2024 2025 refeeding syndrome update
PMID: 39317131
PMID: 41735500
"refeeding syndrome" AND consensus recommendations AND ASPEN
https://nutritioncare.org/clinical-resources/guidelines-stan…
PMID: 32115791
ASPEN critical care nutrition guidelines adult 2021 2022 2023 2024
ASPEN 2024 2025 nutrition guidelines update "refeeding syndrome" OR "critical care" OR "enteral nutrition"
ASPEN SCCM critical care nutrition adult guidelines 2021
PMID: 40957230
PMID: 41773753
"provision and assessment of nutrition support therapy" adult critically ill 2021
Note: A minor erratum was published shortly after (PMID: 32383800); the core recommendations were unchanged.
| Grade | Electrolyte Fall | Additional criteria |
|---|---|---|
| Mild | 10-20% decrease | - |
| Moderate | 20-30% decrease | - |
| Severe | >30% decrease | AND/OR organ dysfunction, AND/OR thiamine deficiency |
| Study | Year | Finding | PMID |
|---|---|---|---|
| Cioffi et al., Clin Nutr (meta-analysis) | 2021 | Pooled RS incidence: ~34% in high-risk populations; high heterogeneity due to inconsistent definitions | 34134001 |
| Alencar et al., Nutrition (systematic review) | 2024 | In ICU patients, RS occurred in up to 52.5% of cases; most institutions do NOT follow ASPEN/NICE caloric progression protocols; no definitive "best" feeding method established | 39317131 |
| Zheng et al., Nutr Clin Pract (systematic review) | 2025 | Identified consistent risk factors across adult populations for RS development | 39187889 |
| Schneider et al., Sci Rep (meta-analysis) | 2026 | Pooled RS incidence in critically ill: 23% (95% CI 15-33%); no statistically significant association with mortality found (OR 1.51, CI 0.79-2.88), though evidence certainty was low and heterogeneity high | 41735500 |
| Guideline | Year | Org | Scope | Status |
|---|---|---|---|---|
| ASPEN Consensus Recommendations for Refeeding Syndrome | 2020 | ASPEN | All hospitalized adults + pediatrics | Current - no update |
| Guidelines for Nutrition Support in the Adult Critically Ill Patient | 2021 | ASPEN/SCCM | ICU adults | Current |
| NICE Clinical Guideline CG32 | 2017 (last update) | NICE (UK) | All hospitalized patients | Current (UK) |
| ESPEN Clinical Nutrition in Surgery | 2025 | ESPEN | Perioperative/surgical patients | Current |
| ASPEN Head & Neck Cancer Nutrition | 2026 | ASPEN | Head and neck cancer adults | Current |
Need a proper note with ASPEN guidelines incorporated in it
I want a combination of the refeeding syndrome note and ASPEN guidelines
Refeeding syndrome PDF with latest ASPEN guidelines PDF
mkdir -p /home/daytona/workspace/refeeding-syndrome && ls /home/daytona/workspac…
~/refeeding-syndrome/generate_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, KeepTogether, ListFlowable, ListItem, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.pdfgen import canvas
import os
OUTPUT = "/home/daytona/workspace/refeeding-syndrome/Refeeding_Syndrome_ASPEN_Guidelines.pdf"
# ── Colour palette ─────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1B3A6B")
TEAL = colors.HexColor("#1A7A8A")
LIGHT_TEAL= colors.HexColor("#E8F5F7")
AMBER = colors.HexColor("#D97706")
AMBER_BG = colors.HexColor("#FEF3C7")
RED = colors.HexColor("#B91C1C")
RED_BG = colors.HexColor("#FEE2E2")
GREEN = colors.HexColor("#166534")
GREEN_BG = colors.HexColor("#DCFCE7")
GRAY_LINE = colors.HexColor("#CBD5E1")
LIGHT_GRAY= colors.HexColor("#F8FAFC")
WHITE = colors.white
BLACK = colors.HexColor("#1E293B")
MID_GRAY = colors.HexColor("#64748B")
PAGE_W, PAGE_H = A4
# ── Header / Footer ────────────────────────────────────────────────────────────
def header_footer(c: canvas.Canvas, doc):
c.saveState()
# Top bar
c.setFillColor(NAVY)
c.rect(0, PAGE_H - 28*mm, PAGE_W, 28*mm, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 13)
c.drawString(1.5*cm, PAGE_H - 12*mm, "Refeeding Syndrome — Clinical Reference & ASPEN 2020 Guidelines")
c.setFont("Helvetica", 8)
c.drawString(1.5*cm, PAGE_H - 20*mm, "Based on: da Silva JSV et al. ASPEN Consensus Recommendations. Nutr Clin Pract. 2020;35(2):178-195.")
# Teal accent line under header
c.setFillColor(TEAL)
c.rect(0, PAGE_H - 30*mm, PAGE_W, 2*mm, fill=1, stroke=0)
# Footer
c.setFillColor(LIGHT_GRAY)
c.rect(0, 0, PAGE_W, 14*mm, fill=1, stroke=0)
c.setStrokeColor(GRAY_LINE)
c.setLineWidth(0.5)
c.line(0, 14*mm, PAGE_W, 14*mm)
c.setFillColor(MID_GRAY)
c.setFont("Helvetica", 7.5)
c.drawString(1.5*cm, 5*mm, "For clinical use by qualified healthcare professionals. Always verify with institutional protocols.")
c.drawRightString(PAGE_W - 1.5*cm, 5*mm, f"Page {doc.page}")
c.restoreState()
# ── Styles ─────────────────────────────────────────────────────────────────────
base_styles = getSampleStyleSheet()
def S(name, **kw):
s = ParagraphStyle(name, **kw)
return s
sTitle = S("sTitle",
fontName="Helvetica-Bold", fontSize=22, textColor=NAVY,
alignment=TA_CENTER, spaceAfter=4)
sSubtitle = S("sSubtitle",
fontName="Helvetica", fontSize=11, textColor=TEAL,
alignment=TA_CENTER, spaceAfter=2)
sSectionHead = S("sSectionHead",
fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
backColor=NAVY, borderPad=6, spaceAfter=6, spaceBefore=14,
leftIndent=-4, rightIndent=-4)
sSubHead = S("sSubHead",
fontName="Helvetica-Bold", fontSize=10.5, textColor=TEAL,
spaceBefore=8, spaceAfter=3)
sBody = S("sBody",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
leading=15, alignment=TA_JUSTIFY, spaceAfter=4)
sBullet = S("sBullet",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
leading=14, leftIndent=16, firstLineIndent=-10, spaceAfter=2)
sTableHead = S("sTableHead",
fontName="Helvetica-Bold", fontSize=9, textColor=WHITE, alignment=TA_CENTER)
sTableCell = S("sTableCell",
fontName="Helvetica", fontSize=9, textColor=BLACK, leading=13, alignment=TA_LEFT)
sTableCellC = S("sTableCellC",
fontName="Helvetica", fontSize=9, textColor=BLACK, leading=13, alignment=TA_CENTER)
sCaption = S("sCaption",
fontName="Helvetica-Oblique", fontSize=8, textColor=MID_GRAY,
alignment=TA_CENTER, spaceAfter=6)
sRef = S("sRef",
fontName="Helvetica", fontSize=8, textColor=MID_GRAY,
leading=12, spaceAfter=2)
sBoxTitle = S("sBoxTitle",
fontName="Helvetica-Bold", fontSize=10, textColor=NAVY, spaceAfter=3)
sBoxBody = S("sBoxBody",
fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14, spaceAfter=2)
sWarning = S("sWarning",
fontName="Helvetica-Bold", fontSize=10, textColor=RED, spaceAfter=3)
sGreen = S("sGreen",
fontName="Helvetica-Bold", fontSize=10, textColor=GREEN, spaceAfter=3)
# ── Helper builders ────────────────────────────────────────────────────────────
def section(title):
return [Paragraph(f" {title}", sSectionHead), Spacer(1, 2*mm)]
def subhead(t):
return Paragraph(t, sSubHead)
def body(t):
return Paragraph(t, sBody)
def bullet(t):
return Paragraph(f"<bullet>\u2022</bullet> {t}", sBullet)
def spacer(h=4):
return Spacer(1, h*mm)
def hline(color=GRAY_LINE, thickness=0.5):
return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=4)
def colored_box(content_items, bg=LIGHT_TEAL, border=TEAL, radius=4):
inner = Table([[item] for item in content_items],
colWidths=["100%"])
inner.setStyle(TableStyle([
("BOX", (0,0), (-1,-1), 1.5, border),
("BACKGROUND", (0,0), (-1,-1), bg),
("ROUNDEDCORNERS", [radius]),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (0,0), 8),
("BOTTOMPADDING", (0,-1), (-1,-1), 8),
("ROWPADDING", (0,0), (-1,-1), 2),
]))
return inner
# ── Cover page ─────────────────────────────────────────────────────────────────
def cover_page():
items = []
items.append(spacer(12))
# Big title block
cov = Table([
[Paragraph("REFEEDING SYNDROME", S("ct", fontName="Helvetica-Bold", fontSize=28,
textColor=WHITE, alignment=TA_CENTER))],
[Paragraph("Clinical Reference & ASPEN 2020 Consensus Guidelines", S("cs", fontName="Helvetica",
fontSize=13, textColor=colors.HexColor("#A5F3FC"), alignment=TA_CENTER))],
[Spacer(1, 4*mm)],
[Paragraph("A comprehensive guide to identification, risk stratification,<br/>prevention and management", S("cd",
fontName="Helvetica-Oblique", fontSize=10.5, textColor=colors.HexColor("#E0F2FE"), alignment=TA_CENTER))],
], colWidths=[17*cm])
cov.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("ROUNDEDCORNERS", [8]),
("TOPPADDING", (0,0), (0,0), 20),
("BOTTOMPADDING", (0,-1), (-1,-1), 20),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("ROWPADDING", (0,0), (-1,-1), 4),
]))
items.append(cov)
items.append(spacer(8))
# Quick-ref boxes
qr_data = [
[Paragraph("HALLMARK", S("q1", fontName="Helvetica-Bold", fontSize=9, textColor=TEAL, alignment=TA_CENTER)),
Paragraph("TRIGGER", S("q1", fontName="Helvetica-Bold", fontSize=9, textColor=TEAL, alignment=TA_CENTER)),
Paragraph("TIMING", S("q1", fontName="Helvetica-Bold", fontSize=9, textColor=TEAL, alignment=TA_CENTER)),
Paragraph("FIRST STEP", S("q1", fontName="Helvetica-Bold", fontSize=9, textColor=TEAL, alignment=TA_CENTER))],
[Paragraph("Hypophosphatemia", S("q2", fontName="Helvetica-Bold", fontSize=11, textColor=NAVY, alignment=TA_CENTER)),
Paragraph("Carbohydrate reintroduction", S("q2", fontName="Helvetica", fontSize=9.5, textColor=BLACK, alignment=TA_CENTER)),
Paragraph("Within 5 days of refeeding", S("q2", fontName="Helvetica", fontSize=9.5, textColor=BLACK, alignment=TA_CENTER)),
Paragraph("Give thiamine BEFORE feed", S("q2", fontName="Helvetica-Bold", fontSize=9.5, textColor=RED, alignment=TA_CENTER))],
]
qr = Table(qr_data, colWidths=[4.2*cm]*4)
qr.setStyle(TableStyle([
("BOX", (0,0), (-1,-1), 1, TEAL),
("INNERGRID", (0,0), (-1,-1), 0.5, GRAY_LINE),
("BACKGROUND", (0,0), (-1,0), LIGHT_TEAL),
("BACKGROUND", (0,1), (-1,1), WHITE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
]))
items.append(qr)
items.append(spacer(6))
items.append(Paragraph("Based on: da Silva JSV et al. <i>ASPEN Consensus Recommendations for Refeeding Syndrome.</i> "
"Nutr Clin Pract. 2020;35(2):178-195. PMID: 32115791", sCaption))
items.append(spacer(4))
# TOC outline
toc_data = [
[Paragraph("CONTENTS", S("th", fontName="Helvetica-Bold", fontSize=10, textColor=WHITE, alignment=TA_CENTER))],
[Paragraph("1. Definition & History", sBoxBody)],
[Paragraph("2. Pathophysiology", sBoxBody)],
[Paragraph("3. ASPEN 2020 Severity Classification", sBoxBody)],
[Paragraph("4. Risk Stratification (ASPEN 2020)", sBoxBody)],
[Paragraph("5. Clinical Features & Manifestations", sBoxBody)],
[Paragraph("6. Prevention Protocol", sBoxBody)],
[Paragraph("7. Management Algorithm", sBoxBody)],
[Paragraph("8. Monitoring Schedule", sBoxBody)],
[Paragraph("9. Special Populations", sBoxBody)],
[Paragraph("10. Post-2020 Evidence Updates", sBoxBody)],
[Paragraph("11. References", sBoxBody)],
]
toc = Table(toc_data, colWidths=[17*cm])
toc.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,-1), LIGHT_GRAY),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
items.append(toc)
items.append(PageBreak())
return items
# ── Section 1: Definition ──────────────────────────────────────────────────────
def sec_definition():
items = []
items += section("1. DEFINITION & HISTORY")
items.append(body(
"Refeeding syndrome (RS) is a potentially life-threatening metabolic complication that occurs when "
"nutrition — oral, enteral, or parenteral — is reintroduced to a severely malnourished or starved patient. "
"It is characterised by dangerous fluid and electrolyte shifts, most notably <b>hypophosphatemia</b>, "
"driven by a surge in insulin secretion triggered by carbohydrate reintroduction."
))
items.append(spacer(2))
items.append(body(
"<b>Historical context:</b> RS was first described after World War II when severely malnourished prisoners "
"of war were refed and experienced sudden electrolyte crises and cardiac death. Modern descriptions "
"were formalised in the 1980s-2000s; the first standardised clinical definition was published by "
"the ASPEN task force in 2020."
))
items.append(spacer(3))
# ASPEN 2020 Definition box
items.append(colored_box([
Paragraph("ASPEN 2020 OFFICIAL DEFINITION", S("bt", fontName="Helvetica-Bold", fontSize=10, textColor=NAVY)),
Paragraph(
"RS = a <b>decrease in any 1, 2, or 3 of serum phosphorus, potassium, and/or magnesium levels</b> "
"occurring within <b>5 days</b> of reintroduction of calories, with or without associated organ dysfunction "
"or thiamine deficiency.",
S("bb", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=15)),
Paragraph("<i>Source: da Silva JSV et al. Nutr Clin Pract. 2020;35(2):178-195</i>",
S("bc", fontName="Helvetica-Oblique", fontSize=8, textColor=MID_GRAY)),
], bg=LIGHT_TEAL, border=TEAL))
items.append(spacer(4))
return items
# ── Section 2: Pathophysiology ─────────────────────────────────────────────────
def sec_patho():
items = []
items += section("2. PATHOPHYSIOLOGY")
items.append(subhead("During Starvation (Pre-refeeding State)"))
for t in [
"Cells shift from glucose to <b>gluconeogenesis and fatty acid oxidation</b> as primary fuel",
"Intracellular stores of phosphate, potassium, and magnesium become progressively depleted",
"Serum electrolyte levels appear <b>deceptively normal</b> — phosphate is mobilised from bone to maintain serum levels",
"Insulin secretion is suppressed; total body thiamine stores decline",
]:
items.append(bullet(t))
items.append(spacer(3))
items.append(subhead("On Refeeding — The Metabolic Cascade"))
# Cascade table
cascade = [
[Paragraph("Step", sTableHead), Paragraph("Event", sTableHead), Paragraph("Consequence", sTableHead)],
[Paragraph("1", sTableCellC), Paragraph("Carbohydrate intake resumed", sTableCell),
Paragraph("Switch from fat to glucose metabolism", sTableCell)],
[Paragraph("2", sTableCellC), Paragraph("Insulin surge", sTableCell),
Paragraph("Drives glucose, K⁺, PO₄³⁻, Mg²⁺ into cells", sTableCell)],
[Paragraph("3", sTableCellC), Paragraph("Glycolysis activated", sTableCell),
Paragraph("Phosphate consumed for ATP synthesis → serum PO₄ drops sharply", sTableCell)],
[Paragraph("4", sTableCellC), Paragraph("Na⁺/K⁺-ATPase stimulated", sTableCell),
Paragraph("Extracellular K⁺ falls → hypokalemia", sTableCell)],
[Paragraph("5", sTableCellC), Paragraph("Thiamine depleted", sTableCell),
Paragraph("Pyruvate cannot enter Krebs cycle → lactic acidosis, Wernicke's", sTableCell)],
[Paragraph("6", sTableCellC), Paragraph("Insulin causes Na⁺/H₂O retention", sTableCell),
Paragraph("Fluid overload, peripheral oedema, pulmonary oedema", sTableCell)],
]
ct = Table(cascade, colWidths=[1.5*cm, 6.5*cm, 8.5*cm])
ct.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("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"),
]))
items.append(ct)
items.append(spacer(4))
return items
# ── Section 3: ASPEN Severity Classification ───────────────────────────────────
def sec_severity():
items = []
items += section("3. ASPEN 2020 SEVERITY CLASSIFICATION")
items.append(body(
"The ASPEN 2020 consensus introduced the first standardised severity grading for RS, "
"based on percentage decline in serum phosphorus, potassium, and/or magnesium within 5 days of refeeding."
))
items.append(spacer(3))
sev = [
[Paragraph("Grade", sTableHead), Paragraph("Electrolyte Decrease", sTableHead),
Paragraph("Clinical Features", sTableHead), Paragraph("Action", sTableHead)],
[Paragraph("MILD", S("g1", fontName="Helvetica-Bold", fontSize=10, textColor=GREEN, alignment=TA_CENTER)),
Paragraph("10–20% decrease in PO₄, K⁺, and/or Mg²⁺", sTableCell),
Paragraph("Often asymptomatic; mild fatigue, muscle cramps", sTableCell),
Paragraph("Monitor closely; correct electrolytes; do not advance feeds until stable", sTableCell)],
[Paragraph("MODERATE", S("g2", fontName="Helvetica-Bold", fontSize=10, textColor=AMBER, alignment=TA_CENTER)),
Paragraph("20–30% decrease", sTableCell),
Paragraph("Weakness, nausea, paraesthesias, mild cardiac changes", sTableCell),
Paragraph("Hold or reduce feed rate; aggressive electrolyte replacement; daily monitoring", sTableCell)],
[Paragraph("SEVERE", S("g3", fontName="Helvetica-Bold", fontSize=10, textColor=RED, alignment=TA_CENTER)),
Paragraph(">30% decrease AND/OR organ dysfunction AND/OR thiamine deficiency", sTableCell),
Paragraph("Cardiac arrhythmia, respiratory failure, seizures, rhabdomyolysis, encephalopathy", sTableCell),
Paragraph("STOP feeds; ICU monitoring; IV electrolyte replacement; thiamine 100 mg IV stat", sTableCell)],
]
st = Table(sev, colWidths=[2.2*cm, 4.2*cm, 5.2*cm, 5.0*cm])
st.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,1), GREEN_BG),
("BACKGROUND", (0,2), (-1,2), AMBER_BG),
("BACKGROUND", (0,3), (-1,3), RED_BG),
("BOX", (0,0), (-1,-1), 1.5, NAVY),
("INNERGRID", (0,0), (-1,-1), 0.4, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(st)
items.append(spacer(2))
items.append(Paragraph(
"ASPEN 2020 — da Silva JSV et al. Nutr Clin Pract. 2020;35(2):178-195. PMID: 32115791", sCaption))
items.append(spacer(4))
return items
# ── Section 4: Risk Stratification ────────────────────────────────────────────
def sec_risk():
items = []
items += section("4. RISK STRATIFICATION (ASPEN 2020)")
items.append(body(
"All patients should be screened for RS risk prior to initiating nutrition support. "
"ASPEN 2020 defines two risk tiers based on clinical criteria."
))
items.append(spacer(3))
# Two-column risk table
risk = [
[Paragraph("HIGHEST RISK — ONE criterion sufficient", S("h1", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE, alignment=TA_CENTER)),
Paragraph("MODERATE RISK — TWO criteria needed", S("h2", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE, alignment=TA_CENTER))],
[Paragraph("• BMI < 16 kg/m²", sBullet), Paragraph("• BMI 16–18.5 kg/m²", sBullet)],
[Paragraph("• Unintentional weight loss >15% over 3–6 months", sBullet),
Paragraph("• Unintentional weight loss >10% in 6 months, or 5% in 1 month", sBullet)],
[Paragraph("• No/negligible nutritional intake >10 days", sBullet),
Paragraph("• No/negligible intake 5–6 days, or <75% estimated energy for >7 days during acute illness", sBullet)],
[Paragraph("• Pre-feeding low serum PO₄, K⁺, or Mg²⁺", sBullet),
Paragraph("• Minimally low electrolytes, or recently corrected with single-dose supplementation", sBullet)],
[Paragraph("• Severe loss of subcutaneous fat or muscle mass", sBullet),
Paragraph("• Moderate loss of subcutaneous fat or muscle", sBullet)],
[Paragraph("• <50% estimated energy requirements >1 month", sBullet),
Paragraph("• <75% estimated energy requirements >1 month", sBullet)],
[Paragraph("• Higher-risk comorbidities: AIDS, active cancer, chronic alcohol/drug use, post-bariatric surgery", sBullet),
Paragraph("• History of alcohol or drug misuse; use of insulin, chemotherapy, diuretics, antacids", sBullet)],
]
rt = Table(risk, colWidths=[8.25*cm, 8.25*cm])
rt.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), RED),
("BACKGROUND", (1,0), (1,0), AMBER),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1.5, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("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), "TOP"),
]))
items.append(rt)
items.append(spacer(2))
items.append(Paragraph("ASPEN 2020 — da Silva JSV et al. Nutr Clin Pract. 2020;35(2):178-195", sCaption))
items.append(spacer(4))
return items
# ── Section 5: Clinical Features ──────────────────────────────────────────────
def sec_clinical():
items = []
items += section("5. CLINICAL FEATURES & MANIFESTATIONS")
items.append(body(
"Symptoms typically appear within <b>72 hours</b> of initiating refeeding. "
"Presentation is multi-system and reflects the combined effects of hypophosphatemia, hypokalemia, "
"hypomagnesemia, thiamine deficiency, and fluid overload."
))
items.append(spacer(3))
clin = [
[Paragraph("System", sTableHead), Paragraph("Features", sTableHead),
Paragraph("Primary Cause", sTableHead)],
[Paragraph("Cardiovascular", sTableCell),
Paragraph("Arrhythmias, cardiac arrest, heart failure, QT prolongation, hypotension", sTableCell),
Paragraph("↓PO₄ → reduced ATP; ↓K⁺ → membrane instability", sTableCell)],
[Paragraph("Respiratory", sTableCell),
Paragraph("Respiratory failure, ventilator dependence, failure to wean", sTableCell),
Paragraph("↓PO₄ → diaphragmatic weakness", sTableCell)],
[Paragraph("Neurological", sTableCell),
Paragraph("Confusion, encephalopathy, seizures, coma, Wernicke's encephalopathy", sTableCell),
Paragraph("Thiamine deficiency; ↓PO₄, ↓Mg²⁺", sTableCell)],
[Paragraph("Musculoskeletal", sTableCell),
Paragraph("Muscle weakness, myopathy, rhabdomyolysis, paraesthesias", sTableCell),
Paragraph("↓PO₄, ↓K⁺, ↓Mg²⁺", sTableCell)],
[Paragraph("Haematological", sTableCell),
Paragraph("Haemolytic anaemia, impaired leukocyte function, thrombocytopenia", sTableCell),
Paragraph("↓PO₄ → impaired RBC and WBC function", sTableCell)],
[Paragraph("Fluid/Metabolic", sTableCell),
Paragraph("Peripheral oedema, pulmonary oedema, hyperglycaemia, lactic acidosis", sTableCell),
Paragraph("Insulin-mediated Na⁺/H₂O retention; thiamine deficiency", sTableCell)],
]
ct = Table(clin, colWidths=[3.5*cm, 7.5*cm, 5.5*cm])
ct.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(ct)
items.append(spacer(4))
items.append(subhead("Key Laboratory Findings"))
labs = [
["Electrolyte", "Finding", "Normal Range"],
["Phosphate", "↓↓ (hallmark)", "0.8–1.45 mmol/L"],
["Potassium", "↓", "3.5–5.0 mmol/L"],
["Magnesium", "↓", "0.7–1.0 mmol/L"],
["Calcium", "↓ (often)", "2.1–2.6 mmol/L"],
["Thiamine (B1)", "↓ (functional deficiency)", "Variable"],
["Blood glucose", "↑ or ↓ (unstable)", "4–7 mmol/L fasting"],
["Lactate", "↑ (if thiamine deficient)", "<2 mmol/L"],
]
lt = Table([[Paragraph(c, sTableHead if r==0 else (sTableCellC if i==0 else sTableCell))
for i, c in enumerate(row)] for r, row in enumerate(labs)],
colWidths=[4.5*cm, 7.5*cm, 4.5*cm])
lt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
]))
items.append(lt)
items.append(spacer(4))
return items
# ── Section 6: Prevention ──────────────────────────────────────────────────────
def sec_prevention():
items = []
items += section("6. PREVENTION PROTOCOL (ASPEN 2020)")
items.append(body(
"Prevention is the cornerstone of management. The following stepwise protocol is based on "
"ASPEN 2020 consensus recommendations and is applicable to all routes of nutrition support."
))
items.append(spacer(3))
steps = [
("STEP 1 — Screen for Risk", RED,
"Use ASPEN 2020 criteria (Section 4) to classify every patient as highest risk, moderate risk, or low risk "
"BEFORE initiating any nutrition support."),
("STEP 2 — Correct Electrolyte Deficits", AMBER,
"Check and correct serum phosphate, potassium, magnesium, and calcium BEFORE starting feeds. "
"Do not initiate nutrition while electrolytes are significantly deranged."),
("STEP 3 — Give Thiamine", RED,
"Administer thiamine 100 mg IV/IM BEFORE the first feed or any glucose-containing fluid. "
"Continue 100 mg/day for 5–7 days (longer in severe starvation, chronic alcoholism, or clinical thiamine deficiency)."),
("STEP 4 — Start Low", TEAL,
"Begin at 10 kcal/kg/day (or 25% of target calories for ICU patients per ASPEN/SCCM 2021 critical care guidelines). "
"For highest-risk patients: ≤10 kcal/kg/day initially."),
("STEP 5 — Advance Slowly", TEAL,
"Increase calories over 4–7 days toward full target. Do NOT advance the rate if electrolytes are falling."),
("STEP 6 — Supplement Vitamins", GREEN,
"Give daily multivitamin and trace element supplements for the first week of refeeding."),
("STEP 7 — Monitor Closely", NAVY,
"See Section 8 for the full monitoring schedule. Respond promptly to any electrolyte decline."),
]
for title, col, text in steps:
step_t = Table([[
Paragraph(title, S("st", fontName="Helvetica-Bold", fontSize=10, textColor=WHITE)),
Paragraph(text, S("sb", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14)),
]], colWidths=[5.5*cm, 11*cm])
step_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), col),
("BACKGROUND", (1,0), (1,0), LIGHT_GRAY),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(step_t)
items.append(spacer(2))
items.append(spacer(2))
return items
# ── Section 7: Management ──────────────────────────────────────────────────────
def sec_management():
items = []
items += section("7. MANAGEMENT ALGORITHM")
items.append(body(
"When RS develops (electrolyte fall identified), the following actions should be taken "
"immediately, graded by severity."
))
items.append(spacer(3))
mgmt = [
[Paragraph("Action", sTableHead), Paragraph("Mild RS", sTableHead),
Paragraph("Moderate RS", sTableHead), Paragraph("Severe RS", sTableHead)],
[Paragraph("Feeding", sTableCellC),
Paragraph("Continue at current rate; do not advance", sTableCell),
Paragraph("Reduce feed rate by 50% or hold", sTableCell),
Paragraph("STOP feeds immediately", sTableCell)],
[Paragraph("Phosphate replacement", sTableCellC),
Paragraph("Oral/NG: sodium/potassium phosphate", sTableCell),
Paragraph("IV phosphate preferred", sTableCell),
Paragraph("IV phosphate urgently; aim to correct within 24h", sTableCell)],
[Paragraph("Potassium", sTableCellC),
Paragraph("Oral KCl if tolerating", sTableCell),
Paragraph("IV KCl with cardiac monitoring", sTableCell),
Paragraph("IV KCl; continuous cardiac monitoring", sTableCell)],
[Paragraph("Magnesium", sTableCellC),
Paragraph("Oral Mg supplement", sTableCell),
Paragraph("IV Mg sulphate", sTableCell),
Paragraph("IV Mg sulphate urgently", sTableCell)],
[Paragraph("Thiamine", sTableCellC),
Paragraph("Ensure 100 mg/day PO/IV", sTableCell),
Paragraph("100 mg IV/IM daily", sTableCell),
Paragraph("100 mg IV stat then daily; Wernicke's protocol if encephalopathic", sTableCell)],
[Paragraph("Monitoring", sTableCellC),
Paragraph("Daily electrolytes; resume advances only when stable x 24h", sTableCell),
Paragraph("Electrolytes 6–12 hourly; ECG", sTableCell),
Paragraph("ICU admission; continuous monitoring; electrolytes 4–6 hourly", sTableCell)],
[Paragraph("Restart feeds", sTableCellC),
Paragraph("Can cautiously advance after 24h stability", sTableCell),
Paragraph("Restart at lower rate after correction", sTableCell),
Paragraph("Only after full electrolyte correction and clinical stability", sTableCell)],
]
mt = Table(mgmt, colWidths=[3.5*cm, 4.2*cm, 4.2*cm, 4.7*cm])
mt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (1,1), (1,-1), GREEN_BG),
("BACKGROUND", (2,1), (2,-1), AMBER_BG),
("BACKGROUND", (3,1), (3,-1), RED_BG),
("BOX", (0,0), (-1,-1), 1.5, NAVY),
("INNERGRID", (0,0), (-1,-1), 0.4, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (0,-1), LIGHT_GRAY),
]))
items.append(mt)
items.append(spacer(4))
return items
# ── Section 8: Monitoring ──────────────────────────────────────────────────────
def sec_monitoring():
items = []
items += section("8. MONITORING SCHEDULE")
items.append(spacer(2))
mon = [
[Paragraph("Parameter", sTableHead), Paragraph("Frequency", sTableHead),
Paragraph("Target / Action Threshold", sTableHead)],
[Paragraph("Serum phosphate", sTableCell), Paragraph("Daily for first 7 days, then every 2–3 days", sTableCell),
Paragraph(">0.8 mmol/L; replace if ↓ by ≥10% from baseline", sTableCell)],
[Paragraph("Serum potassium", sTableCell), Paragraph("Daily for first 7 days", sTableCell),
Paragraph(">3.5 mmol/L; replace if ↓ by ≥10%", sTableCell)],
[Paragraph("Serum magnesium", sTableCell), Paragraph("Daily for first 7 days", sTableCell),
Paragraph(">0.7 mmol/L; replace if ↓ by ≥10%", sTableCell)],
[Paragraph("Serum calcium", sTableCell), Paragraph("Daily for first 5 days", sTableCell),
Paragraph("Corrected Ca²⁺ >2.1 mmol/L", sTableCell)],
[Paragraph("Blood glucose", sTableCell), Paragraph("4–6 hourly initially; reduce when stable", sTableCell),
Paragraph("Target 6–10 mmol/L (ICU); adjust insulin accordingly", sTableCell)],
[Paragraph("Fluid balance", sTableCell), Paragraph("Daily weight + strict I&O", sTableCell),
Paragraph("Avoid >1–2 kg weight gain/day; suggests fluid retention", sTableCell)],
[Paragraph("Vital signs / ECG", sTableCell), Paragraph("Continuous in severe RS; 4-hourly in moderate", sTableCell),
Paragraph("Any new arrhythmia requires urgent review", sTableCell)],
[Paragraph("Thiamine status", sTableCell), Paragraph("Clinical assessment daily", sTableCell),
Paragraph("Re-dose if any signs of encephalopathy, ataxia, ophthalmoplegia", sTableCell)],
]
mont = Table(mon, colWidths=[4*cm, 6*cm, 6.5*cm])
mont.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(mont)
items.append(spacer(4))
return items
# ── Section 9: Special Populations ────────────────────────────────────────────
def sec_special():
items = []
items += section("9. SPECIAL POPULATIONS")
pops = [
("Anorexia Nervosa",
"Extremely high risk. Hypokalemia and low pre-albumin are predictors of RS. "
"Start at 5–10 kcal/kg/day; admit to medical facility. Monitor QTc — prolongation may precede fatal arrhythmia. "
"Multidisciplinary approach essential."),
("Chronic Alcoholism",
"High risk due to thiamine depletion, poor intake, and alcohol-related organ damage. "
"Give thiamine 200–500 mg IV (Pabrinex) BEFORE any glucose. "
"Wernicke's encephalopathy is a medical emergency — do not give glucose first."),
("Post-Bariatric Surgery",
"ASPEN 2020 classifies post-bariatric patients as highest-risk. "
"Deficiencies of thiamine, B12, iron, zinc may coexist. Screen carefully before any supplemental feeding programme."),
("ICU / Critically Ill",
"Per ASPEN/SCCM 2021 critical care guidelines: screen for RS before initiating EN/PN. "
"Start trophic (trophic = 25% goal calories) for first 24–48h in highest-risk patients. "
"Advance only when haemodynamically stable and electrolytes corrected."),
("Cancer Patients",
"Often combined nutritional deficits from poor intake, chemotherapy, and metabolic derangement. "
"ASPEN 2020 identifies AIDS and active cancer as highest-risk comorbidities."),
("Paediatrics",
"RS criteria and thresholds differ in paediatric patients. "
"The ASPEN 2020 consensus covers paediatric populations; refer to ASPEN paediatric critical care guidelines (2017) for age-specific caloric targets."),
]
for title, text in pops:
row = Table([[
Paragraph(title, S("pt", fontName="Helvetica-Bold", fontSize=10, textColor=NAVY)),
Paragraph(text, sBodyJ := S("pbj", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14)),
]], colWidths=[4.5*cm, 12.0*cm])
row.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_TEAL),
("BACKGROUND", (1,0), (1,0), WHITE),
("BOX", (0,0), (-1,-1), 0.8, GRAY_LINE),
("LINEAFTER", (0,0), (0,0), 1, TEAL),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(row)
items.append(spacer(2))
items.append(spacer(2))
return items
# ── Section 10: Evidence Updates ──────────────────────────────────────────────
def sec_evidence():
items = []
items += section("10. POST-2020 EVIDENCE UPDATES (2021–2026)")
items.append(body(
"The ASPEN 2020 consensus remains the current reference standard — no updated ASPEN "
"refeeding-syndrome-specific guideline has been published as of July 2026. "
"The following key studies have contributed to the evidence base since publication."
))
items.append(spacer(3))
ev = [
[Paragraph("Study", sTableHead), Paragraph("Year", sTableHead),
Paragraph("Design", sTableHead), Paragraph("Key Finding", sTableHead)],
[Paragraph("Cioffi I et al.\nClin Nutr. PMID: 34134001", sTableCell),
Paragraph("2021", sTableCellC),
Paragraph("Systematic review & meta-analysis", sTableCell),
Paragraph("Pooled RS incidence ~34% in high-risk populations; high heterogeneity due to inconsistent definitions underscores need for ASPEN 2020 criteria adoption", sTableCell)],
[Paragraph("Alencar LO et al.\nNutrition. PMID: 39317131", sTableCell),
Paragraph("2024", sTableCellC),
Paragraph("Systematic review (ICU, 20 studies)", sTableCell),
Paragraph("RS occurred in up to 52.5% of ICU patients; most institutions do NOT follow ASPEN/NICE caloric progression protocols; no single feeding method proven superior", sTableCell)],
[Paragraph("Zheng P et al.\nNutr Clin Pract. PMID: 39187889", sTableCell),
Paragraph("2025", sTableCellC),
Paragraph("Systematic review of risk factors", sTableCell),
Paragraph("Validated ASPEN 2020 risk factors across adult populations; hypokalemia and low pre-albumin among strongest predictors", sTableCell)],
[Paragraph("Schneider L et al.\nSci Rep. PMID: 41735500", sTableCell),
Paragraph("2026", sTableCellC),
Paragraph("Systematic review & meta-analysis (28 studies, n=10,412)", sTableCell),
Paragraph("Pooled RS incidence in critically ill: 23% (95% CI 15–33%); RS not statistically associated with mortality (OR 1.51, CI 0.79–2.88) — though certainty of evidence was LOW and heterogeneity high (I²=99%)", sTableCell)],
[Paragraph("ESPEN Surgery Guideline\nClin Nutr. PMID: 40957230", sTableCell),
Paragraph("2025", sTableCellC),
Paragraph("Clinical practice guideline (44 recommendations)", sTableCell),
Paragraph("Explicitly cross-references ASPEN 2020 for RS prevention; adds frailty, sarcopenia, and prehabilitation recommendations for perioperative nutrition", sTableCell)],
]
et = Table(ev, colWidths=[4.0*cm, 1.5*cm, 4.0*cm, 7.0*cm])
et.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("BOX", (0,0), (-1,-1), 1, GRAY_LINE),
("INNERGRID", (0,0), (-1,-1), 0.3, GRAY_LINE),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
items.append(et)
items.append(spacer(3))
# Ongoing gaps box
items.append(colored_box([
Paragraph("ONGOING KNOWLEDGE GAPS (as of 2026)", S("bt", fontName="Helvetica-Bold", fontSize=10, textColor=NAVY)),
Paragraph("• No universally accepted diagnostic criteria beyond ASPEN 2020 — uptake remains inconsistent across institutions", sBullet),
Paragraph("• Optimal caloric initiation rate (10 kcal/kg/day vs. 25% of target) remains debated for different clinical settings", sBullet),
Paragraph("• Whether RS independently increases mortality in critically ill patients remains uncertain (2026 meta-analysis: non-significant association, low evidence quality)", sBullet),
Paragraph("• No updated ASPEN RS-specific guideline published 2021–2026", sBullet),
], bg=AMBER_BG, border=AMBER))
items.append(spacer(4))
return items
# ── Section 11: References ─────────────────────────────────────────────────────
def sec_references():
items = []
items += section("11. REFERENCES")
refs = [
"1. da Silva JSV, Seres DS, Sabino K, et al. ASPEN Consensus Recommendations for Refeeding Syndrome. "
"<i>Nutr Clin Pract.</i> 2020;35(2):178-195. PMID: 32115791. [Erratum: PMID 32383800]",
"2. Cioffi I, Ponzo V, Pellegrini M, et al. The incidence of the refeeding syndrome. A systematic review "
"and meta-analyses of literature. <i>Clin Nutr.</i> 2021;40(6):3688-3701. PMID: 34134001",
"3. Alencar LO, Neto JEF, Beserra EA, Mendes JFR. Nutritional therapy in intensive care unit inpatients "
"at risk for refeeding syndrome: A systematic review. <i>Nutrition.</i> 2024. PMID: 39317131",
"4. Zheng P, Chen Y, Chen F. Risk factors for the development of refeeding syndrome in adults: "
"A systematic review. <i>Nutr Clin Pract.</i> 2025. PMID: 39187889",
"5. Schneider L, Nedel WL, Perez AV, et al. Incidence and mortality of refeeding syndrome in critically ill "
"patients: a systematic review and meta-analysis. <i>Sci Rep.</i> 2026;Feb 25. PMID: 41735500",
"6. Weimann A, Bezmarevic M, Braga M, et al. ESPEN guideline on clinical nutrition in surgery - Update 2025. "
"<i>Clin Nutr.</i> 2025. PMID: 40957230",
"7. Kiss N, Findlay M, Frowen J, et al. Guidelines for nutrition in adults with head and neck cancer: "
"The American Society for Parenteral and Enteral Nutrition. <i>JPEN.</i> 2026. PMID: 41773753",
"8. NICE Clinical Guideline CG32. Nutrition support for adults: oral nutrition support, enteral tube "
"feeding and parenteral nutrition. London: NICE; 2017 (last updated).",
"9. Taylor BE, McClave SA, Martindale RG, et al. Guidelines for the Provision and Assessment of Nutrition "
"Support Therapy in the Adult Critically Ill Patient: SCCM and ASPEN. <i>Crit Care Med.</i> 2016;44(2):390-438. "
"[Updated summary published 2021]",
"10. Yamada's Textbook of Gastroenterology, 7th ed. Wiley-Blackwell; 2023. Chapter 23: Nutrition Support.",
"11. Bailey and Love's Short Practice of Surgery, 28th ed. CRC Press; 2023. Chapter 25.",
"12. Schwartz's Principles of Surgery, 11th ed. McGraw-Hill; 2019.",
]
for r in refs:
items.append(Paragraph(r, sRef))
items.append(spacer(1))
items.append(spacer(6))
items.append(hline(GRAY_LINE))
items.append(Paragraph(
"This document synthesises ASPEN 2020 Consensus Recommendations and supporting literature. "
"It is intended as a clinical reference tool and does not replace institutional protocols or individual clinical judgment. "
"Generated: July 2026.",
S("disc", fontName="Helvetica-Oblique", fontSize=8, textColor=MID_GRAY, alignment=TA_CENTER)
))
return items
# ── Build document ─────────────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm,
rightMargin=1.5*cm,
topMargin=3.5*cm,
bottomMargin=2.0*cm,
title="Refeeding Syndrome — ASPEN 2020 Guidelines",
author="Clinical Reference Document",
subject="Nutrition Support",
)
story = []
story += cover_page()
story += sec_definition()
story += sec_patho()
story += sec_severity()
story += sec_risk()
story += sec_clinical()
story += sec_prevention()
story += sec_management()
story += sec_monitoring()
story += sec_special()
story += sec_evidence()
story += sec_references()
doc.build(story, onFirstPage=header_footer, onLaterPages=header_footer)
print(f"PDF saved to: {OUTPUT}")
if __name__ == "__main__":
build()
cd /home/daytona/workspace/refeeding-syndrome && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/refeeding-syndrome/Refeeding_Syndrome_ASPEN_Guide…
Refeeding Syndrome ASPEN Guidelines
PDF Document · PDF
| Section | Content |
|---|---|
| Cover page | Quick-reference tiles (hallmark, trigger, timing, first step) + table of contents |
| 1. Definition & History | ASPEN 2020 official definition box with citation |
| 2. Pathophysiology | Step-by-step metabolic cascade table (starvation → insulin surge → electrolyte shifts → organ failure) |
| 3. ASPEN 2020 Severity Classification | Colour-coded Mild / Moderate / Severe grading table (green / amber / red) |
| 4. Risk Stratification | Side-by-side Highest Risk vs. Moderate Risk criteria table (ASPEN 2020) |
| 5. Clinical Features | Multi-system manifestations + key laboratory findings table |
| 6. Prevention Protocol | 7-step protocol (screen → correct electrolytes → thiamine → start low → advance slowly → vitamins → monitor) |
| 7. Management Algorithm | Graded response table by severity: feeding adjustments, electrolyte replacement, monitoring intensity |
| 8. Monitoring Schedule | Frequency and target thresholds for all key parameters |
| 9. Special Populations | Anorexia nervosa, alcoholism, post-bariatric, ICU, cancer, paediatrics |
| 10. Post-2020 Evidence | 5 key studies (2021-2026) including the 2026 meta-analysis (Schneider et al.) and ongoing knowledge gaps |
| 11. References | 12 fully cited references (ASPEN 2020, ESPEN 2025, NICE 2017, major textbooks) |