Reading File
analyse_media
analyse_media
Finding Sources
Finding Sources
Searching PubMed

"iron deficiency anemia" AND "serum ferritin" diagnosis

Reading File
Reading File
I now have all the information needed for a thorough interpretation. Here is the complete analysis:

Lab Report Analysis - CH. Shivani (19F) | 11-Aug-2026


Complete Blood Count - Annotated Results

TestResultReference RangeStatusInterpretation
Haemoglobin9.5 g/dL11.5-16.5πŸ”΄ LOWMild-moderate anemia
MCH21.8 pg25.0-35.0πŸ”΄ LOWHypochromic RBCs
MCHC33.9 g/dL31.0-38.0βœ… Normal
Total Leucocyte Count10.7 Γ— 10⁹/L4-11βœ… NormalUpper end of normal
Lymphocytes4.4 Γ— 10⁹/L0.5-5.0βœ… Normal
MID1.7 Γ— 10⁹/L0.1-1.5🟑 Slightly highMinor, not clinically significant
Granulocytes4.6 Γ— 10⁹/L1.2-8.0βœ… Normal
RBC4.35 Γ— 10ΒΉΒ²/L3.50-5.50βœ… Normal
MCV64.3 fL75.0-100.0πŸ”΄ LOWSignificant microcytosis
HCT28%35.0-55.0πŸ”΄ LOWLow hematocrit
PDW%37.8%0.1-99.9βœ… Normal
RDW%14.6%11.0-16.0🟑 High-normalAnisocytosis - mixed cell sizes
RDWa48.9 fL30.0-150.0βœ… Normal
PLT484 Γ— 10Β³/ΞΌL100-400πŸ”΄ HIGHReactive thrombocytosis
MPV7.8 fL8.0-11.0🟑 Slightly lowSmall platelets
PDW9.6 fL0.1-99.9βœ… Normal
PCT0.38%0.01-9.99βœ… Normal

Biochemistry

TestResultReference Range (Females)Status
Serum Ferritin23 ng/mL~12-150 ng/mL (females)🟑 Low-normal / borderline low
Note: The lab printed the male reference range (20-290 ng/mL) on the report - the female reference range is approximately 12-150 ng/mL. For a 19-year-old female, ferritin below 30 ng/mL is strongly suggestive of depleted iron stores, even if technically above the lower limit for women. The Washington Manual states ferritin <10 ng/mL in women "almost always" reflects low iron stores, but values 10-30 ng/mL with this clinical picture remain diagnostically significant.

Diagnosis: Iron Deficiency Anemia (IDA)

The triad is classic and consistent:
  1. Low Hb (9.5 g/dL) - anemia present
  2. Very low MCV (64.3 fL) with low MCH (21.8 pg) - microcytic, hypochromic pattern; the Textbook of Family Medicine notes that in severe IDA, MCV can be as low as 57 fL, consistent with this finding
  3. Low-borderline ferritin (23 ng/mL) - ferritin is the primary storage form of iron and the most specific marker of absolute iron deficiency; given depleted stores, this level in a menstruating 19-year-old is consistent with IDA
  4. Reactive thrombocytosis (PLT 484) - the Textbook of Family Medicine specifically states "the platelet count often becomes elevated with a mean value of 450,000/mmΒ³ in iron-deficiency anemia" - this is a reactive, expected finding and not a platelet disorder
  5. Elevated RDW (14.6%) - indicates anisocytosis, a hallmark of IDA as iron-replete and iron-depleted cells coexist

What is Likely Causing This?

In a 19-year-old female, the most common causes are:
  • Heavy or prolonged menstrual periods (most likely)
  • Inadequate dietary iron intake
  • Malabsorption (celiac disease, H. pylori - less common)

What Should Be Done Next?

Further tests to consider:
  • Serum iron + TIBC (Total Iron Binding Capacity) + transferrin saturation - to confirm IDA fully. In IDA: low serum iron, high TIBC, low saturation (<16%)
  • Peripheral blood smear - to look for hypochromic, pencil-shaped (elliptocytic) cells
  • Reticulocyte count (should be low in IDA)
  • If ferritin is questionable: Soluble transferrin receptor (sTfR) test - not affected by inflammation
Treatment (as per Washington Manual):
  • Oral iron therapy is standard for stable, mild-moderate IDA
  • Ferrous sulfate 325 mg once to three times daily (65 mg elemental iron per dose) is most common
  • Iron absorbs best on an empty stomach; take with vitamin C (orange juice)
  • If GI side effects are troublesome, switch to ferrous gluconate or take every other day
  • Recheck CBC in 4-6 weeks; hemoglobin should rise ~1-2 g/dL/month
  • Continue iron for 3-6 months after Hb normalizes to replenish stores
Regarding the thrombocytosis: No treatment needed - platelet count will normalize once iron stores are replenished.

Summary

This is a straightforward case of iron deficiency anemia in a young menstruating female, almost certainly driven by menstrual blood loss and/or dietary insufficiency. The combination of low Hb, very low MCV, low MCH, borderline-low ferritin, and reactive thrombocytosis all point to the same diagnosis. The referring doctor (Dr. Dadireddy Sai Sree) should be consulted to discuss:
  • Menstrual history (cycle duration, flow volume)
  • Dietary history
  • Oral iron supplementation
  • Further tests if no clear cause is identified
Disclaimer: This is an educational interpretation for informational purposes. Final clinical decisions should be made by the treating physician.

Generate a quick reference PDF with IDA diagnostic criteria and treatment protocols

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"

Running Command

mkdir -p /tmp/workspace/ida-pdf && cat > /tmp/workspace/ida-pdf/generate_ida_pdf.py << 'PYEOF' 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, KeepTogether ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import Flowable W, H = A4 # ── colour palette ────────────────────────────────────────────────────────── RED = colors.HexColor("#C0392B") DARK_RED = colors.HexColor("#922B21") ORANGE = colors.HexColor("#E67E22") GREEN = colors.HexColor("#1E8449") BLUE = colors.HexColor("#1A5276") TEAL = colors.HexColor("#148F77") LIGHT_BG = colors.HexColor("#FDFEFE") HEADER_BG= colors.HexColor("#1A5276") ALT_ROW = colors.HexColor("#EBF5FB") WARN_BG = colors.HexColor("#FEF9E7") WARN_BORDER = colors.HexColor("#F39C12") SECTION_BG = colors.HexColor("#EAF2FF") # ── document ───────────────────────────────────────────────────────────────── doc = SimpleDocTemplate( "/tmp/workspace/ida-pdf/IDA_Quick_Reference.pdf", pagesize=A4, leftMargin=18*mm, rightMargin=18*mm, topMargin=15*mm, bottomMargin=15*mm, title="IDA Quick Reference Guide", author="Orris Medical", ) styles = getSampleStyleSheet() def S(name, **kw): return ParagraphStyle(name, parent=styles["Normal"], **kw) # custom styles title_style = S("Title2", fontSize=20, textColor=colors.white, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=2) sub_style = S("Sub", fontSize=10, textColor=colors.HexColor("#AED6F1"), alignment=TA_CENTER, fontName="Helvetica", spaceAfter=0) h1_style = S("H1", fontSize=12, textColor=colors.white, fontName="Helvetica-Bold", spaceBefore=2, spaceAfter=2, leftIndent=6, leading=16) h2_style = S("H2", fontSize=10, textColor=BLUE, fontName="Helvetica-Bold", spaceBefore=4, spaceAfter=2) body_style = S("Body", fontSize=8.5, leading=12, spaceAfter=2, alignment=TA_JUSTIFY) bullet_style = S("Bullet", fontSize=8.5, leading=12, leftIndent=12, bulletIndent=4, spaceAfter=1) note_style = S("Note", fontSize=7.8, textColor=colors.HexColor("#7D6608"), leading=11, leftIndent=8) footer_style = S("Footer", fontSize=7, textColor=colors.grey, alignment=TA_CENTER) tag_style = S("Tag", fontSize=7.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER) elems = [] # ══════════════════════════════════════════════════════════════════ # HEADER BANNER # ══════════════════════════════════════════════════════════════════ header_data = [[ Paragraph("IRON DEFICIENCY ANEMIA", title_style), "", ], [ Paragraph("Quick Reference: Diagnostic Criteria &amp; Treatment Protocols", sub_style), "", ]] header_tbl = Table(header_data, colWidths=[W - 36*mm], rowHeights=[26, 16]) header_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), HEADER_BG), ("SPAN", (0,0), (-1, 0)), ("SPAN", (0,1), (-1, 1)), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING",(0,-1),(-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS", [6]), ])) elems.append(header_tbl) elems.append(Spacer(1, 5*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION HELPER # ══════════════════════════════════════════════════════════════════ def section_header(title, color=BLUE): tbl = Table([[Paragraph(f"β–Œ {title}", h1_style)]], colWidths=[W - 36*mm]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("ROUNDEDCORNERS", [4]), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING",(0,0),(-1,-1), 4), ])) return tbl def bullet(text, symbol="β€’"): return Paragraph(f"<b>{symbol}</b> {text}", bullet_style) def warn_box(lines, title="⚠ Clinical Note"): content = [Paragraph(f"<b>{title}</b>", S("WH", fontSize=8.5, textColor=WARN_BORDER, fontName="Helvetica-Bold"))] for l in lines: content.append(Paragraph(f" {l}", S("WB", fontSize=8.2, textColor=colors.HexColor("#7D6608"), leading=11))) tbl = Table([[content]], colWidths=[W - 36*mm]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), WARN_BG), ("BOX", (0,0), (-1,-1), 1.2, WARN_BORDER), ("ROUNDEDCORNERS", [5]), ("TOPPADDING", (0,0),(-1,-1), 6), ("BOTTOMPADDING",(0,0),(-1,-1), 6), ("LEFTPADDING", (0,0),(-1,-1), 8), ])) return tbl # ══════════════════════════════════════════════════════════════════ # SECTION 1 – OVERVIEW # ══════════════════════════════════════════════════════════════════ elems.append(section_header("OVERVIEW", DARK_RED)) elems.append(Spacer(1, 2*mm)) elems.append(Paragraph( "Iron Deficiency Anemia (IDA) is the <b>most common nutritional deficiency worldwide</b>, " "characterised by depletion of iron stores leading to impaired haemoglobin synthesis. " "It progresses through three stages: <b>pre-latent</b> (depleted stores, normal Hb), " "<b>latent</b> (low serum iron, raised TIBC), and <b>manifest IDA</b> (microcytic hypochromic anemia).", body_style)) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 2 – DIAGNOSTIC CRITERIA # ══════════════════════════════════════════════════════════════════ elems.append(section_header("DIAGNOSTIC CRITERIA", BLUE)) elems.append(Spacer(1, 2*mm)) # lab table diag_header = [ Paragraph("<b>Parameter</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>IDA Finding</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Normal Range</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Significance</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), ] diag_rows = [ ["Haemoglobin", "< 12 g/dL (F) / < 13 g/dL (M)", "11.5–16.5 (F)\n13–17.5 (M) g/dL", "Confirms anaemia"], ["MCV", "< 80 fL (often < 70 fL)", "80–100 fL", "Microcytosis – hallmark"], ["MCH", "< 27 pg", "27–33 pg", "Hypochromia"], ["MCHC", "< 32 g/dL", "31.5–35.5 g/dL", "Late finding"], ["RDW", "> 14.5% (elevated)", "11.5–14.5%", "Anisocytosis – early sign"], ["Serum Ferritin", "< 30 ng/mL (diagnostic)\n< 10 ng/mL women (confirmatory)", "20–200 ng/mL (F)\n20–300 ng/mL (M)", "Most specific marker"], ["Serum Iron", "< 50 ΞΌg/dL", "60–170 ΞΌg/dL", "Reduced transport iron"], ["TIBC", "> 400 ΞΌg/dL", "250–370 ΞΌg/dL", "Compensatory rise"], ["Transferrin Sat.", "< 16%", "20–50%", "Key ratio for IDA"], ["Platelet Count", "Often elevated (reactive)\n~450 Γ— 10Β³/ΞΌL", "150–400 Γ— 10Β³/ΞΌL", "Reactive thrombocytosis"], ["Reticulocyte Hb", "< 25 pg", "28–35 pg", "Earliest indicator"], ] def pstyle(txt, bold=False, center=False): al = TA_CENTER if center else TA_LEFT fn = "Helvetica-Bold" if bold else "Helvetica" return Paragraph(txt, S("C", fontSize=8, leading=10.5, alignment=al, fontName=fn)) diag_data = [diag_header] + [ [pstyle(r[0], bold=True), pstyle(r[1]), pstyle(r[2]), pstyle(r[3])] for r in diag_rows ] col_w = [42*mm, 52*mm, 42*mm, 38*mm] diag_tbl = Table(diag_data, colWidths=col_w) ts = TableStyle([ ("BACKGROUND", (0,0), (-1,0), BLUE), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING",(0,0),(-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING",(0,0), (-1,-1), 5), ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, ALT_ROW]), ("ROUNDEDCORNERS", [4]), ("FONTSIZE", (0,0), (-1,-1), 8), ]) diag_tbl.setStyle(ts) elems.append(diag_tbl) elems.append(Spacer(1, 2*mm)) elems.append(warn_box([ "Ferritin is an acute-phase reactant β€” falsely normal/elevated in infection, inflammation, liver disease.", "Use soluble Transferrin Receptor (sTfR) or sTfR/log ferritin ratio when co-existing inflammation suspected.", "Bone marrow absent iron staining is the gold standard but rarely needed clinically.", ])) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 3 – DIFFERENTIAL DIAGNOSIS # ══════════════════════════════════════════════════════════════════ elems.append(section_header("DIFFERENTIAL DIAGNOSIS OF MICROCYTIC ANAEMIA", TEAL)) elems.append(Spacer(1, 2*mm)) diff_hdr = [ Paragraph("<b>Condition</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Ferritin</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Serum Iron</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>TIBC</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>RDW</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Key Distinguishing Feature</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), ] diff_rows = [ ["IDA", "↓ Low", "↓ Low", "↑ High", "↑ High", "History of blood loss / menorrhagia"], ["Anaemia of Chronic Disease","↑/N Normal", "↓ Low", "↓/N Low", "Normal", "CRP elevated; underlying chronic illness"], ["Ξ²-Thalassaemia trait", "Normal/↑", "Normal/↑", "Normal", "Normal", "Target cells; Hb A2 > 3.5% on HPLC"], ["Ξ±-Thalassaemia trait", "Normal", "Normal", "Normal", "Normal", "Ethnic origin; Hb Barts on NBS; FHx"], ["Sideroblastic anaemia", "↑ High", "↑ High", "↓ Low", "↑ High", "Ring sideroblasts on bone marrow"], ["Lead poisoning", "Normal", "↓ Low", "↑ High", "↑ High", "Basophilic stippling; elevated blood lead"], ] diff_data = [diff_hdr] + [ [pstyle(r[0], bold=True), pstyle(r[1], center=True), pstyle(r[2], center=True), pstyle(r[3], center=True), pstyle(r[4], center=True), pstyle(r[5])] for r in diff_rows ] diff_tbl = Table(diff_data, colWidths=[35*mm, 23*mm, 23*mm, 20*mm, 20*mm, 53*mm]) diff_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING",(0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1),(-1,-1), [colors.white, ALT_ROW]), ("ROUNDEDCORNERS",[4]), ])) elems.append(diff_tbl) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 4 – TREATMENT PROTOCOL # ══════════════════════════════════════════════════════════════════ elems.append(section_header("TREATMENT PROTOCOL", GREEN)) elems.append(Spacer(1, 2*mm)) # 4A – Oral iron elems.append(Paragraph("<b>A. Oral Iron Therapy</b> (first-line for stable, mild-moderate IDA)", h2_style)) oral_hdr = [ Paragraph("<b>Preparation</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Dose</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Elemental Fe</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Notes</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), ] oral_rows = [ ["Ferrous Sulfate (preferred)", "325 mg once–three times daily", "65 mg / dose", "Most cost-effective; commonest GI side-effects"], ["Ferrous Gluconate", "300 mg three times daily", "36 mg / dose", "Better GI tolerance; useful if sulfate not tolerated"], ["Ferrous Fumarate", "100 mg three times daily", "33 mg / dose", "Alternative; palatable for children"], ["Iron Polysaccharide Complex", "150 mg twice daily", "150 mg / dose","Less GI upset; more expensive"], ["Carbonyl Iron", "50 mg twice–three times daily", "50 mg / dose", "Slow-release; safest in accidental overdose"], ] oral_data = [oral_hdr] + [ [pstyle(r[0], bold=True), pstyle(r[1], center=True), pstyle(r[2], center=True), pstyle(r[3])] for r in oral_rows ] oral_tbl = Table(oral_data, colWidths=[48*mm, 44*mm, 28*mm, 54*mm]) oral_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREEN), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#EAFAF1")]), ("ROUNDEDCORNERS",[4]), ])) elems.append(oral_tbl) elems.append(Spacer(1, 2*mm)) # oral tips elems.append(Paragraph("<b>Oral Iron – Key Practice Points:</b>", h2_style)) tips = [ "Take on an <b>empty stomach</b> for best absorption (30 min before meals)", "Co-administer with <b>Vitamin C</b> (100–200 mg / orange juice) to enhance absorption", "Avoid concurrent tea, coffee, calcium, antacids β€” they inhibit absorption", "<b>Every-other-day dosing</b> may be as effective as daily with fewer GI side effects (hepcidin cycling)", "Expected response: <b>Hb rises ~1–2 g/dL per month</b>; reticulocyte peak at 7–10 days", "Continue for <b>3–6 months after Hb normalises</b> to replenish stores", "If Hb does not respond in 4 weeks β†’ consider non-adherence, ongoing blood loss, malabsorption", ] for t in tips: elems.append(bullet(t)) elems.append(Spacer(1, 2*mm)) # 4B – IV iron elems.append(Paragraph("<b>B. Intravenous Iron Therapy</b> (indications below)", h2_style)) iv_indications = [ "Intolerance / non-response to oral iron", "Malabsorption (bariatric surgery, IBD, coeliac disease)", "Severe anaemia requiring rapid repletion (pre-operative, cardiac failure)", "Chronic kidney disease on haemodialysis", "Second / third trimester pregnancy with significant IDA", ] for ind in iv_indications: elems.append(bullet(ind, "β†’")) elems.append(Spacer(1, 1*mm)) iv_hdr = [ Paragraph("<b>Agent</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Dose / Schedule</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Notes</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), ] iv_rows = [ ["Iron Sucrose", "200 mg IV over 15 min; repeat doses", "Safest profile; preferred in pregnancy / CKD"], ["Ferric Carboxymaltose","500–1000 mg IV over 15 min; 1–2 doses", "High single-dose capacity; risk of hypophosphataemia"], ["Low-MW Iron Dextran", "Total dose infusion (TDI) over 4–6 h", "Requires test dose; risk of hypersensitivity"], ["Ferric Derisomaltose", "500–1000 mg IV over 20 min", "Newer; minimal anaphylaxis risk; single high dose"], ] iv_data = [iv_hdr] + [ [pstyle(r[0], bold=True), pstyle(r[1]), pstyle(r[2])] for r in iv_rows ] iv_tbl = Table(iv_data, colWidths=[46*mm, 62*mm, 66*mm]) iv_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1E8449")), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING",(0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1),(-1,-1), [colors.white, colors.HexColor("#EAFAF1")]), ])) elems.append(iv_tbl) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 5 – SPECIAL POPULATIONS # ══════════════════════════════════════════════════════════════════ elems.append(section_header("SPECIAL POPULATIONS", ORANGE)) elems.append(Spacer(1, 2*mm)) sp_hdr = [ Paragraph("<b>Population</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Threshold / Consideration</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Preferred Management</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), ] sp_rows = [ ["Premenopausal Women", "Hb < 12 g/dL; ferritin < 30 ng/mL", "Oral iron; treat menorrhagia cause; dietary counselling"], ["Pregnancy", "Hb < 11 (1st/3rd trim), < 10.5 (2nd trim)", "Oral iron 60 mg/day prophylaxis; IV if severe / malabsorption"], ["Children (6 mo–5 yr)", "Hb < 11 g/dL; ferritin < 12 ng/mL", "3–6 mg/kg/day elemental Fe; treat for 3 months post-normalisation"], ["Adolescents", "Growth spurt + menstruation = high risk", "Oral iron + dietary education; screen at-risk groups"], ["Elderly", "IDA often multifactorial; exclude GI source", "Colonoscopy/endoscopy; oral iron; consider IV if oral fails"], ["CKD / Haemodialysis", "Ferritin target 200–500; TSAT > 20%", "IV iron sucrose; ESA only if ferritin-replete"], ["Post-Bariatric Surgery", "Malabsorption of duodenal Fe absorption", "Preventive supplementation; IV iron often needed long-term"], ] sp_data = [sp_hdr] + [ [pstyle(r[0], bold=True), pstyle(r[1]), pstyle(r[2])] for r in sp_rows ] sp_tbl = Table(sp_data, colWidths=[44*mm, 62*mm, 68*mm]) sp_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), ORANGE), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#FEF9E7")]), ])) elems.append(sp_tbl) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 6 – MONITORING & FOLLOW-UP # ══════════════════════════════════════════════════════════════════ elems.append(section_header("MONITORING & FOLLOW-UP", DARK_RED)) elems.append(Spacer(1, 2*mm)) mon_hdr = [ Paragraph("<b>Timepoint</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Test</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Expected / Action</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), ] mon_rows = [ ["7–10 days", "Reticulocyte count", "Reticulocytosis confirms response to iron"], ["4 weeks", "CBC (Hb, MCV, RDW)", "Hb ↑ β‰₯1 g/dL expected; if not β†’ reassess (compliance? bleeding? malabsorption?)"], ["3 months", "CBC + Serum Ferritin", "Hb should normalise; continue iron 3–6 more months to replenish stores"], ["6 months", "CBC + Ferritin", "Ferritin should reach β‰₯ 50 ng/mL; can discontinue iron if stores replenished"], ["If no response", "Serum iron, TIBC, sTfR, HPLC", "Rule out: thalassaemia, sideroblastic anaemia, ongoing occult blood loss"], ] mon_data = [mon_hdr] + [ [pstyle(r[0], center=True, bold=True), pstyle(r[1]), pstyle(r[2])] for r in mon_rows ] mon_tbl = Table(mon_data, colWidths=[30*mm, 52*mm, 92*mm]) mon_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_RED), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, colors.HexColor("#FDEDEC")]), ])) elems.append(mon_tbl) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 7 – RED FLAGS / WHEN TO INVESTIGATE FOR CAUSE # ══════════════════════════════════════════════════════════════════ elems.append(section_header("RED FLAGS – INVESTIGATE UNDERLYING CAUSE", RED)) elems.append(Spacer(1, 2*mm)) rf_pairs = [ ("GI blood loss", "Age > 50 with new IDA β†’ colonoscopy + endoscopy mandatory; unexplained IDA in any male"), ("Haematuria", "Renal/bladder malignancy; always dipstick urine in new IDA"), ("Weight loss + IDA", "Screen for GI malignancy, coeliac disease, inflammatory bowel disease"), ("Recurrent IDA despite treatment", "Malabsorption (coeliac serology), H. pylori testing, hereditary haemorrhagic telangiectasia"), ("Pica / Pagophagia", "Pathognomonic of severe iron deficiency; resolves rapidly with iron treatment"), ("Koilonychia / Glossitis / Angular cheilitis", "Signs of chronic severe IDA; Plummer-Vinson syndrome if dysphagia present"), ] rf_data = [ [Paragraph(f"<b>πŸ”΄ {r[0]}</b>", S("RF", fontSize=8.5, fontName="Helvetica-Bold", textColor=RED)), Paragraph(r[1], S("RFB", fontSize=8.5, leading=11))] for r in rf_pairs ] rf_tbl = Table(rf_data, colWidths=[48*mm, 126*mm]) rf_tbl.setStyle(TableStyle([ ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#F1948A")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("ROWBACKGROUNDS",(0,0),(-1,-1), [colors.white, colors.HexColor("#FDEDEC")]), ])) elems.append(rf_tbl) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # SECTION 8 – DIETARY SOURCES OF IRON # ══════════════════════════════════════════════════════════════════ elems.append(section_header("DIETARY IRON SOURCES & COUNSELLING", TEAL)) elems.append(Spacer(1, 2*mm)) diet_hdr = [ Paragraph("<b>Food Source</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold")), Paragraph("<b>Iron Content</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Type</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), Paragraph("<b>Bioavailability</b>", S("TH", fontSize=8.5, textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)), ] diet_rows = [ ["Red meat / Organ meats (liver)", "~3–7 mg/100g", "Haem", "15–35% (high)"], ["Poultry / Fish", "~1–3 mg/100g", "Haem", "15–25% (moderate)"], ["Dark leafy greens (spinach, kale)","~2–3 mg/100g", "Non-Haem", "2–8% (low)"], ["Legumes (lentils, beans)", "~3–4 mg/100g", "Non-Haem", "2–8%; enhance with Vit C"], ["Fortified cereals", "~5–18 mg/serving","Non-Haem","Variable; up to 25%"], ["Tofu / Tempeh", "~3 mg/100g", "Non-Haem", "2–8%"], ["Dried fruits (apricot, raisin)", "~2–3 mg/100g", "Non-Haem", "Moderate; pair with Vit C"], ] diet_data = [diet_hdr] + [ [pstyle(r[0], bold=True), pstyle(r[1], center=True), pstyle(r[2], center=True), pstyle(r[3], center=True)] for r in diet_rows ] diet_tbl = Table(diet_data, colWidths=[60*mm, 38*mm, 28*mm, 48*mm]) diet_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, ALT_ROW]), ])) elems.append(diet_tbl) elems.append(Spacer(1, 2*mm)) elems.append(Paragraph( "<b>Inhibitors of iron absorption:</b> tea, coffee, phytates (bran), calcium (dairy), " "polyphenols. <b>Enhancers:</b> Vitamin C, meat factor (haem iron), fermented foods.", S("Diet2", fontSize=8, leading=11, textColor=colors.HexColor("#1A5276")) )) elems.append(Spacer(1, 3*mm)) # ══════════════════════════════════════════════════════════════════ # FOOTER # ══════════════════════════════════════════════════════════════════ elems.append(HRFlowable(width="100%", thickness=0.8, color=BLUE)) elems.append(Spacer(1, 1.5*mm)) elems.append(Paragraph( "Sources: Washington Manual of Medical Therapeutics | Textbook of Family Medicine 9e | " "Goldman-Cecil Medicine | Creasy &amp; Resnik's Maternal-Fetal Medicine | Harriet Lane Handbook 23e " "β€” Compiled by <b>Orris Medical</b> | August 2026 | For educational use only β€” not a substitute for clinical judgement.", footer_style )) # ── BUILD ──────────────────────────────────────────────────────────────────── doc.build(elems) print("PDF generated successfully.") PYEOF echo "Script written"

Running Command

cd /tmp/workspace/ida-pdf && python generate_ida_pdf.py

Running Command

ls -lh /tmp/workspace/ida-pdf/IDA_Quick_Reference.pdf

Your PDF is ready. Here's what's inside:

IDA Quick Reference

PDF Document Β· PDF


The document is a colour-coded, multi-section quick reference covering:
  1. Overview - Three-stage progression of IDA (pre-latent β†’ latent β†’ manifest)
  2. Diagnostic Criteria - Full table of 11 lab parameters (Hb, MCV, MCH, ferritin, TIBC, transferrin saturation, RDW, platelet count, etc.) with IDA findings, normal ranges, and clinical significance. Includes a warning box about ferritin as an acute-phase reactant and when to use sTfR instead.
  3. Differential Diagnosis - Side-by-side comparison of IDA vs. anaemia of chronic disease, Ξ²-thalassaemia, Ξ±-thalassaemia, sideroblastic anaemia, and lead poisoning
  4. Treatment Protocol - Oral iron preparations table (ferrous sulfate, gluconate, fumarate, polysaccharide, carbonyl) with elemental iron content; IV iron agents (iron sucrose, ferric carboxymaltose, iron dextran, ferric derisomaltose) with indications; key practice points including every-other-day dosing and Vitamin C co-administration
  5. Special Populations - Premenopausal women, pregnancy, children, adolescents, elderly, CKD/haemodialysis, post-bariatric surgery
  6. Monitoring & Follow-up - Timeline from 7 days to 6 months with expected responses and action triggers
  7. Red Flags - Six alarm features requiring investigation of underlying cause (GI malignancy, coeliac, haematuria, Plummer-Vinson syndrome, etc.)
  8. Dietary Counselling - Iron-rich food sources with bioavailability, inhibitors, and enhancers
Sources cited: Washington Manual, Textbook of Family Medicine 9e, Goldman-Cecil Medicine, Creasy & Resnik's Maternal-Fetal Medicine, and Harriet Lane Handbook 23e.
This is a shared conversation. Sign in to Orris to start your own chat.