017 Define cirrhosis, classify cirrhosis. Describe aetiopathogenesis, 20 Novem 2 PIMS morphology, clinical findings and complications of Alcoholic ber cirrhosis. L.Q 2017 Describe aetiopathology of cirrhosis of liver. 20 March 2 MS UNIVERS L.Q 2
"Cirrhosis refers to the diffuse transformation of the liver into regenerative parenchymal nodules surrounded by fibrous bands."
- Robbins & Kumar Basic Pathology
| Type | Nodule Size | Common Causes |
|---|---|---|
| Micronodular (Laennec's cirrhosis) | Nodules <3 mm, uniform size | Alcohol, biliary obstruction, hemochromatosis |
| Macronodular (post-necrotic) | Nodules >3 mm, variable size | Viral hepatitis (HBV, HCV), autoimmune |
| Mixed | Both micro- and macronodules | Many causes; micronodular may evolve into macronodular |
| Category | Examples |
|---|---|
| Alcohol-associated | Chronic alcohol use disorder |
| Viral | Chronic HBV, HCV infection |
| Metabolic | MASLD (formerly NAFLD), Wilson's disease, haemochromatosis, Alpha-1 antitrypsin deficiency |
| Biliary | Primary biliary cholangitis, primary sclerosing cholangitis, secondary biliary cirrhosis |
| Autoimmune | Autoimmune hepatitis |
| Vascular | Budd-Chiari syndrome, cardiac cirrhosis (right heart failure) |
| Cryptogenic | No identifiable cause (~10-15% of cases) |
| Factor | Mechanism |
|---|---|
| Amount/duration | Dose-dependent hepatotoxicity |
| Sex (female) | Lower threshold; estrogen increases gut permeability to endotoxins → Kupffer cell TLR4 activation |
| Genetics | PNPLA3, MBOAT7, TM6SF2 polymorphisms; ALDH2 variants (common in Asians) |
| Obesity/MASLD | Synergistic hepatotoxicity |
| Viral hepatitis (HBV/HCV) | Additive liver injury |
| Malnutrition | Impaired hepatic repair |
| Smoking | Independent risk factor |
| Gut microbiome dysbiosis | Increased intestinal permeability → endotoxaemia |
Ethanol → (ADH1) → Acetaldehyde → (ALDH) → Acetate
Ethanol → (CYP2E1, induced by chronic drinking) → Acetaldehyde + ROS

| Feature | Description |
|---|---|
| Ballooned hepatocytes | Swollen hepatocytes with cleared cytoplasm; cytoskeletal damage |
| Mallory-Denk bodies (Mallory hyaline) | Intracytoplasmic eosinophilic inclusions = tangled skeins of ubiquitinated intermediate filaments (keratins 8 and 18) |
| Neutrophilic inflammation | Neutrophils surround ballooned hepatocytes ("satellitosis"); more prominent than in MASLD |
| Lobular lymphocytic infiltrates | Also portal lymphocytic infiltrates |
| Necrosis/apoptosis | Usually spotty; can be confluent in severe cases |
| Pericellular/perisinusoidal fibrosis | "Chicken wire" fibrosis in zone 3; most characteristic early fibrotic pattern |

Regression: With prolonged abstinence, fibrous septa become thin and incomplete. Most scars can regress (Fig. 14.6B from Robbins Basic Pathology), but complete regression of cirrhosis is rare.
| Test | Finding |
|---|---|
| AST/ALT ratio | >2:1 (rarely >300 IU/L) - characteristic of ALD |
| AST, ALT | Elevated (AST > ALT) |
| GGT | Elevated (sensitive marker) |
| Bilirubin | Elevated |
| Albumin | Decreased |
| PT/INR | Prolonged |
| Platelets | Decreased (hypersplenism) |
| CBC | Anaemia (multifactorial) |
| Serum bilirubin >3 mg/dL | Suggests hepatitis component |

Discuss the pathology of regenerative and neoplastic helatocellular nodules
Cirrhotic/Regenerative Nodule
↓
Large Cell Change
Small Cell Change
↓
Low-Grade Dysplastic Nodule
↓
High-Grade Dysplastic Nodule (+ "nodule-in-nodule")
↓
Early / Well-differentiated HCC
↓
Overt / Advanced HCC

| Subtype | Mutation | Features |
|---|---|---|
| HNF1α-inactivated | HNF1α loss | Marked steatosis; LFABP absent on IHC; low malignant risk |
| β-catenin-activated | CTNNB1 gain-of-function | High risk of malignant transformation to HCC; nuclear β-catenin on IHC |
| Inflammatory | IL6ST/STAT3 pathway | Marked sinusoidal dilation; serum amyloid A/CRP positive on IHC |
| Unclassified | Unknown | ~10% of cases |

85% of cases occur in Asia (SE China, Korea, Taiwan) and sub-Saharan Africa (endemic HBV)
| Factor | Mechanism |
|---|---|
| HBV (most important globally) | Integration into host genome disrupts tumour suppressors; HBx protein inhibits p53 |
| HCV | Chronic inflammation + cirrhosis drives mutagenesis |
| Aflatoxin B1 (Aspergillus) | Mutagen: G:C→T:A transversion in codon 249 of TP53; synergises with HBV |
| Alcohol | Via cirrhosis; synergises with HBV, HCV |
| MASLD/NAFLD | Via metabolic syndrome and cirrhosis |
| Hereditary haemochromatosis | Iron-induced oxidative DNA damage |
| α1-antitrypsin deficiency | Protein accumulation drives hepatocyte injury |
| Wilson disease | Copper-induced oxidative damage |
| Cirrhosis (any cause) | Chronic regeneration increases mutation acquisition |

| Grade | Features |
|---|---|
| Well-differentiated | Cells closely resemble normal hepatocytes; grow as thick trabeculae (2-3 cell plates) or pseudoglandular/acinar patterns; bile plugs in pseudoacini; mild nuclear atypia |
| Moderately differentiated | Recognisable hepatocytes; more nuclear atypia; mitoses; vascular invasion may be seen |
| Poorly differentiated / Anaplastic | Marked nuclear pleomorphism; giant cells; frequent mitoses; may lose hepatocellular differentiation; spindle cell areas |

| Feature | Regenerative Nodule (Cirrhosis) | FNH | HCA | Low-Grade DN | High-Grade DN | HCC |
|---|---|---|---|---|---|---|
| Background liver | Cirrhotic | Normal | Normal/non-cirrhotic | Cirrhotic | Cirrhotic | Cirrhotic (85%) |
| Fibrous scar | Surrounding septa | Central stellate scar | No | No | No | No |
| Portal tracts | Present | Absent in nodule | Absent | Reduced | Absent | Absent |
| Bile ducts | Present | Present (ductular rx) | Absent | Reduced | Absent | Absent |
| Arteries | Normal (paired) | Thick-walled central | Unpaired arteries | Slightly increased | Increased unpaired | Markedly increased |
| Cytologic atypia | None | None | Minimal-moderate | Mild | Moderate-marked | Marked |
| Cell plates | 1-2 cells thick | 1-2 | 1-2 | 1-2 | 2-3 | >3 (trabecular) |
| AFP | Normal | Normal | Normal | Normal | Normal/slightly elevated | Elevated (50-60%) |
| Malignant potential | None | None | Low-moderate (β-cat type) | Low | High | N/A (is malignant) |
| Stage/Treatment | 5-year Survival |
|---|---|
| Confined to liver (small, resectable) | ~30-40% |
| Extrahepatic spread | ~5% |
| Fibrolamellar variant | Up to 40% at 10 years |
Please give pff
ls /home/daytona/workspace/ 2>/dev/null && echo "---" && ls /home/daytona/workspace/attachments/ 2>/dev/null || echo "No attachments folder"
mkdir -p /home/daytona/workspace/liver-pathology && echo "done"
~/liver-pathology/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, ListFlowable, ListItem, PageBreak
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import Flowable
OUTPUT = "/home/daytona/workspace/liver-pathology/Hepatocellular_Nodules_Pathology.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2.2*cm,
bottomMargin=2*cm,
)
W = A4[0] - 4*cm # usable width
styles = getSampleStyleSheet()
# Custom styles
TITLE = ParagraphStyle('Title', parent=styles['Normal'],
fontName='Helvetica-Bold', fontSize=16, textColor=colors.HexColor('#1a3557'),
spaceAfter=6, alignment=TA_CENTER, leading=20)
SUBTITLE = ParagraphStyle('Subtitle', parent=styles['Normal'],
fontName='Helvetica', fontSize=10, textColor=colors.HexColor('#444444'),
spaceAfter=14, alignment=TA_CENTER)
H1 = ParagraphStyle('H1', parent=styles['Normal'],
fontName='Helvetica-Bold', fontSize=13, textColor=colors.HexColor('#1a3557'),
spaceBefore=14, spaceAfter=4, borderPad=2,
backColor=colors.HexColor('#e8f0f7'), leading=16,
leftIndent=0)
H2 = ParagraphStyle('H2', parent=styles['Normal'],
fontName='Helvetica-Bold', fontSize=11, textColor=colors.HexColor('#2e5c8a'),
spaceBefore=10, spaceAfter=3, leading=14)
H3 = ParagraphStyle('H3', parent=styles['Normal'],
fontName='Helvetica-BoldOblique', fontSize=10, textColor=colors.HexColor('#3a7bd5'),
spaceBefore=7, spaceAfter=2, leading=13)
BODY = ParagraphStyle('Body', parent=styles['Normal'],
fontName='Helvetica', fontSize=9.5, textColor=colors.HexColor('#222222'),
spaceAfter=5, leading=14, alignment=TA_JUSTIFY)
BULLET = ParagraphStyle('Bullet', parent=styles['Normal'],
fontName='Helvetica', fontSize=9.5, textColor=colors.HexColor('#222222'),
spaceAfter=3, leading=13, leftIndent=14, bulletIndent=4)
CODE = ParagraphStyle('Code', parent=styles['Normal'],
fontName='Courier', fontSize=9, textColor=colors.HexColor('#333333'),
backColor=colors.HexColor('#f0f4f8'), spaceAfter=6, leading=12,
leftIndent=10, rightIndent=10)
SOURCE = ParagraphStyle('Source', parent=styles['Normal'],
fontName='Helvetica-Oblique', fontSize=8, textColor=colors.HexColor('#666666'),
spaceAfter=14, alignment=TA_CENTER)
NOTE = ParagraphStyle('Note', parent=styles['Normal'],
fontName='Helvetica-Oblique', fontSize=8.5, textColor=colors.HexColor('#555555'),
spaceAfter=4, leading=12, leftIndent=8, borderPad=4,
backColor=colors.HexColor('#fffbe6'))
def hr():
return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#c8d8e8'), spaceAfter=4, spaceBefore=2)
def h1(text):
return Paragraph(f" {text}", H1)
def h2(text):
return Paragraph(text, H2)
def h3(text):
return Paragraph(text, H3)
def body(text):
return Paragraph(text, BODY)
def bullet(text):
return Paragraph(f"• {text}", BULLET)
def sp(h=6):
return Spacer(1, h)
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
n = len(headers)
col_widths = [W/n] * n
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3557')),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,1), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#f0f5fb')]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#c0cfe0')),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('WORDWRAP', (0,0), (-1,-1), True),
]))
return t
story = []
# ── COVER ──────────────────────────────────────────────────────────────────
story.append(sp(30))
story.append(Paragraph("PATHOLOGY OF LIVER NODULES", TITLE))
story.append(Paragraph("Regenerative & Neoplastic Hepatocellular Nodules", ParagraphStyle('ST2',
parent=TITLE, fontSize=12, textColor=colors.HexColor('#2e5c8a'), spaceBefore=4, spaceAfter=4)))
story.append(sp(6))
story.append(hr())
story.append(Paragraph("Based on Robbins, Cotran & Kumar — Pathologic Basis of Disease | Robbins & Kumar Basic Pathology | Harrison's Principles of Internal Medicine 22E", SOURCE))
story.append(sp(20))
# ── SPECTRUM OVERVIEW ──────────────────────────────────────────────────────
story.append(h1("THE NODULAR SPECTRUM"))
story.append(body(
"Hepatocellular nodules form a continuous spectrum from benign regenerative responses through premalignant "
"dysplasia to frank hepatocellular carcinoma. This progression reflects accumulating molecular damage during chronic liver injury."))
story.append(sp(6))
spectrum_data = [
["Stage", "Type", "Setting", "Malignant Risk"],
["1", "Regenerative / Cirrhotic Nodule", "Cirrhosis", "None"],
["2", "Large Cell Change", "Chronic hepatitis / cirrhosis", "Low"],
["3", "Small Cell Change", "Cirrhosis", "Moderate"],
["4", "Low-Grade Dysplastic Nodule (LGDN)", "Cirrhosis", "Low–Moderate"],
["5", "High-Grade Dysplastic Nodule (HGDN)", "Cirrhosis", "High"],
["6", "Early / Well-differentiated HCC", "Cirrhosis", "Malignant"],
["7", "Overt / Advanced HCC", "Cirrhosis (85%) / non-cirrhotic (15%)", "Malignant"],
]
story.append(make_table(spectrum_data[0], spectrum_data[1:],
col_widths=[1.0*cm, 5.8*cm, 5.0*cm, 3.0*cm]))
story.append(sp(4))
story.append(Paragraph("Non-cirrhotic nodular lesions: Focal Nodular Hyperplasia (FNH) and Hepatocellular Adenoma are discussed separately.", NOTE))
# ── I. REGENERATIVE NODULES ────────────────────────────────────────────────
story.append(h1("I. REGENERATIVE NODULES"))
story.append(h2("A. Cirrhotic (Regenerative) Nodules"))
story.append(body(
"These are the basic structural units of cirrhosis — clonal clusters of surviving hepatocytes enclosed by fibrous septa. "
"They are <b>not premalignant</b> per se. Following repeated cycles of hepatocyte injury and death, surviving cells "
"undergo compensatory regenerative hyperplasia."))
story.append(bullet("<b>Gross:</b> Micronodular (<3 mm, uniform — alcoholic/metabolic) or macronodular (>3 mm, variable — post-viral)"))
story.append(bullet("<b>Micro:</b> Normal hepatocyte cytology; preserved (though simplified) lobular architecture; no cytologic atypia"))
story.append(bullet("Surrounded by fibrous bands (portal-to-portal or portal-to-central bridging fibrosis)"))
story.append(sp(4))
story.append(h2("B. Large Cell Change (Large Cell Dysplasia)"))
story.append(body(
"An early <b>at-risk alteration</b> seen in chronic liver disease, particularly viral hepatitis (HCV). "
"May represent a senescent, stress-induced change rather than true dysplasia."))
story.append(bullet("<b>Micro:</b> Hepatocytes enlarged; large, often atypical nuclei — nuclear enlargement proportional to cytoplasmic enlargement"))
story.append(bullet("Scattered throughout lobule; do not form discrete nodules"))
story.append(bullet("Associated with HCV infection and cirrhosis"))
story.append(sp(4))
story.append(h2("C. Small Cell Change"))
story.append(body("Considered to carry a <b>higher premalignant risk</b> than large cell change; most closely associated with early HCC."))
story.append(bullet("<b>Micro:</b> Hepatocytes smaller than normal with a <b>high nuclear-to-cytoplasmic (N:C) ratio</b>"))
story.append(bullet("Cells grow in thickened plates (2–3 cell layers vs normal 1–2)"))
story.append(bullet("Clusters are clonal; prominent in high-grade dysplastic nodules"))
# ── II. FNH ───────────────────────────────────────────────────────────────
story.append(h1("II. FOCAL NODULAR HYPERPLASIA (FNH)"))
story.append(body(
"A <b>non-neoplastic, regenerative</b> mass lesion in an otherwise normal liver. Second most common benign hepatic lesion "
"after haemangioma. Thought to arise in response to a pre-existing arterial malformation causing local hepatocyte hyperplasia. "
"<b>No malignant potential.</b>"))
story.append(sp(3))
fnh_data = [
["Feature", "Detail"],
["Demographics", "Young–middle-aged women; usually asymptomatic, found incidentally"],
["Gross", "Well-demarcated, poorly encapsulated nodule; central stellate (star-shaped) fibrous scar — PATHOGNOMONIC"],
["Central scar", "Contains large anomalous (thick-walled) arteries and ductular reactions; fibrous septa radiate to periphery"],
["Microscopy", "Normal hepatocyte histology; no cytologic atypia; no portal tracts within nodule"],
["Distinguishes from HCA", "Central scar present; bile ducts present (ductular reaction); not associated with OCP"],
["Malignant risk", "None — management is conservative unless symptomatic"],
]
story.append(make_table(fnh_data[0], fnh_data[1:], col_widths=[4.5*cm, 10.3*cm]))
# ── III. HEPATOCELLULAR ADENOMA ───────────────────────────────────────────
story.append(h1("III. HEPATOCELLULAR ADENOMA (Benign Neoplasm)"))
story.append(body(
"A <b>true benign neoplasm</b> of hepatocytes arising in a non-cirrhotic liver. "
"Historically linked to oral contraceptive pills (OCP); now more associated with obesity and metabolic syndrome."))
story.append(sp(4))
story.append(h2("Molecular Subtypes"))
subtype_data = [
["Subtype", "Mutation", "Key Features", "Malignant Risk"],
["HNF1α-inactivated\n(~35%)", "HNF1α loss-of-function", "Marked steatosis; LFABP absent on IHC", "Low"],
["β-catenin-activated\n(~10%)", "CTNNB1 gain-of-function", "Nuclear β-catenin on IHC; cytologic atypia", "HIGH — resect"],
["Inflammatory\n(~40%)", "IL6ST/STAT3 pathway", "Sinusoidal dilation; serum amyloid A/CRP+ on IHC", "Low–Moderate"],
["Unclassified\n(~10%)", "Unknown", "No specific markers", "Uncertain"],
]
story.append(make_table(subtype_data[0], subtype_data[1:], col_widths=[3.5*cm, 4.5*cm, 5.0*cm, 1.8*cm]))
story.append(sp(6))
story.append(h2("Morphology"))
story.append(bullet("<b>Gross:</b> Usually solitary, well-demarcated; no central scar (distinguishes from FNH); may show areas of haemorrhage/necrosis especially when >5 cm"))
story.append(bullet("<b>Micro:</b> Sheets/cords of normal-appearing hepatocytes; <b>unpaired arteries without portal tracts</b>; no bile ducts within tumour"))
story.append(bullet("Variable cytologic atypia — most marked in β-catenin-activated subtype"))
story.append(sp(4))
story.append(h2("Complications"))
story.append(bullet("<b>Haemorrhage and rupture</b> (especially >5 cm) → life-threatening intra-abdominal bleeding"))
story.append(bullet("<b>Malignant transformation to HCC</b> (especially β-catenin-activated subtype)"))
story.append(bullet("<b>Management:</b> Resection recommended for male patients (regardless of size), β-catenin-activated tumours, and tumours ≥5 cm"))
# ── IV. DYSPLASTIC NODULES ────────────────────────────────────────────────
story.append(h1("IV. DYSPLASTIC NODULES (Premalignant)"))
story.append(body(
"Dysplastic nodules arise in <b>cirrhotic liver</b> and represent clonal proliferations with molecular alterations "
"overlapping with HCC. They are recognised by the International Consensus Group for Hepatocellular Neoplasia. "
"They differ from adjacent cirrhotic nodules in size, colour, and vascularisation."))
story.append(sp(4))
dn_compare = [
["Feature", "Low-Grade DN (LGDN)", "High-Grade DN (HGDN)"],
["Size", "Slightly larger than cirrhotic nodules", "Distinctly larger than cirrhotic nodules"],
["Cytologic atypia", "Mild — slight ↑ N:C ratio, mild nuclear irregularity", "Significant — prominent nuclear irregularity, mitoses"],
["Cell density", "Near-normal", "Increased; thickened plates (2–3 cells)"],
["Small cell change", "Minimal", "Prominent"],
["Arterialization", "No increase", "Increased unpaired arteries"],
["Molecular changes", "Few clonal aberrations", "TERT promoter mutations; overlapping with HCC"],
["'Nodule-in-nodule'", "Absent", "Present — small HCC foci visible within nodule"],
["Malignant potential", "Low–Moderate", "HIGH"],
]
story.append(make_table(dn_compare[0], dn_compare[1:], col_widths=[3.8*cm, 6.5*cm, 4.5*cm]))
story.append(sp(4))
story.append(body(
"<b>Nodule-in-nodule appearance:</b> A focus of well-differentiated HCC developing within a high-grade dysplastic nodule, "
"visible as a distinct subnodule that differs in colour, texture, or histologic grade from the surrounding dysplastic tissue. "
"This is the morphologic hallmark of early hepatocarcinogenesis."))
# ── V. HEPATOCELLULAR CARCINOMA ───────────────────────────────────────────
story.append(PageBreak())
story.append(h1("V. HEPATOCELLULAR CARCINOMA (HCC)"))
story.append(body(
"The most common primary malignant liver tumour; the neoplastic end of the hepatocellular nodule spectrum. "
"Accounts for ~5–5.4% of all cancers worldwide."))
story.append(h2("Epidemiology"))
story.append(bullet(">85% of cases occur in Asia (SE China, Korea, Taiwan) and sub-Saharan Africa (endemic HBV)"))
story.append(bullet("Male predominance: 3:1 (low-incidence) to 8:1 (high-incidence areas)"))
story.append(bullet("Rising incidence in Western countries due to HCV and MASLD/metabolic syndrome"))
story.append(bullet("15–20% arise in non-cirrhotic livers (especially in HBV-endemic regions and aflatoxin-exposed populations)"))
story.append(sp(4))
story.append(h2("Risk Factors and Aetiology"))
rf_data = [
["Risk Factor", "Mechanism"],
["HBV (most important globally)", "Viral integration disrupts tumour suppressors; HBx protein inhibits p53; vertical transmission in infancy"],
["HCV", "Chronic inflammation + cirrhosis drives mutagenesis"],
["Aflatoxin B1 (Aspergillus spp.)", "G:C→T:A transversion at TP53 codon 249; synergises with HBV dramatically"],
["Alcohol", "Via cirrhosis; synergises with HBV, HCV; annual HCC risk 1–6% in alcoholic cirrhosis"],
["MASLD/NAFLD", "Via metabolic syndrome and cirrhosis; increasing importance in Western countries"],
["Hereditary haemochromatosis", "Iron-induced oxidative DNA damage"],
["α1-antitrypsin deficiency", "Protein accumulation drives chronic hepatocyte injury"],
["Wilson disease", "Copper-induced oxidative damage; somewhat lower risk"],
["Cirrhosis (any cause)", "Chronic regeneration increases rate of driver mutation acquisition"],
]
story.append(make_table(rf_data[0], rf_data[1:], col_widths=[5.0*cm, 9.8*cm]))
story.append(sp(6))
story.append(h2("Pathogenesis / Molecular Biology"))
story.append(body(
"Viruses and toxins are not directly oncogenic. Rather, <b>chronic inflammation, cytokines, and growth factors "
"promote hepatocyte proliferation and predispose to acquisition of driver mutations</b>. "
"Progression to cirrhosis and liver carcinogenesis run in parallel."))
story.append(sp(3))
mol_data = [
["Driver Mutation/Event", "Frequency", "Effect"],
["TERT promoter mutations", "50–60%", "Upregulate telomerase → prevent replicative senescence"],
["β-catenin (CTNNB1) activating mutations", "~40%", "Activate Wnt signalling → promote proliferation"],
["TP53 inactivating mutations", "Up to 60%", "Loss of cell cycle arrest and apoptosis"],
["CDKN2A (p16) loss", "Variable", "Loss of G1/S checkpoint"],
["Aflatoxin → TP53 codon 249 hotspot", "Endemic regions", "Arg→Ser transversion — specific molecular signature"],
["DNAJB1::PRKACA fusion (fibrolamellar)", "~100% of fibrolamellar HCC", "Excessive protein kinase A activity"],
]
story.append(make_table(mol_data[0], mol_data[1:], col_widths=[5.8*cm, 2.5*cm, 6.5*cm]))
story.append(h2("Gross Morphology — Three Patterns"))
story.append(bullet("<b>Unifocal (usually large) mass:</b> Most common; may replace an entire lobe; pale yellow (fatty change) or green (bile production)"))
story.append(bullet("<b>Multifocal, widely distributed nodules</b> of variable size — intrahepatic metastases from vascular invasion"))
story.append(bullet("<b>Diffusely infiltrative:</b> Permeates widely through liver; may involve entire liver; may mimic cirrhosis grossly"))
story.append(sp(3))
story.append(bullet("Tumours >2 cm: likely vascular invasion and intrahepatic metastases"))
story.append(bullet("<b>Portal vein invasion:</b> Snake-like tumour thrombus → portal hypertension"))
story.append(bullet("Extension into inferior vena cava and right ventricle in advanced cases"))
story.append(sp(4))
story.append(h2("Microscopic Morphology — Histological Grades"))
grade_data = [
["Grade", "Key Features"],
["Well-differentiated", "Cells closely resemble hepatocytes; thick trabeculae (2–3 cell plates) or pseudoglandular/acinar pattern; bile plugs in pseudoacini; mild nuclear atypia"],
["Moderately differentiated", "Recognisable hepatocytes; more nuclear atypia; mitoses present; vascular invasion may be seen"],
["Poorly differentiated / Anaplastic", "Marked nuclear pleomorphism; giant cells; frequent mitoses; may lose hepatocellular differentiation; spindle cell areas"],
]
story.append(make_table(grade_data[0], grade_data[1:], col_widths=[3.5*cm, 11.3*cm]))
story.append(sp(4))
story.append(h3("Histological Growth Patterns"))
story.append(bullet("<b>Trabecular (sinusoidal):</b> Most common; thickened liver cell plates separated by sinusoids lined by flat endothelium"))
story.append(bullet("<b>Pseudoglandular (acinar):</b> Dilated bile canaliculi form pseudoacini; bile plugs present — characteristic of HCC"))
story.append(bullet("<b>Solid/compact:</b> Sheets of cells with minimal sinusoidal stroma"))
story.append(bullet("<b>Scirrhous:</b> Prominent fibrous stroma (must be distinguished from cholangiocarcinoma)"))
story.append(sp(4))
story.append(h3("Immunohistochemistry"))
ihc_data = [
["Marker", "Sensitivity / Specificity", "Notes"],
["HepPar-1", "High specificity", "Most widely used hepatocellular marker"],
["Glypican-3 (GPC3)", "Sensitive, esp. well-diff HCC", "Negative in normal hepatocytes and benign lesions"],
["Arginase-1", "Highly sensitive and specific", "Best single marker for hepatocellular differentiation"],
["AFP (tumour cells)", "Correlates with serum AFP", "Especially in poorly differentiated HCC"],
["Polyclonal CEA (pCEA)", "Canalicular pattern", "Bile canalicular staining pattern is specific for HCC"],
]
story.append(make_table(ihc_data[0], ihc_data[1:], col_widths=[3.8*cm, 4.5*cm, 6.5*cm]))
# ── FIBROLAMELLAR ────────────────────────────────────────────────────────
story.append(h2("The Fibrolamellar Variant — Distinct Clinicopathological Entity"))
story.append(body(
"A special subtype of HCC with entirely different epidemiology, molecular biology, and prognosis from conventional HCC."))
story.append(sp(3))
fl_data = [
["Feature", "Detail"],
["Age/Demographics", "Adolescents and young adults (median age ~25 yrs); equal sex distribution"],
["Liver background", "NO pre-existing liver disease or cirrhosis"],
["Serum AFP", "Normal — NOT elevated (unlike conventional HCC)"],
["Molecular hallmark", "DNAJB1::PRKACA fusion gene → excessive protein kinase A activity"],
["Gross", "Large, well-demarcated nodule; often with a central scar (may mimic FNH)"],
["Micro: Triad", "1. Large polygonal cells with granular eosinophilic cytoplasm (abundant mitochondria — oncocytic)\n2. Vesicular nuclei with a single large prominent nucleolus\n3. Parallel lamellae of dense collagen (lamellar fibrosis) separating tumour cells"],
["Prognosis", "BETTER than conventional HCC — up to 40% survive 10 years; extensive surgical resection possible"],
]
story.append(make_table(fl_data[0], fl_data[1:], col_widths=[4.5*cm, 10.3*cm]))
# ── VI. CLINICAL FEATURES HCC ─────────────────────────────────────────────
story.append(PageBreak())
story.append(h1("VI. CLINICAL FEATURES OF HCC"))
story.append(h2("Symptoms"))
story.append(bullet("Upper abdominal pain, malaise, fatigue, weight loss, awareness of abdominal mass"))
story.append(bullet("Jaundice and ascites (due to underlying cirrhosis or portal vein invasion)"))
story.append(bullet("Haemoperitoneum from spontaneous tumour rupture (especially sub-Saharan Africa)"))
story.append(sp(4))
story.append(h2("Paraneoplastic Syndromes"))
story.append(bullet("Hypoglycaemia (insulin-like activity)"))
story.append(bullet("Erythrocytosis (ectopic erythropoietin production)"))
story.append(bullet("Hypercalcaemia"))
story.append(bullet("Hypercholesterolaemia"))
story.append(sp(4))
story.append(h2("Laboratory Findings"))
lab_data = [
["Test", "Finding / Significance"],
["Serum AFP", "Elevated in ~50% of advanced HCC; NOT sensitive for early disease; NORMAL in fibrolamellar variant"],
["AST, ALT", "May be elevated or normal"],
["ALP", "May be elevated"],
["GGT", "Often elevated"],
["LDH", "Often elevated in advanced HCC"],
]
story.append(make_table(lab_data[0], lab_data[1:], col_widths=[4.0*cm, 10.8*cm]))
story.append(sp(4))
story.append(h2("Imaging Hallmark"))
story.append(body(
"<b>Contrast-enhanced CT/MRI:</b> <b>Arterial phase enhancement</b> of HCC (due to high arterialization) "
"followed by rapid venous <b>washout</b> — this pattern is pathognomonic for HCC and may preclude the need for biopsy. "
"The <b>LI-RADS</b> scoring system is used for standardised radiological reporting in high-risk patients."))
story.append(sp(4))
story.append(h2("Prognosis and Treatment"))
prog_data = [
["Stage / Treatment", "5-year Survival / Notes"],
["Confined to liver (small, resectable)", "~30–40%"],
["Extrahepatic spread", "~5%"],
["Fibrolamellar variant", "Up to 40% at 10 years"],
["Surgical resection", "Curative; requires adequate liver reserve; preferred for non-cirrhotic liver"],
["Liver transplantation", "For HCC in advanced cirrhosis; Milan criteria: single ≤5 cm or ≤3 lesions each ≤3 cm, no vascular invasion"],
["Radiofrequency/microwave ablation", "Unresectable small tumours; tumours not meeting transplant criteria"],
["TACE (chemoembolisation)", "Exploits HCC arterialization; local control for unresectable tumours"],
["Sorafenib", "Kinase inhibitor; prolongs survival in advanced HCC (palliative)"],
["Atezolizumab + Bevacizumab", "Current first-line systemic therapy (immune checkpoint inhibitor combination)"],
]
story.append(make_table(prog_data[0], prog_data[1:], col_widths=[5.5*cm, 9.3*cm]))
story.append(sp(4))
story.append(h2("Causes of Death"))
story.append(bullet("Cachexia (most common in non-cirrhotic HCC)"))
story.append(bullet("GI / oesophageal variceal haemorrhage"))
story.append(bullet("Liver failure / hepatic coma"))
story.append(bullet("Tumour rupture with haemoperitoneum (less common; dramatic presentation)"))
# ── VII. COMPARATIVE TABLE ────────────────────────────────────────────────
story.append(PageBreak())
story.append(h1("VII. COMPREHENSIVE COMPARATIVE TABLE"))
story.append(sp(4))
comp_data = [
["Feature", "Regen. Nodule", "FNH", "HCA", "LGDN", "HGDN", "HCC"],
["Liver background", "Cirrhotic", "Normal", "Normal", "Cirrhotic", "Cirrhotic", "Cirrhotic (85%)"],
["Central scar", "No\n(septa)", "Yes —\npathognomonic", "No", "No", "No", "No"],
["Portal tracts", "Present", "Absent in nodule", "Absent", "Reduced", "Absent", "Absent"],
["Bile ducts", "Present", "Ductular rxn", "Absent", "Reduced", "Absent", "Absent"],
["Arteries", "Normal\n(paired)", "Thick-walled\ncentral", "Unpaired", "Slight ↑", "Increased\nunpaired", "Markedly ↑"],
["Cell plates", "1–2 cells", "1–2 cells", "1–2 cells", "1–2 cells", "2–3 cells", ">3 cells"],
["Cytologic atypia", "None", "None", "Mild–mod", "Mild", "Moderate–\nmarked", "Moderate–\nmarked"],
["AFP (serum)", "Normal", "Normal", "Normal", "Normal", "Normal/↑", "Elevated\n(50–60%)"],
["Malignant risk", "None", "None", "Low–mod\n(β-cat: high)", "Low", "High", "N/A\n(malignant)"],
["Treatment", "Manage\ncirrhosis", "Conservative", "Resect if\n≥5cm/high risk", "Surveillance", "Close\nf/u or resect", "Resect /\nTransplant"],
]
story.append(make_table(comp_data[0], comp_data[1:],
col_widths=[3.2*cm, 2.0*cm, 2.0*cm, 2.0*cm, 2.0*cm, 2.0*cm, 1.6*cm]))
story.append(sp(20))
story.append(hr())
story.append(Paragraph(
"Sources: Robbins, Cotran & Kumar — Pathologic Basis of Disease (9780443264528) · "
"Robbins & Kumar Basic Pathology (9780323790185) · Harrison's Principles of Internal Medicine 22E",
SOURCE))
# ── BUILD ──────────────────────────────────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
canvas.setFont('Helvetica', 7.5)
canvas.setFillColor(colors.HexColor('#888888'))
canvas.drawString(2*cm, 1.3*cm, "Orris Medical Education | Pathology of Hepatocellular Nodules")
canvas.drawRightString(A4[0] - 2*cm, 1.3*cm, f"Page {doc.page}")
canvas.restoreState()
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/liver-pathology && python generate_pdf.py
ls -lh /home/daytona/workspace/liver-pathology/Hepatocellular_Nodules_Pathology.pdf
Hepatocellular Nodules Pathology
PDF Document · PDF