So any complications and give advice to treat the patient
| Parameter | Value | Reference Range | Status | Significance |
|---|---|---|---|---|
| WBC | 8.64 | 5.14-13.18 | ✅ Normal | No leukocytosis |
| RBC | 5.03 | 3.89-4.92 | ⚠️ HIGH | Erythrocytosis (flagged) |
| Hgb | 10.9 | 10.2-12.7 | ✅ Low-normal | Near low end for age |
| HCT | 30.6 | 31.2-37.7 | 🔴 LOW | Reduced |
| MCV | 60.9 | 72.3-84.0 | 🔴 LOW | Severe microcytosis |
| MCH | 21.8 | 23.7-28.3 | 🔴 LOW | Hypochromia |
| CHCM | 35.7 | 32.0-34.6 | ⚠️ Slightly high | |
| RDW-CV | 17.2 | 12.5-14.9 | 🔴 HIGH | Marked anisocytosis |
| RDW-SD | 31.8 | 35.1-41.7 | 🔴 LOW | Narrow size variation (uniform small cells) |
| MIC | 63.1 | 0.0-20.0 | 🔴 HIGH | Microcytic fraction very elevated |
| PLT | 335 | 202-394 | ✅ Normal | |
| EOS | 3.8% / 0.33×10³ | 0.0-3.3% / 0.03-0.46 | ⚠️ HIGH% | Eosinophilia |
| NEU | 65.9% | 22.4-69.0% | ✅ Normal | |
| LYM | 25.5% | 18.4-66.6% | ✅ Normal |
| Test | Result | Interpretation |
|---|---|---|
| Widal (Salmonella Typhi O & H) | Negative (1:40) | No typhoid |
| Malaria Pf Antigen | Negative | No falciparum malaria |
| Malaria Pv Antigen | Negative | No vivax malaria |
| CRP | 2.5 mg/L (range 0-6) | Normal - no active inflammation |
Karthik (4 yr, male) has microcytic hypochromic anemia consistent with Iron Deficiency Anemia, most likely caused by nutritional deficiency and/or intestinal parasitic infection (suggested by mild eosinophilia). Typhoid and malaria are ruled out. CRP is normal. Treatment should include oral iron supplementation at 3-6 mg/kg/day elemental iron for 4-6 months, a single dose of albendazole 400 mg for deworming, dietary counseling to increase iron-rich foods and reduce excess milk, and stool examination to confirm parasitic etiology. Repeat CBC in 4 weeks to confirm response.
Create a pediatric iron deficiency management protocol PDF
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/ida-protocol && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm, mm from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.graphics.shapes import Drawing, Rect, String, Line from reportlab.graphics import renderPDF from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont import os OUTPUT = "/tmp/workspace/ida-protocol/Pediatric_IDA_Management_Protocol.pdf" # ── Colour palette ───────────────────────────────────────────────────────────── NAVY = colors.HexColor("#1B3A6B") TEAL = colors.HexColor("#0E7C7B") ORANGE = colors.HexColor("#E07B39") YELLOW = colors.HexColor("#F5C518") RED = colors.HexColor("#C0392B") GREEN = colors.HexColor("#1E8449") GREY_LT = colors.HexColor("#F4F6F9") GREY_MID = colors.HexColor("#D5DCE8") WHITE = colors.white BLACK = colors.black # ── Document setup ───────────────────────────────────────────────────────────── doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=1.5*cm, rightMargin=1.5*cm, topMargin=2.0*cm, bottomMargin=1.8*cm, title="Pediatric Iron Deficiency Anemia - Management Protocol", author="Sisindri Children's Hospital | Clinical Guidelines", ) W, H = A4 styles = getSampleStyleSheet() def sty(name, **kw): base = styles[name] return ParagraphStyle( name + str(id(kw)), parent=base, **kw, ) # ── Custom styles ────────────────────────────────────────────────────────────── S_title = sty("Heading1", fontSize=20, textColor=WHITE, alignment=TA_CENTER, spaceAfter=2, leading=24, fontName="Helvetica-Bold") S_sub = sty("Normal", fontSize=10, textColor=GREY_MID, alignment=TA_CENTER, spaceAfter=0, leading=13, fontName="Helvetica") S_h2 = sty("Heading2", fontSize=12, textColor=WHITE, alignment=TA_LEFT, spaceAfter=2, leading=15, fontName="Helvetica-Bold") S_h3 = sty("Heading3", fontSize=10, textColor=NAVY, alignment=TA_LEFT, spaceAfter=2, leading=13, fontName="Helvetica-Bold") S_body = sty("Normal", fontSize=9, textColor=BLACK, alignment=TA_JUSTIFY,spaceAfter=4, leading=13, fontName="Helvetica") S_bullet = sty("Normal", fontSize=9, textColor=BLACK, alignment=TA_LEFT, spaceAfter=2, leading=13, leftIndent=10, fontName="Helvetica", bulletIndent=2, firstLineIndent=0) S_small = sty("Normal", fontSize=7.5,textColor=colors.grey, alignment=TA_LEFT, spaceAfter=0, leading=11, fontName="Helvetica") S_tbl_hdr = sty("Normal", fontSize=8.5,textColor=WHITE, alignment=TA_CENTER, spaceAfter=0, leading=12, fontName="Helvetica-Bold") S_tbl_cel = sty("Normal", fontSize=8.5,textColor=BLACK, alignment=TA_LEFT, spaceAfter=0, leading=12, fontName="Helvetica") S_tbl_ctr = sty("Normal", fontSize=8.5,textColor=BLACK, alignment=TA_CENTER, spaceAfter=0, leading=12, fontName="Helvetica") S_warn = sty("Normal", fontSize=9, textColor=RED, alignment=TA_LEFT, spaceAfter=2, leading=13, fontName="Helvetica-Bold") S_note = sty("Normal", fontSize=8, textColor=NAVY, alignment=TA_LEFT, spaceAfter=0, leading=12, fontName="Helvetica-Oblique") # ── Helper builders ──────────────────────────────────────────────────────────── def section_header(text, bg=NAVY, pad=5): """Full-width coloured section banner.""" TW = W - 3*cm data = [[Paragraph(text, S_h2)]] t = Table(data, colWidths=[TW]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("TOPPADDING", (0,0), (-1,-1), pad), ("BOTTOMPADDING", (0,0), (-1,-1), pad), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [4]), ])) return t def info_box(text, bg=GREY_LT, border=TEAL): TW = W - 3*cm data = [[Paragraph(text, S_body)]] t = Table(data, colWidths=[TW]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LINEAFTER", (0,0), (0,-1), 3, border), ("BOX", (0,0), (-1,-1), 0.5, GREY_MID), ])) return t def two_col(left_items, right_items, left_header="", right_header="", lbg=GREY_LT, rbg=GREY_LT): TW = W - 3*cm col = TW / 2 - 2*mm def build_cell(items, header, bg): content = [] if header: content.append(Paragraph(header, S_h3)) for item in items: content.append(Paragraph(item, S_bullet)) data = [[content]] t = Table(data, colWidths=[col]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 4), ("BOX", (0,0), (-1,-1), 0.5, GREY_MID), ])) return t outer = Table([[build_cell(left_items, left_header, lbg), build_cell(right_items, right_header, rbg)]], colWidths=[col+2*mm, col+2*mm], hAlign="LEFT") outer.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"), ])) return outer # ── PAGE 1 HEADER BANNER ─────────────────────────────────────────────────────── def header_banner(): TW = W - 3*cm # title block banner_data = [ [Paragraph("PEDIATRIC IRON DEFICIENCY ANEMIA", S_title)], [Paragraph("CLINICAL MANAGEMENT PROTOCOL", S_title)], [Paragraph("Evidence-Based Guidelines for Children (0–12 years) | Version 1.0 | July 2026", S_sub)], ] t = Table(banner_data, colWidths=[TW]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), NAVY), ("TOPPADDING", (0,0), (0,0), 14), ("BOTTOMPADDING", (0,-1), (-1,-1), 12), ("TOPPADDING", (0,1), (-1,-1), 0), ("BOTTOMPADDING", (0,0), (-1,-2), 0), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ])) return t # ── STORY ────────────────────────────────────────────────────────────────────── story = [] TW = W - 3*cm story.append(header_banner()) story.append(Spacer(1, 6*mm)) # ── 1. SCOPE & PURPOSE ──────────────────────────────────────────────────────── story.append(section_header("1. SCOPE & PURPOSE", bg=NAVY)) story.append(Spacer(1, 2*mm)) story.append(info_box( "This protocol provides standardised guidance for the screening, diagnosis, treatment and follow-up " "of Iron Deficiency Anemia (IDA) in children aged 0–12 years in outpatient and inpatient settings. " "It is aligned with WHO, AAP and IAP recommendations and is intended for paediatricians, medical " "officers, and nursing staff." )) story.append(Spacer(1, 4*mm)) # ── 2. DEFINITION & EPIDEMIOLOGY ────────────────────────────────────────────── story.append(section_header("2. DEFINITION & EPIDEMIOLOGY", bg=TEAL)) story.append(Spacer(1, 2*mm)) epi_data = [ [Paragraph("Parameter", S_tbl_hdr), Paragraph("Details", S_tbl_hdr)], [Paragraph("Definition", S_tbl_cel), Paragraph("IDA = anemia caused by inadequate iron for normal erythropoiesis, resulting in microcytic, " "hypochromic red cells with depleted iron stores (low ferritin).", S_tbl_cel)], [Paragraph("Prevalence", S_tbl_cel), Paragraph("Most common nutritional deficiency worldwide; affects ~50% of children <5 years in " "developing countries (WHO, 2021).", S_tbl_cel)], [Paragraph("Peak age", S_tbl_cel), Paragraph("6 months – 2 years (rapid growth, transition from milk) and 11–15 years (adolescent growth spurt).", S_tbl_cel)], [Paragraph("Key risk factors", S_tbl_cel), Paragraph("Exclusive cow's milk >500 mL/day, low dietary iron intake, prematurity, low birth weight, " "intestinal parasitosis, chronic blood loss, malabsorption.", S_tbl_cel)], ] epi_table = Table(epi_data, colWidths=[3.5*cm, TW-3.5*cm]) epi_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL), ("BACKGROUND", (0,1), (-1,1), GREY_LT), ("BACKGROUND", (0,2), (-1,2), WHITE), ("BACKGROUND", (0,3), (-1,3), GREY_LT), ("BACKGROUND", (0,4), (-1,4), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 7), ("RIGHTPADDING", (0,0), (-1,-1), 7), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(epi_table) story.append(Spacer(1, 4*mm)) # ── 3. DIAGNOSTIC CRITERIA ──────────────────────────────────────────────────── story.append(section_header("3. DIAGNOSTIC CRITERIA", bg=ORANGE)) story.append(Spacer(1, 2*mm)) # Hgb cut-offs table story.append(Paragraph("3A. Haemoglobin (Hgb) Cut-offs for Anemia (WHO, sea-level)", S_h3)) story.append(Spacer(1, 1*mm)) hgb_data = [ [Paragraph("Age Group", S_tbl_hdr), Paragraph("Mild Anemia\n(g/dL)", S_tbl_hdr), Paragraph("Moderate\n(g/dL)", S_tbl_hdr), Paragraph("Severe\n(g/dL)", S_tbl_hdr)], [Paragraph("6 months – 4 years", S_tbl_ctr), Paragraph("10.0 – 10.9", S_tbl_ctr), Paragraph("7.0 – 9.9", S_tbl_ctr), Paragraph("< 7.0", S_tbl_ctr)], [Paragraph("5 – 11 years", S_tbl_ctr), Paragraph("11.0 – 11.4", S_tbl_ctr), Paragraph("8.0 – 10.9", S_tbl_ctr), Paragraph("< 8.0", S_tbl_ctr)], [Paragraph("12 – 14 years", S_tbl_ctr), Paragraph("11.0 – 11.9", S_tbl_ctr), Paragraph("8.0 – 10.9", S_tbl_ctr), Paragraph("< 8.0", S_tbl_ctr)], ] hgb_table = Table(hgb_data, colWidths=[TW*0.34, TW*0.22, TW*0.22, TW*0.22]) hgb_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), ORANGE), ("BACKGROUND", (0,1), (-1,1), GREY_LT), ("BACKGROUND", (0,2), (-1,2), WHITE), ("BACKGROUND", (0,3), (-1,3), GREY_LT), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("ALIGN", (0,0), (-1,-1), "CENTER"), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(hgb_table) story.append(Spacer(1, 3*mm)) story.append(Paragraph("3B. CBC Indicators of IDA", S_h3)) story.append(Spacer(1, 1*mm)) cbc_data = [ [Paragraph("CBC Parameter", S_tbl_hdr), Paragraph("Expected Finding in IDA", S_tbl_hdr), Paragraph("Clinical Significance", S_tbl_hdr)], [Paragraph("Hgb", S_tbl_cel), Paragraph("Low for age", S_tbl_cel), Paragraph("Primary marker of anemia severity", S_tbl_cel)], [Paragraph("MCV (fL)", S_tbl_cel), Paragraph("< 70 fL (children)", S_tbl_cel), Paragraph("Microcytosis; <80 fL in established IDA (Harrison's 22E)", S_tbl_cel)], [Paragraph("MCH (pg)", S_tbl_cel), Paragraph("< 23 pg", S_tbl_cel), Paragraph("Hypochromia — pale cells", S_tbl_cel)], [Paragraph("RDW-CV (%)", S_tbl_cel), Paragraph("> 14.5%", S_tbl_cel), Paragraph("Anisocytosis — variable cell sizes; earliest CBC change", S_tbl_cel)], [Paragraph("RBC count", S_tbl_cel), Paragraph("Normal or ↑", S_tbl_cel), Paragraph("Paradox: marrow makes many small cells to compensate", S_tbl_cel)], [Paragraph("Serum Ferritin", S_tbl_cel), Paragraph("< 12 µg/L (children < 5 yr)", S_tbl_cel), Paragraph("Gold standard for iron stores; most sensitive marker", S_tbl_cel)], [Paragraph("Transferrin sat.", S_tbl_cel), Paragraph("< 15–20%", S_tbl_cel), Paragraph("Iron restricted erythropoiesis", S_tbl_cel)], [Paragraph("TIBC / Transferrin", S_tbl_cel), Paragraph("Elevated", S_tbl_cel), Paragraph("Compensatory upregulation", S_tbl_cel)], [Paragraph("Serum iron", S_tbl_cel), Paragraph("Low", S_tbl_cel), Paragraph("Less reliable (diurnal variation)", S_tbl_cel)], ] cbc_table = Table(cbc_data, colWidths=[TW*0.25, TW*0.27, TW*0.48]) cbc_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), ORANGE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(cbc_table) story.append(Spacer(1, 4*mm)) # ── 4. DIAGNOSTIC WORK-UP ──────────────────────────────────────────────────── story.append(section_header("4. DIAGNOSTIC WORK-UP ALGORITHM", bg=NAVY)) story.append(Spacer(1, 2*mm)) workup_data = [ [Paragraph("STEP", S_tbl_hdr), Paragraph("ACTION", S_tbl_hdr), Paragraph("INTERPRETATION", S_tbl_hdr)], [Paragraph("Step 1\n(Screening)", S_tbl_ctr), Paragraph("CBC with differential\n(Hgb, MCV, MCH, RDW)", S_tbl_cel), Paragraph("Hgb low for age + MCV <70 fL + MCH <23 pg + RDW >14.5% → suspect IDA", S_tbl_cel)], [Paragraph("Step 2\n(Confirm)", S_tbl_ctr), Paragraph("Serum ferritin, serum iron, TIBC, transferrin saturation", S_tbl_cel), Paragraph("Ferritin <12 µg/L confirms IDA. If ferritin normal/high with microcytosis → consider thalassemia", S_tbl_cel)], [Paragraph("Step 3\n(Cause)", S_tbl_ctr), Paragraph("Dietary history, stool exam (ova, cysts), stool occult blood, peripheral smear", S_tbl_cel), Paragraph("Pencil cells / target cells on smear. Parasites confirm helminthic cause.", S_tbl_cel)], [Paragraph("Step 4\n(Differentiate)", S_tbl_ctr), Paragraph("Hb electrophoresis if IDA criteria + family history, or poor iron response", S_tbl_cel), Paragraph("Rules out beta-thalassemia trait (elevated HbA2 >3.5%)", S_tbl_cel)], [Paragraph("Step 5\n(Severity)", S_tbl_ctr), Paragraph("Retic count, cardiac exam, consider ECG if Hgb <7 g/dL", S_tbl_cel), Paragraph("Reticulocytosis confirms marrow response. Severe anemia may need transfusion.", S_tbl_cel)], ] workup_table = Table(workup_data, colWidths=[TW*0.14, TW*0.37, TW*0.49]) workup_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), NAVY), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(workup_table) story.append(Spacer(1, 4*mm)) # ── 5. TREATMENT ────────────────────────────────────────────────────────────── story.append(section_header("5. TREATMENT PROTOCOL", bg=GREEN)) story.append(Spacer(1, 2*mm)) story.append(Paragraph("5A. Oral Iron Supplementation (First-Line)", S_h3)) story.append(Spacer(1, 1*mm)) iron_data = [ [Paragraph("Parameter", S_tbl_hdr), Paragraph("Guideline", S_tbl_hdr)], [Paragraph("Drug of choice", S_tbl_cel), Paragraph("Ferrous sulfate (most absorbed); alternatives: ferrous gluconate, ferrous fumarate, " "polymaltose iron", S_tbl_cel)], [Paragraph("Dose (therapeutic)", S_tbl_cel), Paragraph("3–6 mg/kg/day elemental iron, in 1–2 divided doses (AAP & WHO)", S_tbl_cel)], [Paragraph("Dose (prophylactic)", S_tbl_cel), Paragraph("1–2 mg/kg/day (max 15 mg/day) for at-risk infants (premature, EBF beyond 4 months)", S_tbl_cel)], [Paragraph("Administration", S_tbl_cel), Paragraph("30–60 min before meals (empty stomach); give with orange juice/Vitamin C to enhance " "absorption; AVOID with milk, tea, or antacids", S_tbl_cel)], [Paragraph("Duration", S_tbl_cel), Paragraph("Continue 3 months AFTER Hgb normalises to replete iron stores (total 4–6 months)", S_tbl_cel)], [Paragraph("Monitoring", S_tbl_cel), Paragraph("CBC at 4 weeks (expect Hgb ↑ ≥1 g/dL); recheck at 3 months and end of treatment", S_tbl_cel)], [Paragraph("Side effects", S_tbl_cel), Paragraph("GI upset, constipation, dark stools (reassure parents), teeth staining with liquid " "formulations (use straw or wipe after dose)", S_tbl_cel)], ] iron_table = Table(iron_data, colWidths=[TW*0.27, TW*0.73]) iron_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREEN), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(iron_table) story.append(Spacer(1, 3*mm)) story.append(Paragraph("5B. Elemental Iron Calculator (Quick Reference)", S_h3)) story.append(Spacer(1, 1*mm)) calc_data = [ [Paragraph("Formulation", S_tbl_hdr), Paragraph("Elemental Iron Content", S_tbl_hdr), Paragraph("Example dose (15 kg child @ 4 mg/kg/day = 60 mg/day)", S_tbl_hdr)], [Paragraph("Ferrous sulfate syrup\n(30 mg/5 mL)", S_tbl_ctr), Paragraph("20% elemental\n= 6 mg/5 mL", S_tbl_ctr), Paragraph("10 mL twice daily", S_tbl_ctr)], [Paragraph("Ferrous gluconate drops\n(15 mg/mL)", S_tbl_ctr), Paragraph("12% elemental\n= 1.8 mg/drop", S_tbl_ctr), Paragraph("~2 mL twice daily", S_tbl_ctr)], [Paragraph("Ferrous fumarate\n(100 mg tablet)", S_tbl_ctr), Paragraph("33% elemental\n= 33 mg/tab", S_tbl_ctr), Paragraph("1 tab morning + ½ tab evening", S_tbl_ctr)], [Paragraph("Iron polymaltose\n(50 mg/5 mL)", S_tbl_ctr), Paragraph("100% elemental\n= 50 mg/5 mL", S_tbl_ctr), Paragraph("6 mL once daily (better tolerated)", S_tbl_ctr)], ] calc_table = Table(calc_data, colWidths=[TW*0.30, TW*0.30, TW*0.40]) calc_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREEN), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("ALIGN", (0,0), (-1,-1), "CENTER"), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(calc_table) story.append(Spacer(1, 3*mm)) story.append(Paragraph("5C. Parenteral Iron (Indications)", S_h3)) story.append(Spacer(1, 1*mm)) story.append(info_box( "<b>IV or IM iron is reserved for:</b> (1) Malabsorption (e.g. IBD, celiac); " "(2) Intolerance/non-compliance with oral iron; (3) Hgb <7 g/dL requiring rapid correction; " "(4) Chronic renal failure on erythropoietin. " "<b>Preferred agent:</b> IV iron sucrose or ferric carboxymaltose (FCM) under specialist supervision. " "Monitor for anaphylaxis (resuscitation equipment must be available).", bg=colors.HexColor("#FFF9E6"), border=ORANGE )) story.append(Spacer(1, 3*mm)) story.append(Paragraph("5D. Blood Transfusion Criteria", S_h3)) story.append(Spacer(1, 1*mm)) transfusion_data = [ [Paragraph("Indication", S_tbl_hdr), Paragraph("Threshold", S_tbl_hdr), Paragraph("Notes", S_tbl_hdr)], [Paragraph("Symptomatic severe anemia", S_tbl_cel), Paragraph("Hgb < 6–7 g/dL", S_tbl_cel), Paragraph("Dyspnoea, cardiac failure, altered consciousness", S_tbl_cel)], [Paragraph("Pre-operative", S_tbl_cel), Paragraph("Hgb < 8 g/dL", S_tbl_cel), Paragraph("Correct before elective surgery", S_tbl_cel)], [Paragraph("Haemodynamic instability", S_tbl_cel), Paragraph("Any Hgb level", S_tbl_cel), Paragraph("Active bleeding with haemodynamic compromise", S_tbl_cel)], ] trans_table = Table(transfusion_data, colWidths=[TW*0.33, TW*0.22, TW*0.45]) trans_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), RED), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#FDECEC"), WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(trans_table) story.append(Spacer(1, 4*mm)) # ── 6. ANTHELMINTIC THERAPY ─────────────────────────────────────────────────── story.append(section_header("6. ANTHELMINTIC THERAPY (Parasitic IDA)", bg=colors.HexColor("#5B2C8D"))) story.append(Spacer(1, 2*mm)) story.append(info_box( "<b>Indication:</b> All children with IDA + eosinophilia OR in endemic areas (stool not available / " "pending). Deworming addresses a common correctable cause of chronic GI blood loss and iron malabsorption.", bg=colors.HexColor("#F3EAF9"), border=colors.HexColor("#5B2C8D") )) story.append(Spacer(1, 2*mm)) deworm_data = [ [Paragraph("Drug", S_tbl_hdr), Paragraph("Dose", S_tbl_hdr), Paragraph("Age Eligibility", S_tbl_hdr), Paragraph("Coverage", S_tbl_hdr)], [Paragraph("Albendazole\n(FIRST LINE)", S_tbl_cel), Paragraph("400 mg single dose\n(200 mg if 1–2 yr)", S_tbl_cel), Paragraph("≥ 1 year", S_tbl_cel), Paragraph("Ascaris, hookworm, Trichuris, Strongyloides", S_tbl_cel)], [Paragraph("Mebendazole", S_tbl_cel), Paragraph("100 mg twice daily × 3 days\nOR 500 mg single dose", S_tbl_cel), Paragraph("≥ 2 years", S_tbl_cel), Paragraph("Ascaris, hookworm, Trichuris", S_tbl_cel)], [Paragraph("Metronidazole", S_tbl_cel), Paragraph("15 mg/kg/day in 3 doses × 5–7 days", S_tbl_cel), Paragraph("Any age", S_tbl_cel), Paragraph("Giardia, Entamoeba histolytica", S_tbl_cel)], [Paragraph("WHO MDA\n(Mass Drug Admin)", S_tbl_cel), Paragraph("Albendazole 400 mg annual", S_tbl_cel), Paragraph("1–12 years\nendemics", S_tbl_cel), Paragraph("Community-level prevention; repeat at 6 months if heavy burden", S_tbl_cel)], ] deworm_table = Table(deworm_data, colWidths=[TW*0.22, TW*0.27, TW*0.18, TW*0.33]) deworm_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#5B2C8D")), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#F3EAF9"), WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(deworm_table) story.append(Spacer(1, 4*mm)) # ── 7. DIETARY COUNSELLING ──────────────────────────────────────────────────── story.append(section_header("7. DIETARY COUNSELLING", bg=TEAL)) story.append(Spacer(1, 2*mm)) story.append(two_col( left_items=[ "<b>Haem iron (best absorbed 15–35%):</b>", "• Chicken liver, lamb liver", "• Red meat (beef, lamb, goat)", "• Fish and egg yolk", "", "<b>Non-haem iron (absorbed 2–10%):</b>", "• Dark leafy greens (spinach, fenugreek, amaranth)", "• Legumes (lentils, chickpeas, rajma, soya)", "• Jaggery (gur), dried dates, raisins", "• Fortified cereals and breads", "• Pumpkin seeds, sesame", ], right_items=[ "<b>Enhancers (give WITH iron meals):</b>", "• Vitamin C: lemon, amla, guava, tomato", "• Fermentation (idli, dosa) improves absorption", "", "<b>Inhibitors (AVOID with iron):</b>", "• Cow's milk: limit to <500 mL/day", "• Tea and coffee (tannins chelate iron)", "• High-phytate foods: bran, unprocessed cereals", "• Calcium supplements (compete for absorption)", "", "<b>Key Maternal Advice:</b>", "• Exclusive breastfeeding to 6 months", "• Timely iron-rich complementary foods from 6 months", ], left_header="Iron-Rich Foods", right_header="Absorption Enhancers & Inhibitors", lbg=colors.HexColor("#E8F7F7"), rbg=GREY_LT, )) story.append(Spacer(1, 4*mm)) # ── 8. FOLLOW-UP SCHEDULE ───────────────────────────────────────────────────── story.append(section_header("8. FOLLOW-UP SCHEDULE & RESPONSE CRITERIA", bg=ORANGE)) story.append(Spacer(1, 2*mm)) fu_data = [ [Paragraph("Visit", S_tbl_hdr), Paragraph("Timing", S_tbl_hdr), Paragraph("Tests", S_tbl_hdr), Paragraph("Expected Response / Action", S_tbl_hdr)], [Paragraph("V1 – Baseline", S_tbl_ctr), Paragraph("Day 0", S_tbl_ctr), Paragraph("CBC, ferritin, iron, TIBC, stool", S_tbl_cel), Paragraph("Establish baseline; start iron + deworming", S_tbl_cel)], [Paragraph("V2 – Early check", S_tbl_ctr), Paragraph("Week 2–4", S_tbl_ctr), Paragraph("CBC, reticulocyte count", S_tbl_cel), Paragraph("Retic ↑ by Week 1–2 (marrow response). Hgb ↑ ≥ 1 g/dL by Week 4. " "If no response → check compliance, diagnosis", S_tbl_cel)], [Paragraph("V3 – Mid therapy", S_tbl_ctr), Paragraph("Month 3", S_tbl_ctr), Paragraph("CBC, ferritin", S_tbl_cel), Paragraph("Hgb should normalise. Continue iron 3 more months to replete stores.", S_tbl_cel)], [Paragraph("V4 – End therapy", S_tbl_ctr), Paragraph("Month 5–6", S_tbl_ctr), Paragraph("CBC, ferritin, iron, TIBC", S_tbl_cel), Paragraph("Ferritin >20 µg/L confirms stores replete. Discontinue iron. Dietary counselling reinforce.", S_tbl_cel)], [Paragraph("V5 – Long term", S_tbl_ctr), Paragraph("6-monthly", S_tbl_ctr), Paragraph("Hgb (annual screening)", S_tbl_cel), Paragraph("Prevention of recurrence. Repeat deworming if in endemic area.", S_tbl_cel)], ] fu_table = Table(fu_data, colWidths=[TW*0.16, TW*0.13, TW*0.27, TW*0.44]) fu_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), ORANGE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ("ALIGN", (0,0), (1,-1), "CENTER"), ])) story.append(fu_table) story.append(Spacer(1, 4*mm)) # ── 9. WHEN TO REFER ───────────────────────────────────────────────────────── story.append(section_header("9. REFERRAL CRITERIA (Red Flags)", bg=RED)) story.append(Spacer(1, 2*mm)) story.append(two_col( left_items=[ "• Hgb < 6 g/dL or signs of cardiac compromise", "• No response after 4 weeks of adequate oral iron", "• Suspected thalassemia or haemoglobinopathy", "• Concurrent thrombocytopenia or leucopenia", "• Splenomegaly or hepatomegaly", ], right_items=[ "• Suspected malabsorption (celiac, IBD, post-surgery)", "• Recurrent IDA despite treatment", "• Chronic disease / renal failure", "• Iron infusion required (IV access, monitoring)", "• Developmental regression or suspected lead exposure", ], left_header="Refer to Paediatric Haematologist:", right_header="Refer to Specialist / Hospital:", lbg=colors.HexColor("#FDECEC"), rbg=colors.HexColor("#FDECEC"), )) story.append(Spacer(1, 4*mm)) # ── 10. COMPLICATIONS ───────────────────────────────────────────────────────── story.append(section_header("10. COMPLICATIONS OF UNTREATED IDA", bg=NAVY)) story.append(Spacer(1, 2*mm)) comp_data = [ [Paragraph("System", S_tbl_hdr), Paragraph("Complication", S_tbl_hdr), Paragraph("Notes", S_tbl_hdr)], [Paragraph("Neurodevelopment", S_tbl_cel), Paragraph("Cognitive impairment, poor attention, language delay, irritability", S_tbl_cel), Paragraph("Iron critical for myelination and dopamine synthesis; may be irreversible if severe in <2 yr", S_tbl_cel)], [Paragraph("Cardiovascular", S_tbl_cel), Paragraph("High-output cardiac failure, cardiomegaly", S_tbl_cel), Paragraph("Compensatory tachycardia and increased cardiac output with severe anemia", S_tbl_cel)], [Paragraph("Immunity", S_tbl_cel), Paragraph("Impaired T-cell function, increased infection susceptibility", S_tbl_cel), Paragraph("Iron-deficient macrophages have reduced bactericidal activity", S_tbl_cel)], [Paragraph("Growth", S_tbl_cel), Paragraph("Stunted growth, poor weight gain, fatigue", S_tbl_cel), Paragraph("Iron essential for skeletal muscle metabolism and thyroid function", S_tbl_cel)], [Paragraph("Behavioural", S_tbl_cel), Paragraph("Pica (soil, ice, clay eating)", S_tbl_cel), Paragraph("Increases risk of lead toxicity and helminthic re-infection", S_tbl_cel)], [Paragraph("School", S_tbl_cel), Paragraph("Reduced academic performance, poor exercise tolerance", S_tbl_cel), Paragraph("Reversible with early treatment before school age", S_tbl_cel)], ] comp_table = Table(comp_data, colWidths=[TW*0.20, TW*0.38, TW*0.42]) comp_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), NAVY), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(comp_table) story.append(Spacer(1, 4*mm)) # ── 11. PREVENTION ──────────────────────────────────────────────────────────── story.append(section_header("11. PREVENTION", bg=GREEN)) story.append(Spacer(1, 2*mm)) prev_data = [ [Paragraph("Population", S_tbl_hdr), Paragraph("Intervention", S_tbl_hdr), Paragraph("Recommendation", S_tbl_hdr)], [Paragraph("Preterm / LBW infants", S_tbl_cel), Paragraph("Iron supplementation", S_tbl_cel), Paragraph("2 mg/kg/day from 1 month of age until 12 months (AAP)", S_tbl_cel)], [Paragraph("Term breastfed infants", S_tbl_cel), Paragraph("Iron-fortified foods", S_tbl_cel), Paragraph("Iron drops 1 mg/kg/day at 4 months until iron-rich foods introduced (AAP)", S_tbl_cel)], [Paragraph("All children 6–24 mo", S_tbl_cel), Paragraph("Screening CBC", S_tbl_cel), Paragraph("Universal Hgb screening at 9–12 months; repeat at 15–18 months (AAP, 2010)", S_tbl_cel)], [Paragraph("High-risk toddlers", S_tbl_cel), Paragraph("Limit cow's milk", S_tbl_cel), Paragraph("Cap whole cow's milk at 500 mL/day; introduce iron-rich complementary foods by 6 months", S_tbl_cel)], [Paragraph("School-age endemic areas", S_tbl_cel), Paragraph("Annual deworming", S_tbl_cel), Paragraph("Albendazole 400 mg annually (WHO MDA programme)", S_tbl_cel)], [Paragraph("Pregnant mothers", S_tbl_cel), Paragraph("Antenatal iron + IFA", S_tbl_cel), Paragraph("Prevent maternal IDA → prevents neonatal iron depletion", S_tbl_cel)], ] prev_table = Table(prev_data, colWidths=[TW*0.25, TW*0.25, TW*0.50]) prev_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREEN), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_LT, WHITE]), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(prev_table) story.append(Spacer(1, 4*mm)) # ── 12. QUICK REFERENCE CARD ───────────────────────────────────────────────── story.append(section_header("12. QUICK CLINICAL REFERENCE CARD", bg=TEAL)) story.append(Spacer(1, 2*mm)) qr_data = [ [Paragraph("DIAGNOSE", S_tbl_hdr), Paragraph("TREAT", S_tbl_hdr), Paragraph("MONITOR", S_tbl_hdr)], [ Paragraph( "✓ Hgb low for age\n" "✓ MCV < 70 fL\n" "✓ MCH < 23 pg\n" "✓ RDW > 14.5%\n" "✓ Ferritin < 12 µg/L\n" "✓ Peripheral smear:\n pencil / hypochromic cells", S_tbl_cel, ), Paragraph( "• Ferrous sulfate 3–6 mg/kg/day\n" "• Give before meals + Vit C\n" "• Avoid milk/tea with dose\n" "• Albendazole 400 mg (≥1 yr)\n" "• Dietary counselling\n" "• Treat 3 months post Hgb\n" " normalisation", S_tbl_cel, ), Paragraph( "• CBC at 4 weeks\n" "• Expect Hgb ↑ 1 g/dL/week\n" "• Ferritin at 3 months\n" "• Stop when ferritin > 20\n" "• Annual Hgb screen\n" "• Re-deworm every 6 months\n" " in endemic areas", S_tbl_cel, ), ], ] qr_table = Table(qr_data, colWidths=[TW/3, TW/3, TW/3]) qr_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL), ("BACKGROUND", (0,1), (0,1), colors.HexColor("#E8F7F7")), ("BACKGROUND", (1,1), (1,1), GREY_LT), ("BACKGROUND", (2,1), (2,1), colors.HexColor("#EAF6EB")), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 7), ("RIGHTPADDING", (0,0), (-1,-1), 7), ("GRID", (0,0), (-1,-1), 0.4, GREY_MID), ("VALIGN", (0,0), (-1,-1), "TOP"), ("ALIGN", (0,0), (-1,0), "CENTER"), ])) story.append(qr_table) story.append(Spacer(1, 4*mm)) # ── FOOTER / REFERENCES ─────────────────────────────────────────────────────── story.append(HRFlowable(width=TW, thickness=1, color=GREY_MID)) story.append(Spacer(1, 2*mm)) story.append(Paragraph( "<b>References:</b> 1. Harrison's Principles of Internal Medicine, 22E (2025), Chapter 102 — Iron Deficiency Anemia. " "2. American Academy of Pediatrics (AAP). Diagnosis and Prevention of Iron Deficiency in Infants and Young Children, 2010. " "3. WHO. Guideline: Daily Iron Supplementation in Infants and Children, 2016. " "4. Red Book 2021 – Report of the Committee on Infectious Diseases, AAP (Parasitic Infections). " "5. Quick Compendium of Clinical Pathology, 5th Ed.", S_small )) story.append(Spacer(1, 1*mm)) story.append(Paragraph( "Protocol Version 1.0 | Sisindri Newborn & Children's Hospital | July 2026 | " "For clinical use under paediatric supervision. Review annually.", S_small )) # ── Build ────────────────────────────────────────────────────────────────────── def add_page_number(canvas, doc): canvas.saveState() canvas.setFont("Helvetica", 7) canvas.setFillColor(colors.grey) page_num = canvas.getPageNumber() canvas.drawRightString(W - 1.5*cm, 1.0*cm, f"Page {page_num}") canvas.drawString(1.5*cm, 1.0*cm, "CONFIDENTIAL — FOR PROFESSIONAL USE ONLY") # top accent line canvas.setStrokeColor(NAVY) canvas.setLineWidth(3) canvas.line(1.5*cm, H - 1.3*cm, W - 1.5*cm, H - 1.3*cm) canvas.restoreState() doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number) print("PDF created:", OUTPUT) EOF
ls -lh /tmp/workspace/ida-protocol/
Pediatric IDA Management Protocol
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Scope & Purpose | Audience, setting, guideline alignment |
| 2. Definition & Epidemiology | Prevalence, risk factors, peak ages |
| 3. Diagnostic Criteria | Hgb cut-offs table (mild/moderate/severe by age), full CBC parameter table |
| 4. Diagnostic Work-Up Algorithm | 5-step structured algorithm (CBC → ferritin → cause → differentiate → severity) |
| 5. Treatment Protocol | Oral iron dosing, elemental iron calculator for 4 formulations, IV indications, transfusion criteria |
| 6. Anthelmintic Therapy | Albendazole, mebendazole, metronidazole doses with coverage |
| 7. Dietary Counselling | Iron-rich foods, absorption enhancers/inhibitors, maternal advice |
| 8. Follow-Up Schedule | 5-visit timeline with expected responses |
| 9. Referral Criteria | Red flag indicators for specialist referral |
| 10. Complications | Neurodevelopment, cardiac, immunity, growth, pica |
| 11. Prevention | Premature infants, breastfed infants, school-age deworming |
| 12. Quick Reference Card | 3-column Diagnose / Treat / Monitor summary |