Biochemistry mbbs case study
| Test | Patient's Result | Normal Range |
|---|---|---|
| Serum phenylalanine | 28 mg/dL | < 2 mg/dL |
| Serum tyrosine | Low | 1-3 mg/dL |
| Urine FeCl3 (ferric chloride) test | Blue-green color | Negative |
| Phenistix test (urine) | Gray-green positive | Negative |
| Urine phenylpyruvic acid | Elevated | Absent |
| Blood phenylalanine (Guthrie test) | Positive | Negative |
| CBC, LFT, RFT | Normal | Normal |
| Urine pterin profile | Normal | Normal |
| DHPR activity | Normal | Normal |
Phenylketonuria (PKU) - Classic form - Autosomal recessive deficiency of phenylalanine hydroxylase (PAH)
Phenylalanine ──[PAH + BH4]──► Tyrosine ──► DOPA ──► Melanin
──► Thyroxine
──► Catecholamines
Phenylalanine ──[PAH blocked]──► ACCUMULATES in blood & brain
│
├──► Phenylpyruvic acid (↑ in urine - "phenylketonuria")
├──► Phenylacetic acid (↑ - causes mousy/musty odor)
├──► Phenyllactic acid (↑)
└──► Phenylethylamine (↑)
Tyrosine is NOT produced ──► Melanin ↓ ──► Hypopigmentation
──► Catecholamines ↓
──► Thyroxine ↓
| Test | Principle | Positive Result |
|---|---|---|
| Guthrie test | Bacterial inhibition assay - B. subtilis growth is inhibited by beta-2-thienylalanine, but excess phenylalanine reverses this inhibition | Bacterial growth = high Phe |
| Ferric chloride (FeCl3) test | Phenylpyruvic acid + FeCl3 → blue-green complex | Blue-green = positive |
| Phenistix strip | Ferric ammonium sulfate detects phenylpyruvic acid | Gray to gray-green color at 5-10 mg/dL |
| Tandem mass spectrometry (MS/MS) | Gold standard for newborn screening today - measures Phe/Tyr ratio | Phe/Tyr ratio > 3 |
| HPLC | Quantitative confirmatory testing of amino acids | Elevated phenylalanine |
| Feature | Details |
|---|---|
| Gene | PAH gene, chromosome 12q23.2 |
| Inheritance | Autosomal recessive |
| Frequency | ~1 in 11,000 births (Henry's, p. 579); varies by population |
| Mutations | >1,000 mutations identified; allelic heterogeneity |
| Risk in consanguinity | 25% if both parents are carriers (as in this case) |
| Feature | PKU |
|---|---|
| Enzyme deficient | Phenylalanine hydroxylase (PAH) |
| Gene/Chromosome | PAH gene, Chr 12 |
| Inheritance | Autosomal recessive |
| Metabolite accumulates | Phenylalanine, phenylpyruvic acid, phenylacetic acid |
| What is deficient | Tyrosine, melanin, catecholamines, serotonin |
| Key symptoms | Intellectual disability, seizures, hypopigmentation, mousy odor, eczema |
| Diagnostic test | Guthrie test, FeCl3 test, MS/MS (gold standard) |
| Treatment | Low-phenylalanine diet ± sapropterin (BH4) |
| Screening | Day 2-3 newborn heel-prick (DBS) |
| Screened since | 1963 (Guthrie) |
Of lipid metabolism all case study
| # | Case | Key Disorder |
|---|---|---|
| 1 | Mr. Arjun, 35 yr, chest pain | Familial Hypercholesterolemia (FH) |
| 2 | Ravi, 22 yr, fruity breath, drowsy | Diabetic Ketoacidosis (DKA) |
| 3 | Mrs. Seema, 45 yr, obese, fatigue | Non-Alcoholic Fatty Liver (NAFLD/NASH) |
| 4 | Baby Mohan, 8 months, splenomegaly | Gaucher Disease (Sphingolipidosis) |
| 5 | Mr. Dev, 50 yr, chronic alcoholic | Alcoholic Fatty Liver Disease |
| Test | Patient | Normal |
|---|---|---|
| Total cholesterol | 620 mg/dL | < 200 mg/dL |
| LDL cholesterol | 550 mg/dL | < 100 mg/dL |
| HDL cholesterol | 42 mg/dL | > 40 mg/dL |
| Triglycerides | 160 mg/dL | < 150 mg/dL |
| Coronary angiography | Significant stenosis in LAD | Normal |
| Genetic testing | LDLR gene mutation (heterozygous) | Normal |
Familial Hypercholesterolemia (FH) - Heterozygous - Autosomal semidominant deficiency/dysfunction of LDL receptor (LDLR)

Normal: LDL ──[LDLR]──► Internalized → cholesterol extracted → LDLR recycled
FH (LDLR mutation): LDL stays in BLOOD → LDL cholesterol ↑↑↑
Consequences:
↑ LDL → Macrophage uptake → Foam cells → Atherosclerotic plaques
↑ Cholesterol deposits in tendons → Xanthomas
↑ Cholesterol in cornea → Arcus corneae
↑ Cholesterol in eyelid skin → Xanthelasma
| Genotype | LDL Cholesterol | CAD onset |
|---|---|---|
| Normal (LDLR+/+) | ~130 mg/dL | 6th-7th decade |
| Heterozygote (LDLR+/-) | ~2x normal (~300 mg/dL) | 4th-5th decade |
| Homozygote (LDLR-/-) | ~4-6x normal (~700+ mg/dL) | Childhood (by age 20) |
| Treatment | Mechanism |
|---|---|
| Statins (atorvastatin, rosuvastatin) | Inhibit HMG-CoA reductase → ↓ cholesterol synthesis → ↑ LDLR expression |
| Ezetimibe | Blocks intestinal cholesterol absorption |
| PCSK9 inhibitors | Prevent LDLR degradation → more receptors available |
| Bile acid sequestrants (cholestyramine) | Trap bile acids → liver uses cholesterol to make more bile acids |
| LDL apheresis | Mechanical removal of LDL - for homozygous FH |
| Test | Patient | Normal |
|---|---|---|
| Blood glucose | 520 mg/dL | 70-100 mg/dL |
| Arterial pH | 7.12 | 7.35-7.45 |
| HCO3- | 8 mEq/L | 22-26 mEq/L |
| pCO2 | 20 mmHg (compensatory ↓) | 35-45 mmHg |
| Serum ketones | Strongly positive | Negative |
| Beta-hydroxybutyrate | 8.5 mmol/L | < 0.6 mmol/L |
| Urine ketones | 4+ | Negative |
| Anion gap | 28 mEq/L | 8-12 mEq/L |
| Serum Na+ | 130 mEq/L | 135-145 mEq/L |
| Serum K+ | 5.8 mEq/L (high but will drop with insulin) | 3.5-5.0 |
Diabetic Ketoacidosis (DKA) - Anion gap metabolic acidosis from ketone body accumulation due to absolute insulin deficiency

INSULIN ABSENT (T1DM + missed dose)
│
▼
Glucose cannot enter cells → Cells "starve" despite high blood glucose
│
▼
Glucagon ↑, Epinephrine ↑ → Lipolysis in adipose tissue ↑↑
│
▼
Free fatty acids (FFA) flood into liver → β-oxidation ↑↑
│
▼
Excess Acetyl CoA overwhelms Krebs cycle
│
▼
KETOGENESIS (in liver mitochondria):
2 Acetyl CoA → Acetoacetyl CoA
→ HMG-CoA (HMG-CoA synthase)
→ Acetoacetate (ketone body 1)
→ Beta-hydroxybutyrate (ketone body 2, major)
→ Acetone (ketone body 3, exhaled = fruity breath)
| Ketone Body | Property | Clinical Significance |
|---|---|---|
| Acetoacetate | Acidic | Measured by nitroprusside test |
| Beta-hydroxybutyrate | Most abundant (~75%) | Best marker; NOT detected by nitroprusside (clinical trap!) |
| Acetone | Volatile, exhaled | Fruity/sweet breath odor |
| Step | Action |
|---|---|
| 1. IV fluids | Normal saline 1L/hour initially (correct dehydration) |
| 2. Insulin | IV regular insulin infusion (0.1 U/kg/hour) |
| 3. Potassium | Add K+ to fluids once urine output confirmed (K+ will drop with insulin) |
| 4. Monitor glucose | Switch to 5% dextrose when glucose < 250 mg/dL |
| 5. Treat precipitant | Infection? Missed doses? |
| Test | Patient | Normal |
|---|---|---|
| ALT | 115 U/L | < 40 U/L |
| AST | 80 U/L | < 40 U/L |
| AST:ALT ratio | 0.7 (< 1) | < 1 suggests NAFLD |
| Alkaline phosphatase | 110 U/L | 40-130 U/L |
| Fasting glucose | 145 mg/dL | < 100 mg/dL |
| Triglycerides | 280 mg/dL | < 150 mg/dL |
| HDL | 32 mg/dL | > 50 (women) |
| Insulin | Elevated (insulin resistance) | - |
| Ultrasound abdomen | Bright, echogenic liver (fatty infiltration) | Normal |
| Liver biopsy | Macrovesicular steatosis + hepatocyte ballooning + neutrophil infiltration | Normal |
Non-Alcoholic Steatohepatitis (NASH) - stage 2 of NAFLD spectrum, with steatosis + inflammation ± fibrosis
Normal liver → NAFL (simple steatosis ≥5%) → NASH (steatosis + inflammation) → Fibrosis → Cirrhosis → HCC
| Intervention | Rationale |
|---|---|
| Weight loss (≥7-10%) | Most effective - reduces steatosis and inflammation |
| Exercise | Increases insulin sensitivity, reduces FFA flux |
| Metformin | Reduces hepatic glucose output |
| Vitamin E | Antioxidant - reduces oxidative stress in NASH |
| GLP-1 agonists (semaglutide) | Emerging therapy - reduces liver fat and fibrosis |
| Avoid alcohol + hepatotoxic drugs | Prevent additional liver injury |
| Test | Patient | Normal |
|---|---|---|
| Hemoglobin | 7.2 g/dL | 11-14 g/dL |
| Platelets | 65,000/µL | 1.5-4.0 lakh/µL |
| WBC | Reduced | Normal |
| Bone marrow biopsy | Gaucher cells - macrophages with "crumpled tissue paper" cytoplasm | Normal |
| Glucocerebrosidase activity (leukocytes) | < 15% of normal | Normal |
| Plasma chitotriosidase | Markedly elevated | Normal (biomarker of disease activity) |
| Genetic testing | GBA1 gene mutation (homozygous) | Normal |
| X-ray femur | "Erlenmeyer flask" deformity of distal femur | Normal |
Gaucher Disease Type 1 (non-neuropathic) - Autosomal recessive deficiency of glucocerebrosidase (acid beta-glucosidase)
Cell membranes (RBCs, WBCs) are broken down
↓
Sphingolipids enter lysosomes
↓
Glucocerebroside ──[Glucocerebrosidase]──► Ceramide + Glucose
(GBA1 gene)
Glucocerebrosidase ABSENT
↓
Glucocerebroside ACCUMULATES in lysosomes of macrophages
↓
Macrophages become engorged → GAUCHER CELLS
↓
Gaucher cells accumulate in:
→ SPLEEN → Splenomegaly
→ LIVER → Hepatomegaly
→ BONE MARROW → Pancytopenia (anemia, thrombocytopenia, leukopenia)
→ BONE → Avascular necrosis, Erlenmeyer flask deformity
| Type | Neurologic involvement | Severity | Population |
|---|---|---|---|
| Type 1 (most common) | None | Variable | Ashkenazi Jews (1:850) |
| Type 2 (acute neuronopathic) | Severe, early onset | Fatal by age 2-3 | All populations |
| Type 3 (subacute neuronopathic) | Mild-moderate | Variable | Swedish (Norrbottnian) |
| Treatment | Mechanism |
|---|---|
| Enzyme Replacement Therapy (ERT) - Imiglucerase (Cerezyme) | IV infusion of recombinant glucocerebrosidase → clears substrate from macrophages |
| Substrate Reduction Therapy (SRT) - Miglustat, Eliglustat | Inhibit glucosylceramide synthase → reduce substrate production |
| Hematopoietic stem cell transplant | Curative but high risk |
| Splenectomy | Only if severe thrombocytopenia/hypersplenism (not first line) |
| Test | Patient | Normal |
|---|---|---|
| AST | 280 U/L | < 40 U/L |
| ALT | 110 U/L | < 40 U/L |
| AST:ALT ratio | > 2:1 ✅ | < 1 (NAFLD) |
| GGT | 520 U/L (markedly elevated - alcohol marker) | < 50 U/L |
| Bilirubin (total) | 8.5 mg/dL | < 1.2 mg/dL |
| Albumin | 2.4 g/dL (low - poor synthetic function) | 3.5-5.0 g/dL |
| PT/INR | 2.1 (prolonged) | < 1.2 |
| Serum triglycerides | 380 mg/dL | < 150 mg/dL |
| Uric acid | Elevated (lactic acid competes with uric acid excretion) | Normal |
Alcoholic Steatohepatitis (ASH) / Alcoholic Liver Disease - progressing toward cirrhosis
Ethanol → Acetaldehyde (ADH) → Acetate (ALDH)
↓
NADH/NAD+ ratio ↑↑↑ (both steps produce NADH)
NADH excess causes:
1. Fatty acid β-oxidation ↓ → FFAs accumulate → STEATOSIS
2. Krebs cycle ↓ (NAD+ depleted) → Acetyl CoA → fatty acids → steatosis
3. De novo fatty acid synthesis ↑
4. VLDL export ↓
5. Lactate ↑ (NADH + pyruvate → lactate) → LACTIC ACIDOSIS
6. Glucose synthesis ↓ (gluconeogenesis needs NAD+) → HYPOGLYCEMIA
| Feature | Alcoholic Liver | NAFLD |
|---|---|---|
| AST:ALT ratio | > 2:1 | < 1 |
| GGT | Markedly elevated | Mildly elevated |
| History | Alcohol use | Obesity, T2DM, no alcohol |
| Mallory bodies | Common | Less common |
| Neutrophil infiltration | Prominent | Less prominent |
| Feature | FH (Case 1) | DKA (Case 2) | NAFLD/NASH (Case 3) | Gaucher (Case 4) | Alcoholic LD (Case 5) |
|---|---|---|---|---|---|
| Enzyme/Defect | LDLR mutation | Insulin absence → ↑ ketogenesis | Insulin resistance → steatosis | Glucocerebrosidase | ↑ NADH/NAD+ ratio |
| Key lipid | LDL cholesterol | Ketone bodies | Triglycerides in hepatocytes | Glucocerebroside | Triglycerides |
| Key sign | Xanthomas, arcus | Kussmaul breathing, fruity breath | Hepatomegaly, obesity | Hepatosplenomegaly | AST:ALT > 2 |
| Lab hallmark | LDL > 300 mg/dL | Anion gap acidosis, ketonemia | AST:ALT < 1, bright liver on USG | Gaucher cells, ↓ glucocerebrosidase | AST:ALT > 2, ↑ GGT |
| Inheritance | Autosomal semidominant | Not inherited | Polygenic + lifestyle | Autosomal recessive | Not inherited |
| Treatment | Statins, PCSK9 inhibitors | IV insulin, fluids, K+ | Weight loss, GLP-1 agonists | ERT (imiglucerase) | Alcohol abstinence |
Generate a PDF quick reference guide for all 5 lipid metabolism cases
ls -la /tmp/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /tmp/workspace/lipid-cases
~/lipid-cases/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.lib.colors import HexColor
# ─── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1a3a5c")
MED_BLUE = HexColor("#2c6fad")
LIGHT_BLUE = HexColor("#dce9f5")
ACCENT_RED = HexColor("#c0392b")
ACCENT_GRN = HexColor("#1e7e45")
ACCENT_ORG = HexColor("#d35400")
ACCENT_PUR = HexColor("#6c3483")
ACCENT_TEAL = HexColor("#117a8b")
LIGHT_GREY = HexColor("#f4f4f4")
MID_GREY = HexColor("#888888")
WHITE = colors.white
BLACK = colors.black
CASE_COLORS = [ACCENT_RED, ACCENT_ORG, ACCENT_GRN, ACCENT_PUR, ACCENT_TEAL]
CASE_LIGHT = [
HexColor("#fdecea"), HexColor("#fef0e6"), HexColor("#e8f5ee"),
HexColor("#f3eaf8"), HexColor("#e6f4f7")
]
# ─── Document setup ───────────────────────────────────────────────────────────
OUTPUT = "/tmp/workspace/lipid-cases/Lipid_Metabolism_Quick_Reference.pdf"
PAGE_W, PAGE_H = A4
MARGIN = 1.5 * cm
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=2*cm, bottomMargin=2*cm,
title="Lipid Metabolism - MBBS Quick Reference",
author="Orris AI",
subject="Biochemistry Case Studies"
)
styles = getSampleStyleSheet()
def S(name, **kw):
"""Build a ParagraphStyle from defaults + overrides."""
return ParagraphStyle(name, **kw)
# ── shared styles ──────────────────────────────────────────────────────────────
body = S("body", fontName="Helvetica", fontSize=8.5, leading=12,
textColor=BLACK, spaceAfter=4)
bodyJ = S("bodyJ", fontName="Helvetica", fontSize=8.5, leading=12,
textColor=BLACK, spaceAfter=4, alignment=TA_JUSTIFY)
bold = S("bold", fontName="Helvetica-Bold", fontSize=8.5, leading=12,
textColor=BLACK, spaceAfter=2)
small = S("small", fontName="Helvetica", fontSize=7.5, leading=10,
textColor=MID_GREY)
code = S("code", fontName="Courier", fontSize=7.5, leading=11,
textColor=DARK_BLUE, backColor=LIGHT_GREY, spaceAfter=4,
leftIndent=6, rightIndent=6)
def header_style(color):
return S(f"hdr_{id(color)}", fontName="Helvetica-Bold", fontSize=11,
leading=14, textColor=WHITE, spaceAfter=0, spaceBefore=0,
alignment=TA_LEFT)
def subhdr_style(color):
return S(f"sub_{id(color)}", fontName="Helvetica-Bold", fontSize=9,
leading=12, textColor=color, spaceAfter=3, spaceBefore=6)
# ─── Helper builders ──────────────────────────────────────────────────────────
def cover_table(story):
"""Full-width cover block."""
cover_data = [[
Paragraph(
"<font color='white'><b>MBBS Biochemistry</b></font>",
S("ct1", fontName="Helvetica-Bold", fontSize=22, leading=28,
textColor=WHITE, alignment=TA_CENTER)
)
], [
Paragraph(
"<font color='white'>Lipid Metabolism — Quick Reference Guide</font>",
S("ct2", fontName="Helvetica", fontSize=14, leading=18,
textColor=WHITE, alignment=TA_CENTER)
)
], [
Paragraph(
"<font color='white'>5 Clinical Case Studies | Pathophysiology • Investigations • MCQs • Viva</font>",
S("ct3", fontName="Helvetica", fontSize=9, leading=12,
textColor=HexColor("#cce0f5"), alignment=TA_CENTER)
)
]]
t = Table(cover_data, colWidths=[PAGE_W - 2*MARGIN])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,-1), (-1,-1), 14),
("ROWBACKGROUNDS", (0,0), (-1,-1), [DARK_BLUE]),
("BOX", (0,0), (-1,-1), 0, DARK_BLUE),
]))
story.append(t)
def case_header(story, num, title, subtitle, color):
data = [[
Paragraph(f"<b>CASE {num}</b>", header_style(color)),
Paragraph(f"<b>{title}</b>", header_style(color)),
Paragraph(subtitle, S("sh2", fontName="Helvetica", fontSize=8,
leading=10, textColor=HexColor("#ddeeff"),
alignment=TA_LEFT)),
]]
t = Table(data, colWidths=[2.2*cm, 9*cm, None])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 8),
("BOX", (0,0), (-1,-1), 0, color),
]))
story.append(t)
def section_title(story, text, color):
story.append(Spacer(1, 4))
t = Table([[Paragraph(f" {text}", S("st", fontName="Helvetica-Bold",
fontSize=8.5, textColor=WHITE, leading=12))]],
colWidths=[PAGE_W - 2*MARGIN])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(t)
def info_table(story, rows, col_widths, color, header_row=True):
"""Generic styled table."""
t = Table(rows, colWidths=col_widths, repeatRows=1 if header_row else 0)
ts = [
("GRID", (0,0), (-1,-1), 0.4, HexColor("#cccccc")),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("LEADING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("ALIGN", (0,0), (-1,-1), "LEFT"),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
if header_row:
ts += [
("BACKGROUND", (0,0), (-1,0), color),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, HexColor("#f7f7f7")]),
]
t.setStyle(TableStyle(ts))
story.append(t)
def mcq_block(story, questions, color):
for i, (q, opts, ans_idx) in enumerate(questions):
qp = Paragraph(f"<b>Q{i+1}.</b> {q}",
S("q", fontName="Helvetica-Bold", fontSize=8,
leading=11, textColor=DARK_BLUE, spaceAfter=1))
story.append(qp)
for j, opt in enumerate(opts):
prefix = "✓" if j == ans_idx else "○"
col = ACCENT_GRN if j == ans_idx else BLACK
op = Paragraph(
f" {prefix} {opt}",
S(f"opt{i}{j}", fontName="Helvetica", fontSize=7.5,
leading=10, textColor=col, spaceAfter=1,
leftIndent=8)
)
story.append(op)
story.append(Spacer(1, 3))
def viva_block(story, qas, color):
for q, a in qas:
story.append(Paragraph(
f"<b>Q:</b> {q}",
S("vq", fontName="Helvetica-Bold", fontSize=8, leading=11,
textColor=color, spaceAfter=1, leftIndent=4)
))
story.append(Paragraph(
f"<b>A:</b> {a}",
S("va", fontName="Helvetica", fontSize=8, leading=11,
textColor=BLACK, spaceAfter=5, leftIndent=4)
))
def pathophys_box(story, steps, color, light):
rows = [[Paragraph(s, S("pp", fontName="Courier", fontSize=7.5,
leading=11, textColor=DARK_BLUE))]
for s in steps]
t = Table(rows, colWidths=[PAGE_W - 2*MARGIN])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), light),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("BOX", (0,0), (-1,-1), 0.8, color),
]))
story.append(t)
# =============================================================================
# BUILD STORY
# =============================================================================
story = []
W = PAGE_W - 2*MARGIN # usable width
# ── COVER ─────────────────────────────────────────────────────────────────────
cover_table(story)
story.append(Spacer(1, 6))
# Index table
idx_data = [
[Paragraph("<b>Case</b>", S("ih", fontName="Helvetica-Bold", fontSize=8.5,
textColor=WHITE)),
Paragraph("<b>Patient</b>", S("ih2", fontName="Helvetica-Bold", fontSize=8.5,
textColor=WHITE)),
Paragraph("<b>Diagnosis</b>", S("ih3", fontName="Helvetica-Bold", fontSize=8.5,
textColor=WHITE)),
Paragraph("<b>Key Enzyme/Defect</b>", S("ih4", fontName="Helvetica-Bold",
fontSize=8.5, textColor=WHITE))],
["1", "Mr. Arjun, 35M", "Familial Hypercholesterolemia", "LDL Receptor (LDLR) mutation"],
["2", "Ravi, 22M", "Diabetic Ketoacidosis", "Insulin absence → ↑ ketogenesis"],
["3", "Mrs. Seema, 45F","NAFLD / NASH", "Insulin resistance → hepatic steatosis"],
["4", "Baby Mohan, 8M", "Gaucher Disease", "Glucocerebrosidase deficiency"],
["5", "Mr. Dev, 52M", "Alcoholic Fatty Liver", "↑ NADH/NAD+ ratio"],
]
it = Table(idx_data, colWidths=[1.2*cm, 3.5*cm, 6*cm, None])
it.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), MED_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("LEADING", (0,0), (-1,-1), 11),
("ROWBACKGROUNDS",(0,1), (-1,-1),
[CASE_LIGHT[i % 5] for i in range(5)]),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#bbbbbb")),
("ALIGN", (0,0), (0,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(Paragraph("Cases at a Glance",
S("idx", fontName="Helvetica-Bold", fontSize=10, textColor=DARK_BLUE,
spaceAfter=4, spaceBefore=8)))
story.append(it)
story.append(Spacer(1, 6))
story.append(HRFlowable(width=W, thickness=0.5, color=MID_GREY))
story.append(PageBreak())
# =============================================================================
# CASE 1 – Familial Hypercholesterolemia
# =============================================================================
C = 0
case_header(story, 1, "Familial Hypercholesterolemia (FH)",
"LDLR mutation | Autosomal Semidominant | Premature CAD", CASE_COLORS[C])
# Vignette + key signs
section_title(story, "Clinical Vignette & Key Signs", CASE_COLORS[C])
story.append(Paragraph(
"Mr. Arjun, 35-year-old male. Chest pain on exertion × 3 months. "
"Father died of MI at 42. Non-smoker, non-diabetic, vegetarian diet.",
bodyJ))
signs_data = [
[Paragraph("<b>Sign</b>", bold), Paragraph("<b>Significance</b>", bold)],
["Tendon xanthomas (Achilles, extensors)", "Cholesterol deposits — pathognomonic of FH"],
["Xanthelasma (eyelids)", "Cholesterol in periorbital skin"],
["Premature arcus corneae", "Corneal cholesterol ring before age 45"],
["ST depression V4–V6 on ECG", "Myocardial ischemia from early atherosclerosis"],
]
info_table(story, signs_data, [7*cm, None], CASE_COLORS[C])
# Investigations
section_title(story, "Key Investigations", CASE_COLORS[C])
inv_data = [
[Paragraph("<b>Test</b>", bold), Paragraph("<b>Patient</b>", bold),
Paragraph("<b>Normal</b>", bold)],
["Total cholesterol", "620 mg/dL ↑↑", "< 200 mg/dL"],
["LDL cholesterol", "550 mg/dL ↑↑", "< 100 mg/dL"],
["HDL cholesterol", "42 mg/dL", "> 40 mg/dL"],
["Triglycerides", "160 mg/dL", "< 150 mg/dL"],
["LDLR gene (genetic)","Heterozygous mutation", "Normal"],
]
info_table(story, inv_data, [5*cm, 4.5*cm, None], CASE_COLORS[C])
# Pathophys
section_title(story, "Pathophysiology", CASE_COLORS[C])
pathophys_box(story, [
"NORMAL: LDL → binds LDLR on hepatocyte → endocytosis → cholesterol extracted → LDLR recycled",
"FH: LDLR mutated/absent → LDL stays in blood → LDL ↑↑↑",
" → Macrophage uptake → Foam cells → Atherosclerotic plaques",
" → Cholesterol in tendons → Xanthomas",
" → Cholesterol in cornea → Arcus corneae",
"PCSK9: Protease that degrades LDLR — blocking it (evolocumab) = more receptors = ↓ LDL",
], CASE_COLORS[C], CASE_LIGHT[C])
# Gene dosage
section_title(story, "Gene Dosage Effect", CASE_COLORS[C])
gd_data = [
[Paragraph("<b>Genotype</b>", bold), Paragraph("<b>LDL</b>", bold),
Paragraph("<b>CAD Onset</b>", bold)],
["LDLR +/+ (Normal)", "~130 mg/dL", "6th–7th decade"],
["LDLR +/− (Heterozygote)", "~300 mg/dL (2×)", "4th–5th decade"],
["LDLR −/− (Homozygote)", "700+ mg/dL (5×)", "Childhood (<20 yr); fatal by 3rd decade if untreated"],
]
info_table(story, gd_data, [4.5*cm, 4*cm, None], CASE_COLORS[C])
# Management
section_title(story, "Management", CASE_COLORS[C])
mgmt_data = [
[Paragraph("<b>Drug/Intervention</b>", bold), Paragraph("<b>Mechanism</b>", bold)],
["Statins (atorvastatin, rosuvastatin)", "Inhibit HMG-CoA reductase → ↓ cholesterol synthesis → ↑ LDLR expression"],
["Ezetimibe", "Blocks intestinal cholesterol absorption (NPC1L1 inhibitor)"],
["PCSK9 inhibitors (evolocumab)", "Prevent LDLR lysosomal degradation → more receptors available"],
["Bile acid sequestrants (cholestyramine)","Trap bile acids → liver uses cholesterol to make more → ↓ LDL"],
["LDL apheresis", "Mechanical LDL removal — for homozygous FH"],
]
info_table(story, mgmt_data, [5.5*cm, None], CASE_COLORS[C])
# MCQs
section_title(story, "MCQs", CASE_COLORS[C])
mcq_block(story, [
("Primary defect in FH is:",
["Excess dietary fat absorption", "Deficiency of LDL receptor",
"Increased VLDL synthesis", "Deficiency of HMG-CoA reductase"], 1),
("Xanthomas in FH are cholesterol deposits in:",
["Spleen macrophages", "Tendon sheath macrophages (foam cells)",
"Hepatocytes", "Corneal stroma"], 1),
("PCSK9 inhibitors lower LDL by:",
["Inhibiting cholesterol synthesis", "Reducing intestinal absorption",
"Preventing lysosomal degradation of LDLR", "Increasing HDL production"], 2),
], CASE_COLORS[C])
# Viva
section_title(story, "Viva Q&A", CASE_COLORS[C])
viva_block(story, [
("Why do statins increase LDL receptor expression?",
"Statins inhibit HMG-CoA reductase → ↓ intracellular cholesterol → hepatocyte senses low cholesterol "
"→ SREBP activates LDLR gene transcription → more receptors pull LDL from blood."),
("Why is FH called autosomal semidominant?",
"Both heterozygotes and homozygotes are clinically affected (unlike recessive), but with a clear "
"gene-dosage effect — homozygotes are far more severely affected, unlike autosomal dominant."),
], CASE_COLORS[C])
story.append(PageBreak())
# =============================================================================
# CASE 2 – Diabetic Ketoacidosis
# =============================================================================
C = 1
case_header(story, 2, "Diabetic Ketoacidosis (DKA)",
"Absolute insulin deficiency | Anion gap metabolic acidosis | Ketonemia", CASE_COLORS[C])
section_title(story, "Clinical Vignette & Key Signs", CASE_COLORS[C])
story.append(Paragraph(
"Ravi, 22-year-old male, known T1DM. Missed insulin for 2 days. "
"Vomiting + abdominal pain, progressive drowsiness. GCS 10/15.",
bodyJ))
signs_data2 = [
[Paragraph("<b>Sign</b>", bold), Paragraph("<b>Biochemical Basis</b>", bold)],
["Kussmaul breathing (deep, rapid sighing)", "Metabolic acidosis → central chemoreceptors → ↑ RR to blow off CO₂"],
["Fruity/sweet breath odor", "Acetone (volatile ketone) exhaled through lungs"],
["Dehydration (dry mucosa, ↓ skin turgor)", "Osmotic diuresis from hyperglycemia → fluid loss"],
["Abdominal pain + vomiting", "Ketone-induced gastric irritation, electrolyte disturbance"],
]
info_table(story, signs_data2, [7*cm, None], CASE_COLORS[C])
section_title(story, "Key Investigations", CASE_COLORS[C])
inv_data2 = [
[Paragraph("<b>Test</b>", bold), Paragraph("<b>Patient</b>", bold),
Paragraph("<b>Normal</b>", bold), Paragraph("<b>Significance</b>", bold)],
["Blood glucose", "520 mg/dL ↑↑", "70–100", "Absolute insulin deficiency"],
["Arterial pH", "7.12 ↓↓", "7.35–7.45", "Severe metabolic acidosis"],
["HCO₃⁻", "8 mEq/L ↓↓", "22–26", "Consumed buffering ketoacids"],
["pCO₂", "20 mmHg ↓", "35–45", "Respiratory compensation"],
["Anion gap", "28 ↑↑", "8–12", "Unmeasured ketoanions"],
["β-hydroxybutyrate", "8.5 mmol/L ↑↑", "< 0.6", "Major ketone body"],
["Serum K⁺", "5.8 (initially ↑)","3.5–5.0", "Acidosis shifts K⁺ out of cells"],
]
info_table(story, inv_data2, [4*cm, 3.2*cm, 2.5*cm, None], CASE_COLORS[C])
section_title(story, "Pathophysiology", CASE_COLORS[C])
pathophys_box(story, [
"INSULIN ABSENT → Cells cannot use glucose → Glucagon ↑, Epinephrine ↑",
" → Adipose lipolysis ↑↑ → FFA flood liver",
" → β-oxidation ↑↑ → Excess Acetyl CoA overwhelms Krebs cycle",
"KETOGENESIS (liver mitochondria):",
" 2 Acetyl CoA → Acetoacetyl CoA → HMG-CoA → Acetoacetate",
" → β-Hydroxybutyrate (major, 75%)",
" → Acetone (exhaled → fruity breath)",
"Ketoacids lower blood pH → Metabolic acidosis (anion gap type)",
"NOTE: Liver produces ketones but CANNOT use them (lacks succinyl CoA transferase)",
], CASE_COLORS[C], CASE_LIGHT[C])
section_title(story, "The 3 Ketone Bodies", CASE_COLORS[C])
kb_data = [
[Paragraph("<b>Ketone Body</b>", bold), Paragraph("<b>% in DKA</b>", bold),
Paragraph("<b>Detection</b>", bold), Paragraph("<b>Clinical Note</b>", bold)],
["Acetoacetate", "~20%", "Nitroprusside test (positive)", "Direct acid"],
["β-Hydroxybutyrate", "~75%", "NOT detected by nitroprusside ⚠️", "Best blood marker (enzymatic assay)"],
["Acetone", "~5%", "Volatile — exhaled", "Causes fruity breath; not an acid"],
]
info_table(story, kb_data, [4*cm, 2.5*cm, 4.5*cm, None], CASE_COLORS[C])
section_title(story, "Management (DKA Protocol)", CASE_COLORS[C])
mgmt_data2 = [
[Paragraph("<b>Step</b>", bold), Paragraph("<b>Action</b>", bold),
Paragraph("<b>Key Rationale</b>", bold)],
["1. IV Fluids", "0.9% NaCl 1 L/hr", "Correct dehydration, dilute glucose"],
["2. Insulin", "IV regular insulin 0.1 U/kg/hr", "Stop ketogenesis, allow glucose uptake"],
["3. Potassium", "Add K⁺ once urine output confirmed","K⁺ will fall rapidly as insulin drives it into cells"],
["4. Monitor", "Switch to D5W when glucose < 250", "Prevent hypoglycemia while insulin continues"],
["5. Treat cause", "Identify: missed dose? infection?", "DKA recurrence prevention"],
]
info_table(story, mgmt_data2, [2.5*cm, 5.5*cm, None], CASE_COLORS[C])
section_title(story, "MCQs", CASE_COLORS[C])
mcq_block(story, [
("Rate-limiting enzyme of ketogenesis:",
["Acetyl CoA carboxylase", "HMG-CoA synthase (mitochondrial)",
"HMG-CoA reductase", "Pyruvate dehydrogenase"], 1),
("Nitroprusside test does NOT detect:",
["Acetoacetate", "Acetone", "β-Hydroxybutyrate", "None of the above"], 2),
("The organ that produces but CANNOT use ketone bodies:",
["Brain", "Heart", "Liver", "Kidney"], 2),
("Initial hyperkalemia in DKA is because:",
["Excess dietary K⁺", "Acidosis shifts K⁺ out of cells",
"Insulin pushes K⁺ into cells", "Renal failure"], 1),
], CASE_COLORS[C])
section_title(story, "Viva Q&A", CASE_COLORS[C])
viva_block(story, [
("Why does the liver produce ketones but not use them?",
"The liver lacks succinyl CoA transferase (thiophorase) — the enzyme needed to reconvert "
"acetoacetate to acetoacetyl CoA for Krebs cycle entry. Ketones are exported as fuel for brain, heart, and muscle."),
("What prevents ketogenesis in the fed state?",
"Insulin activates acetyl CoA carboxylase → produces malonyl CoA → inhibits CPT-1 "
"(carnitine palmitoyl transferase I) → fatty acids cannot enter mitochondria → no β-oxidation → no ketogenesis."),
], CASE_COLORS[C])
story.append(PageBreak())
# =============================================================================
# CASE 3 – NAFLD / NASH
# =============================================================================
C = 2
case_header(story, 3, "Non-Alcoholic Fatty Liver Disease (NAFLD / NASH)",
"Insulin resistance | Hepatic steatosis → steatohepatitis → cirrhosis", CASE_COLORS[C])
section_title(story, "Clinical Vignette & Key Signs", CASE_COLORS[C])
story.append(Paragraph(
"Mrs. Seema, 45F. BMI 36 (obese). T2DM on metformin. Fatigue, RUQ discomfort × 3 years. "
"NO alcohol. Hepatomegaly. No stigmata of chronic liver disease.",
bodyJ))
section_title(story, "Key Investigations", CASE_COLORS[C])
inv_data3 = [
[Paragraph("<b>Test</b>", bold), Paragraph("<b>Patient</b>", bold),
Paragraph("<b>Normal</b>", bold), Paragraph("<b>Significance</b>", bold)],
["ALT", "115 U/L ↑", "< 40", "Hepatocellular injury (ALT > AST in NAFLD)"],
["AST", "80 U/L ↑", "< 40", "AST:ALT < 1 — favors NAFLD over alcohol"],
["AST:ALT ratio", "0.7 (<1) ✓", "< 1 = NAFLD","Key differentiator from alcoholic liver disease"],
["GGT", "110 U/L ↑", "< 50", "Mild elevation; markedly elevated in alcohol"],
["Fasting glucose", "145 mg/dL ↑", "< 100", "Insulin resistance / T2DM"],
["Triglycerides", "280 mg/dL ↑", "< 150", "Hypertriglyceridemia from excess FFA flux"],
["HDL", "32 mg/dL ↓", "> 50 (F)", "Metabolic syndrome component"],
["USG abdomen", "Bright echogenic liver", "Normal", "Fatty infiltration — first-line imaging"],
["Liver biopsy", "Macrovesicular steatosis + hepatocyte ballooning + neutrophils", "—", "Confirms NASH"],
]
info_table(story, inv_data3, [4*cm, 3.8*cm, 2.5*cm, None], CASE_COLORS[C])
section_title(story, "NAFLD Spectrum", CASE_COLORS[C])
pathophys_box(story, [
"Normal Liver → NAFL (steatosis ≥5%, no inflammation) → NASH (steatosis + inflammation + ballooning)",
" → Fibrosis → Cirrhosis (micronodular) → Hepatocellular Carcinoma (HCC)",
"",
"TWO-HIT HYPOTHESIS:",
" 1st Hit: Insulin resistance → ↑ FFA to liver + ↑ de novo lipogenesis → STEATOSIS",
" 2nd Hit: Oxidative stress + mitochondrial dysfunction + gut dysbiosis → NASH / FIBROSIS",
], CASE_COLORS[C], CASE_LIGHT[C])
section_title(story, "Liver Biopsy Findings (Robbins)", CASE_COLORS[C])
bx_data = [
[Paragraph("<b>Finding</b>", bold), Paragraph("<b>Description</b>", bold),
Paragraph("<b>Significance</b>", bold)],
["Macrovesicular steatosis", "Large lipid droplets displace nucleus — begins centrilobular (zone 3)", "Earliest, most reversible change"],
["Hepatocyte ballooning", "Swelling + necrosis of centrilobular hepatocytes", "Marker of lipotoxic injury"],
["Mallory hyaline bodies", "Ubiquitinated keratins 8 & 18 — eosinophilic inclusions", "Degeneration marker"],
["Neutrophil infiltration", "Surrounds ballooned hepatocytes (lobular inflammation)", "Distinguishes NASH from simple steatosis"],
["Perisinusoidal fibrosis", "\"Chicken-wire fence\" collagen in space of Disse (zone 3)", "Progressive → cirrhosis"],
["Micronodular cirrhosis", "Nodules < 0.3 cm — end stage burned-out NAFLD", "Irreversible end stage"],
]
info_table(story, bx_data, [4.5*cm, 6*cm, None], CASE_COLORS[C])
section_title(story, "Management", CASE_COLORS[C])
mgmt_data3 = [
[Paragraph("<b>Intervention</b>", bold), Paragraph("<b>Effect</b>", bold)],
["Weight loss ≥7–10% body weight (most effective)", "Reduces steatosis, inflammation, fibrosis stage"],
["Aerobic exercise (150 min/week)", "↑ Insulin sensitivity, ↓ hepatic FFA flux"],
["Vitamin E (800 IU/day)", "Antioxidant — reduces oxidative 2nd hit in NASH"],
["GLP-1 agonists (semaglutide)", "↓ Liver fat, ↓ inflammation, ↓ fibrosis — emerging"],
["Avoid alcohol, NSAIDs, hepatotoxic drugs", "Prevent additional hepatic injury"],
]
info_table(story, mgmt_data3, [8*cm, None], CASE_COLORS[C])
section_title(story, "MCQs", CASE_COLORS[C])
mcq_block(story, [
("Earliest and most reversible change in fatty liver disease:",
["Fibrosis", "Steatohepatitis", "Macrovesicular steatosis", "Cirrhosis"], 2),
("Mallory hyaline bodies are composed of:",
["Amyloid", "Ubiquitinated keratins 8 and 18", "Fibronectin", "Collagen IV"], 1),
("Fat accumulation in NAFLD begins in:",
["Zone 1 (periportal)", "Zone 2 (midzonal)", "Zone 3 (centrilobular)", "Uniform"], 2),
("AST:ALT ratio in NAFLD vs. alcoholic liver disease:",
["Both > 2:1", "NAFLD < 1; alcoholic > 2:1", "NAFLD > 2:1; alcoholic < 1", "Equal in both"], 1),
], CASE_COLORS[C])
section_title(story, "Viva Q&A", CASE_COLORS[C])
viva_block(story, [
("How does insulin resistance cause fatty liver?",
"Insulin resistance: (1) fails to suppress adipose lipolysis → ↑ FFA to liver; "
"(2) still activates SREBP-1c in liver → ↑ de novo lipogenesis; "
"(3) impairs VLDL export. Net: triglyceride accumulation in hepatocytes."),
("What is the significance of perisinusoidal 'chicken-wire' fibrosis?",
"Collagen deposition in the space of Disse in zone 3 — characteristic of NAFLD/ALD. "
"Reflects stellate cell activation by lipotoxic injury. Differs from portal fibrosis in viral hepatitis."),
], CASE_COLORS[C])
story.append(PageBreak())
# =============================================================================
# CASE 4 – Gaucher Disease
# =============================================================================
C = 3
case_header(story, 4, "Gaucher Disease (Sphingolipidosis)",
"Glucocerebrosidase deficiency | AR | Hepatosplenomegaly + Pancytopenia", CASE_COLORS[C])
section_title(story, "Clinical Vignette", CASE_COLORS[C])
story.append(Paragraph(
"Baby Mohan, 8-month-old male. Ashkenazi Jewish parents (consanguineous). "
"Progressive abdominal distension, failure to thrive, pallor. "
"Massive splenomegaly (8 cm), hepatomegaly (5 cm). Neurologically normal (Type 1).",
bodyJ))
section_title(story, "Key Investigations", CASE_COLORS[C])
inv_data4 = [
[Paragraph("<b>Test</b>", bold), Paragraph("<b>Patient</b>", bold),
Paragraph("<b>Significance</b>", bold)],
["Haemoglobin", "7.2 g/dL ↓", "Marrow infiltration → anemia"],
["Platelets", "65,000/µL ↓", "Hypersplenism + marrow infiltration"],
["Bone marrow biopsy","Gaucher cells (crumpled tissue paper cytoplasm)", "Pathognomonic"],
["Glucocerebrosidase activity (leukocytes)", "< 15% of normal ↓↓", "Confirmatory enzymatic diagnosis"],
["Plasma chitotriosidase","Markedly elevated", "Disease activity biomarker for monitoring"],
["GBA1 gene", "Homozygous mutation", "Confirms genetic diagnosis"],
["X-ray femur", "Erlenmeyer flask deformity", "Marrow infiltration → failed remodeling"],
]
info_table(story, inv_data4, [5.5*cm, 4*cm, None], CASE_COLORS[C])
section_title(story, "Pathophysiology", CASE_COLORS[C])
pathophys_box(story, [
"Normal: Cell membranes (RBC, WBC) broken down → sphingolipids enter lysosomes",
" Glucocerebroside →[glucocerebrosidase]→ Ceramide + Glucose",
"",
"Gaucher: Glucocerebrosidase ABSENT (GBA1 mutation)",
" Glucocerebroside ACCUMULATES in macrophage lysosomes → GAUCHER CELLS",
" Gaucher cells in SPLEEN → Splenomegaly",
" LIVER → Hepatomegaly",
" BONE MARROW → Pancytopenia (anemia, thrombocytopenia)",
" BONE → Avascular necrosis, Erlenmeyer flask deformity",
], CASE_COLORS[C], CASE_LIGHT[C])
section_title(story, "Three Types of Gaucher Disease", CASE_COLORS[C])
types_data = [
[Paragraph("<b>Type</b>", bold), Paragraph("<b>Neuro involvement</b>", bold),
Paragraph("<b>Severity</b>", bold), Paragraph("<b>Notes</b>", bold)],
["Type 1 (most common)", "None", "Variable — can live normally with ERT", "Ashkenazi Jews (1:850); N370S mutation"],
["Type 2 (acute neuro)", "Severe, early","Fatal by age 2–3", "All populations; no ERT benefit for CNS"],
["Type 3 (subacute)", "Mild-moderate","Variable", "Swedish Norrbottnian population"],
]
info_table(story, types_data, [3.5*cm, 3.5*cm, 4*cm, None], CASE_COLORS[C])
section_title(story, "Sphingolipidosis Comparison", CASE_COLORS[C])
slipid_data = [
[Paragraph("<b>Disease</b>", bold), Paragraph("<b>Enzyme deficient</b>", bold),
Paragraph("<b>Substrate stored</b>", bold), Paragraph("<b>Inheritance</b>", bold)],
["Gaucher", "Glucocerebrosidase", "Glucocerebroside", "AR"],
["Tay-Sachs", "Hexosaminidase A", "GM2 ganglioside", "AR"],
["Niemann-Pick","Sphingomyelinase", "Sphingomyelin", "AR"],
["Fabry", "α-Galactosidase A", "Globotriaosylceramide","X-linked ⚠️"],
["Krabbe", "Galactocerebrosidase", "Galactocerebroside", "AR"],
]
info_table(story, slipid_data, [3.5*cm, 4.5*cm, 4*cm, None], CASE_COLORS[C])
section_title(story, "Management", CASE_COLORS[C])
mgmt_data4 = [
[Paragraph("<b>Treatment</b>", bold), Paragraph("<b>Mechanism</b>", bold)],
["Enzyme Replacement Therapy (ERT) — imiglucerase (Cerezyme), IV infusion",
"Recombinant glucocerebrosidase → clears glucocerebroside from macrophages"],
["Substrate Reduction Therapy (SRT) — miglustat, eliglustat",
"Inhibit glucosylceramide synthase → ↓ substrate production"],
["HSCT", "Curative but high risk — limited to severe cases"],
]
info_table(story, mgmt_data4, [6.5*cm, None], CASE_COLORS[C])
section_title(story, "MCQs", CASE_COLORS[C])
mcq_block(story, [
("Enzyme deficient in Gaucher disease:",
["Sphingomyelinase", "Hexosaminidase A", "Glucocerebrosidase", "α-Galactosidase A"], 2),
("Gaucher cells show:",
["Foam cell vacuolated cytoplasm", "Crumpled tissue paper cytoplasm",
"Cherry-red spot", "PAS-negative granules"], 1),
("Only X-linked sphingolipidosis:",
["Gaucher", "Tay-Sachs", "Niemann-Pick A", "Fabry disease"], 3),
("Biomarker for monitoring Gaucher disease activity:",
["Serum LDH", "Plasma chitotriosidase", "Ceruloplasmin", "Urine homogentisic acid"], 1),
], CASE_COLORS[C])
section_title(story, "Viva Q&A", CASE_COLORS[C])
viva_block(story, [
("Why does Gaucher disease cause bone disease?",
"Gaucher cells infiltrate bone marrow → (1) displace hematopoiesis → pancytopenia; "
"(2) ↑ intramedullary pressure → ischemia → avascular necrosis of femoral head; "
"(3) disrupt bone remodeling → Erlenmeyer flask deformity."),
("Why does ERT not work for CNS disease in Type 2?",
"Imiglucerase is a large protein and cannot cross the blood-brain barrier. "
"Therefore, neuronal glucocerebroside accumulation is not reversed, and Type 2 (acute neuropathic) "
"Gaucher disease remains fatal despite ERT."),
], CASE_COLORS[C])
story.append(PageBreak())
# =============================================================================
# CASE 5 – Alcoholic Fatty Liver Disease
# =============================================================================
C = 4
case_header(story, 5, "Alcoholic Fatty Liver Disease",
"↑ NADH/NAD⁺ ratio | Steatosis → Steatohepatitis → Cirrhosis", CASE_COLORS[C])
section_title(story, "Clinical Vignette & Key Signs", CASE_COLORS[C])
story.append(Paragraph(
"Mr. Dev, 52M. Chronic alcoholic (500 mL whisky/day × 15 years). "
"Jaundice, ascites, confusion. Hepatomegaly (tender, firm). Spider naevi, palmar erythema, asterixis.",
bodyJ))
section_title(story, "Key Investigations", CASE_COLORS[C])
inv_data5 = [
[Paragraph("<b>Test</b>", bold), Paragraph("<b>Patient</b>", bold),
Paragraph("<b>Normal</b>", bold), Paragraph("<b>Significance</b>", bold)],
["AST", "280 U/L ↑↑", "< 40", "Mitochondrial enzyme — released by alcohol damage"],
["ALT", "110 U/L ↑", "< 40", "Cytoplasmic enzyme"],
["AST:ALT ratio","2.5:1 ↑ (>2)", "< 1", "KEY: >2:1 strongly suggests alcoholic etiology"],
["GGT", "520 U/L ↑↑↑", "< 50", "Alcohol induction marker — most sensitive for alcohol use"],
["Total bilirubin","8.5 mg/dL ↑", "< 1.2", "Impaired hepatic excretion"],
["Albumin", "2.4 g/dL ↓", "3.5–5.0", "Impaired synthetic function"],
["PT/INR", "2.1 ↑", "< 1.2", "Impaired clotting factor synthesis"],
["Triglycerides","380 mg/dL ↑", "< 150", "↑ NADH → ↓ β-oxidation → fat accumulates → ↑ TG"],
]
info_table(story, inv_data5, [3.8*cm, 3.2*cm, 2*cm, None], CASE_COLORS[C])
section_title(story, "Pathophysiology — The NADH/NAD⁺ Story", CASE_COLORS[C])
pathophys_box(story, [
"Ethanol →[ADH]→ Acetaldehyde + NADH",
"Acetaldehyde →[ALDH]→ Acetate + NADH",
"BOTH STEPS produce NADH → NADH/NAD⁺ ratio ↑↑↑",
"",
"Consequences of high NADH:",
" 1. β-oxidation ↓ (needs NAD⁺) → FFA accumulate → STEATOSIS",
" 2. Krebs cycle ↓ (NAD⁺ depleted) → Acetyl CoA diverted to FA synthesis",
" 3. Gluconeogenesis ↓ (pyruvate → lactate instead of glucose) → HYPOGLYCEMIA",
" 4. Lactate ↑ → LACTIC ACIDOSIS",
" 5. Uric acid excretion ↓ (competes with lactate) → GOUT",
" 6. CYP2E1 induction → ROS → lipid peroxidation → STEATOHEPATITIS",
], CASE_COLORS[C], CASE_LIGHT[C])
section_title(story, "NAFLD vs. Alcoholic Liver Disease — Key Differences", CASE_COLORS[C])
diff_data = [
[Paragraph("<b>Feature</b>", bold), Paragraph("<b>NAFLD</b>", bold),
Paragraph("<b>Alcoholic LD</b>", bold)],
["History", "Obesity, T2DM, no alcohol", "Significant alcohol use (>21 units/week)"],
["AST:ALT ratio", "< 1:1 ✓", "> 2:1 ✓"],
["GGT", "Mildly elevated", "Markedly elevated (enzyme induction)"],
["Mallory bodies", "Less common", "Prominent"],
["Neutrophil infiltration","Moderate", "Prominent, perihepatocytic"],
["Fibrosis pattern", "Zone 3 perisinusoidal", "Zone 3 perisinusoidal (same)"],
["Treatment", "Weight loss, GLP-1 agonists", "Alcohol abstinence, corticosteroids (severe)"],
]
info_table(story, diff_data, [4*cm, 5*cm, None], CASE_COLORS[C])
section_title(story, "MCQs", CASE_COLORS[C])
mcq_block(story, [
("AST:ALT ratio in alcoholic liver disease is typically:",
["< 1:1", "Exactly 1:1", "> 2:1", "> 5:1"], 2),
("Key metabolic change from alcohol driving fatty liver:",
["Increased gluconeogenesis", "Increased NADH/NAD⁺ ratio",
"Decreased acetyl CoA", "Increased urea cycle activity"], 1),
("Why are alcoholics prone to hypoglycemia?",
["Increased insulin secretion", "High NADH inhibits gluconeogenesis (pyruvate → lactate)",
"Decreased glycogen breakdown", "Increased peripheral glucose uptake"], 1),
("Most sensitive marker for alcohol use/abuse:",
["ALT", "AST", "GGT", "Alkaline phosphatase"], 2),
], CASE_COLORS[C])
section_title(story, "Viva Q&A", CASE_COLORS[C])
viva_block(story, [
("Why does elevated NADH/NAD⁺ cause hypertriglyceridemia?",
"High NADH suppresses β-oxidation (NAD⁺ needed as electron acceptor) → FFA not oxidized → "
"esterified into triglycerides. Plus, ↑ acetyl CoA from ethanol → ↑ de novo FA synthesis. "
"TG stored in hepatocytes + secreted as VLDL → hypertriglyceridemia."),
("Why does GGT rise in alcoholics even without liver damage?",
"Alcohol induces hepatic CYP2E1 and GGT enzyme synthesis via enzyme induction (microsomal induction). "
"GGT rises even with modest alcohol use and normalizes with abstinence — making it a useful compliance marker."),
], CASE_COLORS[C])
story.append(PageBreak())
# =============================================================================
# MASTER SUMMARY TABLE
# =============================================================================
story.append(Paragraph("MASTER SUMMARY — All 5 Lipid Metabolism Cases",
S("mst", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
spaceBefore=0, spaceAfter=0, alignment=TA_CENTER)))
# Cover
summary_hdr = Table([[Paragraph(
"<b>MASTER SUMMARY — All 5 Lipid Metabolism Cases</b>",
S("msthdr", fontName="Helvetica-Bold", fontSize=12, textColor=WHITE,
alignment=TA_CENTER))]],
colWidths=[W])
summary_hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
story.append(summary_hdr)
summary_data = [
[Paragraph("<b>Feature</b>", bold),
Paragraph("<b>Case 1: FH</b>", S("shfh", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE)),
Paragraph("<b>Case 2: DKA</b>", S("shdka", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE)),
Paragraph("<b>Case 3: NAFLD</b>", S("shnafl", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE)),
Paragraph("<b>Case 4: Gaucher</b>", S("shg", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE)),
Paragraph("<b>Case 5: ALD</b>", S("shald", fontName="Helvetica-Bold", fontSize=7.5,
textColor=WHITE))],
["Enzyme/Defect",
"LDLR mutation", "Insulin absence → ↑ ketogenesis",
"Insulin resistance → steatosis", "Glucocerebrosidase ↓",
"↑ NADH/NAD⁺ ratio"],
["Key lipid",
"LDL cholesterol", "Ketone bodies",
"Triglycerides in liver", "Glucocerebroside", "Triglycerides / FFA"],
["Key sign",
"Tendon xanthomas, arcus", "Kussmaul breathing, fruity breath",
"Hepatomegaly, obesity", "Hepatosplenomegaly, pancytopenia",
"AST:ALT > 2, GGT ↑↑"],
["Lab hallmark",
"LDL > 300 mg/dL", "Anion gap acidosis, β-OHB ↑",
"AST:ALT < 1, bright liver USG", "Gaucher cells, ↓ glucocerebrosidase",
"AST:ALT > 2, GGT ↑↑"],
["Inheritance",
"Autosomal semidominant", "Not inherited (T1DM)",
"Polygenic + lifestyle", "Autosomal recessive",
"Not inherited"],
["Gene / Chromosome",
"LDLR gene, Chr 19", "—",
"—", "GBA1 gene, Chr 1",
"—"],
["Treatment",
"Statins, PCSK9 inhibitors, LDL apheresis",
"IV insulin, fluids, K⁺ replacement",
"Weight loss, GLP-1 agonists, Vit E",
"ERT (imiglucerase), SRT",
"Alcohol abstinence, corticosteroids (severe)"],
]
col_w = [3*cm, 2.8*cm, 2.8*cm, 2.8*cm, 2.8*cm, 2.8*cm]
sum_t = Table(summary_data, colWidths=col_w, repeatRows=1)
sum_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0),
[DARK_BLUE, CASE_COLORS[0], CASE_COLORS[1], CASE_COLORS[2],
CASE_COLORS[3], CASE_COLORS[4]]),
("BACKGROUND", (1,0), (1,0), CASE_COLORS[0]),
("BACKGROUND", (2,0), (2,0), CASE_COLORS[1]),
("BACKGROUND", (3,0), (3,0), CASE_COLORS[2]),
("BACKGROUND", (4,0), (4,0), CASE_COLORS[3]),
("BACKGROUND", (5,0), (5,0), CASE_COLORS[4]),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("LEADING", (0,0), (-1,-1), 10),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.4, HexColor("#aaaaaa")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(sum_t)
story.append(Spacer(1, 10))
story.append(HRFlowable(width=W, thickness=0.5, color=MID_GREY))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Sources: Robbins & Kumar Basic Pathology | Thompson & Thompson Genetics, 9e | "
"Mulholland & Greenfield's Surgery, 7e | Tietz Textbook of Laboratory Medicine, 7e | "
"Ganong's Review of Medical Physiology, 26e | Harrison's Principles of Internal Medicine, 22e",
S("src", fontName="Helvetica-Oblique", fontSize=6.5, leading=9,
textColor=MID_GREY, alignment=TA_CENTER)
))
story.append(Spacer(1, 2))
story.append(Paragraph(
"Generated by Orris AI · For educational use only · Not a substitute for clinical judgment",
S("disc", fontName="Helvetica", fontSize=6, leading=8,
textColor=MID_GREY, alignment=TA_CENTER)
))
# ─── Build PDF ────────────────────────────────────────────────────────────────
def add_page_number(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 7)
canvas.setFillColor(MID_GREY)
page_num = canvas.getPageNumber()
canvas.drawCentredString(PAGE_W / 2, 1.2*cm,
f"Lipid Metabolism Quick Reference | Page {page_num}")
canvas.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print("PDF generated successfully:", OUTPUT)
cd /tmp/workspace/lipid-cases && python generate_pdf.py 2>&1
~/lipid-cases/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_pdf.py'
cd /tmp/workspace/lipid-cases && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/lipid-cases/Lipid_Metabolism_Quick_Reference.pdf && python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/lipid-cases/Lipid_Metabolism_Quick_Reference.pdf') print(f'Pages: {len(r.pages)}') print(f'Title: {r.metadata.title}') "
Lipid Metabolism Quick Reference
PDF Document · PDF
| Section | Content |
|---|---|
| Cover + Index | Cases at a glance table with all 5 diagnoses |
| Case 1 - FH | Red-coded - xanthomas, LDLR pathway, gene dosage table, statin/PCSK9 mechanism |
| Case 2 - DKA | Orange - Kussmaul breathing, 3 ketone bodies table, DKA protocol steps |
| Case 3 - NAFLD/NASH | Green - NAFLD spectrum, two-hit hypothesis, liver biopsy findings table |
| Case 4 - Gaucher | Purple - Gaucher cells, sphingolipidosis comparison table, ERT vs SRT |
| Case 5 - ALD | Teal - NADH/NAD+ pathway, NAFLD vs ALD differentiator table |
| Master Summary | All 5 cases side-by-side (enzyme, lipid, key sign, lab, treatment) |
Make all the case study in metabolism of carbohydrates proteins fat nucleic acid vitamin mineral watera nad eltrolyte
~/lipid-cases/generate_all_metabolism.py
"""
MBBS Biochemistry – Complete Metabolism Case Studies PDF
All 7 categories: Carbohydrates, Proteins, Lipids, Nucleic Acids,
Vitamins, Minerals, Water & Electrolytes
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.lib.colors import HexColor
# ── Palette ──────────────────────────────────────────────────────────────────
DARK_NAVY = HexColor("#0d2137")
CAT_COLORS = {
"CARB": HexColor("#1565c0"), # deep blue
"PROT": HexColor("#6a1b9a"), # purple
"LIPID": HexColor("#b71c1c"), # red
"NUC": HexColor("#004d40"), # teal
"VIT": HexColor("#e65100"), # orange
"MIN": HexColor("#558b2f"), # green
"WE": HexColor("#37474f"), # blue-grey
}
CAT_LIGHT = {
"CARB": HexColor("#e3f2fd"),
"PROT": HexColor("#f3e5f5"),
"LIPID": HexColor("#ffebee"),
"NUC": HexColor("#e0f2f1"),
"VIT": HexColor("#fff3e0"),
"MIN": HexColor("#f1f8e9"),
"WE": HexColor("#eceff1"),
}
LGREY = HexColor("#f5f5f5")
MGREY = HexColor("#9e9e9e")
WHITE = colors.white
BLACK = colors.black
# ── Document ─────────────────────────────────────────────────────────────────
OUT = "/tmp/workspace/lipid-cases/MBBS_All_Metabolism_Cases.pdf"
W, H = A4
MAR = 1.4*cm
doc = SimpleDocTemplate(
OUT, pagesize=A4,
leftMargin=MAR, rightMargin=MAR,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="MBBS Biochemistry – All Metabolism Case Studies",
author="Orris AI", subject="Biochemistry Case Studies"
)
UW = W - 2*MAR # usable width
# ── Style helpers ─────────────────────────────────────────────────────────────
def S(n, **k):
return ParagraphStyle(n, **k)
BODY = S("body", fontName="Helvetica", fontSize=8, leading=11, spaceAfter=3)
BODYJ = S("bodyJ", fontName="Helvetica", fontSize=8, leading=11, spaceAfter=3, alignment=TA_JUSTIFY)
BOLD = S("bold", fontName="Helvetica-Bold", fontSize=8, leading=11, spaceAfter=2)
SMALL = S("small", fontName="Helvetica", fontSize=7, leading=9, textColor=MGREY)
CODE = S("code", fontName="Courier", fontSize=7.5, leading=10, textColor=HexColor("#1a237e"))
# ── Reusable builders ─────────────────────────────────────────────────────────
def cat_banner(story, cat_key, cat_name, icon=""):
c = CAT_COLORS[cat_key]
t = Table([[Paragraph(
f"<b>{icon} {cat_name}</b>",
S("cb", fontName="Helvetica-Bold", fontSize=14, textColor=WHITE,
alignment=TA_CENTER)
)]], colWidths=[UW])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), c),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING",(0,0),(-1,-1), 10),
]))
story.append(t)
def case_hdr(story, num, title, subtitle, ck):
c = CAT_COLORS[ck]
row = [[
Paragraph(f"<b>CASE {num}</b>",
S("cn", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE)),
Paragraph(f"<b>{title}</b>",
S("ct", fontName="Helvetica-Bold", fontSize=9.5,
textColor=WHITE)),
Paragraph(subtitle,
S("cs", fontName="Helvetica", fontSize=7.5,
textColor=HexColor("#ddddff"))),
]]
t = Table(row, colWidths=[2*cm, 8.5*cm, None])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), c),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TOPPADDING", (0,0),(-1,-1), 7),
("BOTTOMPADDING", (0,0),(-1,-1), 7),
("LEFTPADDING", (0,0),(-1,-1), 7),
]))
story.append(t)
def sec(story, text, ck):
c = CAT_COLORS[ck]
t = Table([[Paragraph(f" {text}",
S("st", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE,
leading=11))]], colWidths=[UW])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), c),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
]))
story.append(Spacer(1,3))
story.append(t)
def grid(story, rows, widths, ck, hdr=True):
t = Table(rows, colWidths=widths, repeatRows=1 if hdr else 0)
c = CAT_COLORS[ck]
ts = [
("GRID", (0,0),(-1,-1), 0.4, HexColor("#cccccc")),
("FONTSIZE", (0,0),(-1,-1), 7.5),
("LEADING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 5),
("VALIGN", (0,0),(-1,-1), "TOP"),
]
if hdr:
ts += [
("BACKGROUND", (0,0),(-1,0), c),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, LGREY]),
]
t.setStyle(TableStyle(ts))
story.append(t)
def pathbox(story, lines, ck):
c = CAT_COLORS[ck]
cl = CAT_LIGHT[ck]
rows = [[Paragraph(l, CODE)] for l in lines]
t = Table(rows, colWidths=[UW])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), cl),
("BOX", (0,0),(-1,-1), 0.8, c),
("LEFTPADDING", (0,0),(-1,-1), 7),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING", (0,0),(-1,-1), 2),
]))
story.append(t)
def mcqs(story, qs, ck):
for i,(q,opts,ai) in enumerate(qs):
story.append(Paragraph(f"<b>Q{i+1}.</b> {q}",
S(f"mq{i}", fontName="Helvetica-Bold", fontSize=7.5, leading=10,
textColor=HexColor("#1a237e"), spaceAfter=1, leftIndent=4)))
for j,o in enumerate(opts):
col = HexColor("#1b5e20") if j==ai else BLACK
mk = "✓" if j==ai else "○"
story.append(Paragraph(f" {mk} {o}",
S(f"mo{i}{j}", fontName="Helvetica", fontSize=7.5,
leading=10, textColor=col, spaceAfter=1, leftIndent=12)))
story.append(Spacer(1,3))
def viva(story, qas, ck):
c = CAT_COLORS[ck]
for q,a in qas:
story.append(Paragraph(f"<b>Q:</b> {q}",
S("vq", fontName="Helvetica-Bold", fontSize=7.5, leading=10,
textColor=c, spaceAfter=1, leftIndent=4)))
story.append(Paragraph(f"<b>A:</b> {a}",
S("va", fontName="Helvetica", fontSize=7.5, leading=10,
textColor=BLACK, spaceAfter=5, leftIndent=4)))
def add_pg(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 6.5)
canvas.setFillColor(MGREY)
pg = canvas.getPageNumber()
canvas.drawCentredString(W/2, 1.1*cm,
f"MBBS Biochemistry – All Metabolism Case Studies | Page {pg}")
canvas.restoreState()
# =============================================================================
# BUILD STORY
# =============================================================================
S_ = story = []
# ── MASTER COVER ──────────────────────────────────────────────────────────────
cover = Table([[
Paragraph("<font color='white'><b>MBBS Biochemistry</b></font>",
S("cov1", fontName="Helvetica-Bold", fontSize=24,
textColor=WHITE, alignment=TA_CENTER)),
]], colWidths=[UW])
cover.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_NAVY),
("TOPPADDING",(0,0),(-1,-1), 16),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
]))
story.append(cover)
sub = Table([[
Paragraph("Complete Metabolism Case Studies",
S("cov2", fontName="Helvetica-Bold", fontSize=15,
textColor=HexColor("#b0c8e8"), alignment=TA_CENTER)),
]], colWidths=[UW])
sub.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), DARK_NAVY),
("TOPPADDING",(0,0),(-1,-1), 2),
("BOTTOMPADDING",(0,0),(-1,-1), 10),
]))
story.append(sub)
story.append(Spacer(1,6))
cats = [
("CARB", "A", "Carbohydrate Metabolism", "Von Gierke Disease • Galactosemia • Diabetes Mellitus Type 1"),
("PROT", "B", "Protein Metabolism", "PKU • Urea Cycle Defect (OTC) • Kwashiorkor"),
("LIPID", "C", "Lipid Metabolism", "Familial Hypercholesterolemia • DKA • NAFLD • Gaucher • Alcoholic Liver"),
("NUC", "D", "Nucleic Acid Metabolism", "Gout • Lesch-Nyhan Syndrome • Orotic Aciduria"),
("VIT", "E", "Vitamin Deficiencies", "Scurvy (C) • Rickets (D) • Pellagra (B3) • Beriberi (B1) • Night Blindness (A)"),
("MIN", "F", "Mineral Disorders", "Iron Deficiency Anaemia • Wilson Disease • Iodine Deficiency (Goitre)"),
("WE", "G", "Water & Electrolyte", "SIADH / Hyponatremia • DKA Hyperkalemia • Dehydration"),
]
idx_rows = [[
Paragraph("<b>Section</b>", S("ih", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
Paragraph("<b>Category</b>", S("ih2", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
Paragraph("<b>Cases Covered</b>", S("ih3", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE)),
]]
for ck, ltr, cname, cases in cats:
idx_rows.append([
Paragraph(f"<b>{ltr}</b>", S(f"il{ck}", fontName="Helvetica-Bold",
fontSize=8, textColor=CAT_COLORS[ck], alignment=TA_CENTER)),
Paragraph(cname, S(f"ic{ck}", fontName="Helvetica-Bold", fontSize=8)),
Paragraph(cases, S(f"ics{ck}", fontName="Helvetica", fontSize=7.5)),
])
it = Table(idx_rows, colWidths=[1.5*cm, 5*cm, None])
it.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), DARK_NAVY),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 8),
("ROWBACKGROUNDS",(0,1),(-1,-1),
[CAT_LIGHT[c] for c,_,_,_ in cats]),
("GRID", (0,0),(-1,-1), 0.4, HexColor("#bbbbbb")),
("ALIGN", (0,0),(0,-1), "CENTER"),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("LEFTPADDING", (0,0),(-1,-1), 6),
]))
story.append(Paragraph("Contents",
S("ctitle", fontName="Helvetica-Bold", fontSize=10,
textColor=DARK_NAVY, spaceAfter=4, spaceBefore=4)))
story.append(it)
story.append(Spacer(1,6))
story.append(HRFlowable(width=UW, thickness=0.5, color=MGREY))
story.append(PageBreak())
# =============================================================================
# SECTION A – CARBOHYDRATE METABOLISM
# =============================================================================
CK = "CARB"
cat_banner(story, CK, "SECTION A — CARBOHYDRATE METABOLISM")
story.append(Spacer(1,5))
# ── Case A1: Von Gierke Disease ───────────────────────────────────────────────
case_hdr(story, "A1", "Von Gierke Disease (GSD Type I)",
"Glucose-6-phosphatase deficiency | AR | Severe fasting hypoglycemia", CK)
sec(story, "Clinical Vignette", CK)
story.append(Paragraph(
"Baby Priya, 6-month-old female. Parents noticed she becomes limp, pale and unresponsive if "
"feeds are delayed > 3 hours. Abdomen is protuberant. Developmental milestones slightly delayed. "
"Doll-like facies with fat cheeks.", BODYJ))
sec(story, "Key Investigations", CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>Patient</b>",BOLD), Paragraph("<b>Normal</b>",BOLD), Paragraph("<b>Significance</b>",BOLD)],
["Fasting blood glucose","28 mg/dL ↓↓","70–100","Severe hypoglycemia — cannot release glucose from liver glycogen"],
["Blood lactate","8 mmol/L ↑↑","0.5–2.2","G-6-P → lactic acid instead of glucose"],
["Serum uric acid","9.8 mg/dL ↑","2–7","G-6-P → ribose-5-P → purine synthesis ↑ → uric acid ↑"],
["Serum triglycerides","680 mg/dL ↑↑","< 150","Acetyl CoA diverted to FA synthesis (can't release glucose)"],
["Liver biopsy","Massive glycogen + fat in hepatocytes","Normal","Pathognomonic"],
["Liver glucose-6-phosphatase activity","Absent","Normal","Confirmatory enzymatic test"],
],[3.5*cm,3.5*cm,2*cm,None],CK)
sec(story, "Pathophysiology", CK)
pathbox(story,[
"Normal: Glycogen → Glucose-1-P → Glucose-6-P →[G-6-Pase]→ FREE GLUCOSE → blood",
" Gluconeogenesis → Glucose-6-P →[G-6-Pase]→ FREE GLUCOSE → blood",
"",
"Von Gierke: G-6-Pase ABSENT",
" Glucose-6-P cannot be cleaved → ACCUMULATES in liver",
" → Glycogen piles up (cannot release glucose) → HEPATOMEGALY",
" → Hypoglycemia (no glucose release during fasting)",
" → G-6-P shunted to lactate → LACTIC ACIDOSIS",
" → G-6-P → pentose phosphate pathway → PURINE synthesis ↑ → HYPERURICEMIA",
" → Acetyl CoA → fatty acids → HYPERTRIGLYCERIDEMIA",
"ALSO: Kidneys store glycogen → enlarged kidneys (nephromegaly)",
],CK)
sec(story,"Management",CK)
grid(story,[
[Paragraph("<b>Treatment</b>",BOLD), Paragraph("<b>Mechanism</b>",BOLD)],
["Frequent feeds / continuous night-time nasogastric feeds","Prevent fasting hypoglycemia — never allow more than 3–4 hr fast"],
["Uncooked cornstarch (UCCS)","Slow-release glucose — mainstay of management in older children"],
["Allopurinol","Inhibit xanthine oxidase → ↓ uric acid (treat hyperuricemia)"],
["Liver transplant","Curative in severe cases — restores G-6-Pase activity"],
],[6*cm,None],CK)
sec(story,"MCQs",CK)
mcqs(story,[
("Enzyme deficient in Von Gierke disease:",
["Glycogen phosphorylase","Glucose-6-phosphatase","Acid maltase","Branching enzyme"],1),
("In Von Gierke disease, the triad of hypoglycemia + lactic acidosis + hyperuricemia is due to:",
["Insulin excess","Glucose-6-phosphate accumulation","Glycogen phosphorylase defect","Lysosomal enzyme deficiency"],1),
("Safest carbohydrate source for Von Gierke patients:",
["Fructose","Galactose","Uncooked cornstarch","Sucrose"],2),
],CK)
sec(story,"Viva Q&A",CK)
viva(story,[
("Why is fructose/galactose harmful in Von Gierke disease?",
"Both fructose and galactose are metabolized via glucose-6-phosphate in the liver. "
"In Von Gierke disease, G-6-Pase is absent, so they cannot be converted to free glucose, "
"worsening the accumulation of G-6-P, lactate, and fat."),
("Why does Von Gierke cause hyperuricemia?",
"Accumulated glucose-6-phosphate is shunted through the pentose phosphate pathway, "
"producing excess ribose-5-phosphate → de novo purine synthesis ↑ → uric acid ↑. "
"Lactic acidosis also competes with uric acid for renal tubular excretion."),
],CK)
story.append(Spacer(1,8))
# ── Case A2: Galactosemia ─────────────────────────────────────────────────────
case_hdr(story,"A2","Classic Galactosemia",
"GALT deficiency | AR | Jaundice + cataracts + E. coli sepsis in neonate",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Baby Aryan, 5-day-old male. Exclusively breastfed. Jaundice since day 2, vomiting, "
"poor weight gain. Day 5: developed E. coli sepsis. Eye exam: bilateral cataracts noted on "
"slit lamp. Liver: enlarged and tender. Newborn screen: elevated galactose.",BODYJ))
sec(story,"Pathophysiology",CK)
pathbox(story,[
"Normal: Galactose →[GALK]→ Galactose-1-P →[GALT]→ UDP-Glucose → Glucose",
"",
"Galactosemia: GALT (galactose-1-phosphate uridylyltransferase) ABSENT",
" Galactose-1-phosphate ACCUMULATES in liver, brain, kidneys, lens",
" → LIVER: hepatocellular damage → jaundice, cirrhosis",
" → LENS: galactose → galactitol (aldose reductase) → osmotic swelling → CATARACTS",
" → BRAIN: galactitol accumulation → intellectual disability",
" → KIDNEY: tubular dysfunction (Fanconi syndrome)",
" → IMMUNE: galactose-1-P impairs neutrophil killing → E. coli sepsis susceptibility",
],CK)
sec(story,"Key Investigations & Management",CK)
grid(story,[
[Paragraph("<b>Investigation/Feature</b>",BOLD), Paragraph("<b>Finding</b>",BOLD), Paragraph("<b>Management</b>",BOLD)],
["Urine reducing substances","Positive (galactose) — but NOT detected by glucose oxidase strip","Galactose-free diet (no breast milk, use soya formula)"],
["Serum GALT enzyme activity","Absent (<1% normal)","Lifelong lactose restriction"],
["Urine galactitol","Markedly elevated","Calcium + Vitamin D supplementation (bone health)"],
["Newborn screen (tandem MS/MS)","Elevated galactose-1-P","Ovarian dysfunction in females — follow-up required"],
],[5*cm,4.5*cm,None],CK)
mcqs(story,[
("Classic galactosemia is caused by deficiency of:",
["Galactokinase (GALK)","GALT (galactose-1-phosphate uridylyltransferase)","Galactose epimerase","UDP-glucose-4-epimerase"],1),
("Cataracts in galactosemia are due to accumulation of:",
["Galactose-1-phosphate","Galactitol (via aldose reductase)","UDP-galactose","Glycogen"],1),
],CK)
viva(story,[
("Why do galactosemia patients get E. coli sepsis?",
"Galactose-1-phosphate accumulation impairs the bactericidal activity of neutrophils — "
"specifically reducing their ability to kill gram-negative organisms. "
"The gut is also affected, allowing E. coli translocation. "
"This is a classic and life-threatening neonatal presentation."),
],CK)
story.append(Spacer(1,8))
# ── Case A3: Type 1 Diabetes / DKA (brief — detailed in Lipid section) ────────
case_hdr(story,"A3","Type 1 Diabetes Mellitus — Metabolic Overview",
"Absolute insulin deficiency | Hyperglycemia + glycosuria + osmotic diuresis",CK)
sec(story,"Carbohydrate Metabolism Disruptions in T1DM",CK)
pathbox(story,[
"INSULIN ABSENT → GLUT-4 not translocated → Glucose CANNOT enter muscle/fat cells",
" → Liver glycogen breakdown ↑ (glycogenolysis) → glucose ↑",
" → Gluconeogenesis ↑ (from AA + glycerol) → glucose ↑ further",
" → Hexokinase/glucokinase activity ↓ → glucose not phosphorylated",
"Hyperglycemia → Glucose filtered > Tm (~180 mg/dL) → GLYCOSURIA",
" → Osmotic diuresis → polyuria → polydipsia → dehydration",
"HbA1c = Glycated Hb; reflects average glucose over 2–3 months",
" Normal < 5.7%; Pre-DM 5.7–6.4%; DM ≥ 6.5%",
],CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>T1DM Value</b>",BOLD), Paragraph("<b>Diagnostic Threshold</b>",BOLD)],
["Fasting plasma glucose","≥ 240 mg/dL","≥ 126 mg/dL"],
["2h post-OGTT glucose","≥ 280 mg/dL","≥ 200 mg/dL"],
["HbA1c","9.2%","≥ 6.5%"],
["C-peptide","Very low / absent","Present in T2DM"],
["Anti-GAD antibodies","Positive (autoimmune)","Confirms T1DM"],
],[4.5*cm,4*cm,None],CK)
story.append(PageBreak())
# =============================================================================
# SECTION B – PROTEIN METABOLISM
# =============================================================================
CK = "PROT"
cat_banner(story, CK, "SECTION B — PROTEIN METABOLISM")
story.append(Spacer(1,5))
# ── Case B1: PKU ──────────────────────────────────────────────────────────────
case_hdr(story,"B1","Phenylketonuria (PKU)",
"Phenylalanine hydroxylase deficiency | AR | Intellectual disability + mousy odor",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Baby Riya, 6-week-old female. Hypopigmented skin and hair despite dark-skinned parents. "
"Irritability, eczema, mousy/musty odor in urine/sweat. "
"Parents are first cousins. Older sibling died with brain damage.",BODYJ))
sec(story,"Pathophysiology",CK)
pathbox(story,[
"Normal: Phenylalanine →[PAH + BH4]→ Tyrosine → Melanin / Catecholamines / Thyroxine",
"",
"PKU: Phenylalanine hydroxylase (PAH) ABSENT",
" Phenylalanine ACCUMULATES → inhibits LNAA transport across blood-brain barrier",
" → Impairs myelin synthesis + neurotransmitter synthesis → Intellectual disability",
" Shunted pathways:",
" Phe → Phenylpyruvic acid (urine — FeCl3 test blue-green)",
" Phe → Phenylacetic acid (mousy/musty odor in urine + sweat)",
" Phe → Phenyllactic acid",
" Tyrosine DEFICIENT → Melanin ↓ → Hypopigmentation (fair skin, blue eyes, light hair)",
],CK)
sec(story,"Investigations & Diagnosis",CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>Result</b>",BOLD), Paragraph("<b>Principle</b>",BOLD)],
["Guthrie test (heel-prick, day 2–3)","Positive (bacterial growth)","B. subtilis inhibition assay — phenylalanine reverses inhibition"],
["Serum phenylalanine","28 mg/dL (normal < 2)","Diagnostic — Phe/Tyr ratio > 3 on MS/MS"],
["Urine FeCl3 test","Blue-green color","Phenylpyruvic acid + ferric chloride → blue-green"],
["Phenistix urine strip","Grey-green (positive)","Ferric ammonium sulfate detects phenylpyruvate"],
["Urine pterin profile + DHPR","Normal (both)","Rules out BH4 deficiency variant"],
],[4.5*cm,3*cm,None],CK)
sec(story,"Management",CK)
grid(story,[
[Paragraph("<b>Treatment</b>",BOLD), Paragraph("<b>Details</b>",BOLD)],
["Phenylalanine-restricted diet (lifelong)","Low-Phe formula (Lofenalac). Keep blood Phe < 6 mg/dL. Phe is essential — cannot eliminate entirely"],
["Sapropterin (BH4)","BH4-responsive PKU only — acts as chaperone for residual PAH activity"],
["LNAA supplementation","Competes with Phe at BBB — reduces brain Phe uptake"],
["Maternal PKU protocol","Women must control Phe before/during pregnancy — prevents fetal damage (microcephaly, CHD)"],
],[5.5*cm,None],CK)
mcqs(story,[
("Mousy/musty odor in PKU is due to:","Phenylpyruvic acid Phenylacetic acid Phenyllactic acid Phenylethylamine".split(),1),
("Hypopigmentation in PKU is because:","Melanin precursor tyrosine is deficient Melanocytes are destroyed Phenylalanine inhibits melanin directly Tyrosinase is absent".split(" "),0),
],CK)
story.append(Spacer(1,6))
# ── Case B2: Urea Cycle Defect (OTC Deficiency) ───────────────────────────────
case_hdr(story,"B2","OTC Deficiency — Urea Cycle Defect",
"Ornithine transcarbamylase deficiency | X-linked | Hyperammonemia + encephalopathy",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Baby Kiran, 3-day-old male. Vigorous feeder at birth. Day 3: refuses feeds, lethargic, "
"tachypneic, progresses to coma. Mother has history of 'protein intolerance' and migraines. "
"Plasma ammonia: 850 µmol/L (normal < 50). Urine orotic acid: markedly elevated.",BODYJ))
sec(story,"Pathophysiology — The Urea Cycle",CK)
pathbox(story,[
"UREA CYCLE (liver mitochondria + cytoplasm):",
" NH4+ + CO2 →[CPS-1]→ Carbamoyl phosphate",
" + Ornithine →[OTC]→ Citrulline (exits to cytoplasm)",
" + Aspartate →[ASS]→ Argininosuccinate →[ASL]→ Arginine + Fumarate",
" Arginine →[Arginase]→ Urea + Ornithine (recycled)",
"",
"OTC DEFICIENT (X-linked — most common urea cycle defect):",
" Carbamoyl phosphate ACCUMULATES → spills to cytoplasm",
" → Enters pyrimidine synthesis → OROTIC ACID ↑ in urine (diagnostic!)",
" → NH4+ cannot be incorporated into urea → HYPERAMMONEMIA",
" Ammonia crosses BBB → inhibits Krebs cycle → cerebral edema → COMA",
" Citrulline: LOW or absent (proximal defect)",
" Glutamine: HIGH (ammonia detox mechanism overloaded)",
],CK)
sec(story,"Investigations",CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>OTC Deficiency</b>",BOLD), Paragraph("<b>Diagnostic Significance</b>",BOLD)],
["Plasma ammonia","850 µmol/L ↑↑ (critical)","> 150 = encephalopathy risk; > 400 = life-threatening"],
["Plasma citrulline","LOW / absent","Proximal block (before citrulline synthesis step)"],
["Urine orotic acid","MARKEDLY ELEVATED ✓","Pathognomonic for OTC deficiency vs. CPS-1/NAGS deficiency"],
["Plasma glutamine","Elevated","NH3 detox → glutamine rises in all urea cycle defects"],
["Plasma amino acids","Elevated glutamine, low citrulline","Pattern helps localize the defect"],
["Inheritance (gene)","X-linked (OTC gene, Xp21)","Most common urea cycle defect. Females are carriers — may be symptomatic"],
],[4.5*cm,4*cm,None],CK)
sec(story,"Management",CK)
grid(story,[
[Paragraph("<b>Treatment</b>",BOLD), Paragraph("<b>Mechanism</b>",BOLD)],
["IV glucose (stop catabolism)","Protein catabolism releases NH3 — glucose stops this immediately"],
["Nitrogen scavengers: sodium benzoate + sodium phenylbutyrate","Conjugate with glycine/glutamine → excreted as hippurate/phenylacetylglutamine (bypass urea cycle)"],
["Arginine supplementation","Arginine is essential in urea cycle defects (cannot synthesize)"],
["Dietary protein restriction","Reduce nitrogen load — individualized low-protein diet"],
["Liver transplant","Curative — restores hepatic OTC activity"],
],[5.5*cm,None],CK)
mcqs(story,[
("OTC deficiency is unique among urea cycle defects because it is:",
["Autosomal recessive","X-linked","Autosomal dominant","Mitochondrial"],1),
("Markedly elevated urine orotic acid is seen in OTC deficiency because:",
["Orotic acid is a metabolite of urea","Carbamoyl phosphate accumulates and enters pyrimidine synthesis pathway",
"OTC directly inhibits orotate phosphoribosyltransferase","Liver failure causes orotic aciduria"],1),
("Nitrogen scavengers (sodium benzoate) work by:",
["Inhibiting protein catabolism","Conjugating with glycine → hippurate → excreted renally",
"Activating CPS-1","Increasing urea synthesis"],1),
],CK)
viva(story,[
("How does hyperammonemia cause brain damage?",
"Ammonia crosses the BBB and is taken up by astrocytes. Glutamine synthase converts "
"glutamate + NH3 → glutamine, depleting glutamate (a neurotransmitter). "
"Excess glutamine accumulates in astrocytes causing osmotic swelling → cerebral edema. "
"Ammonia also directly inhibits the alpha-ketoglutarate dehydrogenase step of the Krebs cycle, "
"impairing neuronal energy production. - Harrison's, 2025"),
],CK)
story.append(Spacer(1,6))
# ── Case B3: Kwashiorkor ──────────────────────────────────────────────────────
case_hdr(story,"B3","Kwashiorkor — Protein-Energy Malnutrition",
"Severe protein deficiency with adequate calories | Edema + hypoalbuminemia",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Tunde, 2-year-old male, sub-Saharan Africa. Weaned abruptly at 12 months onto maize porridge "
"(high carb, very low protein). Presents with: bilateral pitting edema of legs, "
"pot-belly (ascites), 'flaky paint' skin rash, sparse reddish hair. Alert but apathetic. "
"Weight-for-height: -3 SD. No wasting (muscle bulk preserved due to adequate calories).",BODYJ))
sec(story,"Biochemistry",CK)
pathbox(story,[
"PROTEIN DEFICIENT (calories adequate from carbohydrate):",
" Plasma amino acids ↓ → Liver cannot synthesize albumin → Albumin ↓↓ (< 2.5 g/dL)",
" Low albumin → Oncotic pressure ↓ → Fluid leaks into interstitium → EDEMA / ASCITES",
" Insulin ↑ (from carbohydrate diet) → Inhibits lipolysis → Fat stays in liver",
" VLDL synthesis ↓ (apoprotein B-100 synthesis requires amino acids) → FATTY LIVER",
" Zinc deficiency → Poor wound healing, immune deficiency, skin lesions",
" Insulin-like effect on muscles → Protein catabolism ↓ (UNLIKE marasmus)",
" KEY DIFFERENCE from Marasmus: EDEMA present; caused by LOW PROTEIN not total starvation",
],CK)
grid(story,[
[Paragraph("<b>Feature</b>",BOLD), Paragraph("<b>Kwashiorkor</b>",BOLD), Paragraph("<b>Marasmus</b>",BOLD)],
["Cause","Protein deficiency (calories adequate)","Total calorie deficiency"],
["Edema","Present ✓","Absent"],
["Appearance","'Moon face', pot belly, skin rash","Wasted, 'old man' appearance, skin and bones"],
["Serum albumin","Very low (< 2.5 g/dL)","Low-normal (preserved longer)"],
["Fatty liver","Yes","No"],
["Muscle wasting","Mild","Severe"],
],[5*cm,5*cm,None],CK)
story.append(PageBreak())
# =============================================================================
# SECTION C – LIPID METABOLISM (Summary reference)
# =============================================================================
CK = "LIPID"
cat_banner(story, CK, "SECTION C — LIPID METABOLISM (See separate detailed guide)")
story.append(Spacer(1,5))
story.append(Paragraph(
"Five detailed lipid metabolism cases are covered in the companion PDF. "
"Below is the quick-reference summary.",BODY))
sum_rows=[
[Paragraph("<b>Case</b>",BOLD), Paragraph("<b>Diagnosis</b>",BOLD),
Paragraph("<b>Enzyme/Defect</b>",BOLD), Paragraph("<b>Key Sign</b>",BOLD),
Paragraph("<b>Treatment</b>",BOLD)],
["C1","Familial Hypercholesterolemia","LDLR mutation","Xanthomas, premature CAD","Statins, PCSK9 inhibitors"],
["C2","Diabetic Ketoacidosis","Insulin absence → ↑ ketogenesis","Kussmaul breathing, fruity breath","IV insulin, fluids, K⁺"],
["C3","NAFLD / NASH","Insulin resistance","Hepatomegaly, obesity","Weight loss, GLP-1 agonists"],
["C4","Gaucher Disease","Glucocerebrosidase ↓","Hepatosplenomegaly","ERT (imiglucerase)"],
["C5","Alcoholic Fatty Liver","↑ NADH/NAD⁺","AST:ALT > 2, ↑ GGT","Abstinence, corticosteroids"],
]
grid(story,sum_rows,[1.5*cm,5*cm,5*cm,4*cm,None],CK)
story.append(PageBreak())
# =============================================================================
# SECTION D – NUCLEIC ACID METABOLISM
# =============================================================================
CK = "NUC"
cat_banner(story, CK, "SECTION D — NUCLEIC ACID METABOLISM")
story.append(Spacer(1,5))
# ── Case D1: Gout ─────────────────────────────────────────────────────────────
case_hdr(story,"D1","Gout — Primary Hyperuricemia",
"Uric acid overproduction/underexcretion | Monosodium urate crystal deposition",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Mr. Suresh, 48-year-old male. Overweight, heavy beer drinker. 2 AM woke up with "
"SEVERE pain, redness and swelling of right big toe (1st MTP joint). "
"Recurrent episodes x 3 years. Now has hard, painless nodules over earlobes and Achilles tendon (tophi). "
"Passed a kidney stone last year.",BODYJ))
sec(story,"Investigations",CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>Patient</b>",BOLD), Paragraph("<b>Significance</b>",BOLD)],
["Serum uric acid","9.8 mg/dL (normal M < 7.0)","Hyperuricemia — not always elevated during attack"],
["Joint fluid microscopy","Needle-shaped, NEGATIVELY birefringent crystals","MSU crystals — PATHOGNOMONIC for gout"],
["X-ray joint","Punched-out erosions with overhanging edge ('rat-bite')","Tophaceous gout — chronic"],
["24-hr urine uric acid","650 mg/day","< 600 = underexcretor; > 800 = overproducer"],
["Serum creatinine","1.4 mg/dL (mildly elevated)","Urate nephropathy / uric acid stones"],
],[4.5*cm,4.5*cm,None],CK)
sec(story,"Pathophysiology — Purine Metabolism",CK)
pathbox(story,[
"PURINE CATABOLISM:",
" Adenine → Hypoxanthine →[XO]→ Xanthine →[XO]→ URIC ACID (excreted in urine)",
" Guanine → Xanthine →[XO]→ URIC ACID",
"",
"SALVAGE PATHWAY (normal, recycles purines):",
" Hypoxanthine + PRPP →[HGPRT]→ IMP (reused)",
" Guanine + PRPP →[HGPRT]→ GMP (reused)",
"",
"GOUT: Uric acid overproduced OR underexcreted:",
" Overproduction: ↑ purine turnover (myeloproliferative), HGPRT deficiency, PRPP synthetase overactivity",
" Underexcretion (90% of cases): renal tubular defect, diuretics, low-dose aspirin",
" Uric acid in blood → supersaturation → MSU crystals deposit in joints, soft tissue, kidney",
" MSU crystals phagocytosed by neutrophils → NLRP3 inflammasome → IL-1β → ACUTE ARTHRITIS",
],CK)
sec(story,"Management",CK)
grid(story,[
[Paragraph("<b>Drug</b>",BOLD), Paragraph("<b>Mechanism</b>",BOLD), Paragraph("<b>Use</b>",BOLD)],
["Colchicine","Inhibits microtubule polymerization → blocks neutrophil migration","Acute attack (first 24–48h)"],
["NSAIDs (indomethacin)","Inhibit prostaglandin synthesis → ↓ inflammation","Acute attack"],
["Allopurinol","Inhibits xanthine oxidase → ↓ uric acid production","Chronic prophylaxis (urate-lowering)"],
["Febuxostat","Non-purine XO inhibitor","Allopurinol-intolerant patients"],
["Probenecid","Inhibits URAT1 → ↑ renal uric acid excretion (uricosuric)","Underexcretors"],
["Rasburicase","Recombinant uricase → converts uric acid to allantoin","Tumour lysis syndrome"],
],[3.5*cm,6*cm,None],CK)
mcqs(story,[
("Joint fluid in gout shows crystals that are:",
["Positively birefringent rhomboid (pseudogout)","Negatively birefringent needle-shaped (gout)",
"No crystals","Positively birefringent needle-shaped"],1),
("Allopurinol works by inhibiting:",
["HGPRT","Xanthine oxidase","PRPP synthetase","Adenosine deaminase"],1),
("The rate-limiting enzyme of de novo purine synthesis is:",
["PRPP synthetase","HGPRT","Adenylosuccinate lyase","Glutamine PRPP amidotransferase"],3),
],CK)
story.append(Spacer(1,6))
# ── Case D2: Lesch-Nyhan Syndrome ─────────────────────────────────────────────
case_hdr(story,"D2","Lesch-Nyhan Syndrome",
"HGPRT complete deficiency | X-linked recessive | Self-mutilation + hyperuricemia",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Rohan, 3-year-old male. Normal at birth. At 6 months: orange crystal (uric acid) in nappy. "
"By age 2: choreoathetosis, spasticity, intellectual disability. "
"Now biting own fingers and lips compulsively (self-mutilation). "
"Serum uric acid: 12 mg/dL. Urine uric acid: markedly elevated.",BODYJ))
pathbox(story,[
"HGPRT (hypoxanthine-guanine phosphoribosyltransferase) COMPLETELY ABSENT (X-linked)",
" Salvage pathway BLOCKED:",
" Hypoxanthine + PRPP CANNOT → IMP ← hypoxanthine accumulates",
" Guanine + PRPP CANNOT → GMP ← guanine accumulates",
" PRPP accumulates (not consumed) → De novo purine synthesis ↑↑",
" → Massive uric acid overproduction:",
" - Orange crystals in diapers (uric acid)",
" - Gout (tophi, arthritis)",
" - Uric acid nephrolithiasis / obstructive uropathy",
" Dopaminergic neurotransmitter deficiency in basal ganglia → self-mutilation (neurological)",
"NOTE: Partial HGPRT deficiency (Kelley-Seegmiller) = gout only, NO neurological features",
],CK)
grid(story,[
[Paragraph("<b>Feature</b>",BOLD), Paragraph("<b>Lesch-Nyhan (HGPRT absent)</b>",BOLD), Paragraph("<b>Gout (partial/other)</b>",BOLD)],
["HGPRT activity","Absent (< 1%)","Normal or partial"],
["Uric acid","Massively elevated","Elevated"],
["Neurological features","Self-mutilation, chorea, spasticity, ID","Absent"],
["Inheritance","X-linked recessive","Polygenic / AR"],
["Treatment","Allopurinol (uric acid) + supportive (no cure for neuro)","Allopurinol / uricosuric"],
],[4.5*cm,5.5*cm,None],CK)
story.append(PageBreak())
# =============================================================================
# SECTION E – VITAMIN DEFICIENCIES
# =============================================================================
CK = "VIT"
cat_banner(story, CK, "SECTION E — VITAMIN DEFICIENCIES")
story.append(Spacer(1,5))
# ── Case E1: Scurvy ────────────────────────────────────────────────────────────
case_hdr(story,"E1","Scurvy — Vitamin C (Ascorbic Acid) Deficiency",
"Impaired collagen hydroxylation | Hemorrhages + poor wound healing",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Mr. John, 70-year-old widower. Lives alone, eats mostly canned food and tea. "
"3-month history of fatigue, leg pain, bleeding gums that bleed on gentle touch. "
"Examination: perifollicular hemorrhages on thighs, corkscrew hairs, "
"swollen bleeding gums (scorbutic gums), poor healing of old surgical scar. "
"X-ray: ground-glass osteoporosis, Trümmerfeld zone (zone of destruction at metaphysis).",BODYJ))
sec(story,"Pathophysiology (from Robbins Basic Pathology)",CK)
pathbox(story,[
"Vitamin C (ascorbic acid) activates prolyl hydroxylase and lysyl hydroxylase",
"→ These enzymes hydroxylate proline and lysine residues in procollagen",
"→ Hydroxyproline/hydroxylysine allow collagen to form stable TRIPLE HELIX",
"→ Crosslinking of collagen fibers (tensile strength)",
"",
"SCURVY: Vitamin C absent → Proline/lysine NOT hydroxylated",
" → Procollagen cannot form triple helix → secreted as abnormal, weak collagen",
" → Collagen most affected (highest hydroxyproline content):",
" Blood vessel walls: weak → PERIVASCULAR HEMORRHAGES",
" Gums: fragile → BLEEDING GUMS (scorbutic gums)",
" Bone: osteoid not mineralized properly → BONE PAIN",
" Wounds: poor healing (collagen needed for repair)",
" Skin appendages: CORKSCREW HAIRS, PERIFOLLICULAR PETECHIAE",
" Vitamin C also: regenerates Vitamin E, iron absorption ↑, antioxidant, norepinephrine synthesis",
],CK)
sec(story,"Key Features & Management",CK)
grid(story,[
[Paragraph("<b>Clinical Feature</b>",BOLD), Paragraph("<b>Biochemical Basis</b>",BOLD)],
["Bleeding gums (scorbutic gums)","Capillary fragility — weak collagen in vessel walls"],
["Perifollicular hemorrhages","Perivascular collagen weak → bleeds around hair follicles"],
["Corkscrew/swan-neck hairs","Abnormal keratin structure (vitamin C-dependent)"],
["Impaired wound healing","Collagen synthesis needed for scar formation — absent"],
["Bone pain / subperiosteal haemorrhage","Osteoid matrix weak; periosteal collagen torn by minor trauma"],
["Iron deficiency anaemia","Vitamin C normally aids non-haem iron absorption (reduces Fe3+ to Fe2+)"],
["Treatment","500 mg Vitamin C orally daily × 1 month; increase fresh fruits/vegetables in diet"],
],[6*cm,None],CK)
mcqs(story,[
("Vitamin C deficiency causes scurvy by impairing:",
["HMG-CoA reductase","Prolyl and lysyl hydroxylase (collagen hydroxylation)",
"Thymidylate synthase","Homocysteine methylation"],1),
("Corkscrew hairs are characteristic of:",
["Pellagra","Vitamin A deficiency","Scurvy","Biotin deficiency"],2),
("Vitamin C assists iron absorption by:",
["Acting as a chelating agent","Reducing Fe³⁺ to Fe²⁺ (ferric to ferrous) in the gut",
"Increasing transferrin production","Inhibiting hepcidin"],1),
],CK)
story.append(Spacer(1,6))
# ── Case E2: Rickets ──────────────────────────────────────────────────────────
case_hdr(story,"E2","Rickets — Vitamin D Deficiency",
"Impaired calcium/phosphate absorption | Defective bone mineralization",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Raj, 18-month-old male. Exclusively breastfed. Lives in northern UK (low sunlight). "
"Presenting with: waddling gait, delayed walking. "
"Examination: frontal bossing, craniotabes, Harrison sulcus (groove along lower ribs), "
"rachitic rosary (beading of costochondral junctions), bow legs (genu varum). "
"X-ray: widened, frayed, cupped metaphyses (champagne glass appearance).",BODYJ))
sec(story,"Vitamin D Metabolism & Pathophysiology",CK)
pathbox(story,[
"SUN: 7-dehydrocholesterol (skin) →[UV-B]→ Cholecalciferol (Vit D3)",
"DIET: D2 (ergocalciferol) from plants; D3 (cholecalciferol) from fish/eggs",
"",
"Vit D3 →[25-hydroxylase, LIVER]→ 25-OH-D3 (storage form, measured in serum)",
" →[1α-hydroxylase, KIDNEY]→ 1,25-(OH)₂-D3 (CALCITRIOL — active form)",
" (1α-hydroxylase stimulated by PTH and low phosphate)",
"",
"Active calcitriol actions:",
" INTESTINE: ↑ Calcium absorption (induces calbindin D) + ↑ Phosphate absorption",
" BONE: ↑ Osteoclast activity (bone resorption) to mobilize Ca²⁺",
" KIDNEY: ↑ Ca²⁺ reabsorption",
"",
"DEFICIENCY: Ca²⁺ ↓ + PO4³⁻ ↓ → osteoid cannot mineralize → SOFT BONES",
" Rickets (growing children) / Osteomalacia (adults)",
" PTH ↑ (secondary hyperparathyroidism) → Ca²⁺ pulled from bones → deformities",
],CK)
sec(story,"Investigations",CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>Rickets</b>",BOLD), Paragraph("<b>Significance</b>",BOLD)],
["Serum 25-OH-D3","< 12 ng/mL (deficient)","Gold standard for vitamin D status"],
["Serum calcium","Low / low-normal","Reduced intestinal absorption"],
["Serum phosphate","Low","Reduced absorption + PTH-mediated urinary loss"],
["Alkaline phosphatase (ALP)","Markedly elevated","Osteoblast activity ↑ (compensatory bone repair)"],
["PTH","Elevated (secondary)","Compensates for low calcium"],
["X-ray","Widened, frayed, cupped metaphyses","Pathognomonic — 'champagne glass' appearance"],
],[4.5*cm,4*cm,None],CK)
mcqs(story,[
("The active form of vitamin D is:",
["Cholecalciferol (Vit D3)","25-hydroxycholecalciferol","1,25-dihydroxycholecalciferol (calcitriol)","Ergocalciferol"],2),
("1α-hydroxylase that activates vitamin D is located in:",
["Liver","Skin","Kidney","Intestine"],2),
("Rachitic rosary is due to:",
["Calcium deposits at costochondral junctions","Subperiosteal hemorrhage",
"Excess osteoid at costochondral junctions from unmineralized bone","Inflammatory arthritis"],2),
],CK)
story.append(Spacer(1,6))
# ── Case E3: Pellagra & Beriberi (condensed) ──────────────────────────────────
case_hdr(story,"E3","Pellagra (B3) & Beriberi (B1) — B-Vitamin Deficiencies",
"NAD⁺ deficiency (pellagra) | Thiamine deficiency (beriberi) | Both affect energy metabolism",CK)
sec(story,"Quick Comparison",CK)
grid(story,[
[Paragraph("<b>Feature</b>",BOLD), Paragraph("<b>Pellagra (Niacin/B3 ↓)</b>",BOLD), Paragraph("<b>Beriberi (Thiamine/B1 ↓)</b>",BOLD)],
["Vitamin","Niacin (B3) — precursor of NAD⁺/NADP⁺","Thiamine (B1) — cofactor for pyruvate dehydrogenase, α-KGD, transketolase"],
["Classic triad","4 Ds: Dermatitis, Diarrhoea, Dementia, Death","Wet: high-output cardiac failure. Dry: peripheral neuropathy"],
["Skin sign","Casal necklace (photosensitive dermatitis on sun-exposed areas)","No specific skin sign"],
["Neurological","Dementia, confusion (late)","Peripheral neuropathy (dry), Wernicke-Korsakoff (alcoholics)"],
["Cardiac","Absent","Wet beriberi: dilated cardiomyopathy, high-output failure, oedema"],
["Cause","Maize-based diet (low niacin + tryptophan); Hartnup disease; carcinoid","Polished white rice diet; alcoholism; prolonged IV glucose without thiamine"],
["Biochemistry","NAD⁺/NADP⁺ ↓ → impairs oxidative phosphorylation (Krebs cycle)","Pyruvate dehydrogenase needs thiamine-PP → pyruvate accumulates → lactic acidosis"],
["Lab finding","Low urinary N-methylnicotinamide","↑ Pyruvate + ↑ lactate; ↑ erythrocyte transketolase activity (functional test)"],
["Treatment","Nicotinamide (niacin) 300 mg/day","Thiamine 100 mg IV (Wernicke must be treated BEFORE glucose infusion)"],
],[4*cm,6*cm,None],CK)
mcqs(story,[
("Casal necklace (photosensitive rash around the neck) is seen in:",
["Scurvy","Pellagra","Beriberi","Riboflavin deficiency"],1),
("In Wernicke's encephalopathy, thiamine must be given BEFORE glucose because:",
["Glucose is toxic to neurons","Glucose infusion precipitates acute thiamine depletion → worsens encephalopathy",
"Thiamine inhibits glucose absorption","Glucose increases thiamine clearance"],1),
("Hartnup disease predisposes to pellagra because:",
["Excess niacin consumed","Defective intestinal/renal transport of tryptophan (niacin precursor)",
"Niacin excreted in urine","Carcinoid consumes NAD⁺"],1),
],CK)
story.append(PageBreak())
# =============================================================================
# SECTION F – MINERAL DISORDERS
# =============================================================================
CK = "MIN"
cat_banner(story, CK, "SECTION F — MINERAL DISORDERS")
story.append(Spacer(1,5))
# ── Case F1: Iron Deficiency Anaemia ─────────────────────────────────────────
case_hdr(story,"F1","Iron Deficiency Anaemia",
"Most common nutritional deficiency worldwide | Microcytic hypochromic anaemia",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Mrs. Kavya, 28-year-old female. Fatigue, exertional breathlessness for 6 months. "
"Heavy menstrual periods (menorrhagia). Diet: vegetarian. "
"Pallor, koilonychia (spoon-shaped nails), angular stomatitis, glossitis. "
"Pica: craving for ice (pagophagia).",BODYJ))
sec(story,"Iron Metabolism & Pathophysiology",CK)
pathbox(story,[
"IRON ABSORPTION (duodenum):",
" Dietary Fe³⁺ →[Dcytb (duodenal cytochrome b)]→ Fe²⁺ (ferrous)",
" Fe²⁺ enters enterocyte via DMT-1 → exported by FERROPORTIN to blood",
" In blood: Fe²⁺ →[ceruloplasmin]→ Fe³⁺ → binds TRANSFERRIN (transport)",
" Stored as FERRITIN (liver, spleen, bone marrow, macrophages)",
" HEPCIDIN (liver hormone): inhibits ferroportin → ↓ iron release (in inflammation)",
"",
"IRON DEFICIENCY stages:",
" Stage 1: Storage iron depleted → ↓ ferritin (first to fall)",
" Stage 2: Transport iron ↓ → ↑ TIBC, ↓ serum iron, ↓ transferrin saturation",
" Stage 3: Erythropoiesis affected → microcytic hypochromic RBCs, ↓ Hb",
],CK)
sec(story,"Investigations",CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>IDA</b>",BOLD), Paragraph("<b>ACD</b>",BOLD), Paragraph("<b>Thalassaemia</b>",BOLD)],
["Hb","↓","↓","↓"],
["MCV/MCH","↓↓ (microcytic)","Normal/↓","↓↓"],
["Serum iron","↓","↓","Normal/↑"],
["TIBC","↑↑ (high)","↓ or Normal","Normal"],
["Ferritin","↓↓ (best indicator IDA)","↑ (acute phase)","Normal/↑"],
["Transferrin sat.","< 15%","< 15%","Normal/↑"],
["Reticulocyte Hb","↓ (early sensitive marker)","↓","Normal"],
["Serum hepcidin","↓","↑ (↑ in inflammation)","↓"],
],[4*cm,2.5*cm,2.5*cm,None],CK)
mcqs(story,[
("The FIRST parameter to fall in early iron deficiency is:",
["Haemoglobin","Serum iron","Serum ferritin","MCV"],2),
("Koilonychia is a sign of:",
["Vitamin B12 deficiency","Iron deficiency","Zinc deficiency","Folate deficiency"],1),
("Hepcidin inhibits iron absorption by:",
["Blocking Dcytb","Promoting lysosomal degradation of ferroportin",
"Inhibiting DMT-1","Increasing transferrin binding"],1),
],CK)
story.append(Spacer(1,6))
# ── Case F2: Wilson Disease ──────────────────────────────────────────────────
case_hdr(story,"F2","Wilson Disease — Copper Metabolism Disorder",
"ATP7B mutation | AR | Hepatic + neuropsychiatric + Kayser-Fleischer rings",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Amit, 19-year-old male. Presents with tremor, dysarthria, and personality change over 6 months. "
"Liver function tests mildly abnormal. "
"On slit-lamp exam: golden-brown Kayser-Fleischer rings at corneal periphery. "
"Urine copper: markedly elevated. Serum ceruloplasmin: low.",BODYJ))
sec(story,"Copper Metabolism & Pathophysiology",CK)
pathbox(story,[
"Normal: Dietary copper → absorbed in gut → binds albumin → liver",
" In liver: copper incorporated into CERULOPLASMIN (ATP7B / ATP7A)",
" excess copper excreted into bile via ATP7B",
"",
"Wilson Disease: ATP7B gene mutation (AR, Chr 13)",
" ATP7B function impaired:",
" 1. Copper NOT incorporated into ceruloplasmin → Ceruloplasmin ↓ (apoprotein only)",
" 2. Copper NOT excreted into bile → copper ACCUMULATES in liver",
" → Hepatitis → Cirrhosis",
" Excess copper spills into blood → deposited in:",
" EYES: Kayser-Fleischer rings (Descemet membrane, corneal periphery)",
" BRAIN: Basal ganglia, cerebellum → tremor, dysarthria, psychiatric symptoms",
" KIDNEY: Fanconi syndrome (tubular dysfunction)",
" BLOOD: Haemolytic anaemia (Coombs-negative)",
],CK)
grid(story,[
[Paragraph("<b>Test</b>",BOLD), Paragraph("<b>Wilson Disease</b>",BOLD), Paragraph("<b>Normal</b>",BOLD)],
["Serum ceruloplasmin","< 20 mg/dL ↓↓","20–40 mg/dL"],
["Serum copper","Variable (may be low if ceruloplasmin ↓)","70–140 µg/dL"],
["24-hr urine copper","↑↑ (> 100 µg/day)","< 40 µg/day"],
["Liver copper (biopsy)","↑↑ (> 250 µg/g dry wt)","< 50 µg/g dry wt"],
["Kayser-Fleischer rings (slit lamp)","Present in neurological Wilson","Absent"],
["Penicillamine challenge test","Urine copper ↑↑ after penicillamine","Used for confirmation in children"],
],[4.5*cm,4.5*cm,None],CK)
grid(story,[
[Paragraph("<b>Treatment</b>",BOLD), Paragraph("<b>Mechanism</b>",BOLD)],
["D-Penicillamine (first-line)","Chelates copper → urinary excretion ↑"],
["Trientine","Alternative chelator (less toxic than penicillamine)"],
["Zinc acetate","Blocks gut copper absorption (induces metallothionein in enterocytes)"],
["Liver transplant","Curative — restores hepatic ATP7B function"],
],[5.5*cm,None],CK)
story.append(PageBreak())
# =============================================================================
# SECTION G – WATER & ELECTROLYTE DISORDERS
# =============================================================================
CK = "WE"
cat_banner(story, CK, "SECTION G — WATER & ELECTROLYTE DISORDERS")
story.append(Spacer(1,5))
# ── Case G1: SIADH / Hyponatremia ─────────────────────────────────────────────
case_hdr(story,"G1","SIADH — Euvolaemic Hyponatremia",
"Inappropriate ADH secretion | Water retention | Cerebral oedema",CK)
sec(story,"Clinical Vignette",CK)
story.append(Paragraph(
"Mrs. Radha, 65-year-old female. Started on carbamazepine for trigeminal neuralgia 3 weeks ago. "
"Now presents with headache, nausea, confusion. No oedema, no dehydration signs. "
"Na⁺: 118 mEq/L. Urine Na⁺: 45 mEq/L. Urine osmolality: 550 mOsm/kg. "
"Serum osmolality: 248 mOsm/kg.",BODYJ))
sec(story,"Pathophysiology",CK)
pathbox(story,[
"Normal: ADH (vasopressin) released from posterior pituitary in response to:",
" - ↑ serum osmolality (primary trigger: osmoreceptors, hypothalamus)",
" - ↓ blood volume / pressure (baroreceptors)",
"ADH → V2 receptors on renal collecting duct → ↑ aquaporin-2 insertion → water reabsorption",
"",
"SIADH: ADH secreted DESPITE normal/low serum osmolality (INAPPROPRIATE)",
" Causes: CNS disease, pulmonary disease, drugs (carbamazepine, SSRIs, cyclophosphamide,",
" thiazides, vincristine, desmopressin), ectopic ADH (SCLC — small cell lung cancer)",
"",
" Consequences: Free water retained → dilutional HYPONATREMIA",
" Serum osmolality ↓ → brain cells swell (osmotic water entry) → CEREBRAL OEDEMA",
" → Headache → Confusion → Seizures → Herniation (if severe)",
" Urine: inappropriately concentrated (osmolality > serum) and Na⁺-rich (> 20 mEq/L)",
],CK)
sec(story,"SIADH Diagnostic Criteria",CK)
grid(story,[
[Paragraph("<b>Criterion</b>",BOLD), Paragraph("<b>Finding</b>",BOLD), Paragraph("<b>This case</b>",BOLD)],
["Serum Na⁺","< 135 mEq/L","118 mEq/L ✓"],
["Serum osmolality","< 280 mOsm/kg","248 mOsm/kg ✓"],
["Urine osmolality","> 100 mOsm/kg (inappropriately concentrated)","550 mOsm/kg ✓"],
["Urine Na⁺","> 20–40 mEq/L (natriuresis persists)","45 mEq/L ✓"],
["Volume status","Euvolaemic (no oedema, no dehydration)","Euvolaemic ✓"],
["Adrenal/thyroid function","Normal (excludes addison's, hypothyroidism)","Normal ✓"],
],[5*cm,5*cm,None],CK)
sec(story,"Management — Hyponatremia",CK)
pathbox(story,[
"RATE OF CORRECTION IS CRITICAL:",
" Correct Na⁺ NO FASTER than 8–10 mEq/L per 24 hours",
" Too rapid correction → OSMOTIC DEMYELINATION SYNDROME (central pontine myelinolysis)",
" → Locked-in syndrome, quadriplegia",
"",
"Mild-moderate SIADH: FLUID RESTRICTION (800–1000 mL/day) — first-line",
"Severe/symptomatic (seizures, coma):",
" 3% hypertonic saline IV — raise Na⁺ by 1–2 mEq/L/hr for first 3–4 hours only",
" Target: Na⁺ > 125 mEq/L, symptoms resolve",
"Chronic SIADH: Vaptans (tolvaptan, conivaptan) — V2 receptor antagonists → aquaresis",
"Treat underlying cause (stop carbamazepine here)",
],CK)
mcqs(story,[
("SIADH is characterized by urine osmolality that is:",
["Low (dilute)","Inappropriately high/concentrated relative to serum","Equal to serum","Unmeasurable"],1),
("Rapid correction of hyponatremia causes:",
["Cerebral oedema","Osmotic demyelination syndrome (central pontine myelinolysis)",
"Renal failure","Hyperkalaemia"],1),
("The first-line treatment for mild SIADH is:",
["IV hypertonic saline","Furosemide","Fluid restriction","Tolvaptan"],2),
],CK)
viva(story,[
("Why does too-rapid correction of hyponatremia cause brain damage?",
"In chronic hyponatremia, brain cells adapt by exporting organic osmoles (amino acids, taurine, "
"myoinositol) to prevent swelling. If sodium is corrected too quickly, plasma osmolality rises "
"faster than brain cells can re-accumulate osmoles. Water leaves brain cells rapidly → "
"myelin sheath dehydration → osmotic demyelination (central pontine myelinolysis). "
"Neurons in the pons are most susceptible. This causes spastic quadriplegia, locked-in syndrome, death."),
],CK)
story.append(Spacer(1,6))
# ── Case G2: Hyperkalemia / DKA Potassium ─────────────────────────────────────
case_hdr(story,"G2","Potassium Disorders — Hyper and Hypokalemia",
"K⁺ regulation | Acidosis/alkalosis shifts | Life-threatening cardiac effects",CK)
sec(story,"Potassium Physiology & Disorders",CK)
pathbox(story,[
"INTERNAL K⁺ DISTRIBUTION (98% intracellular):",
" Na/K-ATPase pumps K⁺ in, Na⁺ out — maintains [K⁺]i ~150 mEq/L vs [K⁺]e ~4 mEq/L",
" Resting membrane potential depends on K⁺ gradient",
"",
"FACTORS SHIFTING K⁺ INTO CELLS (→ hypokalaemia):",
" Insulin → activates Na/K-ATPase",
" Alkalosis → H⁺ exits cells (buffer), K⁺ enters in exchange",
" Beta-2 agonists → activate Na/K-ATPase",
"",
"FACTORS SHIFTING K⁺ OUT OF CELLS (→ hyperkalaemia):",
" Acidosis → H⁺ enters cells, K⁺ exits (as in DKA)",
" Insulin deficiency → Na/K-ATPase activity ↓",
" Cell destruction (haemolysis, rhabdomyolysis, tumour lysis)",
" Hyperosmolality → water + K⁺ exit cells together",
],CK)
grid(story,[
[Paragraph("<b>Disorder</b>",BOLD), Paragraph("<b>ECG changes</b>",BOLD), Paragraph("<b>Causes</b>",BOLD), Paragraph("<b>Treatment</b>",BOLD)],
["Hyperkalaemia\n(K⁺ > 5.5)","Peaked T waves → wide QRS → sine wave → VF","DKA (initial), ACE-I, renal failure, Addison's","IV calcium gluconate (membrane stabilization); insulin+dextrose (drive K⁺ in); sodium bicarbonate; dialysis"],
["Hypokalaemia\n(K⁺ < 3.5)","Flat T waves, U waves → arrhythmias","Diuretics, vomiting, insulin treatment of DKA, alkalosis, Conn's syndrome (hyperaldosteronism)","Oral/IV KCl replacement; treat cause"],
],[3*cm,4*cm,4*cm,None],CK)
story.append(Spacer(1,6))
# ── Case G3: Dehydration ──────────────────────────────────────────────────────
case_hdr(story,"G3","Dehydration — Water & Sodium Balance",
"Isotonic, hypotonic, hypertonic types | TBW regulation | Osmolality",CK)
sec(story,"Physiology & Types of Dehydration",CK)
pathbox(story,[
"TOTAL BODY WATER (TBW):",
" Adult male: ~60% body weight = ICF (2/3) + ECF (1/3)",
" ECF = Interstitial fluid (75%) + Plasma (25%)",
" Plasma osmolality = 2[Na⁺] + glucose/18 + BUN/2.8 (normal 285–295 mOsm/kg)",
"",
"DEHYDRATION TYPES (based on serum Na⁺):",
" ISOTONIC (Na⁺ 135–145): fluid & electrolytes lost equally — e.g., diarrhoea, burns",
" → No shift between ICF/ECF; ECF contracts; skin turgour ↓, tachycardia",
" → Treatment: Isotonic saline (0.9% NaCl)",
" HYPOTONIC (Na⁺ < 135): more Na⁺ lost than water — e.g., Addison's, cerebral salt wasting",
" → Osmolality ↓ → water shifts INTO cells (brain swells)",
" → Treatment: Normal saline ± hypertonic saline",
" HYPERTONIC (Na⁺ > 145): more water lost than Na⁺ — e.g., diabetes insipidus, fever, heat stroke",
" → Osmolality ↑ → water exits cells (brain shrinks → subdural haematoma risk)",
" → Treatment: Free water (5% dextrose or oral water)",
],CK)
grid(story,[
[Paragraph("<b>Type</b>",BOLD), Paragraph("<b>Serum Na⁺</b>",BOLD), Paragraph("<b>Mechanism</b>",BOLD), Paragraph("<b>Treatment</b>",BOLD)],
["Isotonic","135–145","Proportional Na⁺ + H₂O loss","0.9% NaCl (isotonic)"],
["Hypotonic","< 135","More Na⁺ lost than water","Isotonic → hypertonic saline"],
["Hypertonic","˃ 145","More water lost than Na⁺ (or Na⁺ gain)","Free water — 5% dextrose"],
],[3*cm,3*cm,5.5*cm,None],CK)
story.append(PageBreak())
# ── MASTER SUMMARY ────────────────────────────────────────────────────────────
hdr_t = Table([[Paragraph(
"<b>MASTER SUMMARY — All Metabolism Categories</b>",
S("ms", fontName="Helvetica-Bold", fontSize=12, textColor=WHITE,
alignment=TA_CENTER))]],colWidths=[UW])
hdr_t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),DARK_NAVY),
("TOPPADDING",(0,0),(-1,-1),8),
("BOTTOMPADDING",(0,0),(-1,-1),8),
]))
story.append(hdr_t)
master = [
[Paragraph("<b>Case</b>",S("mh",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE)),
Paragraph("<b>Diagnosis</b>",S("mh2",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE)),
Paragraph("<b>Enzyme/Defect</b>",S("mh3",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE)),
Paragraph("<b>Key Feature</b>",S("mh4",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE)),
Paragraph("<b>Key Test</b>",S("mh5",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE)),
Paragraph("<b>Treatment</b>",S("mh6",fontName="Helvetica-Bold",fontSize=7.5,textColor=WHITE))],
# CARB
["A1","Von Gierke","G-6-Pase deficiency","Hypoglycemia + hepatomegaly + lactic acidosis","Fasting glucose ↓, lactate ↑, TG ↑","Cornstarch feeds; frequent feeds"],
["A2","Galactosemia","GALT deficiency","Jaundice + cataracts + E. coli sepsis","Urine reducing substances; GALT activity","Galactose-free diet"],
["A3","T1DM","Insulin deficiency","Hyperglycemia + glycosuria + osmotic diuresis","Fasting glucose ≥126, HbA1c ≥6.5%","Insulin therapy"],
# PROT
["B1","PKU","PAH deficiency","Mousy odor + hypopigmentation + ID","Guthrie test; serum Phe > 20 mg/dL","Low-Phe diet ± sapropterin"],
["B2","OTC Deficiency","Ornithine transcarbamylase (X-linked)","Neonatal coma + hyperammonemia","NH₃ ↑↑, urine orotic acid ↑↑","Na benzoate + Na phenylbutyrate; liver Tx"],
["B3","Kwashiorkor","Protein deficiency","Oedema + pot belly + skin rash","Albumin ↓, TG ↑","Gradual protein refeeding"],
# LIPID
["C1","Fam. Hypercholesterolemia","LDLR mutation","Xanthomas + premature CAD","LDL > 300, LDLR gene","Statins, PCSK9 inhibitors"],
["C2","DKA","Insulin absence","Kussmaul + fruity breath + acidosis","pH < 7.3, AG ↑, β-OHB ↑","IV insulin + fluids + K⁺"],
["C3","NAFLD/NASH","Insulin resistance","Hepatomegaly + obesity","AST:ALT <1, USG bright liver","Weight loss, GLP-1 agonist"],
["C4","Gaucher Disease","Glucocerebrosidase ↓","Hepatosplenomegaly + pancytopenia","Gaucher cells, enzyme activity","ERT (imiglucerase)"],
["C5","Alcoholic Fatty Liver","↑ NADH/NAD⁺","Jaundice + ascites + GGT ↑↑","AST:ALT > 2, GGT markedly ↑","Abstinence; corticosteroids (severe)"],
# NUCLEIC
["D1","Gout","XO overactivity / HGPRT partial","Podagra + tophi + urate stones","MSU crystals (neg. birefringent); uric acid ↑","Allopurinol (chronic); colchicine (acute)"],
["D2","Lesch-Nyhan","HGPRT absent (X-linked)","Self-mutilation + chorea + gout","Uric acid ↑↑, HGPRT activity absent","Allopurinol + supportive"],
# VITAMIN
["E1","Scurvy","Vit C ↓ → collagen defect","Bleeding gums + perifollicular haemorrhages + corkscrew hair","↓ Serum/urine ascorbic acid, clinical diagnosis","Vit C 500 mg/day"],
["E2","Rickets","Vit D ↓ → Ca²⁺/PO₄ ↓","Bow legs + rachitic rosary + craniotabes","25-OH-D ↓, Ca ↓, PO₄ ↓, ALP ↑","Vit D + Calcium supplementation"],
["E3a","Pellagra","Niacin (B3) ↓ → NAD⁺ ↓","4Ds: Dermatitis, Diarrhoea, Dementia, Death","↓ urine N-methylnicotinamide","Nicotinamide 300 mg/day"],
["E3b","Beriberi","Thiamine (B1) ↓ → PDH defect","Wet: cardiac failure. Dry: neuropathy","Pyruvate ↑, lactate ↑; RBC transketolase ↓","IV Thiamine (before glucose in Wernicke)"],
# MINERAL
["F1","Iron Deficiency","Iron ↓ → Hb ↓","Pallor + koilonychia + angular stomatitis","Ferritin ↓↓ (earliest); MCV ↓; TIBC ↑","Oral ferrous sulphate 200 mg TDS"],
["F2","Wilson Disease","ATP7B → Cu accumulation","KF rings + liver disease + neuro/psych","Ceruloplasmin ↓, 24-hr urine Cu ↑↑","D-penicillamine or trientine; zinc"],
# WATER/ELEC
["G1","SIADH","ADH excess → free water retention","Confusion + euvolaemic hyponatremia","Na ↓, serum osm ↓, urine osm ↑, urine Na ↑","Fluid restriction; hypertonic saline (severe)"],
["G2a","Hyperkalemia","Acidosis → K⁺ out of cells","Peaked T waves → arrhythmia","K⁺ > 5.5; ECG changes","Ca gluconate; insulin + dextrose; dialysis"],
["G2b","Hypokalemia","Alkalosis/insulin → K⁺ into cells","Muscle weakness + U waves","K⁺ < 3.5; flat T, U waves on ECG","Oral/IV KCl replacement"],
["G3","Dehydration","Water/Na imbalance","Tachycardia + ↓ skin turgor + dry mucosa","Serum Na, osmolality, urine specific gravity","Isotonic/hypotonic/hypertonic saline per type"],
]
cw = [1.2*cm, 4*cm, 4.5*cm, 4*cm, 4*cm, None]
mt = Table(master, colWidths=cw, repeatRows=1)
# color header + alternating rows
cat_ranges = {
"CARB": [(1,3)],
"PROT": [(4,6)],
"LIPID": [(7,11)],
"NUC": [(12,13)],
"VIT": [(14,17)],
"MIN": [(18,19)],
"WE": [(20,23)],
}
ts = [
("BACKGROUND", (0,0),(-1,0), DARK_NAVY),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 7),
("LEADING", (0,0),(-1,-1), 9),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("GRID", (0,0),(-1,-1), 0.4, HexColor("#cccccc")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]
for ck, ranges in cat_ranges.items():
for (r1,r2) in ranges:
ts.append(("BACKGROUND", (0,r1),(0,r2), CAT_COLORS[ck]))
ts.append(("TEXTCOLOR", (0,r1),(0,r2), WHITE))
ts.append(("FONTNAME", (0,r1),(0,r2), "Helvetica-Bold"))
# light background for data cols
for r in range(r1,r2+1):
col = CAT_LIGHT[ck] if r%2==1 else WHITE
ts.append(("BACKGROUND", (1,r),(-1,r), col))
mt.setStyle(TableStyle(ts))
story.append(mt)
story.append(Spacer(1,6))
story.append(HRFlowable(width=UW, thickness=0.5, color=MGREY))
story.append(Spacer(1,3))
story.append(Paragraph(
"Sources: Robbins & Kumar Basic Pathology | Harrison's Principles of Internal Medicine 22e | "
"Thompson & Thompson Genetics 9e | Lippincott's Illustrated Biochemistry 8e | "
"Tietz Textbook of Laboratory Medicine 7e | Mulholland Surgery 7e | Ganong's Medical Physiology 26e",
S("src2", fontName="Helvetica-Oblique", fontSize=6, leading=8,
textColor=MGREY, alignment=TA_CENTER)))
story.append(Paragraph(
"Generated by Orris AI · For educational/exam preparation use only · Not for clinical use",
S("disc2", fontName="Helvetica", fontSize=6, leading=8,
textColor=MGREY, alignment=TA_CENTER)))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=add_pg, onLaterPages=add_pg)
print("SUCCESS:", OUT)
cd /tmp/workspace/lipid-cases && python generate_all_metabolism.py 2>&1
~/lipid-cases/generate_all_metabolism.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_all_metabolism.py'
~/lipid-cases/generate_all_metabolism.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_all_metabolism.py'
cd /tmp/workspace/lipid-cases && python generate_all_metabolism.py 2>&1
~/lipid-cases/generate_all_metabolism.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_all_metabolism.py'
~/lipid-cases/generate_all_metabolism.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_all_metabolism.py'
cd /tmp/workspace/lipid-cases && python generate_all_metabolism.py 2>&1
~/lipid-cases/generate_all_metabolism.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/lipid-cases/generate_all_metabolism.py'
cd /tmp/workspace/lipid-cases && python generate_all_metabolism.py 2>&1
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/lipid-cases/MBBS_All_Metabolism_Cases.pdf') print(f'Pages: {len(r.pages)}') import os size = os.path.getsize('/tmp/workspace/lipid-cases/MBBS_All_Metabolism_Cases.pdf') print(f'Size: {size/1024:.1f} KB') "
MBBS All Metabolism Cases
PDF Document · PDF
| Section | Color | Cases |
|---|---|---|
| A - Carbohydrate | Deep Blue | Von Gierke Disease, Galactosemia, T1DM Overview |
| B - Protein | Purple | PKU, OTC Deficiency (Urea Cycle), Kwashiorkor vs Marasmus |
| C - Lipid | Red | Quick-ref summary of all 5 lipid cases (detailed in companion PDF) |
| D - Nucleic Acid | Teal | Gout (primary hyperuricemia), Lesch-Nyhan Syndrome |
| E - Vitamins | Orange | Scurvy (B3), Rickets (D), Pellagra (B3) + Beriberi (B1) comparison |
| F - Minerals | Green | Iron Deficiency Anaemia, Wilson Disease (copper) |
| G - Water & Electrolytes | Blue-grey | SIADH/Hyponatremia, Hyperkalemia/Hypokalemia, Dehydration types |
| Master Summary | Dark navy | All 24 cases in one table - diagnosis, enzyme, key sign, test, treatment |