Clinical protocol for Ca breast patients prehabilitation

Reading File
Finding Sources
Finding Sources
Searching PubMed

prehabilitation breast cancer surgery protocol

Searching the Web

clinical protocol prehabilitation breast cancer surgery 2024 2025

Reading File
Finding Sources
Searching PubMed

prehabilitation breast cancer exercise nutrition

Reading Web Page

https://pmc.ncbi.nlm.nih.gov/articles/PMC12384665

Reading File
Reading Article

PMID: 36269525

Finding Sources
Reading File
Finding Sources
Searching PubMed

prehabilitation cancer multimodal outcomes complications

I now have rich content from Sabiston Textbook of Surgery, the top systematic review (Toohey 2023), and the latest PMC review. Let me compile the full clinical protocol.

Clinical Prehabilitation Protocol for Breast Cancer (Ca Breast) Patients

Definition and Rationale

Prehabilitation is the process of optimizing a patient's functional capacity, nutritional status, and psychological readiness before surgical intervention or systemic treatment. In breast cancer patients, this is particularly relevant because:
  • Surgery (mastectomy, lumpectomy, axillary dissection, reconstructive procedures) and neoadjuvant chemotherapy both impose significant physiologic stress
  • Preoperative functional reserve predicts postoperative complications, hospital length of stay, and long-term recovery
  • The window of neoadjuvant therapy (chemotherapy/radiotherapy before surgery) provides an ideal structured time frame for prehabilitation - no surgical delay is needed
  • Prehabilitation has been shown to improve physical function, quality of life, and psychosocial outcomes in breast cancer patients (Toohey et al., Breast Cancer Res Treat 2023 - systematic review of 14 studies, 7 RCTs) [PMID: 36269525]

Phase 1: Initial Assessment (Weeks -6 to -4 Before Treatment)

1.1 Functional Assessment

ToolPurpose
6-Minute Walk Test (6MWT)Cardiorespiratory fitness baseline
Timed Up and Go (TUG)Mobility, balance, fall risk
Grip strength dynamometryLean muscle mass proxy; upper limb function
ECOG / Karnofsky Performance StatusFunctional classification
Short Physical Performance Battery (SPPB)Comprehensive physical function
Frailty screening (CFS, FRAIL scale)Identifies high-risk patients needing intensified support

1.2 Nutritional Assessment

ToolPurpose
NRS-2002 or MUST screeningIdentify malnutrition risk
Full dietary history + body composition (DEXA or bioimpedance)Muscle mass, fat mass
Pre-albumin, albumin, CRPInflammatory and nutritional markers
BMI + weight trajectoryObesity or cachexia management

1.3 Psychological Assessment

ToolPurpose
HADS (Hospital Anxiety and Depression Scale)Detect anxiety/depression
Distress ThermometerQuick oncology distress screening
PSQI or ISISleep quality (insomnia is prevalent pre-treatment)
Coping strategies self-reportGuides psychological support modality
Perioperative anxiety is estimated to affect >50% of cancer patients and is associated with increased anesthetic requirements, higher rates of postoperative nausea/vomiting, delirium, and non-home discharges (Sabiston Textbook of Surgery, p. 365).

1.4 Medical Optimization

  • Cardiac evaluation (ECG, echo if indicated) per ACC/AHA guidelines
  • Pulmonary function if symptomatic or smoker
  • Glycemic control: target HbA1c <8% before elective surgery
  • Medications review: anticoagulants, steroids, immunosuppressants, NSAIDs
  • Anemia work-up and treatment: target Hb ≥10 g/dL; iron supplementation, EPO if indicated

Phase 2: Multimodal Prehabilitation Program (Weeks -6 to -1)

2.1 Exercise Component

Aerobic Training:
  • Frequency: 3-5 sessions/week
  • Modality: Walking, cycling, swimming (low-impact preferred post-diagnosis)
  • Intensity: Moderate (50-70% HRmax; RPE 11-14 on Borg scale)
  • Duration: 20-45 minutes/session; progressive
  • Minimum pre-treatment target: 150 min/week moderate-intensity (per WCRF/AICR guidelines)
Resistance/Strength Training:
  • Frequency: 2-3 sessions/week (non-consecutive days)
  • Muscle groups: Full body, with specific emphasis on upper limb and shoulder girdle
  • Intensity: 2-3 sets of 8-15 reps at 50-70% 1-rep max
  • Purpose: Counteract sarcopenia (prevalence 10-24% in breast cancer - Jang et al., 2024); preserve lean mass through chemotherapy
Shoulder & Upper Limb Prehabilitation (Breast-Cancer Specific):
  • Active and passive range of motion (ROM) exercises for shoulder
  • Pendulum exercises; wall climbing; overhead reaches
  • Rationale: Reduces post-surgical upper limb disability and axillary web syndrome (AWS)
  • The PROSPER trial demonstrated reduced upper limb disability after breast cancer surgery with structured exercise programs (Sabiston Textbook of Surgery, p. 365, REHABILITATION section)
Breathing/Pulmonary Prehabilitation:
  • Incentive spirometry: 10 reps every 2 hours while awake
  • Diaphragmatic breathing exercises
  • If mastectomy + reconstruction planned: pectoralis and chest wall mobility exercises
Vagal Activation Techniques (VATs) [based on ATENTO Protocol]:
  • Slow deep breathing (5 sec inhale / 5 sec exhale), yoga-based breathing
  • Especially relevant if patient is undergoing anthracycline or taxane chemotherapy (cardiotoxicity risk)

2.2 Nutritional Component

Goals:
  • Correct existing malnutrition or pre-sarcopenia
  • Build nutritional reserves before catabolic phase of surgery/chemotherapy
  • Target protein intake: 1.2-2.0 g/kg/day (cancer patients, per ESPEN guidelines)
  • Caloric target: 25-35 kcal/kg/day
Key Interventions:
  • Registered dietitian-led individualized dietary counseling
  • High-protein dietary optimization (lean meats, legumes, dairy, eggs)
  • Oral nutritional supplements (ONS) if dietary intake inadequate
  • Omega-3 fatty acid supplementation (1-2 g/day EPA+DHA): anti-inflammatory, may reduce cancer-related cachexia
  • Micronutrient correction: Vitamin D (target >30 ng/mL), iron, B12, folate as indicated
  • Pre-treatment carbohydrate loading (if no diabetes): 400 mL carbohydrate drink the evening before and morning of surgery
  • Manage obesity if BMI >30: modest caloric restriction combined with exercise (not aggressive caloric restriction)
WCRF International Physical Activity & Nutrition Recommendations are the framework basis for pre-chemotherapy prehabilitation in breast cancer (Di Leone multidisciplinary model; ATENTO protocol).

2.3 Psychological / Psychosocial Component

Evidence-based interventions:
  • Cognitive Behavioral Therapy (CBT): First-line for anxiety and depression (structured 4-8 session program)
  • Sleep Restriction Therapy (SRT): For patients with insomnia prior to chemotherapy/surgery (INVEST trial protocol - nurse-delivered, 4-week program); early management improves QOL and potentially survival
  • Mindfulness-Based Stress Reduction (MBSR): 8-week program; reduces cortisol, improves anxiety/depression
  • Guided imagery and music therapy: Evidence-based adjuncts; reduce perioperative anxiety
  • Acupuncture: Shown effective for anxiety mitigation in preoperative period
  • Peer support groups / breast cancer navigator: Social support structures
Multiple modalities can be individualized to hospital resources and patient preference, allowing customization while maintaining evidence-based practice (Sabiston Textbook of Surgery, p. 365).

2.4 Smoking and Substance Cessation

  • Smoking cessation at least 4-6 weeks before surgery (6-8 weeks for optimal pulmonary benefit)
  • Nicotine replacement therapy (NRT), varenicline, or bupropion per guidelines
  • Alcohol: screen with AUDIT-C; brief intervention (FRAMES model) for hazardous use; >2 drinks/day associated with increased postoperative infections, pulmonary complications, longer ICU stay
  • Opioid use: Screen and optimize; high preoperative opioid use predicts readmission
  • Integrate with ACS Strong for Surgery framework if available

Phase 3: ERAS Integration and Perioperative Bridge (Week -1 to Day of Surgery)

InterventionTimingPurpose
Preoperative carbohydrate loadingNight before + 2h before surgeryAttenuate insulin resistance, reduce catabolic response
Avoid prolonged preoperative fastingPer ERAS protocol (clear fluids up to 2h)Reduce perioperative stress
Anxiolysis (non-pharmacologic preferred)Night before and morning of surgeryReduce anesthetic requirements
Breathing exercise reinforcementFinal weekReduce postoperative pulmonary complications
Skin preparation / chlorhexidine washPer institutional protocolReduce SSI
DVT prophylaxis planningPre-admissionLMWH initiation plan
Patient education sessionFinal pre-op visitSet expectations, teach postoperative exercises
ERAS + Prehabilitation (PreHab) work synergistically: one study found the combination shortened hospital stay, reduced intraoperative blood loss, improved costs by 22% over ERAS alone (Sabiston Textbook of Surgery, p. 365).

Phase 4: Postoperative Rehabilitation (Bridge Component)

While technically rehabilitation rather than prehabilitation, early postoperative programs initiated after breast cancer surgery should be planned during the prehabilitation phase:
TimeframeFocus
POD 0-1Early mobilization; ankle pumps; deep breathing; arm positioning
POD 2-7Pendulum exercises; elbow/wrist/finger ROM; walking program
Week 2-4Progressive shoulder ROM (avoid abduction >90° until drains removed)
Week 4-6Full shoulder ROM; progressive resistance; scar mobilization
Week 6+Return to full activity; lymphedema screening; DASH/SPADI outcomes

Screening Tools Summary

DomainPreferred Tool
Physical function6MWT, SPPB, TUG, Grip strength
FrailtyCFS (Clinical Frailty Scale) or FRAIL scale
NutritionNRS-2002 or MUST; DEXA if available
Anxiety/DepressionHADS, Distress Thermometer
SleepISI (Insomnia Severity Index)
Upper limb functionDASH or SPADI (at baseline and follow-up)
LymphedemaLLIS (Lymphedema Life Impact Scale)
Cardiorespiratory fitness6MWT or CPET if high-risk cardiac patient

Multidisciplinary Team

  • Surgeon / Breast Oncologist - treatment planning, surgical timing
  • Medical Oncologist - neoadjuvant chemotherapy coordination
  • Physiotherapist / Physical Therapist - exercise prescription, upper limb program
  • Registered Dietitian - nutritional assessment and intervention
  • Psycho-oncologist / Clinical Psychologist - CBT, MBSR, insomnia management
  • Oncology Nurse / Nurse Navigator - coordination, patient education
  • Anesthesiologist - perioperative optimization, ERAS integration
  • Social Worker - support systems, transportation barriers

Evidence Base

StudyFindingLevel
Toohey et al. 2023 [PMID: 36269525]Multimodal prehabilitation in breast cancer improves physical function, QoL, and psychosocial outcomes (14 studies, 7 RCTs)Systematic Review (Level 1)
Pietrakiewicz et al. 2025 [PMID: 40867298]Prehabilitation prior to chemotherapy improves fitness (VO2max), nutritional reserves, and mental well-beingReview
Kwan et al. 2026 [PMID: 41595205]Prehabilitation in cancer patients undergoing chemo/radiotherapy - scoping review confirming benefitScoping Review
PREHAB RCT (McGill)4-week supervised prehabilitation (exercise + nutrition + psychology + smoking cessation) reduced severe postoperative complications by 50% and improved postoperative functional capacityRCT (Level 2)
PROSPER trialPostoperative exercise programs reduced upper limb disability after breast cancer surgeryRCT (Level 2)
Sabiston Textbook of Surgery, p. 363-367Comprehensive prehabilitation framework; strong evidence for multimodal approach in surgical oncologyTextbook

Special Considerations for Breast Cancer

  1. Neoadjuvant chemotherapy window: For patients receiving neoadjuvant therapy (anthracyclines, taxanes, HER2-targeted agents), the 12-24 weeks of chemotherapy before surgery creates an ideal prehabilitation window - exercise during this period counteracts chemotherapy-induced fatigue, sarcopenia, and cardiotoxicity.
  2. Axillary procedures: Patients undergoing sentinel lymph node biopsy (SLNB) or axillary lymph node dissection (ALND) need dedicated shoulder and axillary ROM prehabilitation to prevent axillary web syndrome and shoulder dysfunction.
  3. Reconstruction: Immediate breast reconstruction (IBR) extends surgery duration and recovery - more intensive prehabilitation with chest wall, pectoralis, and core strengthening is indicated.
  4. Lymphedema prevention: Arm precautions education preoperatively; baseline arm circumference measurement; prehabilitation upper limb exercise does NOT increase lymphedema risk (evidence confirms safety).
  5. Cardiotoxicity risk: Patients receiving anthracyclines (doxorubicin) or trastuzumab - baseline ECHO / MUGA scan, cardiac fitness monitoring throughout prehabilitation; aerobic exercise may have cardioprotective effects.
  6. Body image / psychosocial: Mastectomy and body-altering surgery have significant psychological impact; early psychological prehabilitation and peer support are particularly important in this population.

Implementation Models

  • McGill POP (Perioperative Program): Integrates prehabilitation into perioperative clinic; 4-week multimodal program; most evidence-based model for oncologic prehabilitation
  • ACS Strong for Surgery: Checklist-based preoperative screening including rehabilitation; frailty screen for patients >65
  • MSHOP (Michigan Surgical & Health Optimization Program): Home-based walking program + education on nutrition, smoking, stress; demonstrated reduced LOS and Medicare payments across 21 hospitals; scalable model
  • Home-based telemedicine prehabilitation: Particularly relevant post-COVID; emerging evidence for digital delivery of exercise programs with remote monitoring

Sources: Sabiston Textbook of Surgery (Elsevier, 2023), pp. 363-367 | Toohey et al., Breast Cancer Res Treat 2023 [PMID: 36269525] | Pietrakiewicz et al., Cancers 2025 [PMID: 40867298] | Kwan et al., Cancers 2026 [PMID: 41595205]

Generate a clinical protocol checklist (PDF) for patient-facing prehabilitation instructions

Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /home/daytona/workspace/breast-ca-prehab && python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab OK')" && python3 -c "from reportlab.platypus import SimpleDocTemplate; print('platypus OK')"

Writing File

~/breast-ca-prehab/generate_prehab_pdf.py


from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.platypus.flowables import Flowable
import os

OUTPUT = "/home/daytona/workspace/breast-ca-prehab/Breast_Cancer_Prehabilitation_Checklist.pdf"

# ── Colour palette ────────────────────────────────────────────────────────────
PINK_DARK   = colors.HexColor("#C0185A")   # header / title
PINK_MID    = colors.HexColor("#E85D8A")   # section headings
PINK_LIGHT  = colors.HexColor("#FCE4EC")   # section header bg
PINK_PALE   = colors.HexColor("#FFF0F5")   # alternating row bg
TEAL        = colors.HexColor("#00838F")   # accent (tips / notes)
TEAL_LIGHT  = colors.HexColor("#E0F7FA")   # tip box bg
GREY_DARK   = colors.HexColor("#37474F")   # body text
GREY_MID    = colors.HexColor("#78909C")   # secondary text
GREY_LINE   = colors.HexColor("#CFD8DC")   # rule / border
WHITE       = colors.white
BLACK       = colors.black

# ── Checkbox flowable ─────────────────────────────────────────────────────────
class Checkbox(Flowable):
    def __init__(self, size=10):
        Flowable.__init__(self)
        self.size = size
        self.width  = size
        self.height = size

    def draw(self):
        self.canv.setStrokeColor(PINK_MID)
        self.canv.setLineWidth(1.2)
        r = 2
        s = self.size
        self.canv.roundRect(0, 0, s, s, r, stroke=1, fill=0)

# ── Page template with header/footer ─────────────────────────────────────────
def on_page(canvas, doc):
    canvas.saveState()
    w, h = A4

    # ── Top pink banner ──────────────────────────────────────────────────────
    canvas.setFillColor(PINK_DARK)
    canvas.rect(0, h - 2.2*cm, w, 2.2*cm, stroke=0, fill=1)

    # Ribbon accent stripe
    canvas.setFillColor(PINK_MID)
    canvas.rect(0, h - 2.35*cm, w, 0.18*cm, stroke=0, fill=1)

    # Title text
    canvas.setFillColor(WHITE)
    canvas.setFont("Helvetica-Bold", 14)
    canvas.drawString(1.5*cm, h - 1.35*cm, "Breast Cancer Prehabilitation – Patient Checklist")
    canvas.setFont("Helvetica", 9)
    canvas.drawRightString(w - 1.5*cm, h - 1.35*cm, "Oncology Rehabilitation Unit")

    # Subtitle bar
    canvas.setFillColor(PINK_LIGHT)
    canvas.rect(0, h - 2.55*cm, w, 0.38*cm, stroke=0, fill=1)
    canvas.setFillColor(PINK_DARK)
    canvas.setFont("Helvetica-Oblique", 8)
    canvas.drawString(1.5*cm, h - 2.42*cm,
        "Preparing Your Body & Mind Before Surgery or Chemotherapy")

    # ── Bottom footer ─────────────────────────────────────────────────────────
    canvas.setFillColor(GREY_LINE)
    canvas.rect(0, 0, w, 1.1*cm, stroke=0, fill=1)
    canvas.setFillColor(GREY_DARK)
    canvas.setFont("Helvetica", 7.5)
    canvas.drawString(1.5*cm, 0.42*cm,
        "This checklist is for educational purposes. Follow your care team's specific instructions.")
    canvas.setFont("Helvetica", 7.5)
    canvas.drawRightString(w - 1.5*cm, 0.42*cm, f"Page {doc.page}")

    canvas.restoreState()

# ── Document setup ────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    topMargin=3.0*cm,
    bottomMargin=1.8*cm,
    leftMargin=1.5*cm,
    rightMargin=1.5*cm,
    title="Breast Cancer Prehabilitation Patient Checklist",
    author="Oncology Rehabilitation Unit",
)

styles = getSampleStyleSheet()

# ── Custom styles ─────────────────────────────────────────────────────────────
def S(name, **kw):
    return ParagraphStyle(name, **kw)

s_body = S("body", fontName="Helvetica", fontSize=9.5, leading=14,
           textColor=GREY_DARK, spaceAfter=3)
s_bold = S("bold", fontName="Helvetica-Bold", fontSize=9.5, leading=14,
           textColor=GREY_DARK)
s_note = S("note", fontName="Helvetica-Oblique", fontSize=8.5, leading=13,
           textColor=TEAL, leftIndent=6)
s_tip_head = S("tip_head", fontName="Helvetica-Bold", fontSize=9,
               textColor=TEAL, spaceAfter=2)
s_tip_body = S("tip_body", fontName="Helvetica", fontSize=9, leading=13,
               textColor=GREY_DARK)
s_intro = S("intro", fontName="Helvetica", fontSize=9.5, leading=15,
            textColor=GREY_DARK, spaceAfter=4, alignment=TA_JUSTIFY)

def section_header(title, subtitle=""):
    """Returns a coloured section-header table row."""
    content = f'<font name="Helvetica-Bold" size="11" color="#C0185A">{title}</font>'
    if subtitle:
        content += f'<br/><font name="Helvetica-Oblique" size="8.5" color="#78909C">{subtitle}</font>'
    t = Table([[Paragraph(content, styles["Normal"])]], colWidths=[17.0*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), PINK_LIGHT),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
        ("LINEBELOW",     (0,0), (-1,-1), 1.5, PINK_DARK),
    ]))
    return t

def checkbox_row(text, note="", indent=0):
    """Returns a checklist row [☐] [text] as a Table."""
    cb = Checkbox(11)
    main = Paragraph(
        f'<font name="Helvetica" size="9.5" color="#37474F">{text}</font>',
        styles["Normal"]
    )
    items = [[cb, main]]
    col_w = [0.55*cm, 16.45*cm - indent*cm]
    t = Table(items, colWidths=col_w)
    t.setStyle(TableStyle([
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
        ("LEFTPADDING",   (0,0), (0,-1), indent*10 + 4),
        ("RIGHTPADDING",  (0,0), (-1,-1), 4),
        ("TOPPADDING",    (0,0), (-1,-1), 3),
        ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ]))
    rows = [t]
    if note:
        note_t = Table(
            [[Spacer(0.6*cm, 0), Paragraph(
                f'<font name="Helvetica-Oblique" size="8.5" color="#00838F">{note}</font>',
                styles["Normal"]
            )]],
            colWidths=[0.55*cm, 16.45*cm - indent*cm]
        )
        note_t.setStyle(TableStyle([
            ("TOPPADDING",    (0,0), (-1,-1), 0),
            ("BOTTOMPADDING", (0,0), (-1,-1), 3),
            ("LEFTPADDING",   (1,0), (1,0), 4),
        ]))
        rows.append(note_t)
    return rows

def tip_box(heading, body_text):
    """A teal tip / reminder box."""
    content = [
        [Paragraph(f"💡 {heading}", s_tip_head)],
        [Paragraph(body_text, s_tip_body)],
    ]
    t = Table(content, colWidths=[17.0*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), TEAL_LIGHT),
        ("LINEABOVE",     (0,0), (-1,0),  1.5, TEAL),
        ("LINEBELOW",     (0,-1), (-1,-1), 1.5, TEAL),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ]))
    return t

def sub_heading(text):
    return Paragraph(
        f'<font name="Helvetica-Bold" size="10" color="#E85D8A">{text}</font>',
        styles["Normal"]
    )

# ── Build content ─────────────────────────────────────────────────────────────
story = []

# ── Patient info banner ───────────────────────────────────────────────────────
info_data = [
    [
        Paragraph('<font name="Helvetica" size="9" color="#78909C">Patient Name</font>', styles["Normal"]),
        Paragraph('<font name="Helvetica" size="9" color="#78909C">Date of Birth</font>', styles["Normal"]),
        Paragraph('<font name="Helvetica" size="9" color="#78909C">MRN / Hospital No.</font>', styles["Normal"]),
    ],
    [
        Paragraph('________________________________', styles["Normal"]),
        Paragraph('_______ / _______ / _______', styles["Normal"]),
        Paragraph('________________________________', styles["Normal"]),
    ],
    [
        Paragraph('<font name="Helvetica" size="9" color="#78909C">Planned Procedure</font>', styles["Normal"]),
        Paragraph('<font name="Helvetica" size="9" color="#78909C">Surgery / Treatment Date</font>', styles["Normal"]),
        Paragraph('<font name="Helvetica" size="9" color="#78909C">Oncology Team</font>', styles["Normal"]),
    ],
    [
        Paragraph('________________________________', styles["Normal"]),
        Paragraph('_______ / _______ / _______', styles["Normal"]),
        Paragraph('________________________________', styles["Normal"]),
    ],
]
info_table = Table(info_data, colWidths=[5.67*cm, 5.67*cm, 5.66*cm])
info_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), PINK_PALE),
    ("BOX",        (0,0), (-1,-1), 0.8, GREY_LINE),
    ("INNERGRID",  (0,0), (-1,-1), 0.5, GREY_LINE),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
]))
story.append(info_table)
story.append(Spacer(1, 0.4*cm))

# ── Introduction ──────────────────────────────────────────────────────────────
story.append(Paragraph(
    "Prehabilitation means preparing your body and mind <b>before</b> your breast cancer "
    "surgery or chemotherapy. Research shows that patients who follow a prehabilitation program "
    "recover faster, have fewer complications, and feel better during and after treatment. "
    "Use this checklist every week in the weeks leading up to your procedure. "
    "Tick each item when completed and bring this sheet to every appointment.",
    s_intro
))
story.append(Spacer(1, 0.3*cm))
story.append(tip_box(
    "How to use this checklist",
    "Work through each section weekly. Tick the box once done. "
    "Bring this checklist to every clinic visit so your team can review your progress. "
    "Do not worry if you cannot do everything — do your best and tell your nurse or physiotherapist if you need help."
))
story.append(Spacer(1, 0.4*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 1 — FIRST APPOINTMENT
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 1 — AT YOUR FIRST APPOINTMENT",
                             "Complete these before or at your first prehabilitation visit"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Attended the prehabilitation assessment appointment"):
    story.append(row)
for row in checkbox_row("Completed the 6-Minute Walk Test (6MWT) with your physiotherapist"):
    story.append(row)
for row in checkbox_row("Had grip strength measured (both hands)",
                         "This helps track your muscle strength throughout your program."):
    story.append(row)
for row in checkbox_row("Completed nutrition screening (NRS-2002 / MUST form)"):
    story.append(row)
for row in checkbox_row("Completed anxiety and depression screening (HADS questionnaire)"):
    story.append(row)
for row in checkbox_row("Completed sleep quality questionnaire (ISI — Insomnia Severity Index)"):
    story.append(row)
for row in checkbox_row("Completed the DASH / SPADI shoulder questionnaire (upper arm function baseline)"):
    story.append(row)
for row in checkbox_row("Baseline arm circumference measured (both arms) — lymphedema prevention"):
    story.append(row)
for row in checkbox_row("Received and read the prehabilitation information booklet"):
    story.append(row)
for row in checkbox_row("Medical review completed (blood tests, ECG if needed, medications reviewed)"):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 2 — EXERCISE
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 2 — EXERCISE PROGRAM",
                             "Aim to complete weekly — tick when done each week"))
story.append(Spacer(1, 0.2*cm))

story.append(sub_heading("Aerobic (Cardio) Exercise"))
story.append(Spacer(1, 0.1*cm))
for row in checkbox_row("Completed ≥ 150 minutes of moderate-intensity aerobic activity this week",
                         "Brisk walking, cycling, or swimming. You should be able to talk but feel slightly breathless."):
    story.append(row)
for row in checkbox_row("Walked for at least 20–30 minutes on most days"):
    story.append(row)
for row in checkbox_row("Kept a log of my exercise (steps, minutes, or app tracking)"):
    story.append(row)
story.append(Spacer(1, 0.2*cm))

story.append(sub_heading("Strength Training"))
story.append(Spacer(1, 0.1*cm))
for row in checkbox_row("Completed 2–3 resistance/strength training sessions this week",
                         "Light weights, resistance bands, or bodyweight exercises. Do NOT train on consecutive days."):
    story.append(row)
for row in checkbox_row("Performed arm, shoulder, and upper body strengthening exercises as prescribed"):
    story.append(row)
for row in checkbox_row("Performed leg strengthening exercises (squats, step-ups, calf raises)"):
    story.append(row)
story.append(Spacer(1, 0.2*cm))

story.append(sub_heading("Shoulder & Arm Exercises (Breast Cancer Specific)"))
story.append(Spacer(1, 0.1*cm))
for row in checkbox_row("Performed pendulum (Codman) exercises daily — as shown by physiotherapist"):
    story.append(row)
for row in checkbox_row("Performed wall-climbing finger exercise — 2 sets × 10 reps, twice daily"):
    story.append(row)
for row in checkbox_row("Performed overhead arm raises and shoulder circles — as instructed"):
    story.append(row)
for row in checkbox_row("Maintained full range of motion in both shoulders (no restriction)"):
    story.append(row)
story.append(Spacer(1, 0.2*cm))

story.append(sub_heading("Breathing Exercises"))
story.append(Spacer(1, 0.1*cm))
for row in checkbox_row("Used incentive spirometer — 10 deep breaths every 2 hours while awake",
                         "This prepares your lungs for surgery and reduces risk of chest infection afterwards."):
    story.append(row)
for row in checkbox_row("Practised diaphragmatic (belly) breathing — 5 minutes, twice daily"):
    story.append(row)
for row in checkbox_row("Practised slow deep breathing: 5 seconds in, 5 seconds out (vagal breathing)"):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

story.append(tip_box(
    "Exercise safety tip",
    "Stop exercising and contact your team if you experience chest pain, severe shortness of breath, "
    "dizziness, or arm swelling. Light fatigue and mild muscle soreness are normal and expected."
))
story.append(Spacer(1, 0.3*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 3 — NUTRITION
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 3 — NUTRITION & HYDRATION",
                             "Good nutrition builds your reserves before surgery or chemotherapy"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Met with the dietitian for a personalised nutrition plan"):
    story.append(row)
for row in checkbox_row("Eating protein at EVERY meal — aim for 1.2–2.0 g of protein per kg of body weight per day",
                         "Good sources: eggs, fish, chicken, dairy, legumes, tofu, nuts."):
    story.append(row)
for row in checkbox_row("Eating 5+ portions of fruit and vegetables daily"):
    story.append(row)
for row in checkbox_row("Drinking 6–8 glasses of water or fluids daily (unless told otherwise)"):
    story.append(row)
for row in checkbox_row("Taking prescribed oral nutritional supplements (ONS) if recommended by dietitian"):
    story.append(row)
for row in checkbox_row("Taking prescribed vitamin and mineral supplements (Vitamin D, iron, etc.)"):
    story.append(row)
for row in checkbox_row("Maintaining or improving body weight (not losing weight unintentionally)",
                         "Unintentional weight loss of >5% in 3 months should be reported immediately."):
    story.append(row)
for row in checkbox_row("Completed pre-surgery carbohydrate loading drink (night before + morning of surgery)",
                         "Use the prescribed carbohydrate drink — do NOT eat solid food within 6 hours of surgery."):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 4 — MENTAL WELLBEING
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 4 — MENTAL WELLBEING & SLEEP",
                             "Your mental and emotional health is part of your recovery"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Attended or was referred to psychological support / counselling (if needed)"):
    story.append(row)
for row in checkbox_row("Practised a relaxation technique daily (mindfulness, guided imagery, yoga, or meditation)",
                         "Even 10 minutes per day reduces anxiety and improves sleep quality."):
    story.append(row)
for row in checkbox_row("Getting 7–9 hours of sleep per night"):
    story.append(row)
for row in checkbox_row("Reported sleep problems to my nurse or doctor — received treatment if needed",
                         "Sleep difficulties before treatment are very common and very treatable."):
    story.append(row)
for row in checkbox_row("Connected with a breast cancer support group or peer navigator (if wished)"):
    story.append(row)
for row in checkbox_row("Talked to a family member or friend about my concerns and treatment"):
    story.append(row)
for row in checkbox_row("Know how to reach the on-call nurse or support line if I feel very anxious or distressed"):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

story.append(tip_box(
    "It is normal to feel anxious or worried",
    "Over half of cancer patients experience significant anxiety before treatment. Telling your nurse is the first step. "
    "Cognitive Behavioural Therapy (CBT) and mindfulness are proven, effective options — ask your team for a referral."
))
story.append(Spacer(1, 0.3*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 5 — SMOKING & ALCOHOL
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 5 — SMOKING & ALCOHOL",
                             "Stopping smoking and reducing alcohol improves surgical outcomes significantly"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("I do not smoke — ✓ tick and move to next section"):
    story.append(row)
for row in checkbox_row("Discussed smoking cessation with my doctor or nurse"):
    story.append(row)
for row in checkbox_row("Set a quit date (ideally 6–8 weeks before surgery)"):
    story.append(row)
for row in checkbox_row("Started nicotine replacement therapy (NRT), varenicline, or other support"):
    story.append(row)
for row in checkbox_row("Have not smoked for at least 4 weeks before surgery"):
    story.append(row)
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Not drinking alcohol, or drinking within safe limits (≤14 units/week)",
                         "Even small reductions in alcohol intake before surgery reduce infection and recovery risks."):
    story.append(row)
for row in checkbox_row("Discussed alcohol intake honestly with my doctor or nurse"):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 6 — MEDICAL OPTIMISATION
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 6 — MEDICAL OPTIMISATION",
                             "Ensuring your body is in the best medical condition before treatment"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Blood tests completed (full blood count, kidney function, HbA1c, iron, Vitamin D)"):
    story.append(row)
for row in checkbox_row("Anaemia (low blood count) addressed — iron tablets or other treatment started if needed",
                         "Target haemoglobin ≥ 10 g/dL before elective surgery."):
    story.append(row)
for row in checkbox_row("Blood sugar well controlled if diabetic (HbA1c discussed with doctor)"):
    story.append(row)
for row in checkbox_row("Blood pressure and heart conditions reviewed by GP or specialist"):
    story.append(row)
for row in checkbox_row("Cardiac echo or other heart scan completed (if recommended)"):
    story.append(row)
for row in checkbox_row("All current medications reviewed by doctor before surgery"):
    story.append(row)
for row in checkbox_row("Told my doctor about ALL supplements and herbal remedies I am taking"):
    story.append(row)
for row in checkbox_row("Blood thinners (aspirin, warfarin, DOACs) management plan agreed with doctor"):
    story.append(row)
story.append(Spacer(1, 0.35*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 7 — WEEK BEFORE SURGERY / TREATMENT
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 7 — THE WEEK BEFORE YOUR SURGERY OR FIRST TREATMENT",
                             "Final preparations — complete all items in the 7 days before your procedure"))
story.append(Spacer(1, 0.2*cm))

for row in checkbox_row("Continued walking and breathing exercises every day this week"):
    story.append(row)
for row in checkbox_row("Continued eating high-protein meals and staying well hydrated"):
    story.append(row)
for row in checkbox_row("Completed the pre-admission COVID / infection screening (if required)"):
    story.append(row)
for row in checkbox_row("Performed chlorhexidine skin wash the night before and morning of surgery",
                         "Use the wash cloth / soap provided — do not apply moisturiser or deodorant on the day."):
    story.append(row)
for row in checkbox_row("Taken prescribed carbohydrate loading drink (400 mL) at bedtime the night before surgery"):
    story.append(row)
for row in checkbox_row("Taken prescribed carbohydrate loading drink (400 mL) — 2 hours before surgery start time"):
    story.append(row)
for row in checkbox_row("Fasted from solid food for at least 6 hours before surgery"):
    story.append(row)
for row in checkbox_row("Arranged transport to and from hospital; arranged post-discharge carer if needed"):
    story.append(row)
for row in checkbox_row("Packed hospital bag: comfortable loose clothing, incentive spirometer, this checklist"):
    story.append(row)
for row in checkbox_row("Reviewed postoperative shoulder exercise sheet — I know which exercises to start on Day 1"):
    story.append(row)
for row in checkbox_row("Attended pre-operative patient education session with nurse / physiotherapist"):
    story.append(row)
story.append(Spacer(1, 0.3*cm))

story.append(tip_box(
    "After surgery — lymphedema awareness",
    "After axillary (armpit) surgery, protect your arm: avoid blood pressure cuffs, injections, and tight jewellery "
    "on that side. Report any arm swelling, heaviness, or tightness to your team immediately. "
    "Your arm exercises during prehabilitation have already helped reduce your risk."
))
story.append(Spacer(1, 0.4*cm))

# ═══════════════════════════════════════════════════════════════════════
# SECTION 8 — MY CARE TEAM CONTACTS
# ═══════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 8 — MY CARE TEAM CONTACTS"))
story.append(Spacer(1, 0.2*cm))

contact_data = [
    [Paragraph("<b>Role</b>", styles["Normal"]),
     Paragraph("<b>Name</b>", styles["Normal"]),
     Paragraph("<b>Phone / Bleep</b>", styles["Normal"]),
     Paragraph("<b>Notes</b>", styles["Normal"])],
    ["Breast Surgeon", "________________", "________________", "________________"],
    ["Oncologist",     "________________", "________________", "________________"],
    ["Physiotherapist","________________", "________________", "________________"],
    ["Dietitian",      "________________", "________________", "________________"],
    ["Breast Nurse Navigator", "________________", "________________", "________________"],
    ["Psychologist / Counsellor", "________________", "________________", "________________"],
    ["GP / Family Doctor", "________________", "________________", "________________"],
    ["24-hr Support Line", "________________", "________________", "________________"],
]

contact_table = Table(contact_data, colWidths=[4.0*cm, 3.8*cm, 3.8*cm, 5.4*cm])
contact_table.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0), PINK_LIGHT),
    ("FONTNAME",      (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 8.5),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, PINK_PALE]),
    ("BOX",           (0,0), (-1,-1), 0.8, GREY_LINE),
    ("INNERGRID",     (0,0), (-1,-1), 0.5, GREY_LINE),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("ALIGN",         (0,0), (-1,-1), "LEFT"),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(contact_table)
story.append(Spacer(1, 0.4*cm))

# ── Personal notes ────────────────────────────────────────────────────────────
story.append(sub_heading("My Personal Notes / Questions for My Team"))
story.append(Spacer(1, 0.15*cm))
for _ in range(6):
    story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_LINE, spaceAfter=0.5*cm))

story.append(Spacer(1, 0.4*cm))

# ── Final disclaimer ──────────────────────────────────────────────────────────
story.append(Paragraph(
    "<i>Based on: Sabiston Textbook of Surgery (2023) | Toohey et al., Breast Cancer Res Treat 2023 "
    "[PMID 36269525] | WCRF/AICR Physical Activity Guidelines | ESPEN Cancer Nutrition Guidelines 2021. "
    "Reviewed June 2026 — Oncology Rehabilitation Unit.</i>",
    S("disc", fontName="Helvetica-Oblique", fontSize=7.5, textColor=GREY_MID, leading=11)
))

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF saved to: {OUTPUT}")
Running Command

cd /home/daytona/workspace/breast-ca-prehab && python3 generate_prehab_pdf.py

Running Command

ls -lh /home/daytona/workspace/breast-ca-prehab/Breast_Cancer_Prehabilitation_Checklist.pdf && python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/breast-ca-prehab/Breast_Cancer_Prehabilitation_Checklist.pdf') print(f'Pages: {len(r.pages)}') print(f'Title: {r.metadata.title}') "

The PDF generated successfully - 4 pages. Here is your download link:

Breast Cancer Prehabilitation Checklist

PDF Document · PDF


What's in the PDF

The checklist is designed to be printed and handed directly to patients. It is A4, 4 pages, with a pink oncology-themed design and includes:
SectionContents
Patient Info BannerName, DOB, MRN, planned procedure, treatment date, team
Section 1 - First Appointment10 checkboxes for baseline assessments (6MWT, grip, HADS, DASH, arm measurements, bloods)
Section 2 - ExerciseAerobic, strength, shoulder/arm-specific, and breathing exercises - with frequency targets
Section 3 - NutritionProtein targets, hydration, supplements, pre-surgical carbohydrate loading
Section 4 - Mental Wellbeing & SleepRelaxation, sleep, psychological support, support groups
Section 5 - Smoking & AlcoholStep-by-step cessation checkboxes, quit date, NRT
Section 6 - Medical OptimisationBloods, anaemia, diabetes, cardiac review, medications
Section 7 - Final WeekPre-admission skin prep, fasting, carb loading, transport, packing list
Section 8 - My Care TeamFillable contact table for all MDT members
Personal NotesLined space for patient questions
Every section uses plain language suitable for patient literacy. Clinical notes appear as small italic annotations below selected checkboxes to explain the rationale without overwhelming the patient.
This is a shared conversation. Sign in to Orris to start your own chat.