| Time Point | Plasma Glucose |
|---|---|
| Fasting | < 100 mg/dL (< 5.6 mmol/L) |
| 1 hour | < 180 mg/dL |
| 2 hours | < 140 mg/dL (< 7.8 mmol/L) |
| Time Point | Plasma Glucose |
|---|---|
| Fasting | ≥ 126 mg/dL (≥ 7.0 mmol/L) |
| 2 hours | ≥ 200 mg/dL (≥ 11.1 mmol/L) |
| Test | Result |
|---|---|
| Blood glucose (fasting) | Normal (< 100 mg/dL) |
| Oral GTT curve | Normal (glucose returns to baseline in 2h) |
| Urine glucose | Positive (glycosuria present) |
| Urine ketones | Absent |
| Time Point | Result |
|---|---|
| Fasting | ≥ 126 mg/dL |
| 1h | > 200 mg/dL |
| 2h | ≥ 200 mg/dL |
| Parameter | Result |
|---|---|
| Blood glucose | Low-normal (60-80 mg/dL) |
| Serum ketones | Mildly elevated (β-hydroxybutyrate + acetoacetate) |
| Urine ketones | Positive |
| Anion gap | Mildly elevated (mild anion gap metabolic acidosis) |
| pH | Normal to slightly decreased (7.35-7.4) |
| HCO₃⁻ | Slightly decreased |
| Insulin | Very low |
| Glucagon | Elevated |
| Parameter | Result |
|---|---|
| Blood glucose | > 250 mg/dL (often > 400 mg/dL) |
| pH | < 7.30 (severe: < 7.1) |
| HCO₃⁻ | < 18 mEq/L (severe: < 10) |
| pCO₂ | Low (compensatory respiratory alkalosis / Kussmaul breathing) |
| Anion gap | High (> 12 mEq/L) |
| Serum ketones | Strongly positive |
| Urine glucose + ketones | Both positive |
| Serum K⁺ | Initially elevated (acidosis shifts K⁺ out of cells), falls with treatment |
| Serum Na⁺ | Low or normal |
| Parameter | Normal Value |
|---|---|
| pH | 7.35 - 7.45 |
| pCO₂ | 35 - 45 mmHg |
| HCO₃⁻ | 22 - 26 mEq/L |
| pO₂ | 80 - 100 mmHg |
| Base excess | -2 to +2 mEq/L |
| Anion gap | 8-12 mEq/L |
| Parameter | Result |
|---|---|
| pH | < 7.35 |
| HCO₃⁻ | < 22 mEq/L (primary decrease) |
| pCO₂ | Low (compensatory hyperventilation; ΔpCO₂ = ΔHCO₃⁻ × 1.2) |
| Anion gap | High (DKA, uremia, lactic acidosis) OR Normal (diarrhea, RTA) |
| Parameter | Result |
|---|---|
| pH | > 7.45 |
| HCO₃⁻ | > 26 mEq/L (primary increase) |
| pCO₂ | High (compensatory hypoventilation; ΔpCO₂ = ΔHCO₃⁻ × 0.7 ± 5) |
| Cl⁻ | Low (saline-responsive) |
| K⁺ | Often low |
| Parameter | Result |
|---|---|
| pH | < 7.35 |
| pCO₂ | > 45 mmHg (primary increase) |
| HCO₃⁻ | Elevated (renal compensation) |
| Acute compensation | ΔHCO₃⁻ = ΔpCO₂ × 0.07 ± 1.5 |
| Chronic compensation | ΔHCO₃⁻ = ΔpCO₂ × 0.4 ± 3 |
| Parameter | Result |
|---|---|
| pH | > 7.45 |
| pCO₂ | < 35 mmHg (primary decrease) |
| HCO₃⁻ | Decreased (renal compensation) |
| Acute compensation | ΔHCO₃⁻ = ΔpCO₂ × 0.2 ± 2.5 |
| Chronic compensation | ΔHCO₃⁻ = ΔpCO₂ × 0.5 ± 2.5 |
| Parameter | Result |
|---|---|
| Serum albumin | Markedly low (< 2.8 g/dL; normal 3.5-5.5 g/dL) |
| Total protein | Low |
| Serum glucose | Low-normal |
| Urine urea | Low (protein catabolism reduced) |
| Hemoglobin | Low (anemia) |
| Edema | Present (pitting edema, ascites, "potbelly") |
| Fatty liver | Elevated liver enzymes, fatty change on biopsy |
| Parameter | Result |
|---|---|
| Serum albumin | Low (< 3.0 g/dL) |
| Total protein | Low |
| Plasma oncotic pressure | Reduced |
| Test | Normal Value |
|---|---|
| Total bilirubin | 0.3 - 1.2 mg/dL |
| Direct (conjugated) bilirubin | 0 - 0.3 mg/dL |
| Indirect (unconjugated) bilirubin | 0.2 - 0.8 mg/dL |
| ALT (SGPT) | 7 - 40 U/L |
| AST (SGOT) | 10 - 40 U/L |
| ALP | 44 - 147 U/L |
| GGT | 5 - 40 U/L |
| Total protein | 6.4 - 8.3 g/dL |
| Albumin | 3.5 - 5.5 g/dL |
| PT/INR | Normal |
| Parameter | Result |
|---|---|
| Total bilirubin | Elevated |
| Indirect (unconjugated) bilirubin | Markedly elevated |
| Direct (conjugated) bilirubin | Normal/slightly elevated |
| Urine bilirubin | Absent (unconjugated is not water-soluble) |
| Urine urobilinogen | Markedly increased |
| Stool color | Dark (increased stercobilin) |
| ALT/AST | Normal |
| Haptoglobin | Low (consumed by free Hb) |
| LDH | Elevated |
| Reticulocyte count | Elevated |
| Parameter | Result |
|---|---|
| Total bilirubin | Elevated |
| Direct (conjugated) bilirubin | Markedly elevated |
| Urine bilirubin | Positive (conjugated is water-soluble → dark urine) |
| Urine urobilinogen | Absent (bile cannot reach gut) |
| Stool color | Pale/clay-colored (no stercobilin reaching gut) |
| ALP | Markedly elevated |
| GGT | Elevated |
| ALT/AST | Mildly elevated |
| PT | Prolonged (fat-soluble vitamin K malabsorption) |
| Parameter | Result |
|---|---|
| Total bilirubin | Elevated |
| Both direct & indirect bilirubin | Elevated (mixed) |
| ALT/AST | Markedly elevated (hepatocyte destruction) |
| ALP | Mildly-moderately elevated |
| Urine bilirubin | Present (conjugated leaks) |
| Urine urobilinogen | Variable (may be increased early, absent later) |
| Albumin | Low (chronic liver disease) |
| PT | Prolonged |
| Test | Normal Value |
|---|---|
| Serum creatinine | 0.6 - 1.2 mg/dL (males); 0.5 - 1.1 mg/dL (females) |
| Blood urea nitrogen (BUN) | 7 - 20 mg/dL |
| BUN:Creatinine ratio | 10:1 to 20:1 |
| eGFR | > 90 mL/min/1.73 m² |
| Urine protein | < 150 mg/day |
| Urine protein (dipstick) | Negative |
| Urine RBCs | 0-2/hpf |
| Serum K⁺ | 3.5 - 5.0 mEq/L |
| Serum Na⁺ | 136 - 145 mEq/L |
| Urine specific gravity | 1.010 - 1.030 |
| Parameter | Result |
|---|---|
| Urine color | Smoky brown / cola-colored ("hematuria") |
| Urine RBCs | Numerous + RBC casts (pathognomonic) |
| Urine protein | Moderate proteinuria (1-3 g/day) |
| Urine WBCs | Present |
| Serum creatinine | Elevated |
| BUN | Elevated |
| eGFR | Reduced |
| Serum C3 (complement) | Low (consumed in immune complex deposition) |
| ASLO titer | Elevated (post-streptococcal GN) |
| BP | Hypertension |
| Serum albumin | Normal or slightly low |
| Edema | Periorbital edema (especially morning) |
| Parameter | Result |
|---|---|
| Urine protein | > 3.5 g/day (massive proteinuria - defining feature) |
| Serum albumin | < 3.0 g/dL (hypoalbuminemia) |
| Serum cholesterol | > 200 mg/dL (hyperlipidemia) |
| Urine lipids | Lipiduria ("oval fat bodies," "Maltese cross" under polarized light) |
| Edema | Severe (periorbital, peripheral, ascites) |
| Urine RBCs | Minimal (no hematuria usually) |
| Urine RBC casts | Absent |
| Serum creatinine | Normal early; may be elevated later |
| Complement | Normal (in minimal change disease) |
| Parameter | Result | Time of Rise |
|---|---|---|
| Troponin I / Troponin T | Elevated | Rises 3-6h, peaks 12-24h, stays elevated 7-14 days |
| CK-MB | Elevated | Rises 4-6h, peaks 18-24h, normalizes 48-72h |
| LDH (LD1 > LD2) | Elevated | Rises 24-48h, peaks 3-6 days |
| Myoglobin | Elevated early | Rises 1-3h (earliest, but non-specific) |
| AST | Moderately elevated | |
| WBC | Elevated (inflammatory response) | |
| ESR | Elevated | |
| ECG | ST elevation (STEMI) or ST depression (NSTEMI) |
| Parameter | Result |
|---|---|
| TSH | Markedly elevated (primary hypothyroidism) |
| Free T4 (FT4) | Low |
| Free T3 | Low |
| Total T4 | Low |
| Serum cholesterol | Elevated (hypercholesterolemia) |
| LDL | Elevated |
| Triglycerides | Elevated |
| Serum creatinine | May be mildly elevated |
| CK | May be elevated (myopathy) |
| Hemoglobin | May be low (anemia) |
| Serum Na⁺ | May be low (SIADH-like) |
| TSH (secondary hypothyroidism) | Low or normal (pituitary problem) |
| Parameter | Result |
|---|---|
| Serum amylase | > 3× upper limit of normal (rises within 2-12h, normalizes 3-5 days) |
| Serum lipase | > 3× upper limit of normal (more specific; stays elevated longer - up to 14 days) |
| WBC | Elevated (12,000-20,000/μL) |
| Serum glucose | Elevated (glucagon release, reduced insulin) |
| Serum calcium | Low (saponification of fat; hypocalcemia is a poor prognostic sign) |
| Serum LDH | Elevated |
| ALT | Elevated (if gallstone-related) |
| Urine amylase | Elevated |
| Hematocrit | Elevated (hemoconcentration) |
| BUN | Elevated (pre-renal) |
| Serum triglycerides | May be elevated (cause or effect) |
| # | Case | Key Diagnostic Feature |
|---|---|---|
| 1 | Normal GTT | Fasting < 100, 2h < 140 mg/dL |
| 2 | Type II DM | Fasting ≥ 126, 2h ≥ 200 mg/dL |
| 3 | Renal glycosuria | Normal blood glucose + urine glucose positive |
| 4 | Abnormal GTT-DM | High fasting, exaggerated peak, sustained 2h |
| 5-7 | GTT Graphs | Curve shapes distinguishing normal/DM/renal |
| 8 | Starvation ketosis | Mild ketonemia, low glucose, no severe acidosis |
| 9 | DKA | Glucose > 250, pH < 7.3, high AG, ketonemia |
| 10 | Normal acid-base | pH 7.35-7.45, pCO₂ 35-45, HCO₃⁻ 22-26 |
| 11 | Metabolic acidosis | ↓pH, ↓HCO₃⁻, ↓pCO₂ (compensation) |
| 12 | Metabolic alkalosis | ↑pH, ↑HCO₃⁻, ↑pCO₂ (compensation) |
| 13 | Respiratory acidosis | ↓pH, ↑pCO₂, ↑HCO₃⁻ (compensation) |
| 14 | Respiratory alkalosis | ↑pH, ↓pCO₂, ↓HCO₃⁻ (compensation) |
| 15 | Kwashiorkor | Very low albumin, edema, fatty liver |
| 16 | Normal LFT | All values within normal range |
| 17 | Edema | Low albumin → low oncotic pressure |
| 18 | Hemolytic jaundice | ↑Indirect bilirubin, no urine bilirubin, ↑urobilinogen |
| 19 | Obstructive jaundice | ↑Direct bilirubin, pale stools, ↑ALP, dark urine |
| 20 | Hepatic jaundice | Mixed bilirubin, markedly ↑ALT/AST |
| 21 | Normal renal function | Creatinine 0.6-1.2, BUN 7-20, eGFR > 90 |
| 22 | Acute GN | Hematuria + RBC casts + proteinuria + ↓C3 |
| 23 | Nephrotic syndrome | > 3.5g/day protein, ↓albumin, ↑cholesterol, edema |
| 24 | MI | ↑Troponin (gold standard), ↑CK-MB |
| 25 | Hypothyroidism | ↑TSH, ↓FT4, ↑cholesterol |
| 26 | Acute pancreatitis | ↑Lipase/Amylase > 3×, ↓Ca²⁺ |
| Parameter | Result |
|---|---|
| Blood galactose | Markedly elevated |
| Urine reducing substances | Positive (galactose - non-glucose reducing sugar) |
| Urine glucose (specific) | Negative (reducing substance is galactose, NOT glucose) |
| Blood glucose | Low (hypoglycemia) |
| Liver enzymes (ALT, AST) | Elevated (hepatotoxicity from galactose-1-phosphate accumulation) |
| Bilirubin | Elevated (jaundice) |
| Coagulation (PT) | Prolonged (liver failure) |
| Serum albumin | Low |
| Urine amino acids | Positive (Fanconi syndrome - renal tubular damage) |
| Newborn screen | Elevated blood galactose-1-phosphate |
| Parameter | Result |
|---|---|
| Blood fructose | Elevated after fructose ingestion |
| Blood glucose | Markedly low (severe hypoglycemia) after fructose intake |
| Urine reducing substances | Positive (fructosuria) after fructose ingestion |
| Liver enzymes (ALT/AST) | Elevated |
| Serum phosphate | Low (fructose-1-phosphate traps inorganic phosphate) |
| Uric acid | Elevated (ATP depletion inhibits xanthine oxidase regulation) |
| Coagulation | Prolonged (liver dysfunction) |
| Urine amino acids/glucose | Positive (Fanconi syndrome) |
| Parameter | Result |
|---|---|
| Hydrogen breath test | Positive (> 20 ppm rise after lactose load) - gold standard |
| Lactose tolerance test | Blood glucose rise < 20 mg/dL after 50g lactose (flat curve) |
| Stool pH | Low (< 5.5) (bacterial fermentation of unabsorbed lactose) |
| Stool reducing substances | Positive |
| Urine lactose | May be present (osmotic spillage) |
| Serum glucose | Flat/minimal rise after lactose challenge |
| Jejunal biopsy | Absent/markedly reduced lactase enzyme activity |
| Parameter | Result |
|---|---|
| Serum phenylalanine | Markedly elevated (> 20 mg/dL; normal < 2 mg/dL) |
| Serum tyrosine | Low |
| Urine phenylpyruvate | Positive (phenylketones) |
| Urine phenylacetate | Positive |
| Urine phenyllactate | Positive |
| FeCl₃ test (urine) | Green color (classic bedside test for phenylpyruvic acid) |
| Guthrie test (newborn screen) | Elevated blood phenylalanine on filter paper |
| Urinary phenylpyruvic acid | Musty/mousy odor to urine |
| Neurotransmitters | Reduced serotonin, dopamine (phenylalanine competes for transport) |
| Hair/skin pigment | Reduced melanin → fair skin, blue eyes, blonde hair |
| Parameter | Result |
|---|---|
| Urine homogentisic acid | Markedly elevated (diagnostic) |
| Urine color | Turns dark brown/black on standing (alkaline conditions or exposure to air) |
| FeCl₃ test (urine) | Dark color (homogentisic acid) |
| Urine Benedict's test | Positive (reducing substance) |
| Serum homogentisic acid | Elevated |
| Joint X-ray (late) | Ochronotic arthropathy (calcified intervertebral discs) |
| Sclera/cartilage | Blue-black pigmentation (ochronosis) in adults |
| Parameter | Result |
|---|---|
| Serum calcium (Ca²⁺) | Low (hypocalcemia) |
| Serum phosphate | Low (hypophosphatemia) |
| Serum ALP | Markedly elevated (increased osteoblast activity) |
| Serum PTH | Elevated (secondary hyperparathyroidism) |
| 25-OH Vitamin D | Low (< 20 ng/mL = deficiency) |
| 1,25-(OH)₂ Vitamin D | Low |
| Urine calcium | Low |
| Urine phosphate | Elevated (PTH effect) |
| X-ray findings | Widening/fraying of metaphyses, cupping, "rachitic rosary" |
| Parameter | Result |
|---|---|
| Urine riboflavin | Low (< 30 μg/day) |
| Erythrocyte glutathione reductase activity coefficient (EGR-AC) | Elevated (> 1.2 = deficiency; gold standard functional test) |
| Plasma riboflavin | Low (< 3 μg/dL) |
| Serum FAD (flavin adenine dinucleotide) | Low |
| CBC | Normocytic anemia (often coexists with iron deficiency) |
| Parameter | Result |
|---|---|
| Urine N-methylnicotinamide | Low (< 1.6 mg/day; major excretion product of niacin) |
| Urine 2-pyridone:N-methylnicotinamide ratio | Altered |
| Plasma niacin/NAD | Low |
| Tryptophan levels | Low (tryptophan is a niacin precursor - 60 mg Trp → 1 mg niacin) |
| Blood count | May show anemia |
| Parameter | Result |
|---|---|
| Serum vitamin B₁₂ | Low (< 200 pg/mL; normal 200-900 pg/mL) |
| MCV | Elevated (> 100 fL) - macrocytosis |
| Blood smear | Hypersegmented neutrophils (≥ 5 lobes) + macro-ovalocytes |
| Hemoglobin | Low (megaloblastic anemia) |
| Serum methylmalonic acid (MMA) | Elevated (specific for B₁₂ deficiency) |
| Plasma homocysteine | Elevated (elevated in both B₁₂ AND folate deficiency) |
| Serum folate | Normal (differentiates from folate deficiency) |
| Intrinsic factor antibodies | Positive in pernicious anemia |
| Schilling test | Abnormal in pernicious anemia (corrected with IF) |
| Reticulocyte count | Low (ineffective erythropoiesis) |
| Serum LDH | Elevated (intramedullary hemolysis) |
| Serum bilirubin | Mildly elevated |
| Parameter | Result |
|---|---|
| Serum/plasma ascorbic acid | Low (< 0.2 mg/dL; normal 0.4-2.0 mg/dL) |
| Leukocyte ascorbic acid | Low (more sensitive than plasma) |
| Capillary fragility test | Abnormal (positive Rumpel-Leede test) |
| Hemoglobin | Low (anemia - iron malabsorption + bleeding) |
| Prothrombin time | Usually normal |
| X-ray (children) | Trümmerfeld zone (zone of rarefaction at metaphysis), Pelkan spurs |
| Parameter | Result |
|---|---|
| Serum ceruloplasmin | Low (< 20 mg/dL; normal 20-40 mg/dL) - hallmark |
| 24-hr urine copper | Elevated (> 100 μg/day; normal < 40 μg/day) |
| Serum total copper | Low (most copper normally bound to ceruloplasmin) |
| Serum free (non-ceruloplasmin) copper | Elevated |
| Liver copper (biopsy) | > 250 μg/g dry weight (> 4× normal; diagnostic) |
| Liver enzymes (ALT/AST) | Elevated |
| Coombs-negative hemolytic anemia | Present (copper-induced RBC lysis) |
| Kayser-Fleischer rings | Greenish-brown rings in Descemet's membrane of cornea (slit-lamp exam) |
| Serum uric acid | Low (renal tubular copper damage → Fanconi syndrome) |
| Urine amino acids/glucose | Positive (Fanconi syndrome) |
| Parameter | Result |
|---|---|
| Hemoglobin | Low (< 12 g/dL women; < 13.5 g/dL men) |
| MCV | Low (< 80 fL) - microcytic |
| MCH | Low (< 27 pg) - hypochromic |
| MCHC | Low (< 30%) |
| Serum iron | Low (< 30 μg/dL) |
| TIBC (transferrin) | Elevated (> 400 μg/dL) |
| Transferrin saturation | Low (< 15%) |
| Serum ferritin | Low (< 12 μg/L) - most sensitive early marker |
| Reticulocyte count | Low (inadequate production) |
| Blood smear | Microcytic, hypochromic RBCs, pencil cells, anisocytosis, poikilocytosis |
| RDW | Elevated (> 14.5%) - anisocytosis |
| Bone marrow | Absent iron stores (Prussian blue stain negative) |
| Parameter | Result |
|---|---|
| Hemoglobin | Low (6-9 g/dL) |
| Blood smear | Sickle-shaped RBCs, target cells, Howell-Jolly bodies |
| Hemoglobin electrophoresis | HbS: 85-95%; HbF: 2-20%; HbA: absent (in HbSS) |
| Sickle solubility test (Sickledex) | Positive |
| MCV | Normal (normocytic) |
| Reticulocyte count | Elevated (5-15%; compensatory) |
| WBC | Elevated |
| Bilirubin (indirect) | Elevated (hemolysis) |
| LDH | Elevated |
| Haptoglobin | Low |
| Urine urobilinogen | Elevated |
| HPLC | Quantifies HbS, HbF, HbA percentages (gold standard) |
| Parameter | Beta-thalassemia Major (Cooley's Anemia) | Beta-thalassemia Minor (Trait) |
|---|---|---|
| Hemoglobin | Very low (2-7 g/dL) | Mildly low or normal |
| MCV | Very low (< 70 fL) | Low (60-75 fL) |
| Blood smear | Microcytic, hypochromic + target cells + nucleated RBCs | Microcytic, hypochromic, target cells |
| HbA₂ (electrophoresis) | Elevated or variable | Elevated (> 3.5%) - hallmark of trait |
| HbF | Markedly elevated (> 30%) in major | Normal to slightly elevated |
| HbA | Absent (β⁰/β⁰) or reduced (β⁺) | Normal |
| Serum iron | Elevated (hemolysis + transfusions) | Normal |
| Ferritin | Elevated | Normal |
| RDW | Elevated | Normal to mildly elevated |
| Reticulocyte count | Elevated | Normal/mildly elevated |
| Parameter | Result |
|---|---|
| Serum uric acid | Elevated (> 6.8 mg/dL; typically > 8-10 mg/dL during attack) |
| Synovial fluid analysis | Negatively birefringent needle-shaped urate crystals (yellow when parallel to compensator axis) |
| Synovial WBC | 10,000-100,000/μL (predominantly neutrophils) |
| ESR | Elevated |
| CRP | Elevated |
| WBC | Elevated |
| Serum creatinine | May be elevated (urate nephropathy) |
| 24-hr urine uric acid | Elevated (overproducers > 800 mg/day) or normal (underexcreters) |
| X-ray (chronic gout) | "Punched-out" lytic lesions with overhanging edges; tophi |
| Band | Protein | Normal % | Normal g/dL |
|---|---|---|---|
| Albumin | Albumin | 55-65% | 3.5-5.0 |
| α₁ | α₁-antitrypsin, α₁-acid glycoprotein | 2-4% | 0.1-0.4 |
| α₂ | Haptoglobin, α₂-macroglobulin, ceruloplasmin | 6-12% | 0.4-0.8 |
| β | Transferrin, C3, fibrinogen (in plasma) | 9-15% | 0.5-1.0 |
| γ | IgG, IgA, IgM, IgD, IgE | 11-21% | 0.6-1.6 |
| Band | Change | Reason |
|---|---|---|
| Albumin | Markedly decreased | Heavy urinary loss (> 3.5 g/day) |
| α₁ globulin | Decreased | Small proteins lost in urine |
| α₂ globulin | Markedly increased | α₂-macroglobulin (large, retained) + increased synthesis |
| β globulin | Increased | Increased lipoprotein synthesis (compensatory) |
| γ globulin | Decreased | Urinary loss of IgG |
| Total protein | Low |
| Band | Change | Reason |
|---|---|---|
| Albumin | Decreased | Reduced hepatic synthesis |
| α₁ globulin | Decreased | Reduced hepatic synthesis |
| α₂ globulin | Decreased | Reduced hepatic synthesis |
| β globulin | Slightly increased | |
| γ globulin | Diffusely elevated | Polyclonal increase (reduced hepatic clearance of gut antigens) |
| β-γ bridging | Present | HALLMARK - IgA merges with β band (β-γ fusion/bridge) |
| Band | Change | Reason |
|---|---|---|
| Albumin | Normal to mildly decreased | |
| α₁, α₂ globulins | Normal or decreased | |
| β globulin | Normal or decreased | |
| γ globulin | Tall, narrow, sharp "M spike" (monoclonal band) | Single clone of plasma cells producing one identical Ig |
| Total protein | Often elevated |
| # | Case | Defect | Single Most Diagnostic Finding |
|---|---|---|---|
| 1 | Galactosemia | Galactose-1-P uridyl transferase ↓ | Urine reducing substance positive (non-glucose) + jaundice |
| 2 | Hereditary Fructose Intolerance | Aldolase B ↓ | Hypoglycemia + ↓phosphate after fructose |
| 3 | Lactose Intolerance | Lactase ↓ | Positive H₂ breath test + flat lactose tolerance curve |
| 4 | Phenylketonuria | Phenylalanine hydroxylase ↓ | ↑Serum phenylalanine + green FeCl₃ urine test |
| 5 | Alkaptonuria | Homogentisate oxidase ↓ | Urine darkens on standing |
| 6 | Rickets | Vitamin D deficiency | ↓Ca, ↓PO₄, ↑ALP, ↑PTH |
| 7 | Riboflavin deficiency | Vitamin B₂ ↓ | ↑EGR-AC ratio + angular cheilitis |
| 8 | Pellagra | Niacin/tryptophan ↓ | ↓Urine N-methylnicotinamide + "4 Ds" |
| 9 | Vitamin B₁₂ deficiency | Cobalamin ↓ | ↑MCV + hypersegmented neutrophils + ↑MMA |
| 10 | Vitamin C deficiency | Ascorbic acid ↓ | ↓Serum ascorbate + capillary fragility |
| 11 | Wilson disease | ATP7B mutation | ↓Ceruloplasmin + ↑24h urine copper + KF rings |
| 12 | Iron deficiency anemia | Iron ↓ | ↓Ferritin + ↓MCV + ↑TIBC |
| 13 | Sickle cell anemia | HbS (β6 Glu→Val) | HbS on electrophoresis + sickle cells |
| 14 | Beta-thalassemia | β-globin synthesis ↓ | ↑HbA₂ (trait) or ↑HbF (major) + microcytosis |
| 15 | Acute gout | Urate crystal deposition | ↑Serum uric acid + negatively birefringent crystals |
| 16 | Normal electrophoretogram | - | Tall albumin + normal gradual globulin bands |
| 17 | Nephrotic syndrome SPE | - | ↓Albumin + ↑α₂ + ↓γ |
| 18 | Cirrhosis SPE | - | ↓Albumin + β-γ bridging |
| 19 | Multiple myeloma SPE | - | Sharp "M spike" in γ region |
Create a PDF reference card comparing all 19 minor case labs
ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/mino…
~/minor-cases-pdf/build_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/minor-cases-pdf/Minor_Cases_Reference_Card.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3557")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT = colors.HexColor("#0ea5e9")
ROW_ALT = colors.HexColor("#f0f7ff")
ROW_WHITE = colors.white
RED_HIGH = colors.HexColor("#fee2e2")
GREEN_HIGH = colors.HexColor("#d1fae5")
YELLOW_HIGH = colors.HexColor("#fef9c3")
HEADER_TEXT = colors.white
BODY_TEXT = colors.HexColor("#1e293b")
GREY_LIGHT = colors.HexColor("#e2e8f0")
ORANGE = colors.HexColor("#f97316")
PAGE_W, PAGE_H = landscape(A4)
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
leftMargin=1.2*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
styles = getSampleStyleSheet()
# Custom paragraph styles
title_style = ParagraphStyle(
"Title", parent=styles["Normal"],
fontSize=18, fontName="Helvetica-Bold",
textColor=DARK_BLUE, alignment=TA_CENTER, spaceAfter=2
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=9, fontName="Helvetica",
textColor=MED_BLUE, alignment=TA_CENTER, spaceAfter=8
)
section_style = ParagraphStyle(
"Section", parent=styles["Normal"],
fontSize=10, fontName="Helvetica-Bold",
textColor=DARK_BLUE, spaceBefore=6, spaceAfter=3,
borderPad=3
)
cell_style = ParagraphStyle(
"Cell", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica",
textColor=BODY_TEXT, leading=9, wordWrap='CJK'
)
cell_bold = ParagraphStyle(
"CellBold", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica-Bold",
textColor=DARK_BLUE, leading=9
)
cell_red = ParagraphStyle(
"CellRed", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica-Bold",
textColor=colors.HexColor("#b91c1c"), leading=9
)
header_cell = ParagraphStyle(
"HeaderCell", parent=styles["Normal"],
fontSize=7.5, fontName="Helvetica-Bold",
textColor=HEADER_TEXT, leading=10, alignment=TA_CENTER
)
note_style = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=6.2, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#64748b"), leading=8
)
def P(text, style=cell_style):
return Paragraph(text, style)
def H(text):
return Paragraph(text, header_cell)
# ── Helper: draw page border & watermark ────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
# Outer border
canvas.setStrokeColor(DARK_BLUE)
canvas.setLineWidth(2)
canvas.rect(0.6*cm, 0.6*cm, PAGE_W - 1.2*cm, PAGE_H - 1.2*cm)
# Footer
canvas.setFont("Helvetica", 6.5)
canvas.setFillColor(colors.HexColor("#94a3b8"))
canvas.drawCentredString(PAGE_W/2, 0.85*cm,
"Minor Cases Reference Card • Biochemistry Lab Practical • All values are approximate — confirm with local laboratory reference ranges")
canvas.drawRightString(PAGE_W - 1.3*cm, 0.85*cm, f"Page {doc.page}")
canvas.restoreState()
# ═══════════════════════════════════════════════════════════════════════════
# DATA
# ═══════════════════════════════════════════════════════════════════════════
# Each case: (no, name, enzyme/defect, key_lab_findings, diagnostic_hallmark, extra_notes)
# key_lab_findings: list of (parameter, result, direction) where direction: "↑","↓","="
# direction used for colour coding
# ── PAGE 1: Carbohydrate & Amino Acid Disorders (Cases 1-5) ─────────────────
cases_p1 = [
{
"no": "1", "name": "Galactosemia",
"defect": "Gal-1-P Uridyl Transferase ↓\n(AR; GALT gene)",
"findings": [
("Blood galactose", "Markedly ↑", "↑"),
("Urine reducing substance", "Positive (non-glucose)", "↑"),
("Urine glucose (specific)", "Negative", "="),
("Blood glucose", "Low (hypoglycemia)", "↓"),
("ALT / AST", "Elevated", "↑"),
("Bilirubin (total)", "Elevated (jaundice)", "↑"),
("Serum albumin", "Low", "↓"),
("PT/INR", "Prolonged", "↑"),
("Urine amino acids", "Positive (Fanconi)", "↑"),
],
"hallmark": "✦ Urine reduces Benedict's but NOT glucose oxidase strip\n✦ Cataracts + jaundice + E. coli sepsis in neonate",
"note": "Tx: Remove galactose (lactose-free formula)"
},
{
"no": "2", "name": "Hereditary Fructose Intolerance",
"defect": "Aldolase B ↓\n(AR; fructose-1-P accumulates)",
"findings": [
("Blood fructose (post-load)", "Elevated", "↑"),
("Blood glucose (post-load)", "Severely ↓ (hypoglycemia)", "↓"),
("Serum phosphate", "Low (PO₄ trapped)", "↓"),
("Serum uric acid", "Elevated", "↑"),
("ALT / AST", "Elevated", "↑"),
("PT/INR", "Prolonged", "↑"),
("Urine reducing substance", "Positive (fructosuria)", "↑"),
("Urine amino acids/glucose", "Positive (Fanconi)", "↑"),
],
"hallmark": "✦ Severe hypoglycemia + ↓phosphate after fructose ingestion\n✦ Aversion to sweet foods (protective behavior)",
"note": "Tx: Strict fructose/sucrose/sorbitol avoidance"
},
{
"no": "3", "name": "Lactose Intolerance",
"defect": "Lactase ↓\n(intestinal brush border enzyme)",
"findings": [
("H₂ breath test", ">20 ppm rise after lactose load", "↑"),
("Lactose tolerance test (blood glucose)", "Rise <20 mg/dL (flat curve)", "↓"),
("Stool pH", "<5.5 (acidic, from fermentation)", "↓"),
("Stool reducing substances", "Positive", "↑"),
("Serum calcium (chronic)", "May be low", "↓"),
("Jejunal biopsy lactase", "Absent / markedly reduced", "↓"),
("Urine lactose", "May be present", "="),
("Routine blood tests", "Generally normal", "="),
],
"hallmark": "✦ H₂ breath test: gold standard\n✦ Flat blood glucose curve after 50g lactose",
"note": "Tx: Lactose-free diet; lactase enzyme supplements"
},
{
"no": "4", "name": "Phenylketonuria (PKU)",
"defect": "Phenylalanine hydroxylase ↓\n(AR; Phe → Tyr blocked)",
"findings": [
("Serum phenylalanine", ">20 mg/dL (normal <2)", "↑"),
("Serum tyrosine", "Low", "↓"),
("Urine phenylpyruvate", "Positive (phenylketones)", "↑"),
("FeCl₃ urine test", "Green colour", "↑"),
("Guthrie test (newborn)", "Elevated Phe on filter paper", "↑"),
("Urine odour", "Musty/mousy", "="),
("Melanin / skin pigment", "Reduced (fair skin, blue eyes)", "↓"),
("Neurotransmitters (serotonin)", "Reduced", "↓"),
],
"hallmark": "✦ Serum Phe >20 mg/dL + FeCl₃ green test\n✦ Newborn screen: Guthrie (PKU test)",
"note": "Tx: Low-Phe diet; BH4 (sapropterin) for responsive cases"
},
{
"no": "5", "name": "Alkaptonuria",
"defect": "Homogentisate oxidase ↓\n(AR; homogentisic acid accumulates)",
"findings": [
("Urine homogentisic acid", "Markedly elevated", "↑"),
("Urine colour (on standing)", "Turns dark brown/black", "↑"),
("FeCl₃ urine test", "Dark/brown colour", "↑"),
("Benedict's test (urine)", "Positive (reducing substance)", "↑"),
("Serum homogentisic acid", "Elevated", "↑"),
("Joint X-ray (adults)", "Calcified intervertebral discs", "="),
("Sclera / cartilage (adults)", "Blue-black pigmentation (ochronosis)", "="),
("Routine bloods", "Normal", "="),
],
"hallmark": "✦ URINE DARKENS ON STANDING — pathognomonic\n✦ Dark staining of diapers in infants; ochronosis in adults",
"note": "Tx: Nitisinone (HPPD inhibitor); high-dose Vit C"
},
]
# ── PAGE 2: Vitamin Deficiencies (Cases 6-10) ────────────────────────────────
cases_p2 = [
{
"no": "6", "name": "Rickets (Vitamin D Deficiency)",
"defect": "Vitamin D ↓ → impaired Ca²⁺ & PO₄ absorption\n→ defective bone mineralisation",
"findings": [
("Serum calcium", "Low (hypocalcemia)", "↓"),
("Serum phosphate", "Low (hypophosphatemia)", "↓"),
("Serum ALP", "Markedly elevated (osteoblast activity)", "↑"),
("Serum PTH", "Elevated (2° hyperPTH)", "↑"),
("25-OH Vitamin D", "<20 ng/mL (deficiency)", "↓"),
("1,25-(OH)₂ Vitamin D", "Low", "↓"),
("Urine calcium", "Low", "↓"),
("Urine phosphate", "Elevated (PTH-mediated)", "↑"),
],
"hallmark": "✦ ↓Ca + ↓PO₄ + ↑ALP + ↑PTH (classic tetrad)\n✦ X-ray: widened metaphyses, cupping, rachitic rosary",
"note": "Tx: Vitamin D3 + calcium supplementation"
},
{
"no": "7", "name": "Riboflavin (Vit B₂) Deficiency",
"defect": "Vitamin B₂ ↓ → impaired FAD/FMN cofactors\n→ impaired oxidative metabolism",
"findings": [
("Urine riboflavin", "<30 μg/day (low)", "↓"),
("Erythrocyte Glutathione Reductase AC (EGR-AC)", ">1.2 (gold standard)", "↑"),
("Plasma riboflavin", "<3 μg/dL", "↓"),
("Serum FAD", "Low", "↓"),
("Haemoglobin", "Low (normocytic anaemia)", "↓"),
("Serum iron", "May be low (co-existing IDA)", "↓"),
("Clinical signs", "Angular cheilitis, glossitis, seborrhoea", "="),
("Corneal vascularisation", "Present in severe deficiency", "="),
],
"hallmark": "✦ EGR-AC >1.2 = functional B₂ deficiency\n✦ Angular cheilitis + magenta tongue",
"note": "Often co-exists with niacin/thiamine deficiency"
},
{
"no": "8", "name": "Pellagra (Niacin / Vit B₃ Deficiency)",
"defect": "Niacin ↓ / Tryptophan ↓ → impaired NAD⁺/NADP⁺\n→ defective energy metabolism",
"findings": [
("Urine N-methylnicotinamide", "<1.6 mg/day (low)", "↓"),
("2-Pyridone : N-methylnicotinamide ratio", "<1.0 (altered)", "↓"),
("Plasma NAD⁺/NADP⁺", "Low", "↓"),
("Serum tryptophan", "Low", "↓"),
("Haemoglobin", "Low (anaemia)", "↓"),
("Skin biopsy (Casal's necklace)", "Photosensitive dermatitis", "="),
("Serum 5-HIAA", "↓ (if carcinoid-related, ↑5-HIAA)", "="),
("Routine chemistry", "Otherwise normal", "="),
],
"hallmark": "✦ ↓Urine N-methylnicotinamide is biochemical marker\n✦ Clinical '4 Ds': Dermatitis, Diarrhoea, Dementia, Death",
"note": "Common in maize-based diets; also with INH therapy"
},
{
"no": "9", "name": "Vitamin B₁₂ Deficiency",
"defect": "Cobalamin ↓ → impaired DNA synthesis\n→ megaloblastic anaemia + neuropathy",
"findings": [
("Serum Vitamin B₁₂", "<200 pg/mL (normal 200-900)", "↓"),
("MCV", ">100 fL (macrocytosis)", "↑"),
("Blood smear", "Macro-ovalocytes + hypersegmented neutrophils", "↑"),
("Haemoglobin", "Low (megaloblastic anaemia)", "↓"),
("Serum methylmalonic acid (MMA)", "Elevated (specific for B₁₂ ↓)", "↑"),
("Plasma homocysteine", "Elevated", "↑"),
("Serum folate", "Normal (distinguishes from folate deficiency)", "="),
("Intrinsic factor antibodies", "Positive (pernicious anaemia)", "↑"),
("LDH / indirect bilirubin", "Elevated (ineffective erythropoiesis)", "↑"),
],
"hallmark": "✦ ↑MCV + hyperseg neutrophils + ↑MMA (B₁₂-specific)\n✦ Subacute combined degeneration of spinal cord (unique to B₁₂)",
"note": "↑MMA differentiates B₁₂ deficiency from folate deficiency"
},
{
"no": "10", "name": "Vitamin C Deficiency (Scurvy)",
"defect": "Ascorbic acid ↓ → defective collagen synthesis\n(prolyl/lysyl hydroxylase requires Vit C)",
"findings": [
("Serum/plasma ascorbic acid", "<0.2 mg/dL (normal 0.4-2.0)", "↓"),
("Leukocyte ascorbic acid", "Low (most sensitive)", "↓"),
("Capillary fragility (Rumpel-Leede)", "Abnormal (positive)", "↑"),
("Haemoglobin", "Low (anaemia – bleeding + iron malabsorption)", "↓"),
("Serum iron", "Low", "↓"),
("PT / APTT", "Usually normal", "="),
("X-ray (children)", "Trümmerfeld zone + Pelkan spurs at metaphysis", "="),
("Clinical", "Perifollicular haemorrhages, bleeding gums, corkscrew hairs", "="),
],
"hallmark": "✦ ↓Plasma ascorbate <0.2 mg/dL + capillary fragility\n✦ Perifollicular haemorrhages + bleeding gums",
"note": "Tx: Ascorbic acid 300-1000 mg/day; dietary citrus fruits"
},
]
# ── PAGE 3: Wilson + Anemias + Gout (Cases 11-15) ───────────────────────────
cases_p3 = [
{
"no": "11", "name": "Wilson Disease",
"defect": "ATP7B gene mutation → impaired biliary Cu excretion\n→ Cu accumulates in liver, brain, cornea, kidneys",
"findings": [
("Serum ceruloplasmin", "<20 mg/dL (normal 20-40) — HALLMARK", "↓"),
("24-hr urine copper", ">100 μg/day (normal <40)", "↑"),
("Serum free (non-cp) copper", "Elevated (>25 μg/dL)", "↑"),
("Serum total copper", "Low (less ceruloplasmin-bound Cu)", "↓"),
("Liver copper (biopsy)", ">250 μg/g dry weight (diagnostic)", "↑"),
("ALT / AST", "Elevated", "↑"),
("Coombs-negative haemolytic anaemia", "Present", "↑"),
("Kayser-Fleischer rings", "Greenish-brown (slit-lamp)", "="),
("Urine amino acids/glucose (Fanconi)", "Positive", "↑"),
],
"hallmark": "✦ ↓Ceruloplasmin + ↑24h urine Cu + KF rings\n✦ Young patient with liver disease + neuropsychiatric features",
"note": "Tx: D-penicillamine or trientine (chelation); zinc (maintenance)"
},
{
"no": "12", "name": "Iron Deficiency Anaemia",
"defect": "Iron ↓ → impaired haem synthesis\n→ microcytic hypochromic anaemia",
"findings": [
("Serum ferritin", "<12 μg/L (earliest marker)", "↓"),
("Serum iron", "<30 μg/dL", "↓"),
("TIBC (transferrin)", ">400 μg/dL", "↑"),
("Transferrin saturation", "<15% (= serum Fe ÷ TIBC)", "↓"),
("MCV", "<80 fL (microcytic)", "↓"),
("MCH", "<27 pg (hypochromic)", "↓"),
("MCHC", "<30%", "↓"),
("RDW", ">14.5% (anisocytosis)", "↑"),
("Blood smear", "Microcytic, hypochromic + pencil cells", "="),
],
"hallmark": "✦ ↓Ferritin (earliest) + ↓MCV + ↑TIBC\n✦ Microcytic hypochromic smear + pencil cells",
"note": "Stages: 1. ↓Ferritin only → 2. ↑TIBC, ↓Sat% → 3. ↓Hb, ↓MCV"
},
{
"no": "13", "name": "Sickle Cell Anaemia",
"defect": "HbS: β-globin Glu⁶→Val (point mutation)\nHomozygous HbSS = sickle cell disease",
"findings": [
("Haemoglobin electrophoresis", "HbS 85-95%; HbF 2-20%; HbA absent", "↑"),
("Sickle solubility test (Sickledex)", "Positive", "↑"),
("HPLC", "Quantifies HbS/HbF/HbA (gold standard)", "="),
("Haemoglobin", "6-9 g/dL", "↓"),
("Blood smear", "Sickle cells + target cells + Howell-Jolly bodies", "="),
("Reticulocyte count", "5-15% (compensatory)", "↑"),
("Indirect bilirubin / LDH", "Elevated (haemolysis)", "↑"),
("Haptoglobin", "Low (haemolysis marker)", "↓"),
("MCV", "Normal (normocytic)", "="),
],
"hallmark": "✦ HbS on electrophoresis + positive sickle test\n✦ HbA absent in HbSS; trait has HbA ~60%, HbS ~40%",
"note": "Tx: Hydroxyurea (↑HbF); gene therapy now available"
},
{
"no": "14", "name": "Beta-Thalassaemia",
"defect": "β-globin chain synthesis reduced (β⁺) or absent (β⁰)\n→ α-chain excess → precipitation → haemolysis",
"findings": [
("HbA₂ (electrophoresis)", ">3.5% — HALLMARK of trait (minor)", "↑"),
("HbF", ">30% (major); slightly ↑ (minor)", "↑"),
("HbA", "Absent (β⁰/β⁰) or reduced (β⁺)", "↓"),
("MCV", "<70 fL (very microcytic)", "↓"),
("Serum ferritin", "Normal or ↑ (NOT iron deficient)", "="),
("Serum iron", "Normal or elevated", "="),
("RDW", "Elevated", "↑"),
("Blood smear", "Microcytic + target cells + nucleated RBCs (major)", "="),
("HPLC", "Quantifies HbA, HbA₂, HbF (gold standard)", "="),
],
"hallmark": "✦ ↑HbA₂ >3.5% = thalassaemia trait (minor)\n✦ Normal/↑ferritin differentiates from iron deficiency",
"note": "Key: In β-thal, ferritin is NORMAL/HIGH (not low like IDA)"
},
{
"no": "15", "name": "Acute Gout",
"defect": "Hyperuricaemia → MSU crystal deposition in joints\n→ neutrophil phagocytosis → acute inflammation",
"findings": [
("Serum uric acid", ">6.8 mg/dL (typically >8-10 in attack)", "↑"),
("Synovial fluid WBC", "10,000-100,000/μL (predominantly PMNs)", "↑"),
("Synovial fluid crystals", "Negatively birefringent needle-shaped urate crystals", "↑"),
("ESR / CRP", "Elevated (acute phase)", "↑"),
("WBC (serum)", "Elevated", "↑"),
("24-hr urine uric acid", ">800 mg/day = overproducer", "↑"),
("Serum creatinine", "May be elevated (urate nephropathy)", "↑"),
("X-ray (chronic)", "Punched-out lytic lesions + tophi", "="),
],
"hallmark": "✦ Negatively birefringent crystals in synovial fluid = GOLD STANDARD\n✦ Note: serum uric acid may be NORMAL during acute attack",
"note": "Tx acute: NSAIDs/colchicine/steroids. Chronic: allopurinol/febuxostat"
},
]
# ── PAGE 4: Serum Protein Electrophoresis (Cases 16-19) ─────────────────────
# We'll do a dedicated SPE comparison table for this page
# ═══════════════════════════════════════════════════════════════════════════
# BUILD FLOWABLES
# ═══════════════════════════════════════════════════════════════════════════
elements = []
def make_title_block(title, subtitle):
elems = []
elems.append(Paragraph(title, title_style))
elems.append(Paragraph(subtitle, subtitle_style))
elems.append(HRFlowable(width="100%", thickness=2, color=DARK_BLUE, spaceAfter=6))
return elems
def build_case_table(cases, ncols=5):
"""
Build a 5-column case table.
Columns: Case No. | Defect/Enzyme | Key Lab Findings | Diagnostic Hallmark | Treatment Note
"""
# Header row
col_headers = ["No / Case", "Enzyme / Defect", "Key Lab Findings", "Diagnostic Hallmark", "Notes / Treatment"]
col_widths = [2.6*cm, 4.8*cm, 9.0*cm, 6.5*cm, 4.1*cm]
data = [[H(h) for h in col_headers]]
row_colors = []
for i, c in enumerate(cases):
bg = ROW_ALT if i % 2 == 0 else ROW_WHITE
# Col 1: Number + Name
col1 = [Paragraph(f"<b>{c['no']}.</b>", cell_bold),
Paragraph(c['name'], ParagraphStyle("cn", parent=cell_bold, fontSize=7.2, textColor=MED_BLUE, leading=9))]
# Col 2: Defect
col2 = Paragraph(c['defect'], cell_style)
# Col 3: Lab findings as mini table-like list
findings_text = ""
for param, val, direction in c['findings']:
arrow = ""
if direction == "↑":
arrow = '<font color="#b91c1c">▲</font> '
elif direction == "↓":
arrow = '<font color="#1d4ed8">▼</font> '
else:
arrow = '<font color="#64748b">●</font> '
findings_text += f"{arrow}<b>{param}:</b> {val}<br/>"
col3 = Paragraph(findings_text.rstrip("<br/>"), cell_style)
# Col 4: Hallmark
col4 = Paragraph(c['hallmark'], ParagraphStyle(
"hm", parent=cell_style, fontSize=6.8,
textColor=colors.HexColor("#1e3a5f"), fontName="Helvetica-BoldOblique", leading=9
))
# Col 5: Note
col5 = Paragraph(c['note'], note_style)
data.append([[p for p in col1], col2, col3, col4, col5])
row_colors.append((i + 1, bg))
t = Table(data, colWidths=col_widths, repeatRows=1)
style_cmds = [
("BACKGROUND", (0, 0), (-1, 0), DARK_BLUE),
("TEXTCOLOR", (0, 0), (-1, 0), HEADER_TEXT),
("ALIGN", (0, 0), (-1, 0), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 7.5),
("GRID", (0, 0), (-1, -1), 0.35, GREY_LIGHT),
("LINEBELOW", (0, 0), (-1, 0), 1.2, ACCENT),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 4),
("RIGHTPADDING", (0, 0), (-1, -1), 4),
# Alternate row colours
]
for row_idx, bg_col in row_colors:
style_cmds.append(("BACKGROUND", (0, row_idx), (-1, row_idx), bg_col))
t.setStyle(TableStyle(style_cmds))
return t
# ─── PAGE 1 ─────────────────────────────────────────────────────────────────
elements += make_title_block(
"Minor Cases Reference Card — Biochemistry Lab Practical",
"Cases 1–5: Carbohydrate & Amino Acid Metabolism Disorders | ▲ = Increased ▼ = Decreased ● = Special finding"
)
elements.append(build_case_table(cases_p1))
elements.append(PageBreak())
# ─── PAGE 2 ─────────────────────────────────────────────────────────────────
elements += make_title_block(
"Minor Cases Reference Card — Biochemistry Lab Practical",
"Cases 6–10: Vitamin Deficiency Disorders | ▲ = Increased ▼ = Decreased ● = Special finding"
)
elements.append(build_case_table(cases_p2))
elements.append(PageBreak())
# ─── PAGE 3 ─────────────────────────────────────────────────────────────────
elements += make_title_block(
"Minor Cases Reference Card — Biochemistry Lab Practical",
"Cases 11–15: Wilson Disease, Anaemias & Acute Gout | ▲ = Increased ▼ = Decreased ● = Special finding"
)
elements.append(build_case_table(cases_p3))
elements.append(PageBreak())
# ─── PAGE 4: SPE Comparison ─────────────────────────────────────────────────
elements += make_title_block(
"Minor Cases Reference Card — Biochemistry Lab Practical",
"Cases 16–19: Serum Protein Electrophoresis (SPE) Patterns Comparison"
)
spe_intro = """
<b>Serum Protein Electrophoresis (SPE)</b> separates serum proteins by charge/size into 5 fractions:
<b>Albumin → α₁ → α₂ → β → γ</b>.
Serum total protein normal: <b>6.4–8.3 g/dL</b>. Results interpreted as band height/area on gel or densitometer tracing.
"""
elements.append(Paragraph(spe_intro, ParagraphStyle("intro", parent=cell_style, fontSize=7.5, spaceAfter=6)))
# Main SPE comparison table
spe_headers = ["Band / Fraction", "Normal Values", "Normal SPE\n(Case 16)", "Nephrotic Syndrome\n(Case 17)", "Cirrhosis of Liver\n(Case 18)", "Multiple Myeloma\n(Case 19)"]
spe_col_w = [3.2*cm, 3.8*cm, 3.8*cm, 4.8*cm, 4.8*cm, 5.0*cm]
def spe_cell(text, bold=False, color=None, bg=None):
st = ParagraphStyle(
"sc", parent=cell_style,
fontName="Helvetica-Bold" if bold else "Helvetica",
textColor=color or BODY_TEXT,
fontSize=7.0, leading=9.5
)
return Paragraph(text, st)
UP = '<font color="#b91c1c"><b>▲</b></font>'
DOWN = '<font color="#1d4ed8"><b>▼</b></font>'
NORM = '<font color="#16a34a"><b>◆</b></font>'
spe_data = [
[H(h) for h in spe_headers],
[
spe_cell("Albumin\n(Major band)", bold=True),
spe_cell("3.5–5.0 g/dL\n55–65%"),
spe_cell(f"{NORM} Normal\nTall dominant peak", bold=True),
spe_cell(f"{DOWN} Markedly LOW\nHeavy urinary loss\n(>3.5 g/day proteinuria)", bold=True),
spe_cell(f"{DOWN} Decreased\nReduced hepatic synthesis"),
spe_cell(f"{NORM} Normal or\nmildly decreased"),
],
[
spe_cell("α₁ Globulin\n(α₁-antitrypsin,\nα₁-acid glycoprotein)", bold=True),
spe_cell("0.1–0.4 g/dL\n2–4%"),
spe_cell(f"{NORM} Normal small band"),
spe_cell(f"{DOWN} Decreased\n(lost in urine — small protein)"),
spe_cell(f"{DOWN} Decreased\n(reduced synthesis)"),
spe_cell(f"{NORM} Normal or decreased"),
],
[
spe_cell("α₂ Globulin\n(Haptoglobin,\nα₂-macroglobulin,\nceruloplasmin)", bold=True),
spe_cell("0.4–0.8 g/dL\n6–12%"),
spe_cell(f"{NORM} Normal band"),
spe_cell(f"{UP} <b>MARKEDLY ELEVATED</b>\nα₂-macroglobulin retained\n(too large to lose in urine)\n+ increased synthesis\n★ HALLMARK of nephrotic", bold=True),
spe_cell(f"{DOWN} Decreased\n(reduced synthesis)"),
spe_cell(f"{NORM} Normal or decreased"),
],
[
spe_cell("β Globulin\n(Transferrin,\nComplement C3,\nLDL/VLDL)", bold=True),
spe_cell("0.5–1.0 g/dL\n9–15%"),
spe_cell(f"{NORM} Normal band"),
spe_cell(f"{UP} Increased\n(↑lipoprotein synthesis\n— compensatory for ↓oncotic P)"),
spe_cell(f"{NORM} Normal to slightly ↑"),
spe_cell(f"{NORM} Normal or decreased\n(M spike may appear here\nif IgA myeloma)"),
],
[
spe_cell("γ Globulin\n(IgG, IgA, IgM,\nIgD, IgE)", bold=True),
spe_cell("0.6–1.6 g/dL\n11–21%"),
spe_cell(f"{NORM} Normal broad band\n(polyclonal — wide)"),
spe_cell(f"{DOWN} Decreased\n(IgG lost in urine)"),
spe_cell(f"{UP} <b>Diffusely elevated</b>\nPolyclonal increase\n(portal HTN → gut Ag leakage)"),
spe_cell(f"{UP} <b>TALL NARROW M SPIKE</b>\n(monoclonal — sharp peak)\n★ HALLMARK of myeloma", bold=True),
],
[
spe_cell("Special\nPattern", bold=True),
spe_cell("—"),
spe_cell("Normal: Albumin dominant;\ngradual decrease\ntowards γ"),
spe_cell(f"Pattern:\n{DOWN}Albumin + {DOWN}γ + {UP}α₂\n'Low-Albumin Nephrotic Pattern'"),
spe_cell(f"Pattern:\n{DOWN}Albumin +\n<b>β-γ BRIDGING</b>\n(β and γ bands merge)\nIgA migrates into β region\n★ HALLMARK of cirrhosis", bold=True),
spe_cell(f"Pattern:\n<b>Single sharp M spike</b>\nin γ (or β if IgA)\nNarrow monoclonal band\n+ Bence-Jones in urine\n(free light chains)", bold=True),
],
[
spe_cell("Total Protein", bold=True),
spe_cell("6.4–8.3 g/dL"),
spe_cell(f"{NORM} Normal"),
spe_cell(f"{DOWN} Low (hypoproteinaemia)"),
spe_cell(f"{DOWN} Low to normal"),
spe_cell(f"{UP} Often elevated\n(M protein increases total)"),
],
[
spe_cell("Key Additional\nLab Findings", bold=True),
spe_cell("—"),
spe_cell("—"),
spe_cell("• Proteinuria >3.5 g/day\n• Hyperlipidaemia\n• Lipiduria (oval fat bodies)\n• Oedema"),
spe_cell("• ↑ALT/AST\n• ↑Bilirubin\n• ↓PT (coagulopathy)\n• ↑NH₃ (if decompensated)\n• Thrombocytopenia"),
spe_cell("• Bence-Jones protein (urine)\n• Hypercalcaemia\n• ↑Creatinine\n• Lytic bone lesions\n• Rouleaux on smear\n• ↑β₂-microglobulin"),
],
]
spe_table = Table(spe_data, colWidths=spe_col_w, repeatRows=1)
spe_style = TableStyle([
("BACKGROUND", (0, 0), (-1, 0), DARK_BLUE),
("TEXTCOLOR", (0, 0), (-1, 0), HEADER_TEXT),
("ALIGN", (0, 0), (-1, 0), "CENTER"),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("GRID", (0, 0), (-1, -1), 0.35, GREY_LIGHT),
("LINEBELOW", (0, 0), (-1, 0), 1.2, ACCENT),
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 4),
("RIGHTPADDING", (0, 0), (-1, -1), 4),
# Colour first column
("BACKGROUND", (0, 1), (0, -1), LIGHT_BLUE),
("FONTNAME", (0, 1), (0, -1), "Helvetica-Bold"),
# Alternate rows 1-8 (data rows)
("BACKGROUND", (1, 2), (-1, 2), ROW_WHITE),
("BACKGROUND", (1, 3), (-1, 3), ROW_ALT),
("BACKGROUND", (1, 4), (-1, 4), ROW_WHITE),
("BACKGROUND", (1, 5), (-1, 5), ROW_ALT),
("BACKGROUND", (1, 6), (-1, 6), ROW_WHITE),
("BACKGROUND", (1, 7), (-1, 7), ROW_ALT),
("BACKGROUND", (1, 8), (-1, 8), ROW_WHITE),
# Highlight hallmark cells
("BACKGROUND", (3, 3), (3, 3), colors.HexColor("#fef3c7")), # nephrotic α₂
("BACKGROUND", (4, 6), (4, 6), colors.HexColor("#ecfdf5")), # cirrhosis β-γ bridge
("BACKGROUND", (5, 5), (5, 5), colors.HexColor("#fef3c7")), # myeloma M spike
("BACKGROUND", (5, 6), (5, 6), colors.HexColor("#fef3c7")), # myeloma pattern
])
spe_table.setStyle(spe_style)
elements.append(spe_table)
elements.append(Spacer(1, 0.3*cm))
# Legend
legend_data = [[
Paragraph('<font color="#b91c1c"><b>▲ Increased</b></font>', cell_style),
Paragraph('<font color="#1d4ed8"><b>▼ Decreased</b></font>', cell_style),
Paragraph('<font color="#16a34a"><b>◆ Normal</b></font>', cell_style),
Paragraph('<b>★ = Hallmark / Pathognomonic finding</b>', cell_style),
Paragraph('All values approximate — verify with local reference ranges', note_style),
]]
legend_t = Table(legend_data, colWidths=[3*cm, 3*cm, 3*cm, 7*cm, 9*cm])
legend_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#f8fafc")),
("BOX", (0,0), (-1,-1), 0.5, GREY_LIGHT),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
elements.append(legend_t)
# ─── BUILD ──────────────────────────────────────────────────────────────────
doc.build(elements, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/minor-cases-pdf && python build_pdf.py 2>&1
ls -lh /home/daytona/workspace/minor-cases-pdf/Minor_Cases_Reference_Card.pdf
Minor Cases Reference Card
PDF Document · PDF
| Page | Cases | Content |
|---|---|---|
| 1 | 1-5 | Carbohydrate & Amino Acid Disorders (Galactosemia, HFI, Lactose Intolerance, PKU, Alkaptonuria) |
| 2 | 6-10 | Vitamin Deficiency Disorders (Rickets, Riboflavin, Pellagra, Vit B₁₂, Scurvy) |
| 3 | 11-15 | Wilson Disease, Anaemias & Acute Gout |
| 4 | 16-19 | Full SPE Pattern Comparison Table (Normal vs Nephrotic vs Cirrhosis vs Multiple Myeloma) |
Create a similar PDF for the 26 Major Cases
mkdir -p /home/daytona/workspace/major-cases-pdf
~/major-cases-pdf/build_pdf.py
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer,
HRFlowable, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/major-cases-pdf/Major_Cases_Reference_Card.pdf"
# ── Colour palette ────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3557")
MED_BLUE = colors.HexColor("#2563a8")
LIGHT_BLUE = colors.HexColor("#dbeafe")
ACCENT = colors.HexColor("#0ea5e9")
ROW_ALT = colors.HexColor("#f0f7ff")
ROW_WHITE = colors.white
HEADER_TEXT = colors.white
BODY_TEXT = colors.HexColor("#1e293b")
GREY_LIGHT = colors.HexColor("#e2e8f0")
PAGE_W, PAGE_H = landscape(A4)
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A4),
leftMargin=1.2*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
styles = getSampleStyleSheet()
title_style = ParagraphStyle("Title", parent=styles["Normal"],
fontSize=17, fontName="Helvetica-Bold", textColor=DARK_BLUE,
alignment=TA_CENTER, spaceAfter=2)
subtitle_style = ParagraphStyle("Subtitle", parent=styles["Normal"],
fontSize=8.5, fontName="Helvetica", textColor=MED_BLUE,
alignment=TA_CENTER, spaceAfter=7)
cell_style = ParagraphStyle("Cell", parent=styles["Normal"],
fontSize=6.6, fontName="Helvetica", textColor=BODY_TEXT, leading=8.8)
cell_bold = ParagraphStyle("CellBold", parent=styles["Normal"],
fontSize=6.8, fontName="Helvetica-Bold", textColor=DARK_BLUE, leading=9)
cell_blue = ParagraphStyle("CellBlue", parent=styles["Normal"],
fontSize=7.0, fontName="Helvetica-Bold", textColor=MED_BLUE, leading=9)
cell_hm = ParagraphStyle("CellHm", parent=styles["Normal"],
fontSize=6.6, fontName="Helvetica-BoldOblique",
textColor=colors.HexColor("#1e3a5f"), leading=9)
note_style = ParagraphStyle("Note", parent=styles["Normal"],
fontSize=6.0, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#64748b"), leading=7.8)
header_cell = ParagraphStyle("HeaderCell", parent=styles["Normal"],
fontSize=7.5, fontName="Helvetica-Bold", textColor=HEADER_TEXT,
leading=9.5, alignment=TA_CENTER)
UP = '<font color="#b91c1c"><b>▲</b></font>'
DOWN = '<font color="#1d4ed8"><b>▼</b></font>'
NORM = '<font color="#16a34a"><b>◆</b></font>'
def P(text, style=cell_style): return Paragraph(text, style)
def H(text): return Paragraph(text, header_cell)
def on_page(canvas, doc):
canvas.saveState()
canvas.setStrokeColor(DARK_BLUE)
canvas.setLineWidth(2)
canvas.rect(0.6*cm, 0.6*cm, PAGE_W-1.2*cm, PAGE_H-1.2*cm)
canvas.setFont("Helvetica", 6.3)
canvas.setFillColor(colors.HexColor("#94a3b8"))
canvas.drawCentredString(PAGE_W/2, 0.83*cm,
"Major Cases Reference Card • Biochemistry Lab Practical • "
"All values are approximate — confirm with local laboratory reference ranges")
canvas.drawRightString(PAGE_W-1.3*cm, 0.83*cm, f"Page {doc.page}")
canvas.restoreState()
def make_title_block(title, subtitle):
elems = []
elems.append(Paragraph(title, title_style))
elems.append(Paragraph(subtitle, subtitle_style))
elems.append(HRFlowable(width="100%", thickness=2, color=DARK_BLUE, spaceAfter=5))
return elems
def build_case_table(cases):
col_headers = ["No / Case", "Pathophysiology", "Key Lab Findings", "Diagnostic Hallmark", "Notes / Treatment"]
col_widths = [2.6*cm, 4.6*cm, 9.2*cm, 6.4*cm, 4.2*cm]
data = [[H(h) for h in col_headers]]
row_colors = []
for i, c in enumerate(cases):
bg = ROW_ALT if i % 2 == 0 else ROW_WHITE
col1 = [Paragraph(f"<b>{c['no']}.</b>", cell_bold),
Paragraph(c['name'], cell_blue)]
col2 = P(c['defect'])
findings_text = ""
for param, val, direction in c['findings']:
if direction == "↑": arrow = f'{UP} '
elif direction == "↓": arrow = f'{DOWN} '
else: arrow = f'{NORM} '
findings_text += f"{arrow}<b>{param}:</b> {val}<br/>"
col3 = P(findings_text.rstrip("<br/>"))
col4 = P(c['hallmark'], cell_hm)
col5 = P(c['note'], note_style)
data.append([[p for p in col1], col2, col3, col4, col5])
row_colors.append((i+1, bg))
t = Table(data, colWidths=col_widths, repeatRows=1)
style_cmds = [
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,0), HEADER_TEXT),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.35, GREY_LIGHT),
("LINEBELOW", (0,0), (-1,0), 1.2, ACCENT),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
]
for row_idx, bg_col in row_colors:
style_cmds.append(("BACKGROUND", (0,row_idx), (-1,row_idx), bg_col))
t.setStyle(TableStyle(style_cmds))
return t
# ═══════════════════════════════════════════════════════════════════════════
# CASE DATA
# ═══════════════════════════════════════════════════════════════════════════
# ── PAGE 1: GTT Cases 1–7 ────────────────────────────────────────────────
cases_p1 = [
{
"no": "1", "name": "Normal GTT",
"defect": "Normal glucose homeostasis. Adequate insulin secretion + normal peripheral sensitivity. Renal threshold ~180 mg/dL.",
"findings": [
("Fasting plasma glucose", "<100 mg/dL (<5.6 mmol/L)", "◆"),
("1-hour glucose", "<180 mg/dL", "◆"),
("2-hour glucose", "<140 mg/dL (<7.8 mmol/L) — returns to baseline", "◆"),
("Urine glucose", "Negative (below renal threshold)", "◆"),
("Urine ketones", "Negative", "◆"),
("HbA1c", "<5.7%", "◆"),
("Serum insulin", "Normal rise then fall", "◆"),
],
"hallmark": "✦ Smooth bell-curve; 2h glucose <140 mg/dL\n✦ No glucosuria at any time point",
"note": "Reference standard for diagnosing DM\n75 g oral glucose load (adult)"
},
{
"no": "2", "name": "Type II Diabetes Mellitus",
"defect": "Insulin resistance + relative insulin deficiency. Beta-cell exhaustion over time. Hepatic glucose overproduction.",
"findings": [
("Fasting plasma glucose", "≥126 mg/dL (≥7.0 mmol/L)", "↑"),
("2-hour glucose (OGTT)", "≥200 mg/dL (≥11.1 mmol/L)", "↑"),
("Random glucose + symptoms", "≥200 mg/dL (diagnostic)", "↑"),
("HbA1c", "≥6.5% (≥48 mmol/mol)", "↑"),
("Fasting serum insulin", "Elevated (insulin resistance)", "↑"),
("C-peptide", "Normal or elevated", "↑"),
("Urine glucose", "Positive (above renal threshold)", "↑"),
("Urine ketones", "Usually negative / trace", "◆"),
],
"hallmark": "✦ Elevated fasting + sustained 2h ≥200 mg/dL\n✦ HbA1c ≥6.5% confirms diagnosis",
"note": "Tx: Metformin first-line; SGLT2i, GLP1-RA, insulin\nScreen: BMI, HTN, dyslipidaemia, family history"
},
{
"no": "3", "name": "Renal Glycosuria",
"defect": "Defective renal tubular glucose reabsorption (low Tmax or low threshold). SGLT2 transporter dysfunction. Purely renal — not metabolic.",
"findings": [
("Blood glucose (fasting)", "Normal (<100 mg/dL)", "◆"),
("Oral GTT blood glucose", "Normal curve (all time points)", "◆"),
("Urine glucose", "POSITIVE despite normal blood glucose", "↑"),
("Urine ketones", "Absent", "◆"),
("HbA1c", "Normal", "◆"),
("Serum electrolytes", "Normal", "◆"),
("Renal function", "Normal", "◆"),
],
"hallmark": "✦ Normal blood glucose + Positive urine glucose\n✦ Normal GTT curve — problem is RENAL, not metabolic",
"note": "Benign condition; no treatment needed\nReassure patient; distinguish from DM"
},
{
"no": "4", "name": "Abnormal GTT – DM",
"defect": "Confirms DM via OGTT. Impaired insulin release and/or peripheral resistance causes sustained post-load hyperglycaemia.",
"findings": [
("Fasting glucose", "≥126 mg/dL", "↑"),
("1-hour glucose", ">200 mg/dL (exaggerated peak)", "↑"),
("2-hour glucose", "≥200 mg/dL (fails to normalise)", "↑"),
("Urine glucose", "Positive at multiple time points", "↑"),
("HbA1c", "≥6.5%", "↑"),
("Impaired fasting glucose", "100–125 mg/dL = pre-diabetes", "↑"),
("Impaired glucose tolerance", "2h 140–199 mg/dL = pre-diabetes", "↑"),
],
"hallmark": "✦ High fasting + exaggerated peak + 2h ≥200 mg/dL\n✦ Curve stays elevated — no return to baseline",
"note": "Two abnormal values required for diagnosis\nRepeat testing on separate day if asymptomatic"
},
{
"no": "5", "name": "GTT Graph – Normal",
"defect": "Graphical representation of normal glucose homeostasis. Smooth rise, peak, and return to baseline within 2 hours.",
"findings": [
("Fasting baseline", "80–100 mg/dL", "◆"),
("Peak (30-60 min)", "~120–140 mg/dL", "◆"),
("2-hour value", "<140 mg/dL", "◆"),
("Curve shape", "Smooth bell curve, no prolonged plateau", "◆"),
("Urine glucose at all points","Negative", "◆"),
("Return to baseline", "Complete by 2 hours", "◆"),
],
"hallmark": "✦ Smooth symmetric bell curve\n✦ No glucosuria; returns below 140 mg/dL at 2h",
"note": "Normal: fasting <100 / 1h <180 / 2h <140 mg/dL\nThresholds: ADA 2023 criteria"
},
{
"no": "6", "name": "GTT Graph – Type II DM",
"defect": "Graphical pattern showing elevated fasting, exaggerated sustained peak, and failure to normalise at 2 hours.",
"findings": [
("Fasting baseline", "≥126 mg/dL (elevated start)", "↑"),
("Peak (60-90 min)", ">200 mg/dL (exaggerated)", "↑"),
("2-hour value", "≥200 mg/dL (no return to normal)", "↑"),
("Curve shape", "Flat, prolonged high plateau", "↑"),
("Urine glucose", "Positive at multiple time points", "↑"),
("Curve vs normal", "Shifted upward and rightward", "↑"),
],
"hallmark": "✦ Elevated baseline + sustained plateau >200 mg/dL\n✦ Entire curve sits above normal throughout",
"note": "Compare directly with Normal GTT curve\nDemonstrates both fasting + post-load hyperglycaemia"
},
{
"no": "7", "name": "GTT Graph – Renal Glycosuria",
"defect": "Blood glucose curve IDENTICAL to normal GTT. Discordance: urine glucose positive at one or more time points despite normal blood glucose.",
"findings": [
("Blood glucose curve", "Identical to NORMAL GTT", "◆"),
("Fasting blood glucose", "Normal (<100 mg/dL)", "◆"),
("2-hour blood glucose", "Normal (<140 mg/dL)", "◆"),
("Urine glucose (timed)", "Positive at one or more collections", "↑"),
("Urine glucose vs blood", "Discordant — urine +ve, blood normal", "↑"),
("Urine ketones", "Negative", "◆"),
],
"hallmark": "✦ DISCORDANCE: Normal blood curve + Positive urine\n✦ The blood and urine glucose curves do NOT match",
"note": "Key teaching point: urine glucose ≠ blood glucose\nRenal glycosuria is benign; no treatment"
},
]
# ── PAGE 2: Ketosis & Acid-Base Cases 8–14 ──────────────────────────────
cases_p2 = [
{
"no": "8", "name": "Starvation Ketosis",
"defect": "Prolonged fasting → relative insulin deficiency → lipolysis ↑ → fatty acid β-oxidation → ketone body synthesis (acetoacetate, β-OHB, acetone). Mild, self-limiting.",
"findings": [
("Blood glucose", "Low-normal (60–80 mg/dL)", "↓"),
("Serum ketones (β-OHB + AcAc)","Mildly elevated", "↑"),
("Urine ketones", "Positive", "↑"),
("Serum pH", "Normal to mildly decreased (7.35–7.4)", "◆"),
("Serum HCO₃⁻", "Slightly low (20–22 mEq/L)", "↓"),
("Anion gap", "Mildly elevated (12–16 mEq/L)", "↑"),
("Serum insulin", "Very low", "↓"),
("Serum glucagon", "Elevated", "↑"),
],
"hallmark": "✦ Mild ketonemia + mild acidosis + LOW/normal glucose\n✦ No hyperglycaemia distinguishes from DKA",
"note": "Resolves with glucose intake\nDifferentiate: DKA has glucose >250, pH <7.3"
},
{
"no": "9", "name": "Diabetic Ketoacidosis (DKA)",
"defect": "Absolute insulin deficiency → massive ketogenesis + hyperglycaemia + osmotic diuresis → high anion gap metabolic acidosis. Life-threatening.",
"findings": [
("Blood glucose", ">250 mg/dL (often >400)", "↑"),
("Serum pH", "<7.30 (severe: <7.10)", "↓"),
("Serum HCO₃⁻", "<18 mEq/L (severe: <10)", "↓"),
("pCO₂", "Low (Kussmaul hyperventilation — compensation)", "↓"),
("Anion gap", ">12 mEq/L (high AG acidosis)", "↑"),
("Serum ketones", "Strongly positive", "↑"),
("Urine glucose + ketones", "Both strongly positive", "↑"),
("Serum K⁺", "Initially ↑ (acidosis); falls with insulin Tx", "↑"),
("Serum Na⁺", "Low or normal (dilutional)", "↓"),
],
"hallmark": "✦ Glucose >250 + pH <7.3 + High AG + Ketonaemia\n✦ Kussmaul breathing + fruity breath (acetone)",
"note": "Tx: IV fluids, insulin infusion, K⁺ replacement\nMonitor: glucose q1h, K⁺ q2h, pH q4h"
},
{
"no": "10", "name": "Normal Acid-Base Status",
"defect": "All respiratory and metabolic parameters within normal reference ranges. Lungs regulate pCO₂; kidneys regulate HCO₃⁻.",
"findings": [
("Arterial pH", "7.35–7.45", "◆"),
("pCO₂", "35–45 mmHg", "◆"),
("HCO₃⁻", "22–26 mEq/L", "◆"),
("pO₂", "80–100 mmHg", "◆"),
("Base excess (BE)", "–2 to +2 mEq/L", "◆"),
("Anion gap", "8–12 mEq/L", "◆"),
("SaO₂", ">95%", "◆"),
("SpO₂", ">95%", "◆"),
],
"hallmark": "✦ pH 7.35–7.45; pCO₂ 35–45; HCO₃⁻ 22–26\n✦ All parameters within reference range",
"note": "Henderson-Hasselbalch: pH = 6.1 + log([HCO₃⁻]/0.03×pCO₂)\nAG = Na⁺ – (Cl⁻ + HCO₃⁻); normal = 8–12"
},
{
"no": "11", "name": "Metabolic Acidosis",
"defect": "Primary ↓ HCO₃⁻ → lungs compensate by hyperventilating (↓pCO₂). High-AG: DKA, lactic acidosis, uremia. Normal-AG: diarrhoea, RTA.",
"findings": [
("pH", "<7.35", "↓"),
("HCO₃⁻ (primary change)", "<22 mEq/L", "↓"),
("pCO₂ (compensation)", "Low: ΔpCO₂ = ΔHCO₃⁻ × 1.2", "↓"),
("Anion gap (if high-AG)", ">12 mEq/L", "↑"),
("Anion gap (if normal-AG)", "8–12 mEq/L (hyperchloraemic)", "◆"),
("Serum Cl⁻ (normal-AG type)", "Elevated (hyperchloraemic)", "↑"),
("Serum K⁺", "Often elevated (K⁺ shifts out of cells)", "↑"),
("Urine pH (RTA)", ">5.5 despite acidosis (Type I RTA)", "↑"),
],
"hallmark": "✦ ↓pH + ↓HCO₃⁻ (primary) + ↓pCO₂ (compensation)\n✦ High-AG causes: MUDPILES mnemonic",
"note": "MUDPILES: Methanol, Uremia, DKA, Propylene glycol,\nIsoniazid/Iron, Lactic acidosis, Ethylene glycol, Salicylates"
},
{
"no": "12", "name": "Metabolic Alkalosis",
"defect": "Primary ↑ HCO₃⁻ → lungs compensate by hypoventilating (↑pCO₂). Causes: vomiting (H⁺/Cl⁻ loss), diuretics, hyperaldosteronism.",
"findings": [
("pH", ">7.45", "↑"),
("HCO₃⁻ (primary change)", ">26 mEq/L", "↑"),
("pCO₂ (compensation)", "↑: ΔpCO₂ = ΔHCO₃⁻ × 0.7 ± 5", "↑"),
("Serum Cl⁻", "Low (saline-responsive causes)", "↓"),
("Serum K⁺", "Low (hypokalaemia — K⁺ enters cells)", "↓"),
("Urine Cl⁻", "<20 mEq/L (saline-responsive) or >20 (resistant)", "↓"),
("Serum Na⁺", "Variable", "◆"),
("Serum albumin", "Low albumin can mask AG changes", "↓"),
],
"hallmark": "✦ ↑pH + ↑HCO₃⁻ (primary) + ↑pCO₂ (compensation)\n✦ ↓Cl⁻ + ↓K⁺ = vomiting/diuretic pattern",
"note": "Saline-responsive (urine Cl⁻ <20): vomiting, NG tube\nSaline-resistant (urine Cl⁻ >20): hyperaldosteronism"
},
{
"no": "13", "name": "Respiratory Acidosis",
"defect": "Primary ↑ pCO₂ (hypoventilation) → kidneys compensate by retaining HCO₃⁻. Causes: COPD, sedatives, neuromuscular disease.",
"findings": [
("pH", "<7.35", "↓"),
("pCO₂ (primary change)", ">45 mmHg", "↑"),
("HCO₃⁻ (compensation)", "Elevated (renal retention)", "↑"),
("Acute compensation", "ΔHCO₃⁻ = ΔpCO₂ × 0.07 ± 1.5", "◆"),
("Chronic compensation", "ΔHCO₃⁻ = ΔpCO₂ × 0.4 ± 3", "◆"),
("Serum K⁺", "Mildly elevated", "↑"),
("pO₂", "Low (if lung disease)", "↓"),
("SaO₂", "Decreased", "↓"),
],
"hallmark": "✦ ↓pH + ↑pCO₂ (primary) + ↑HCO₃⁻ (compensation)\n✦ Acute: minimal HCO₃⁻ rise; Chronic: significant rise",
"note": "Causes: COPD, obesity-hypoventilation, opioid overdose,\nGuillain-Barré, myasthenia gravis, airway obstruction"
},
{
"no": "14", "name": "Respiratory Alkalosis",
"defect": "Primary ↓ pCO₂ (hyperventilation) → kidneys compensate by excreting HCO₃⁻. Causes: anxiety, fever, pain, PE, high altitude.",
"findings": [
("pH", ">7.45", "↑"),
("pCO₂ (primary change)", "<35 mmHg", "↓"),
("HCO₃⁻ (compensation)", "Decreased (renal excretion)", "↓"),
("Acute compensation", "ΔHCO₃⁻ = ΔpCO₂ × 0.2 ± 2.5", "◆"),
("Chronic compensation", "ΔHCO₃⁻ = ΔpCO₂ × 0.5 ± 2.5", "◆"),
("Serum Ca²⁺ (ionised)", "Low (↑pH binds Ca²⁺ to albumin → tetany)", "↓"),
("Serum K⁺", "Low (K⁺ enters cells)", "↓"),
("Serum phosphate", "Low (cellular uptake)", "↓"),
],
"hallmark": "✦ ↑pH + ↓pCO₂ (primary) + ↓HCO₃⁻ (compensation)\n✦ Tingling/tetany from ↓ionised Ca²⁺",
"note": "Causes: Anxiety/panic, PE, pneumonia, hepatic failure,\nsalicylate poisoning (early), mechanical overventilation"
},
]
# ── PAGE 3: Nutritional & LFT Cases 15–20 ───────────────────────────────
cases_p3 = [
{
"no": "15", "name": "Kwashiorkor",
"defect": "Protein-deficient (but calorie-adequate) malnutrition. Low albumin → ↓oncotic pressure → oedema. Adequate carbs keep insulin elevated, limiting fat mobilisation → fatty liver.",
"findings": [
("Serum albumin", "<2.8 g/dL (normal 3.5–5.5 g/dL)", "↓"),
("Total protein", "Low", "↓"),
("Blood glucose", "Low-normal", "↓"),
("ALT/AST", "Elevated (fatty liver)", "↑"),
("Haemoglobin", "Low (anaemia)", "↓"),
("Serum potassium", "Low (hypokalaemia)", "↓"),
("Serum magnesium", "Low", "↓"),
("Serum zinc", "Low", "↓"),
("Serum transferrin", "Low", "↓"),
],
"hallmark": "✦ Very low albumin + oedema despite adequate calories\n✦ Pitting oedema + pot-belly + skin/hair changes\n✦ Fatty liver on imaging",
"note": "Differentiates from Marasmus: marasmus has adequate protein\nbut caloric deficiency — no oedema, no fatty liver"
},
{
"no": "16", "name": "Normal Liver Function Test (LFT)",
"defect": "Reference normal values for all LFT parameters. Hepatocyte integrity, synthetic function, and biliary flow all normal.",
"findings": [
("Total bilirubin", "0.3–1.2 mg/dL", "◆"),
("Direct (conjugated) bili", "0–0.3 mg/dL", "◆"),
("Indirect (unconjugated) bili","0.2–0.8 mg/dL", "◆"),
("ALT (SGPT)", "7–40 U/L", "◆"),
("AST (SGOT)", "10–40 U/L", "◆"),
("ALP", "44–147 U/L", "◆"),
("GGT", "5–40 U/L", "◆"),
("Albumin", "3.5–5.5 g/dL", "◆"),
("Total protein", "6.4–8.3 g/dL", "◆"),
("PT/INR", "Normal (INR ~1.0)", "◆"),
],
"hallmark": "✦ All values within reference ranges\n✦ Baseline to compare against jaundice cases 18–20",
"note": "ALT more liver-specific than AST\nALP elevated in both liver and bone disease"
},
{
"no": "17", "name": "Oedema (Hypoalbuminaemia)",
"defect": "Low serum albumin (any cause) → ↓plasma oncotic pressure → fluid shifts from intravascular to interstitial compartment → pitting oedema.",
"findings": [
("Serum albumin", "<3.0 g/dL (↓oncotic pressure)", "↓"),
("Total protein", "Low", "↓"),
("Plasma oncotic pressure", "Reduced (normal ~25 mmHg)", "↓"),
("Urine protein (if renal)", "May be >3.5 g/day (nephrotic)", "↑"),
("Serum sodium", "Low to normal (dilutional)", "↓"),
("Serum creatinine", "Elevated if renal cause", "↑"),
("ALT/AST", "Elevated if hepatic cause", "↑"),
("NT-proBNP (if cardiac)", "Elevated if cardiac cause", "↑"),
],
"hallmark": "✦ Low albumin <3.0 g/dL → ↓oncotic pressure → oedema\n✦ Pitting oedema; may have ascites, pleural effusion",
"note": "Common causes: nephrotic syndrome, cirrhosis,\nkwashiorkor, protein-losing enteropathy, heart failure"
},
{
"no": "18", "name": "Haemolytic Jaundice (Pre-hepatic)",
"defect": "Excessive RBC destruction overwhelms liver conjugation capacity → unconjugated bilirubin accumulates. Liver and biliary tract intact.",
"findings": [
("Total bilirubin", "Elevated", "↑"),
("Indirect (unconjugated) bili","Markedly elevated (dominant)", "↑"),
("Direct (conjugated) bili", "Normal / slightly elevated", "◆"),
("Urine bilirubin", "ABSENT (unconjugated = insoluble)", "◆"),
("Urine urobilinogen", "Markedly increased", "↑"),
("Stool colour", "Dark (↑stercobilin)", "↑"),
("ALT/AST/ALP", "Normal", "◆"),
("Haptoglobin", "Low (consumed by free Hb)", "↓"),
("LDH", "Elevated", "↑"),
("Reticulocyte count", "Elevated", "↑"),
],
"hallmark": "✦ ↑Indirect bili + NO urine bilirubin (acholuric jaundice)\n✦ ↑Urobilinogen + dark stools + normal liver enzymes",
"note": "Causes: sickle cell, G6PD deficiency, thalassaemia,\nautoimmune haemolytic anaemia, malaria, transfusion reaction"
},
{
"no": "19", "name": "Obstructive Jaundice (Post-hepatic)",
"defect": "Bile duct obstruction → conjugated bilirubin regurgitates into blood → dark urine + pale stools. ALP markedly elevated.",
"findings": [
("Total bilirubin", "Elevated", "↑"),
("Direct (conjugated) bili", "Markedly elevated (dominant)", "↑"),
("Urine bilirubin", "POSITIVE (conjugated = water-soluble) → dark urine", "↑"),
("Urine urobilinogen", "ABSENT (no bile reaching gut)", "↓"),
("Stool colour", "Pale/clay-coloured", "↓"),
("ALP", "Markedly elevated (>3× normal)", "↑"),
("GGT", "Elevated", "↑"),
("ALT/AST", "Mildly elevated", "↑"),
("PT", "Prolonged (↓Vit K absorption)", "↑"),
],
"hallmark": "✦ ↑Direct bili + Dark urine + Pale stools + ↑ALP\n✦ Absent urobilinogen = no bile in gut",
"note": "Causes: gallstones, carcinoma head of pancreas,\ncholangiocarcinoma, primary sclerosing cholangitis"
},
{
"no": "20", "name": "Hepatic (Hepatocellular) Jaundice",
"defect": "Hepatocyte damage → impaired conjugation + impaired secretion of bilirubin → both fractions elevated. Mixed pattern + markedly elevated transaminases.",
"findings": [
("Total bilirubin", "Elevated", "↑"),
("Direct bili", "Elevated (conjugated leaks)", "↑"),
("Indirect bili", "Elevated (impaired conjugation)", "↑"),
("ALT (SGPT)", "Markedly elevated (hallmark of hepatocyte damage)", "↑"),
("AST (SGOT)", "Markedly elevated", "↑"),
("AST:ALT ratio", ">2:1 in alcoholic hepatitis; <1 in viral", "↑"),
("ALP", "Mildly–moderately elevated", "↑"),
("Urine bilirubin", "Present", "↑"),
("Urine urobilinogen", "Variable (↑early, ↓late)", "◆"),
("Serum albumin / PT", "Low albumin + prolonged PT (severe)", "↓"),
],
"hallmark": "✦ Mixed bilirubin + Markedly ↑ALT/AST (hepatocyte necrosis)\n✦ AST:ALT >2:1 = alcoholic; <1 = viral hepatitis",
"note": "Causes: viral hepatitis A/B/C, alcoholic hepatitis,\ndrug-induced liver injury (DILI), cirrhosis, Wilson disease"
},
]
# ── PAGE 4: Renal + Organ-specific Cases 21–26 ──────────────────────────
cases_p4 = [
{
"no": "21", "name": "Normal Renal Function Test",
"defect": "Reference normal values for all renal function parameters. Normal glomerular filtration, tubular function, and electrolyte balance.",
"findings": [
("Serum creatinine", "0.6–1.2 mg/dL (M); 0.5–1.1 (F)", "◆"),
("BUN (blood urea nitrogen)", "7–20 mg/dL", "◆"),
("BUN:Creatinine ratio", "10:1 to 20:1", "◆"),
("eGFR", ">90 mL/min/1.73 m²", "◆"),
("Urine protein (dipstick)", "Negative (<150 mg/day)", "◆"),
("Urine RBCs", "0–2/hpf", "◆"),
("Serum K⁺", "3.5–5.0 mEq/L", "◆"),
("Serum Na⁺", "136–145 mEq/L", "◆"),
("Urine specific gravity", "1.010–1.030", "◆"),
],
"hallmark": "✦ All parameters within reference ranges\n✦ eGFR >90 = CKD Stage G1 (normal/high)",
"note": "CKD staging by eGFR: G1 >90, G2 60–89, G3a 45–59,\nG3b 30–44, G4 15–29, G5 <15 (kidney failure)"
},
{
"no": "22", "name": "Acute Glomerulonephritis",
"defect": "Immune complex deposition in glomeruli → complement activation → inflammation → haematuria + proteinuria + ↓GFR + HTN. Most common: post-streptococcal (PSGN).",
"findings": [
("Urine colour", "Smoky brown / cola-coloured", "↑"),
("Urine RBCs", "Numerous + RBC CASTS (pathognomonic)", "↑"),
("Urine WBCs", "Present", "↑"),
("Urine protein", "Moderate (1–3 g/day)", "↑"),
("Serum creatinine", "Elevated", "↑"),
("Serum C3 (complement)", "LOW — consumed by immune complexes", "↓"),
("ASLO titre", "Elevated (post-streptococcal GN)", "↑"),
("Blood pressure", "Hypertension", "↑"),
("Serum albumin", "Normal or slightly low", "◆"),
],
"hallmark": "✦ RBC CASTS in urine = pathognomonic\n✦ ↓C3 + ↑ASLO confirms post-streptococcal GN",
"note": "Causes: Group A β-haemolytic Streptococcus (most common),\nIgA nephropathy, SLE, Henoch-Schönlein purpura"
},
{
"no": "23", "name": "Nephrotic Syndrome",
"defect": "Glomerular filtration barrier disruption (podocyte injury) → massive protein leak → hypoalbuminaemia → ↓oncotic pressure → oedema + compensatory hyperlipidaemia.",
"findings": [
("Urine protein", ">3.5 g/day (massive — DEFINING)", "↑"),
("Serum albumin", "<3.0 g/dL (hypoalbuminaemia)", "↓"),
("Serum cholesterol", ">200 mg/dL (hyperlipidaemia)", "↑"),
("Serum triglycerides", "Elevated", "↑"),
("Urine lipids", "Oval fat bodies + Maltese cross (polarised)", "↑"),
("Serum creatinine", "Normal early; elevated later", "◆"),
("Urine RBCs / RBC casts", "Minimal (no haematuria typically)", "◆"),
("Serum complement (C3)", "Normal (minimal change disease)", "◆"),
("Serum IgG", "Low (lost in urine)", "↓"),
],
"hallmark": "✦ TETRAD: Massive proteinuria + ↓Albumin + Oedema + Hyperlipidaemia\n✦ Maltese cross fat bodies on microscopy",
"note": "Common causes: Minimal Change Disease (children),\nFocal Segmental GS, membranous nephropathy, DM, amyloid"
},
{
"no": "24", "name": "Myocardial Infarction (MI)",
"defect": "Coronary artery occlusion → myocardial ischaemia/necrosis → release of intracellular enzymes into blood. Troponin is gold standard marker.",
"findings": [
("Troponin I / Troponin T", "Elevated 3–6h; peak 12–24h; lasts 7–14 days", "↑"),
("CK-MB", "Elevated 4–6h; peak 18–24h; normal 48–72h", "↑"),
("Myoglobin", "Earliest rise (1–3h) but non-specific", "↑"),
("LDH (LD₁ > LD₂)", "Elevated 24–48h; peak 3–6 days", "↑"),
("AST", "Moderately elevated", "↑"),
("WBC", "Elevated (inflammatory response)", "↑"),
("ESR / CRP", "Elevated", "↑"),
("ECG", "ST elevation (STEMI) or depression (NSTEMI)", "↑"),
("Serum K⁺", "May be elevated or low (arrhythmia risk)", "◆"),
],
"hallmark": "✦ Troponin = gold standard (most sensitive + specific)\n✦ CK-MB used for re-infarction (normalises faster)",
"note": "Timeline: Myoglobin (1-3h) → Troponin (3-6h) → CK-MB (4-6h)\n→ LDH (24-48h). Troponin stays elevated longest."
},
{
"no": "25", "name": "Hypothyroidism",
"defect": "Thyroid hormone deficiency (primary: thyroid failure; secondary: pituitary TSH deficiency). Slows metabolism, reduces thermogenesis.",
"findings": [
("TSH", "Markedly elevated (primary hypothyroidism)", "↑"),
("Free T4 (FT4)", "Low (<0.8 ng/dL)", "↓"),
("Free T3 (FT3)", "Low", "↓"),
("Serum cholesterol (LDL)", "Elevated (↓LDL receptor expression)", "↑"),
("Serum triglycerides", "Elevated", "↑"),
("Serum CK", "Elevated (hypothyroid myopathy)", "↑"),
("Serum Na⁺", "Low (SIADH-like hyponatraemia)", "↓"),
("Haemoglobin", "Low (normocytic anaemia)", "↓"),
("TSH (2° hypothyroidism)", "Low or inappropriately normal", "↓"),
],
"hallmark": "✦ ↑TSH + ↓FT4 = primary hypothyroidism (most sensitive)\n✦ TSH is the single best screening test",
"note": "Normal TSH: 0.3–4.5 mIU/L\nTx: Levothyroxine (T4) replacement; re-check TSH in 6–8 weeks"
},
{
"no": "26", "name": "Acute Pancreatitis",
"defect": "Premature activation of pancreatic enzymes within acinar cells → auto-digestion → inflammation. Commonest causes: gallstones, alcohol.",
"findings": [
("Serum lipase", ">3× ULN (most specific; lasts up to 14 days)", "↑"),
("Serum amylase", ">3× ULN (rises 2–12h; normalises 3–5 days)", "↑"),
("WBC", "12,000–20,000/μL", "↑"),
("Blood glucose", "Elevated (glucagon ↑, insulin ↓)", "↑"),
("Serum calcium", "LOW — saponification (poor prognostic sign)", "↓"),
("Serum LDH", "Elevated", "↑"),
("ALT", "Elevated if gallstone-related (>3× = biliary cause)", "↑"),
("Serum triglycerides", "Elevated (may be causative if >1000 mg/dL)", "↑"),
("Haematocrit", "Elevated (haemoconcentration)", "↑"),
("BUN", "Elevated (pre-renal AKI)", "↑"),
],
"hallmark": "✦ Lipase >3× ULN = most specific biochemical test\n✦ ↓Ca²⁺ = poor prognostic sign (Ranson's criteria)",
"note": "Ranson's: glucose >200, LDH >350, AST >250, WBC >16,000, age >55\nDiagnosis: 2 of 3 criteria (pain + lipase + imaging)"
},
]
# ═══════════════════════════════════════════════════════════════════════════
# JAUNDICE COMPARISON TABLE (bonus — Page 5)
# ═══════════════════════════════════════════════════════════════════════════
def build_jaundice_table():
headers = ["Parameter", "Normal LFT\n(Case 16)", "Haemolytic Jaundice\n(Case 18)", "Obstructive Jaundice\n(Case 19)", "Hepatic Jaundice\n(Case 20)"]
cw = [4.5*cm, 4.8*cm, 5.5*cm, 5.5*cm, 5.5*cm]
def c(text, bold=False, col=None):
st = ParagraphStyle("jc", parent=cell_style,
fontName="Helvetica-Bold" if bold else "Helvetica",
textColor=col or BODY_TEXT, fontSize=7.0, leading=9.5)
return Paragraph(text, st)
rows = [
[H(h) for h in headers],
[c("Total Bilirubin",bold=True), c(f"{NORM} Normal\n0.3–1.2 mg/dL"), c(f"{UP} Elevated"), c(f"{UP} Elevated"), c(f"{UP} Elevated")],
[c("Indirect (Unconjugated)\nBilirubin",bold=True), c(f"{NORM} Normal\n0.2–0.8 mg/dL"), c(f"{UP} <b>Markedly ↑↑</b>\n(dominant fraction)", bold=True), c(f"{NORM} Normal / slight ↑"), c(f"{UP} Elevated")],
[c("Direct (Conjugated)\nBilirubin",bold=True), c(f"{NORM} Normal\n0–0.3 mg/dL"), c(f"{NORM} Normal / slight ↑"), c(f"{UP} <b>Markedly ↑↑</b>\n(dominant fraction)", bold=True), c(f"{UP} Elevated")],
[c("Urine Bilirubin",bold=True), c(f"{NORM} Absent"), c(f"{NORM} <b>ABSENT</b>\n(insoluble form)"), c(f"{UP} <b>PRESENT</b>\n(dark urine)", bold=True), c(f"{UP} Present")],
[c("Urine Urobilinogen",bold=True), c(f"{NORM} Normal (trace)"), c(f"{UP} <b>Markedly ↑↑</b>"), c(f"{DOWN} <b>ABSENT</b>\n(no bile in gut)", bold=True), c(f"{NORM} Variable")],
[c("Stool Colour",bold=True), c(f"{NORM} Normal brown"), c(f"{UP} Dark (↑stercobilin)"), c(f"{DOWN} <b>Pale/clay</b>\n(no stercobilin)"), c(f"{NORM} Normal to pale")],
[c("ALT / AST",bold=True), c(f"{NORM} Normal"), c(f"{NORM} Normal"), c(f"{NORM} Mildly elevated"), c(f"{UP} <b>Markedly ↑↑</b>\n(hepatocyte damage)")],
[c("ALP",bold=True), c(f"{NORM} Normal\n44–147 U/L"), c(f"{NORM} Normal"), c(f"{UP} <b>Markedly ↑↑</b>\n(>3× normal)"), c(f"{UP} Mildly–moderately ↑")],
[c("Serum Albumin / PT",bold=True), c(f"{NORM} Normal"), c(f"{NORM} Normal"), c(f"{DOWN} PT prolonged\n(↓Vit K absorption)"), c(f"{DOWN} ↓ Albumin\nPT prolonged (severe)")],
[c("Haptoglobin / LDH",bold=True), c(f"{NORM} Normal"), c(f"{DOWN} ↓ Haptoglobin\n{UP} ↑ LDH"), c(f"{NORM} Normal"), c(f"{NORM} Normal")],
[c("Reticulocyte Count",bold=True), c(f"{NORM} Normal (0.5–1.5%)"), c(f"{UP} Elevated (5–15%)\n(compensatory haematopoiesis)"), c(f"{NORM} Normal"), c(f"{NORM} Normal")],
[c("Key Finding",bold=True),
c(f"All parameters\nwithin normal range", bold=True),
c(f"★ <b>Acholuric jaundice</b>\n↑Indirect + no urine bili\n+ ↑urobilinogen", bold=True),
c(f"★ <b>Dark urine +\nPale stools + ↑ALP</b>", bold=True),
c(f"★ <b>Markedly ↑ALT/AST</b>\nMixed bilirubin pattern", bold=True)],
]
t = Table(rows, colWidths=cw, repeatRows=1)
st = TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,0), HEADER_TEXT),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.35, GREY_LIGHT),
("LINEBELOW", (0,0), (-1,0), 1.2, ACCENT),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("BACKGROUND", (0,1), (0,-1), LIGHT_BLUE),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
# Alternate data rows
("BACKGROUND", (1,2), (-1,2), ROW_ALT),
("BACKGROUND", (1,4), (-1,4), ROW_ALT),
("BACKGROUND", (1,6), (-1,6), ROW_ALT),
("BACKGROUND", (1,8), (-1,8), ROW_ALT),
("BACKGROUND", (1,10),(-1,10), ROW_ALT),
("BACKGROUND", (1,12),(-1,12), ROW_ALT),
# Highlight hallmarks in last row
("BACKGROUND", (1,12), (-1,12), colors.HexColor("#fef3c7")),
# Highlight dominant findings per column
("BACKGROUND", (2,2), (2,2), colors.HexColor("#fee2e2")), # haemolytic indirect ↑
("BACKGROUND", (3,3), (3,3), colors.HexColor("#fee2e2")), # obstructive direct ↑
("BACKGROUND", (3,5), (3,5), colors.HexColor("#fef3c7")), # obstructive urine bili
("BACKGROUND", (3,6), (3,6), colors.HexColor("#d1fae5")), # obstructive urobilinogen absent
("BACKGROUND", (4,8), (4,8), colors.HexColor("#fee2e2")), # hepatic ALT ↑↑
])
t.setStyle(st)
return t
# ═══════════════════════════════════════════════════════════════════════════
# ASSEMBLE
# ═══════════════════════════════════════════════════════════════════════════
elements = []
# Page 1
elements += make_title_block(
"Major Cases Reference Card — Biochemistry Lab Practical",
"Cases 1–7: Glucose Tolerance Test (GTT) Patterns | ▲ Increased ▼ Decreased ◆ Normal/Special"
)
elements.append(build_case_table(cases_p1))
elements.append(PageBreak())
# Page 2
elements += make_title_block(
"Major Cases Reference Card — Biochemistry Lab Practical",
"Cases 8–14: Ketosis & Acid-Base Disorders | ▲ Increased ▼ Decreased ◆ Normal/Special"
)
elements.append(build_case_table(cases_p2))
elements.append(PageBreak())
# Page 3
elements += make_title_block(
"Major Cases Reference Card — Biochemistry Lab Practical",
"Cases 15–20: Nutritional Disorders, Oedema & Jaundice | ▲ Increased ▼ Decreased ◆ Normal/Special"
)
elements.append(build_case_table(cases_p3))
elements.append(PageBreak())
# Page 4
elements += make_title_block(
"Major Cases Reference Card — Biochemistry Lab Practical",
"Cases 21–26: Renal Function, MI, Hypothyroidism & Acute Pancreatitis | ▲ Increased ▼ Decreased ◆ Normal/Special"
)
elements.append(build_case_table(cases_p4))
elements.append(PageBreak())
# Page 5: Jaundice Comparison
elements += make_title_block(
"Major Cases Reference Card — Biochemistry Lab Practical",
"Jaundice Comparison Table: Cases 16, 18, 19, 20 — Side-by-Side LFT Pattern Analysis"
)
intro = (
"<b>Jaundice</b> = serum bilirubin >2.5 mg/dL (visible scleral icterus). "
"The three types differ in the fraction of bilirubin elevated, urine/stool findings, and enzyme patterns. "
"<b>★</b> = hallmark finding. "
f"<b>{UP} Red ▲</b> = elevated | "
f"<b>{DOWN} Blue ▼</b> = decreased | "
f"<b>{NORM} Green ◆</b> = normal"
)
elements.append(Paragraph(intro, ParagraphStyle("intro2", parent=cell_style, fontSize=7.5, spaceAfter=5)))
elements.append(build_jaundice_table())
elements.append(Spacer(1, 0.3*cm))
# Legend
legend_data = [[
Paragraph(f'{UP} <b>▲ Increased</b>', cell_style),
Paragraph(f'{DOWN} <b>▼ Decreased</b>', cell_style),
Paragraph(f'{NORM} <b>◆ Normal / Special</b>', cell_style),
Paragraph('<b>★ = Hallmark / Pathognomonic</b>', cell_style),
Paragraph('All values approximate — confirm with local laboratory reference ranges', note_style),
]]
lt = Table(legend_data, colWidths=[3.2*cm, 3.2*cm, 4.2*cm, 6.5*cm, 8.5*cm])
lt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#f8fafc")),
("BOX", (0,0), (-1,-1), 0.5, GREY_LIGHT),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
elements.append(lt)
doc.build(elements, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/major-cases-pdf && python build_pdf.py 2>&1
ls -lh /home/daytona/workspace/major-cases-pdf/Major_Cases_Reference_Card.pdf
Major Cases Reference Card
PDF Document · PDF
| Page | Cases | Content |
|---|---|---|
| 1 | 1–7 | GTT Patterns (Normal GTT, Type II DM, Renal Glycosuria, Abnormal GTT, 3 GTT graphs) |
| 2 | 8–14 | Ketosis & Acid-Base Disorders (Starvation Ketosis, DKA, Normal ABG, Met. Acidosis, Met. Alkalosis, Resp. Acidosis, Resp. Alkalosis) |
| 3 | 15–20 | Nutritional, Oedema & Jaundice (Kwashiorkor, Normal LFT, Oedema, Haemolytic, Obstructive, Hepatic Jaundice) |
| 4 | 21–26 | Renal Function, MI, Hypothyroidism, Acute Pancreatitis |
| 5 | 18–20 | Bonus: Jaundice Comparison Table — all 4 jaundice patterns side-by-side with every parameter |
| Property | Normal Finding | Clinical Significance |
|---|---|---|
| Volume | 1000–1500 mL/24 hours | <400 mL = oliguria; <100 mL = anuria; >2500 mL = polyuria |
| Colour | Pale yellow to amber (due to urochrome pigment) | Dark yellow = concentrated; colourless = dilute; red-brown = haematuria/haemoglobinuria |
| Transparency | Clear (transparent) | Turbid = infection, phosphaturia, pyuria, chyluria |
| Odour | Faintly aromatic (due to volatile organic acids) | Fruity/sweet = ketones (DKA); ammoniacal = UTI/old sample; fishy = trimethylaminuria |
| Specific gravity | 1.010–1.030 | Fixed at 1.010 = isosthenuria (renal tubular failure); >1.030 = concentrated; <1.003 = overhydration/diabetes insipidus |
| pH | 4.6–8.0 (average 6.0 = slightly acidic) | Acidic in protein-rich diets, fever, DKA; alkaline in UTI, vegetarian diet, RTA |
| Deposit/Sediment | None on standing | Phosphate precipitate = white; urate = pink "brick dust" |
| Constituent | Normal Excretion / Day | Notes |
|---|---|---|
| Urea | 20–35 g/day | Largest organic constituent; ~90% of total urinary nitrogen; end-product of protein catabolism |
| Creatinine | 1–2 g/day (men); 0.8–1.8 g/day (women) | Derived from creatine phosphate in muscle; constant daily excretion (reflects muscle mass) |
| Uric acid | 250–750 mg/day | End-product of purine metabolism (xanthine oxidase pathway); insoluble in acid urine |
| Ammonia | 30–50 mEq/day (0.5–1.0 g/day) | Produced in renal tubules from glutamine; buffers urine acidity |
| Amino acids | 1–3 g/day (small amounts) | Overflow from plasma; increased in liver failure, Fanconi syndrome |
| Hippuric acid | <1 g/day | Conjugation product of benzoic acid + glycine |
| Creatine | Trace (<150 mg/day in men) | Elevated in children, pregnancy, muscle disease |
| Urobilinogen | 0.5–4.0 mg/day (trace) | Formed in gut from bilirubin; small amount reabsorbed and excreted in urine |
| Pigments (urochrome) | Variable | Responsible for yellow colour |
| Constituent | Normal Excretion / Day | Notes |
|---|---|---|
| Chloride (Cl⁻) | 110–250 mEq/day | Largest inorganic constituent; reflects dietary salt intake |
| Sodium (Na⁺) | 130–260 mEq/day | Varies with diet; low in hypovolaemia, adrenal insufficiency |
| Potassium (K⁺) | 25–125 mEq/day | Low in hypokalaemia; high in hyperaldosteronism |
| Phosphate (PO₄³⁻) | 0.4–1.3 g/day | Important urinary buffer (titratable acid) |
| Sulphate (SO₄²⁻) | 1.5–3.0 g/day | From amino acid catabolism (methionine, cysteine) |
| Calcium (Ca²⁺) | 100–300 mg/day | Low in rickets, hypoparathyroidism; high in hypercalcaemia |
| Magnesium (Mg²⁺) | 6–8 mEq/day | Variable |
| Parameter | Normal Result |
|---|---|
| Glucose | Negative |
| Protein | Negative (trace may be normal: <10 mg/dL) |
| Ketones | Negative |
| Blood / Hb | Negative |
| Bilirubin | Negative |
| Urobilinogen | Trace (0.1–1.0 mg/dL = normal) |
| Nitrites | Negative |
| Leukocyte esterase | Negative |
| pH | 5.0–7.0 |
| Specific gravity | 1.010–1.030 |
| Step | Detail |
|---|---|
| Reagent | Benedict's reagent = Sodium carbonate + Sodium citrate + Copper sulphate (CuSO₄) in alkaline solution |
| Principle | Reducing sugars (glucose, galactose, fructose, lactose) reduce Cu²⁺ (blue) to Cu⁺ (cuprous oxide = brick-red precipitate) in hot alkaline conditions |
| Procedure | Add 5 drops urine to 5 mL Benedict's reagent; heat in boiling water bath 5 minutes |
| Result - Positive | Green → Yellow → Orange → Brick-red precipitate |
| Result - Negative | Solution remains blue (no reducing substance) |
| Important | Benedict's is a test for REDUCING SUGARS — NOT specific for glucose |
| Colour | Approximate Glucose Concentration |
|---|---|
| Blue (negative) | <0.5 g% |
| Green turbid (+) | ~0.5 g% |
| Yellow (+++) | ~1.0 g% |
| Orange (++) | ~1.5 g% |
| Brick red (++++) | >2.0 g% |
| Principle | Glucose oxidase converts glucose → gluconic acid + H₂O₂ → H₂O₂ + chromogen → colour change |
|---|---|
| Advantage | Specific for D-glucose only (unlike Benedict's) |
| Limitation | False negatives with ascorbic acid; false positives with oxidising agents |
| Condition | Blood Glucose | Mechanism |
|---|---|---|
| Type 1 / Type 2 Diabetes Mellitus | High (>180 mg/dL) | Hyperglycaemia exceeds renal threshold → glucose spills into urine |
| Renal Glycosuria | Normal | Renal tubular defect (low Tmax or threshold); glucose in urine despite normal blood glucose |
| Gestational Diabetes | High | Reduced renal threshold in pregnancy + hyperglycaemia |
| Cushing syndrome | High | Cortisol-induced hyperglycaemia |
| Stress hyperglycaemia | High (transient) | Adrenaline → gluconeogenesis |
| Galactosuria | Normal blood glucose | Galactosemia; Benedict's positive but glucose oxidase NEGATIVE (galactose is not glucose) |
| Fructosuria (HFI) | Normal | Aldolase B deficiency; reducing sugar in urine |
| Step | Detail |
|---|---|
| Reagent | Rothera's reagent = Ammonium sulphate + Sodium nitroprusside (sodium nitroferricyanide); concentrated ammonia |
| Principle | Acetoacetate and acetone react with sodium nitroprusside in alkaline conditions → purple/violet colour |
| Procedure | Add Rothera's powder to urine; add conc. ammonia along sides of tube |
| Positive result | Purple/violet ring at the interface (within 2 minutes) |
| Negative result | No colour change / brown ring only |
| Note | Does NOT detect β-hydroxybutyrate (the predominant ketone in DKA) |
| Reagent | 10% Ferric chloride (FeCl₃) solution |
|---|---|
| Principle | FeCl₃ reacts with acetoacetate → Bordeaux red / port wine colour |
| Procedure | Add a few drops 10% FeCl₃ to urine |
| Positive | Bordeaux red / wine-red colour |
| Interference | Salicylates also give a purple colour → distinguish by heating (salicylate colour persists; acetoacetate colour disappears on heating) |
| Condition | Mechanism |
|---|---|
| Diabetic Ketoacidosis (DKA) | Absolute insulin deficiency → massive lipolysis → massive ketogenesis; glucose >250 + ketonuria + acidosis |
| Starvation / Prolonged fasting | Relative insulin deficiency → mild ketosis; glucose low/normal; mild ketonuria |
| Alcoholic ketoacidosis | Alcohol + poor nutrition → ketosis; glucose may be normal or low |
| Prolonged vomiting | Starvation effect → ketosis |
| High-fat low-carb diet | Physiological ketosis (no acidosis) |
| Febrile illness in children | Increased metabolic demand + poor intake → starvation ketosis |
| Pregnancy (morning sickness) | Starvation effect → mild ketonuria |
| Feature | DKA | Starvation Ketosis |
|---|---|---|
| Blood glucose | >250 mg/dL | Low/normal |
| Urine glucose | Strongly positive | Negative |
| Urine ketones | Strongly positive | Mildly positive |
| pH | <7.30 | Normal to slightly ↓ |
| Severity | Life-threatening | Mild, self-limiting |
| Step | Detail |
|---|---|
| Procedure | Fill test tube 2/3 with urine; heat upper portion in flame until boiling; observe for turbidity/precipitate; add 2–3 drops 5% acetic acid; re-observe |
| Positive | White turbidity/precipitate forms on heating; persists or increases on adding acetic acid |
| Negative | No turbidity, or turbidity disappears on adding acetic acid |
| Principle | Heat denatures proteins → precipitate. Acetic acid: dissolves phosphate precipitate (false positive) and urates, while protein precipitate persists or increases |
| Why add acid? | To distinguish protein precipitate from phosphate precipitate (phosphates dissolve in acid; protein does not) |
| Step | Detail |
|---|---|
| Procedure | Carefully layer concentrated nitric acid under urine in a test tube (tilt tube) |
| Positive | White ring at interface of acid and urine |
| Negative | No white ring |
| Principle | Concentrated HNO₃ denatures proteins → white precipitate at interface |
| Note | Yellow ring = urates (not protein); red ring = bile pigments (bilirubin) — interpret carefully |
| Procedure | Add 3-5 drops 3% SSA to urine |
|---|---|
| Positive | White turbidity/precipitate |
| Advantage | More sensitive than heat test; detects all proteins including Bence-Jones (myeloma) |
| Note | False positive with X-ray contrast media, penicillin |
| Grade | Approximate Protein |
|---|---|
| Negative | <10 mg/dL |
| Trace | 10–20 mg/dL |
| 1+ | ~30 mg/dL |
| 2+ | ~100 mg/dL |
| 3+ | ~300 mg/dL |
| 4+ | >2000 mg/dL |
| Condition | Degree | Type | Notes |
|---|---|---|---|
| Nephrotic syndrome | Massive (>3.5 g/day) | Glomerular (selective) | Minimal change disease, membranous nephropathy, FSGS |
| Acute glomerulonephritis | Moderate (1–3 g/day) | Glomerular (non-selective) | + haematuria + RBC casts |
| Chronic kidney disease | Variable | Glomerular/tubular | Progressive |
| Pre-eclampsia | >300 mg/day | Glomerular | + hypertension after 20 weeks |
| Multiple myeloma | Variable (Bence-Jones) | Overflow | Light chains; missed on dipstick; SSA positive |
| Fever / exercise | Transient, mild | Functional | Self-resolving |
| Orthostatic proteinuria | Mild | Postural | Young adults; present when upright, absent when supine |
| UTI/pyelonephritis | Mild | Tubular | + WBCs + bacteria |
| Diabetic nephropathy | Microalbuminuria → macro | Glomerular | 30–300 mg/day = microalbuminuria (early marker) |
| Principle | Haemoglobin + peroxidase activity → oxidises chromogen → colour change (green to blue) |
|---|---|
| Positive | Green or blue-green colour on dipstick |
| Detects | Both intact RBCs AND free haemoglobin/myoglobin |
| Sensitivity | 91–100% for haematuria |
| Note | Positive for both haematuria AND haemoglobinuria AND myoglobinuria — microscopy needed to distinguish |
| Finding | Significance |
|---|---|
| RBCs >3/hpf | Haematuria (actual red blood cells present) |
| Dysmorphic RBCs (acanthocytes) | Glomerular origin |
| RBC casts | Glomerulonephritis (pathognomonic) |
| No RBCs but dipstick positive | Haemoglobinuria or myoglobinuria |
| Feature | Haematuria | Haemoglobinuria | Myoglobinuria |
|---|---|---|---|
| Urine colour | Red/pink | Red-brown (clear) | Dark red-brown/cola |
| Dipstick blood | Positive | Positive | Positive |
| Urine microscopy RBCs | Present (>3/hpf) | Absent | Absent |
| Serum haptoglobin | Normal | Low (consumed) | Normal |
| Serum CK | Normal | Normal | Markedly elevated |
| Plasma haemoglobin | Normal | Elevated (pink plasma) | Normal |
| Cause | Stones, UTI, GN, tumour | Haemolysis, paroxysmal Hb-uria, march Hb-uria | Rhabdomyolysis, crush injury, statin myopathy |
| Cause | Type | Key Features |
|---|---|---|
| Acute glomerulonephritis | Glomerular (microscopic) | RBC casts + proteinuria + ↓C3 |
| IgA nephropathy | Glomerular | Episodic gross haematuria after URTI |
| Nephrolithiasis (stones) | Post-glomerular | Colicky flank pain; calcium oxalate crystals |
| UTI/Cystitis | Lower tract | Dysuria + frequency + WBCs + bacteria |
| Bladder carcinoma | Lower tract | Painless haematuria in elderly smoker |
| Renal cell carcinoma | Upper tract | Flank pain + mass + haematuria triad |
| Trauma | Any level | History of injury |
| Haemophilia / anticoagulants | Systemic | Coagulopathy |
| SLE nephritis | Glomerular | ANA positive + systemic features |
| Step | Detail |
|---|---|
| Principle | Bile salts (sodium taurocholate, sodium glycocholate) lower the surface tension of urine. Fine sulphur powder floats on normal urine (high surface tension) but sinks in urine containing bile salts (low surface tension). |
| Procedure | Sprinkle very fine precipitated sulphur powder on the surface of urine at room temperature |
| Positive | Sulphur powder SINKS (reduced surface tension due to bile salts) |
| Negative | Sulphur powder floats |
| Important | Test must be done at room temperature (warm urine reduces surface tension non-specifically) |
| Condition | Bile Salts in Urine | Mechanism |
|---|---|---|
| Obstructive jaundice | Positive (strongly) | Conjugated bilirubin + bile salts regurgitated into blood → filtered in urine |
| Hepatocellular jaundice | Positive | Damaged hepatocytes release bile constituents into blood |
| Haemolytic jaundice | Negative | Liver and biliary tract intact; only unconjugated bilirubin elevated (insoluble) |
| Normal | Negative | Bile salts do not enter blood under normal conditions |
| Principle | BaCl₂ precipitates bilirubin from urine; Fouchet's reagent (FeCl₃ + trichloroacetic acid) oxidises bilirubin → green (biliverdin) |
|---|---|
| Procedure | Add BaCl₂ to urine → filter → place Fouchet's reagent on filter paper |
| Positive | Green colour on filter paper |
| Negative | No colour change |
| Principle | Concentrated HNO₃ oxidises bilirubin through a series of colour changes (green → blue → violet → red → yellow) |
|---|---|
| Procedure | Layer concentrated HNO₃ under urine in a test tube |
| Positive | Play of colours (green band = biliverdin, blue/violet, red, yellow from outer to inner) |
| Negative | Only yellow ring (nitric acid-urate interface) |
| Note | This is more sensitive; the characteristic spectrum of colours = positive |
| Reagent | Ehrlich's reagent = Para-dimethylaminobenzaldehyde (DMAB) in concentrated HCl |
|---|---|
| Principle | Urobilinogen + Ehrlich's reagent (aldehyde) → pink/cherry-red colour in acid medium |
| Procedure | Add 2 mL Ehrlich's reagent to 10 mL urine; mix |
| Positive | Cherry-red / pink colour immediately or within 5 minutes |
| Negative | Yellow/no colour |
| Dilution test | Positive in dilutions 1:20 or beyond = significant |
| Note | Porphobilinogen (PBG) also gives a positive Ehrlich's test — distinguished by solvent extraction (urobilinogen extracted into chloroform; PBG is NOT) |
| Parameter | Normal | Haemolytic Jaundice (Pre-hepatic) | Obstructive Jaundice (Post-hepatic) | Hepatocellular Jaundice |
|---|---|---|---|---|
| Urine bilirubin | Absent | Absent (unconjugated = insoluble) | Strongly positive (dark urine) | Positive |
| Urine urobilinogen | Trace | Markedly increased | Absent (no bile reaches gut) | Variable (↑ early, ↓ late) |
| Bile salts (Hay's) | Negative | Negative | Strongly positive | Positive |
| Stool colour | Normal brown | Dark (↑stercobilin) | Pale/clay (no stercobilin) | Normal to pale |
| Serum indirect bili | Normal | Markedly elevated | Normal/slight ↑ | Elevated |
| Serum direct bili | Normal | Normal | Markedly elevated | Elevated |
| Constituent | Test | Positive Result | Associated Pathology |
|---|---|---|---|
| Glucose | Benedict's | Brick-red precipitate | DM, renal glycosuria |
| Glucose (specific) | Glucose oxidase strip | Green/blue colour change | DM (not other reducing sugars) |
| Ketones | Rothera's | Purple ring at interface | DKA, starvation, alcoholic ketosis |
| Ketones | Gerhardt's (FeCl₃) | Bordeaux red | Acetoaceturia |
| Protein | Heat + acetic acid | White precipitate persists | Nephrotic syndrome, GN, myeloma |
| Protein | Heller's (nitric acid) | White ring at interface | Proteinuria any cause |
| Blood | Dipstick | Green/blue | Haematuria, haemoglobinuria |
| Bilirubin | Fouchet's | Green on filter paper | Obstructive/hepatic jaundice |
| Bilirubin | Gmelin's | Play of colours (green-blue-red) | Obstructive/hepatic jaundice |
| Urobilinogen | Ehrlich's | Cherry-red colour | Haemolytic/hepatic jaundice |
| Bile salts | Hay's sulphur | Sulphur sinks | Obstructive/hepatic jaundice |