Asking for Preferences
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
I now have comprehensive data from authoritative biochemistry and clinical textbooks. Here is the full explanation for all 26 major cases:

List of Major Cases - Lab Values & Interpretations


GROUP 1: Glucose Tolerance Test (GTT) Cases (1-7)

The Oral GTT involves measuring plasma glucose fasting, then at 1h, 2h (and sometimes 3h) after a 75g oral glucose load (or 100g in gestational diabetes screening).

1. Normal GTT

Time PointPlasma Glucose
Fasting< 100 mg/dL (< 5.6 mmol/L)
1 hour< 180 mg/dL
2 hours< 140 mg/dL (< 7.8 mmol/L)
Interpretation: Blood glucose rises after glucose load and returns to fasting within 2 hours. Normal beta-cell insulin secretion and peripheral tissue sensitivity. Urine: No glucose (glycosuria absent) because plasma stays below the renal threshold of ~180 mg/dL.

2. Type II Diabetes Mellitus

Time PointPlasma Glucose
Fasting≥ 126 mg/dL (≥ 7.0 mmol/L)
2 hours≥ 200 mg/dL (≥ 11.1 mmol/L)
Interpretation: Fasting hyperglycemia + failure of glucose to return to normal at 2h. Caused by insulin resistance with relative insulin deficiency. Urine: Glycosuria present (plasma glucose exceeds renal threshold). Other markers: HbA1c ≥ 6.5%.
(Harrison's Principles of Internal Medicine 22E, Table 415-2)

3. Renal Glycosuria

TestResult
Blood glucose (fasting)Normal (< 100 mg/dL)
Oral GTT curveNormal (glucose returns to baseline in 2h)
Urine glucosePositive (glycosuria present)
Urine ketonesAbsent
Interpretation: Glucose appears in urine despite normal blood glucose levels. Cause: defective tubular reabsorption of glucose (low renal threshold or reduced Tmax for glucose). The SGLT2 transporter is dysfunctional. GTT curve is entirely normal - the problem is renal, not metabolic. No treatment needed, just reassurance.
(Guyton & Hall Medical Physiology; Smith & Tanagho's General Urology)

4. Abnormal GTT - DM

Time PointResult
Fasting≥ 126 mg/dL
1h> 200 mg/dL
2h≥ 200 mg/dL
Interpretation: Diagnostically confirming Diabetes Mellitus. The glucose curve shows high fasting, exaggerated peak, and sustained elevation at 2h without returning to normal. Confirms impaired insulin release and/or peripheral insulin resistance.

5. GTT Graph - Normal

The normal GTT graph shows:
  • Fasting glucose: ~80-100 mg/dL
  • Smooth rise peaking at ~140 mg/dL by 30-60 min
  • Smooth return below 140 mg/dL at 2h
  • No hypoglycemic dip

6. GTT Graph - Type II Diabetes Mellitus

The diabetic GTT graph shows:
  • Elevated fasting baseline (≥ 126 mg/dL)
  • Exaggerated peak (> 200 mg/dL)
  • Sustained elevation at 2h (≥ 200 mg/dL)
  • Curve fails to return to normal

7. GTT Graph - Renal Glycosuria

The renal glycosuria GTT graph shows:
  • Blood glucose curve: identical to Normal GTT (normal fasting, normal peak, normal 2h return)
  • Urine glucose: positive at one or more time points despite normal blood glucose
  • The discordance between blood and urine glucose is the diagnostic feature

GROUP 2: Ketosis & Acid-Base Disorders (8-14)

8. Starvation Ketosis

ParameterResult
Blood glucoseLow-normal (60-80 mg/dL)
Serum ketonesMildly elevated (β-hydroxybutyrate + acetoacetate)
Urine ketonesPositive
Anion gapMildly elevated (mild anion gap metabolic acidosis)
pHNormal to slightly decreased (7.35-7.4)
HCO₃⁻Slightly decreased
InsulinVery low
GlucagonElevated
Interpretation: Prolonged fasting → relative insulin deficiency → increased lipolysis → fatty acid oxidation → ketone body synthesis (acetoacetate, β-hydroxybutyrate, acetone). Mild, self-limiting. No significant hyperglycemia. Differentiating from DKA: no hyperglycemia, no severe acidosis.
(Comprehensive Clinical Nephrology 7e; Harriet Lane Handbook)

9. Diabetic Ketoacidosis (DKA)

ParameterResult
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 gapHigh (> 12 mEq/L)
Serum ketonesStrongly positive
Urine glucose + ketonesBoth positive
Serum K⁺Initially elevated (acidosis shifts K⁺ out of cells), falls with treatment
Serum Na⁺Low or normal
Interpretation: Absolute insulin deficiency (Type 1 DM, or severe Type 2) → massive ketone production → high anion gap metabolic acidosis + hyperglycemia + ketonemia/ketonuria. Life-threatening. Treatment: IV fluids, insulin infusion, K⁺ replacement.
(National Kidney Foundation Primer; Tintinalli's Emergency Medicine)

10. Normal Acid-Base Status

ParameterNormal Value
pH7.35 - 7.45
pCO₂35 - 45 mmHg
HCO₃⁻22 - 26 mEq/L
pO₂80 - 100 mmHg
Base excess-2 to +2 mEq/L
Anion gap8-12 mEq/L
Interpretation: All parameters within reference range. Respiratory and metabolic components balanced.

11. Metabolic Acidosis

ParameterResult
pH< 7.35
HCO₃⁻< 22 mEq/L (primary decrease)
pCO₂Low (compensatory hyperventilation; ΔpCO₂ = ΔHCO₃⁻ × 1.2)
Anion gapHigh (DKA, uremia, lactic acidosis) OR Normal (diarrhea, RTA)
Causes (High AG - MUDPILES): Methanol, Uremia, DKA, Propylene glycol, Isoniazid/Iron, Lactic acidosis, Ethylene glycol, Salicylates. Causes (Normal AG): Diarrhea (HCO₃⁻ loss), Renal tubular acidosis, Ureteral diversion.
(Harriet Lane Handbook; Comprehensive Clinical Nephrology 7e)

12. Metabolic Alkalosis

ParameterResult
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
Common causes: Vomiting (H⁺/Cl⁻ loss), diuretic use, hyperaldosteronism, excess antacid intake.
(Henry's Clinical Diagnosis; Comprehensive Clinical Nephrology 7e)

13. Respiratory Acidosis

ParameterResult
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
Causes: Hypoventilation (COPD, sedatives, neuromuscular disease, airway obstruction), CO₂ retention.
(Henry's Clinical Diagnosis and Management by Laboratory Methods)

14. Respiratory Alkalosis

ParameterResult
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
Causes: Hyperventilation (anxiety/panic, pain, high altitude, fever, salicylate poisoning early phase, mechanical overventilation, hepatic failure).
(Henry's Clinical Diagnosis; Swanson's Family Medicine)

GROUP 3: Nutritional & Protein Disorders (15, 17)

15. Kwashiorkor

ParameterResult
Serum albuminMarkedly low (< 2.8 g/dL; normal 3.5-5.5 g/dL)
Total proteinLow
Serum glucoseLow-normal
Urine ureaLow (protein catabolism reduced)
HemoglobinLow (anemia)
EdemaPresent (pitting edema, ascites, "potbelly")
Fatty liverElevated liver enzymes, fatty change on biopsy
Interpretation: Protein-deficient but calorie-adequate malnutrition (common in weaned children with carbohydrate-heavy diets). Low albumin → reduced oncotic pressure → edema. Insulin is not suppressed (carbs present), so fat mobilization is limited - fat accumulates in liver. Key feature: edema despite adequate caloric intake.
(Lippincott's Illustrated Biochemistry 8e; Harper's Illustrated Biochemistry)

17. Edema (in context of hypoalbuminemia)

ParameterResult
Serum albuminLow (< 3.0 g/dL)
Total proteinLow
Plasma oncotic pressureReduced
Interpretation: Low serum albumin (from kwashiorkor, nephrotic syndrome, liver disease) → decreased colloid osmotic pressure → fluid shifts from intravascular to interstitial compartment → peripheral and pulmonary edema.

GROUP 4: Liver Function Tests & Jaundice (16, 18, 19, 20)

16. Normal Liver Function Test (LFT)

TestNormal Value
Total bilirubin0.3 - 1.2 mg/dL
Direct (conjugated) bilirubin0 - 0.3 mg/dL
Indirect (unconjugated) bilirubin0.2 - 0.8 mg/dL
ALT (SGPT)7 - 40 U/L
AST (SGOT)10 - 40 U/L
ALP44 - 147 U/L
GGT5 - 40 U/L
Total protein6.4 - 8.3 g/dL
Albumin3.5 - 5.5 g/dL
PT/INRNormal

18. Hemolytic Jaundice (Pre-hepatic)

ParameterResult
Total bilirubinElevated
Indirect (unconjugated) bilirubinMarkedly elevated
Direct (conjugated) bilirubinNormal/slightly elevated
Urine bilirubinAbsent (unconjugated is not water-soluble)
Urine urobilinogenMarkedly increased
Stool colorDark (increased stercobilin)
ALT/ASTNormal
HaptoglobinLow (consumed by free Hb)
LDHElevated
Reticulocyte countElevated
Cause: Excessive RBC destruction (sickle cell, G6PD deficiency, thalassemia, malaria). Liver is overwhelmed conjugating bilirubin. No bilirubin in urine = "acholuric jaundice."
(Guyton & Hall; Harper's Illustrated Biochemistry; Lippincott's Biochemistry 8e)

19. Obstructive Jaundice (Post-hepatic)

ParameterResult
Total bilirubinElevated
Direct (conjugated) bilirubinMarkedly elevated
Urine bilirubinPositive (conjugated is water-soluble → dark urine)
Urine urobilinogenAbsent (bile cannot reach gut)
Stool colorPale/clay-colored (no stercobilin reaching gut)
ALPMarkedly elevated
GGTElevated
ALT/ASTMildly elevated
PTProlonged (fat-soluble vitamin K malabsorption)
Cause: Bile duct obstruction (gallstones, carcinoma of pancreatic head, cholangiocarcinoma, strictures).
(Harper's Illustrated Biochemistry; Guyton & Hall)

20. Hepatic Jaundice (Hepatocellular)

ParameterResult
Total bilirubinElevated
Both direct & indirect bilirubinElevated (mixed)
ALT/ASTMarkedly elevated (hepatocyte destruction)
ALPMildly-moderately elevated
Urine bilirubinPresent (conjugated leaks)
Urine urobilinogenVariable (may be increased early, absent later)
AlbuminLow (chronic liver disease)
PTProlonged
Cause: Viral hepatitis (A, B, C), alcoholic liver disease, cirrhosis, drug-induced hepatotoxicity. Key marker: dramatically elevated transaminases (ALT > AST in viral; AST > ALT in alcoholic).
(Tintinalli's Emergency Medicine; Harper's Illustrated Biochemistry)

GROUP 5: Renal Function Tests (21, 22, 23)

21. Normal Renal Function Test

TestNormal Value
Serum creatinine0.6 - 1.2 mg/dL (males); 0.5 - 1.1 mg/dL (females)
Blood urea nitrogen (BUN)7 - 20 mg/dL
BUN:Creatinine ratio10:1 to 20:1
eGFR> 90 mL/min/1.73 m²
Urine protein< 150 mg/day
Urine protein (dipstick)Negative
Urine RBCs0-2/hpf
Serum K⁺3.5 - 5.0 mEq/L
Serum Na⁺136 - 145 mEq/L
Urine specific gravity1.010 - 1.030

22. Acute Glomerulonephritis

ParameterResult
Urine colorSmoky brown / cola-colored ("hematuria")
Urine RBCsNumerous + RBC casts (pathognomonic)
Urine proteinModerate proteinuria (1-3 g/day)
Urine WBCsPresent
Serum creatinineElevated
BUNElevated
eGFRReduced
Serum C3 (complement)Low (consumed in immune complex deposition)
ASLO titerElevated (post-streptococcal GN)
BPHypertension
Serum albuminNormal or slightly low
EdemaPeriorbital edema (especially morning)
Interpretation: Most commonly post-streptococcal (Group A beta-hemolytic Streptococcus). Immune complex deposition in glomeruli → inflammation → hematuria + proteinuria + reduced GFR + hypertension. The RBC cast in urine is the hallmark.
(Henry's Clinical Diagnosis; Medical Microbiology 9e)

23. Nephrotic Syndrome

ParameterResult
Urine protein> 3.5 g/day (massive proteinuria - defining feature)
Serum albumin< 3.0 g/dL (hypoalbuminemia)
Serum cholesterol> 200 mg/dL (hyperlipidemia)
Urine lipidsLipiduria ("oval fat bodies," "Maltese cross" under polarized light)
EdemaSevere (periorbital, peripheral, ascites)
Urine RBCsMinimal (no hematuria usually)
Urine RBC castsAbsent
Serum creatinineNormal early; may be elevated later
ComplementNormal (in minimal change disease)
Classic tetrad: Massive proteinuria + Hypoalbuminemia + Edema + Hyperlipidemia.
Mechanism: Disruption of glomerular filtration barrier (podocyte injury) → protein leak → low oncotic pressure → edema. Liver compensates by synthesizing lipoproteins → hyperlipidemia.
(Goldman-Cecil Medicine; Lippincott's Biochemistry 8e)

GROUP 6: Organ-Specific Disease Markers (24, 25, 26)

24. Myocardial Infarction (MI)

ParameterResultTime of Rise
Troponin I / Troponin TElevatedRises 3-6h, peaks 12-24h, stays elevated 7-14 days
CK-MBElevatedRises 4-6h, peaks 18-24h, normalizes 48-72h
LDH (LD1 > LD2)ElevatedRises 24-48h, peaks 3-6 days
MyoglobinElevated earlyRises 1-3h (earliest, but non-specific)
ASTModerately elevated
WBCElevated (inflammatory response)
ESRElevated
ECGST elevation (STEMI) or ST depression (NSTEMI)
Interpretation: Death of myocardial tissue releases intracellular enzymes. Troponin is the gold standard - most sensitive and specific. CK-MB used for reinfarction detection (normalizes faster).
(Fishman's Pulmonary Diseases; Neuroanatomy Through Clinical Cases)

25. Hypothyroidism

ParameterResult
TSHMarkedly elevated (primary hypothyroidism)
Free T4 (FT4)Low
Free T3Low
Total T4Low
Serum cholesterolElevated (hypercholesterolemia)
LDLElevated
TriglyceridesElevated
Serum creatinineMay be mildly elevated
CKMay be elevated (myopathy)
HemoglobinMay be low (anemia)
Serum Na⁺May be low (SIADH-like)
TSH (secondary hypothyroidism)Low or normal (pituitary problem)
Interpretation: Elevated TSH is the most sensitive indicator of primary hypothyroidism. The pituitary senses low thyroid hormone and releases more TSH. Low FT4 confirms clinical hypothyroidism. Normal TSH = 0.3-7.5 mIU/L.
(Kaplan & Sadock's Comprehensive Textbook of Psychiatry)

26. Acute Pancreatitis

ParameterResult
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)
WBCElevated (12,000-20,000/μL)
Serum glucoseElevated (glucagon release, reduced insulin)
Serum calciumLow (saponification of fat; hypocalcemia is a poor prognostic sign)
Serum LDHElevated
ALTElevated (if gallstone-related)
Urine amylaseElevated
HematocritElevated (hemoconcentration)
BUNElevated (pre-renal)
Serum triglyceridesMay be elevated (cause or effect)
Diagnosis requires 2 of 3: (1) Characteristic abdominal pain, (2) Lipase or amylase > 3× normal, (3) Imaging findings.
Severity markers (Ranson's criteria): glucose > 200, LDH > 350, AST > 250, WBC > 16,000, age > 55 on admission.
(Rosen's Emergency Medicine; Yamada's Textbook of Gastroenterology)

Quick Summary Table

#CaseKey Diagnostic Feature
1Normal GTTFasting < 100, 2h < 140 mg/dL
2Type II DMFasting ≥ 126, 2h ≥ 200 mg/dL
3Renal glycosuriaNormal blood glucose + urine glucose positive
4Abnormal GTT-DMHigh fasting, exaggerated peak, sustained 2h
5-7GTT GraphsCurve shapes distinguishing normal/DM/renal
8Starvation ketosisMild ketonemia, low glucose, no severe acidosis
9DKAGlucose > 250, pH < 7.3, high AG, ketonemia
10Normal acid-basepH 7.35-7.45, pCO₂ 35-45, HCO₃⁻ 22-26
11Metabolic acidosis↓pH, ↓HCO₃⁻, ↓pCO₂ (compensation)
12Metabolic alkalosis↑pH, ↑HCO₃⁻, ↑pCO₂ (compensation)
13Respiratory acidosis↓pH, ↑pCO₂, ↑HCO₃⁻ (compensation)
14Respiratory alkalosis↑pH, ↓pCO₂, ↓HCO₃⁻ (compensation)
15KwashiorkorVery low albumin, edema, fatty liver
16Normal LFTAll values within normal range
17EdemaLow albumin → low oncotic pressure
18Hemolytic jaundice↑Indirect bilirubin, no urine bilirubin, ↑urobilinogen
19Obstructive jaundice↑Direct bilirubin, pale stools, ↑ALP, dark urine
20Hepatic jaundiceMixed bilirubin, markedly ↑ALT/AST
21Normal renal functionCreatinine 0.6-1.2, BUN 7-20, eGFR > 90
22Acute GNHematuria + RBC casts + proteinuria + ↓C3
23Nephrotic syndrome> 3.5g/day protein, ↓albumin, ↑cholesterol, edema
24MI↑Troponin (gold standard), ↑CK-MB
25Hypothyroidism↑TSH, ↓FT4, ↑cholesterol
26Acute pancreatitis↑Lipase/Amylase > 3×, ↓Ca²⁺

Sources consulted: Harper's Illustrated Biochemistry 32e, Lippincott's Illustrated Reviews Biochemistry 8e, Harrison's Principles of Internal Medicine 22e, Guyton & Hall Medical Physiology, Henry's Clinical Diagnosis and Management by Laboratory Methods, Comprehensive Clinical Nephrology 7e, Rosen's Emergency Medicine, Yamada's Textbook of Gastroenterology, Medical Microbiology 9e, Kaplan & Sadock's Comprehensive Textbook of Psychiatry.
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Excellent - all 10 DB queries done. Here is the complete explanation for all 19 minor cases:

Minor Cases - Lab Values & Interpretations


GROUP 1: Carbohydrate Metabolism Disorders (1-3)

1. Galactosemia

Deficient enzyme: Galactose-1-phosphate uridyl transferase (GALT) - most common; or Galactokinase (milder variant)
ParameterResult
Blood galactoseMarkedly elevated
Urine reducing substancesPositive (galactose - non-glucose reducing sugar)
Urine glucose (specific)Negative (reducing substance is galactose, NOT glucose)
Blood glucoseLow (hypoglycemia)
Liver enzymes (ALT, AST)Elevated (hepatotoxicity from galactose-1-phosphate accumulation)
BilirubinElevated (jaundice)
Coagulation (PT)Prolonged (liver failure)
Serum albuminLow
Urine amino acidsPositive (Fanconi syndrome - renal tubular damage)
Newborn screenElevated blood galactose-1-phosphate
Clinical: Jaundice, vomiting, cataracts, intellectual disability, E. coli sepsis in neonates after milk feeding. Key: galactose is a reducing sugar - positive Benedict's/Fehling's test but negative glucose oxidase test.
(Robbins & Kumar Pathologic Basis of Disease; Yamada's Gastroenterology; Ganong's Medical Physiology)

2. Hereditary Fructose Intolerance (HFI)

Deficient enzyme: Aldolase B (fructose-1-phosphate aldolase)
ParameterResult
Blood fructoseElevated after fructose ingestion
Blood glucoseMarkedly low (severe hypoglycemia) after fructose intake
Urine reducing substancesPositive (fructosuria) after fructose ingestion
Liver enzymes (ALT/AST)Elevated
Serum phosphateLow (fructose-1-phosphate traps inorganic phosphate)
Uric acidElevated (ATP depletion inhibits xanthine oxidase regulation)
CoagulationProlonged (liver dysfunction)
Urine amino acids/glucosePositive (Fanconi syndrome)
Key difference from essential fructosuria (benign): HFI causes severe hypoglycemia and liver/kidney damage. Fructose found in fruits, sucrose, sorbitol. Treatment: strict fructose/sucrose/sorbitol avoidance.
(Harper's Illustrated Biochemistry; Emery's Elements of Medical Genetics)

3. Lactose Intolerance

Deficient enzyme: Lactase (intestinal brush border)
ParameterResult
Hydrogen breath testPositive (> 20 ppm rise after lactose load) - gold standard
Lactose tolerance testBlood glucose rise < 20 mg/dL after 50g lactose (flat curve)
Stool pHLow (< 5.5) (bacterial fermentation of unabsorbed lactose)
Stool reducing substancesPositive
Urine lactoseMay be present (osmotic spillage)
Serum glucoseFlat/minimal rise after lactose challenge
Jejunal biopsyAbsent/markedly reduced lactase enzyme activity
Mechanism: Undigested lactose reaches colon → fermented by bacteria → short-chain fatty acids + H₂ + CO₂ → osmotic diarrhea, bloating, flatulence. Blood tests otherwise normal - this is a functional/enzyme deficiency, not systemic disease.

GROUP 2: Amino Acid Metabolism Disorders (4-5)

4. Phenylketonuria (PKU)

Deficient enzyme: Phenylalanine hydroxylase (PAH) - converts phenylalanine to tyrosine
ParameterResult
Serum phenylalanineMarkedly elevated (> 20 mg/dL; normal < 2 mg/dL)
Serum tyrosineLow
Urine phenylpyruvatePositive (phenylketones)
Urine phenylacetatePositive
Urine phenyllactatePositive
FeCl₃ test (urine)Green color (classic bedside test for phenylpyruvic acid)
Guthrie test (newborn screen)Elevated blood phenylalanine on filter paper
Urinary phenylpyruvic acidMusty/mousy odor to urine
NeurotransmittersReduced serotonin, dopamine (phenylalanine competes for transport)
Hair/skin pigmentReduced melanin → fair skin, blue eyes, blonde hair
Treatment: Phenylalanine-restricted diet (low-phenylalanine formula). If untreated: severe intellectual disability, seizures, microcephaly.
(Lippincott's Biochemistry 8e; Tietz Textbook of Laboratory Medicine; Emery's Medical Genetics)

5. Alkaptonuria

Deficient enzyme: Homogentisate oxidase (homogentisic acid accumulates in phenylalanine/tyrosine pathway)
ParameterResult
Urine homogentisic acidMarkedly elevated (diagnostic)
Urine colorTurns dark brown/black on standing (alkaline conditions or exposure to air)
FeCl₃ test (urine)Dark color (homogentisic acid)
Urine Benedict's testPositive (reducing substance)
Serum homogentisic acidElevated
Joint X-ray (late)Ochronotic arthropathy (calcified intervertebral discs)
Sclera/cartilageBlue-black pigmentation (ochronosis) in adults
Key clinical sign: Dark/black urine that darkens on standing or with alkali exposure - often first noticed in diaper/nappy staining in infants. Generally benign in childhood; ochronosis and arthritis develop in adulthood.
(Lippincott's Biochemistry 8e; Basic Medical Biochemistry 6e)

GROUP 3: Vitamin Deficiency Cases (6-10)

6. Rickets (Vitamin D Deficiency)

ParameterResult
Serum calcium (Ca²⁺)Low (hypocalcemia)
Serum phosphateLow (hypophosphatemia)
Serum ALPMarkedly elevated (increased osteoblast activity)
Serum PTHElevated (secondary hyperparathyroidism)
25-OH Vitamin DLow (< 20 ng/mL = deficiency)
1,25-(OH)₂ Vitamin DLow
Urine calciumLow
Urine phosphateElevated (PTH effect)
X-ray findingsWidening/fraying of metaphyses, cupping, "rachitic rosary"
Mechanism: Vitamin D deficiency → reduced intestinal Ca & P absorption → low serum Ca → PTH release → phosphaturia → worsened hypophosphatemia → defective bone mineralization → soft bones (rickets in children, osteomalacia in adults).

7. Riboflavin (Vitamin B₂) Deficiency

ParameterResult
Urine riboflavinLow (< 30 μg/day)
Erythrocyte glutathione reductase activity coefficient (EGR-AC)Elevated (> 1.2 = deficiency; gold standard functional test)
Plasma riboflavinLow (< 3 μg/dL)
Serum FAD (flavin adenine dinucleotide)Low
CBCNormocytic anemia (often coexists with iron deficiency)
Clinical signs: Angular cheilitis (cracks at corners of mouth), glossitis (magenta tongue), cheilosis, seborrheic dermatitis, corneal vascularization. Often co-exists with deficiencies of niacin and thiamine.
(Harper's Illustrated Biochemistry; Guyton & Hall Medical Physiology)

8. Pellagra (Niacin/Vitamin B₃ Deficiency)

ParameterResult
Urine N-methylnicotinamideLow (< 1.6 mg/day; major excretion product of niacin)
Urine 2-pyridone:N-methylnicotinamide ratioAltered
Plasma niacin/NADLow
Tryptophan levelsLow (tryptophan is a niacin precursor - 60 mg Trp → 1 mg niacin)
Blood countMay show anemia
Classic "4 Ds": Dermatitis (photosensitive, symmetric, Casal's necklace), Diarrhea, Dementia, Death (if untreated). Common in maize-based diets (maize lacks tryptophan + niacin bound as niacytin - unabsorbable). Also seen in carcinoid syndrome (tryptophan diverted), isoniazid therapy.
(Harper's Illustrated Biochemistry 32e)

9. Vitamin B₁₂ Deficiency

ParameterResult
Serum vitamin B₁₂Low (< 200 pg/mL; normal 200-900 pg/mL)
MCVElevated (> 100 fL) - macrocytosis
Blood smearHypersegmented neutrophils (≥ 5 lobes) + macro-ovalocytes
HemoglobinLow (megaloblastic anemia)
Serum methylmalonic acid (MMA)Elevated (specific for B₁₂ deficiency)
Plasma homocysteineElevated (elevated in both B₁₂ AND folate deficiency)
Serum folateNormal (differentiates from folate deficiency)
Intrinsic factor antibodiesPositive in pernicious anemia
Schilling testAbnormal in pernicious anemia (corrected with IF)
Reticulocyte countLow (ineffective erythropoiesis)
Serum LDHElevated (intramedullary hemolysis)
Serum bilirubinMildly elevated
Key: Elevated MMA differentiates B₁₂ deficiency from folate deficiency (folate deficiency has normal MMA). Neurological: subacute combined degeneration of spinal cord (posterior + lateral columns) - unique to B₁₂.
(Harper's Illustrated Biochemistry; Katzung's Pharmacology)

10. Vitamin C Deficiency (Scurvy)

ParameterResult
Serum/plasma ascorbic acidLow (< 0.2 mg/dL; normal 0.4-2.0 mg/dL)
Leukocyte ascorbic acidLow (more sensitive than plasma)
Capillary fragility testAbnormal (positive Rumpel-Leede test)
HemoglobinLow (anemia - iron malabsorption + bleeding)
Prothrombin timeUsually normal
X-ray (children)Trümmerfeld zone (zone of rarefaction at metaphysis), Pelkan spurs
Clinical: Perifollicular hemorrhages, corkscrew hairs, bleeding gums (gingivitis), poor wound healing, hemarthroses, "scurvy line" on X-ray. Vitamin C required for procollagen hydroxylation (lysyl/prolyl hydroxylase) - deficiency → defective collagen → vascular fragility.
(Yamada's Gastroenterology; Harper's Illustrated Biochemistry)

GROUP 4: Wilson Disease (11)

11. Wilson Disease (Hepatolenticular Degeneration)

Defect: Mutation in ATP7B gene → impaired copper excretion into bile + impaired ceruloplasmin synthesis → copper accumulates in liver, brain, cornea, kidneys.
ParameterResult
Serum ceruloplasminLow (< 20 mg/dL; normal 20-40 mg/dL) - hallmark
24-hr urine copperElevated (> 100 μg/day; normal < 40 μg/day)
Serum total copperLow (most copper normally bound to ceruloplasmin)
Serum free (non-ceruloplasmin) copperElevated
Liver copper (biopsy)> 250 μg/g dry weight (> 4× normal; diagnostic)
Liver enzymes (ALT/AST)Elevated
Coombs-negative hemolytic anemiaPresent (copper-induced RBC lysis)
Kayser-Fleischer ringsGreenish-brown rings in Descemet's membrane of cornea (slit-lamp exam)
Serum uric acidLow (renal tubular copper damage → Fanconi syndrome)
Urine amino acids/glucosePositive (Fanconi syndrome)
Scoring (Leipzig criteria): KF rings (2 pts) + neurological symptoms (2 pts) + Coombs-neg hemolytic anemia (1 pt) + low ceruloplasmin (1 pt) + elevated liver Cu (2 pts) + elevated urine Cu (1 pt). Score ≥ 4 = diagnosis.
(Tietz Textbook of Laboratory Medicine; Yamada's Gastroenterology; Kaplan & Sadock's Psychiatry)

GROUP 5: Anemias (12-14)

12. Iron Deficiency Anemia

ParameterResult
HemoglobinLow (< 12 g/dL women; < 13.5 g/dL men)
MCVLow (< 80 fL) - microcytic
MCHLow (< 27 pg) - hypochromic
MCHCLow (< 30%)
Serum ironLow (< 30 μg/dL)
TIBC (transferrin)Elevated (> 400 μg/dL)
Transferrin saturationLow (< 15%)
Serum ferritinLow (< 12 μg/L) - most sensitive early marker
Reticulocyte countLow (inadequate production)
Blood smearMicrocytic, hypochromic RBCs, pencil cells, anisocytosis, poikilocytosis
RDWElevated (> 14.5%) - anisocytosis
Bone marrowAbsent iron stores (Prussian blue stain negative)
Stages: (1) Iron store depletion (↓ferritin only) → (2) Iron-deficient erythropoiesis (↑TIBC, ↓sat%) → (3) Iron deficiency anemia (↓Hb, ↓MCV).
(Katzung's Pharmacology; Tietz Textbook of Laboratory Medicine; Sleisenger & Fordtran)

13. Sickle Cell Anemia

Defect: Glu → Val substitution at position 6 of β-globin chain → HbS. Homozygous (HbSS) = sickle cell disease.
ParameterResult
HemoglobinLow (6-9 g/dL)
Blood smearSickle-shaped RBCs, target cells, Howell-Jolly bodies
Hemoglobin electrophoresisHbS: 85-95%; HbF: 2-20%; HbA: absent (in HbSS)
Sickle solubility test (Sickledex)Positive
MCVNormal (normocytic)
Reticulocyte countElevated (5-15%; compensatory)
WBCElevated
Bilirubin (indirect)Elevated (hemolysis)
LDHElevated
HaptoglobinLow
Urine urobilinogenElevated
HPLCQuantifies HbS, HbF, HbA percentages (gold standard)
Sickle cell trait (HbAS): HbA ~60%, HbS ~40%; usually asymptomatic.
(Sabiston Textbook of Surgery; Harrison's Principles of Internal Medicine 22e)

14. Beta-Thalassemia

Defect: Reduced (β⁺) or absent (β⁰) β-globin chain synthesis → relative excess of α chains → precipitation → hemolysis.
ParameterBeta-thalassemia Major (Cooley's Anemia)Beta-thalassemia Minor (Trait)
HemoglobinVery low (2-7 g/dL)Mildly low or normal
MCVVery low (< 70 fL)Low (60-75 fL)
Blood smearMicrocytic, hypochromic + target cells + nucleated RBCsMicrocytic, hypochromic, target cells
HbA₂ (electrophoresis)Elevated or variableElevated (> 3.5%) - hallmark of trait
HbFMarkedly elevated (> 30%) in majorNormal to slightly elevated
HbAAbsent (β⁰/β⁰) or reduced (β⁺)Normal
Serum ironElevated (hemolysis + transfusions)Normal
FerritinElevatedNormal
RDWElevatedNormal to mildly elevated
Reticulocyte countElevatedNormal/mildly elevated
Key differentiator from iron deficiency: In thalassemia, serum ferritin is NORMAL or HIGH (not low); HbA₂ elevated; RDW often less elevated than iron deficiency.
(Creasy & Resnik's Maternal-Fetal Medicine; Tietz Textbook of Laboratory Medicine)

GROUP 6: Acute Gout (15)

15. Acute Gout

ParameterResult
Serum uric acidElevated (> 6.8 mg/dL; typically > 8-10 mg/dL during attack)
Synovial fluid analysisNegatively birefringent needle-shaped urate crystals (yellow when parallel to compensator axis)
Synovial WBC10,000-100,000/μL (predominantly neutrophils)
ESRElevated
CRPElevated
WBCElevated
Serum creatinineMay be elevated (urate nephropathy)
24-hr urine uric acidElevated (overproducers > 800 mg/day) or normal (underexcreters)
X-ray (chronic gout)"Punched-out" lytic lesions with overhanging edges; tophi
Mechanism: Hyperuricemia → monosodium urate (MSU) crystal deposition in joints (especially 1st MTP = podagra) → neutrophil phagocytosis → intense acute inflammation. Note: serum uric acid can be normal during an acute attack.
(Goodman & Gilman's Pharmacological Basis of Therapeutics; Rheumatology 2022)

GROUP 7: Serum Protein Electrophoresis (SPE) Patterns (16-19)

Serum protein electrophoresis separates proteins by charge/size into 5 bands: Albumin → α₁ → α₂ → β → γ (globulins)

16. Normal Electrophoretogram

BandProteinNormal %Normal g/dL
AlbuminAlbumin55-65%3.5-5.0
α₁α₁-antitrypsin, α₁-acid glycoprotein2-4%0.1-0.4
α₂Haptoglobin, α₂-macroglobulin, ceruloplasmin6-12%0.4-0.8
βTransferrin, C3, fibrinogen (in plasma)9-15%0.5-1.0
γIgG, IgA, IgM, IgD, IgE11-21%0.6-1.6
Pattern: Tall albumin peak is dominant; globulin bands are smaller and progressively decrease toward γ.
(Henry's Clinical Diagnosis and Management by Laboratory Methods)

17. Electrophoretic Pattern - Nephrotic Syndrome

BandChangeReason
AlbuminMarkedly decreasedHeavy urinary loss (> 3.5 g/day)
α₁ globulinDecreasedSmall proteins lost in urine
α₂ globulinMarkedly increasedα₂-macroglobulin (large, retained) + increased synthesis
β globulinIncreasedIncreased lipoprotein synthesis (compensatory)
γ globulinDecreasedUrinary loss of IgG
Total proteinLow
Characteristic pattern: Low albumin + Low γ + Elevated α₂ (high α₂ is the hallmark). The α₂-macroglobulin is too large to be lost in urine, so it accumulates while smaller proteins are lost.
(Henry's Clinical Diagnosis; Goldman-Cecil Medicine)

18. Electrophoretic Pattern - Cirrhosis of Liver

BandChangeReason
AlbuminDecreasedReduced hepatic synthesis
α₁ globulinDecreasedReduced hepatic synthesis
α₂ globulinDecreasedReduced hepatic synthesis
β globulinSlightly increased
γ globulinDiffusely elevatedPolyclonal increase (reduced hepatic clearance of gut antigens)
β-γ bridgingPresentHALLMARK - IgA merges with β band (β-γ fusion/bridge)
Characteristic pattern: Low albumin + β-γ bridging (β and γ bands merge into one broad band). This β-γ fusion is due to elevated IgA (which migrates in β region) produced in response to portal hypertension and gut bacterial antigens entering circulation.
(Henry's Clinical Diagnosis and Management by Laboratory Methods)

19. Electrophoretic Pattern - Multiple Myeloma

BandChangeReason
AlbuminNormal to mildly decreased
α₁, α₂ globulinsNormal or decreased
β globulinNormal or decreased
γ globulinTall, narrow, sharp "M spike" (monoclonal band)Single clone of plasma cells producing one identical Ig
Total proteinOften elevated
M protein (paraprotein): A single, sharp, narrow band (unlike the broad polyclonal γ seen in infection/cirrhosis). Most commonly IgG (> IgA). Immunofixation electrophoresis (IFE) identifies the specific heavy + light chain type.
Additional lab findings:
  • Bence-Jones protein in urine (free light chains - κ or λ)
  • Hypercalcemia (bone destruction)
  • Elevated creatinine (myeloma kidney)
  • Rouleaux formation on blood smear
  • Lytic bone lesions on X-ray ("punched-out" lesions)
  • Serum β₂-microglobulin elevated (prognosis)
(Robbins & Kumar Pathologic Basis of Disease; Goldman-Cecil Medicine)

Quick Summary Table - All 19 Minor Cases

#CaseDefectSingle Most Diagnostic Finding
1GalactosemiaGalactose-1-P uridyl transferase ↓Urine reducing substance positive (non-glucose) + jaundice
2Hereditary Fructose IntoleranceAldolase B ↓Hypoglycemia + ↓phosphate after fructose
3Lactose IntoleranceLactase ↓Positive H₂ breath test + flat lactose tolerance curve
4PhenylketonuriaPhenylalanine hydroxylase ↓↑Serum phenylalanine + green FeCl₃ urine test
5AlkaptonuriaHomogentisate oxidase ↓Urine darkens on standing
6RicketsVitamin D deficiency↓Ca, ↓PO₄, ↑ALP, ↑PTH
7Riboflavin deficiencyVitamin B₂ ↓↑EGR-AC ratio + angular cheilitis
8PellagraNiacin/tryptophan ↓↓Urine N-methylnicotinamide + "4 Ds"
9Vitamin B₁₂ deficiencyCobalamin ↓↑MCV + hypersegmented neutrophils + ↑MMA
10Vitamin C deficiencyAscorbic acid ↓↓Serum ascorbate + capillary fragility
11Wilson diseaseATP7B mutation↓Ceruloplasmin + ↑24h urine copper + KF rings
12Iron deficiency anemiaIron ↓↓Ferritin + ↓MCV + ↑TIBC
13Sickle cell anemiaHbS (β6 Glu→Val)HbS on electrophoresis + sickle cells
14Beta-thalassemiaβ-globin synthesis ↓↑HbA₂ (trait) or ↑HbF (major) + microcytosis
15Acute goutUrate crystal deposition↑Serum uric acid + negatively birefringent crystals
16Normal electrophoretogram-Tall albumin + normal gradual globulin bands
17Nephrotic syndrome SPE-↓Albumin + ↑α₂ + ↓γ
18Cirrhosis SPE-↓Albumin + β-γ bridging
19Multiple myeloma SPE-Sharp "M spike" in γ region

Sources: Robbins & Kumar Pathologic Basis of Disease, Lippincott's Illustrated Reviews Biochemistry 8e, Harper's Illustrated Biochemistry 32e, Tietz Textbook of Laboratory Medicine 7e, Henry's Clinical Diagnosis and Management by Laboratory Methods, Yamada's Gastroenterology 7e, Katzung's Basic & Clinical Pharmacology 16e, Goldman-Cecil Medicine, Emery's Elements of Medical Genetics and Genomics, Harrison's Principles of Internal Medicine 22e.

Create a PDF reference card comparing all 19 minor case labs

Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/mino…

Writing File

~/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}")
Running Command

cd /home/daytona/workspace/minor-cases-pdf && python build_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/minor-cases-pdf/Minor_Cases_Reference_Card.pdf

Your PDF reference card is ready:

Minor Cases Reference Card

PDF Document · PDF


What's inside (4 landscape A4 pages):
PageCasesContent
11-5Carbohydrate & Amino Acid Disorders (Galactosemia, HFI, Lactose Intolerance, PKU, Alkaptonuria)
26-10Vitamin Deficiency Disorders (Rickets, Riboflavin, Pellagra, Vit B₁₂, Scurvy)
311-15Wilson Disease, Anaemias & Acute Gout
416-19Full SPE Pattern Comparison Table (Normal vs Nephrotic vs Cirrhosis vs Multiple Myeloma)
Design features:
  • ▲ Red for elevated values, ▼ Blue for decreased values, ◆ Green for normal
  • Hallmark/pathognomonic findings highlighted in each case
  • Dedicated SPE page with side-by-side band comparison across all 4 patterns
  • Treatment/management notes in each row
  • Page border, alternating row shading, and footer with disclaimer on every page

Create a similar PDF for the 26 Major Cases

Running Command

mkdir -p /home/daytona/workspace/major-cases-pdf

Writing File

~/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}")
Running Command

cd /home/daytona/workspace/major-cases-pdf && python build_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/major-cases-pdf/Major_Cases_Reference_Card.pdf

Your PDF is ready:

Major Cases Reference Card

PDF Document · PDF


What's inside (5 landscape A4 pages):
PageCasesContent
11–7GTT Patterns (Normal GTT, Type II DM, Renal Glycosuria, Abnormal GTT, 3 GTT graphs)
28–14Ketosis & Acid-Base Disorders (Starvation Ketosis, DKA, Normal ABG, Met. Acidosis, Met. Alkalosis, Resp. Acidosis, Resp. Alkalosis)
315–20Nutritional, Oedema & Jaundice (Kwashiorkor, Normal LFT, Oedema, Haemolytic, Obstructive, Hepatic Jaundice)
421–26Renal Function, MI, Hypothyroidism, Acute Pancreatitis
518–20Bonus: Jaundice Comparison Table — all 4 jaundice patterns side-by-side with every parameter
Design features match the Minor Cases card:
  • ▲ Red elevated / ▼ Blue decreased / ◆ Green normal at a glance
  • Pathophysiology column explains the "why" behind each lab pattern
  • Hallmark findings in bold italic blue
  • Compensation formulas included for all acid-base cases
  • Enzyme timeline for MI (Myoglobin → Troponin → CK-MB → LDH)
  • Ranson's criteria listed for acute pancreatitis
  • Page border + footer disclaimer on every page
Asking for Preferences
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Here is the complete, detailed explanation of all three qualitative urine analysis experiments:

Qualitative Experiments — Urine Analysis


Experiment 3 (BC14.3): Normal Constituents of Urine

Aim

To perform urine analysis and identify the normal physical and chemical constituents of urine.

A. Physical Examination of Urine

PropertyNormal FindingClinical Significance
Volume1000–1500 mL/24 hours<400 mL = oliguria; <100 mL = anuria; >2500 mL = polyuria
ColourPale yellow to amber (due to urochrome pigment)Dark yellow = concentrated; colourless = dilute; red-brown = haematuria/haemoglobinuria
TransparencyClear (transparent)Turbid = infection, phosphaturia, pyuria, chyluria
OdourFaintly aromatic (due to volatile organic acids)Fruity/sweet = ketones (DKA); ammoniacal = UTI/old sample; fishy = trimethylaminuria
Specific gravity1.010–1.030Fixed at 1.010 = isosthenuria (renal tubular failure); >1.030 = concentrated; <1.003 = overhydration/diabetes insipidus
pH4.6–8.0 (average 6.0 = slightly acidic)Acidic in protein-rich diets, fever, DKA; alkaline in UTI, vegetarian diet, RTA
Deposit/SedimentNone on standingPhosphate precipitate = white; urate = pink "brick dust"

B. Chemical Examination — Normal Constituents

Normal urine is an aqueous solution of these organic and inorganic substances:

Organic Constituents

ConstituentNormal Excretion / DayNotes
Urea20–35 g/dayLargest organic constituent; ~90% of total urinary nitrogen; end-product of protein catabolism
Creatinine1–2 g/day (men); 0.8–1.8 g/day (women)Derived from creatine phosphate in muscle; constant daily excretion (reflects muscle mass)
Uric acid250–750 mg/dayEnd-product of purine metabolism (xanthine oxidase pathway); insoluble in acid urine
Ammonia30–50 mEq/day (0.5–1.0 g/day)Produced in renal tubules from glutamine; buffers urine acidity
Amino acids1–3 g/day (small amounts)Overflow from plasma; increased in liver failure, Fanconi syndrome
Hippuric acid<1 g/dayConjugation product of benzoic acid + glycine
CreatineTrace (<150 mg/day in men)Elevated in children, pregnancy, muscle disease
Urobilinogen0.5–4.0 mg/day (trace)Formed in gut from bilirubin; small amount reabsorbed and excreted in urine
Pigments (urochrome)VariableResponsible for yellow colour

Inorganic Constituents

ConstituentNormal Excretion / DayNotes
Chloride (Cl⁻)110–250 mEq/dayLargest inorganic constituent; reflects dietary salt intake
Sodium (Na⁺)130–260 mEq/dayVaries with diet; low in hypovolaemia, adrenal insufficiency
Potassium (K⁺)25–125 mEq/dayLow in hypokalaemia; high in hyperaldosteronism
Phosphate (PO₄³⁻)0.4–1.3 g/dayImportant urinary buffer (titratable acid)
Sulphate (SO₄²⁻)1.5–3.0 g/dayFrom amino acid catabolism (methionine, cysteine)
Calcium (Ca²⁺)100–300 mg/dayLow in rickets, hypoparathyroidism; high in hypercalcaemia
Magnesium (Mg²⁺)6–8 mEq/dayVariable
Key teaching point: Normal urine does NOT contain glucose, protein (>trace), ketones, bilirubin, blood, RBCs, or casts.
(Harper's Illustrated Biochemistry 32e; Basic Medical Biochemistry 6e)

C. Dipstick / Reagent Strip Analysis (Normal Results)

ParameterNormal Result
GlucoseNegative
ProteinNegative (trace may be normal: <10 mg/dL)
KetonesNegative
Blood / HbNegative
BilirubinNegative
UrobilinogenTrace (0.1–1.0 mg/dL = normal)
NitritesNegative
Leukocyte esteraseNegative
pH5.0–7.0
Specific gravity1.010–1.030

Experiment 4 (BC14.4): Abnormal Urine Constituents — Glucose & Ketone Bodies

Aim

To identify glucose and ketone bodies as abnormal urine constituents and correlate with pathological states.

A. Urine Glucose (Glucosuria)

Normal: Absent. Urine glucose <500 mg/day (practically nil on dipstick). Abnormal (glucosuria): Present when blood glucose exceeds the renal threshold (~180 mg/dL).

Tests for Urine Glucose

1. Benedict's Test (Qualitative / Semi-quantitative)
StepDetail
ReagentBenedict's reagent = Sodium carbonate + Sodium citrate + Copper sulphate (CuSO₄) in alkaline solution
PrincipleReducing sugars (glucose, galactose, fructose, lactose) reduce Cu²⁺ (blue) to Cu⁺ (cuprous oxide = brick-red precipitate) in hot alkaline conditions
ProcedureAdd 5 drops urine to 5 mL Benedict's reagent; heat in boiling water bath 5 minutes
Result - PositiveGreen → Yellow → Orange → Brick-red precipitate
Result - NegativeSolution remains blue (no reducing substance)
ImportantBenedict's is a test for REDUCING SUGARS — NOT specific for glucose
ColourApproximate 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%
2. Glucose Oxidase Strip (Dipstick) — Specific for Glucose
PrincipleGlucose oxidase converts glucose → gluconic acid + H₂O₂ → H₂O₂ + chromogen → colour change
AdvantageSpecific for D-glucose only (unlike Benedict's)
LimitationFalse negatives with ascorbic acid; false positives with oxidising agents

Pathological States Causing Glucosuria

ConditionBlood GlucoseMechanism
Type 1 / Type 2 Diabetes MellitusHigh (>180 mg/dL)Hyperglycaemia exceeds renal threshold → glucose spills into urine
Renal GlycosuriaNormalRenal tubular defect (low Tmax or threshold); glucose in urine despite normal blood glucose
Gestational DiabetesHighReduced renal threshold in pregnancy + hyperglycaemia
Cushing syndromeHighCortisol-induced hyperglycaemia
Stress hyperglycaemiaHigh (transient)Adrenaline → gluconeogenesis
GalactosuriaNormal blood glucoseGalactosemia; Benedict's positive but glucose oxidase NEGATIVE (galactose is not glucose)
Fructosuria (HFI)NormalAldolase B deficiency; reducing sugar in urine
Key differentiation: Benedict's positive + Glucose oxidase NEGATIVE = non-glucose reducing sugar (galactose, fructose, lactose) — NOT diabetes.

B. Urine Ketone Bodies (Ketonuria)

Normal: Absent. Ketone bodies: Acetoacetate (AcAc), Beta-hydroxybutyrate (β-OHB), Acetone. Produced in liver when fatty acid oxidation is excessive.

Tests for Urine Ketones

1. Rothera's Test
StepDetail
ReagentRothera's reagent = Ammonium sulphate + Sodium nitroprusside (sodium nitroferricyanide); concentrated ammonia
PrincipleAcetoacetate and acetone react with sodium nitroprusside in alkaline conditions → purple/violet colour
ProcedureAdd Rothera's powder to urine; add conc. ammonia along sides of tube
Positive resultPurple/violet ring at the interface (within 2 minutes)
Negative resultNo colour change / brown ring only
NoteDoes NOT detect β-hydroxybutyrate (the predominant ketone in DKA)
2. Gerhardt's Test (Ferric Chloride Test)
Reagent10% Ferric chloride (FeCl₃) solution
PrincipleFeCl₃ reacts with acetoacetate → Bordeaux red / port wine colour
ProcedureAdd a few drops 10% FeCl₃ to urine
PositiveBordeaux red / wine-red colour
InterferenceSalicylates also give a purple colour → distinguish by heating (salicylate colour persists; acetoacetate colour disappears on heating)
3. Dipstick (Nitroprusside reaction)
Same as Rothera's principle; detects acetoacetate and acetone but NOT β-hydroxybutyrate.

Pathological States Causing Ketonuria

ConditionMechanism
Diabetic Ketoacidosis (DKA)Absolute insulin deficiency → massive lipolysis → massive ketogenesis; glucose >250 + ketonuria + acidosis
Starvation / Prolonged fastingRelative insulin deficiency → mild ketosis; glucose low/normal; mild ketonuria
Alcoholic ketoacidosisAlcohol + poor nutrition → ketosis; glucose may be normal or low
Prolonged vomitingStarvation effect → ketosis
High-fat low-carb dietPhysiological ketosis (no acidosis)
Febrile illness in childrenIncreased metabolic demand + poor intake → starvation ketosis
Pregnancy (morning sickness)Starvation effect → mild ketonuria
DKA vs. Starvation Ketosis:
FeatureDKAStarvation Ketosis
Blood glucose>250 mg/dLLow/normal
Urine glucoseStrongly positiveNegative
Urine ketonesStrongly positiveMildly positive
pH<7.30Normal to slightly ↓
SeverityLife-threateningMild, self-limiting
(Rosen's Emergency Medicine; Roberts & Hedges' Clinical Procedures)

Experiment 5 (BC14.4): Abnormal Urine Constituents — Protein & Blood

Aim

To identify protein and blood as abnormal urine constituents and correlate with pathological states.

A. Urine Protein (Proteinuria)

Normal: <150 mg/day total protein; <30 mg/day albumin. Abnormal: >150 mg/day = proteinuria (dipstick detects predominantly albumin).

Tests for Urine Protein

1. Heat and Acetic Acid Test (Heat Coagulation Test)
StepDetail
ProcedureFill 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
PositiveWhite turbidity/precipitate forms on heating; persists or increases on adding acetic acid
NegativeNo turbidity, or turbidity disappears on adding acetic acid
PrincipleHeat 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)
2. Heller's Test (Nitric Acid Ring Test)
StepDetail
ProcedureCarefully layer concentrated nitric acid under urine in a test tube (tilt tube)
PositiveWhite ring at interface of acid and urine
NegativeNo white ring
PrincipleConcentrated HNO₃ denatures proteins → white precipitate at interface
NoteYellow ring = urates (not protein); red ring = bile pigments (bilirubin) — interpret carefully
3. Sulphosalicylic Acid (SSA) Test
ProcedureAdd 3-5 drops 3% SSA to urine
PositiveWhite turbidity/precipitate
AdvantageMore sensitive than heat test; detects all proteins including Bence-Jones (myeloma)
NoteFalse positive with X-ray contrast media, penicillin
4. Dipstick (Tetrabromophenol blue — pH indicator)
GradeApproximate Protein
Negative<10 mg/dL
Trace10–20 mg/dL
1+~30 mg/dL
2+~100 mg/dL
3+~300 mg/dL
4+>2000 mg/dL
Limitation: Detects albumin primarily. Misses Bence-Jones protein (myeloma) and globulins → SSA test more sensitive.

Pathological States Causing Proteinuria

ConditionDegreeTypeNotes
Nephrotic syndromeMassive (>3.5 g/day)Glomerular (selective)Minimal change disease, membranous nephropathy, FSGS
Acute glomerulonephritisModerate (1–3 g/day)Glomerular (non-selective)+ haematuria + RBC casts
Chronic kidney diseaseVariableGlomerular/tubularProgressive
Pre-eclampsia>300 mg/dayGlomerular+ hypertension after 20 weeks
Multiple myelomaVariable (Bence-Jones)OverflowLight chains; missed on dipstick; SSA positive
Fever / exerciseTransient, mildFunctionalSelf-resolving
Orthostatic proteinuriaMildPosturalYoung adults; present when upright, absent when supine
UTI/pyelonephritisMildTubular+ WBCs + bacteria
Diabetic nephropathyMicroalbuminuria → macroGlomerular30–300 mg/day = microalbuminuria (early marker)

B. Urine Blood (Haematuria / Haemoglobinuria)

Normal: 0–2 RBCs/hpf on microscopy; negative on dipstick.

Tests for Urine Blood

1. Dipstick (Benzidine/TMB peroxidase reaction)
PrincipleHaemoglobin + peroxidase activity → oxidises chromogen → colour change (green to blue)
PositiveGreen or blue-green colour on dipstick
DetectsBoth intact RBCs AND free haemoglobin/myoglobin
Sensitivity91–100% for haematuria
NotePositive for both haematuria AND haemoglobinuria AND myoglobinuria — microscopy needed to distinguish
2. Microscopic Examination
FindingSignificance
RBCs >3/hpfHaematuria (actual red blood cells present)
Dysmorphic RBCs (acanthocytes)Glomerular origin
RBC castsGlomerulonephritis (pathognomonic)
No RBCs but dipstick positiveHaemoglobinuria or myoglobinuria
3. Occult Blood Test (Guaiac-based)
Detects haemoglobin peroxidase activity; used when visible haematuria absent.

Differentiation: Haematuria vs. Haemoglobinuria vs. Myoglobinuria

FeatureHaematuriaHaemoglobinuriaMyoglobinuria
Urine colourRed/pinkRed-brown (clear)Dark red-brown/cola
Dipstick bloodPositivePositivePositive
Urine microscopy RBCsPresent (>3/hpf)AbsentAbsent
Serum haptoglobinNormalLow (consumed)Normal
Serum CKNormalNormalMarkedly elevated
Plasma haemoglobinNormalElevated (pink plasma)Normal
CauseStones, UTI, GN, tumourHaemolysis, paroxysmal Hb-uria, march Hb-uriaRhabdomyolysis, crush injury, statin myopathy

Pathological States — Haematuria

CauseTypeKey Features
Acute glomerulonephritisGlomerular (microscopic)RBC casts + proteinuria + ↓C3
IgA nephropathyGlomerularEpisodic gross haematuria after URTI
Nephrolithiasis (stones)Post-glomerularColicky flank pain; calcium oxalate crystals
UTI/CystitisLower tractDysuria + frequency + WBCs + bacteria
Bladder carcinomaLower tractPainless haematuria in elderly smoker
Renal cell carcinomaUpper tractFlank pain + mass + haematuria triad
TraumaAny levelHistory of injury
Haemophilia / anticoagulantsSystemicCoagulopathy
SLE nephritisGlomerularANA positive + systemic features
(Henry's Clinical Diagnosis; Brenner & Rector's The Kidney; Guyton & Hall)

Experiment 6 (BC14.4): Abnormal Urine Constituents — Bile Salts & Bile Pigments

Aim

To identify bile salts and bile pigments as abnormal urine constituents and correlate with pathological states.

A. Bile Salts in Urine

Normal: Absent. Bile salts are large molecules not filtered by normal glomeruli. Abnormal: Present in obstructive and hepatocellular jaundice.

Test for Bile Salts

Hay's Sulphur (Hay's Test)
StepDetail
PrincipleBile 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).
ProcedureSprinkle very fine precipitated sulphur powder on the surface of urine at room temperature
PositiveSulphur powder SINKS (reduced surface tension due to bile salts)
NegativeSulphur powder floats
ImportantTest must be done at room temperature (warm urine reduces surface tension non-specifically)

Clinical Significance of Bile Salts in Urine

ConditionBile Salts in UrineMechanism
Obstructive jaundicePositive (strongly)Conjugated bilirubin + bile salts regurgitated into blood → filtered in urine
Hepatocellular jaundicePositiveDamaged hepatocytes release bile constituents into blood
Haemolytic jaundiceNegativeLiver and biliary tract intact; only unconjugated bilirubin elevated (insoluble)
NormalNegativeBile salts do not enter blood under normal conditions

B. Bile Pigments in Urine (Bilirubin & Urobilinogen)

1. Urine Bilirubin (Conjugated Bilirubin)

Normal: Absent (conjugated bilirubin in blood is normally very low and immediately excreted in bile). Abnormal: Present when conjugated bilirubin is elevated in blood (water-soluble → filterable by glomerulus).
Test: Fouchet's Test
PrincipleBaCl₂ precipitates bilirubin from urine; Fouchet's reagent (FeCl₃ + trichloroacetic acid) oxidises bilirubin → green (biliverdin)
ProcedureAdd BaCl₂ to urine → filter → place Fouchet's reagent on filter paper
PositiveGreen colour on filter paper
NegativeNo colour change
Test: Gmelin's Test
PrincipleConcentrated HNO₃ oxidises bilirubin through a series of colour changes (green → blue → violet → red → yellow)
ProcedureLayer concentrated HNO₃ under urine in a test tube
PositivePlay of colours (green band = biliverdin, blue/violet, red, yellow from outer to inner)
NegativeOnly yellow ring (nitric acid-urate interface)
NoteThis is more sensitive; the characteristic spectrum of colours = positive
Dipstick Test: Diazonium salt reacts with conjugated bilirubin → purple/blue colour. Specific for conjugated bilirubin.

2. Urine Urobilinogen

Normal: Trace amount (0.5–4.0 mg/day; 0.1–1.0 mg/dL). Pathway: Conjugated bilirubin → (gut bacteria) → urobilinogen → some reabsorbed from gut → portal vein → liver (mostly re-excreted) → small amount escapes to blood → filtered by kidney → urine urobilinogen.
Test: Ehrlich's Test (Aldehyde Test)
ReagentEhrlich's reagent = Para-dimethylaminobenzaldehyde (DMAB) in concentrated HCl
PrincipleUrobilinogen + Ehrlich's reagent (aldehyde) → pink/cherry-red colour in acid medium
ProcedureAdd 2 mL Ehrlich's reagent to 10 mL urine; mix
PositiveCherry-red / pink colour immediately or within 5 minutes
NegativeYellow/no colour
Dilution testPositive in dilutions 1:20 or beyond = significant
NotePorphobilinogen (PBG) also gives a positive Ehrlich's test — distinguished by solvent extraction (urobilinogen extracted into chloroform; PBG is NOT)

Interpretation — Bile Pigments in Different Types of Jaundice

ParameterNormalHaemolytic Jaundice (Pre-hepatic)Obstructive Jaundice (Post-hepatic)Hepatocellular Jaundice
Urine bilirubinAbsentAbsent (unconjugated = insoluble)Strongly positive (dark urine)Positive
Urine urobilinogenTraceMarkedly increasedAbsent (no bile reaches gut)Variable (↑ early, ↓ late)
Bile salts (Hay's)NegativeNegativeStrongly positivePositive
Stool colourNormal brownDark (↑stercobilin)Pale/clay (no stercobilin)Normal to pale
Serum indirect biliNormalMarkedly elevatedNormal/slight ↑Elevated
Serum direct biliNormalNormalMarkedly elevatedElevated
(Guyton & Hall Medical Physiology; Tietz Textbook of Laboratory Medicine; Campbell Walsh Urology)

Summary Table — All Abnormal Urine Constituents

ConstituentTestPositive ResultAssociated Pathology
GlucoseBenedict'sBrick-red precipitateDM, renal glycosuria
Glucose (specific)Glucose oxidase stripGreen/blue colour changeDM (not other reducing sugars)
KetonesRothera'sPurple ring at interfaceDKA, starvation, alcoholic ketosis
KetonesGerhardt's (FeCl₃)Bordeaux redAcetoaceturia
ProteinHeat + acetic acidWhite precipitate persistsNephrotic syndrome, GN, myeloma
ProteinHeller's (nitric acid)White ring at interfaceProteinuria any cause
BloodDipstickGreen/blueHaematuria, haemoglobinuria
BilirubinFouchet'sGreen on filter paperObstructive/hepatic jaundice
BilirubinGmelin'sPlay of colours (green-blue-red)Obstructive/hepatic jaundice
UrobilinogenEhrlich'sCherry-red colourHaemolytic/hepatic jaundice
Bile saltsHay's sulphurSulphur sinksObstructive/hepatic jaundice
This is a shared conversation. Sign in to Orris to start your own chat.