Write a 30 marks answer for Postgraduate Anaesthesia exam on the topic of shock
types of shock classification diagram cardiogenic hypovolemic distributive obstructive

Two black-and-white clinical photographs showing peripheral vasodilatation in patients with distributive shock. The top image displays a supine patient (BP 85/35 mmHg) with prominent, distended superficial veins across the upper arm and chest wall. The bottom image shows a second patient (BP 55/30 mmHg) with similar marked venous engorgement in the forearm, with superficial veins appearing highly visible and distended despite severe systemic hypotension. These visual findings demonstrate the paradoxical clinical presentation of distributive shock—often seen in severe organophosphate poisoning—where pathological peripheral vasodilation occurs instead of the expected compensatory vasoconstriction typical of hypovolemic or cardiogenic shock. Key concepts illustrated include the assessment of peripheral vascular tone, venous distension, and the recognition of warm shock/low systemic vascular resistance in an emergency clinical setting.

Summary : This figure presents a pyramid diagram illustrating the classification of cardiogenic shock (CS) into five progressive stages (A–E), from "At Risk" to "Extremis," with detailed descriptions for each stage. pyramid diagram: # Structure & Levels : • The diagram is a five-level pyramid, with each level labeled from bottom (A) to top (E). • Each level represents a stage of cardiogenic shock, with increasing severity from A (base) to E (apex). • Levels are color-coded in gradients of blue, with darker shades at the base and lighter at the apex. ## Stages & Descriptions : • Stage A "At Risk": – Patients not currently experiencing signs or symptoms of cardiogenic shock, but at risk for its development. – Includes those with acute myocardial infarction, acute and/or acute on chronic heart failure symptoms. • Stage B "Beginning" Cardiogenic Shock: – Patients with clinical evidence of relative hypotension or tachycardia without hypoperfusion. • Stage C "Classic" Cardiogenic Shock: – Patients manifesting with hypoperfusion requiring intervention (inotrope, pressor, mechanical support, ECMO) beyond volume resuscitation. – Typically present with relative hypotension. • Stage D "Deteriorating or Doom": – Patients similar to category C but getting worse. – Failure to respond to initial interventions. • Stage E "Extremis": – Patients with circulatory collapse, often in refractory cardiac arrest with ongoing CPR or multiple simultaneous acute interventions (including ECMO-facilitated CPR). – Multiple clinicians at bedside due to lack of clinical stability. ## Design Encodings : • Each stage is labeled with a large letter (A–E), stage name, and a detailed description. • The pyramid shape visually emphasizes progression and severity. • The base (A) is widest, indicating the largest population at risk; the apex (E) is narrowest, indicating the most severe and least common stage. ## Caption & Source : • Figure is labeled as "FIGURE 1 The pyramid of CS classification" at the bottom. # Analysis : • The pyramid visually communicates the increasing severity and decreasing prevalence of cardiogenic shock stages from A (at risk) to E (extremis). • The detailed descriptions provide clear clinical criteria for each stage, supporting rapid classification and intervention planning. • The structure emphasizes that as patients progress upward, interventions become more urgent and complex, with the top stage (E) representing critical instability requiring maximal support.

Summary : This figure presents the updated SCAI SHOCK classification pyramid, which stratifies patients with acute myocardial infarction (AMI), cardiogenic shock (CS), and heart failure (HF) into five stages (A–E) based on severity, with an additional modifier for anoxic brain injury. Each stage is defined by clinical criteria related to hemodynamic stability and evidence of shock. pyramid diagram: # Overall Structure : • Five-tiered pyramid labeled from bottom (A) to top (E), each tier representing a stage of shock severity. • Left side: Each tier is labeled with a letter (A–E) and a corresponding color gradient from dark blue (A) to dark red (E). • Right side: Each tier is named and described with clinical criteria. • Top left: Box indicating "(A) Modifier: CA with concern for anoxic brain injury". # Stages & Descriptions : ## AT RISK (A, bottom tier) : • "A hemodynamically stable patient who is NOT experiencing signs or symptoms of CS, but is at risk for its development (i.e. large AMI or decompensated HF)." • Color: Dark blue. ## BEGINNING (B, second tier) : • "A patient who has clinical evidence of hemodynamic instability (including hypotension, tachycardia or abnormal systemic hemodynamics) without hypoperfusion." • Color: Medium blue. ## CLASSIC (C, middle tier) : • "A patient who has clinical evidence of hypoperfusion that initially requires pharmacologic or mechanical support. Hypotension is usually present." • Color: Light blue. ## DETERIORATING (D, fourth tier) : • "A patient who has clinical evidence of shock that worsens or fails to improve despite escalation of therapy." • Color: Light grey. ## EXTREMIS (E, top tier) : • "A patient with refractory shock or actual/impending circulatory collapse." • Color: Dark red. # Modifier : • "(A) Modifier: CA with concern for anoxic brain injury" is shown in a separate box, indicating an additional classification for patients with cardiac arrest and possible brain injury. # Design Encodings : • Pyramid shape with color gradient from blue (least severe) to red (most severe). • Each stage is labeled with a large letter (A–E) and a descriptive name in colored text matching the tier. • Descriptions are provided in smaller text to the right of each tier. • Modifier box is purple with white text. # Analysis : • The pyramid visually emphasizes increasing severity from bottom (A, at risk) to top (E, extremis). • The color gradient reinforces the escalation in clinical urgency. • The modifier box highlights the importance of considering anoxic brain injury in classification. • The structure allows rapid identification of patient status and guides clinical decision-making based on stage.
| Type | Mechanism | Examples |
|---|---|---|
| Hypovolaemic | Reduced circulating volume | Haemorrhage, burns, vomiting/diarrhoea, third-spacing (pancreatitis, bowel obstruction) |
| Cardiogenic | Pump failure (absolute or relative) | MI, cardiomyopathy, dysrhythmia, valvular disease, blunt myocardial injury |
| Obstructive | Mechanical obstruction to flow | Tension pneumothorax, cardiac tamponade, massive PE, constrictive pericarditis |
| Distributive | Maldistribution of blood flow; low SVR | Sepsis/SIRS, anaphylaxis, neurogenic (spinal), adrenal insufficiency |
| Endocrine | Hormonal failure | Addisonian crisis, thyroid storm, myxoedema coma |
| Class I | Class II | Class III | Class IV | |
|---|---|---|---|---|
| Blood loss (%) | 0-15% | 15-30% | 30-40% | >40% |
| Pulse (bpm) | <100 | >100 | >120 | >140 |
| Blood pressure | Normal | Normal | Decreased | Decreased |
| Pulse pressure | Normal | Decreased | Decreased | Decreased |
| RR (breaths/min) | 14-20 | 20-30 | 30-40 | >35 |
| Urine output (mL/h) | >30 | 20-30 | 5-15 | Negligible |
| CNS | Slightly anxious | Mildly anxious | Anxious/confused | Confused/lethargic |
| Fluid | Crystalloid | Crystalloid | Crystalloid + blood | Crystalloid + blood |
| Drug | Receptor profile | Primary use |
|---|---|---|
| Norepinephrine | α₁ >> β₁ | First-line in septic/distributive shock (raises SVR) |
| Epinephrine | α₁, β₁, β₂ | Anaphylaxis (first-line); adjunct in refractory septic shock |
| Dopamine | DA, β₁, α₁ (dose-dependent) | Now rarely used; higher arrhythmia risk vs norepinephrine |
| Vasopressin | V₁ | Adjunct in refractory septic shock (0.03-0.04 U/min) to spare norepinephrine dose |
| Dobutamine | β₁ >> β₂ | Inotrope in cardiogenic shock with preserved preload |
| Phenylephrine | α₁ selective | Vasopressor in anaesthesia-induced hypotension/neurogenic shock |
| Milrinone | PDE-III inhibitor | Cardiogenic shock (particularly RV failure, post-cardiac surgery) |
| Organ | Manifestation |
|---|---|
| Lung | Acute Respiratory Distress Syndrome (ARDS) |
| Kidney | Acute Kidney Injury (oliguric/anuric) |
| Liver | Hepatic dysfunction, coagulopathy |
| Heart | Cardiovascular failure |
| Brain | Cerebral oedema and encephalopathy |
| Gut | Ileus, bacterial translocation, stress ulceration |
Make a pdf like notes
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/shock-notes && python3 -c "import reportlab; print('reportlab ok')"
~/shock-notes/build_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import BalancedColumns
from reportlab.lib.colors import HexColor
# ── Colour palette ──────────────────────────────────────────────────
DARK_BLUE = HexColor("#1a2e4a") # title / heading 1
MID_BLUE = HexColor("#1e5799") # heading 2
ACCENT_BLUE = HexColor("#4a90d9") # heading 3 / rules
HIGHLIGHT = HexColor("#e8f4fd") # box background
YELLOW_HL = HexColor("#fff9e6") # key-point box
RED_WARN = HexColor("#c0392b") # warning
GREEN = HexColor("#1a7a4a") # mnemonic / tip
LIGHT_GREY = HexColor("#f5f7fa") # table alt row
BORDER_GREY = HexColor("#cdd4de")
TEXT_DARK = HexColor("#1c2833")
W, H = A4
# ── Document ─────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
"/tmp/workspace/shock-notes/Shock_PG_Anaesthesia_Notes.pdf",
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Shock – PG Anaesthesia Notes",
author="Orris Medical"
)
# ── Styles ────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
def S(name, **kw):
"""Create a named ParagraphStyle."""
return ParagraphStyle(name, **kw)
styles = {
"cover_title": S("cover_title",
fontName="Helvetica-Bold", fontSize=32, leading=38,
textColor=colors.white, alignment=TA_CENTER, spaceAfter=6),
"cover_sub": S("cover_sub",
fontName="Helvetica", fontSize=14, leading=18,
textColor=HexColor("#d0e8ff"), alignment=TA_CENTER, spaceAfter=4),
"cover_label": S("cover_label",
fontName="Helvetica-BoldOblique", fontSize=11,
textColor=HexColor("#90c8f0"), alignment=TA_CENTER, spaceAfter=2),
"h1": S("h1",
fontName="Helvetica-Bold", fontSize=15, leading=19,
textColor=colors.white, spaceBefore=14, spaceAfter=6,
backColor=DARK_BLUE, leftIndent=-10, rightIndent=-10,
borderPadding=(6, 10, 6, 10)),
"h2": S("h2",
fontName="Helvetica-Bold", fontSize=12, leading=15,
textColor=MID_BLUE, spaceBefore=10, spaceAfter=4,
borderPadding=(0, 0, 2, 0)),
"h3": S("h3",
fontName="Helvetica-BoldOblique", fontSize=10.5, leading=13,
textColor=ACCENT_BLUE, spaceBefore=8, spaceAfter=3),
"body": S("body",
fontName="Helvetica", fontSize=9.5, leading=13.5,
textColor=TEXT_DARK, spaceBefore=2, spaceAfter=2,
alignment=TA_JUSTIFY),
"bullet": S("bullet",
fontName="Helvetica", fontSize=9.5, leading=13,
textColor=TEXT_DARK, leftIndent=14, firstLineIndent=-10,
spaceBefore=1, spaceAfter=1),
"sub_bullet": S("sub_bullet",
fontName="Helvetica", fontSize=9, leading=12,
textColor=TEXT_DARK, leftIndent=26, firstLineIndent=-10,
spaceBefore=0, spaceAfter=0),
"key_box": S("key_box",
fontName="Helvetica-Bold", fontSize=9.5, leading=13,
textColor=DARK_BLUE, leftIndent=8, rightIndent=8,
spaceBefore=2, spaceAfter=2),
"warn_box": S("warn_box",
fontName="Helvetica-Bold", fontSize=9.5, leading=13,
textColor=RED_WARN, leftIndent=8, rightIndent=8,
spaceBefore=2, spaceAfter=2),
"green_box": S("green_box",
fontName="Helvetica-Bold", fontSize=9.5, leading=13,
textColor=GREEN, leftIndent=8, rightIndent=8,
spaceBefore=2, spaceAfter=2),
"formula": S("formula",
fontName="Helvetica-Oblique", fontSize=9.5, leading=13,
textColor=MID_BLUE, leftIndent=20, spaceBefore=3, spaceAfter=3),
"caption": S("caption",
fontName="Helvetica-Oblique", fontSize=8, leading=10,
textColor=HexColor("#5d6d7e"), alignment=TA_CENTER, spaceAfter=4),
"ref": S("ref",
fontName="Helvetica-Oblique", fontSize=7.5, leading=10,
textColor=HexColor("#7f8c8d"), spaceAfter=1),
"toc_item": S("toc_item",
fontName="Helvetica", fontSize=10, leading=14,
textColor=DARK_BLUE, leftIndent=10, spaceAfter=2),
}
# ── Helper flowables ──────────────────────────────────────────────────
def rule(color=ACCENT_BLUE, thickness=0.8):
return HRFlowable(width="100%", thickness=thickness,
color=color, spaceAfter=4, spaceBefore=2)
def sp(h=4):
return Spacer(1, h)
def H1(text):
return Paragraph(f" {text}", styles["h1"])
def H2(text):
return [rule(MID_BLUE, 1.2), Paragraph(text, styles["h2"])]
def H3(text):
return Paragraph(text, styles["h3"])
def B(text):
return Paragraph(f"• {text}", styles["bullet"])
def BB(text):
return Paragraph(f"◦ {text}", styles["sub_bullet"])
def P(text):
return Paragraph(text, styles["body"])
def Formula(text):
return Paragraph(text, styles["formula"])
def key_box(lines, bg=HIGHLIGHT):
content = [Paragraph(l, styles["key_box"]) for l in lines]
t = Table([[content]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1, ACCENT_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [4]),
]))
return t
def warn_box(lines):
content = [Paragraph(l, styles["warn_box"]) for l in lines]
t = Table([[content]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), HexColor("#fdf3f3")),
("BOX", (0,0), (-1,-1), 1.2, RED_WARN),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
]))
return t
def green_box(lines):
content = [Paragraph(l, styles["green_box"]) for l in lines]
t = Table([[content]], colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), HexColor("#eafaf1")),
("BOX", (0,0), (-1,-1), 1.2, GREEN),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
]))
return t
def make_table(headers, rows, col_widths=None):
"""Build a styled table."""
cw = col_widths or [doc.width / len(headers)] * len(headers)
header_row = [Paragraph(f"<b>{h}</b>", ParagraphStyle(
"th", fontName="Helvetica-Bold", fontSize=8.5, leading=11,
textColor=colors.white, alignment=TA_CENTER)) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
bg = LIGHT_GREY if i % 2 == 0 else colors.white
data.append([Paragraph(str(c), ParagraphStyle(
"td", fontName="Helvetica", fontSize=8.2, leading=11,
textColor=TEXT_DARK, alignment=TA_LEFT)) for c in row])
t = Table(data, colWidths=cw, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS", (0,1), (-1,-1), [LIGHT_GREY, colors.white]),
("GRID", (0,0), (-1,-1), 0.4, BORDER_GREY),
("BOX", (0,0), (-1,-1), 1, DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
# ═══════════════════════════════════════════════════════════════════════
# BUILD STORY
# ═══════════════════════════════════════════════════════════════════════
story = []
# ─── COVER PAGE ────────────────────────────────────────────────────────
cover_bg_data = [[""]]
cover_bg = Table(cover_bg_data, colWidths=[W - 3.6*cm], rowHeights=[H - 4*cm])
cover_bg.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("ROUNDEDCORNERS", [12]),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
]))
story.append(sp(60))
story.append(Paragraph("SHOCK", styles["cover_title"]))
story.append(sp(6))
story.append(Paragraph("Postgraduate Anaesthesia Examination Notes", styles["cover_sub"]))
story.append(sp(4))
story.append(rule(HexColor("#4a90d9"), 1.5))
story.append(sp(8))
story.append(Paragraph("30-Mark Structured Answer", styles["cover_label"]))
story.append(sp(4))
story.append(Paragraph("Definition · Pathophysiology · Classification · ATLS Grading", styles["cover_label"]))
story.append(Paragraph("Clinical Recognition · Monitoring · Management · Complications", styles["cover_label"]))
story.append(sp(16))
story.append(Paragraph("Based on: Miller's Anesthesia 10e · Bailey & Love 28e · Sabiston Surgery 23e", styles["cover_label"]))
story.append(Paragraph("Surviving Sepsis Campaign Guidelines · ATLS · CRASH-2 Trial", styles["cover_label"]))
story.append(sp(20))
story.append(Paragraph("Orris Medical Education | 2026", styles["cover_label"]))
story.append(PageBreak())
# ─── SECTION 1 – DEFINITION ──────────────────────────────────────────
story.append(H1("1. DEFINITION [2 marks]"))
story.append(sp(4))
story.append(P("Shock is a state of <b>inadequate tissue perfusion</b> relative to metabolic demand, "
"resulting in cellular hypoxia and energy failure. More precisely, it is the inability "
"to provide adequate oxygen to the tissues that require it — a fundamental imbalance "
"between oxygen delivery (DO₂) and oxygen consumption (VO₂) at the cellular level."))
story.append(sp(4))
story.append(key_box([
"🔑 Classic definition (Gross, 1872): \"A manifestation of the rude unhinging of the machinery of life.\"",
"🔑 Cells switch from aerobic → anaerobic metabolism → lactic acidosis → cell death if uncorrected.",
]))
story.append(sp(8))
# ─── SECTION 2 – O2 DELIVERY PHYSIOLOGY ────────────────────────────
story.append(H1("2. OXYGEN DELIVERY PHYSIOLOGY [3 marks]"))
story.append(sp(4))
story.append(Formula("CaO₂ (mL/dL) = (1.34 × Hb × SaO₂) + (PaO₂ × 0.003)"))
story.append(Formula("DO₂ (mL/min) = CaO₂ × Cardiac Output × 0.01"))
story.append(Formula("VO₂ (mL/min) = DO₂ × O₂ Extraction Ratio"))
story.append(Formula("O₂EX = (CaO₂ − CvO₂) / CaO₂ [ normally 4–6 mL/100 mL blood ]"))
story.append(sp(4))
story.append(make_table(
["Parameter", "Normal Value", "Clinical Significance"],
[
["CaO₂ (arterial O₂ content)", "~20 mL/dL", "Dependent on Hb and SaO₂"],
["DO₂ (O₂ delivery)", "~1000 mL/min", "CO × CaO₂; the supply side"],
["VO₂ (O₂ consumption)", "~250 mL/min", "Metabolic demand; supply-independent above critical threshold"],
["O₂ extraction ratio", "~25%", "Can rise to 50–75% in extremis as compensatory mechanism"],
["Mixed venous SvO₂", "65–75%", "<65% indicates inadequate O₂ delivery or excess demand"],
],
col_widths=[5.5*cm, 4*cm, 8*cm]
))
story.append(sp(4))
story.append(key_box([
"⚡ Critical DO₂ Threshold: Above this threshold, VO₂ is INDEPENDENT of DO₂ (tissues extract more).",
" Below it, VO₂ becomes supply-dependent → anaerobic metabolism begins → lactic acidosis.",
" This is the physiological definition of the shock state.",
]))
story.append(sp(8))
# ─── SECTION 3 – CLASSIFICATION ─────────────────────────────────────
story.append(H1("3. CLASSIFICATION [4 marks]"))
story.append(sp(4))
story.append(P("Shock is classified by <b>initiating mechanism</b>. Multiple states frequently coexist "
"in the same patient. Hypovolaemia is the most common form and is a component of all "
"other forms to some degree — always exclude or treat it regardless of the primary cause."))
story.append(sp(4))
story.append(make_table(
["Type", "Mechanism", "Key Causes"],
[
["Hypovolaemic\n(most common)", "↓ Circulating volume\n→ ↓ Preload → ↓ CO",
"Haemorrhage, burns, vomiting/diarrhoea, third-spacing (pancreatitis, bowel obstruction), polyuria"],
["Cardiogenic\n(pump failure)", "↓ CO despite adequate filling\n→ ↑ PCWP",
"MI (commonest), cardiomyopathy, dysrhythmia, valvular disease, blunt myocardial injury"],
["Obstructive", "Mechanical obstruction to flow\n→ ↓ Preload/CO",
"Tension pneumothorax, cardiac tamponade, massive PE, constrictive pericarditis, mediastinal mass"],
["Distributive\n(vasodilatory)", "↓ SVR → maldistribution of flow\n→ CO often ↑ but ineffective",
"Sepsis/SIRS, anaphylaxis, neurogenic (spinal cord), adrenal insufficiency, liver failure"],
["Endocrine", "Hormonal failure → vasodilation\n& impaired compensatory response",
"Addisonian crisis, myxoedema coma, thyroid storm, phaeochromocytoma crisis"],
],
col_widths=[3.2*cm, 5.2*cm, 9.1*cm]
))
story.append(sp(6))
# Haemodynamic profiles sub-table
story.append(H3("Haemodynamic Profiles (useful for differentiating causes)"))
story.append(sp(3))
story.append(make_table(
["Type", "CVP/PCWP", "CO/CI", "SVR", "ScvO₂"],
[
["Hypovolaemic", "↓↓", "↓↓", "↑↑", "↓"],
["Cardiogenic", "↑↑", "↓↓", "↑↑", "↓↓"],
["Obstructive", "↑ or ↓*", "↓↓", "↑↑", "↓"],
["Distributive (Septic)", "↓ or N", "↑↑", "↓↓", "↑ or ↓"],
["Neurogenic", "↓", "↓ or N", "↓↓", "Variable"],
],
col_widths=[4.5*cm, 3.5*cm, 3.5*cm, 3.5*cm, 2.5*cm]
))
story.append(Paragraph("* CVP ↑ in tamponade/PE; ↓ in tension pneumothorax initially",
styles["caption"]))
story.append(sp(8))
# ─── SECTION 4 – PATHOPHYSIOLOGY ────────────────────────────────────
story.append(H1("4. PATHOPHYSIOLOGY [6 marks]"))
story.append(sp(4))
for h, items in [
("4a. Cellular Level", [
"O₂ deprivation → switch from aerobic → anaerobic metabolism",
"Product is <b>lactic acid</b> (not CO₂) → systemic metabolic acidosis",
"Intracellular glucose exhaustion → Na⁺/K⁺-ATPase pump failure",
"Lysosomal autodigestive enzyme release → <b>cell lysis</b>",
"Intracellular K⁺ released → <b>systemic hyperkalaemia</b>",
]),
("4b. Microvascular Level", [
"Hypoxia + acidosis activate <b>complement cascade</b> and prime leucocytes",
"Generation of <b>oxygen free radicals</b> and pro-inflammatory cytokines (TNF-α, IL-1, IL-6)",
"Capillary endothelial injury → loss of barrier integrity → 'leaky capillaries'",
"Fluid extravasation → <b>tissue oedema</b> → worsens cellular hypoxia",
"Activated coagulation cascade → microvascular thrombosis → further ischaemia",
]),
("4c. Cardiovascular (Systemic) Response", [
"Baroreceptors detect ↓ preload/afterload → <b>sympathetic activation</b>",
"Catecholamine surge → <b>tachycardia</b> + <b>systemic vasoconstriction</b>",
"Blood redistributed away from skin, gut, muscle, kidney → preserved brain and heart flow",
"Exception: distributive shock — vasodilation + warm peripheries despite hypotension",
]),
("4d. Renal Response", [
"↓ Glomerular perfusion pressure → ↓ GFR → <b>oliguria</b>",
"RAA axis activation → angiotensin II (vasoconstriction) + aldosterone (Na⁺/H₂O retention)",
"Urine output <0.5 mL/kg/hr = marker of significant renal hypoperfusion",
]),
("4e. Endocrine Response", [
"<b>Vasopressin (ADH)</b>: ↓ preload → V₁ receptor → vasoconstriction + renal water reabsorption",
"<b>Cortisol</b>: adrenal cortex → ↑ Na⁺/H₂O retention + catecholamine sensitisation",
"<b>Catecholamines</b> (adrenal medulla): tachycardia, ↑ contractility, vasoconstriction",
]),
("4f. Respiratory Response", [
"Metabolic acidosis + ↑ sympathetic drive → <b>tachypnoea</b>",
"↑ Minute ventilation → ↑ CO₂ excretion → <b>compensatory respiratory alkalosis</b>",
"Severe prolonged shock → ARDS from endothelial damage + neutrophil-mediated lung injury",
]),
]:
story.append(H3(h))
for item in items:
story.append(B(item))
story.append(sp(3))
story.append(warn_box([
"⚠ LETHAL TRIAD of Haemorrhagic Shock: HYPOTHERMIA + ACIDOSIS + COAGULOPATHY",
" Each element worsens the others in a self-perpetuating downward spiral toward death.",
" Treat all three simultaneously — this is the target of Damage Control Resuscitation.",
]))
story.append(sp(8))
# ─── SECTION 5 – ATLS CLASSIFICATION ───────────────────────────────
story.append(H1("5. ATLS CLASSIFICATION OF HAEMORRHAGIC SHOCK [3 marks]"))
story.append(sp(4))
story.append(P("The adult human has approximately 5 litres of blood (70 mL/kg for adults; "
"80 mL/kg for neonates). The ATLS classification divides haemorrhagic shock "
"into four classes based on estimated blood loss and physiological response."))
story.append(sp(4))
story.append(make_table(
["Parameter", "Class I", "Class II", "Class III", "Class IV"],
[
["Blood loss (%)", "0–15%", "15–30%", "30–40%", ">40%"],
["Blood loss (mL)*", "<750 mL", "750–1500 mL", "1500–2000 mL", ">2000 mL"],
["Pulse (bpm)", "<100", ">100", ">120", ">140"],
["Blood pressure", "Normal", "Normal", "Decreased", "Decreased"],
["Pulse pressure", "Normal", "Decreased ↓", "Decreased ↓↓", "Decreased ↓↓"],
["Resp. rate", "14–20", "20–30", "30–40", ">35"],
["Urine output", ">30 mL/hr", "20–30 mL/hr", "5–15 mL/hr", "Negligible"],
["CNS/Mental status", "Slightly anxious", "Mildly anxious", "Anxious/confused", "Confused/lethargic"],
["Fluid replacement", "Crystalloid", "Crystalloid", "Crystalloid + blood", "Crystalloid + blood"],
],
col_widths=[4.2*cm, 2.7*cm, 2.7*cm, 2.7*cm, 2.7*cm]
))
story.append(sp(3))
story.append(key_box([
"📌 BP is maintained until 30–40% of circulating volume is lost — BP is a LATE sign.",
"📌 Pulse pressure narrows EARLY (before systolic BP falls) due to catecholamine-mediated vasoconstriction.",
"📌 Haemoglobin is a POOR early marker — in acute haemorrhage, whole blood is lost and Hb unchanged until fluid shifts occur.",
"📌 ATLS classes are arbitrary and not rigorously validated — clinical judgement supersedes rigid classification.",
]))
story.append(sp(8))
# ─── SECTION 6 – CLINICAL RECOGNITION ─────────────────────────────
story.append(H1("6. CLINICAL RECOGNITION [2 marks]"))
story.append(sp(4))
story.append(H3("Compensated Shock"))
story.append(B("Adequate cardiovascular compensation maintains central blood volume"))
story.append(B("Signs: <b>tachycardia</b> + cool peripheries + mild anxiety"))
story.append(B("BP maintained; urine output preserved"))
story.append(B("Metabolic acidosis may be absent or mild — this state is clinically <b>occult</b> but dangerous"))
story.append(B("Occult hypoperfusion >12 hours → significantly ↑ mortality, infection, MOF"))
story.append(sp(3))
story.append(H3("Decompensated Shock"))
story.append(make_table(
["", "Mild (Compensated)", "Moderate", "Severe"],
[
["Lactic acidosis", "+", "++", "+++"],
["Urine output", "Normal", "Reduced", "Anuric"],
["Conscious level", "Mild anxiety", "Drowsy", "Comatose"],
["Respiratory rate", "Increased", "Increased", "Labouring"],
["Pulse rate", "Increased", "Increased", "Markedly increased"],
["Blood pressure", "Normal", "Mild ↓", "Severe ↓"],
],
col_widths=[3.5*cm, 4.5*cm, 4.5*cm, 4.5*cm]
))
story.append(sp(4))
story.append(H3("Clinical Pitfalls (Important for Exams!)"))
story.append(make_table(
["Pitfall", "Explanation"],
[
["No tachycardia", "β-blockers, pacemakers, vagal tone in young patients prevent reflex tachycardia"],
["Warm peripheries in shock", "Distributive (septic/neurogenic) shock — paradoxical vasodilation"],
["Normal BP in shock", "Compensated shock — up to 30% volume loss may not drop systolic BP"],
["Bradycardia + hypotension", "Neurogenic shock (spinal cord injury above T6) — loss of sympathetic tone"],
["Children", "Compensate remarkably until sudden decompensation — tachycardia may be only sign"],
["Elderly", "Decompensate at lower volumes — limited cardiac reserve; masked by baseline medications"],
],
col_widths=[4.5*cm, 13*cm]
))
story.append(sp(8))
# ─── SECTION 7 – MONITORING ────────────────────────────────────────
story.append(H1("7. MONITORING IN SHOCK [2 marks]"))
story.append(sp(4))
story.append(H3("Basic Monitoring"))
for item in [
"ECG (arrhythmia detection, ST changes in cardiogenic shock)",
"Pulse oximetry (SpO₂) — note: unreliable in peripheral vasoconstriction",
"Non-invasive blood pressure (NIBP)",
"Temperature — hypothermia worsens coagulopathy",
"Urine output via urinary catheter: target <b>>0.5 mL/kg/hr</b> (adult), >1 mL/kg/hr (child)",
"Capillary refill time (CRT): >2 sec abnormal; unreliable in distributive shock",
]:
story.append(B(item))
story.append(sp(4))
story.append(H3("Advanced Haemodynamic Monitoring"))
story.append(make_table(
["Monitor", "What It Provides", "Key Use in Shock"],
[
["Arterial line (A-line)", "Continuous BP, ABG access, pulse pressure variation (PPV)",
"All severe shock; PPV >13% predicts fluid responsiveness"],
["Central venous catheter (CVC)", "CVP, ScvO₂ (target >70%), drug delivery",
"Septic shock — ScvO₂ is resuscitation endpoint; CVP alone unreliable"],
["Pulmonary artery catheter (PAC)", "PCWP, PA pressures, SvO₂, CO by thermodilution",
"Mixed cardiogenic + septic shock; RV failure assessment"],
["Echocardiography (TTE/TOE)", "Ventricular function, preload, valve pathology, tamponade",
"Differentiates shock type; assesses fluid responsiveness (IVC collapsibility)"],
["Oesophageal Doppler / LiDCO", "Stroke volume, SVV, CO",
"Goal-directed therapy (GDT) in perioperative period"],
["Serum lactate", "Marker of anaerobic metabolism",
"Serial lactate clearance: target >10% per 2hr, final <2 mmol/L"],
["Base deficit (ABG)", "Degree of metabolic acidosis",
"Correlates with shock severity; target normalisation"],
],
col_widths=[4*cm, 6*cm, 7.5*cm]
))
story.append(sp(8))
# ─── SECTION 8 – MANAGEMENT ─────────────────────────────────────────
story.append(H1("8. MANAGEMENT PRINCIPLES [6 marks]"))
story.append(sp(4))
story.append(key_box([
"🎯 Overall Goal: Treat the underlying cause + restore adequate DO₂ + clear metabolic products of anaerobic metabolism.",
" The FASTER adequate perfusion is restored, the BETTER the outcome.",
]))
story.append(sp(6))
story.append(H3("8a. Immediate Resuscitation — ABCDE Approach"))
for item in [
"<b>A (Airway)</b>: Secure and maintain. Early definitive airway if GCS ≤8 or airway compromise",
"<b>B (Breathing)</b>: High-flow O₂ (15L/min non-rebreather mask initially). Decompress tension pneumothorax immediately",
"<b>C (Circulation)</b>: 2 large-bore (≥16G) IV cannulae, fluid challenge, haemorrhage control",
"<b>D (Disability)</b>: GCS, pupils — detect neurogenic causes, end-organ hypoperfusion",
"<b>E (Exposure)</b>: Full exposure to identify all haemorrhage sites; prevent hypothermia simultaneously",
]:
story.append(B(item))
story.append(sp(6))
story.append(H3("8b. Fluid Resuscitation"))
story.append(P("<b>General principles:</b> Balanced crystalloids (Hartmann's / Ringer's lactate) preferred over "
"normal saline (hyperchloraemic acidosis risk). Albumin in sepsis when large crystalloid volumes needed."))
story.append(sp(4))
story.append(make_table(
["Shock Type", "Fluid Strategy", "Target"],
[
["Hypovolaemic (non-haem.)", "IV crystalloid boluses (250–500 mL); reassess response",
"MAP ≥65 mmHg, UO >0.5 mL/kg/hr, lactate clearance"],
["Haemorrhagic — ACTIVE BLEEDING", "Haemostatic resuscitation: pRBC:FFP:Plt = 1:1:1\nPermissive hypotension\nTXA within 3 hours",
"SBP 80–90 mmHg (MAP ~50) until surgical control\nHigher if TBI (MAP ≥80)"],
["Haemorrhagic — CONTROLLED", "pRBC transfusion; trigger Hb <7 g/dL (8 in cardiac disease)\nCrystalloid for ongoing maintenance",
"Hb ≥7–8 g/dL, normal coagulation, normothermia"],
["Septic shock", "30 mL/kg crystalloid in first 3 hours\nReassess with dynamic measures before more fluid",
"MAP ≥65 mmHg, lactate <2 mmol/L, ScvO₂ >70%"],
["Cardiogenic shock", "Cautious fluid (100–250 mL bolus with reassessment)\nEarly vasopressors/inotropes",
"Avoid fluid overload; PCWP 15–18 mmHg optimal"],
["Obstructive shock", "Fluid temporising measure ONLY — relieve obstruction urgently",
"Decompress pneumothorax; drain tamponade; thrombolyse PE"],
],
col_widths=[4*cm, 8*cm, 5.5*cm]
))
story.append(sp(4))
story.append(H3("Response to Fluid Challenge (Guides further management)"))
story.append(make_table(
["Response", "Interpretation", "Action"],
[
["Responder", "Good, sustained BP ↑ — haemorrhage controlled", "Monitor; no further urgent intervention"],
["Transient responder", "BP ↑ then falls — haemorrhage rate < infusion rate", "Identify bleeding source; expedite surgery/IR"],
["Non-responder", "No BP response — haemorrhage > infusion rate", "URGENT surgical/IR haemostasis; MTP activation"],
],
col_widths=[3.5*cm, 7*cm, 7*cm]
))
story.append(sp(6))
story.append(H3("8c. Vasopressors and Inotropes"))
story.append(make_table(
["Drug", "Receptor Profile", "Primary Use", "Key Notes"],
[
["Norepinephrine\n(noradrenaline)", "α₁ >> β₁", "1st-line: septic/distributive shock",
"Raises SVR; minimal tachycardia; preferred over dopamine"],
["Epinephrine\n(adrenaline)", "α₁, β₁, β₂", "1st-line: anaphylaxis\nAdjunct: refractory septic",
"IM 0.5mg (1:1000) for anaphylaxis; IV in ICU for refractory shock"],
["Dopamine", "DA, β₁, α₁ (dose-dependent)", "Rarely used now",
"Higher arrhythmia risk vs NE; 'renal dose' has no benefit"],
["Vasopressin", "V₁ (vasoconstriction)", "Adjunct in refractory septic shock",
"0.03–0.04 U/min; NE-sparing; no titration above this dose"],
["Dobutamine", "β₁ >> β₂ (inotrope/vasodilator)", "Cardiogenic shock (low CO, adequate preload)",
"↑ contractility, ↓ SVR; avoid if hypotensive without vasopressor"],
["Phenylephrine", "Pure α₁ (vasopressor)", "Anaesthesia-induced hypotension\nNeurogenic shock",
"No tachycardia; may ↓ CO by ↑ afterload — use cautiously"],
["Milrinone", "PDE-III inhibitor (inodilator)", "Cardiogenic shock, RV failure\nPost-cardiac surgery",
"↑ CO + ↓ PVR; caution — can cause hypotension; long half-life"],
],
col_widths=[3.2*cm, 3.5*cm, 4.2*cm, 6.6*cm]
))
story.append(sp(6))
story.append(H3("8d. Cause-Specific Interventions"))
story.append(make_table(
["Type", "Specific Intervention"],
[
["Cardiogenic shock (MI)", "Emergency PCI (target door-to-balloon <90 min); intra-aortic balloon pump (IABP); Impella; ECMO"],
["Tension pneumothorax", "IMMEDIATE needle decompression (2nd ICS MCL) → chest drain"],
["Cardiac tamponade", "Pericardiocentesis or surgical drainage (Beck's triad: ↓BP, ↑JVP, muffled heart sounds)"],
["Massive PE", "Anticoagulation (LMWH/UFH); systemic thrombolysis if haemodynamically unstable; surgical embolectomy"],
["Anaphylactic shock", "IM adrenaline 0.5mg (1:1000) FIRST-LINE; IV fluids; antihistamines; corticosteroids; salbutamol for bronchospasm"],
["Neurogenic shock", "IV fluids + vasopressors (NE/phenylephrine); atropine for bradycardia; early spinal stabilisation"],
["Septic shock", "30 mL/kg fluids + antibiotics within 1 hour + NE; source control; hydrocortisone if refractory"],
["Adrenal crisis", "Hydrocortisone 100 mg IV stat; 50% dextrose if hypoglycaemic; aggressive IV fluid resuscitation"],
],
col_widths=[3.8*cm, 13.7*cm]
))
story.append(sp(6))
story.append(H3("8e. Anaesthetic Considerations in the Shocked Patient"))
story.append(warn_box([
"⚠ INDUCTION OF ANAESTHESIA IN SHOCKED PATIENT = High-Risk Event",
" Vasodilation from induction agents on a vasoconsticted, volume-depleted patient can precipitate cardiac arrest.",
" All anaesthetic agents are myocardial depressants and vasodilators — REDUCE DOSES SUBSTANTIALLY.",
]))
story.append(sp(4))
story.append(make_table(
["Consideration", "Details"],
[
["Induction agent choice", "Ketamine preferred (maintains BP via catecholamine release; direct myocardial depressant at high doses — be aware)\nEtomidate acceptable (haemodynamic stability; but inhibits steroidogenesis — single dose acceptable for RSI)\nAVOID high-dose propofol/thiopentone in unresuscitated shock"],
["Regional/neuraxial anaesthesia", "Relative contraindication in unresuscitated haemorrhagic shock — sympathetic block worsens hypotension\nMay be used cautiously in partially-resuscitated septic shock with modified low-dose techniques"],
["Temperature management", "Active warming mandatory (forced air warming blanket, warmed IV fluids, warmed humidified gases)\nHypothermia worsens coagulopathy — target normothermia throughout"],
["Goal-directed therapy (GDT)", "Use oesophageal Doppler, arterial waveform analysis, or TOE to guide stroke volume optimisation\nAvoid both under- and over-resuscitation"],
["Damage Control Surgery (DCS)", "Abbreviated initial surgery (haemorrhage + contamination control only)\nPatient transferred to ICU for resuscitation before definitive repair\nIndicators: pH <7.2, temp <35°C, coagulopathy, haemodynamic instability"],
["Tranexamic acid (TXA)", "CRASH-2 trial: TXA within 3 hours of injury reduces mortality from haemorrhagic shock\n1g IV over 10 min, then 1g over 8 hours\nDo NOT give >3 hours after injury (increases thromboembolic risk)"],
],
col_widths=[4.5*cm, 13*cm]
))
story.append(sp(8))
# ─── SECTION 9 – MULTI-ORGAN FAILURE ───────────────────────────────
story.append(H1("9. COMPLICATIONS: MULTI-ORGAN FAILURE [2 marks]"))
story.append(sp(4))
story.append(P("Prolonged shock and ischaemia-reperfusion injury leads to <b>Multi-Organ Failure (MOF)</b>, "
"defined as simultaneous failure of two or more organ systems. Mortality ≈ 60%."))
story.append(sp(4))
story.append(make_table(
["Organ", "Manifestation", "Key Clinical Features"],
[
["Lung", "Acute Respiratory Distress Syndrome (ARDS)",
"PaO₂/FiO₂ <300; bilateral infiltrates; non-cardiogenic pulmonary oedema → mechanical ventilation"],
["Kidney", "Acute Kidney Injury (AKI)",
"Oliguria → anuria; ↑ creatinine; may require RRT (haemofiltration/dialysis)"],
["Liver", "Ischaemic hepatitis + coagulopathy",
"↑ Transaminases; ↑ bilirubin; ↓ clotting factors; 'shock liver'"],
["Heart", "Cardiovascular failure",
"Myocardial stunning from prolonged ischaemia; worsens shock"],
["Brain", "Encephalopathy / cerebral oedema",
"Confusion → coma; critical illness polyneuropathy"],
["Gut", "Ileus + bacterial translocation",
"Loss of gut barrier → portal bacteraemia → drives systemic inflammation; stress ulcers"],
["Haematological", "Disseminated intravascular coagulation (DIC)",
"Consumption of clotting factors + platelets → uncontrolled bleeding + microvascular thrombosis"],
],
col_widths=[2.8*cm, 4.7*cm, 10*cm]
))
story.append(sp(4))
story.append(warn_box([
"⚠ There is NO specific treatment for established MOF — management is organ SUPPORT.",
" The ONLY effective strategy is PREVENTION through early, aggressive identification and reversal of shock.",
]))
story.append(sp(8))
# ─── SECTION 10 – RESUSCITATION ENDPOINTS ──────────────────────────
story.append(H1("10. END-POINTS OF RESUSCITATION [1 mark]"))
story.append(sp(4))
story.append(P("Traditional end-points (normalisation of BP, HR, urine output) can mask "
"<b>occult hypoperfusion</b>. Preferred metabolic end-points:"))
story.append(sp(4))
story.append(make_table(
["End-Point", "Target", "Notes"],
[
["Serum lactate clearance", ">10% per 2 hours; final <2 mmol/L",
"Best single marker of resuscitation adequacy; serial measurement essential"],
["Base deficit (ABG)", "< –2 mEq/L (normalisation)",
"Correlates with degree of shock and prognosis"],
["ScvO₂ (central venous)", ">70%", "Indicates balance between O₂ delivery and demand"],
["SvO₂ (mixed venous, PAC)", ">65%", "More accurate but invasive; used in complex shock"],
["Urine output", ">0.5 mL/kg/hr (adult)", "Late marker; preserved until severe hypoperfusion"],
["Pulse pressure variation (PPV)", "<13% predicts fluid non-responsiveness",
"Only valid in sinus rhythm, controlled ventilation, tidal vol ≥8 mL/kg"],
["Gastric tonometry / NIRS", "Regional markers", "Detect gut ischaemia before systemic decompensation"],
],
col_widths=[4.5*cm, 4.5*cm, 8.5*cm]
))
story.append(sp(4))
story.append(warn_box([
"⚠ Over-Resuscitation is Harmful: abdominal compartment syndrome, pulmonary oedema,",
" dilutional coagulopathy, worsened organ function.",
" Use dynamic preload predictors (PPV, SVV, passive leg raise) — NOT static CVP/PCWP alone.",
]))
story.append(sp(8))
# ─── SUMMARY BOX ────────────────────────────────────────────────────
story.append(H1("SUMMARY"))
story.append(sp(4))
story.append(key_box([
"✅ Shock = inadequate tissue DO₂ relative to VO₂ → anaerobic metabolism → lactic acidosis → cell death",
"✅ Classify: Hypovolaemic | Cardiogenic | Obstructive | Distributive | Endocrine",
"✅ Pathophysiology: cellular → microvascular → systemic cardiovascular/renal/endocrine/respiratory",
"✅ ATLS Classes I–IV based on estimated blood loss (Class I: <15%; Class IV: >40%)",
"✅ BP is a LATE sign — pulse pressure narrows early; BP only falls after 30–40% volume loss",
"✅ Haemorrhagic shock: Permissive hypotension + 1:1:1 resuscitation + TXA within 3 hours",
"✅ Septic shock: 30 mL/kg crystalloid + antibiotics within 1h + norepinephrine (MAP ≥65)",
"✅ Cardiogenic shock: inotropes + early revascularisation + mechanical support (IABP/ECMO)",
"✅ Anaesthetic induction: use ketamine/etomidate; reduce doses; maintain normothermia",
"✅ Resuscitation endpoints: lactate clearance + base deficit + ScvO₂ + urine output",
"✅ MOF (≥2 organ failures) = 60% mortality — PREVENT by early, aggressive shock reversal",
]))
story.append(sp(6))
# ─── REFERENCES ─────────────────────────────────────────────────────
story.append(rule(BORDER_GREY, 0.6))
story.append(Paragraph("Key References", ParagraphStyle("rh", fontName="Helvetica-Bold",
fontSize=9, textColor=DARK_BLUE, spaceBefore=4, spaceAfter=2)))
for ref in [
"1. Miller RD et al. Miller's Anesthesia, 10th Edition. Elsevier, 2023. Chapter 75.",
"2. Williams NS et al. Bailey and Love's Short Practice of Surgery, 28th Edition. CRC Press, 2023. Chapter 2.",
"3. Townsend CM et al. Sabiston Textbook of Surgery, 23rd Edition. Elsevier, 2022. Chapter 33.",
"4. Evans L et al. Surviving Sepsis Campaign: International Guidelines for Management of Sepsis and Septic Shock 2021. Crit Care Med. 2021.",
"5. CRASH-2 trial collaborators. Effects of tranexamic acid on death, vascular occlusive events, and blood transfusion in trauma patients. Lancet. 2010;376:23–32.",
"6. American College of Surgeons. ATLS: Advanced Trauma Life Support, 10th Edition. ACS, 2018.",
]:
story.append(Paragraph(ref, styles["ref"]))
story.append(sp(6))
story.append(Paragraph("Orris Medical Education · Postgraduate Anaesthesia Series · 2026",
ParagraphStyle("footer", fontName="Helvetica-Oblique", fontSize=7.5,
textColor=HexColor("#aab4c0"), alignment=TA_CENTER)))
# ─── BUILD ─────────────────────────────────────────────────────────
doc.build(story)
print("PDF built successfully!")
cd /tmp/workspace/shock-notes && python3 build_pdf.py 2>&1
ls -lh /tmp/workspace/shock-notes/Shock_PG_Anaesthesia_Notes.pdf
Shock PG Anaesthesia Notes
PDF Document · PDF