python3 << 'EOF' import pdfplumber files = { "HLA_B27_ANA": "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA BLOOD REPORTS - HLA B27, ANA.pdf", "THYROID_LIPID": "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS - THYROID LIPID.pdf", "JUNE_2026": "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS JUNE 2026.pdf" } for label, path in files.items(): print(f"\n{'='*60}") print(f"FILE: {label}") print('='*60) with pdfplumber.open(path) as pdf: print(f"Pages: {len(pdf.pages)}") for i, page in enumerate(pdf.pages): print(f"\n--- Page {i+1} ---") text = page.extract_text() if text: print(text) # Also try tables tables = page.extract_tables() if tables: print(f"\n[Tables on page {i+1}]") for t_idx, table in enumerate(tables): print(f"Table {t_idx+1}:") for row in table: print(row) EOF
python3 << 'EOF' # Try pypdf for the two empty PDFs from pypdf import PdfReader for label, path in [ ("THYROID_LIPID", "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS - THYROID LIPID.pdf"), ("JUNE_2026", "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS JUNE 2026.pdf") ]: print(f"\n{'='*50}\nFILE: {label}") reader = PdfReader(path) print(f"Pages: {len(reader.pages)}") for i, page in enumerate(reader.pages): text = page.extract_text() print(f"\n--- Page {i+1} ---") print(repr(text[:500]) if text else "[empty]") EOF
python3 << 'EOF' # Extract images embedded in the PDF pages from pypdf import PdfReader import os for label, path in [ ("THYROID_LIPID", "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS - THYROID LIPID.pdf"), ("JUNE_2026", "/tmp/workspace/attachments/f4d3434f-9340-4b1f-a62d-59359dc039b6/DR SUDHA REPORTS JUNE 2026.pdf") ]: print(f"\n{'='*50}\nFILE: {label}") reader = PdfReader(path) out_dir = f"/tmp/workspace/{label}_images" os.makedirs(out_dir, exist_ok=True) for page_num, page in enumerate(reader.pages): images = page.images print(f"Page {page_num+1}: {len(images)} embedded images") for img_idx, image in enumerate(images): out_path = f"{out_dir}/page{page_num+1}_img{img_idx+1}.{image.name.split('.')[-1]}" with open(out_path, "wb") as f: f.write(image.data) print(f" Saved: {out_path} ({len(image.data)} bytes)") EOF
ls -la /tmp/workspace/THYROID_LIPID_images/ && ls -la /tmp/workspace/JUNE_2026_images/
python3 << 'EOF' from PIL import Image import os # Combine thyroid/lipid pages 1-3 into one tall image def combine_images(image_paths, output_path): imgs = [Image.open(p) for p in image_paths] # Scale all to same width target_width = max(img.width for img in imgs) resized = [] for img in imgs: ratio = target_width / img.width new_h = int(img.height * ratio) resized.append(img.resize((target_width, new_h), Image.LANCZOS)) total_height = sum(img.height for img in resized) combined = Image.new('RGB', (target_width, total_height), (255, 255, 255)) y = 0 for img in resized: combined.paste(img, (0, y)) y += img.height combined.save(output_path, 'JPEG', quality=85) print(f"Saved {output_path} ({os.path.getsize(output_path)} bytes)") # Thyroid/Lipid: 6 pages -> 2 groups of 3 thyroid_dir = "/tmp/workspace/THYROID_LIPID_images" combine_images( [f"{thyroid_dir}/page{i}_img1.jpg" for i in range(1, 4)], "/tmp/workspace/thyroid_p1to3.jpg" ) combine_images( [f"{thyroid_dir}/page{i}_img1.jpg" for i in range(4, 7)], "/tmp/workspace/thyroid_p4to6.jpg" ) # June 2026: 4 pages -> 2 groups of 2 june_dir = "/tmp/workspace/JUNE_2026_images" combine_images( [f"{june_dir}/page{i}_img1.jpg" for i in range(1, 3)], "/tmp/workspace/june_p1to2.jpg" ) combine_images( [f"{june_dir}/page{i}_img1.jpg" for i in range(3, 5)], "/tmp/workspace/june_p3to4.jpg" ) EOF
python3 << 'EOF' from PIL import Image import os files = [ "/tmp/workspace/thyroid_p1to3.jpg", "/tmp/workspace/thyroid_p4to6.jpg", "/tmp/workspace/june_p1to2.jpg", "/tmp/workspace/june_p3to4.jpg" ] for f in files: img = Image.open(f) # Resize to max width 1600 if img.width > 1600: ratio = 1600 / img.width new_size = (1600, int(img.height * ratio)) img = img.resize(new_size, Image.LANCZOS) img.save(f, 'JPEG', quality=70) size = os.path.getsize(f) print(f"{f}: {img.size}, {size/1024:.0f} KB") EOF
| Parameter | Result | Reference Range | Status |
|---|---|---|---|
| Haemoglobin | 11.50 g/dL | 12–15 | ⬇ LOW |
| PCV/Haematocrit | 34.4% | 36–46 | ⬇ LOW |
| RBC Count | 4.41 M/cu.mm | 3.8–4.8 | Normal |
| MCV | 78.0 fL | 83–101 | ⬇ LOW (microcytic) |
| MCH | 26.1 pg | 27–32 | ⬇ LOW |
| MCHC | 33.5 g/dL | 31.5–34.5 | Normal |
| RDW-CV | 19.7% | 11.6–14 | ⬆ HIGH (anisocytosis) |
| TLC | 7,290 cells/cu.mm | 4,000–10,000 | Normal |
| Neutrophils | 59.4% | 40–80 | Normal |
| Lymphocytes | 33.2% | 20–40 | Normal |
| Platelet Count | 3,96,000 /cu.mm | 1,50,000–4,10,000 | Normal |
| MPV | 7.8 fL | 7.4–12.0 | Normal |
| ESR | 5 mm | 0–15 | Normal |
| PBS | Normocytic normochromic with anisocytosis, microcytes, polychromatic cells | — | — |
| Parameter | Result | Reference Range | Status |
|---|---|---|---|
| Haemoglobin | 11.0 g/dL | 12–15 | ⬇ LOW |
| RBC | 4.58 x10⁶/µL | 3.8–4.8 | Normal |
| HCT | 36.2% | 31–46 | Normal |
| MCV | 79.0 fL | 83–101 | ⬇ LOW |
| MCH | 24.0 pg | 27–32 | ⬇ LOW |
| MCHC | 30.4 g/dL | 31.5–34.5 | ⬇ LOW |
| RDW CV | 19.0% | 11.6–14 | ⬆ HIGH |
| TLC | 8.53 x10³/µL | 4–10 | Normal |
| Platelet | 421 x10³/µL | 150–450 | Normal |
| MPV | 8.1 fL | 8–11 | Normal |
| Parameter | Result | Reference Range | Status |
|---|---|---|---|
| WBC | 8.61 x10³/µL | 4.0–11.0 | Normal |
| RBC | 4.73 x10⁶/µL | 3.5–5.5 | Normal |
| HGB | 10.9 g/dL | 11.0–15.5 | ⬇ LOW (borderline) |
| HCT | 36.4% | 37.0–50.0 | ⬇ LOW (borderline) |
| MCV | 77.0 fL | 76.0–96.0 | Low-normal |
| MCH | 23.0 pg | 27.0–32.0 | ⬇ LOW |
| MCHC | 29.9 g/dL | 30.0–35.0 | ⬇ LOW |
| PLT | 454 x10³/µL | 150–400 | ⬆ mildly elevated |
| RDW-CV | 16.0% | 11.5–14.0 | ⬆ HIGH |
| Neutrophils | 59.9% | 40–75 | Normal |
| Lymphocytes | 32.3% | 20–45 | Normal |
| ESR | 129 mm/hr | — | ⬆⬆ MARKEDLY HIGH |
| Test | Result | Reference | Status |
|---|---|---|---|
| ESR | 5 mm | 0–15 mm | Normal |
| CRP (Quantitative) | 8.70 mg/L | <10.0 | Normal (upper limit) |
Note: ESR was markedly elevated at 129 mm/hr in the June 2026 AIIMS Deoghar report, which has come down significantly to 5 mm by July 2026.
| Test | Result | Reference | Status |
|---|---|---|---|
| HLA B-27 (PCR) | POSITIVE | Negative | ⬆ POSITIVE |
| ANA IFA | Moderate Positive (++) | Negative | ⬆ POSITIVE |
| ANA Fluorescence Pattern | Speckled | — | — |
| ANA Estimated Titer | 1:320 | — | Moderate positive |
| Anti-CCP | <0.5 U/mL | <5.0 = Negative | Normal (Negative) |
| Rheumatoid Factor (RF) | 9.60 IU/mL | <12 | Normal (Negative) |
| Test | Result | Reference | Status |
|---|---|---|---|
| Total T3 | 116 ng/dL | 70–204 | Normal |
| Total T4 | 5.23 µg/dL | 5.5–11.0 | ⬇ LOW (borderline) |
| TSH | 6.84 mIU/L | 0.4–4.2 | ⬆ HIGH (Hypothyroidism) |
| Test | Result | Reference | Status |
|---|---|---|---|
| Anti-TPO | 48.43 IU/mL | <34 | ⬆ HIGH (positive) |
TSH elevated + Anti-TPO elevated = consistent with Hashimoto's thyroiditis / autoimmune hypothyroidism.
| Test | Result | Reference | Status |
|---|---|---|---|
| Total Cholesterol | 196 mg/dL | 0–200 | Normal (borderline) |
| VLDL Cholesterol | 64 mg/dL | 2–30 | ⬆ HIGH |
| Triglycerides | 322 mg/dL | 40–160 | ⬆⬆ HIGH |
| HDL Cholesterol | 34 mg/dL | 35.3–79.5 | ⬇ LOW |
| LDL Cholesterol | 98 mg/dL | 0–100 | Normal (borderline) |
| Test | Result | Reference | Status |
|---|---|---|---|
| Total Cholesterol | 225 mg/dL | 0–200 | ⬆ HIGH |
| VLDL Cholesterol | 96 mg/dL | 2–30 | ⬆⬆ HIGH |
| Triglycerides | 478 mg/dL | 40–160 | ⬆⬆⬆ VERY HIGH |
| HDL Cholesterol | 38 mg/dL | 35.3–79.5 | ⬇ LOW-normal |
| LDL Cholesterol | 91 mg/dL | 0–100 | Normal |
Triglycerides have improved from 478 (June) to 322 (July) but remain significantly elevated. This degree of hypertriglyceridaemia, combined with low HDL, is a significant cardiovascular and pancreatitis risk.
| Test | Result | Reference | Status |
|---|---|---|---|
| HbA1c (Jul-2026, Lupin) | 5.70% | <5.7% Normal | Borderline (at the pre-diabetic threshold) |
| Estimated Average Glucose | 116.89 mg/dL | — | — |
| Random Blood Sugar | 81 mg/dL | 70–140 | Normal |
| HbA1c (Jun-2026, AIIMS Deoghar) | 5.4% | 4.0–6.0% | Normal |
| Test | Result | Reference | Status |
|---|---|---|---|
| Vitamin D (25-OH) | 46.98 ng/mL | >30 | Normal (adequate) |
| Serum Iron | 31 µg/dL | 65–175 | ⬇⬇ VERY LOW |
| Vitamin B12 | 803.7 pg/mL | 197–771 | ⬆ mildly elevated (supplementation?) |
| Calcium (Jul-2026) | 8.7 mg/dL | 8.4–10.2 | Normal |
| Uric Acid | 6.50 mg/dL | 2.5–6.2 | ⬆ HIGH (hyperuricaemia) |
| Test | Result | Reference | Status |
|---|---|---|---|
| Ferritin | 10 ng/mL | 20–250 | ⬇⬇ VERY LOW (Iron deficiency) |
| Calcium | 8.8 mg/dL | — | Normal |
| Test | Result | Reference | Status |
|---|---|---|---|
| PT | 14.00 sec | 9.7–11.9 | ⬆ Mildly prolonged |
| INR | 1.35 | — | Mildly elevated |
| APTT | 27.90 sec | 19.5–31.1 | Normal |
| # | Finding | Significance |
|---|---|---|
| 1 | HLA-B27 POSITIVE | Strongly associated with Ankylosing Spondylitis, reactive arthritis, psoriatic arthritis, uveitis |
| 2 | ANA Positive (Speckled, 1:320) | Suggests systemic autoimmune disease - SLE, MCTD, Sjögren's, overlap syndromes. Needs further specific antibody testing (anti-dsDNA, anti-Sm, anti-Ro/La, anti-U1RNP) |
| 3 | TSH elevated (6.84) + Anti-TPO high (48.43) | Autoimmune hypothyroidism (Hashimoto's thyroiditis) - likely needs thyroid hormone replacement |
| 4 | Microcytic hypochromic anaemia | Hb 10.9–11.5 g/dL, low MCV, low MCH, very low serum iron (31), very low ferritin (10) = Iron deficiency anaemia |
| 5 | Very high ESR (129) in June → normalised (5) in July | Active inflammation in June, apparently resolved or treated |
| 6 | Severe hypertriglyceridaemia | TG 478 (June) → 322 (July). At 478, risk of pancreatitis. Combined with low HDL - metabolic syndrome pattern |
| 7 | Serum Iron 31 µg/dL + Ferritin 10 ng/mL | Clear iron deficiency - needs iron supplementation |
| 8 | Uric Acid 6.50 mg/dL (above female ref 2.5–6.2) | Hyperuricaemia - watch for gout, kidney stones |
| 9 | RF Negative, Anti-CCP Negative | Rheumatoid arthritis less likely despite joint symptoms |
| 10 | PT/INR mildly prolonged (1.35) | Needs clinical correlation - could be related to underlying disease |
Important disclaimer: This is an informational summary of lab results. All clinical decisions, diagnoses, and treatment plans should be made by Dr. Sudha's treating physicians at AIIMS Deoghar, who have full access to clinical history and examination findings.