As a expert cardiologist analyse and tell suggest the line of treatment
heart failure reduced ejection fraction diabetes management guidelines
2024 ACC AHA heart failure HFrEF treatment guidelines SGLT2 GDMT
Heart Failure with Severely Reduced Ejection Fraction (HFrEF) in a 65-year-old male with Type 2 Diabetes Mellitus (poorly controlled), Hyperuricemia, Mild Anemia, and likely Diabetic Dyslipidemia
| Parameter | Frequency |
|---|---|
| Daily weight at home | Daily |
| Serum creatinine + K+ | 1 week after starting ARNI/MRA, then monthly |
| HbA1c | Every 3 months |
| Echo (EF reassessment) | At 3-6 months of GDMT |
| BP | Every clinic visit |
| Uric acid | Every 3 months (on allopurinol) |
HFrEF (EF ~20-25%) + T2DM + Hyperuricemia + Mild Anemia
Step 1 (Start Together):
→ SGLT2i (Dapagliflozin 10mg) [HF + glycemic + renal protection]
→ ARNI (Sacubitril/Valsartan) [RAAS blockade]
→ Beta-blocker (Carvedilol 3.125mg BD) [once compensated]
→ MRA (Spironolactone 25mg) [aldosterone blockade]
→ Furosemide [symptom relief]
Step 2 (Comorbidities):
→ Atorvastatin 40-80mg [LDL target <70]
→ Allopurinol 100mg [uric acid 9.6]
→ IV iron [if Fe-deficient anemia confirmed]
Step 3 (3-6 months):
→ Reassess EF → ICD/CRT if EF remains ≤35%
→ Coronary angiography if ischemic etiology unclear
Important Disclaimer: This analysis is based on the visible lab/echo data and current evidence-based cardiology guidelines (2022 AHA/ACC/HFSA, 2024 ACC Expert Consensus). Final treatment decisions must be made by the treating cardiologist after full clinical examination, complete symptom assessment, medication allergy history, and review of all investigations. Drug doses must be individualized based on BP, renal function, and tolerance.
Search for latest ICD/CRT guidelines for this patient's EF range
ICD implantable cardioverter defibrillator heart failure reduced ejection fraction guidelines
cardiac resynchronization therapy CRT heart failure LVEF guidelines
2024 2025 ACC AHA ESC ICD CRT guidelines HFrEF LVEF 35% primary prevention updated recommendations
ICD primary prevention sudden cardiac death HFrEF LVEF
2024 ESC ventricular arrhythmia SCD prevention ICD CRT guidelines update HFrEF EF less than 35
https://pmc.ncbi.nlm.nih.gov/articles/PMC12265662
Data from the PROVE-HF study showed that 32% of HFrEF patients improved LVEF above 35% at 6 months and 62% at 12 months after starting ARNI therapy - meaning they no longer met ICD criteria at that point. Starting triple/quadruple GDMT in newly diagnosed HFrEF reduced the proportion requiring ICD by twofold at 3 months and threefold at 6 months.
| Criterion | This Patient |
|---|---|
| LVEF ≤35% | YES - LVEF ~20-25% |
| NYHA class II or III symptoms on GDMT | Needs assessment after GDMT |
| Nonischemic DCM or ischemic HD ≥40 days post-MI | Needs etiology workup |
| Reasonable expectation of meaningful survival >1 year | Likely yes at 65 years |
| On chronic GDMT (optimized) | NOT YET - must start first |

| QRS Duration | Morphology | NYHA Class | LVEF | Recommendation |
|---|---|---|---|---|
| ≥150 ms | LBBB | II, III, or ambulatory IV | ≤35% | CRT - Class I, Level B-R (Highest) |
| ≥150 ms | Non-LBBB | II, III, or ambulatory IV | ≤35% | CRT - Class IIa |
| 120-149 ms | LBBB | II, III, or ambulatory IV | ≤35% | CRT - Class IIa |
| 120-149 ms | Non-LBBB | III or ambulatory IV | ≤35% | CRT - Class IIb |
| ≥150 ms | LBBB | Class I (asymptomatic) | ≤30% | CRT - Class IIb |
| < 120 ms | Any | Any | Any | CRT NOT recommended (Class III) |
| Option | Features | When to Choose |
|---|---|---|
| CRT-D (CRT + Defibrillator) | Resynchronizes + shocks VF | Preferred when patient ALSO meets ICD criteria (LVEF ≤35%, NYHA II-III) |
| CRT-P (CRT + Pacemaker only) | Resynchronizes only | When ICD benefit is uncertain (NYHA IV without advanced HF candidacy, frail elderly, comorbidities limiting survival) |
Dapagliflozin reduced the composite of serious ventricular arrhythmia, resuscitated cardiac arrest, or SCD by 21% (HR 0.79, p=0.03) - independent of ICD.
NOW (Immediately):
├── Start GDMT (SGLT2i + ARNI + BB + MRA + Furosemide)
├── Obtain 12-lead ECG → Check QRS duration + morphology (LBBB?)
├── Obtain 24-hour Holter → Look for NSVT, AF
└── Coronary angiography → Ischemic vs. non-ischemic etiology?
AT 3 MONTHS (Reassess LVEF):
├── LVEF improved to >35%?
│ ├── YES → Continue GDMT, no device needed yet
│ │ Reassess at 6-12 months
│ └── NO (LVEF still ≤35%) → PROCEED TO DEVICE
│ ├── ECG: LBBB + QRS ≥150 ms?
│ │ ├── YES + NYHA II-III → CRT-D (Class I)
│ │ └── NO (QRS <120ms) → ICD alone (Class I)
│ └── NYHA class?
│ ├── II or III → ICD (Class I, Level A) ✓
│ └── IV (no advanced HF candidacy) → No ICD (Class III)
IF NEAR-TERM SCD RISK CONCERN DURING WAIT:
└── Consider WCD (wearable defibrillator) as bridge
| Parameter | Current Value | Device Threshold | Status |
|---|---|---|---|
| LVEF | ~20-25% | ≤35% | Meets threshold |
| QRS duration | Unknown - need ECG | ≥150 ms for Class I CRT | Must check |
| NYHA class | Unknown - need assessment | II-III for Class I ICD | Must assess |
| GDMT duration | 0 months (new) | ≥3 months required | Not met yet |
| Etiology | Unknown - need angio | Ischemic vs. non-ischemic | Must determine |
What Causes me the most discomfort is fluid accumulation in the abdomen - bloated/ distended abdomen, breathlessness or shortness of breath, inability to lie horizontal hence, very disturbed sleep. As a consequence, I feel irritated and grouchy the entire day - am unable to focus on anything I want to do.
diuretic therapy decongestion heart failure ascites orthopnea management
heart failure congestion diuretic resistance spironolactone metolazone

| Drug | Dose | What It Does |
|---|---|---|
| Furosemide (Lasix) - Loop diuretic | 40-80 mg IV/oral OD-BD | Primary "water pill" - forces kidneys to drain excess fluid rapidly |
| Spironolactone | 25-50 mg OD | Blocks aldosterone (a hormone that tells kidneys to hold onto salt + water); also has heart-protective benefits |
| Metolazone 2.5 mg OD | Added if resistant | "Booster" diuretic when furosemide alone isn't enough |
Per Fuster & Hurst's The Heart, 15th ed.: "Loop diuretics are the primary treatment to restore euvolemia in patients with volume overload... Thiazides [metolazone] may overcome loop diuretic resistance."
| Restriction | Target | Why |
|---|---|---|
| Salt (sodium) | < 2 g (2000 mg) per day | Salt makes your body hold water. Every extra gram of salt = ~200 mL retained fluid |
| Fluid intake | < 1.5 L per day | Counting all liquids - water, tea, dal, buttermilk, juices, everything |
| Processed foods | Eliminate | Hidden sodium in pickles, papads, packaged snacks, restaurant food |
Priority Drugs for Symptom Relief:
1. Furosemide 40 mg OD → increase to 80 mg or BD if needed
2. Spironolactone 25 mg OD (also helps with diuresis + heart protection)
3. Dapagliflozin 10 mg OD (SGLT2i - dual diuretic + glycemic + cardiac benefit)
If inadequate response in 3-5 days:
→ Add Metolazone 2.5 mg OD (30 min before furosemide)
→ Consider short hospital admission for IV furosemide
Source: Fuster and Hurst's The Heart, 15th Edition - Acute Heart Failure Management, Diuretics section, p. 1582-1583. 2022 AHA/ACC/HFSA Heart Failure Guidelines.
Reminder: This guidance is based on your reported symptoms and previously shared reports. Your treating cardiologist must examine you, confirm your current fluid status, check your electrolytes (sodium, potassium, creatinine), and make final dosing decisions. Do not self-adjust diuretic doses without medical supervision - over-diuresis can cause dangerous kidney injury and electrolyte imbalances.
Ok thankq for the suggestion. Now ..... Presuming as a expert ayurvedic doctor / ayurvedic cardiologist what would be the line of treatment in this case
Ayurvedic treatment Hridroga heart failure Shotha fluid accumulation Arjuna Punarnava classical texts
Ayurvedic cardiology Hridroga Vata Kapha treatment ascites orthopnea Charaka Sushruta classical Ayurveda
Ayurveda heart failure Terminalia arjuna Punarnava clinical trial
Terminalia arjuna heart failure ejection fraction clinical trial
Punarnava Boerhavia diffusa diuretic edema clinical evidence
https://www.sreedhareeyam.com/hospital/blog/ayurvedic-manage…
Terminalia arjuna cardiac myocardial function cardioprotective
Punarnavarishta Arjunarishta Hridayarnava Rasa Arogyavardhini Vati heart failure Shotha treatment Ayurveda dosage
Ayurveda does NOT have a cure for severely reduced ejection fraction (LVEF ~20-25%) or the structural heart disease you have. No Ayurvedic treatment has been shown in rigorous clinical trials to reverse myocardial remodeling or replace the life-saving role of GDMT medications like sacubitril/valsartan or SGLT2 inhibitors. What follows is a genuine, evidence-informed Ayurvedic perspective - but it is most appropriately used as adjunctive/complementary support alongside modern cardiology, not instead of it.
| Your Symptom | Ayurvedic Correlation | Dosha Involved |
|---|---|---|
| Distended abdomen with fluid | Jalodar / Udara Shotha | Kapha (fluid/heaviness) |
| Breathlessness (dyspnea) | Shwasa (specifically Tamaka Shwasa) | Kapha + Vata |
| Inability to lie flat | "Asine labhatesaukhyam" - comfort only when seated | Kapha obstruction of Pranavaha Srotas |
| Disturbed sleep, irritability | Alpanidra, Manodaurbalya | Vata + Prana disturbance |
| Fatigue, low energy | Ojakshaya - depletion of vital essence (Ojas) | All three doshas |
| Diabetes (HbA1c 8.6%) | Prameha / Madhumeha | Kapha + Vata |
| High uric acid, dyslipidemia | Ama accumulation in Medovaha Srotas | Kapha + Pitta |
Long-standing Prameha (diabetes) + Medoroga (dyslipidemia) → Ama (toxin) accumulation → Srotovarodha (channel blockage) in Rasavaha and Pranavaha Srotas → Hridaya kshaya (cardiac depletion) → Shotha (edema/ascites) + Shwasa → Ojakshaya (vital force depletion)
| Form | Dose | Timing |
|---|---|---|
| Punarnava Churna (powder) | 3-5g with warm water | Twice daily, before meals |
| Punarnavadi Kashayam (decoction) | 15-30 ml with equal water | Twice daily, before meals |
| Punarnavarishtam | 15-20 ml with equal water | After meals, twice daily |
| Formulation | Key Ingredients | Primary Action |
|---|---|---|
| Punarnavadi Mandura | Punarnava, Shunti, Pippali, Maricha, iron oxide (Mandura) | Reduces edema/ascites + builds blood (addresses your anemia) |
| Dashamoola Punarnavadi Kashayam | 10 roots + Punarnava + other herbs | Reduces fluid, improves cardiac Vata |
| Punarnavadi Kashayam (Ashtanga Hridayam) | Punarnava + supportive herbs | Classical Shotha formula |
| Gokshura (Tribulus terrestris) Churna | 3g BD | Diuretic, anti-inflammatory, kidney support |
5-10g Arjuna bark powder boiled in 1 cup milk + 4 cups water, simmered until 1 cup remains. Strain and drink warm, once daily in the morning on an empty stomach.
| Arjuna Form | Dose | Timing |
|---|---|---|
| Arjuna Kshirapaka | 1 cup daily | Morning, empty stomach |
| Arjunarishta | 15-20 ml with equal water | After meals, twice daily |
| Arjuna Churna | 3-5g with warm milk | Morning and evening |
| Arjuna Tablets/Capsules (standardized) | 500mg, BD-TDS | With meals |
| Herb | Dose | What It Addresses |
|---|---|---|
| Ashwagandha (Withania somnifera) | 3-5g Churna with warm milk at bedtime | Reduces cortisol + sympathetic overdrive; improves sleep; builds strength; adaptogenic |
| Brahmi (Bacopa monnieri) | 300-500mg extract BD | Improves focus, memory, reduces anxiety and irritability; mild anxiolytic |
| Amalaki (Emblica officinalis) / Amla | 3-5g Churna or 1-2 fresh amla daily | Potent antioxidant; cardioprotective; also lowers blood sugar (relevant for your HbA1c 8.6%) |
| Guduchi (Tinospora cordifolia) | 500mg extract BD | Immune-modulating, anti-inflammatory, Ojas-building |
| Herb/Formulation | Dose | Evidence |
|---|---|---|
| Vijayasar (Pterocarpus marsupium) | Copper vessel water (wood soaked overnight) or 500mg BD | Has pterostilbene - proven anti-hyperglycemic |
| Gurmar / Meshashringi (Gymnema sylvestre) | 400-600mg extract BD | Suppresses sweet taste, reduces sugar absorption |
| Karela (Bitter gourd) Juice | 30-50ml fresh juice morning | Charantin + polypeptide-P; hypoglycemic |
| Shilajit (purified) | 300-500mg BD | Anti-diabetic + cardiac tonic + rejuvenating |
| Chandraprabha Vati | 2 tablets BD | Classical Prameha formulation |
| Priority | Formulation | Target | Dose |
|---|---|---|---|
| 1st - Most urgent | Punarnava Churna / Punarnavadi Kashayam | Ascites + breathlessness | 15-30ml / 3-5g BD |
| 2nd | Arjuna Kshirapaka / Arjunarishta | Cardiac tonic | Morning / 15ml BD after food |
| 3rd | Punarnavadi Mandura | Fluid + anemia | 2 tablets BD |
| 4th | Dashamoola Punarnavadi Kashayam | Vata-Kapha HF | 30ml BD before food |
| 5th | Ashwagandha at bedtime | Sleep + anxiety + strength | 5g with warm milk |
| 6th | Brahmi | Focus + irritability + mood | 300mg BD |
| 7th | Triphala Churna at night | Ama clearance + lipids | 5g with warm water |
Important: Standard aggressive Panchakarma (Vamana, strong Virechana, Basti) is contraindicated in a weak, congested heart failure patient. Only gentle therapies under expert supervision are appropriate.
| Therapy | Description | Benefit |
|---|---|---|
| Hridaya Basti | Warm medicated oil pool held over the chest with a dough ring | Strengthens cardiac muscle, relieves chest tightness - gentle and safe |
| Abhyanga (gentle oil massage) | Warm sesame or Dhanwantaram oil massage | Reduces Vata, improves circulation, calms nervous system, improves sleep |
| Shirodhara | Warm oil poured steadily on forehead | Calms mind, reduces anxiety/irritability, dramatically improves sleep quality |
| Mild Virechana | Triphala / Haritaki at bedtime | Clears Ama from gut |
| Pranayama | Breathing exercises (see below) | Directly addresses Pranavaha Srotas |
| Practice | Technique | Duration | Benefit |
|---|---|---|---|
| Anulom-Vilom (Alternate nostril breathing) | Inhale left, exhale right, then reverse | 5-10 min morning | Balances Prana Vata, calms nervous system, improves lung capacity |
| Bhramari (Humming bee breath) | Inhale deeply, exhale with "mmmm" hum | 5 min | Calms mind, reduces irritability, improves vagal tone |
| Udgitha (Om chanting) | Slow deep "Aaaa-Uuu-Mmm" | 5 min | Reduces stress, improves cardiac autonomic balance |
Avoid: Kapalabhati and Bhastrika (forceful breathing) - these increase thoracic pressure and are unsafe in decompensated heart failure.
| Intervention | Evidence Level | Verdict |
|---|---|---|
| Arjuna bark (Terminalia arjuna) | Animal studies + small human trials for angina | Promising cardiac tonic; insufficient RCT data for HFrEF |
| Punarnava (Boerhavia diffusa) | Animal + in-vitro diuretic evidence confirmed | Reasonable adjunct for mild fluid management - cannot replace furosemide in decompensation |
| Ashwagandha for stress/sleep | Multiple RCTs confirmed | Good evidence for sleep improvement and stress reduction |
| Brahmi for cognitive function | Multiple RCTs confirmed | Good evidence for anxiety + focus |
| Guggulu for lipids | Small RCTs; modest lipid lowering | Adjunctive; cannot replace a statin in your risk category |
| Gymnema sylvestre for diabetes | Small trials; mild glucose lowering | Adjunctive only |
MODERN MEDICINE handles: AYURVEDA supports:
───────────────────────────────────── ─────────────────────────────
• Fluid removal (Furosemide) • Punarnava as adjunct diuretic
• Cardiac remodeling (ARNI, SGLT2i) • Arjuna Kshirapaka (cardiac tonic)
• Preventing SCD (BB, MRA, ICD) • Ashwagandha (sleep, stress)
• Glycemic control (SGLT2i) • Brahmi (mood, focus, irritability)
• Lipid management (Statin) • Guggulu + Amla (lipids, antioxidant)
• Structural heart assessment • Diet reform (Pathya) - yava, lauki
• Monitoring (ECG, echo, labs) • Pranayama (gentle breathing practice)
• Hridaya Basti / Shirodhara (wellbeing)
Please consult a qualified Ayurvedic Vaidya (BAMS/MD Ayurveda) for individualized formulation and doses, and inform your modern cardiologist about all Ayurvedic medications being taken, as some herbs (Punarnava, Shilajit, certain Bhasmas) can interact with cardiac drugs or affect kidney function and electrolytes.
As a expert cardio-physiotherapist and expert yoga therapist give me exercise or yoga protocol for this case
exercise training cardiac rehabilitation heart failure reduced ejection fraction
yoga therapy heart failure reduced ejection fraction HFrEF clinical trial protocol 2023 2024 2025
PMID: 35596876
PMID: 38451843
cardiac rehabilitation exercise protocol HFrEF severely reduced EF 20% NYHA III breathing exercise physiotherapy 2024
https://pmc.ncbi.nlm.nih.gov/articles/PMC10847087
inspiratory muscle training heart failure dyspnea exercise capacity
yoga protocol heart failure HFrEF pranayama asana safe contraindicated evidence based 2024
This patient is currently decompensated. The cardinal rule in cardiac physiotherapy is: YOU DO NOT EXERCISE A CONGESTED HEART. Active fluid overload (ascites, orthopnea, active breathlessness at rest) is an absolute contraindication to aerobic exercise. The protocol below is therefore structured in phases, beginning with where the patient actually is right now.
| Intervention | Technique | Duration | Frequency |
|---|---|---|---|
| Semi-reclined positioning | 45° head-up, legs slightly elevated | Continuous | 24 hours |
| Diaphragmatic breathing | Hand on belly, slow nasal inhale expanding abdomen, slow exhale | 10 breaths × 3 sets | 3× daily |
| Pursed-lip breathing | Inhale through nose (2 counts), exhale through pursed lips (4 counts) | 5-10 min | 3-4× daily |
| Active foot/ankle pumps | Flex and extend ankles while seated | 20 reps × 3 sets | Every 1-2 hours |
| Seated arm circles | Gentle small circles, both directions | 10 reps each direction | BD |
| Parameter | Prescription |
|---|---|
| Device | Threshold IMT device (Philips Respironics or similar) |
| Intensity | Start at 20% of MIP (Maximal Inspiratory Pressure), progress to 30-40% MIP over 2 weeks |
| Duration | 30 minutes/day (can be split: 2 × 15 min) |
| Frequency | 5-7 days/week |
| Duration of program | Minimum 8-12 weeks |
| Expected outcome | 30-40% reduction in dyspnea scores; improved 6-minute walk distance by 60-80m |
Evidence: RCT published 2022 showed IMT significantly improved exercise capacity, respiratory muscle strength, and quality of life in HF patients (PMID 35472660). 2023 RCT showed high-intensity IMT further improved functional capacity (PMID 37285766).
| Week | Duration | Pace | Frequency | Target HR |
|---|---|---|---|---|
| Week 2-3 | 5-10 min | Very slow (conversational) | 3× /week | < 60% of max HR* |
| Week 3-4 | 10-15 min | Slow | 3-4× /week | 50-60% max HR |
| Parameter | Prescription |
|---|---|
| Mode | Walking outdoors OR stationary cycle (preferred - less risk of fall, controllable workload) |
| Intensity | 50-70% of peak VO₂ or RPE (Borg scale) 11-14 ("somewhat hard") |
| Duration | Start 20 min → build to 30-40 min per session |
| Frequency | 3-4× per week |
| Structure | 5 min warm-up → 20-30 min aerobic → 5 min cool-down |
| Progression | Increase duration by 5 min every 2 weeks; increase intensity only after 4 weeks |
6 - No exertion
7-8 - Extremely light
9-10 - Very light
11-12 - Light ← START HERE (Week 2-3)
13-14 - Somewhat hard ← TARGET ZONE (Week 4+)
15-16 - Hard
17-18 - Very hard ← STOP if you reach here
19-20 - Extremely hard / Maximal
| Exercise | Sets × Reps | Resistance | Frequency |
|---|---|---|---|
| Seated knee extensions | 2 × 12-15 | Light resistance band / ankle weight 0.5-1 kg | 3× /week |
| Seated bicep curls | 2 × 12 | 0.5-1 kg dumbbells | 3× /week |
| Wall push-ups (standing) | 2 × 10 | Bodyweight | 3× /week |
| Seated calf raises | 2 × 15 | Bodyweight | Daily |
| Grip squeeze | 10 sec hold × 10 reps | Soft stress ball | Daily |
| Seated shoulder press | 2 × 10 | 0.5 kg | 3× /week |
| Asana | Description | Duration | Benefit |
|---|---|---|---|
| Sukhasana with lateral stretch | Seated, arms overhead, lean gently to each side | 30 sec each side × 3 | Opens thorax, improves lung expansion |
| Ardha Matsyendrasana (seated twist) | Seated twist to each side, hand on opposite knee | 30 sec each side × 3 | Massages abdominal organs, reduces gut congestion (helps ascites) |
| Paschimottanasana (gentle) | Seated forward bend, arms reaching to shins (not feet) | 30 sec × 3 | Gentle abdominal compression helps fluid drainage |
| Viparita Karani (legs-up-the-wall) | Lie on back, legs rested up against the wall at 45° | 5-10 minutes | THE most powerful passive intervention - reverses venous pooling from legs, reduces edema, shifts fluid centrally where kidneys can clear it |
| Supta Baddha Konasana | Reclined butterfly pose with bolster/pillow under back | 5 minutes | Opens chest, relaxes diaphragm, gentle thoracic expansion |
| Tadasana (Mountain pose - standing) | Stand straight, weight balanced, deep breathing | 1-2 min | Postural alignment, awareness |
| Marjariasana / Bitilasana (Cat-Cow) | On all fours - gentle spinal flexion/extension with breath | 10 cycles | Mobilizes spine, improves thoracic mobility, reduces Vata |
| Day | Morning Session | Evening |
|---|---|---|
| Monday | Pranayama (20min) + Yoga Nidra (20min) | IMT 15min + Ankle pumps |
| Tuesday | Pranayama + Chair Asanas + Walk 15-20min | IMT 15min |
| Wednesday | Pranayama (20min) + Yoga Nidra (20min) | IMT 15min + Light resistance |
| Thursday | Pranayama + Chair Asanas + Walk 15-20min | IMT 15min |
| Friday | Pranayama + Yoga Nidra | IMT 15min + Resistance training |
| Saturday | Full yoga session (60 min) | Rest |
| Sunday | Rest / Gentle walk only | IMT 15min |
| Sign | Action |
|---|---|
| SpO₂ drops below 92% | Stop immediately, rest, call doctor if persists |
| HR exceeds 110 bpm at rest | Defer exercise that day |
| RPE goes above 14 ("hard") | Reduce intensity immediately |
| Weight up > 1 kg from yesterday morning | No aerobic exercise; only pranayama + IMT |
| Any chest pain/tightness | Stop, rest, take GTN if prescribed, call doctor |
| Dizziness, near-fainting | Stop, sit down, call for help |
| Breathlessness unable to speak | Stop all activity |
| Outcome | Expected Improvement |
|---|---|
| 6-minute walk distance | +60-100 meters (in 8-12 weeks) |
| Breathlessness (dyspnea) | 30-40% reduction (Borg score) |
| Quality of life (MLHFQ score) | 20-30 point improvement |
| HF hospitalization risk | 31% reduction (Cochrane 2024) |
| LVEF | May improve 3-8% with sustained exercise over 6 months |
| Sleep quality | Significant improvement (yoga nidra + pranayama) |
| Mood/Irritability | Major improvement (bhramari, yoga nidra, Anulom-Vilom) |
| HbA1c | 0.3-0.5% reduction (aerobic exercise effect) |
Week 0-2: DECONGEST FIRST. Pranayama + ankle pumps only.
Week 2-4: Add IMT + 5-10 min slow walks.
Week 4-8: Build to 20-30 min walking + full yoga protocol.
Week 8-12: Add gentle resistance training.
Week 12+: Reassess with 6-minute walk test and echo.
Consider supervised hospital cardiac rehab program.
Key Evidence Sources:
- Cochrane Review 2024 - Exercise-based cardiac rehab for HF (PMID 38451843): 60 trials, 8728 patients - Class I recommendation
- PMID 35596876 - Cardiac rehabilitation in severely reduced EF: mortality benefit confirmed
- ESC Heart Failure Congress 2024 - Yoga improves EF and functional capacity in HF
- PMC10847087 - Practical Exercise Prescription Guidelines for HF
- APTACVP Clinical Practice Guideline for HF physiotherapy - IMT protocol (Evidence Grade A)
- BMJ Open 2026 (Yoga-CaRe RCT in HFrEF) - ongoing Indian multicenter trial
Disclaimer: This protocol must be reviewed and cleared by your treating cardiologist before starting. A supervised cardiac rehabilitation session with a physiotherapist for the first 4-6 sessions is strongly recommended to ensure safe exercise intensity calibration. Do NOT self-start aerobic exercise while still experiencing ascites or orthopnea.
Can shasankasana/child pose and setubandhan/bridge pose done in such cases??
Shashankasana child pose heart failure hemodynamic effects cardiac contraindication venous return
Setu Bandhasana bridge pose heart failure cardiac hemodynamics preload contraindication yoga
yoga poses hemodynamic effects heart failure venous return cardiac preload
Position: Kneeling → forward fold → forehead to floor,
arms extended forward OR alongside the body,
abdomen compressed against thighs,
head below the level of the heart
| Physiological Effect | Impact on HFrEF |
|---|---|
| Head below heart → mild inversion | Increases cerebral venous return; modest increase in cardiac preload |
| Abdomen compressed against thighs | Raises intra-abdominal pressure → squeezes ascitic fluid → can worsen discomfort and dyspnea significantly |
| Thorax compressed / restricted | Reduces tidal volume; breathing becomes shallower - PROBLEM in a breathless patient |
| Arms extended overhead | Additional muscle stretch; neutral hemodynamic effect |
| Prone-like position with head down | In fluid overloaded state, fluid redistribution to thorax → worsens pulmonary congestion |
| Phase | Decision | Reason |
|---|---|---|
| Phase 0 - Currently (fluid overloaded, ascites present) | ❌ CONTRAINDICATED | Abdominal compression on a tense, fluid-filled abdomen causes significant pain and worsens breathlessness. Head-below-heart position increases pulmonary preload when lungs are already congested |
| Phase 1 - Partially decongested (mild residual fluid) | ⚠️ MODIFIED ONLY | Use a thick bolster/pillow under the chest so abdomen is NOT compressed; forehead on stacked fists - not forced down |
| Phase 2-3 - Fully decongested, stable | ✅ YES, with modification | Short holds (30-60 sec max); not in sequence with active breathlessness; modified version comfortable |
Position: Supine → feet flat on floor → pelvis lifted
Shoulders, neck, and head remain on the floor
Hips and lower body elevated above heart level
| Physiological Effect | Impact on HFrEF |
|---|---|
| Legs and pelvis elevated above heart | Significant increase in venous return from lower limbs → increases cardiac preload abruptly |
| Gluteal + leg muscle contraction | Active muscle pump → further drives venous blood centrally |
| Lumbar extension | Mild increase in intra-abdominal pressure |
| Chest opens / thorax expanded | Improves lung expansion - BENEFICIAL for breathing |
| Head and neck flat (below heart level) | Increases cerebral venous pressure mildly |
| Isometric muscle work (glutes, legs) | BP response: modest increase in SBP |
In HFrEF with a failing ventricle (LVEF ~20-25%), the Frank-Starling reserve is severely limited. Normally, when you increase venous return (preload), the heart beats more strongly. In severe HFrEF, the heart cannot respond to the sudden increase in preload from Setu Bandhasana. Instead, the excess volume backs up into the pulmonary circulation → acute worsening of breathlessness, potentially pulmonary flash.
| Phase | Decision | Reason |
|---|---|---|
| Phase 0 - Currently (fluid overloaded) | ❌ CONTRAINDICATED | Acute preload surge onto an already congested, failing ventricle; can precipitate acute pulmonary edema |
| Phase 1 - Partially decongested | ❌ Still avoid | EF remains ~20-25%; preload tolerance is very limited |
| Phase 2 - Stable, decongested, on GDMT, EF improving | ⚠️ Modified / Short hold only | Static hold < 20-30 seconds; feet flat (not legs fully elevated); breathe continuously; monitor SpO₂ |
| Phase 3 - EF improved > 35%, fully stable, GDMT optimized | ✅ Yes, with supervision | Dynamic (not static) version; short holds; in supervised yoga session |
| Shashankasana (Child Pose) | Setu Bandhasana (Bridge Pose) | |
|---|---|---|
| Main concern in HFrEF | Abdominal compression (worsens ascites) + head below heart when congested | Acute preload surge → pulmonary congestion in severely reduced EF |
| Currently (Phase 0) | ❌ Contraindicated | ❌ Contraindicated |
| Phase 1 (mild fluid) | ⚠️ Modified with bolster only | ❌ Still avoid |
| Phase 2 (decongested) | ✅ Modified - supported version | ⚠️ Passive/supported version only |
| Phase 3 (EF improving) | ✅ Full pose, short hold | ✅ Yes with supervision |
| Safe modification | Bolster between legs + pillow under forehead | Yoga block under sacrum (passive supported bridge) |
| Hold duration | Max 60 seconds | Max 20-30 sec active; 3-5 min passive supported |
| Breathing during pose | Continuous, no holds | Exhale going up, continuous while held |
| Stop signal | Any breathlessness, abdominal pain | SpO₂ drop, breathlessness, palpitations |
For any yoga pose in this patient, ask two questions:
- Does it compress the abdomen? → Risk of worsening ascites and dyspnea
- Does it put legs/pelvis above heart level? → Risk of sudden preload surge on a failing ventricle
If yes to either → modify or avoid until fully decongested and LVEF has improved with GDMT.
Search for latest clinical guidelines on yoga therapy integration in cardiac rehab programs
yoga cardiac rehabilitation integration guidelines heart failure
yoga therapy cardiac rehabilitation clinical guidelines AHA ACC ESC 2024 2025 integration recommendations
yoga adjunct cardiac rehabilitation randomized controlled trial meta-analysis 2023 2024
yoga cardiac rehabilitation cardiovascular outcomes quality of life
Yoga-CaRe trial results 2024 2025 yoga cardiac rehabilitation heart failure India evidence
ESC 2024 AHA 2025 yoga mind body complementary cardiac rehabilitation class recommendation statement
PMID: 39315436
PMID: 40296448
https://pmc.ncbi.nlm.nih.gov/articles/PMC12815088
yoga heart failure ejection fraction quality of life autonomic nervous system meta-analysis
"cardiac rehabilitation" yoga "core components" 2024 AHA scientific statement psychosocial mind-body
| Guideline Body | Document | Year | Yoga-Specific Status |
|---|---|---|---|
| AHA/AACVPR | Core Components of Cardiac Rehabilitation - Scientific Statement | 2024 | Psychosocial management as mandatory core component; mind-body modalities supported under stress management |
| AHA/ACC | 2025 Hypertension Guidelines | 2025 | Yoga and mind-body interventions formally recognized for BP/psychosocial management |
| ESC | Heart Failure Guidelines (update pending) | 2026* | ESC Cardiac Rehabilitation Guidelines - full update expected August 2026 |
| Yoga-CaRe Trial | Landmark multicenter RCT | 2020-2025 | Demonstrates safety, feasibility, QoL benefit; per-protocol analysis shows clinical event reduction |
| ESC HFA Congress | Yoga in HF - presented evidence | 2024 | Yoga significantly improved LVEF, NYHA class, BP, HR at 52 weeks |
Key implication: While yoga does not yet have a standalone named Class I recommendation in the AHA CR statement, it maps directly onto the psychosocial management core component, which IS Class I. Programs are encouraged to use validated stress-reduction modalities - and yoga meets this bar.
| Outcome | Yoga + GDMT Group | GDMT Alone Group | Significance |
|---|---|---|---|
| LVEF | 41.5% → 44.4% | 42.3% → 41.6% | p < 0.05 |
| NYHA Class | Major improvement | Marginal improvement | p < 0.05 |
| Systolic BP | Significantly reduced | Smaller reduction | p < 0.05 |
| Heart Rate | Significantly reduced | Smaller reduction | p < 0.05 |
| BMI | Significantly reduced | Smaller reduction | p < 0.05 |
"Patients who practised yoga on top of taking their medications felt better, were able to do more, and had stronger hearts than those who only took drugs for their heart failure." - Dr. Ajit Singh, ICMR/Manipal, ESC HFA 2024
| Application | Evidence Level | Current Guideline Status |
|---|---|---|
| Yoga for QoL in stable HFrEF | Level B (multiple RCTs, ESC 2024 data) | Supported under psychosocial component |
| Yoga for LVEF improvement in stable HF | Level B-NR (observational + small RCTs) | Not yet a standalone guideline recommendation |
| Yoga for post-MI CR (QoL) | Level A (Yoga-CaRe: 3,959 patients) | Validated; increasingly recommended in India |
| Yoga for MACE reduction post-CABG | Level B-R (15-year RCT, 2025) | Emerging; expected in 2026 ESC CR Guidelines |
| Pranayama for dyspnea/breathlessness in HF | Level B (multiple RCTs) | Supported within IMT framework |
| Yoga Nidra for sleep/anxiety in cardiac patients | Level B | Supported under psychosocial management |
| Yoga as replacement for conventional CR | Insufficient evidence | NOT supported - adjunct only |
| Week | Content | Format |
|---|---|---|
| Week 1 | Education session: HF, lifestyle, medications | Individual/group |
| Week 3 | Meditation + pranayama introduction | Supervised |
| Weeks 5-7 | Full yoga sessions (twice weekly) | Supervised × 8 sessions |
| Weeks 8-12 | Home practice + monthly supervision | Hybrid |
| Ongoing | Daily home practice 30-45 min | Independent |
CURRENT STATUS (June 2026):
──────────────────────────────────────────────────────────
✅ Formally recognized within AHA 2024 CR Core Components
under Psychosocial Management (Class I component)
✅ Supported by AHA/ACC 2025 guidelines for stress/BP
management - mind-body interventions validated
✅ Demonstrated by ESC HFA 2024 data to improve LVEF,
NYHA class, BP, HR in HFrEF over 52 weeks
✅ 15-year RCT (2025) shows MACE + mortality reduction
in yoga-based CR post-CABG
⏳ PENDING: ESC 2026 CR Guidelines expected to give
yoga a formal standalone Class IIa recommendation
⚠️ NOT YET: No Class I standalone guideline for yoga
in HFrEF from AHA/ACC or ESC - evidence building
toward this threshold
📋 Ongoing: Yoga-CaRe HFrEF mechanistic trial (2026)
and YoGH-Biome trial will provide biological
evidence base for future Class I recommendation
──────────────────────────────────────────────────────────
PRACTICAL GUIDANCE: Integrate yoga NOW as a
psychosocial/complementary component alongside
conventional CR - the evidence supports it, major
guidelines accommodate it, and the formal Class I
recommendation is coming.
Create a comprehensive yoga-integrated cardiac rehabilitation program protocol for this HFrEF patient
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or new"
mkdir -p /home/daytona/workspace/hfref-yoga-cr-protocol && python3 -c "import reportlab; print('reportlab ok')" && python3 -c "from reportlab.lib.pagesizes import A4; print('A4 ok')"
~/hfref-yoga-cr-protocol/build_protocol.py
#!/usr/bin/env python3
"""
Yoga-Integrated Cardiac Rehabilitation Protocol for HFrEF Patient
Hemant Govind Khare, 65M | LVEF ~20-25% | NYHA Class III
Generated by Orris AI | Based on AHA 2024, ESC HFA 2024, Yoga-CaRe Evidence
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
from reportlab.pdfgen import canvas as pdfcanvas
import os
OUTPUT_PATH = "/home/daytona/workspace/hfref-yoga-cr-protocol/HFrEF_Yoga_CR_Protocol.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
C_NAVY = colors.HexColor("#1a2e4a")
C_TEAL = colors.HexColor("#0d7377")
C_TEAL_LT = colors.HexColor("#e6f7f7")
C_AMBER = colors.HexColor("#e8a020")
C_AMBER_LT = colors.HexColor("#fdf3e0")
C_RED = colors.HexColor("#c0392b")
C_RED_LT = colors.HexColor("#fdecea")
C_GREEN = colors.HexColor("#1e8449")
C_GREEN_LT = colors.HexColor("#e9f7ef")
C_GREY_LT = colors.HexColor("#f5f6fa")
C_GREY = colors.HexColor("#7f8c8d")
C_WHITE = colors.white
C_BLACK = colors.HexColor("#1c1c1c")
# ── Styles ───────────────────────────────────────────────────────────────────
def make_styles():
base = getSampleStyleSheet()
s = {}
s["cover_title"] = ParagraphStyle("cover_title",
fontName="Helvetica-Bold", fontSize=22, textColor=C_WHITE,
alignment=TA_CENTER, spaceAfter=6, leading=28)
s["cover_sub"] = ParagraphStyle("cover_sub",
fontName="Helvetica", fontSize=13, textColor=C_WHITE,
alignment=TA_CENTER, spaceAfter=4, leading=18)
s["cover_meta"] = ParagraphStyle("cover_meta",
fontName="Helvetica", fontSize=10, textColor=colors.HexColor("#c8d6e5"),
alignment=TA_CENTER, spaceAfter=3, leading=14)
s["h1"] = ParagraphStyle("h1",
fontName="Helvetica-Bold", fontSize=15, textColor=C_WHITE,
alignment=TA_LEFT, spaceBefore=10, spaceAfter=4, leading=20,
leftIndent=0, backColor=C_NAVY,
borderPadding=(6, 8, 6, 8))
s["h2"] = ParagraphStyle("h2",
fontName="Helvetica-Bold", fontSize=12, textColor=C_NAVY,
alignment=TA_LEFT, spaceBefore=10, spaceAfter=4, leading=16,
borderPadding=(3, 0, 3, 0))
s["h3"] = ParagraphStyle("h3",
fontName="Helvetica-Bold", fontSize=10.5, textColor=C_TEAL,
alignment=TA_LEFT, spaceBefore=7, spaceAfter=3, leading=14)
s["body"] = ParagraphStyle("body",
fontName="Helvetica", fontSize=9.5, textColor=C_BLACK,
alignment=TA_JUSTIFY, spaceAfter=4, leading=14)
s["body_sm"] = ParagraphStyle("body_sm",
fontName="Helvetica", fontSize=8.5, textColor=C_BLACK,
alignment=TA_LEFT, spaceAfter=3, leading=12)
s["bullet"] = ParagraphStyle("bullet",
fontName="Helvetica", fontSize=9.5, textColor=C_BLACK,
alignment=TA_LEFT, spaceAfter=3, leading=14,
leftIndent=14, bulletIndent=4)
s["bullet_bold"] = ParagraphStyle("bullet_bold",
fontName="Helvetica-Bold", fontSize=9.5, textColor=C_NAVY,
alignment=TA_LEFT, spaceAfter=3, leading=14,
leftIndent=14, bulletIndent=4)
s["warning"] = ParagraphStyle("warning",
fontName="Helvetica-Bold", fontSize=9.5, textColor=C_RED,
alignment=TA_LEFT, spaceAfter=3, leading=14,
leftIndent=10, backColor=C_RED_LT,
borderPadding=(5, 6, 5, 6))
s["note_green"] = ParagraphStyle("note_green",
fontName="Helvetica", fontSize=9, textColor=C_GREEN,
alignment=TA_LEFT, spaceAfter=3, leading=13,
leftIndent=10, backColor=C_GREEN_LT,
borderPadding=(4, 6, 4, 6))
s["note_amber"] = ParagraphStyle("note_amber",
fontName="Helvetica-Bold", fontSize=9.5, textColor=colors.HexColor("#7d4e00"),
alignment=TA_LEFT, spaceAfter=3, leading=14,
leftIndent=10, backColor=C_AMBER_LT,
borderPadding=(5, 6, 5, 6))
s["teal_box"] = ParagraphStyle("teal_box",
fontName="Helvetica", fontSize=9.5, textColor=C_NAVY,
alignment=TA_LEFT, spaceAfter=3, leading=14,
leftIndent=10, backColor=C_TEAL_LT,
borderPadding=(5, 6, 5, 6))
s["footer"] = ParagraphStyle("footer",
fontName="Helvetica", fontSize=7.5, textColor=C_GREY,
alignment=TA_CENTER, leading=10)
s["phase_header"] = ParagraphStyle("phase_header",
fontName="Helvetica-Bold", fontSize=13, textColor=C_WHITE,
alignment=TA_CENTER, spaceBefore=4, spaceAfter=4, leading=18,
backColor=C_TEAL, borderPadding=(7, 8, 7, 8))
s["center_bold"] = ParagraphStyle("center_bold",
fontName="Helvetica-Bold", fontSize=10, textColor=C_NAVY,
alignment=TA_CENTER, spaceAfter=3, leading=14)
return s
# ── Table helpers ─────────────────────────────────────────────────────────────
def hdr_row(cells, bg=C_NAVY, fg=C_WHITE, fontsize=9):
return [Paragraph(f"<b>{c}</b>", ParagraphStyle("th",
fontName="Helvetica-Bold", fontSize=fontsize,
textColor=fg, alignment=TA_CENTER, leading=12)) for c in cells]
def td(text, s, bold=False, align=TA_LEFT, color=C_BLACK):
fn = "Helvetica-Bold" if bold else "Helvetica"
st = ParagraphStyle("td", fontName=fn, fontSize=9,
textColor=color, alignment=align, leading=12, spaceAfter=1)
return Paragraph(text, st)
def std_table(data, col_widths, hdr_bg=C_NAVY):
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), hdr_bg),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("ROWBACKGROUNDS", (0,1), (-1,-1), [C_WHITE, C_GREY_LT]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#c0c8d0")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING",(0,0), (-1,-1), 5),
]))
return t
# ── Cover page ────────────────────────────────────────────────────────────────
def cover_page(S):
elems = []
# Top navy banner
banner_data = [[Paragraph("", S["cover_title"])]]
banner = Table(banner_data, colWidths=[170*mm])
banner.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1), C_NAVY),
("TOPPADDING",(0,0),(-1,-1),4),
("BOTTOMPADDING",(0,0),(-1,-1),4)]))
cover_block = [
[Paragraph("YOGA-INTEGRATED", S["cover_title"])],
[Paragraph("CARDIAC REHABILITATION PROTOCOL", S["cover_title"])],
[Spacer(1,6*mm)],
[Paragraph("Heart Failure with Severely Reduced Ejection Fraction (HFrEF)", S["cover_sub"])],
[Spacer(1,4*mm)],
[HRFlowable(width=120*mm, thickness=1, color=colors.HexColor("#4a7eb5"), spaceAfter=6)],
[Spacer(1,3*mm)],
[Paragraph("Patient: Hemant Govind Khare | Age: 65 Years | Male", S["cover_meta"])],
[Paragraph("LVEF: ~20-25% | NYHA Class III | Decompensated HF with Fluid Overload", S["cover_meta"])],
[Paragraph("HbA1c: 8.6% | Uric Acid: 9.6 mg/dL | Hb: 11.8 g/dL", S["cover_meta"])],
[Spacer(1,6*mm)],
[HRFlowable(width=120*mm, thickness=1, color=colors.HexColor("#4a7eb5"), spaceAfter=6)],
[Spacer(1,3*mm)],
[Paragraph("Evidence Base: AHA/AACVPR 2024 CR Core Components | ESC HFA 2024 | Yoga-CaRe RCT", S["cover_meta"])],
[Paragraph("AHA/ACC 2022 HF Guidelines | APTACVP CPG for HF Physiotherapy", S["cover_meta"])],
[Paragraph("Yoga-CaRe HFrEF Mechanistic Trial Protocol (BMJ Open 2026)", S["cover_meta"])],
[Spacer(1,8*mm)],
[Paragraph("Prepared by: Orris AI | Date: June 17, 2026", S["cover_meta"])],
[Paragraph("For clinical use under supervision of a qualified cardiologist,", S["cover_meta"])],
[Paragraph("cardiac physiotherapist, and BNYS-qualified yoga therapist", S["cover_meta"])],
]
cover_table = Table(cover_block, colWidths=[170*mm])
cover_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_NAVY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
]))
elems.append(Spacer(1, 20*mm))
elems.append(cover_table)
elems.append(Spacer(1, 10*mm))
# Quick-reference box
qr_data = [
[hdr_row(["PROGRAMME OVERVIEW"], bg=C_TEAL)[0]],
[td("Total Duration: 16 Weeks (Phase 0 through Phase 3)", S["body"])],
[td("Yoga Sessions: 20 supervised + daily home practice", S["body"])],
[td("Physiotherapy: 3-5x/week aerobic + IMT 5-7x/week", S["body"])],
[td("Reassessment: Weeks 4, 8, 12, 16 (Echo + 6MWT + QoL scores)", S["body"])],
[td("Team: Cardiologist + Cardiac PT + BNYS Yoga Therapist + Dietitian", S["body"])],
]
qr_table = Table(qr_data, colWidths=[150*mm])
qr_table.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,0), C_TEAL),
("TEXTCOLOR",(0,0),(0,0), C_WHITE),
("BACKGROUND",(0,1),(-1,-1), C_TEAL_LT),
("GRID",(0,0),(-1,-1), 0.4, colors.HexColor("#a0d0d0")),
("LEFTPADDING",(0,0),(-1,-1), 10),
("TOPPADDING",(0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("ALIGN",(0,0),(-1,-1), "CENTER"),
]))
elems.append(qr_table)
elems.append(PageBreak())
return elems
# ── Section heading helper ────────────────────────────────────────────────────
def sec_heading(title, S, color=C_NAVY):
data = [[Paragraph(f" {title}", ParagraphStyle("sh",
fontName="Helvetica-Bold", fontSize=13, textColor=C_WHITE,
alignment=TA_LEFT, leading=18))]]
t = Table(data, colWidths=[170*mm])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), color),
("TOPPADDING",(0,0),(-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING",(0,0),(-1,-1), 8),
]))
return t
def subsec(title, S):
data = [[Paragraph(f" {title}", ParagraphStyle("ssh",
fontName="Helvetica-Bold", fontSize=11, textColor=C_WHITE,
alignment=TA_LEFT, leading=15))]]
t = Table(data, colWidths=[170*mm])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), C_TEAL),
("TOPPADDING",(0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING",(0,0),(-1,-1), 8),
]))
return t
# ── Section 1: Patient Summary ────────────────────────────────────────────────
def section_patient(S):
elems = []
elems.append(sec_heading("SECTION 1: PATIENT PROFILE & CLINICAL SUMMARY", S))
elems.append(Spacer(1,4*mm))
data = [
hdr_row(["PARAMETER","VALUE","CLINICAL SIGNIFICANCE"], bg=C_NAVY),
[td("Patient", S["body"]), td("Hemant Govind Khare, 65 Y/M", S["body"], bold=True), td("Male, senior citizen - higher SCD risk", S["body_sm"])],
[td("LVEF", S["body"]), td("~20-25% (Severely Reduced)", S["body"], bold=True, color=C_RED), td("HFrEF; Class I ICD indication after 3m GDMT", S["body_sm"])],
[td("NYHA Class", S["body"]), td("Class III (Estimated)", S["body"], bold=True, color=C_RED), td("Symptomatic at mild exertion; limits daily activities", S["body_sm"])],
[td("Active Symptoms", S["body"]), td("Ascites, Orthopnea, Dyspnea", S["body"], bold=True, color=C_RED), td("Decompensated - exercise deferred until decongested", S["body_sm"])],
[td("HbA1c", S["body"]), td("8.6% (Poorly controlled T2DM)", S["body"], bold=True, color=colors.HexColor("#b7770d")), td("SGLT2i dual benefit; exercise lowers HbA1c 0.3-0.5%", S["body_sm"])],
[td("Creatinine", S["body"]), td("1.1 mg/dL", S["body"]), td("Borderline - monitor with diuretics; eGFR ~55-65", S["body_sm"])],
[td("Hemoglobin", S["body"]), td("11.8 g/dL (Mild Anemia)", S["body"], bold=True, color=colors.HexColor("#b7770d")), td("Check iron stores; IV iron if deficient - improves exercise capacity", S["body_sm"])],
[td("Uric Acid", S["body"]), td("9.6 mg/dL (High)", S["body"], bold=True, color=colors.HexColor("#b7770d")), td("Allopurinol needed; SGLT2i also lowers uric acid", S["body_sm"])],
[td("Vitamin D", S["body"]), td("87.6 ng/mL (Sufficient)", S["body"], bold=True, color=C_GREEN), td("No supplementation needed; check if on supps", S["body_sm"])],
[td("Echo", S["body"]), td("LV dilated, diastolic + systolic dysfunction", S["body"]), td("Reassess at 3-6m on GDMT; EF may improve", S["body_sm"])],
]
t = std_table(data, [38*mm, 52*mm, 75*mm])
elems.append(t)
elems.append(Spacer(1,4*mm))
elems.append(Paragraph(
"PREREQUISITE: Patient must be haemodynamically stable and decongested (no active ascites / orthopnea at rest) "
"before Phase 1 exercise begins. Phases 0 is the only phase applicable in the current decompensated state.",
S["warning"]))
elems.append(Spacer(1,3*mm))
# GDMT box
elems.append(Paragraph("Concurrent Guideline-Directed Medical Therapy (GDMT) - Mandatory Foundation", S["h2"]))
gdmt_data = [
hdr_row(["Drug Class","Agent","Dose","Role in Exercise Context"], bg=C_TEAL),
[td("SGLT2 Inhibitor", S["body"]), td("Dapagliflozin", S["body"], bold=True), td("10 mg OD", S["body"]), td("Diuretic + glycemic + anti-arrhythmic; reduces SCD risk 21%", S["body_sm"])],
[td("ARNI", S["body"]), td("Sacubitril/Valsartan", S["body"], bold=True), td("24/26 → 97/103 mg BD", S["body"]), td("EF improvement enables progressive exercise advancement", S["body_sm"])],
[td("Beta-Blocker", S["body"]), td("Carvedilol", S["body"], bold=True), td("3.125 → 25 mg BD", S["body"]), td("Limits max HR - use Borg RPE scale not HR targets", S["body_sm"])],
[td("MRA", S["body"]), td("Spironolactone", S["body"], bold=True), td("25-50 mg OD", S["body"]), td("Monitor K+ during exercise-induced sweating", S["body_sm"])],
[td("Loop Diuretic", S["body"]), td("Furosemide", S["body"], bold=True), td("40-80 mg OD/BD", S["body"]), td("Weigh daily; no exercise if weight up >1 kg overnight", S["body_sm"])],
]
elems.append(std_table(gdmt_data, [32*mm, 36*mm, 28*mm, 68*mm], hdr_bg=C_TEAL))
elems.append(PageBreak())
return elems
# ── Section 2: Safety Framework ───────────────────────────────────────────────
def section_safety(S):
elems = []
elems.append(sec_heading("SECTION 2: SAFETY FRAMEWORK & MONITORING PROTOCOL", S, color=C_RED))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Absolute Contraindications to Exercise (Any Phase)", S["h2"]))
contra_data = [
hdr_row(["PARAMETER","CONTRAINDICATION THRESHOLD","ACTION"], bg=C_RED),
[td("SpO2", S["body"]), td("< 90% at rest", S["body"], bold=True, color=C_RED), td("No exercise; supplemental O2; call doctor", S["body_sm"])],
[td("Resting HR", S["body"]), td("> 110 bpm", S["body"], bold=True, color=C_RED), td("Defer; assess for AF/decompensation", S["body_sm"])],
[td("Systolic BP", S["body"]), td("< 90 mmHg or > 180 mmHg", S["body"], bold=True, color=C_RED), td("Defer; notify cardiologist", S["body_sm"])],
[td("Daily weight", S["body"]), td("Gain > 1 kg overnight / 2 kg in 3 days", S["body"], bold=True, color=C_RED), td("Pranayama + IMT only; increase diuretic per plan", S["body_sm"])],
[td("Symptoms", S["body"]), td("Chest pain, palpitations, near-syncope", S["body"], bold=True, color=C_RED), td("Stop immediately; rest; seek emergency care", S["body_sm"])],
[td("Active fluid overload", S["body"]), td("Ascites / orthopnea / severe breathlessness at rest", S["body"], bold=True, color=C_RED), td("Phase 0 ONLY; no aerobic exercise", S["body_sm"])],
[td("SpO2 during exercise", S["body"]), td("Falls below 92% during activity", S["body"], bold=True, color=C_RED), td("Stop activity; rest; investigate", S["body_sm"])],
]
elems.append(std_table(contra_data, [30*mm, 65*mm, 70*mm], hdr_bg=C_RED))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Exercise Intensity Targets", S["h2"]))
borg_data = [
hdr_row(["BORG RPE","DESCRIPTION","PHASE APPLICABILITY","STATUS"], bg=C_NAVY),
[td("6-8", S["body"]), td("Extremely light / No exertion", S["body"]), td("Phase 0-1 (Pranayama, ankle pumps)", S["body_sm"]), td("SAFE", S["body"], bold=True, color=C_GREEN)],
[td("9-10", S["body"]), td("Very light (slow walk, gentle asana)", S["body"]), td("Phase 1 initial (weeks 2-3)", S["body_sm"]), td("SAFE", S["body"], bold=True, color=C_GREEN)],
[td("11-12", S["body"]), td("Light exertion", S["body"]), td("Phase 1-2 (weeks 3-6)", S["body_sm"]), td("TARGET - Phase 1", S["body"], bold=True, color=C_TEAL)],
[td("13-14", S["body"]), td('"Somewhat hard" - talk possible', S["body"]), td("Phase 2-3 (weeks 6+)", S["body_sm"]), td("TARGET - Phase 2-3", S["body"], bold=True, color=C_TEAL)],
[td("15-16", S["body"]), td("Hard - speech strained", S["body"]), td("All phases", S["body_sm"]), td("REDUCE PACE", S["body"], bold=True, color=C_AMBER)],
[td("17-20", S["body"]), td("Very hard to maximal", S["body"]), td("All phases", S["body_sm"]), td("STOP", S["body"], bold=True, color=C_RED)],
]
elems.append(std_table(borg_data, [16*mm, 50*mm, 60*mm, 38*mm]))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph(
"NOTE ON BETA-BLOCKER EFFECT: Carvedilol will blunt maximum heart rate. Do NOT use heart rate targets alone - "
"use Borg RPE 11-14 as the primary intensity guide throughout this programme.",
S["note_amber"]))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Daily Home Monitoring Checklist (Pre-Exercise)", S["h2"]))
monitor_data = [
hdr_row(["CHECK","HOW TO MEASURE","SAFE RANGE","If Outside Range"], bg=C_TEAL),
[td("Body weight", S["body"]), td("Digital scale, morning, same clothes", S["body_sm"]), td("< +1 kg from yesterday", S["body_sm"], color=C_GREEN), td("Only pranayama + IMT today; call doctor", S["body_sm"])],
[td("SpO2", S["body"]), td("Pulse oximeter - rest 5 min first", S["body_sm"]), td("92-100%", S["body_sm"], color=C_GREEN), td("No exercise; call doctor if < 90%", S["body_sm"])],
[td("BP (if available)", S["body"]), td("BP monitor, seated, after 5 min rest", S["body_sm"]), td("90-160 / 60-100 mmHg", S["body_sm"], color=C_GREEN), td("Defer exercise; notify cardiologist", S["body_sm"])],
[td("Heart rate", S["body"]), td("Pulse oximeter or manual radial pulse", S["body_sm"]), td("50-100 bpm at rest", S["body_sm"], color=C_GREEN), td("> 110: defer aerobic; only yoga/pranayama", S["body_sm"])],
[td("Symptoms", S["body"]), td("Self-assessment", S["body_sm"]), td("No chest pain, no breathlessness at rest", S["body_sm"], color=C_GREEN), td("Contact cardiologist before any exercise", S["body_sm"])],
[td("Fluid intake", S["body"]), td("Diary/measuring jug", S["body_sm"]), td("< 1.5 L/day total", S["body_sm"], color=C_GREEN), td("Restrict further; review with dietitian", S["body_sm"])],
]
elems.append(std_table(monitor_data, [28*mm, 45*mm, 42*mm, 50*mm], hdr_bg=C_TEAL))
elems.append(PageBreak())
return elems
# ── Section 3: Phase protocol ─────────────────────────────────────────────────
def section_phases(S):
elems = []
elems.append(sec_heading("SECTION 3: PHASED EXERCISE & YOGA PROGRAMME", S))
elems.append(Spacer(1,4*mm))
# Phase overview table
phase_data = [
hdr_row(["PHASE","DURATION","PATIENT STATE","EXERCISE TYPE","YOGA TYPE"], bg=C_NAVY),
[td("0", S["body"], bold=True, color=C_RED), td("Weeks 1-2", S["body"]), td("Decompensated (current)", S["body"], bold=True, color=C_RED), td("Bed/chair exercises only", S["body_sm"]), td("Pranayama, Yoga Nidra only", S["body_sm"])],
[td("1", S["body"], bold=True, color=C_AMBER), td("Weeks 2-4", S["body"]), td("Early decongestion", S["body"], bold=True, color=C_AMBER), td("IMT + 5-15 min walking", S["body_sm"]), td("Seated asana + Pranayama", S["body_sm"])],
[td("2", S["body"], bold=True, color=C_TEAL), td("Weeks 4-12", S["body"]), td("Stable, decongested", S["body"], bold=True, color=C_TEAL), td("Aerobic + light resistance", S["body_sm"]), td("Full gentle yoga protocol", S["body_sm"])],
[td("3", S["body"], bold=True, color=C_GREEN), td("Weeks 12-16+", S["body"]), td("Improving (EF may recover)", S["body"], bold=True, color=C_GREEN), td("Progressive CR + interval", S["body_sm"]), td("Advanced asana if tolerated", S["body_sm"])],
]
elems.append(std_table(phase_data, [12*mm, 22*mm, 38*mm, 48*mm, 45*mm]))
elems.append(Spacer(1,5*mm))
# ── PHASE 0 ──
phase0 = [
subsec("PHASE 0: DECONGESTION PHASE (Current Status - Weeks 1-2)", S),
Spacer(1,3*mm),
Paragraph("<b>Goal:</b> Reduce fluid burden; prevent muscle wasting; begin respiratory training. "
"Do NOT begin aerobic exercise. This phase is entirely safe even with active ascites and orthopnea.", S["body"]),
Spacer(1,2*mm),
]
p0_data = [
hdr_row(["INTERVENTION","TECHNIQUE","REPS / DURATION","FREQUENCY","PRECAUTION"], bg=C_TEAL),
[td("Diaphragmatic breathing", S["body"]), td("Hand on belly; slow nasal inhale (belly rises); slow exhale 2x longer", S["body_sm"]), td("10 breaths x 3 sets", S["body_sm"]), td("3-4x daily", S["body_sm"]), td("No breath holding", S["body_sm"])],
[td("Pursed-lip breathing", S["body"]), td("Inhale nose 2 counts; exhale through pursed lips 4-6 counts", S["body_sm"]), td("5-10 min per session", S["body_sm"]), td("4x daily", S["body_sm"]), td("Keep shoulders relaxed", S["body_sm"])],
[td("Anulom-Vilom (basic)", S["body"]), td("Alternate nostril; no retention; ratio 4:6", S["body_sm"]), td("8-10 cycles", S["body_sm"]), td("BD (morning + evening)", S["body_sm"]), td("Gentle; no Kumbhaka", S["body_sm"])],
[td("Bhramari (humming bee)", S["body"]), td("Inhale deep; exhale with Mmm hum; eyes closed", S["body_sm"]), td("8-10 rounds", S["body_sm"]), td("BD", S["body_sm"]), td("Gentle volume; not strained", S["body_sm"])],
[td("Yoga Nidra", S["body"]), td("Guided body-scan relaxation (Savasana or semi-reclined)", S["body_sm"]), td("20-30 min", S["body_sm"]), td("Daily (2 pm preferred)", S["body_sm"]), td("Semi-reclined if orthopnea", S["body_sm"])],
[td("Ankle pumps", S["body"]), td("Flex/extend ankles while seated; both feet", S["body_sm"]), td("20 reps x 3 sets", S["body_sm"]), td("Every 1-2 hours", S["body_sm"]), td("Keeps venous blood moving", S["body_sm"])],
[td("Seated heel raises", S["body"]), td("Lift heels while seated, hold 2 sec, lower", S["body_sm"]), td("15 reps x 3 sets", S["body_sm"]), td("3x daily", S["body_sm"]), td("No straining", S["body_sm"])],
[td("Gentle arm circles", S["body"]), td("Small forward and backward circles, seated", S["body_sm"]), td("10 each direction", S["body_sm"]), td("BD", S["body_sm"]), td("Below shoulder height only", S["body_sm"])],
]
phase0.append(std_table(p0_data, [28*mm, 48*mm, 26*mm, 22*mm, 40*mm], hdr_bg=C_TEAL))
phase0.append(Spacer(1,3*mm))
phase0.append(Paragraph(
"POSITIONING: Maintain 30-45 degree head-up position at all times (sleeping, resting, yoga). "
"Never lie fully flat until orthopnea resolves. Use 3-4 firm pillows or a wedge cushion.",
S["note_amber"]))
phase0.append(Spacer(1,3*mm))
phase0.append(Paragraph(
"TRANSITION CRITERIA TO PHASE 1: (1) Euvolemic - no pitting edema, abdominal distension controlled; "
"(2) SpO2 >= 92% at rest without supplemental O2; (3) No orthopnea - can lie at 30 degrees comfortably; "
"(4) Stable weight for 3 consecutive days; (5) Cardiologist clearance obtained.",
S["note_green"]))
elems.append(KeepTogether(phase0))
elems.append(PageBreak())
# ── PHASE 1 ──
phase1 = [
subsec("PHASE 1: EARLY MOBILISATION (Weeks 2-4, post-decongestion)", S),
Spacer(1,3*mm),
Paragraph("<b>Goal:</b> Begin IMT; establish walking tolerance; introduce seated yoga asanas. "
"Build confidence and routine. All sessions supervised initially.", S["body"]),
Spacer(1,3*mm),
]
elems.append(Paragraph("A. Inspiratory Muscle Training (IMT) - Highest Priority Intervention", S["h2"]))
imt_data = [
hdr_row(["WEEK","DEVICE","INTENSITY (% MIP)","DURATION","FREQUENCY","EXPECTED BENEFIT"], bg=C_NAVY),
[td("1-2", S["body"]), td("Threshold IMT (Philips Respironics or equivalent)", S["body_sm"]), td("20% MIP (start)", S["body_sm"]), td("2 x 15 min/day", S["body_sm"]), td("5-7x/week", S["body_sm"]), td("Establish technique; reduce dyspnea", S["body_sm"])],
[td("3-4", S["body"]), td("Same device", S["body_sm"]), td("25-30% MIP", S["body_sm"]), td("30 min/day", S["body_sm"]), td("5-7x/week", S["body_sm"]), td("Respiratory muscle strength improving", S["body_sm"])],
[td("5-12", S["body"]), td("Same device", S["body_sm"]), td("30-40% MIP", S["body_sm"]), td("30 min/day", S["body_sm"]), td("5-7x/week", S["body_sm"]), td("30-40% reduction in dyspnea score", S["body_sm"])],
[td("13+", S["body"]), td("Maintain / progress", S["body_sm"]), td("40-50% MIP", S["body_sm"]), td("30 min/day", S["body_sm"]), td("5x/week maintenance", S["body_sm"]), td("60-80m improvement in 6MWT", S["body_sm"])],
]
elems += phase1
elems.append(std_table(imt_data, [12*mm, 38*mm, 24*mm, 22*mm, 20*mm, 48*mm]))
elems.append(Spacer(1,2*mm))
elems.append(Paragraph(
"Backup (no device): Blow through a narrow coffee straw - 5 seconds per breath, 20 breaths per session, 3x daily. "
"Evidence: PMID 37285766 (2023 RCT) and PMID 35472660 (2022 RCT) confirm IMT significantly improves exercise "
"capacity, respiratory muscle strength and QoL in HF patients.",
S["teal_box"]))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("B. Walking Programme - Phase 1", S["h2"]))
walk1_data = [
hdr_row(["WEEK","DURATION","PACE (RPE)","FREQUENCY","ROUTE","STOP IF..."], bg=C_NAVY),
[td("2", S["body"]), td("5-10 min", S["body_sm"]), td("RPE 9-10 (very light)", S["body_sm"]), td("3x/week", S["body_sm"]), td("Flat, shaded indoors / corridor", S["body_sm"]), td("Cannot speak full sentence", S["body_sm"])],
[td("3", S["body"]), td("10-15 min", S["body_sm"]), td("RPE 10-11 (light)", S["body_sm"]), td("3-4x/week", S["body_sm"]), td("Flat; avoid hills/stairs", S["body_sm"]), td("SpO2 < 92% or RPE > 13", S["body_sm"])],
[td("4", S["body"]), td("15-20 min", S["body_sm"]), td("RPE 11-12 (light)", S["body_sm"]), td("4x/week", S["body_sm"]), td("Outdoors early morning or cycle ergometer", S["body_sm"]), td("Palpitations or chest tightness", S["body_sm"])],
]
elems.append(std_table(walk1_data, [12*mm, 20*mm, 28*mm, 20*mm, 45*mm, 40*mm]))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph("C. Phase 1 Yoga Protocol - Seated / Supported", S["h2"]))
yoga1_data = [
hdr_row(["ASANA / PRACTICE","DESCRIPTION","DURATION","BENEFIT","CAUTION"], bg=C_TEAL),
[td("Diaphragmatic breathing", S["body"]), td("Nasal in 4 / out 6; belly-led", S["body_sm"]), td("5 min", S["body_sm"]), td("Parasympathetic activation", S["body_sm"]), td("No holds", S["body_sm"])],
[td("Anulom-Vilom", S["body"]), td("Alternate nostril; 4:6 ratio; no Kumbhaka", S["body_sm"]), td("5-8 min", S["body_sm"]), td("Reduces anxiety, balances ANS", S["body_sm"]), td("Max 2-count gentle pause only", S["body_sm"])],
[td("Bhramari", S["body"]), td("Hum on exhale; 8-10 rounds", S["body_sm"]), td("5 min", S["body_sm"]), td("NO release, HRV improvement, calms irritability", S["body_sm"]), td("Gentle volume", S["body_sm"])],
[td("Sukhasana lateral stretch", S["body"]), td("Seated; arm over, lean to each side", S["body_sm"]), td("30 sec x3 each side", S["body_sm"]), td("Thoracic opening, lung expansion", S["body_sm"]), td("Support with other arm on chair", S["body_sm"])],
[td("Seated spinal twist", S["body"]), td("Hand on opposite knee; gentle rotation", S["body_sm"]), td("30 sec x3 each side", S["body_sm"]), td("Massages gut, reduces congestion", S["body_sm"]), td("No forced compression; breathe", S["body_sm"])],
[td("Seated cat-cow", S["body"]), td("Arch and round spine gently with breath", S["body_sm"]), td("10 cycles", S["body_sm"]), td("Spinal mobility; chest opens", S["body_sm"]), td("Slow movements only", S["body_sm"])],
[td("Viparita Karani (legs up wall)", S["body"]), td("Legs rested at 45deg against wall; supine or 30deg raised head", S["body_sm"]), td("5-8 min", S["body_sm"]), td("Passive venous drainage; reduces leg edema", S["body_sm"]), td("Use if no breathlessness when supine", S["body_sm"])],
[td("Yoga Nidra", S["body"]), td("Guided rotation of consciousness; audio-guided", S["body_sm"]), td("20-25 min", S["body_sm"]), td("Cortisol reduction; deep sleep quality", S["body_sm"]), td("Semi-reclined if needed", S["body_sm"])],
]
elems.append(std_table(yoga1_data, [35*mm, 40*mm, 20*mm, 40*mm, 30*mm], hdr_bg=C_TEAL))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph(
"PHASE 1 TRANSITION CRITERIA: SpO2 >= 93% throughout 15-min walk; RPE stays <= 12; "
"tolerating 3+ sessions per week for 2 consecutive weeks; weight stable; no new symptoms.",
S["note_green"]))
elems.append(PageBreak())
# ── PHASE 2 ──
elems.append(subsec("PHASE 2: STRUCTURED CARDIAC REHABILITATION (Weeks 4-12)", S))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph(
"<b>Goal:</b> Build aerobic capacity (VO2 peak), restore muscle function, establish full yoga-CR programme. "
"Target: 3-7 MET-hr/week of total exercise volume (aerobic + resistance combined). "
"Evidence: Cochrane 2024 (60 trials, 8728 patients) - ExCR reduces HF hospitalisations by 31%.",
S["body"]))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph("A. Aerobic Exercise Training (Class I, Level A - AHA/ACC/HFSA 2022)", S["h2"]))
aero_data = [
hdr_row(["PARAMETER","WEEKS 4-6","WEEKS 6-8","WEEKS 8-10","WEEKS 10-12"], bg=C_NAVY),
[td("Mode", S["body"]), td("Walking / flat", S["body_sm"]), td("Walk or cycle ergometer", S["body_sm"]), td("Cycle ergometer preferred", S["body_sm"]), td("Cycle + treadmill", S["body_sm"])],
[td("Duration", S["body"]), td("20-25 min", S["body_sm"]), td("25-30 min", S["body_sm"]), td("30-35 min", S["body_sm"]), td("35-40 min", S["body_sm"])],
[td("Intensity (RPE)", S["body"]), td("11-12 (light)", S["body_sm"]), td("12-13", S["body_sm"]), td("13 (somewhat hard)", S["body_sm"]), td("13-14", S["body_sm"])],
[td("Frequency", S["body"]), td("3x/week", S["body_sm"]), td("3-4x/week", S["body_sm"]), td("4x/week", S["body_sm"]), td("4-5x/week", S["body_sm"])],
[td("Warm-up/Cool-down", S["body"]), td("5 min each", S["body_sm"]), td("5 min each", S["body_sm"]), td("5 min each", S["body_sm"]), td("5 min each", S["body_sm"])],
[td("Structure", S["body"]), td("Continuous", S["body_sm"]), td("Continuous", S["body_sm"]), td("Add 2 min interval bursts x3", S["body_sm"]), td("AIT: 2min/1min x6-8 cycles", S["body_sm"])],
]
elems.append(std_table(aero_data, [28*mm, 33*mm, 36*mm, 36*mm, 36*mm]))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph("B. Resistance Training (3x/week; Evidence Grade B-Moderate, APTACVP CPG)", S["h2"]))
resist_data = [
hdr_row(["EXERCISE","SETS x REPS","RESISTANCE","PROGRESSION","KEY RULE"], bg=C_NAVY),
[td("Seated knee extensions", S["body"]), td("2 x 12-15", S["body_sm"]), td("Light band / 0.5-1 kg", S["body_sm"]), td("Add 0.5 kg at week 6 if RPE < 11", S["body_sm"]), td("Exhale on extension", S["body_sm"])],
[td("Seated bicep curls", S["body"]), td("2 x 12", S["body_sm"]), td("0.5-1 kg dumbbell", S["body_sm"]), td("Progress to 1.5 kg at week 8", S["body_sm"]), td("Never hold breath", S["body_sm"])],
[td("Wall push-ups", S["body"]), td("2 x 10-12", S["body_sm"]), td("Bodyweight", S["body_sm"]), td("Increase reps to 15 first", S["body_sm"]), td("Exhale as you push away", S["body_sm"])],
[td("Seated calf raises", S["body"]), td("2 x 15-20", S["body_sm"]), td("Bodyweight", S["body_sm"]), td("Add slow tempo (3:3)", S["body_sm"]), td("Daily; aids venous return", S["body_sm"])],
[td("Seated shoulder press", S["body"]), td("2 x 10", S["body_sm"]), td("0.5 kg", S["body_sm"]), td("Week 8: 1 kg", S["body_sm"]), td("Below 90 degrees initially", S["body_sm"])],
[td("Grip squeeze (stress ball)", S["body"]), td("10 sec x 10 reps", S["body_sm"]), td("Soft ball", S["body_sm"]), td("Progres to tennis ball firmness", S["body_sm"]), td("Isometric; breathe throughout", S["body_sm"])],
[td("Mini squat (chair support)", S["body"]), td("2 x 8-10", S["body_sm"]), td("Bodyweight", S["body_sm"]), td("Add at week 8 when ready", S["body_sm"]), td("Hold chair; 30-45 degree only", S["body_sm"])],
]
elems.append(std_table(resist_data, [35*mm, 22*mm, 22*mm, 42*mm, 44*mm]))
elems.append(Spacer(1,2*mm))
elems.append(Paragraph(
"REST: 60-90 sec between sets. STOP if: RPE > 14, chest pain, SpO2 < 92%, palpitations. "
"NO overhead lifting above shoulder level. NO Valsalva (breath-holding during straining) at any time.",
S["warning"]))
elems.append(PageBreak())
# Yoga Phase 2
elems.append(Paragraph("C. Full Yoga-CR Protocol - Phase 2 (Yoga-CaRe SOP Based)", S["h2"]))
elems.append(Paragraph(
"Session structure: 20 supervised sessions (2x/week for 10 weeks) + daily 30-45 min home practice. "
"Delivered by BNYS-qualified yoga therapist. Evidence: ESC HFA 2024 - yoga + GDMT improved LVEF (41.5% to 44.4%) "
"vs GDMT alone (42.3% to 41.6%), p<0.05.", S["body"]))
elems.append(Spacer(1,3*mm))
yoga2_data = [
hdr_row(["COMPONENT","PRACTICE","DURATION","MECHANISM","CONTRAINDICATION"], bg=C_TEAL),
[td("1. Pranayama", S["body"]), td("Diaphragmatic (5m) + Anulom-Vilom (5m) + Bhramari (5m) + Udgitha (5m)", S["body_sm"]), td("20 min", S["body_sm"]), td("ANS rebalancing; HRV improvement; NO release (Bhramari); dyspnea reduction", S["body_sm"]), td("No prolonged Kumbhaka; no Kapalabhati/Bhastrika", S["body_sm"])],
[td("2. Gentle Asanas", S["body"]), td("Sukhasana stretches, seated twist, cat-cow, Viparita Karani, Tadasana, Marjariasana, gentle Paschimottanasana", S["body_sm"]), td("20 min", S["body_sm"]), td("Spinal mobility; thoracic opening; gut decompression; venous return", S["body_sm"]), td("No inversions; no Shashankasana/Setu Bandhasana until Phase 3", S["body_sm"])],
[td("3. Meditation", S["body"]), td("Soham / OM chanting; mindfulness body scan; visual imagery of healing", S["body_sm"]), td("10 min", S["body_sm"]), td("Cortisol reduction; parasympathetic dominance; reduces stress-HF interaction", S["body_sm"]), td("None", S["body_sm"])],
[td("4. Yoga Nidra", S["body"]), td("Guided audio (Swami Satyananda style); Insight Timer app; semi-reclined position", S["body_sm"]), td("15-20 min", S["body_sm"]), td("Cortisol -30-40%; sleep quality = 2-3 hr extra sleep benefit; mood improvement", S["body_sm"]), td("Semi-reclined if orthopnea persists", S["body_sm"])],
[td("5. Education", S["body"]), td("Self-monitoring, salt restriction, fluid diary, energy conservation, medication adherence", S["body_sm"]), td("5-10 min", S["body_sm"]), td("Reduces readmissions; improves adherence", S["body_sm"]), td("None", S["body_sm"])],
]
elems.append(std_table(yoga2_data, [25*mm, 45*mm, 16*mm, 45*mm, 34*mm], hdr_bg=C_TEAL))
elems.append(Spacer(1,3*mm))
# Asanas to avoid
avoid_data = [
hdr_row(["ASANA","REASON TO AVOID IN HFrEF","SAFE ALTERNATIVE"], bg=C_RED),
[td("Sirsasana (headstand)", S["body"]), td("Extreme preload surge; acute pulmonary congestion risk", S["body_sm"]), td("Viparita Karani (legs-up-wall) - passive, safe", S["body_sm"])],
[td("Sarvangasana (shoulder stand)", S["body"]), td("Neck vein compression + massive preload increase", S["body_sm"]), td("Viparita Karani; supported bridge with block", S["body_sm"])],
[td("Setu Bandhasana - active (Phases 0-2)", S["body"]), td("Pelvis above heart - acute venous return surge on failing LV", S["body_sm"]), td("Passive supported bridge with sacral block (Phase 2+)", S["body_sm"])],
[td("Shashankasana - unsupported (Phases 0-1)", S["body"]), td("Abdominal compression on ascites; head below heart", S["body_sm"]), td("Supported child pose with bolster - Phase 2+ only", S["body_sm"])],
[td("Kapalabhati / Bhastrika", S["body"]), td("Forceful breathing raises intrathoracic pressure dangerously", S["body_sm"]), td("Diaphragmatic breathing; pursed-lip breathing", S["body_sm"])],
[td("Hot yoga / Bikram", S["body"]), td("Heat impairs cardiovascular regulation; peripheral vasodilation", S["body_sm"]), td("Cool room yoga only (< 24 degrees C)", S["body_sm"])],
[td("Power yoga / Ashtanga / Vinyasa flow", S["body"]), td("Continuous high-intensity; exceeds safe RPE range", S["body_sm"]), td("Gentle Hatha; Iyengar with props; chair yoga", S["body_sm"])],
[td("Prolonged flat Savasana (Phase 0)", S["body"]), td("Fluid redistribution to thorax when congested", S["body_sm"]), td("Semi-reclined Savasana at 30-45 degrees", S["body_sm"])],
]
elems.append(Paragraph("Asanas Contraindicated / Phase-Restricted", S["h2"]))
elems.append(std_table(avoid_data, [40*mm, 65*mm, 60*mm], hdr_bg=C_RED))
elems.append(PageBreak())
return elems
# ── Section 4: Weekly Schedule ────────────────────────────────────────────────
def section_schedule(S):
elems = []
elems.append(sec_heading("SECTION 4: WEEKLY PROGRAMME SCHEDULES", S))
elems.append(Spacer(1,4*mm))
# Phase 0 schedule
elems.append(Paragraph("Phase 0 Weekly Schedule (Current - Weeks 1-2)", S["h2"]))
p0s_data = [
hdr_row(["DAY","MORNING (30 min)","AFTERNOON","EVENING","NOTES"], bg=C_TEAL),
[td("Mon", S["body"]), td("Pranayama: Diaphragmatic + Pursed lip (15m)\nAnulom-Vilom (5m)", S["body_sm"]), td("Yoga Nidra 25 min", S["body_sm"]), td("Ankle pumps + heel raises\nBhramari (5m)", S["body_sm"]), td("Weigh yourself in morning", S["body_sm"])],
[td("Tue", S["body"]), td("Pranayama full set (20m)\nSeated arm circles (5m)", S["body_sm"]), td("Rest / Yoga Nidra", S["body_sm"]), td("Ankle pumps + Bhramari", S["body_sm"]), td("Check SpO2 twice", S["body_sm"])],
[td("Wed", S["body"]), td("Pranayama + Yoga Nidra (30m)", S["body_sm"]), td("Supervised physio session\n(breathing assessment)", S["body_sm"]), td("Ankle pumps + Bhramari", S["body_sm"]), td("Physio to assess IMT readiness", S["body_sm"])],
[td("Thu", S["body"]), td("Pranayama (20m)\nSeated cat-cow (5m)", S["body_sm"]), td("Yoga Nidra 25 min", S["body_sm"]), td("Ankle pumps + heel raises", S["body_sm"]), td("", S["body_sm"])],
[td("Fri", S["body"]), td("Full pranayama set (25m)", S["body_sm"]), td("Rest", S["body_sm"]), td("Bhramari + Yoga Nidra", S["body_sm"]), td("Review weight diary", S["body_sm"])],
[td("Sat", S["body"]), td("Pranayama + guided meditation (30m)", S["body_sm"]), td("Yoga Nidra", S["body_sm"]), td("Gentle ankle + calf work", S["body_sm"]), td("", S["body_sm"])],
[td("Sun", S["body"]), td("Rest + Yoga Nidra only", S["body_sm"]), td("Rest", S["body_sm"]), td("Bhramari (5m)", S["body_sm"]), td("Prepare week 3 plan", S["body_sm"])],
]
elems.append(std_table(p0s_data, [12*mm, 50*mm, 32*mm, 42*mm, 34*mm], hdr_bg=C_TEAL))
elems.append(Spacer(1,5*mm))
# Phase 2 schedule
elems.append(Paragraph("Phase 2 Weekly Schedule (Weeks 4-12) - Full Programme", S["h2"]))
p2s_data = [
hdr_row(["DAY","MORNING YOGA (45-60 min)","AFTERNOON PHYSIO","EVENING","NOTES"], bg=C_NAVY),
[td("Monday", S["body"]), td("Pranayama (20m) + Asanas (20m)\n+ Yoga Nidra (20m)", S["body_sm"]), td("IMT 30 min\n+ Ankle/calf strengthening", S["body_sm"]), td("5 min walk (light)", S["body_sm"]), td("Supervised yoga session", S["body_sm"])],
[td("Tuesday", S["body"]), td("Pranayama (20m)\n+ Meditation (10m)", S["body_sm"]), td("Aerobic: 25-30 min walk/cycle\n(RPE 12-13)", S["body_sm"]), td("IMT 15 min", S["body_sm"]), td("Check SpO2 pre/post walk", S["body_sm"])],
[td("Wednesday", S["body"]), td("Full yoga session (60 min)\nPranayama + Asanas + Nidra", S["body_sm"]), td("Resistance training\n(6 exercises, 2 sets)", S["body_sm"]), td("Rest + Bhramari (5m)", S["body_sm"]), td("Supervised yoga session", S["body_sm"])],
[td("Thursday", S["body"]), td("Pranayama (20m)\n+ Yoga Nidra (20m)", S["body_sm"]), td("Aerobic: 25-35 min\n(RPE 13)", S["body_sm"]), td("IMT 15 min + ankle work", S["body_sm"]), td("", S["body_sm"])],
[td("Friday", S["body"]), td("Pranayama + Asanas (40m)", S["body_sm"]), td("Resistance training\n+ IMT 30 min", S["body_sm"]), td("Short 10 min walk", S["body_sm"]), td("Review weekly weight diary", S["body_sm"])],
[td("Saturday", S["body"]), td("Full yoga session (60 min)", S["body_sm"]), td("Aerobic 20-30 min\n(light intensity)", S["body_sm"]), td("Rest + Yoga Nidra", S["body_sm"]), td("", S["body_sm"])],
[td("Sunday", S["body"]), td("Gentle yoga + meditation (30m)", S["body_sm"]), td("Complete rest", S["body_sm"]), td("Bhramari + Yoga Nidra", S["body_sm"]), td("Prepare next week; recheck weight", S["body_sm"])],
]
elems.append(std_table(p2s_data, [18*mm, 50*mm, 38*mm, 30*mm, 30*mm]))
elems.append(Spacer(1,3*mm))
elems.append(Paragraph(
"TOTAL WEEKLY VOLUME TARGET: 150-210 min moderate aerobic activity + 2 resistance sessions + "
"5-7x IMT + daily yoga (30-60 min). Equivalent to 3-7 MET-hr/week as per PMC10847087 guidelines.",
S["teal_box"]))
elems.append(PageBreak())
return elems
# ── Section 5: Diet + Lifestyle ───────────────────────────────────────────────
def section_diet(S):
elems = []
elems.append(sec_heading("SECTION 5: DIET, LIFESTYLE & SELF-MANAGEMENT", S, color=C_GREEN))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Dietary Prescription - Cardiac + Diabetic", S["h2"]))
diet_data = [
hdr_row(["PARAMETER","TARGET","RATIONALE","PRACTICAL TIPS (Indian Diet)"], bg=C_GREEN),
[td("Sodium", S["body"]), td("< 2,000 mg/day (2g)", S["body"], bold=True, color=C_RED), td("1g extra sodium = ~200 mL retained fluid", S["body_sm"]), td("No added salt; no pickles/papad; cook with lemon + spices", S["body_sm"])],
[td("Fluid intake", S["body"]), td("< 1,500 mL/day total", S["body"], bold=True, color=C_RED), td("All fluids counted: water, dal, chai, buttermilk", S["body_sm"]), td("Use a measuring jug; keep a daily diary", S["body_sm"])],
[td("Potassium-rich foods", S["body"]), td("Moderate (not excess)", S["body"], bold=True, color=C_AMBER), td("On spironolactone + ARNI: hyperkalemia risk", S["body_sm"]), td("Limit banana, coconut water, tomato juice in excess", S["body_sm"])],
[td("Grains", S["body"]), td("Yava (barley), oats, brown rice", S["body_sm"]), td("Low GI; gentle diuretic; reduces Kapha (Ayurveda)", S["body_sm"]), td("Barley roti, oat porridge, daliya (broken wheat)", S["body_sm"])],
[td("Vegetables", S["body"]), td("Lauki, tinda, turai, palak, methi", S["body_sm"]), td("Low sodium; high fibre; diuretic properties", S["body_sm"]), td("Lauki (bottle gourd) soup daily - cardiac vegetable", S["body_sm"])],
[td("Protein", S["body"]), td("0.8-1.0 g/kg/day (modest)", S["body_sm"]), td("Maintains muscle mass; avoids hypoalbuminemia", S["body_sm"]), td("Moong dal, toor dal, tofu, egg white; limit red meat", S["body_sm"])],
[td("Fats", S["body"]), td("Limit saturated; prefer MUFA/PUFA", S["body_sm"]), td("LDL target < 70 mg/dL on statin", S["body_sm"]), td("Cold-pressed mustard/olive oil; limit ghee to 1 tsp/day", S["body_sm"])],
[td("Sugar / sweets", S["body"]), td("Strict avoidance (HbA1c 8.6%)", S["body_sm"]), td("HbA1c must reach < 7.0% target", S["body_sm"]), td("No mithai, biscuits, packaged juice, white rice in excess", S["body_sm"])],
[td("Garlic (Lasuna)", S["body"]), td("2-3 raw cloves morning", S["body_sm"]), td("Cardioprotective; mild lipid-lowering; anti-platelet", S["body_sm"]), td("Crush and rest 10 min before eating for allicin activation", S["body_sm"])],
]
elems.append(std_table(diet_data, [22*mm, 26*mm, 48*mm, 68*mm], hdr_bg=C_GREEN))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Sleep Optimisation Protocol", S["h2"]))
sleep_data = [
hdr_row(["INTERVENTION","TECHNIQUE","TIMING","EXPECTED BENEFIT"], bg=C_TEAL),
[td("Positioning", S["body"]), td("30-45 degree head elevation; 3-4 pillows or wedge; never fully flat until orthopnea resolved", S["body_sm"]), td("Ongoing", S["body_sm"]), td("Prevents acute fluid shift to thorax; reduces nocturia", S["body_sm"])],
[td("Yoga Nidra", S["body"]), td("20-30 min guided audio; Insight Timer app (free)", S["body_sm"]), td("2 pm or 9 pm", S["body_sm"]), td("Equivalent to 2-3 hr extra restorative sleep; cortisol -30-40%", S["body_sm"])],
[td("Bhramari + Anulom-Vilom", S["body"]), td("5 min each before bed; lying in semi-reclined position", S["body_sm"]), td("9-9:30 pm", S["body_sm"]), td("Slows HR; activates PNS; induces sleep onset within 15-20 min", S["body_sm"])],
[td("Fluid timing", S["body"]), td("Take most fluids before 6 pm; limit after dinner", S["body_sm"]), td("From now", S["body_sm"]), td("Reduces nocturia; less disrupted sleep from toilet visits", S["body_sm"])],
[td("Screen-free time", S["body"]), td("No screens 1 hour before bed; blue light blocking glasses", S["body_sm"]), td("From 9 pm", S["body_sm"]), td("Melatonin not suppressed; better sleep architecture", S["body_sm"])],
[td("Sleep apnea screen", S["body"]), td("If sleep remains disturbed after fluid control: refer for sleep study", S["body_sm"]), td("At 4-week review", S["body_sm"]), td("Central sleep apnea common in HFrEF; CPAP may improve EF", S["body_sm"])],
]
elems.append(std_table(sleep_data, [28*mm, 55*mm, 28*mm, 54*mm], hdr_bg=C_TEAL))
elems.append(PageBreak())
return elems
# ── Section 6: Outcome Measures ───────────────────────────────────────────────
def section_outcomes(S):
elems = []
elems.append(sec_heading("SECTION 6: OUTCOME ASSESSMENT & MILESTONES", S))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Reassessment Schedule", S["h2"]))
assess_data = [
hdr_row(["MILESTONE","WEEK","ASSESSMENTS TO PERFORM","TARGET / THRESHOLD","ACTION IF NOT MET"], bg=C_NAVY),
[td("Baseline", S["body"]), td("0", S["body_sm"]), td("6MWT, MLHFQ QoL, BNP/NT-proBNP, Echo EF, ECG, SpO2, weight, HbA1c", S["body_sm"]), td("Document baseline for comparison", S["body_sm"]), td("Ensure all results documented", S["body_sm"])],
[td("Phase 0 Exit", S["body"]), td("2", S["body_sm"]), td("Weight stability, SpO2 at rest, orthopnea assessment, electrolytes, creatinine", S["body_sm"]), td("SpO2 >= 92%; weight stable 3 days; no orthopnea", S["body_sm"]), td("Continue Phase 0; intensify diuresis", S["body_sm"])],
[td("Phase 1 Review", S["body"]), td("4", S["body_sm"]), td("6MWT, Borg RPE response, MLHFQ, electrolytes, weight", S["body_sm"]), td("Tolerating 15-20 min walk; RPE stable 11-12", S["body_sm"]), td("Slow progression; physio review", S["body_sm"])],
[td("Mid-programme", S["body"]), td("8", S["body_sm"]), td("6MWT, Echo (EF reassessment), BNP, HbA1c, lipids, SpO2 during exercise, QoL", S["body_sm"]), td("6MWT improvement >= 30m; EF may show early improvement", S["body_sm"]), td("Review GDMT; escalate if EF not improving", S["body_sm"])],
[td("Programme End", S["body"]), td("12", S["body_sm"]), td("Full echo, 6MWT, MLHFQ, BNP, HbA1c, lipids, Holter if needed, ICD decision review", S["body_sm"]), td("6MWT + >= 60m; MLHFQ improvement >= 20 pts; EF improvement", S["body_sm"]), td("ICD/CRT discussion if EF still <= 35%", S["body_sm"])],
[td("Long-term follow-up", S["body"]), td("16+", S["body_sm"]), td("Echo EF, functional capacity, medication review, yoga adherence", S["body_sm"]), td("Sustained EF improvement; NYHA class downgrade to II", S["body_sm"]), td("Consider CRT if QRS widens; transplant if refractory", S["body_sm"])],
]
elems.append(std_table(assess_data, [22*mm, 12*mm, 48*mm, 42*mm, 40*mm]))
elems.append(Spacer(1,4*mm))
elems.append(Paragraph("Expected Outcomes with Full Programme Adherence", S["h2"]))
outcome_data = [
hdr_row(["OUTCOME MEASURE","EXPECTED IMPROVEMENT","TIMEFRAME","EVIDENCE SOURCE"], bg=C_GREEN),
[td("6-Minute Walk Distance", S["body"]), td("+ 60-100 metres", S["body_sm"], bold=True, color=C_GREEN), td("8-12 weeks", S["body_sm"]), td("Cochrane 2024 (PMID 38451843)", S["body_sm"])],
[td("Dyspnea (Borg/mMRC score)", S["body"]), td("30-40% reduction", S["body_sm"], bold=True, color=C_GREEN), td("6-10 weeks (IMT)", S["body_sm"]), td("APTACVP CPG; PMID 37285766", S["body_sm"])],
[td("LVEF", S["body"]), td("3-8% improvement possible", S["body_sm"], bold=True, color=C_GREEN), td("3-6 months on GDMT + exercise", S["body_sm"]), td("PROVE-HF; ESC HFA 2024 yoga study", S["body_sm"])],
[td("MLHFQ Quality of Life Score", S["body"]), td("20-30 point improvement", S["body_sm"], bold=True, color=C_GREEN), td("12 weeks", S["body_sm"]), td("Yoga-CaRe RCT; Cochrane 2024", S["body_sm"])],
[td("HF Hospitalisation Risk", S["body"]), td("31% reduction", S["body_sm"], bold=True, color=C_GREEN), td("6 months+", S["body_sm"]), td("Cochrane 2024 (RR 0.69, 95%CI 0.56-0.86)", S["body_sm"])],
[td("HbA1c", S["body"]), td("0.3-0.5% reduction", S["body_sm"], bold=True, color=C_GREEN), td("12 weeks", S["body_sm"]), td("Exercise + SGLT2i combined effect", S["body_sm"])],
[td("Sleep Quality", S["body"]), td("Major improvement", S["body_sm"], bold=True, color=C_GREEN), td("2-4 weeks (yoga nidra)", S["body_sm"]), td("Yoga Nidra RCTs; cortisol data", S["body_sm"])],
[td("Mood / Irritability / Focus", S["body"]), td("Significant improvement", S["body_sm"], bold=True, color=C_GREEN), td("2-4 weeks (Bhramari + Nidra)", S["body_sm"]), td("Yoga QoL meta-analysis (PMC10550367)", S["body_sm"])],
[td("BP (Systolic)", S["body"]), td("5-10 mmHg reduction", S["body_sm"], bold=True, color=C_GREEN), td("8-12 weeks", S["body_sm"]), td("ESC HFA 2024 yoga in HF study", S["body_sm"])],
[td("Uric acid", S["body"]), td("Reduction (SGLT2i + exercise)", S["body_sm"], bold=True, color=C_GREEN), td("4-8 weeks", S["body_sm"]), td("SGLT2i mechanism + hydration effect", S["body_sm"])],
]
elems.append(std_table(outcome_data, [40*mm, 38*mm, 28*mm, 58*mm], hdr_bg=C_GREEN))
elems.append(PageBreak())
return elems
# ── Section 7: Team Roles ─────────────────────────────────────────────────────
def section_team(S):
elems = []
elems.append(sec_heading("SECTION 7: MULTIDISCIPLINARY TEAM ROLES & QUICK REFERENCE", S))
elems.append(Spacer(1,4*mm))
team_data = [
hdr_row(["TEAM MEMBER","QUALIFICATIONS","SPECIFIC RESPONSIBILITIES","CONTACT FREQUENCY"], bg=C_NAVY),
[td("Cardiologist", S["body"], bold=True), td("DM/DNB/MD Cardiology", S["body_sm"]), td("GDMT optimisation; Echo monitoring; ICD/CRT decision at 3m; clearance for phase transitions; emergency management", S["body_sm"]), td("Monthly review; urgent as needed", S["body_sm"])],
[td("Cardiac Physiotherapist", S["body"], bold=True), td("BPT/MPT with cardiac specialisation", S["body_sm"]), td("IMT prescription and progression; aerobic and resistance exercise programme; exercise testing (6MWT); RPE monitoring; phase transitions", S["body_sm"]), td("2-3x/week supervised sessions", S["body_sm"])],
[td("Yoga Therapist", S["body"], bold=True), td("BNYS degree (mandatory); Yoga-CaRe SOP trained", S["body_sm"]), td("Supervised yoga sessions (20 total); home practice guidance; pose modification; hemodynamic monitoring during poses; pranayama and yoga nidra instruction", S["body_sm"]), td("2x/week supervised; daily home support", S["body_sm"])],
[td("Dietitian / Nutritionist", S["body"], bold=True), td("RD/MSc Dietetics", S["body_sm"]), td("Sodium and fluid restriction counselling; diabetic meal planning; potassium monitoring; Indian diet adaptation; weight management", S["body_sm"]), td("Fortnightly review", S["body_sm"])],
[td("Patient + Family", S["body"], bold=True), td("Active participant", S["body_sm"]), td("Daily weight monitoring; fluid diary; home pranayama + yoga nidra; medication adherence; salt restriction; emergency action plan awareness", S["body_sm"]), td("Daily self-monitoring; weekly diary review", S["body_sm"])],
]
elems.append(std_table(team_data, [30*mm, 30*mm, 70*mm, 35*mm]))
elems.append(Spacer(1,5*mm))
elems.append(Paragraph("Emergency Action Plan - For Patient and Family", S["h2"]))
emerg_data = [
hdr_row(["SYMPTOM/SIGN","SEVERITY","IMMEDIATE ACTION"], bg=C_RED),
[td("Chest pain / tightness", S["body"]), td("ANY", S["body_sm"], bold=True, color=C_RED), td("STOP all activity. Rest. Call 108/cardiologist immediately. Do NOT wait.", S["body_sm"])],
[td("SpO2 < 90% at rest", S["body"]), td("EMERGENCY", S["body_sm"], bold=True, color=C_RED), td("Call 108. Use supplemental O2 if available. Sit upright.", S["body_sm"])],
[td("Breathlessness at rest / cannot speak", S["body"]), td("EMERGENCY", S["body_sm"], bold=True, color=C_RED), td("Call 108 immediately. Sit in tripod position.", S["body_sm"])],
[td("Sudden weight gain > 2 kg in 48 hours", S["body"]), td("URGENT", S["body_sm"], bold=True, color=C_AMBER), td("Call cardiologist same day. No exercise. Increase diuretic per plan.", S["body_sm"])],
[td("Dizziness, near-fainting during exercise", S["body"]), td("URGENT", S["body_sm"], bold=True, color=C_AMBER), td("Stop immediately. Sit/lie. Check BP. Call doctor if persists.", S["body_sm"])],
[td("Severe abdominal distension returning", S["body"]), td("URGENT", S["body_sm"], bold=True, color=C_AMBER), td("Contact cardiologist. Phase 0 protocol. Review diuretics.", S["body_sm"])],
[td("Palpitations (rapid or irregular heartbeat)", S["body"]), td("URGENT", S["body_sm"], bold=True, color=C_AMBER), td("Stop exercise. Rest. Record ECG if Kardia device available. Call doctor.", S["body_sm"])],
]
elems.append(std_table(emerg_data, [55*mm, 25*mm, 85*mm], hdr_bg=C_RED))
elems.append(Spacer(1,5*mm))
# Evidence summary
elems.append(Paragraph("Evidence Base Summary", S["h2"]))
ev_data = [
hdr_row(["SOURCE","YEAR","KEY FINDING RELEVANT TO THIS PROTOCOL"], bg=C_TEAL),
[td("Cochrane Review (PMID 38451843)", S["body"]), td("2024", S["body_sm"]), td("60 RCTs, 8728 pts: ExCR reduces HF hospitalisations by 31% (RR 0.69); improves QoL", S["body_sm"])],
[td("PMID 35596876 - HFrEF Cardiac Rehab Meta-analysis", S["body"]), td("2023", S["body_sm"]), td("Cardiac rehab reduces mortality in severely reduced EF patients; safe and effective", S["body_sm"])],
[td("AHA/AACVPR Core Components (PMID 39315436)", S["body"]), td("2024", S["body_sm"]), td("8 mandatory CR components including psychosocial management where yoga therapy maps", S["body_sm"])],
[td("Yoga-CaRe RCT (PMC7132532)", S["body"]), td("2020", S["body_sm"]), td("3959 pts post-MI: Yoga-CaRe safe, feasible; significantly improves QoL; per-protocol: MACE reduction", S["body_sm"])],
[td("ESC HFA 2024 Congress - Yoga in HF", S["body"]), td("2024", S["body_sm"]), td("105 HFrEF pts, 52 weeks: Yoga + GDMT improved LVEF (41.5 to 44.4% vs 42.3 to 41.6%, p<0.05)", S["body_sm"])],
[td("15-year Yoga-CaRe CABG legacy RCT (Sci Reports)", S["body"]), td("2025", S["body_sm"]), td("Yoga-based CR: significantly lower MACE and all-cause mortality at 15 years post-CABG", S["body_sm"])],
[td("APTACVP CPG for HF Physiotherapy", S["body"]), td("Current", S["body_sm"]), td("IMT 30 min/day at > 30% MIP, 5-7 days/week: Grade A evidence for dyspnea reduction in HFrEF", S["body_sm"])],
[td("IMT RCT (PMID 37285766)", S["body"]), td("2023", S["body_sm"]), td("High-intensity interval IMT in HF: significant improvement in exercise capacity and functional ability", S["body_sm"])],
[td("Yoga-CaRe HFrEF Mechanistic Trial (BMJ Open 2026)", S["body"]), td("Ongoing", S["body_sm"]), td("78 HFrEF pts (EF < 40%): examining FMD, arterial compliance, genomics - results pending 2026", S["body_sm"])],
[td("DAPA-HF post-hoc analysis", S["body"]), td("Published", S["body_sm"]), td("Dapagliflozin reduces composite of serious VA / SCD by 21% (HR 0.79, p=0.03) - supports GDMT first", S["body_sm"])],
]
elems.append(std_table(ev_data, [52*mm, 16*mm, 97*mm], hdr_bg=C_TEAL))
elems.append(Spacer(1,4*mm))
# Final disclaimer
disc = ("CLINICAL DISCLAIMER: This protocol is prepared for educational and clinical guidance purposes "
"and must be implemented under the direct supervision of a qualified cardiologist, cardiac "
"physiotherapist, and BNYS-trained yoga therapist. All phase transitions require physician "
"clearance. Doses and exercise intensity must be individually calibrated. This document does "
"not replace direct clinical assessment. In case of any doubt, defer to the treating clinician. "
"Prepared by Orris AI based on peer-reviewed evidence as of June 2026.")
elems.append(Paragraph(disc, S["footer"]))
return elems
# ── Page numbering ─────────────────────────────────────────────────────────────
def add_page_numbers(canvas_obj, doc):
canvas_obj.saveState()
canvas_obj.setFont("Helvetica", 7.5)
canvas_obj.setFillColor(colors.HexColor("#7f8c8d"))
page_num = canvas_obj.getPageNumber()
canvas_obj.drawString(15*mm, 8*mm,
"HFrEF Yoga-Integrated Cardiac Rehabilitation Protocol | Hemant Govind Khare, 65M | Orris AI | June 2026")
canvas_obj.drawRightString(195*mm, 8*mm, f"Page {page_num}")
canvas_obj.restoreState()
# ── Main ───────────────────────────────────────────────────────────────────────
def main():
os.makedirs(os.path.dirname(OUTPUT_PATH), exist_ok=True)
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
leftMargin=15*mm, rightMargin=15*mm,
topMargin=15*mm, bottomMargin=18*mm,
title="Yoga-Integrated Cardiac Rehabilitation Protocol - HFrEF",
author="Orris AI",
subject="Cardiac Rehabilitation for Hemant Govind Khare"
)
S = make_styles()
story = []
story += cover_page(S)
story += section_patient(S)
story += section_safety(S)
story += section_phases(S)
story += section_schedule(S)
story += section_diet(S)
story += section_outcomes(S)
story += section_team(S)
doc.build(story, onFirstPage=add_page_numbers, onLaterPages=add_page_numbers)
print(f"PDF generated: {OUTPUT_PATH}")
if __name__ == "__main__":
main()