Thyriod function test

Reading File
Finding Sources
Searching the Web

thyroid function tests TSH T3 T4 interpretation clinical guide

Reading File
Finding Sources
Reading File
Reading File
Finding Sources
I now have rich, comprehensive content from authoritative textbooks. Let me compile the full answer.

Thyroid Function Tests (TFTs)

Overview

Thyroid function tests assess the hormonal output of the thyroid gland and the pituitary-thyroid feedback axis. The main tests are TSH, Free T4 (fT4), Free T3 (fT3), Total T4, Total T3, and sometimes Reverse T3 (rT3).

The Thyroid Axis - How It Works

The hypothalamus releases TRH (Thyrotropin-Releasing Hormone) → stimulates the pituitary to release TSH (Thyroid-Stimulating Hormone) → TSH stimulates the thyroid gland to produce and secrete:
  • T4 (Thyroxine) - a prohormone; the major secretory product
  • T3 (Triiodothyronine) - the active hormone
Circulating T4 is slowly metabolized - mostly converted to the active T3, with a smaller fraction converted to the inactive reverse T3 (rT3). T3 and T4 then feed back to suppress further TRH and TSH release.
Small changes in free T3 and T4 produce large changes in serum TSH - this amplification makes TSH a very sensitive marker. - Quick Compendium of Clinical Pathology, 5th ed.

Individual Tests

1. TSH (Thyroid-Stimulating Hormone / Thyrotropin)

ParameterDetails
Normal range~0.4 - 4.0 mIU/L (lab-dependent)
Best useFirst-line screening for thyroid dysfunction
Key principleInversely reflects thyroid hormone levels
  • TSH is the single best test for initially assessing thyroid function - a normal TSH essentially excludes primary thyroid dysfunction and no further testing is usually needed.
  • TSH rises in hypothyroidism (pituitary compensates) and falls in hyperthyroidism.
  • Quick Compendium of Clinical Pathology, 5th ed.

2. Free T4 (fT4)

  • Only ~0.02% of total T4 circulates unbound (free); the rest is bound to TBG (Thyroxine-Binding Globulin) and prealbumin (transthyretin).
  • Free T4 is the biologically relevant fraction and is not affected by TBG level changes.
  • Measured if TSH is abnormal; elevated in hyperthyroidism, low in hypothyroidism.
  • Free T4 by equilibrium dialysis is the most accurate method but is slow; immunoassay is standard.

3. Free T3 (fT3)

  • Only ~0.2% of total T3 is free; also TBG-independent.
  • Less commonly measured than fT4, but used when:
    • TSH is suppressed but fT4 is normal (to diagnose T3 toxicosis)
    • Monitoring patients on oral T3 therapy
    • Investigating interference with fT4 assay
    • Diagnosing secondary hypothyroidism
  • Quick Compendium of Clinical Pathology, 5th ed.

4. Total T4 and Total T3

  • Include both bound and free hormone; affected by TBG levels.
  • TBG is increased by: pregnancy, oral contraceptives, estrogen therapy, active hepatitis, hypothyroidism → falsely elevated total T4/T3.
  • TBG is decreased by: hypoproteinemic states, androgen therapy, cortisol → falsely low total T4/T3.
  • Less useful than free hormone measurements; free T4 and fT3 correlate better with clinical status.

5. Reverse T3 (rT3)

  • An inactive metabolite of T4 conversion.
  • Elevated in euthyroid sick syndrome (non-thyroidal illness).
  • Normal in primary hypo/hyperthyroidism.

6. T3 Resin Uptake (T3RU) - Now Largely Obsolete

A historical indirect measure of TBG binding capacity:
  • Radiolabeled T3 added to serum; any excess binds to added resin.
  • Low T3RU = more TBG binding sites available = hypothyroidism (or high TBG).
  • High T3RU = fewer TBG sites = hyperthyroidism (or low TBG).
  • The Free Thyroxine Index (FTI) = T3RU × total T4; largely replaced by direct free T4 measurement.

7. RAIU (Radioactive Iodine Uptake) - Nuclear Medicine Test

Patient given radioactive iodine; thyroid scanned for uptake:
  • Increased RAIU - Graves disease, functioning autonomic adenoma.
  • Decreased RAIU - thyroiditis, struma ovarii, exogenous thyroid hormone use.

TFT Interpretation Patterns

ConditionTSHFree T4Free T3rT3
Primary hyperthyroidism
Primary hypothyroidism→/↓
Euthyroid sick syndrome→ (or ↓)→/↓
T3 toxicosis
Secondary (central) hypothyroidism→/↓-
Subclinical hypothyroidism-
Subclinical hyperthyroidism-
- Quick Compendium of Clinical Pathology, 5th ed.

Clinical Approach: TSH-First Strategy

Step 1: Measure TSH.
  • If normal → thyroid dysfunction effectively excluded in most patients; no further testing needed.
  • If abnormal → proceed to Free T4.
Step 2: Measure Free T4 (if TSH is abnormal).
  • If TSH low + fT4 high → hyperthyroidism.
  • If TSH high + fT4 low → hypothyroidism.
  • If TSH low + fT4 normal → measure Free T3 (suspect T3 toxicosis).
Step 3: Free T3 measured in select circumstances (as above).

When TSH-First Policy Should Be Abandoned

  1. Critically ill patients - euthyroid sick syndrome causes low T3, low/normal T4, and low/normal TSH without true thyroid disease. TFTs should NOT be routinely ordered in the ICU unless strong clinical suspicion exists.
  2. Early thyroid therapy - TSH may remain abnormally low for months after treating hyperthyroidism (pituitary thyrotroph suppression), or take weeks to normalize after starting levothyroxine. Steady state achieved by ~2 months.
  3. Suspected pituitary or hypothalamic disease (central hypothyroidism) - TSH may be normal or low despite low T4; diagnosis requires combined TSH + fT4 interpretation.
    • Washington Manual of Medical Therapeutics

Effect of Drugs on TFTs

EffectDrug
↓ fT4 + ↑ TSH (true hypothyroidism)Iodine (amiodarone, contrast media), lithium, tyrosine kinase inhibitors, interferon-α, checkpoint inhibitors
↓ TSH (suppress secretion)Glucocorticoids, dopamine
Multiple mechanisms, TSH normalPhenytoin
↓ Total T4 only (↓ TBG)Androgens
Inhibit T4 binding to TBGHigh-dose furosemide, salicylates
↑ fT4 + ↓ TSH (true hyperthyroidism)Iodine (amiodarone), some immune modulators
- Washington Manual of Medical Therapeutics

Euthyroid Sick Syndrome (Non-Thyroidal Illness, NTI)

Many illnesses alter TFTs WITHOUT causing true thyroid dysfunction. Key patterns:
  • Low T3: Most common change. Decreased T4 to T3 conversion. Seen in starvation, surgery, trauma, and systemic illness. TSH and fT4 are normal. No treatment needed.
  • Low T4: In severe illness. TSH initially decreases (sometimes to <0.1 μU/mL). During recovery, TSH may transiently rise (rarely >20 μU/mL).
  • Increased rT3 is characteristically elevated.

Summary Table: Test Selection

Clinical QuestionBest Test
Screen for thyroid dysfunctionTSH
Confirm hypo/hyperthyroidismTSH + Free T4
Suspect T3 toxicosisTSH + Free T3
Monitor levothyroxine therapyTSH (after steady state ~2 months)
Suspect central hypothyroidismTSH + Free T4 combined
TBG abnormality suspectedFree T4/T3 (not total)
Differentiate thyroiditis from GravesRAIU

Key Teaching Points:
  • TSH is the most sensitive and specific single test for thyroid function - use it first.
  • Only ~0.02% of T4 is free; binding protein changes (pregnancy, OCP, illness) significantly alter total T4 without reflecting true thyroid status.
  • Always interpret TFTs in clinical context - several drug effects and NTI mimic true thyroid disease.
  • In central (pituitary) disease, TSH can be inappropriately normal or low despite true hypothyroidism.
Asking for Preferences
Asking for Preferences
Asking for Preferences
Reading File
Running Command

cd "/home/daytona/workspace/attachments/380d64ac-34ee-4853-96c1-7650d4e84f05/" &…

Running Command

cd "/home/daytona/workspace/attachments/380d64ac-34ee-4853-96c1-7650d4e84f05/" &…

Running Command

cd "/home/daytona/workspace/attachments/380d64ac-34ee-4853-96c1-7650d4e84f05/" &…

Running Command

cd "/home/daytona/workspace/attachments/380d64ac-34ee-4853-96c1-7650d4e84f05/" &…

Running Command

cd "/home/daytona/workspace/attachments/380d64ac-34ee-4853-96c1-7650d4e84f05/" &…

Here is the complete summary of the Renal Pathology content from the Postgraduate Manual of Pathology, 9th Edition (2025) by Dr. Shiva M.D.

About This Book

This is a postgraduate exam question bank designed specifically for MD Pathology residents from Andhra Pradesh and Telangana (India) - covering Dr. NTR UHS (AP) and KNRUHS (Telangana) university exams from the 1990s through May 2025. It is organized by Paper (I-IV) and topic, with each question tagged to the specific exam session in which it appeared.
The book contains 109 pages and is marked "NOT for sale."

Renal Pathology - Complete Chapter Summary

Renal pathology questions appear across multiple sections of the book. Here is a comprehensive, organized summary:

SECTION 1: SPECIAL PATHOLOGY - KIDNEY (Paper II, Pages 32-33)

This is the dedicated kidney chapter - the most heavily tested section. Topics covered, organized by frequency and theme:

A. Glomerular Diseases

Glomerular Injury Mechanisms (heavily recurring - asked in almost every exam):
  • Mechanisms/immune mechanisms/immunopathogenesis of glomerular injury
  • Pathogenesis of glomerular injury and progression
  • Types of tissue reactions in glomerulopathies
  • Immunofluorescence (IF) in understanding/diagnosing glomerular diseases - asked from 1996 through 2025
Specific Glomerulonephritides:
  • Lupus nephritis - classification, morphology, ISN/RPS classification (Dec. 2022, April 2019, May 2016)
  • Podocytopathies - morphological features, classify and illustrate (April 2018, Dec. 2019 internal)
  • MPGN (Membranoproliferative GN) - pathology, classification (April 2011, Dec. 2012)
  • IgA nephropathy (Berger disease) - etiopathogenesis and pathology (June 2008)
  • Nephritic syndrome - histopathology, ultrastructure and IF patterns (Oct. 2019)
  • Familial/hereditary glomerulopathies / Alport syndrome (Dec. 2024, Dec. 2017, April 2014, Dec. 2021)
  • Acute glomerulonephritis - current concepts in pathogenesis (April/May 2005)

B. Tubular and Interstitial Disease

  • Acute Tubular Necrosis (ATN) - (April 2018)
  • Renal cortical necrosis (diffuse) - pathology (Oct. 2014)
  • Drug toxicity in kidney (May 2000)

C. Cystic Diseases of Kidney (very frequently asked)

  • Cystic renal disease / polycystic kidney disease - classification, pathogenesis (Nov. 2023, Dec. 2019, April 2013, Sep/Oct 2004, May/June 2006)
  • Renal dysplasia (Sep/Oct 2004, Aug 1998)
  • Renal cysts (Nov. 2007)

D. Renal Tumors

  • Renal cell carcinoma (RCC) - classification, variants, pathogenesis, genomic classification (Sep/Oct 2004, April 2014, Dec. 2022)
  • Pediatric renal neoplasms - Wilms tumor (nephroblastoma), Rhabdoid tumor, Clear cell sarcoma (Dec. 2022, Dec. 2007, May 2022, Int Exam June 2023)
  • Mesenchymal tumors of kidney (Oct. 2015, Dec. 2013)
  • Recently described renal tumors / new classification (Dec. 2022, Aug. 2020, Nov. 2006)
  • Translocation RCC / MiT family (Nov. 2016)
  • RCC with rhabdoid differentiation (July 2021)
  • Recent advances in RCC classification (Oct. 2019)

E. Other Renal Conditions

  • Urolithiasis / Renal calculi - etiopathogenesis and pathology (April 2010, June 2008, May 2025)
  • Renal hypertension (Sep. 1996)
  • IF in renal diseases - recurring from 1996 to 2025

SECTION 2: CLINICAL PATHOLOGY - KIDNEY FUNCTION TESTS (Page 50)

A dedicated set of questions on renal function assessment:
QuestionExam Year
Clearance tests to assess renal functionJune 2023
Blood and urine abnormalities of chronic kidney diseaseDec. 2022
Hepatorenal syndromeNov. 2021
Renal calculiOct. 2019
Etiopathology and lab diagnosis of acute renal failureOct. 2014
Etiopathology and lab diagnosis of chronic renal failureApril 2014
Describe renal function testsApril 2011
Laboratory diagnosis of renal failureNov. 2009
Creatinine clearance testsSep/Oct 2004

SECTION 3: URINE EXAMINATION (Pages 47-48)

A very high-yield section for clinical pathology papers:
  • Urinary sediment examination in renal diseases - asked repeatedly (2008, 2012, 2016, 2020, 2022, 2024)
  • Urinary casts - types and significance (1998, 2005, 2020)
  • Proteinuria (Nov. 2023)
  • Microalbuminuria (1998, 2004×2, 2013)
  • Diagnostic application of microscopic urine examination
  • Lab investigations in hematuria (April 2012)
  • Automation in urine analysis
  • Urine sediment examination in renal lesions (Int. Exam recurring)
  • Paris system for reporting urine cytopathology (Jan 2025, May 2025)

SECTION 4: RENAL PATHOLOGY IN SYSTEMIC DISEASES

Scattered across relevant system chapters:
Diabetes mellitus - Renal involvement:
  • Diabetic nephropathy (Oct. 2013, April 2013, Sep. 1997)
  • Morphology of kidney in diabetes mellitus (Aug. 2020)
  • Role of nonenzymatic glycosylation in diabetic complications (Sep/Oct 2002)
  • Pathogenesis of renal lesions in diabetes mellitus (April 2013)
  • Renal pathology due to diabetic complications (April/May 2005)
SLE - Renal involvement:
  • Kidney in SLE / lupus nephritis (Nov. 2022, and within immune system chapter)
  • Skin and kidney in SLE (April/May 2005)
Hypertension:
  • Renal hypertension (Sep. 1996)
  • Vascular pathology in hypertension - includes renal effects

SECTION 5: IMMUNOFLUORESCENCE IN RENAL PATHOLOGY (High-yield, Recurring)

This is one of the most frequently asked topics across all exam years:
  • Role of IF in understanding glomerular diseases (1996, 2016, 2024)
  • Role of IF in renal biopsy (June 2023, March 2024)
  • IF and electron microscopy in glomerular diseases (July 2021)
  • IF in glomerular pathology (July 2021)
  • IF in renal diseases (June 2020)
  • Light chain IF in various nephropathies (Dec. 2012)
  • Role of IF in renal pathology (May 2025)
  • Renal biopsy interpretation of glomerular diseases (Paper IV)

SECTION 6: RECENT ADVANCES - KIDNEY (Pages 70, 103)

From Paper IV (Recent Advances) and the Reference Articles section:
Paper IV questions:
  • Recently described renal tumors (Dec. 2022, Aug. 2020)
  • Genomic classifications of RCC (Dec. 2022)
  • Hereditary glomerular diseases (Dec. 2021, Oct/Nov 2010)
  • Podocytopathies (April 2018)
  • Recent advances in RCC (Oct. 2012)
  • Translocation renal cell tumors (Nov. 2016)
  • Recent concepts in transplant-related pathology of kidney (April/May 2009)
  • ANCA-associated renal diseases (2019)
  • Renal biopsy interpretation of glomerular diseases (May 2022)
  • Infective tubulointerstitial diseases of the kidney (May 2025)
  • Role of IF in glomerular lesions of kidney (Dec 2023)
Reference Articles cited (RA = Recent Advances journal volumes):
  • Papillary renal cell carcinoma: review (RA 26-161)
  • Cystic tumours of the kidney (RA 25-135)
  • New classification of renal neoplasms (RA 19-99)
  • Interstitial nephritis (RA 17-219)

SECTION 7: CYTOLOGY - KIDNEY (Page 44)

  • Role of FNAC in renal transplants (May/June 2006)
  • Role of cytology in diagnosis of renal transplant rejection (Sep/Oct 2003)
  • Aspiration cytology of adrenal lesions (July 2021)
  • Urine cytology in metabolic diseases (May 2025)

Most Frequently Asked Renal Topics (High-Yield for Exams)

Based on the frequency of repetition across exam years:
RankTopicNo. of Times Asked
1Immunofluorescence in renal/glomerular diseases10+ times
2Mechanisms/pathogenesis of glomerular injury8+ times
3Urinary sediment/casts examination8+ times
4Cystic diseases of kidney / ADPKD6+ times
5Lupus nephritis - classification and morphology5+ times
6Renal cell carcinoma - classification/variants5+ times
7Pediatric renal tumors (Wilms, etc.)5+ times
8Diabetic nephropathy5+ times
9Renal failure - lab diagnosis4+ times
10Podocytopathies3+ times
11Hereditary/familial nephritis (Alport)3+ times
12MPGN3+ times

Note: This book is specifically tailored for AP/Telangana MD Pathology university exams. The questions listed are real past exam questions - each entry represents a topic that has appeared in the university examination. Topics asked in May 2025 (the most recent edition update) are: Role of IF in renal pathology, Etiopathogenesis of renal calculi, Infective tubulointerstitial diseases of kidney, and Urine cytology in metabolic diseases.

Create a study guide PDF on immunofluorescence in renal diseases

Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
Reading File
Finding Sources
Reading File
Reading File
Reading File
Finding Sources
Running Command

mkdir -p /home/daytona/workspace/renal-if-study-guide && ls /home/daytona/worksp…

Writing File

~/renal-if-study-guide/create_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
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, PageTemplate, Frame

OUTPUT = "/home/daytona/workspace/renal-if-study-guide/Immunofluorescence_Renal_Diseases_Study_Guide.pdf"

# ─── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1a3a5c")
MID_BLUE    = colors.HexColor("#2c5f8a")
LIGHT_BLUE  = colors.HexColor("#d6e8f7")
ACCENT      = colors.HexColor("#e8a020")
LIGHT_GREY  = colors.HexColor("#f5f5f5")
MID_GREY    = colors.HexColor("#cccccc")
GREEN       = colors.HexColor("#2d6a4f")
LIGHT_GREEN = colors.HexColor("#d8f3dc")
RED         = colors.HexColor("#9b2226")
LIGHT_RED   = colors.HexColor("#fde8e8")
PURPLE      = colors.HexColor("#5c3d8f")
LIGHT_PURP  = colors.HexColor("#ede0ff")
WHITE       = colors.white
BLACK       = colors.black

# ─── Styles ──────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def S(name, **kw):
    return ParagraphStyle(name, **kw)

TITLE = S("TITLE", fontSize=28, textColor=WHITE, fontName="Helvetica-Bold",
          alignment=TA_CENTER, spaceAfter=4)
SUBTITLE = S("SUBTITLE", fontSize=14, textColor=LIGHT_BLUE, fontName="Helvetica",
             alignment=TA_CENTER, spaceAfter=8)
META = S("META", fontSize=10, textColor=LIGHT_BLUE, fontName="Helvetica",
         alignment=TA_CENTER, spaceAfter=4)

H1 = S("H1", fontSize=18, textColor=WHITE, fontName="Helvetica-Bold",
       spaceAfter=6, spaceBefore=12)
H2 = S("H2", fontSize=13, textColor=DARK_BLUE, fontName="Helvetica-Bold",
       spaceAfter=4, spaceBefore=10)
H3 = S("H3", fontSize=11, textColor=MID_BLUE, fontName="Helvetica-Bold",
       spaceAfter=3, spaceBefore=8)
BODY = S("BODY", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
         spaceAfter=4, leading=14, alignment=TA_JUSTIFY)
BODY_SM = S("BODY_SM", fontSize=9, textColor=BLACK, fontName="Helvetica",
            spaceAfter=3, leading=13)
BULLET = S("BULLET", fontSize=9.5, textColor=BLACK, fontName="Helvetica",
           spaceAfter=3, leftIndent=14, leading=14,
           bulletText="\u2022", bulletIndent=4)
BULLET2 = S("BULLET2", fontSize=9, textColor=colors.HexColor("#333333"),
            fontName="Helvetica", spaceAfter=2, leftIndent=28, leading=13,
            bulletText="\u25e6", bulletIndent=18)
KEY = S("KEY", fontSize=10, textColor=RED, fontName="Helvetica-Bold",
        spaceAfter=3, leading=14)
NOTE = S("NOTE", fontSize=9, textColor=colors.HexColor("#555555"),
         fontName="Helvetica-Oblique", spaceAfter=3, leading=13)
TBL_HDR = S("TBL_HDR", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
            alignment=TA_CENTER, leading=12)
TBL_CELL = S("TBL_CELL", fontSize=8.5, textColor=BLACK, fontName="Helvetica",
             alignment=TA_CENTER, leading=11)
TBL_CELL_L = S("TBL_CELL_L", fontSize=8.5, textColor=BLACK, fontName="Helvetica",
               alignment=TA_LEFT, leading=11)
BOX_TXT = S("BOX_TXT", fontSize=9.5, textColor=DARK_BLUE, fontName="Helvetica",
            spaceAfter=4, leading=14)
BOX_BOLD = S("BOX_BOLD", fontSize=10, textColor=DARK_BLUE, fontName="Helvetica-Bold",
             spaceAfter=4, leading=14)

# ─── Helper builders ─────────────────────────────────────────────────────────
def hr(color=MID_BLUE, thickness=1):
    return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=4, spaceBefore=2)

def section_banner(text, bg=DARK_BLUE, fg=WHITE):
    data = [[Paragraph(text, S("_bh", fontSize=14, textColor=fg,
                               fontName="Helvetica-Bold", alignment=TA_LEFT))]]
    t = Table(data, colWidths=["100%"])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING",   (0,0), (-1,-1), 12),
        ("RIGHTPADDING",  (0,0), (-1,-1), 12),
        ("ROUNDEDCORNERS", [4, 4, 4, 4]),
    ]))
    return t

def info_box(title, content_paras, bg=LIGHT_BLUE, border=MID_BLUE):
    rows = []
    if title:
        rows.append([Paragraph(title, BOX_BOLD)])
    for p in content_paras:
        rows.append([p])
    t = Table([[r[0]] for r in rows], colWidths=["100%"])
    ts = [
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("BOX", (0,0), (-1,-1), 1.2, border),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
    ]
    t.setStyle(TableStyle(ts))
    return t

def two_col(left_items, right_items, widths=None):
    if widths is None:
        widths = [9*cm, 9*cm]
    left_tbl  = [[p] for p in left_items]
    right_tbl = [[p] for p in right_items]
    left_t  = Table(left_tbl,  colWidths=[widths[0]])
    right_t = Table(right_tbl, colWidths=[widths[1]])
    left_t.setStyle(TableStyle([("TOPPADDING",(0,0),(-1,-1),1),("BOTTOMPADDING",(0,0),(-1,-1),1)]))
    right_t.setStyle(TableStyle([("TOPPADDING",(0,0),(-1,-1),1),("BOTTOMPADDING",(0,0),(-1,-1),1)]))
    outer = Table([[left_t, right_t]], colWidths=widths)
    outer.setStyle(TableStyle([
        ("VALIGN", (0,0), (-1,-1), "TOP"),
        ("TOPPADDING", (0,0),(-1,-1),0),
        ("BOTTOMPADDING",(0,0),(-1,-1),0),
        ("LEFTPADDING",(0,0),(-1,-1),0),
        ("RIGHTPADDING",(0,0),(-1,-1),4),
    ]))
    return outer

# ─── Document setup ──────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    leftMargin=2*cm, rightMargin=2*cm,
    topMargin=2.2*cm, bottomMargin=2*cm,
    title="Immunofluorescence in Renal Diseases - Study Guide",
    author="Orris Medical Education"
)

story = []
W = 17*cm  # usable width

# ═══════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ═══════════════════════════════════════════════════════════════════════════
cover_bg = Table(
    [[Paragraph("IMMUNOFLUORESCENCE", TITLE)],
     [Paragraph("IN RENAL DISEASES", TITLE)],
     [Spacer(1, 0.3*cm)],
     [Paragraph("Comprehensive Study Guide for MD Pathology", SUBTITLE)],
     [Paragraph("Postgraduate Examination Series", META)],
     [Spacer(1, 0.5*cm)],
     [hr(ACCENT, 2)],
     [Spacer(1, 0.3*cm)],
     [Paragraph("Topics Covered:", META)],
     [Paragraph("Principles • IF Patterns • Disease-wise Summary • Quick Reference Tables", META)],
     [Spacer(1, 0.3*cm)],
     [Paragraph("Aligned with Dr. NTR UHS (AP) &amp; KNRUHS (Telangana) Exam Syllabus", META)],
    ],
    colWidths=[W]
)
cover_bg.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
    ("TOPPADDING",    (0,0), (-1,-1), 18),
    ("BOTTOMPADDING", (0,0), (-1,-1), 12),
    ("LEFTPADDING",   (0,0), (-1,-1), 20),
    ("RIGHTPADDING",  (0,0), (-1,-1), 20),
]))
story.append(cover_bg)
story.append(Spacer(1, 1*cm))

# Accent strip
strip = Table([[""]], colWidths=[W])
strip.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1),ACCENT),
                            ("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3)]))
story.append(strip)
story.append(Spacer(1, 0.6*cm))

# Intro blurb on cover
story.append(info_box(
    "Why Immunofluorescence?",
    [Paragraph("Immunofluorescence (IF) microscopy is the CORNERSTONE of renal biopsy interpretation. "
               "It identifies the type, location, and pattern of immune deposits - directly guiding diagnosis "
               "and treatment. Along with light microscopy (LM) and electron microscopy (EM), it forms the "
               "TRIAD of renal biopsy evaluation.", BOX_TXT),
     Paragraph("IF has been asked in EVERY AP/Telangana MD Pathology exam since 1996. "
               "Master it thoroughly.", BOX_BOLD)],
    bg=LIGHT_BLUE, border=MID_BLUE
))
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 1: PRINCIPLES OF IMMUNOFLUORESCENCE
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 1: PRINCIPLES OF IMMUNOFLUORESCENCE IN RENAL BIOPSY"))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("What is Immunofluorescence?", H2))
story.append(Paragraph(
    "Immunofluorescence (IF) microscopy uses fluorochrome-labelled antibodies to detect and localize specific "
    "proteins (immunoglobulins, complement components) in tissue sections. In renal pathology, it identifies "
    "immune deposits in the glomerulus, tubular basement membranes (TBM), and interstitium.", BODY))

story.append(Paragraph("Types of IF Used in Renal Pathology", H2))
data = [
    [Paragraph("Type", TBL_HDR), Paragraph("Technique", TBL_HDR), Paragraph("Tissue Required", TBL_HDR), Paragraph("Notes", TBL_HDR)],
    [Paragraph("Direct IF (DIF)", TBL_CELL_L), Paragraph("Fluorescent Ab directly applied to tissue", TBL_CELL_L),
     Paragraph("Fresh-frozen (snap frozen)", TBL_CELL_L), Paragraph("Gold standard for renal biopsy", TBL_CELL_L)],
    [Paragraph("Indirect IF (IIF)", TBL_CELL_L), Paragraph("Unlabelled primary Ab + fluorescent secondary Ab", TBL_CELL_L),
     Paragraph("Serum (for ANCA, anti-GBM)", TBL_CELL_L), Paragraph("Used in systemic disease workup", TBL_CELL_L)],
    [Paragraph("Paraffin IF", TBL_CELL_L), Paragraph("IF after pronase digestion of paraffin sections", TBL_CELL_L),
     Paragraph("Formalin-fixed paraffin", TBL_CELL_L), Paragraph("Useful when fresh tissue unavailable; unmasks light-chain restriction", TBL_CELL_L)],
]
t = Table(data, colWidths=[3.5*cm, 4.5*cm, 4*cm, 5*cm])
t.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
    ("BACKGROUND", (0,1), (-1,1), LIGHT_BLUE),
    ("BACKGROUND", (0,2), (-1,2), WHITE),
    ("BACKGROUND", (0,3), (-1,3), LIGHT_BLUE),
    ("BOX", (0,0), (-1,-1), 0.8, MID_BLUE),
    ("INNERGRID", (0,0), (-1,-1), 0.4, MID_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t)
story.append(Spacer(1, 0.4*cm))

story.append(Paragraph("Standard Panel of Antibodies Used in Renal IF", H2))
story.append(Paragraph("A standard renal biopsy IF panel stains for:", BODY))
panel_data = [
    [Paragraph("Antibody", TBL_HDR), Paragraph("What it detects", TBL_HDR), Paragraph("Clinical significance", TBL_HDR)],
    [Paragraph("IgG", TBL_CELL_L), Paragraph("Immunoglobulin G", TBL_CELL_L), Paragraph("Membranous nephropathy, post-infectious GN, lupus nephritis", TBL_CELL_L)],
    [Paragraph("IgA", TBL_CELL_L), Paragraph("Immunoglobulin A", TBL_CELL_L), Paragraph("IgA nephropathy (dominant), lupus nephritis", TBL_CELL_L)],
    [Paragraph("IgM", TBL_CELL_L), Paragraph("Immunoglobulin M", TBL_CELL_L), Paragraph("IgM nephropathy, part of full-house pattern in lupus", TBL_CELL_L)],
    [Paragraph("C3", TBL_CELL_L), Paragraph("Complement component 3", TBL_CELL_L), Paragraph("C3 glomerulopathy, post-infectious GN, MPGN", TBL_CELL_L)],
    [Paragraph("C1q", TBL_CELL_L), Paragraph("Complement component 1q", TBL_CELL_L), Paragraph("Lupus nephritis (classical pathway), C1q nephropathy", TBL_CELL_L)],
    [Paragraph("C4", TBL_CELL_L), Paragraph("Complement component 4", TBL_CELL_L), Paragraph("Classical pathway activation (lupus, infection)", TBL_CELL_L)],
    [Paragraph("Kappa (κ)", TBL_CELL_L), Paragraph("Light chain kappa", TBL_CELL_L), Paragraph("Light chain cast nephropathy, AL amyloid, monoclonal GN", TBL_CELL_L)],
    [Paragraph("Lambda (λ)", TBL_CELL_L), Paragraph("Light chain lambda", TBL_CELL_L), Paragraph("Light chain restriction assessment", TBL_CELL_L)],
    [Paragraph("Fibrinogen", TBL_CELL_L), Paragraph("Fibrin", TBL_CELL_L), Paragraph("Crescents, TMA, fibrinoid necrosis", TBL_CELL_L)],
    [Paragraph("Albumin", TBL_CELL_L), Paragraph("Serum albumin", TBL_CELL_L), Paragraph("Non-specific trapping; control", TBL_CELL_L)],
]
t2 = Table(panel_data, colWidths=[2.8*cm, 4*cm, 10.2*cm])
t2.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_GREY, WHITE]),
    ("BOX", (0,0), (-1,-1), 0.8, MID_BLUE),
    ("INNERGRID", (0,0), (-1,-1), 0.4, MID_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t2)
story.append(Spacer(1, 0.4*cm))

story.append(Paragraph("Key IF Patterns - The Big Three", H2))
pattern_data = [
    [Paragraph("Pattern", TBL_HDR), Paragraph("Appearance", TBL_HDR), Paragraph("Mechanism", TBL_HDR), Paragraph("Classic Example", TBL_HDR)],
    [Paragraph("LINEAR", TBL_CELL), Paragraph("Smooth, continuous fluorescence along GBM", TBL_CELL),
     Paragraph("Anti-GBM antibody binding uniformly across entire GBM", TBL_CELL), Paragraph("Anti-GBM disease (Goodpasture syndrome)", TBL_CELL)],
    [Paragraph("GRANULAR", TBL_CELL), Paragraph("Lumpy, discontinuous, coarse or fine granules", TBL_CELL),
     Paragraph("Immune complex deposition - in situ or circulating complexes", TBL_CELL), Paragraph("Membranous nephropathy, Post-infectious GN, IgA nephropathy", TBL_CELL)],
    [Paragraph("NEGATIVE / PAUCI-IMMUNE", TBL_CELL), Paragraph("No staining or minimal (<2+ trace)", TBL_CELL),
     Paragraph("No immune complexes; neutrophil-mediated injury (ANCA)", TBL_CELL), Paragraph("ANCA-associated GN (GPA, MPA, EGPA)", TBL_CELL)],
]
t3 = Table(pattern_data, colWidths=[3*cm, 4.2*cm, 5*cm, 4.8*cm])
t3.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
    ("BACKGROUND", (0,1), (-1,1), LIGHT_RED),
    ("BACKGROUND", (0,2), (-1,2), LIGHT_GREEN),
    ("BACKGROUND", (0,3), (-1,3), LIGHT_PURP),
    ("BOX", (0,0), (-1,-1), 1, MID_BLUE),
    ("INNERGRID", (0,0), (-1,-1), 0.5, MID_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t3)
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Location of Deposits - Key Terms", H2))
loc_data = [
    [Paragraph("Location", TBL_HDR), Paragraph("Abbreviation", TBL_HDR), Paragraph("Position", TBL_HDR), Paragraph("Key Disease", TBL_HDR)],
    [Paragraph("Subepithelial", TBL_CELL), Paragraph("SE", TBL_CELL), Paragraph("Between GBM and podocyte (epithelium)", TBL_CELL),
     Paragraph("Membranous nephropathy; 'Humps' in post-infectious GN", TBL_CELL)],
    [Paragraph("Subendothelial", TBL_CELL), Paragraph("SEN", TBL_CELL), Paragraph("Between GBM and endothelium", TBL_CELL),
     Paragraph("MPGN type I, Lupus class III/IV, Diffuse proliferative GN", TBL_CELL)],
    [Paragraph("Mesangial", TBL_CELL), Paragraph("Mes", TBL_CELL), Paragraph("Within mesangium", TBL_CELL),
     Paragraph("IgA nephropathy, lupus class I/II", TBL_CELL)],
    [Paragraph("Intramembranous", TBL_CELL), Paragraph("IM", TBL_CELL), Paragraph("Within GBM", TBL_CELL),
     Paragraph("Dense deposit disease (MPGN type II)", TBL_CELL)],
    [Paragraph("TBM (tubular)", TBL_CELL), Paragraph("TBM", TBL_CELL), Paragraph("Along tubular basement membranes", TBL_CELL),
     Paragraph("Lupus nephritis, anti-TBM disease, drug injury", TBL_CELL)],
]
t4 = Table(loc_data, colWidths=[3.5*cm, 2.5*cm, 5*cm, 6*cm])
t4.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), MID_BLUE),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_GREY, WHITE]),
    ("BOX", (0,0), (-1,-1), 0.8, MID_BLUE),
    ("INNERGRID", (0,0), (-1,-1), 0.4, MID_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t4)
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 2: DISEASE-WISE IF PATTERNS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 2: DISEASE-WISE IMMUNOFLUORESCENCE PATTERNS"))
story.append(Spacer(1, 0.3*cm))

# ── 2A: MASTER REFERENCE TABLE ──────────────────────────────────────────────
story.append(Paragraph("Master Reference Table - IF in Primary Glomerulonephritides", H2))
story.append(Paragraph("Source: Robbins, Cotran & Kumar Pathologic Basis of Disease; Comprehensive Clinical Nephrology 7th Ed.", NOTE))
story.append(Spacer(1, 0.2*cm))

master_data = [
    [Paragraph("Disease", TBL_HDR),
     Paragraph("Clinical Syndrome", TBL_HDR),
     Paragraph("IF Pattern", TBL_HDR),
     Paragraph("Key Deposits", TBL_HDR),
     Paragraph("Location", TBL_HDR)],
    # Row 1
    [Paragraph("Post-infectious GN\n(Post-streptococcal)", TBL_CELL_L),
     Paragraph("Nephritic syndrome", TBL_CELL),
     Paragraph("GRANULAR", TBL_CELL),
     Paragraph("IgG + C3\n(±IgA)", TBL_CELL),
     Paragraph("GBM + Mesangium; subepithelial 'humps'", TBL_CELL_L)],
    # Row 2
    [Paragraph("Crescentic (RPGN)\nType I - Anti-GBM", TBL_CELL_L),
     Paragraph("Nephritic + rapid progression", TBL_CELL),
     Paragraph("LINEAR", TBL_CELL),
     Paragraph("IgG + C3", TBL_CELL),
     Paragraph("Along entire GBM", TBL_CELL_L)],
    # Row 3
    [Paragraph("Crescentic (RPGN)\nType II - Immune complex", TBL_CELL_L),
     Paragraph("Nephritic + rapid progression", TBL_CELL),
     Paragraph("GRANULAR", TBL_CELL),
     Paragraph("IgG + C3\n(varies by cause)", TBL_CELL),
     Paragraph("GBM / mesangium (varies)", TBL_CELL_L)],
    # Row 4
    [Paragraph("Crescentic (RPGN)\nType III - ANCA", TBL_CELL_L),
     Paragraph("Nephritic + rapid progression", TBL_CELL),
     Paragraph("NEGATIVE\n(Pauci-immune)", TBL_CELL),
     Paragraph("No significant deposits", TBL_CELL),
     Paragraph("No immune deposits", TBL_CELL_L)],
    # Row 5
    [Paragraph("Membranous Nephropathy", TBL_CELL_L),
     Paragraph("Nephrotic syndrome", TBL_CELL),
     Paragraph("GRANULAR\n(diffuse)", TBL_CELL),
     Paragraph("IgG + C3", TBL_CELL),
     Paragraph("Subepithelial (along capillary wall)", TBL_CELL_L)],
    # Row 6
    [Paragraph("Minimal Change Disease\n(MCD)", TBL_CELL_L),
     Paragraph("Nephrotic syndrome", TBL_CELL),
     Paragraph("NEGATIVE\nor fine granular IgG (podocyte)", TBL_CELL),
     Paragraph("No deposits\n(or trace IgM)", TBL_CELL),
     Paragraph("No deposits on EM; foot process effacement only", TBL_CELL_L)],
    # Row 7
    [Paragraph("Focal Segmental\nGlomerulosclerosis (FSGS)", TBL_CELL_L),
     Paragraph("Nephrotic syndrome", TBL_CELL),
     Paragraph("IgM + C3\n(nonspecific)", TBL_CELL),
     Paragraph("IgM + C3\n(segmental)", TBL_CELL),
     Paragraph("Sclerotic segments (non-specific trapping)", TBL_CELL_L)],
    # Row 8
    [Paragraph("MPGN Type I\n(Immune complex)", TBL_CELL_L),
     Paragraph("Nephritic / Nephrotic", TBL_CELL),
     Paragraph("GRANULAR", TBL_CELL),
     Paragraph("IgG + C3\n+ C1q + C4", TBL_CELL),
     Paragraph("Subendothelial + mesangium", TBL_CELL_L)],
    # Row 9
    [Paragraph("Dense Deposit Disease\n(MPGN Type II / C3GN)", TBL_CELL_L),
     Paragraph("Hematuria / Nephritic", TBL_CELL),
     Paragraph("C3 ONLY\n(no Ig, no C1q/C4)", TBL_CELL),
     Paragraph("C3 (dominant)", TBL_CELL),
     Paragraph("Intramembranous dense deposits on EM", TBL_CELL_L)],
    # Row 10
    [Paragraph("IgA Nephropathy\n(Berger Disease)", TBL_CELL_L),
     Paragraph("Recurrent hematuria / proteinuria", TBL_CELL),
     Paragraph("GRANULAR\nmesangial", TBL_CELL),
     Paragraph("IgA (dominant)\n+ IgG, IgM, C3", TBL_CELL),
     Paragraph("Mesangium (±paramesangial)", TBL_CELL_L)],
]
t_master = Table(master_data, colWidths=[3.8*cm, 3*cm, 3*cm, 3*cm, 4.2*cm])
ts_master = [
    ("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_GREY, WHITE]),
    ("BOX", (0,0), (-1,-1), 1, MID_BLUE),
    ("INNERGRID", (0,0), (-1,-1), 0.5, MID_GREY),
    ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING", (0,0), (-1,-1), 4), ("RIGHTPADDING", (0,0), (-1,-1), 4),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    # Colour-code the IF pattern column
    ("BACKGROUND", (2,2),  (2,2),  LIGHT_GREEN),   # post-infectious = granular
    ("BACKGROUND", (2,3),  (2,3),  LIGHT_RED),     # anti-GBM = linear (red warning)
    ("BACKGROUND", (2,4),  (2,4),  LIGHT_GREEN),   # immune complex RPGN
    ("BACKGROUND", (2,5),  (2,5),  LIGHT_PURP),    # ANCA negative = purple
    ("BACKGROUND", (2,6),  (2,6),  LIGHT_GREEN),   # MN granular
    ("BACKGROUND", (2,7),  (2,7),  LIGHT_PURP),    # MCD negative
    ("BACKGROUND", (2,9),  (2,9),  LIGHT_BLUE),    # C3 only
    ("BACKGROUND", (2,10), (2,10), LIGHT_GREEN),   # IgA
]
t_master.setStyle(TableStyle(ts_master))
story.append(t_master)
story.append(Spacer(1, 0.4*cm))

# colour key
key_data = [[
    Paragraph("<font color='#2d6a4f'><b>GREEN</b></font> = Granular (immune complex)", BODY_SM),
    Paragraph("<font color='#9b2226'><b>RED</b></font> = Linear (anti-GBM)", BODY_SM),
    Paragraph("<font color='#5c3d8f'><b>PURPLE</b></font> = Negative/pauci-immune", BODY_SM),
    Paragraph("<font color='#2c5f8a'><b>BLUE</b></font> = Complement-dominant", BODY_SM),
]]
key_t = Table(key_data, colWidths=[4.25*cm, 4.25*cm, 4.25*cm, 4.25*cm])
key_t.setStyle(TableStyle([("TOPPADDING",(0,0),(-1,-1),2),("BOTTOMPADDING",(0,0),(-1,-1),2)]))
story.append(key_t)
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 3: DISEASE-SPECIFIC DETAILED NOTES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 3: DISEASE-SPECIFIC DETAILED NOTES"))
story.append(Spacer(1, 0.3*cm))

# ── IgA Nephropathy ──────────────────────────────────────────────────────
story.append(Paragraph("1. IgA Nephropathy (Berger Disease)", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "HALLMARK: Dominant mesangial IgA deposits",
    [Paragraph("Diagnosis requires <b>dominant or codominant IgA</b> on IF - this is the DEFINING criterion.", BOX_TXT),
     Paragraph("No other primary glomerular disease shows dominant IgA staining.", BOX_TXT)],
    bg=LIGHT_GREEN, border=GREEN
))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("IF Findings:", H3))
items = [
    ("IgA", "2-3+ (dominant/codominant)", "Mesangium (±paramesangial)"),
    ("IgG", "0 to 1+ (minor)", "Mesangium"),
    ("IgM", "0 to 1+ (minor)", "Mesangium"),
    ("C3", "1-2+", "Mesangium"),
    ("C1q", "Absent or trace", ""),
    ("C4", "Absent or trace", "Classical pathway NOT activated"),
]
ifdata = [[Paragraph("Antibody", TBL_HDR), Paragraph("Intensity", TBL_HDR), Paragraph("Location / Note", TBL_HDR)]]
for ab, inten, loc in items:
    ifdata.append([Paragraph(ab, TBL_CELL_L), Paragraph(inten, TBL_CELL), Paragraph(loc, TBL_CELL_L)])
t_iga = Table(ifdata, colWidths=[3*cm, 5*cm, 9*cm])
t_iga.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),MID_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
    ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_iga)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("LM: Focal mesangial proliferative GN; mesangial widening", BODY_SM))
story.append(Paragraph("EM: Mesangial and paramesangial electron-dense deposits; no subendothelial or subepithelial deposits", BODY_SM))
story.append(Paragraph("Key point: Absence of subendothelial deposits distinguishes IgA nephropathy from lupus class III/IV. "
                       "Very large mesangial deposits on EM can suggest IgA nephropathy even without IF.", NOTE))
story.append(Spacer(1, 0.4*cm))

# ── Membranous Nephropathy ──────────────────────────────────────────────────
story.append(Paragraph("2. Membranous Nephropathy (MN)", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "HALLMARK: Granular subepithelial IgG + C3 in a 'string of pearls' pattern along capillary walls",
    [Paragraph("Most common cause of nephrotic syndrome in adults. PLA2R antibody positive in ~70% of primary MN.", BOX_TXT)],
    bg=LIGHT_GREEN, border=GREEN
))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("IF Findings:", H3))
story.append(Paragraph("IgG: 3-4+ granular, diffuse along capillary walls (subepithelial)", BODY))
story.append(Paragraph("C3: 2-3+ granular, same pattern as IgG", BODY))
story.append(Paragraph("IgA + IgM: Absent in primary MN; presence suggests secondary MN (lupus, HBV, drugs)", BODY))
story.append(Paragraph("C1q: Usually absent in primary; present in secondary (lupus)", BODY))
story.append(Paragraph("Light chains: Polyclonal kappa and lambda", BODY))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph("Stages of MN (Jones silver stain + IF):", H3))
stages = [
    ("Stage I", "Small, scattered subepithelial deposits; spikes not visible on LM; IF positive"),
    ("Stage II", "Spike formation on GBM (Jones silver); deposits between spikes; IF strongly positive"),
    ("Stage III", "Deposits enclosed within GBM ('dome' formation); thickened GBM; IF still positive"),
    ("Stage IV", "Sclerosis; deposits may become pale/negative; GBM irregularly thickened"),
]
for stg, desc in stages:
    story.append(Paragraph(f"<b>{stg}:</b> {desc}", BULLET))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Primary vs Secondary MN on IF:", H3))
pvsdata = [
    [Paragraph("Feature", TBL_HDR), Paragraph("Primary MN", TBL_HDR), Paragraph("Secondary MN", TBL_HDR)],
    [Paragraph("IgA, IgM", TBL_CELL_L), Paragraph("Absent", TBL_CELL), Paragraph("May be present", TBL_CELL)],
    [Paragraph("C1q", TBL_CELL_L), Paragraph("Absent", TBL_CELL), Paragraph("May be present (lupus)", TBL_CELL)],
    [Paragraph("Light chains", TBL_CELL_L), Paragraph("Polyclonal", TBL_CELL), Paragraph("Monotypic if MGRS", TBL_CELL)],
    [Paragraph("PLA2R IHC", TBL_CELL_L), Paragraph("Positive ~70%", TBL_CELL), Paragraph("Negative", TBL_CELL)],
]
t_pvs = Table(pvsdata, colWidths=[5*cm, 6*cm, 6*cm])
t_pvs.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),MID_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
    ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
]))
story.append(t_pvs)
story.append(Spacer(1, 0.4*cm))

# ── Lupus Nephritis ──────────────────────────────────────────────────────
story.append(Paragraph("3. Lupus Nephritis (LN)", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "HALLMARK: 'Full-House' pattern - IgG, IgA, IgM, C3, and C1q ALL positive",
    [Paragraph("This simultaneous positivity of all 5 markers is virtually pathognomonic of Lupus Nephritis. "
               "Classical pathway complement activation (C1q present) is the key distinguishing feature.", BOX_TXT),
     Paragraph("Tubuloreticular inclusions (TRI) on EM - 'interferon footprints' - are characteristic of lupus.", BOX_TXT)],
    bg=LIGHT_RED, border=RED
))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("ISN/RPS Classification of Lupus Nephritis - IF Correlation:", H3))
ln_class = [
    [Paragraph("Class", TBL_HDR), Paragraph("LM", TBL_HDR), Paragraph("IF Pattern", TBL_HDR), Paragraph("EM Deposits", TBL_HDR)],
    [Paragraph("Class I\nMinimal mesangial", TBL_CELL), Paragraph("Normal", TBL_CELL),
     Paragraph("Mesangial IgG (full-house pattern)", TBL_CELL), Paragraph("Mesangial", TBL_CELL)],
    [Paragraph("Class II\nMesangial proliferative", TBL_CELL), Paragraph("Mesangial hypercellularity", TBL_CELL),
     Paragraph("Mesangial IgG, IgA, IgM, C3, C1q", TBL_CELL), Paragraph("Mesangial", TBL_CELL)],
    [Paragraph("Class III\nFocal proliferative\n(<50% glomeruli)", TBL_CELL), Paragraph("Focal endocapillary proliferation, necrosis", TBL_CELL),
     Paragraph("Subendothelial + mesangial; full-house", TBL_CELL), Paragraph("Subendothelial + mesangial", TBL_CELL)],
    [Paragraph("Class IV\nDiffuse proliferative\n(>50% glomeruli)", TBL_CELL), Paragraph("Diffuse proliferation, wire-loop lesions", TBL_CELL),
     Paragraph("Subendothelial (dominant); full-house pattern; 'wire-loop' = massive subendothelial deposits", TBL_CELL), Paragraph("Subendothelial (massive)", TBL_CELL)],
    [Paragraph("Class V\nMembranous LN", TBL_CELL), Paragraph("Thickened capillary walls", TBL_CELL),
     Paragraph("Subepithelial granular IgG; full-house", TBL_CELL), Paragraph("Subepithelial", TBL_CELL)],
    [Paragraph("Class VI\nAdvanced sclerosing\n(>90% sclerosis)", TBL_CELL), Paragraph("Global sclerosis", TBL_CELL),
     Paragraph("Pale/negative (burnt out)", TBL_CELL), Paragraph("Non-specific", TBL_CELL)],
]
t_ln = Table(ln_class, colWidths=[3.2*cm, 3.5*cm, 5.5*cm, 4.8*cm])
t_ln.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),RED),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_RED, WHITE]),
    ("BOX",(0,0),(-1,-1),1,RED),("INNERGRID",(0,0),(-1,-1),0.5,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_ln)
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Wire-loop lesions = massive subendothelial deposits of IgG seen on LM (PAS/silver stain) corresponding to "
                        "intense granular subendothelial staining on IF - pathognomonic of Class IV LN.", NOTE))
story.append(PageBreak())

# ── Post-infectious GN ──────────────────────────────────────────────────
story.append(Paragraph("4. Post-infectious (Post-streptococcal) GN", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "HALLMARK: Coarse granular 'starry sky' IgG + C3 in GBM and mesangium; subepithelial 'humps' on EM",
    [Paragraph("Group A beta-hemolytic streptococcus (nephritogenic strains: types 1, 4, 12). "
               "Latent period: 1-4 weeks post-pharyngitis, 2-6 weeks post-skin infection.", BOX_TXT)],
    bg=LIGHT_GREEN, border=GREEN
))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Temporal sequence of IF findings:", H3))
story.append(Paragraph("Early: Subendothelial deposits (C3, IgG) - before 'humps' form", BULLET))
story.append(Paragraph("Classic: Coarse granular IgG + C3 in mesangium and GBM (capillary walls)", BULLET))
story.append(Paragraph("Late (healing): Deposits disappear; C3 persists longer than IgG", BULLET))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Complement profile: Low serum C3 (consumed by alternative pathway activation) with normal C4 - "
                        "distinguishes from lupus where both C3 and C4 are low.", BODY))
story.append(Spacer(1, 0.4*cm))

# ── RPGN / Crescentic GN ──────────────────────────────────────────────────
story.append(Paragraph("5. Rapidly Progressive (Crescentic) GN - RPGN", H2))
story.append(hr(ACCENT))
story.append(Paragraph("RPGN is classified into 3 types based on IF - this is the MOST IMPORTANT IF-based classification in nephropathology:", BODY))
story.append(Spacer(1, 0.2*cm))
rpgn_data = [
    [Paragraph("Type", TBL_HDR), Paragraph("IF Pattern", TBL_HDR), Paragraph("Pathogenesis", TBL_HDR),
     Paragraph("Disease Examples", TBL_HDR), Paragraph("Serology", TBL_HDR)],
    [Paragraph("Type I", TBL_CELL), Paragraph("LINEAR IgG + C3 along GBM", TBL_CELL),
     Paragraph("Anti-GBM antibody (antibody vs type IV collagen alpha-3 chain)", TBL_CELL),
     Paragraph("Goodpasture syndrome\n(lung + kidney)\nAnti-GBM GN (kidney only)", TBL_CELL),
     Paragraph("Anti-GBM Ab positive\nANCA negative", TBL_CELL)],
    [Paragraph("Type II", TBL_CELL), Paragraph("GRANULAR IgG + C3\n(immune complex)", TBL_CELL),
     Paragraph("Immune complex-mediated injury (various antigens)", TBL_CELL),
     Paragraph("Post-infectious GN\nLupus nephritis\nIgA nephropathy\nIgA vasculitis", TBL_CELL),
     Paragraph("Varies by cause\n(e.g. ANA, dsDNA)", TBL_CELL)],
    [Paragraph("Type III", TBL_CELL), Paragraph("NEGATIVE / PAUCI-IMMUNE\n(<2+ by IF)", TBL_CELL),
     Paragraph("ANCA-mediated neutrophil degranulation - no immune complex formation", TBL_CELL),
     Paragraph("GPA (Wegener)\nMPA\nEGPA (Churg-Strauss)", TBL_CELL),
     Paragraph("c-ANCA (PR3) or p-ANCA (MPO) positive", TBL_CELL)],
    [Paragraph("Type IV\n(Double-positive)", TBL_CELL), Paragraph("LINEAR + ANCA positive", TBL_CELL),
     Paragraph("Anti-GBM Ab + ANCA (both present)", TBL_CELL),
     Paragraph("Overlap syndrome", TBL_CELL),
     Paragraph("Both anti-GBM and ANCA positive", TBL_CELL)],
]
t_rpgn = Table(rpgn_data, colWidths=[1.8*cm, 3.5*cm, 4*cm, 4.2*cm, 3.5*cm])
t_rpgn.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),DARK_BLUE),
    ("BACKGROUND",(0,1),(-1,1),LIGHT_RED),
    ("BACKGROUND",(0,2),(-1,2),LIGHT_GREEN),
    ("BACKGROUND",(0,3),(-1,3),LIGHT_PURP),
    ("BACKGROUND",(0,4),(-1,4),LIGHT_BLUE),
    ("BOX",(0,0),(-1,-1),1,DARK_BLUE),("INNERGRID",(0,0),(-1,-1),0.5,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_rpgn)
story.append(Spacer(1, 0.3*cm))
story.append(info_box(
    "Memory Aid: IF = the KEY to RPGN classification",
    [Paragraph("Type I = LINEAR (1 straight line = linear)", BOX_TXT),
     Paragraph("Type II = GRANULAR (2 = immune complex clusters)", BOX_TXT),
     Paragraph("Type III = NEGATIVE / PAUCI-IMMUNE (3 = nothing to see)", BOX_TXT)],
    bg=LIGHT_BLUE, border=MID_BLUE
))
story.append(Spacer(1, 0.4*cm))

# ── MPGN and C3 Glomerulopathy ──────────────────────────────────────────────
story.append(Paragraph("6. MPGN / C3 Glomerulopathy", H2))
story.append(hr(ACCENT))
story.append(Paragraph("The MPGN pattern on LM is classified by IF into immunoglobulin-mediated vs complement-mediated:", BODY))
story.append(Spacer(1, 0.2*cm))
mpgn_data = [
    [Paragraph("Type", TBL_HDR), Paragraph("IF Findings", TBL_HDR), Paragraph("EM", TBL_HDR), Paragraph("Pathogenesis", TBL_HDR)],
    [Paragraph("MPGN Type I\n(Immune complex)", TBL_CELL_L), Paragraph("IgG + C3 + C1q + C4\n(classical pathway)", TBL_CELL_L),
     Paragraph("Subendothelial deposits; double contour of GBM", TBL_CELL_L),
     Paragraph("Chronic infections (HBV, HCV, endocarditis)\nAutoimmune diseases, MGRS", TBL_CELL_L)],
    [Paragraph("MPGN Type III\n(Mixed deposits)", TBL_CELL_L), Paragraph("IgG + C3; subendothelial AND subepithelial", TBL_CELL_L),
     Paragraph("Subendothelial + subepithelial deposits", TBL_CELL_L),
     Paragraph("Immune complex-mediated", TBL_CELL_L)],
    [Paragraph("Dense Deposit Disease\n(C3 GN Type II)", TBL_CELL_L), Paragraph("C3 only (3+ dominant)\nNo IgG/IgA/IgM\nNo C1q/C4", TBL_CELL_L),
     Paragraph("Dense intramembranous deposits (sausage-shaped) - PATHOGNOMONIC", TBL_CELL_L),
     Paragraph("Alternative complement pathway dysregulation\n(C3 nephritic factor, Factor H deficiency)", TBL_CELL_L)],
    [Paragraph("C3 Glomerulonephritis\n(C3 GN)", TBL_CELL_L), Paragraph("C3 dominant (3+)\nTrace or absent Ig\nNo C1q/C4", TBL_CELL_L),
     Paragraph("Mesangial / subendothelial deposits (less dense than DDD)", TBL_CELL_L),
     Paragraph("Alternative pathway dysregulation\n(autoantibodies to Factor B/C3 convertase)", TBL_CELL_L)],
]
t_mpgn = Table(mpgn_data, colWidths=[3.5*cm, 4*cm, 5*cm, 4.5*cm])
t_mpgn.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),PURPLE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_PURP, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,PURPLE),("INNERGRID",(0,0),(-1,-1),0.5,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_mpgn)
story.append(Spacer(1, 0.3*cm))
story.append(info_box(
    "Key Rule: IF guides MPGN classification",
    [Paragraph("Immunoglobulin-mediated (IgG/IgA/IgM present) → search for chronic infection, autoimmune disease, or monoclonal protein", BOX_TXT),
     Paragraph("Complement-mediated only (C3 dominant, no Ig, no C1q/C4) → C3 glomerulopathy → work up for complement dysregulation", BOX_TXT),
     Paragraph("No Ig AND no complement → consider thrombotic microangiopathy (TMA) or vascular disease", BOX_TXT)],
    bg=LIGHT_PURP, border=PURPLE
))
story.append(PageBreak())

# ── Minimal Change & FSGS ──────────────────────────────────────────────────
story.append(Paragraph("7. Minimal Change Disease (MCD) and FSGS", H2))
story.append(hr(ACCENT))
story.append(two_col(
    [Paragraph("Minimal Change Disease", H3),
     info_box("IF: NEGATIVE (characteristic)",
              [Paragraph("No IgG, IgA, IgM, C3 deposits on IF", BOX_TXT),
               Paragraph("Occasional fine granular IgM (non-specific trapping)", BOX_TXT),
               Paragraph("Recent: Fine granular podocyte IgG (anti-nephrin antibodies) may be seen with special techniques", BOX_TXT),
               Paragraph("EM: Diffuse foot process effacement - NO immune deposits", BOX_TXT)],
              bg=LIGHT_PURP, border=PURPLE),
     Spacer(1, 0.2*cm),
     Paragraph("Negative IF on a kidney biopsy with nephrotic syndrome = think MCD first!", KEY),
    ],
    [Paragraph("FSGS", H3),
     info_box("IF: Non-specific (IgM + C3)",
              [Paragraph("IgM 2+ and C3 2+ in sclerotic segments (non-specific trapping in scar)", BOX_TXT),
               Paragraph("In some cases: fine granular podocyte IgG (anti-nephrin) similar to MCD", BOX_TXT),
               Paragraph("No immune complex deposits in non-sclerotic areas", BOX_TXT),
               Paragraph("EM: Focal foot process effacement + epithelial denudation", BOX_TXT)],
              bg=LIGHT_BLUE, border=MID_BLUE),
     Spacer(1, 0.2*cm),
     Paragraph("FSGS is a podocytopathy - scars trap Ig non-specifically. The IF is NOT diagnostic but helps exclude GN.", NOTE),
    ],
))
story.append(Spacer(1, 0.4*cm))

# ── Goodpasture / anti-GBM ──────────────────────────────────────────────────
story.append(Paragraph("8. Anti-GBM Disease / Goodpasture Syndrome", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "HALLMARK: Smooth linear IgG along the entire GBM",
    [Paragraph("Antibody targets the alpha-3 chain of type IV collagen in GBM. The linear pattern reflects "
               "uniform binding along the entire length of the GBM - unlike the focal deposits in immune complex GN.", BOX_TXT),
     Paragraph("Goodpasture syndrome = anti-GBM GN + pulmonary hemorrhage. Anti-GBM Ab also stains "
               "alveolar basement membranes linearly on lung biopsy.", BOX_TXT)],
    bg=LIGHT_RED, border=RED
))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("IF Findings: IgG (3-4+, linear) along GBM; C3 may be linear or segmental; NO mesangial deposits", BODY))
story.append(Paragraph("Serology: Anti-GBM antibodies in serum (ELISA); ANCA negative (unless Type IV RPGN overlap)", BODY))
story.append(Spacer(1, 0.4*cm))

# ── Diabetic Nephropathy ──────────────────────────────────────────────────
story.append(Paragraph("9. Diabetic Nephropathy", H2))
story.append(hr(ACCENT))
story.append(info_box(
    "IF: 'Linear' IgG and albumin along GBM and TBM - but NOT due to immune complexes",
    [Paragraph("In diabetic nephropathy, IgG stains linearly along GBM and TBM due to NON-SPECIFIC "
               "insudation of plasma proteins into the thickened basement membranes (NOT antibody-mediated). "
               "This is a pitfall - must distinguish from anti-GBM disease!", BOX_TXT),
     Paragraph("True diagnostic IF: Usually NEGATIVE for specific immune deposits. The linear IgG is non-specific.", BOX_TXT),
     Paragraph("Albumin is also linear (confirms non-specific protein trapping, not anti-GBM).", BOX_TXT)],
    bg=LIGHT_BLUE, border=MID_BLUE
))
story.append(Spacer(1, 0.4*cm))

# ── Amyloidosis ──────────────────────────────────────────────────────
story.append(Paragraph("10. Renal Amyloidosis", H2))
story.append(hr(ACCENT))
story.append(Paragraph("IF: Positive for the specific amyloid type (lambda or kappa light chains in AL amyloid; "
                        "SAA in AA amyloid). Congo red stain shows apple-green birefringence under polarized light.", BODY))
story.append(Paragraph("EM: Non-branching fibrils, 8-12 nm diameter, randomly arranged", BODY))
story.append(Spacer(1, 0.4*cm))

# ── Hereditary Nephritis ──────────────────────────────────────────────────
story.append(Paragraph("11. Alport Syndrome (Hereditary Nephritis)", H2))
story.append(hr(ACCENT))
story.append(Paragraph("IF: Typically NEGATIVE for IgG, IgA, IgM, C3 in the glomerulus", BODY))
story.append(Paragraph("IHC for alpha-3, alpha-4, alpha-5 chains of type IV collagen: ABSENT (negative IHC) on GBM - "
                        "this is the KEY diagnostic finding in X-linked Alport syndrome", BODY))
story.append(Paragraph("EM: Irregular thickening, thinning, and splitting of GBM with lamellation - the 'basket-weave' appearance", BODY))
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 4: IF IN SECONDARY GLOMERULAR DISEASES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 4: IF IN SECONDARY GLOMERULAR DISEASES"))
story.append(Spacer(1, 0.3*cm))

sec_data = [
    [Paragraph("Condition", TBL_HDR), Paragraph("IF Findings", TBL_HDR), Paragraph("Key Notes", TBL_HDR)],
    [Paragraph("Lupus Nephritis", TBL_CELL_L),
     Paragraph("Full-house: IgG, IgA, IgM, C3, C1q all positive", TBL_CELL_L),
     Paragraph("Wire-loop lesions in Class IV = massive subendothelial IgG deposits", TBL_CELL_L)],
    [Paragraph("Diabetic Nephropathy", TBL_CELL_L),
     Paragraph("Linear IgG + albumin (non-specific)", TBL_CELL_L),
     Paragraph("NOT immune-mediated; pitfall vs anti-GBM", TBL_CELL_L)],
    [Paragraph("Henoch-Schonlein Purpura\n(IgA Vasculitis)", TBL_CELL_L),
     Paragraph("IgA dominant in mesangium\n(identical to IgA nephropathy)", TBL_CELL_L),
     Paragraph("Clinical context differentiates (purpura, arthritis, abdominal pain in children)", TBL_CELL_L)],
    [Paragraph("ANCA-associated GN", TBL_CELL_L),
     Paragraph("Negative / Pauci-immune", TBL_CELL_L),
     Paragraph("Serum ANCA positive; fibrin in crescents (fibrinogen+)", TBL_CELL_L)],
    [Paragraph("HIV Nephropathy (HIVAN)", TBL_CELL_L),
     Paragraph("Non-specific IgM + C3\n(FSGS variant)", TBL_CELL_L),
     Paragraph("Collapsing FSGS; EM shows TRI (tubuloreticular inclusions)", TBL_CELL_L)],
    [Paragraph("Fibrillary GN", TBL_CELL_L),
     Paragraph("IgG + C3 + kappa + lambda\n(polyclonal)", TBL_CELL_L),
     Paragraph("EM: non-branching fibrils ~20 nm; DNAJB9 positive on IHC", TBL_CELL_L)],
    [Paragraph("Monoclonal GN (MGRS)", TBL_CELL_L),
     Paragraph("Monotypic IgG or IgM\n+ single light chain (kappa OR lambda)", TBL_CELL_L),
     Paragraph("Light chain restriction = monoclonal; requires paraffin IF for accuracy", TBL_CELL_L)],
    [Paragraph("Renal Amyloidosis (AL)", TBL_CELL_L),
     Paragraph("Kappa or Lambda positive\n(monotypic)", TBL_CELL_L),
     Paragraph("Congo red +; EM shows 8-12 nm fibrils", TBL_CELL_L)],
    [Paragraph("Hypertensive Nephrosclerosis", TBL_CELL_L),
     Paragraph("Negative or non-specific", TBL_CELL_L),
     Paragraph("Vascular disease; no immune deposits", TBL_CELL_L)],
    [Paragraph("TMA (Thrombotic Microangiopathy)", TBL_CELL_L),
     Paragraph("Negative (no immune deposits)\nFibrinogen+ in capillaries", TBL_CELL_L),
     Paragraph("TTP/HUS/scleroderma; IF helps exclude immune GN", TBL_CELL_L)],
]
t_sec = Table(sec_data, colWidths=[4*cm, 5.5*cm, 7.5*cm])
t_sec.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),MID_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_sec)
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 5: MESANGIAL PROLIFERATIVE GN - IF PATTERNS TABLE
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 5: IF PATTERNS IN MESANGIAL PROLIFERATIVE GN"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Source: Comprehensive Clinical Nephrology 7th Edition (Table 29.1)", NOTE))
story.append(Spacer(1, 0.2*cm))

mes_data = [
    [Paragraph("IF Pattern", TBL_HDR), Paragraph("Associated Disorder", TBL_HDR)],
    [Paragraph("Predominantly mesangial IgA deposits (± IgM, C3)", TBL_CELL_L), Paragraph("IgA nephropathy", TBL_CELL_L)],
    [Paragraph("Predominantly mesangial IgG deposits (± IgM, C1q, C3)", TBL_CELL_L), Paragraph("Often associated with lupus nephritis", TBL_CELL_L)],
    [Paragraph("Predominantly mesangial IgM deposits (± C1q, C3)", TBL_CELL_L), Paragraph("IgM nephropathy", TBL_CELL_L)],
    [Paragraph("C1q dominant mesangial deposits", TBL_CELL_L), Paragraph("C1q nephropathy", TBL_CELL_L)],
    [Paragraph("C3 dominant (no Ig)", TBL_CELL_L), Paragraph("C3 glomerulopathy (mild form)", TBL_CELL_L)],
    [Paragraph("No deposits (negative IF)", TBL_CELL_L), Paragraph("Idiopathic mesangial proliferative GN; look for other causes", TBL_CELL_L)],
]
t_mes = Table(mes_data, colWidths=[9*cm, 8*cm])
t_mes.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),MID_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_BLUE, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.5,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),6),("BOTTOMPADDING",(0,0),(-1,-1),6),
    ("LEFTPADDING",(0,0),(-1,-1),6),("RIGHTPADDING",(0,0),(-1,-1),6),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_mes)
story.append(Spacer(1, 0.5*cm))

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 6: CLINICAL CORRELATIONS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 6: CLINICAL CORRELATIONS & EXAM HIGH-YIELD POINTS"))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Complement Pathway Clues on IF", H2))
comp_data = [
    [Paragraph("C1q Present?", TBL_HDR), Paragraph("C4 Present?", TBL_HDR), Paragraph("C3 Present?", TBL_HDR),
     Paragraph("Pathway Activated", TBL_HDR), Paragraph("Key Diagnosis", TBL_HDR)],
    [Paragraph("YES", TBL_CELL), Paragraph("YES", TBL_CELL), Paragraph("YES", TBL_CELL),
     Paragraph("Classical pathway", TBL_CELL), Paragraph("Lupus nephritis; Post-infectious GN", TBL_CELL)],
    [Paragraph("NO", TBL_CELL), Paragraph("NO", TBL_CELL), Paragraph("YES (dominant)", TBL_CELL),
     Paragraph("Alternative pathway", TBL_CELL), Paragraph("C3 glomerulopathy; Dense deposit disease", TBL_CELL)],
    [Paragraph("NO", TBL_CELL), Paragraph("NO", TBL_CELL), Paragraph("NO", TBL_CELL),
     Paragraph("None", TBL_CELL), Paragraph("ANCA GN (pauci-immune); TMA; Diabetic nephropathy; MCD; Alport", TBL_CELL)],
    [Paragraph("YES", TBL_CELL), Paragraph("NO", TBL_CELL), Paragraph("YES", TBL_CELL),
     Paragraph("Lectin pathway", TBL_CELL), Paragraph("Some IgA nephropathy; Infection-related", TBL_CELL)],
]
t_comp = Table(comp_data, colWidths=[2.5*cm, 2.5*cm, 2.5*cm, 4*cm, 5.5*cm])
t_comp.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_comp)
story.append(Spacer(1, 0.4*cm))

story.append(Paragraph("Serum Complement Levels - IF Correlation", H2))
serum_data = [
    [Paragraph("Condition", TBL_HDR), Paragraph("Serum C3", TBL_HDR), Paragraph("Serum C4", TBL_HDR), Paragraph("IF Complement", TBL_HDR)],
    [Paragraph("Post-infectious GN", TBL_CELL_L), Paragraph("Low", TBL_CELL), Paragraph("Normal", TBL_CELL),
     Paragraph("C3+ in GBM (alternative + classical late)", TBL_CELL_L)],
    [Paragraph("Lupus nephritis", TBL_CELL_L), Paragraph("Low", TBL_CELL), Paragraph("Low", TBL_CELL),
     Paragraph("C3+, C4+, C1q+ (full classical pathway)", TBL_CELL_L)],
    [Paragraph("Dense deposit disease", TBL_CELL_L), Paragraph("Very low", TBL_CELL), Paragraph("Normal", TBL_CELL),
     Paragraph("C3 only; C3 nephritic factor present", TBL_CELL_L)],
    [Paragraph("Membranous nephropathy", TBL_CELL_L), Paragraph("Normal", TBL_CELL), Paragraph("Normal", TBL_CELL),
     Paragraph("C3+, IgG+ subepithelial", TBL_CELL_L)],
    [Paragraph("MPGN Type I", TBL_CELL_L), Paragraph("Low", TBL_CELL), Paragraph("Normal/Low", TBL_CELL),
     Paragraph("C3+, IgG+, C1q+, C4+", TBL_CELL_L)],
    [Paragraph("IgA nephropathy", TBL_CELL_L), Paragraph("Normal", TBL_CELL), Paragraph("Normal", TBL_CELL),
     Paragraph("IgA dominant; C3 mesangial", TBL_CELL_L)],
]
t_serum = Table(serum_data, colWidths=[4.5*cm, 2.5*cm, 2.5*cm, 7.5*cm])
t_serum.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_serum)
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 7: EXAM-FOCUSED QUICK REVISION
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 7: EXAM QUICK REVISION - MNEMONICS & HIGH-YIELD FACTS"))
story.append(Spacer(1, 0.3*cm))

story.append(Paragraph("Top 10 Exam-Tested IF Facts", H2))
facts = [
    ("1", "LINEAR IgG = Anti-GBM disease (Goodpasture). No other common GN produces linear IF."),
    ("2", "NEGATIVE IF (pauci-immune) + crescents = ANCA-associated GN (Type III RPGN)."),
    ("3", "DOMINANT IgA in mesangium = IgA nephropathy. This is the DIAGNOSTIC criterion."),
    ("4", "FULL-HOUSE (IgG+IgA+IgM+C3+C1q) = Lupus nephritis. Virtually pathognomonic."),
    ("5", "NEGATIVE IF + nephrotic syndrome = Minimal Change Disease (or FSGS with negative areas)."),
    ("6", "C3 ONLY (no Ig, no C1q, no C4) = C3 glomerulopathy (Dense deposit disease or C3 GN)."),
    ("7", "Granular SUBEPITHELIAL IgG + C3 = Membranous nephropathy."),
    ("8", "Wire-loop lesions on LM = massive SUBENDOTHELIAL IgG deposits on IF = Lupus Class IV."),
    ("9", "Linear IgG + ALBUMIN along GBM in diabetic nephropathy = NON-SPECIFIC (NOT anti-GBM)."),
    ("10", "Alport syndrome: IF negative but IHC for type IV collagen alpha chains is absent (diagnostic)."),
]
for num, fact in facts:
    story.append(Paragraph(f"<b>{num}.</b> {fact}", BULLET))
story.append(Spacer(1, 0.4*cm))

story.append(Paragraph("Mnemonics", H2))
story.append(info_box(
    "FULL HOUSE = Lupus Nephritis",
    [Paragraph("Like a poker hand - you have EVERYTHING:", BOX_TXT),
     Paragraph("IgG + IgA + IgM + C3 + C1q = 5 cards = FULL HOUSE", BOX_BOLD)],
    bg=LIGHT_RED, border=RED
))
story.append(Spacer(1, 0.2*cm))
story.append(info_box(
    "RPGN IF Classification: 1-2-3",
    [Paragraph("Type 1 = LINEAR (one line)", BOX_TXT),
     Paragraph("Type 2 = GRANULAR (two = complex = granular)", BOX_TXT),
     Paragraph("Type 3 = NEGATIVE (three = pauci = ANCA = nothing to see)", BOX_TXT)],
    bg=LIGHT_GREEN, border=GREEN
))
story.append(Spacer(1, 0.2*cm))
story.append(info_box(
    "The IF 'Triad of Renal Biopsy'",
    [Paragraph("LM: Identifies the PATTERN of injury (proliferative/membranous/sclerosing)", BOX_TXT),
     Paragraph("IF: Identifies the TYPE and MECHANISM of injury (immune vs non-immune; type of deposits)", BOX_TXT),
     Paragraph("EM: Identifies the LOCATION of deposits (sub-epithelial/sub-endothelial/mesangial/intramembranous)", BOX_TXT)],
    bg=LIGHT_BLUE, border=MID_BLUE
))
story.append(Spacer(1, 0.4*cm))

# ── One-liner Quick Reference ──────────────────────────────────────────────
story.append(Paragraph("One-Line IF Summary - Quick Reference", H2))
oneliner_data = [
    [Paragraph("Disease", TBL_HDR), Paragraph("One-line IF Summary", TBL_HDR)],
    [Paragraph("Post-infectious GN", TBL_CELL_L), Paragraph("Coarse granular IgG+C3 in GBM/mesangium; subepithelial humps on EM", TBL_CELL_L)],
    [Paragraph("Membranous nephropathy", TBL_CELL_L), Paragraph("Fine granular IgG+C3 subepithelial, capillary walls diffuse", TBL_CELL_L)],
    [Paragraph("Minimal change disease", TBL_CELL_L), Paragraph("IF NEGATIVE (no deposits)", TBL_CELL_L)],
    [Paragraph("FSGS", TBL_CELL_L), Paragraph("IgM+C3 segmental (non-specific trapping)", TBL_CELL_L)],
    [Paragraph("IgA nephropathy", TBL_CELL_L), Paragraph("Dominant IgA mesangial (±IgG, IgM, C3)", TBL_CELL_L)],
    [Paragraph("MPGN Type I", TBL_CELL_L), Paragraph("IgG+C3+C1q+C4 subendothelial+mesangial", TBL_CELL_L)],
    [Paragraph("Dense deposit disease", TBL_CELL_L), Paragraph("C3 ONLY (intramembranous ribbon deposits on EM)", TBL_CELL_L)],
    [Paragraph("Lupus nephritis", TBL_CELL_L), Paragraph("Full-house: IgG+IgA+IgM+C3+C1q", TBL_CELL_L)],
    [Paragraph("Anti-GBM (Goodpasture)", TBL_CELL_L), Paragraph("LINEAR IgG+C3 along entire GBM", TBL_CELL_L)],
    [Paragraph("ANCA-associated GN", TBL_CELL_L), Paragraph("NEGATIVE (pauci-immune)", TBL_CELL_L)],
    [Paragraph("Diabetic nephropathy", TBL_CELL_L), Paragraph("Linear IgG+albumin (non-specific, NOT immune)", TBL_CELL_L)],
    [Paragraph("Alport syndrome", TBL_CELL_L), Paragraph("IF negative; IHC type IV collagen alpha chains absent", TBL_CELL_L)],
    [Paragraph("Amyloidosis", TBL_CELL_L), Paragraph("Lambda or kappa (monotypic in AL); Congo red apple-green", TBL_CELL_L)],
    [Paragraph("IgA Vasculitis (HSP)", TBL_CELL_L), Paragraph("Same as IgA nephropathy - dominant mesangial IgA", TBL_CELL_L)],
]
t_one = Table(oneliner_data, colWidths=[5*cm, 12*cm])
t_one.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),DARK_BLUE),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHT_GREY, WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,MID_BLUE),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_one)
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 8: PAST EXAM QUESTIONS
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("SECTION 8: PAST EXAM QUESTIONS (AP / TELANGANA MD PATHOLOGY)", bg=ACCENT, fg=DARK_BLUE))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Questions from Postgraduate Manual of Pathology, 9th Ed. 2025 (Dr. Shiva M.D.)", NOTE))
story.append(Spacer(1, 0.2*cm))

pq_data = [
    [Paragraph("Exam / Year", TBL_HDR), Paragraph("Question", TBL_HDR)],
    [Paragraph("May 2025", TBL_CELL), Paragraph("Role of immunofluorescence in renal pathology", TBL_CELL_L)],
    [Paragraph("Int. Exam: March 2024", TBL_CELL), Paragraph("Role of immunofluorescence in understanding glomerular diseases", TBL_CELL_L)],
    [Paragraph("June 2023", TBL_CELL), Paragraph("Role of immunofluorescence in renal biopsy", TBL_CELL_L)],
    [Paragraph("July/Aug 2021", TBL_CELL), Paragraph("Discuss the role of immunofluorescence and electron microscopy in the diagnosis of glomerular diseases of kidney", TBL_CELL_L)],
    [Paragraph("July/Aug 2021", TBL_CELL), Paragraph("Discuss briefly the role of immunofluorescence in glomerular pathology", TBL_CELL_L)],
    [Paragraph("June 2020", TBL_CELL), Paragraph("Discuss role of immunofluorescence in renal diseases", TBL_CELL_L)],
    [Paragraph("May 2025 / Dec. 2023", TBL_CELL), Paragraph("Role of immunofluorescence in glomerular lesions of kidney (Recent Advances paper)", TBL_CELL_L)],
    [Paragraph("Dec. 2022", TBL_CELL), Paragraph("Discuss the morphology of lupus nephritis (IF correlation expected)", TBL_CELL_L)],
    [Paragraph("Int. Exam: Dec. 2021", TBL_CELL), Paragraph("Describe the mechanisms in progression of glomerular diseases", TBL_CELL_L)],
    [Paragraph("Oct. 2019", TBL_CELL), Paragraph("Describe the histopathology, ultrastructural features and IF patterns in glomerular diseases presenting as nephritic syndrome", TBL_CELL_L)],
    [Paragraph("Int. Exam: Dec. 2016", TBL_CELL), Paragraph("Role of immunofluorescence in understanding glomerular diseases", TBL_CELL_L)],
    [Paragraph("Int. Exam: Dec. 2012", TBL_CELL), Paragraph("Light chain immunofluorescence in various nephropathies", TBL_CELL_L)],
    [Paragraph("April 1996", TBL_CELL), Paragraph("Discuss the role of immunofluorescence in the understanding of glomerular diseases", TBL_CELL_L)],
]
t_pq = Table(pq_data, colWidths=[4.5*cm, 12.5*cm])
t_pq.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0),ACCENT),
    ("ROWBACKGROUNDS",(0,1),(-1,-1),[colors.HexColor("#fff8ee"), WHITE]),
    ("BOX",(0,0),(-1,-1),0.8,ACCENT),("INNERGRID",(0,0),(-1,-1),0.4,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),5),("BOTTOMPADDING",(0,0),(-1,-1),5),
    ("LEFTPADDING",(0,0),(-1,-1),5),("RIGHTPADDING",(0,0),(-1,-1),5),
    ("VALIGN",(0,0),(-1,-1),"TOP"),
]))
story.append(t_pq)
story.append(Spacer(1, 0.4*cm))
story.append(info_box(
    "Exam Tip: How to Structure Your IF Answer",
    [Paragraph("1. INTRODUCTION: Define IF; explain why it is used (identifies deposits, mechanism of injury)", BOX_TXT),
     Paragraph("2. TECHNICAL ASPECTS: Direct vs indirect IF; tissue requirements (snap-frozen); standard panel (IgG, IgA, IgM, C3, C1q, kappa, lambda, fibrinogen)", BOX_TXT),
     Paragraph("3. PATTERNS: Linear / Granular / Negative - with clinical meaning", BOX_TXT),
     Paragraph("4. LOCATION: Subepithelial / Subendothelial / Mesangial / Intramembranous", BOX_TXT),
     Paragraph("5. DISEASE-WISE TABLE: List each disease with its specific IF pattern", BOX_TXT),
     Paragraph("6. CONCLUSION: IF as cornerstone of the LM + IF + EM diagnostic triad", BOX_TXT)],
    bg=colors.HexColor("#fff8ee"), border=ACCENT
))
story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════════════════
# SECTION 9: REFERENCES
# ═══════════════════════════════════════════════════════════════════════════
story.append(section_banner("REFERENCES & SOURCES", bg=MID_GREY, fg=DARK_BLUE))
story.append(Spacer(1, 0.3*cm))
refs = [
    "Robbins, Cotran & Kumar Pathologic Basis of Disease, 10th Edition - Chapter 20: The Kidney",
    "Comprehensive Clinical Nephrology, 7th Edition - Chapters 21-31",
    "National Kidney Foundation Primer on Kidney Diseases, 8th Edition - Chapter 16-22",
    "Brenner and Rector's The Kidney, 11th Edition - Chapter 31",
    "Postgraduate Manual of Pathology, 9th Edition (2025) - Dr. Shiva M.D. [AP/Telangana Exam Bank]",
    "Washington Manual of Medical Therapeutics - Chapter 24: Thyroid and Renal",
    "Quick Compendium of Clinical Pathology, 5th Edition",
]
for r in refs:
    story.append(Paragraph(f"\u2022 {r}", BODY_SM))
story.append(Spacer(1, 0.6*cm))

# footer note
footer = Table([[Paragraph(
    "This study guide is compiled for educational purposes for MD Pathology postgraduate exam preparation. "
    "Content sourced from standard medical textbooks. Always refer to original textbooks for complete information.",
    NOTE)]], colWidths=[W])
footer.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1),LIGHT_GREY),
    ("BOX",(0,0),(-1,-1),0.5,MID_GREY),
    ("TOPPADDING",(0,0),(-1,-1),8),("BOTTOMPADDING",(0,0),(-1,-1),8),
    ("LEFTPADDING",(0,0),(-1,-1),10),("RIGHTPADDING",(0,0),(-1,-1),10),
]))
story.append(footer)

# ─── Build ────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/renal-if-study-guide && python3 create_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/renal-if-study-guide/

Your study guide PDF is ready:

Immunofluorescence Renal Diseases Study Guide

PDF Document · PDF


What's Inside (9 Sections, ~12 pages)

SectionContent
1 - PrinciplesTypes of IF (direct/indirect/paraffin), standard antibody panel, the 3 core patterns (linear/granular/negative), deposit location terminology
2 - Master TableComplete IF pattern table for all primary GN - color-coded by pattern type
3 - Disease-Specific NotesDetailed breakdowns for IgA nephropathy, Membranous nephropathy, Lupus nephritis (ISN/RPS class I-VI), Post-infectious GN, RPGN (types I-IV), MPGN/C3G, MCD, FSGS, Anti-GBM, Diabetic nephropathy, Amyloidosis, Alport
4 - Secondary GNIF in lupus, HSP, ANCA-GN, HIVAN, Fibrillary GN, MGRS, Amyloid, TMA
5 - Mesangial GNIF pattern table for mesangial proliferative GN classification (from Comprehensive Clinical Nephrology)
6 - Clinical CorrelationsComplement pathway IF clues; serum C3/C4 + IF correlation table
7 - Quick RevisionTop 10 exam facts, mnemonics (Full-House, RPGN 1-2-3), one-line IF summary for 14 diseases
8 - Past Exam QuestionsAll IF questions from AP/Telangana MD Pathology exams (1996-2025), answer structure guide
9 - ReferencesRobbins, Comprehensive Nephrology, NKF Primer, Brenner's Kidney, Dr. Shiva's Manual
Sources: Robbins Cotran Kumar (10th ed), Comprehensive Clinical Nephrology (7th ed), NKF Primer (8th ed), Brenner and Rector's Kidney, Postgraduate Manual of Pathology 9th ed. 2025 (your uploaded file).
This is a shared conversation. Sign in to Orris to start your own chat.