Can you make low potassium and low phosphate low protein diet chart for ckd patient
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace/ckd-diet && echo "created"
mkdir -p /home/daytona/workspace/ckd-diet && python3 -c "from reportlab.lib import colors; print('reportlab ok')"
~/ckd-diet/generate_ckd_diet.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/ckd-diet/CKD_Diet_Chart.pdf"
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TEAL = HexColor("#1A6B72")
LIGHT_TEAL= HexColor("#D0EFF1")
AMBER = HexColor("#E67E22")
LIGHT_AMB = HexColor("#FDEBD0")
RED = HexColor("#C0392B")
LIGHT_RED = HexColor("#FADBD8")
GREEN = HexColor("#1E8449")
LIGHT_GRN = HexColor("#D5F5E3")
GREY_HDR = HexColor("#2C3E50")
LIGHT_GRY = HexColor("#F2F3F4")
WHITE = colors.white
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
)
W = A4[0] - 3*cm # usable width
styles = getSampleStyleSheet()
title_style = ParagraphStyle(
"Title", fontName="Helvetica-Bold", fontSize=18,
textColor=WHITE, alignment=TA_CENTER, spaceAfter=4,
)
sub_style = ParagraphStyle(
"Sub", fontName="Helvetica", fontSize=10,
textColor=LIGHT_TEAL, alignment=TA_CENTER, spaceAfter=2,
)
section_style = ParagraphStyle(
"Section", fontName="Helvetica-Bold", fontSize=12,
textColor=WHITE, alignment=TA_CENTER,
)
cell_bold = ParagraphStyle(
"CB", fontName="Helvetica-Bold", fontSize=9, textColor=GREY_HDR,
)
cell_body = ParagraphStyle(
"Cbody", fontName="Helvetica", fontSize=8.5, textColor=GREY_HDR, leading=12,
)
note_style = ParagraphStyle(
"Note", fontName="Helvetica-Oblique", fontSize=8,
textColor=GREY_HDR, leftIndent=4,
)
footer_style = ParagraphStyle(
"Footer", fontName="Helvetica", fontSize=7.5,
textColor=HexColor("#7F8C8D"), alignment=TA_CENTER,
)
story = []
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# HEADER BANNER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
header_data = [[
Paragraph("CKD RENAL DIET CHART", title_style),
]]
header_sub = [[
Paragraph("Low Protein β’ Low Potassium β’ Low Phosphate | For Chronic Kidney Disease (CKD) Stages 3β5", sub_style),
]]
banner = Table(
[
[Paragraph("CKD RENAL DIET CHART", title_style)],
[Paragraph("Low Protein β’ Low Potassium β’ Low Phosphate | CKD Stages 3β5", sub_style)],
],
colWidths=[W],
)
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("ROUNDEDCORNERS", [8]),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(banner)
story.append(Spacer(1, 6*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# DAILY NUTRIENT TARGETS BOX
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def section_header(text, bg=TEAL):
t = Table([[Paragraph(text, section_style)]], colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return t
targets = [
["Nutrient", "Daily Target", "Rationale"],
["Protein", "0.6β0.8 g/kg body weight/day\n(~40β50 g/day for 60 kg patient)", "Reduces uraemic toxin load; slows CKD progression"],
["Potassium", "2,000β2,500 mg/day\n(<2,000 mg if serum KβΊ > 5.5 mmol/L)", "Prevents hyperkalaemia, cardiac arrhythmias"],
["Phosphate", "800β1,000 mg/day", "Prevents hyperphosphataemia, secondary hyperparathyroidism"],
["Sodium", "1,500β2,000 mg/day (~1 tsp salt)", "Controls BP, oedema, fluid retention"],
["Fluid", "As per physician advice\n(urine output + 500 mL, typically 1β1.5 L/day)", "Prevents fluid overload"],
["Calories", "30β35 kcal/kg body weight/day", "Prevents protein-calorie malnutrition"],
]
col_w = [W*0.22, W*0.38, W*0.40]
t_targets = Table(targets, colWidths=col_w, repeatRows=1)
t_targets.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,0), "CENTER"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 8.5),
("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_TEAL, WHITE]),
("GRID", (0,0), (-1,-1), 0.5, HexColor("#BDC3C7")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(section_header("π DAILY NUTRIENT TARGETS"))
story.append(t_targets)
story.append(Spacer(1, 5*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# WEEKLY MEAL PLAN (Breakfast | Lunch | Dinner | Snack)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
meals = [
# Day, Breakfast, Lunch, Dinner, Snack
[
"MON",
"White bread (2 sl)\n+ Unsalted butter\n+ Apple (small)\n+ Tea / black coffee",
"Plain white rice (1 cup)\n+ Stir-fried cabbage\n+ 1 egg (boiled)\n+ Cucumber slices",
"Chapati x 2 (low-salt)\n+ Bottle gourd (lauki) sabzi\n+ Plain curd (small)",
"Rice crackers\n+ Pear",
],
[
"TUE",
"Semolina (suji) upma\n(no tomato/potato)\n+ Lemon water",
"White pasta\n+ Stir-fried zucchini\n+ Boiled chicken 60 g",
"Plain rice\n+ Ridge gourd curry\n+ Green beans sautΓ©",
"Apple slices\n+ Plain rice puffs",
],
[
"WED",
"Cornflakes (low-K cereal)\n+ Rice milk\n+ Peeled apple",
"Chapati x 2\n+ Tinda (round gourd) curry\n+ Small boiled egg",
"Plain white rice\n+ Cauliflower (leached)\n+ Boiled chicken 60 g",
"Unsalted popcorn\n+ Grapes (small bunch)",
],
[
"THU",
"White bread\n+ Cream cheese\n+ Watermelon slice\n+ Herbal tea",
"Plain rice\n+ Bitter melon (karela)\n+ 1 egg omelette (no salt)",
"Chapati x 2\n+ Turnip sabzi\n+ Plain boiled fish 60 g",
"Rice cake\n+ Blueberries",
],
[
"FRI",
"Idli x 2 (low-salt batter)\n+ Coconut chutney (small)\n+ Lemon water",
"Plain white rice\n+ Stir-fried cabbage\n+ Boiled chicken 60 g",
"Chapati x 2\n+ Snake gourd curry\n+ Tossed salad (cucumber, lettuce)",
"Pear\n+ Plain rice crackers",
],
[
"SAT",
"Vermicelli (seviyan) upma\n+ Peeled pear\n+ Black coffee",
"Plain rice\n+ Ash gourd (petha) sabzi\n+ Boiled egg",
"Chapati x 2\n+ Mixed low-K veg stir-fry\n+ Boiled fish 60 g",
"Watermelon\n+ Unsalted crackers",
],
[
"SUN",
"White bread french toast\n(no added salt)\n+ Apple\n+ Herbal tea",
"Plain rice\n+ Leached potatoes\n+ Boiled chicken 60 g",
"Chapati x 2\n+ Drumstick (moringa) leaves sabzi (small)\n+ Plain curd (small)",
"Grapes\n+ Rice puffs",
],
]
meal_header = ["Day", "Breakfast", "Lunch", "Dinner", "Snack"]
meal_col_w = [W*0.07, W*0.23, W*0.24, W*0.24, W*0.22]
meal_table_data = [meal_header] + meals
mt = Table(meal_table_data, colWidths=meal_col_w, repeatRows=1)
row_colors = [LIGHT_TEAL, WHITE]
mt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (0,-1), "CENTER"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,1), (-1,-1), 8),
("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_TEAL, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#BDC3C7")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING",(0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(section_header("π 7-DAY MEAL PLAN"))
story.append(mt)
story.append(Spacer(1, 5*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# FOODS ALLOWED vs AVOID (two-column side-by-side)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
allowed_hdr = Table(
[[Paragraph("β
FOODS ALLOWED (Low KβΊ / Low POβ / Low Protein)", ParagraphStyle("ah", fontName="Helvetica-Bold", fontSize=9, textColor=WHITE, alignment=TA_CENTER))]],
colWidths=[(W-4*mm)*0.5],
)
allowed_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GREEN),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
avoid_hdr = Table(
[[Paragraph("β FOODS TO AVOID (High KβΊ / High POβ / High Protein)", ParagraphStyle("avh", fontName="Helvetica-Bold", fontSize=9, textColor=WHITE, alignment=TA_CENTER))]],
colWidths=[(W-4*mm)*0.5],
)
avoid_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), RED),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
allowed_rows = [
["Category", "Examples"],
["Grains", "White rice, white bread, plain pasta,\nmaida chapati, semolina, cornflakes"],
["Vegetables\n(leach before cook)", "Cabbage, cauliflower, cucumber, bottle gourd,\nridge gourd, zucchini, turnip, green beans"],
["Fruits", "Apple, pear, grapes, watermelon,\nblueberries, cranberries"],
["Protein\n(limited portions)", "Egg white (1β2/day), chicken breast 60 g,\nwhite fish 60 g (avoid skin)"],
["Dairy", "Plain curd/yogurt (Β½ cup/day),\nrice milk, cream cheese (small)"],
["Fats/Oils", "Unsalted butter, olive oil, canola oil"],
["Beverages", "Water, herbal tea, lemon water, black coffee\n(limit to 1 cup/day)"],
["Condiments", "Lemon juice, herbs (fresh basil, coriander),\nwhite vinegar (no salt/ketchup)"],
]
avoid_rows = [
["Category", "Examples"],
["High-K Veg", "Potato (unleached), tomato, spinach,\nbroccoli, mushrooms, avocado, pumpkin"],
["High-K Fruits","Banana, orange, mango, kiwi,\ndried fruits, coconut water"],
["High-POβ\nFoods", "Dairy (milk, cheese, paneer), nuts, seeds,\ndark cola drinks, processed meats"],
["High-Protein", "Red meat, organ meats (liver, kidney),\npaneer, legumes (dal, rajma, chana)"],
["Whole Grains\n(high P)", "Brown rice, whole wheat, oats,\nbran cereals, multigrain bread"],
["Salt/Sodium", "Table salt, pickles, papads, sauces,\ncanned/processed foods, salted snacks"],
["Other", "Dark chocolate, cocoa, beer/wine,\nenergy drinks, packaged juices"],
]
def food_table(rows, bg_hdr, bg_row):
cw = [(W-4*mm)*0.5*0.32, (W-4*mm)*0.5*0.68]
t = Table(rows, colWidths=cw)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREY_HDR),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8),
("ROWBACKGROUNDS", (0,1), (-1,-1), [bg_row, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#BDC3C7")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
]))
return t
allowed_t = food_table(allowed_rows, GREEN, LIGHT_GRN)
avoid_t = food_table(avoid_rows, RED, LIGHT_RED)
combined_hdr = Table(
[[allowed_hdr, Spacer(4*mm, 1), avoid_hdr]],
colWidths=[(W-4*mm)*0.5, 4*mm, (W-4*mm)*0.5],
)
combined_hdr.setStyle(TableStyle([
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING",(0,0), (-1,-1), 0),
]))
combined_body = Table(
[[allowed_t, Spacer(4*mm, 1), avoid_t]],
colWidths=[(W-4*mm)*0.5, 4*mm, (W-4*mm)*0.5],
)
combined_body.setStyle(TableStyle([
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING",(0,0), (-1,-1), 0),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(combined_hdr)
story.append(combined_body)
story.append(Spacer(1, 5*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# LEACHING TECHNIQUE BOX
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
leach_style = ParagraphStyle("leach", fontName="Helvetica", fontSize=8.5, textColor=GREY_HDR, leading=13, leftIndent=6)
leach_title = ParagraphStyle("lt", fontName="Helvetica-Bold", fontSize=10, textColor=TEAL)
leach_content = [
[
Paragraph("π₯¦ LEACHING TECHNIQUE (Reduces Potassium in Vegetables)", leach_title),
Paragraph(" ", leach_style),
Paragraph("1. Peel and cut vegetables into small, thin pieces.", leach_style),
Paragraph("2. Rinse under running cold water for 1β2 minutes.", leach_style),
Paragraph("3. Soak in warm water for 2β4 hours (or overnight in refrigerator).", leach_style),
Paragraph("4. Drain soaking water completely β discard it.", leach_style),
Paragraph("5. Rinse again, then cook in a LARGE volume of unsalted water.", leach_style),
Paragraph("6. Drain cooking water before eating.", leach_style),
Paragraph("β Leaching reduces KβΊ by 30β70% but does NOT eliminate it β portion size still matters.", note_style),
]
]
leach_t = Table([[
Paragraph("π₯¦ LEACHING TECHNIQUE β Reduces Potassium in Vegetables by 30β70%", leach_title),
]], colWidths=[W])
leach_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_TEAL),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
story.append(leach_t)
leach_steps = Table([
[Paragraph("1. Peel & cut veg into small thin pieces.\n"
"2. Rinse under cold running water 1β2 min.\n"
"3. Soak in warm water 2β4 hours (or overnight in fridge).\n"
"4. Drain & discard soaking water.\n"
"5. Cook in large volume of unsalted water β drain before eating.\n"
"β Still observe portion limits β leaching reduces KβΊ but doesn't eliminate it.",
note_style)],
], colWidths=[W])
leach_steps.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_TEAL),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 16),
]))
story.append(leach_steps)
story.append(Spacer(1, 5*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PRACTICAL TIPS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
tips = [
"Avoid salt substitutes (KCl) β they are very high in potassium.",
"Read food labels: avoid products listing phosphate additives (e.g. sodium phosphate, calcium phosphate).",
"Limit dairy (milk, cheese, paneer) to small amounts β high in phosphorus.",
"Prefer egg whites over whole eggs (yolk is high in phosphorus).",
"Avoid dark cola drinks, beer, packaged juices β all very high in phosphate.",
"Choose fresh or frozen (plain) foods over canned/processed (high sodium & phosphate).",
"Small, frequent meals help maintain energy without overloading protein intake.",
"Monitor weight daily β sudden gain (>1 kg/day) may indicate fluid retention.",
"Take phosphate binders as prescribed, with meals (not on empty stomach).",
"Do NOT self-medicate with herbal supplements β many contain high potassium.",
]
tip_title = Table([[Paragraph("π‘ PRACTICAL DIETARY TIPS", section_style)]], colWidths=[W])
tip_title.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), AMBER),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
story.append(tip_title)
tip_style = ParagraphStyle("tip", fontName="Helvetica", fontSize=8.5, textColor=GREY_HDR, leading=13, leftIndent=4)
tip_rows = [[Paragraph(f"β’ {t}", tip_style)] for t in tips]
tips_t = Table(tip_rows, colWidths=[W])
tips_t.setStyle(TableStyle([
("ROWBACKGROUNDS", (0,0), (-1,-1), [LIGHT_AMB, WHITE]),
("GRID", (0,0), (-1,-1), 0.3, HexColor("#BDC3C7")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
story.append(tips_t)
story.append(Spacer(1, 5*mm))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# WARNING / FOOTER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
warn_t = Table([[Paragraph(
"β IMPORTANT: This diet chart is a general guide only. Dietary requirements vary by CKD stage, lab values "
"(serum KβΊ, phosphate, albumin, GFR), dialysis status, and individual health status. Always follow the "
"specific advice of your nephrologist and registered renal dietitian. Lab values must be monitored regularly "
"and the diet adjusted accordingly.",
ParagraphStyle("warn", fontName="Helvetica-Oblique", fontSize=8, textColor=HexColor("#922B21"), leading=12),
)]], colWidths=[W])
warn_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_RED),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 1, RED),
]))
story.append(warn_t)
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
"References: Smith & Tanagho's General Urology 19e; Goldman-Cecil Medicine 2-Vol Set; KDIGO CKD Guidelines 2022 | Generated by Orris Medical AI β’ April 2026",
footer_style,
))
# ββ Build βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF saved β {OUTPUT}")
python3 /home/daytona/workspace/ckd-diet/generate_ckd_diet.py
CKD Diet Chart
PDF Document Β· PDF
| Nutrient | Target |
|---|---|
| Protein | 0.6β0.8 g/kg/day (~40β50 g for 60 kg patient) |
| Potassium | 2,000β2,500 mg/day (<2,000 if KβΊ >5.5 mmol/L) |
| Phosphate | 800β1,000 mg/day |
| Sodium | 1,500β2,000 mg/day |
| Calories | 30β35 kcal/kg/day |
Note: Dietary requirements must be individualized based on CKD stage, serum electrolytes (KβΊ, POβ), GFR, and dialysis status. Always have a registered renal dietitian tailor this plan to the specific patient's lab values. β Smith & Tanagho's General Urology 19e; Goldman-Cecil Medicine
Can you add my name in the pdf. Dr Vishnumoorthy Aithal
~/ckd-diet/generate_ckd_diet.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ckd-diet/generate_ckd_diet.py'
~/ckd-diet/generate_ckd_diet.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ckd-diet/generate_ckd_diet.py'
python3 /home/daytona/workspace/ckd-diet/generate_ckd_diet.py
CKD Diet Chart
PDF Document Β· PDF