Massive blood transfusion and blood components for 30 marks Question MD anaesthesia exam
| Step | Time | Purpose |
|---|---|---|
| Blood grouping (ABO + Rh) | ~15 min | Determines ABO and Rh(D) type |
| Antibody screen | 45-60 min | Detects unexpected antibodies to minor RBC antigens |
| Crossmatch (electronic/computer) | Rapid | For patients with negative antibody screen and ≥2 previous samples in system |
| Full serologic crossmatch | Up to several hours | Required when antibody screen is positive; incubation at 37°C + anti-human globulin (Coombs reagent) |
| Emergency release | Immediate | Type O Rh-negative PRBCs without testing |
| Type-specific uncrossmatched | ~15 min | ABO/Rh typed only |
| Reaction | Mechanism | Features | Management |
|---|---|---|---|
| Acute Haemolytic (AHTR) | ABO incompatibility (usually clerical error); intravascular haemolysis | Fever, chills, hypotension, back/loin pain, haemoglobinuria, DIC, impending doom sensation | Stop immediately, maintain IV access, vigorous crystalloid, vasopressors, maintain UO 1-2 mL/kg/hr, send blood/urine samples + DAT (Coombs), treat DIC |
| Febrile Non-Haemolytic (FNHTR) | Anti-leukocyte antibodies + cytokines from storage lesion | Temperature rise ≥1°C, rigors, chills; NO haemolysis | Stop, treat as AHTR until haemolysis excluded; give paracetamol; use leukoreduced products in future; incidence reduced 50-93% with leucoreduction |
| Minor Allergic | Antibody-mediated response to donor plasma proteins | Urticaria, pruritus; 1-3% of transfusions | Stop, antihistamine ± steroid; may resume if only cutaneous |
| Anaphylaxis | Often idiopathic; IgA-deficient patients with anti-IgA; 1:20,000-50,000 | Hypotension, angioedema, bronchospasm, laryngospasm | Stop immediately, adrenaline 0.3-0.5 mg SC, steroids, antihistamines, bronchodilators; use washed products in future |
| TRALI | Donor antibodies (anti-HLA or anti-neutrophil) activate recipient neutrophils in lungs | Non-cardiogenic pulmonary oedema within 6 hours; fever, hypotension, hypoxia, bilateral infiltrates; NOT volume-related | Stop, supportive care (oxygen, ventilation); NO diuretics; resolves 48-96 hours |
| TACO | Volume overload; cardiogenic pulmonary oedema | Dyspnoea, hypertension, tachycardia, raised JVP; raised BNP; occurs during/after transfusion | Stop/slow transfusion, diuretics, sit upright, CPAP/BiPAP; distinguish from TRALI |
| Bacterial contamination | Faulty storage; platelets at higher risk (room temperature storage) | Septic shock, rigors, high fever | Stop, blood cultures (donor unit + patient), broad-spectrum antibiotics, supportive |
| Complication | Mechanism | Management |
|---|---|---|
| Dilutional Coagulopathy | Loss + dilution of clotting factors and platelets | Balanced 1:1:1 resuscitation, FFP, cryoprecipitate for fibrinogen, TXA |
| Hypothermia | Cold stored products (PRBCs stored at 1-6°C); reduces clotting factor activity | Blood warmers, IV fluid warmers, forced-air warming blankets, warm environment |
| Hypocalcaemia (Citrate Toxicity) | Citrate preservative chelates ionised calcium; hepatic metabolism impaired at high infusion rates | IV calcium gluconate or CaCl₂; monitor ionised Ca²⁺; occurs when transfusion rate >100 mL/min |
| Hyperkalaemia | Stored blood releases K⁺ (storage lesion); older units especially | ECG monitoring, treat with calcium, insulin-dextrose, bicarbonate |
| Hypokalaemia | As citrate is metabolised to bicarbonate, K⁺ shifts intracellular | Monitor and replace |
| Metabolic alkalosis | Citrate → bicarbonate metabolism | Usually self-limiting |
| Acidosis | Lactic acidosis from tissue hypoperfusion + acidic preservatives | Correct underlying haemorrhage and hypoperfusion |
| TRALI / TACO | As above - risk increases proportionally with volume | As above |
| DIC | Massive haemorrhage → consumption coagulopathy, tissue factor release | Treat underlying cause, cryoprecipitate, FFP, platelets |
| Air embolism | Rapid infusion via pressure bags, inadvertent air entry | Prevention; Trendelenburg position, aspirate air, supportive |
| Thrombophlebitis | Local vessel injury | Use large-bore IV, change sites |
| Clinical Setting | Transfusion Trigger (Hb) |
|---|---|
| Stable, asymptomatic (ICU) | <7 g/dL (restrictive strategy equivalent to liberal in most patients) |
| Cardiac disease (ACS, post-cardiac surgery) | <8-10 g/dL |
| Active GI bleed / haemodynamic instability | Clinical judgement; not lab-based |
| Perioperative (before surgery) | <8 g/dL (or symptomatic) |
| Chronic anaemia (e.g., thalassaemia) | Maintain Hb ~9-10 g/dL |
| Acute haemorrhage | Transfuse based on clinical blood loss, not Hb |
| Component | Volume | Key Contents | Storage | Main Indication |
|---|---|---|---|---|
| PRBCs | 250 mL | RBCs, Hb | 1-6°C, 35-42 days | Anaemia, haemorrhage |
| FFP | 200-250 mL | All clotting factors | -18°C, 12 months | Coagulopathy, massive transfusion |
| Platelets | 55-300 mL | Platelets | 20-24°C, 5-7 days | Thrombocytopaenia, platelet dysfunction |
| Cryoprecipitate | 5-20 mL | Fibrinogen, F.VIII, F.XIII, vWF | -18°C, 12 months | Hypofibrinogenaemia, DIC |
| PCC | Variable | Factors II, VII, IX, X (4-factor) | Lyophilised | Warfarin reversal |
| Whole blood | 450 mL | All components | 1-6°C, 21-35 days | Haemorrhagic shock (military/DCR) |
Make PDF
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
mkdir -p /home/daytona/workspace/mbt-pdf && python3 -c "from reportlab.lib import colors; print('reportlab ok')"
~/mbt-pdf/generate_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, KeepTogether, PageBreak)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem
OUTPUT = "/home/daytona/workspace/mbt-pdf/Massive_Blood_Transfusion_MD_Anaesthesia.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Massive Blood Transfusion and Blood Components",
author="MD Anaesthesia Exam Answer",
)
W = A4[0] - 4*cm # usable width
# ── Styles ──────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2e6da4")
LIGHT_BLUE = colors.HexColor("#dce9f5")
PALE_GREY = colors.HexColor("#f5f5f5")
GOLD = colors.HexColor("#c9843a")
RED = colors.HexColor("#c0392b")
BORDER = colors.HexColor("#aac4de")
title_style = ParagraphStyle("Title2", parent=base["Normal"],
fontSize=18, leading=22, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=4)
subtitle_style = ParagraphStyle("Subtitle2", parent=base["Normal"],
fontSize=11, leading=14, textColor=colors.white,
fontName="Helvetica", alignment=TA_CENTER)
h1 = ParagraphStyle("H1", parent=base["Normal"],
fontSize=13, leading=16, textColor=colors.white,
fontName="Helvetica-Bold", spaceAfter=4, spaceBefore=12,
backColor=DARK_BLUE, leftIndent=-4, rightIndent=-4,
borderPad=(4, 6, 4, 6))
h2 = ParagraphStyle("H2", parent=base["Normal"],
fontSize=11, leading=14, textColor=DARK_BLUE,
fontName="Helvetica-Bold", spaceAfter=3, spaceBefore=8,
borderPad=2)
h3 = ParagraphStyle("H3", parent=base["Normal"],
fontSize=10, leading=13, textColor=MID_BLUE,
fontName="Helvetica-Bold", spaceAfter=2, spaceBefore=5)
body = ParagraphStyle("Body", parent=base["Normal"],
fontSize=9, leading=13, textColor=colors.HexColor("#222222"),
fontName="Helvetica", spaceAfter=3, alignment=TA_JUSTIFY)
bullet = ParagraphStyle("Bullet", parent=body,
leftIndent=14, bulletIndent=4, spaceAfter=2)
bold_body = ParagraphStyle("BoldBody", parent=body, fontName="Helvetica-Bold")
note_style = ParagraphStyle("Note", parent=body,
backColor=colors.HexColor("#fffbe6"), leftIndent=8, rightIndent=8,
borderPad=4, fontSize=8.5, textColor=colors.HexColor("#5a4000"))
def H1(text):
return [
Spacer(1, 6),
Table([[Paragraph(text, title_style)]],
colWidths=[W],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("ROUNDEDCORNERS", [4]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
])),
Spacer(1, 4),
]
def H2(text):
return [
Spacer(1, 4),
Table([[Paragraph(text, ParagraphStyle("h2t", parent=h2,
textColor=colors.white, fontSize=10, fontName="Helvetica-Bold"))]],
colWidths=[W],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), MID_BLUE),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
])),
Spacer(1, 3),
]
def H3(text):
return [Paragraph(f'<font color="#2e6da4"><b>{text}</b></font>', body), Spacer(1,1)]
def B(text): return f"<b>{text}</b>"
def I(text): return f"<i>{text}</i>"
def bullet_list(items):
rows = []
for item in items:
rows.append(Paragraph(f"• {item}", bullet))
return rows
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if not col_widths:
col_widths = [W / len(headers)] * len(headers)
hdr_style = ParagraphStyle("TH", parent=body,
fontName="Helvetica-Bold", fontSize=8.5, textColor=colors.white, alignment=TA_CENTER)
cell_style = ParagraphStyle("TD", parent=body, fontSize=8.5, alignment=TA_LEFT)
table_data = []
for ri, row in enumerate(data):
r = []
for ci, cell in enumerate(row):
s = hdr_style if ri == 0 else cell_style
r.append(Paragraph(str(cell), s))
table_data.append(r)
t = Table(table_data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.white, LIGHT_BLUE]),
("GRID", (0,0), (-1,-1), 0.4, BORDER),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
return [t, Spacer(1, 6)]
# ── Content ──────────────────────────────────────────────────────────────────
story = []
# Cover banner
story.append(Table(
[[Paragraph("MASSIVE BLOOD TRANSFUSION", title_style)],
[Paragraph("AND BLOOD COMPONENTS", title_style)],
[Paragraph("MD Anaesthesia Examination Answer | 30 Marks", subtitle_style)]],
colWidths=[W],
style=TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
])
))
story.append(Spacer(1, 10))
story.append(HRFlowable(width=W, thickness=2, color=GOLD))
story.append(Spacer(1, 8))
# ═══════════════════════════════════════════════════════
# SECTION I – BLOOD COMPONENTS
# ═══════════════════════════════════════════════════════
story += H1("I. BLOOD COMPONENTS — TYPES AND CHARACTERISTICS [8 Marks]")
# 1. PRBCs
story += H2("1. Packed Red Blood Cells (PRBCs)")
story += bullet_list([
f"{B('Volume:')} ~250 mL per unit; haematocrit 55–80%",
f"{B('Storage:')} 1–6°C; shelf life 35–42 days (depends on preservative: CPDA-1, AS-3, etc.)",
f"{B('Effect:')} 1 unit ↑ Hb ~1 g/dL and HCT ~3% in average adult; 10–15 mL/kg ↑ Hb 2–3 g/dL in children",
f"{B('Transfusion time:')} 60–90 min stable; never exceed 4 hours (bacterial growth risk)",
f"{B('Universal donor:')} Type O Rh-negative | {B('Universal recipient:')} Type AB",
])
story += H3("Special PRBC Preparations")
prbc_table = make_table(
["Preparation", "Method", "Indication"],
[
["Leukocyte-reduced", "70–85% WBCs removed", "↓ FNHTR, HLA sensitisation, CMV transmission"],
["Irradiated", "Gamma/X-ray irradiation", "Prevents TA-GvHD; immunocompromised, BMT, IUT"],
["Washed", "Plasma proteins removed", "IgA deficiency, recurrent severe allergic reactions"],
["Frozen", "Glycerol cryoprotection", "Rare blood groups, autologous storage"],
],
col_widths=[W*0.22, W*0.30, W*0.48]
)
story += prbc_table
# 2. FFP
story += H2("2. Fresh Frozen Plasma (FFP)")
story += bullet_list([
f"{B('Volume:')} 200–250 mL per unit",
f"{B('Contents:')} ALL coagulation factors (I, II, V, VII, VIII, IX, X, XI, XIII), fibrinogen, albumin, protein C & S, antithrombin",
f"{B('Preparation:')} Frozen within 8 hours of collection; stored ≤ −18°C; shelf life 12 months (24 months at −65°C)",
f"{B('Thawing:')} At 37°C; use within 24 hours once thawed",
f"{B('Dosing:')} 10–15 mL/kg; 1 unit = clotting activity in 1 mL FFP (per clotting factor)",
f"{B('ABO compatibility:')} Required; Rh typing not required",
])
story += H3("Indications for FFP")
story += bullet_list([
"Multiple coagulation factor deficiency (liver disease, DIC, massive transfusion)",
"Reversal of warfarin when PCC is unavailable",
"Thrombotic thrombocytopenic purpura (TTP) — plasma exchange",
"Isolated factor deficiencies when specific concentrates are unavailable",
])
# 3. Platelets
story += H2("3. Platelets")
story += bullet_list([
f"{B('Volume:')} ~55 mL (whole-blood derived) or 200–300 mL (apheresis/single-donor)",
f"{B('Storage:')} 20–24°C on continuous agitation; shelf life 5–7 days",
f"1 apheresis unit ≡ ~6 whole-blood-derived pooled units",
f"{B('Effect:')} 1 unit raises platelet count by ~5,000–10,000/µL in average adult",
f"Rh-negative platelets preferred for Rh-negative premenopausal women (RBC contamination risk)",
f"Leukocyte-reduced platelets reduce HLA sensitisation",
])
story += H3("Platelet Transfusion Thresholds")
story += make_table(
["Clinical Situation", "Platelet Threshold"],
[
["Prophylactic (no bleeding, no procedure)", "<10,000/µL"],
["Active bleeding or invasive procedure", "<50,000/µL"],
["CNS or ophthalmic surgery", "<100,000/µL"],
["Platelet function disorder with clinical bleeding", "Regardless of count"],
],
col_widths=[W*0.65, W*0.35]
)
# 4. Cryoprecipitate
story += H2("4. Cryoprecipitate")
story += bullet_list([
f"{B('Preparation:')} Slowly thawed rapidly-frozen single-donor plasma; precipitate collected and refrozen",
f"{B('Volume:')} 5–20 mL per unit",
f"{B('Contents per unit (AABB minimum):')} Fibrinogen ≥150 mg (assumes ~250 mg/unit), Factor VIII ≥80 IU, also Factor XIII, vWF, fibronectin",
f"{B('Adult dose:')} Pool of up to 10 units → raises fibrinogen ~50–70 mg/dL",
f"{B('Dosing formula:')} [Target fibrinogen − Initial fibrinogen] × Patient plasma volume ÷ 250 mg/unit",
f"{B('ABO compatibility:')} Preferred but not strictly required in adults",
])
story += H3("Indications")
story += bullet_list([
f"Hypofibrinogenaemia (fibrinogen <1.5 g/L with active bleeding) — {B('PRIMARY indication')}",
"DIC with fibrinogen deficiency",
"Congenital afibrinogenaemia or dysfibrinogenaemia",
"Haemophilia A and von Willebrand disease (when recombinant concentrates unavailable)",
f"{B('NOT useful')} in Haemophilia B (no Factor IX content)",
])
# 5. PCC
story += H2("5. Prothrombin Complex Concentrate (PCC)")
story += bullet_list([
f"{B('3-factor PCC:')} Factors II, IX, X (lacks significant Factor VII)",
f"{B('4-factor PCC:')} Factors II, VII, IX, X + Protein C and S — {B('preferred')} for warfarin reversal",
f"{B('Advantage over FFP:')} Rapid INR normalisation to <1.5 within 1 hour; no large volume load",
f"{B('Always co-administer:')} Vitamin K 10 mg IV slow infusion (1 mg/min) for sustained reversal",
"Indication: Life-threatening warfarin-associated haemorrhage, intracranial haemorrhage",
])
# 6. Whole Blood
story += H2("6. Whole Blood / Low-Titer O Universal Whole Blood (LTOWB)")
story += bullet_list([
"All components in physiologic ratio; simplifies logistics in damage-control resuscitation",
f"{B('LTOWB:')} Type O donors with anti-A & anti-B titer <256 (saline method)",
"Renewed interest in military and trauma settings; safe when ≤4 units given to non-group O recipients",
"Standard in wartime settings for decades; increasing civilian adoption",
])
story.append(Spacer(1, 6))
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
story.append(Spacer(1, 6))
# ═══════════════════════════════════════════════════════
# SECTION II – PRE-TRANSFUSION TESTING
# ═══════════════════════════════════════════════════════
story += H1("II. PRE-TRANSFUSION TESTING [3 Marks]")
story += make_table(
["Step", "Time Required", "Purpose"],
[
["Emergency release (Type O Rh-neg)", "Immediate", "Life-threatening haemorrhage, no testing possible"],
["ABO + Rh(D) blood grouping", "~15 min", "Determines patient's blood type"],
["Antibody screen", "45–60 min", "Detects unexpected antibodies to minor RBC antigens"],
["Computer/electronic crossmatch", "Rapid", "For patients with negative screen + ≥2 previous samples in system"],
["Full serologic crossmatch", "Hours–days", "Required when antibody screen is positive; recipient serum + donor RBCs incubated at 37°C + Coombs reagent"],
],
col_widths=[W*0.30, W*0.18, W*0.52]
)
story += bullet_list([
f"{B('Coombs reagent')} = anti-human globulin; promotes agglutination of sensitised RBCs",
f"Type O Rh-positive: acceptable in males and post-menopausal women if O Rh-negative unavailable",
f"~20% of Rh-negative patients transfused 1 unit Rh-positive will develop anti-Rh(D) antibodies",
])
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
# ═══════════════════════════════════════════════════════
# SECTION III – MASSIVE BLOOD TRANSFUSION
# ═══════════════════════════════════════════════════════
story += H1("III. MASSIVE BLOOD TRANSFUSION (MBT) [10 Marks]")
story += H2("Definition")
story += make_table(
["Definition Type", "Criteria"],
[
["Classical", "Transfusion of ≥10 units PRBCs within 24 hours (≈1 circulating blood volume, ~70 mL/kg)"],
["Operational/Practical", "≥3 units PRBCs/hour OR ≥4 blood components in 30 minutes"],
["Alternative", "Transfusion of >50% circulating blood volume in 3 hours"],
],
col_widths=[W*0.28, W*0.72]
)
story += H2("Indications for Massive Transfusion")
story += bullet_list([
"Major trauma with haemorrhagic shock",
"Ruptured aortic aneurysm",
"Massive gastrointestinal haemorrhage",
"Obstetric catastrophe (postpartum haemorrhage, placenta praevia/accreta)",
"Major intraoperative haemorrhage (hepatic, cardiac, vascular, spinal surgery)",
])
story += H2("Massive Transfusion Protocol (MTP)")
story += bullet_list([
f"{B('Purpose:')} Streamline component ordering, pre-define ratios, issue standardised packs without waiting for repeated orders",
f"{B('Activation:')} Clinical decision (shock index, ABC score, clinical judgement); direct blood bank communication is critical",
f"{B('Typical pack contents:')} 6 units PRBCs + 6 units FFP + 1 apheresis platelet unit (≡ 6 whole-blood platelet units)",
f"{B('Ratio:')} 1:1:1 (PRBCs : FFP : Platelets) — current recommendation",
f"{B('PROPPR Trial (multicentre RCT):')} Compared 1:1:1 vs 2:1:1 — no difference in 24-hour or 30-day mortality; fewer deaths from exsanguination at 24 hours with 1:1:1",
f"After first pack issued, blood bank immediately assembles next pack; continues until patient stabilisation or death",
f"{B('Communication:')} Critical between clinical team and blood bank throughout",
])
story += H2("Damage Control Resuscitation (DCR) Principles")
story += make_table(
["Principle", "Details"],
[
[B("Permissive hypotension"), "Target SBP 80–90 mmHg (MAP ~50 mmHg) until surgical haemorrhage control; avoid in TBI/spinal cord injury"],
[B("Haemostatic resuscitation"), "PRBCs + FFP + Platelets in 1:1:1 ratio; recapitulates whole blood"],
[B("Minimise crystalloids/colloids"), "Prevent dilutional coagulopathy, acidosis, and hypothermia"],
[B("Tranexamic acid (TXA)"), "Within 3 hours of injury; 1 g IV over 10 min, then 1 g over 8 hours; antifibrinolytic — inhibits plasminogen activation"],
[B("Warm all products/fluids"), "Blood warmers, IV fluid warmers, forced-air warming blankets"],
],
col_widths=[W*0.28, W*0.72]
)
story += H2("The Lethal Triad of Trauma")
story.append(Paragraph(
"Each element of the lethal triad potentiates the others — damage control surgery and DCR aim to break this cycle:",
body))
story += make_table(
["Component", "Mechanism of Harm"],
[
[B("Hypothermia"), "↓ Enzymatic activity of coagulation cascade; core temperature <35°C significantly impairs clotting"],
[B("Acidosis"), "Inhibits clotting factor function; pH <7.1 reduces factor activity to <50%"],
[B("Coagulopathy"), "Ongoing haemorrhage perpetuates hypothermia and acidosis; dilutional + consumptive"],
],
col_widths=[W*0.22, W*0.78]
)
story += H2("Goal-Directed Therapy — Viscoelastic Testing (VET)")
story += bullet_list([
f"{B('TEG (Thromboelastography)')} and {B('ROTEM (Rotational Thromboelastometry)')}",
"Provide real-time global assessment of the entire coagulation cascade (clot formation to fibrinolysis)",
"Guide targeted component therapy — identify specific deficiency (fibrinogen, clotting factors, platelets, hyperfibrinolysis)",
"One trauma study showed lower risk of death with TEG-guided transfusion vs. conventional coagulation parameters",
"A 2015 systematic review could not show superiority over standard coagulation studies; further evidence ongoing",
])
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
# ═══════════════════════════════════════════════════════
# SECTION IV – COMPLICATIONS
# ═══════════════════════════════════════════════════════
story += H1("IV. COMPLICATIONS OF BLOOD TRANSFUSION [7 Marks]")
story += H2("A. Acute Transfusion Reactions (during or within 24 hours)")
story += make_table(
["Reaction", "Mechanism", "Clinical Features", "Management"],
[
[B("Acute Haemolytic (AHTR)"),
"ABO incompatibility (usually clerical error); intravascular haemolysis",
"Fever, chills, hypotension, back/loin pain, haemoglobinuria, DIC, 'impending doom'",
"Stop immediately, vigorous crystalloid, maintain UO ≥1 mL/kg/hr, send DAT (Coombs), treat DIC"],
[B("Febrile Non-haemolytic (FNHTR)"),
"Anti-leukocyte antibodies + cytokines from stored products",
"Temp rise ≥1°C, rigors, chills; NO haemolysis; up to 300 per 10⁵ units",
"Stop, exclude haemolysis; paracetamol; use leukoreduced products future; leukoreduction ↓ by 50–93%"],
[B("Minor Allergic"),
"Antibody response to donor plasma proteins; 1–3% of transfusions",
"Urticaria, pruritus, mild wheeze",
"Stop, antihistamine ± steroid; may resume if limited to skin"],
[B("Anaphylaxis"),
"Idiopathic; IgA-deficient patients with anti-IgA; 1:20,000–50,000",
"Hypotension, angioedema, bronchospasm, laryngospasm; onset seconds–minutes",
"Stop immediately; adrenaline 0.3–0.5 mg SC; steroids, antihistamines, bronchodilators; washed products future"],
[B("TRALI"),
"Donor anti-HLA/anti-neutrophil antibodies activate recipient neutrophils in lungs",
"Non-cardiogenic pulm. oedema within 6 h; fever, hypotension, hypoxia, bilateral infiltrates; NOT volume-related",
"Stop, supportive (O₂, ventilation); NO diuretics; resolves 48–96 h"],
[B("TACO"),
"Cardiogenic pulm. oedema; volume overload",
"Dyspnoea, hypertension, tachycardia, raised JVP, ↑BNP; pulm. oedema on CXR",
"Slow/stop transfusion, diuretics, sit upright, CPAP/BiPAP"],
[B("Bacterial sepsis"),
"Contaminated product; platelets highest risk (room temp storage)",
"High fever, rigors, septic shock during/shortly after transfusion",
"Stop, blood cultures (donor + patient), broad-spectrum antibiotics, supportive"],
],
col_widths=[W*0.18, W*0.22, W*0.30, W*0.30]
)
story += H3("Distinguishing TRALI vs TACO")
story += make_table(
["Feature", "TRALI", "TACO"],
[
["Mechanism", "Non-cardiogenic", "Cardiogenic"],
["Volume association", "NOT volume-related", "Proportional to volume transfused"],
["Blood pressure", "Hypotension", "Hypertension"],
["BNP", "Normal/low", "Elevated"],
["Fever", "Present", "Usually absent"],
["Treatment", "Supportive; NO diuretics", "Diuretics; CPAP/BiPAP"],
],
col_widths=[W*0.25, W*0.37, W*0.38]
)
story += H2("B. Delayed Transfusion Reactions (days to weeks)")
story += bullet_list([
f"{B('Delayed Haemolytic Reaction:')} Anamnestic antibody response; extravascular haemolysis; Hb fall 2–14 days post-transfusion; treat supportively",
f"{B('TA-GvHD:')} Rare but life-threatening (>90% fatal); donor T-lymphocytes attack recipient; immunocompromised/HLA-homozygous relative donors; prevented by {B('irradiation')} of cellular products",
f"{B('Post-transfusion purpura:')} Rare; anti-HPA-1a antibodies; severe thrombocytopaenia ~7–10 days; treat with IVIg",
f"{B('Alloimmunisation:')} Against RBC, HLA or platelet antigens; leads to crossmatch difficulties and platelet refractoriness",
f"{B('Iron overload:')} Multiple long-term transfusions (thalassaemia); each PRBC unit ~250 mg elemental iron; treat with chelation (desferrioxamine, deferasirox)",
])
story += H2("C. Infectious Complications")
story += bullet_list([
"Hepatitis B, Hepatitis C, HIV, CMV, HTLV, malaria",
"Bacterial infection: Yersinia enterocolitica in stored RBCs; gram-negative organisms in platelets",
"Risk minimised by stringent donor screening and nucleic acid testing (NAT)",
])
story += H2("D. Complications Specific to Massive Transfusion")
story += make_table(
["Complication", "Mechanism", "Management"],
[
[B("Dilutional Coagulopathy"),
"Loss + dilution of clotting factors and platelets with large volume replacement",
"Balanced 1:1:1 resuscitation; FFP; cryoprecipitate for fibrinogen; TXA"],
[B("Hypothermia"),
"Cold stored products (PRBCs at 1–6°C); reduces clotting enzyme activity",
"Blood warmers, IV fluid warmers, forced-air warming, warm environment"],
[B("Hypocalcaemia (Citrate toxicity)"),
"Citrate chelates ionised Ca²⁺; hepatic metabolism overwhelmed at high infusion rates (>100 mL/min)",
"Monitor ionised Ca²⁺; give IV calcium gluconate or CaCl₂"],
[B("Hyperkalaemia"),
"K⁺ leaks from stored RBCs (storage lesion); risk with older units",
"ECG monitoring; calcium, insulin-dextrose, bicarbonate"],
[B("Metabolic alkalosis"),
"Citrate metabolised to bicarbonate after transfusion",
"Usually self-limiting; monitor ABG"],
[B("Lactic acidosis"),
"Tissue hypoperfusion + acidic preservatives in stored blood",
"Correct haemorrhage; restore perfusion"],
[B("DIC"),
"Massive haemorrhage → consumption coagulopathy + tissue factor release",
"Treat underlying cause; cryoprecipitate, FFP, platelets"],
[B("TRALI / TACO"),
"As above; risk increases proportionally with volume",
"As above"],
],
col_widths=[W*0.25, W*0.38, W*0.37]
)
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
# ═══════════════════════════════════════════════════════
# SECTION V – MONITORING
# ═══════════════════════════════════════════════════════
story += H1("V. MONITORING DURING MASSIVE TRANSFUSION [2 Marks]")
story += make_table(
["Parameter", "Target / Purpose"],
[
[B("Haemoglobin / Haematocrit"), "Note: Hb lags behind acute blood loss; transfuse on clinical grounds not lab alone"],
[B("Platelet count"), "Maintain >50,000/µL active bleeding; >100,000/µL CNS/ophthalmic surgery"],
[B("PT, aPTT, INR, Fibrinogen"), "Fibrinogen target >1.5–2.0 g/L; guide FFP and cryoprecipitate therapy"],
[B("TEG / ROTEM"), "Real-time global coagulation; targeted component therapy"],
[B("Ionised calcium"), "Monitor and replace; prevent cardiac dysfunction and coagulopathy"],
[B("ABG + Lactate"), "Assess pH, base excess, K⁺, Na⁺, metabolic derangements, tissue perfusion"],
[B("Temperature"), "Continuous monitoring; institute warming measures aggressively"],
[B("Urine output"), "Maintain ≥1 mL/kg/hr; monitor for haemolysis (haemoglobinuria) and renal perfusion"],
[B("Chest X-ray + BNP"), "Detect TRALI (normal BNP) vs TACO (elevated BNP)"],
],
col_widths=[W*0.32, W*0.68]
)
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
# ═══════════════════════════════════════════════════════
# SECTION VI – TRANSFUSION TRIGGERS
# ═══════════════════════════════════════════════════════
story += H1("VI. TRANSFUSION TRIGGERS AND THRESHOLDS [2 Marks]")
story += make_table(
["Clinical Setting", "Hb Trigger"],
[
["Stable/asymptomatic ICU patient (TRICC strategy)", "<7 g/dL (restrictive strategy)"],
["Cardiac disease (ACS, post-cardiac surgery)", "<8–10 g/dL"],
["Perioperative (before or after surgery)", "<8 g/dL or symptomatic"],
["Active haemorrhage / haemodynamic instability", "Clinical judgement; not lab-based"],
["Chronic anaemia (e.g., thalassaemia)", "Maintain Hb ~9–10 g/dL"],
["Sepsis (early resuscitation)", "Hb <7 g/dL after stabilisation"],
],
col_widths=[W*0.60, W*0.40]
)
story.append(Paragraph(
f"The {B('TRICC Trial')} supports a restrictive strategy (Hb trigger ~7 g/dL) in most hospitalised patients as non-inferior to a liberal strategy, with lower transfusion-related morbidity.",
note_style))
story.append(Spacer(1, 6))
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
# ═══════════════════════════════════════════════════════
# SECTION VII – AUTOLOGOUS CONSERVATION
# ═══════════════════════════════════════════════════════
story += H1("VII. BLOOD CONSERVATION STRATEGIES [1 Mark]")
story += bullet_list([
f"{B('Pre-operative autologous donation (PAD):')} Collect weeks before elective surgery; re-transfuse intraoperatively",
f"{B('Acute normovolaemic haemodilution (ANH):')} Withdraw blood immediately pre-surgery, replace with crystalloid; retransfuse at end of procedure",
f"{B('Cell salvage (intraoperative):')} Suction blood centrifuged, washed, reinfused; contraindicated in malignancy and bowel/infective contamination",
f"{B('Tranexamic acid (TXA):')} Lysine analogue; inhibits plasminogen activation (antifibrinolytic); 1 g IV over 10 min within 3 hours of trauma, then 1 g over 8 hours; reduces transfusion requirement",
f"{B('Erythropoietin (EPO):')} Pre-operative stimulation of erythropoiesis in selected patients",
])
story.append(HRFlowable(width=W, thickness=1, color=GOLD))
story.append(Spacer(1, 4))
# ═══════════════════════════════════════════════════════
# QUICK REFERENCE TABLE
# ═══════════════════════════════════════════════════════
story += H1("QUICK REFERENCE — BLOOD COMPONENTS AT A GLANCE")
story += make_table(
["Component", "Volume", "Key Contents", "Storage", "Main Indication"],
[
[B("PRBCs"), "~250 mL", "RBCs, Hb (HCT 55–80%)", "1–6°C, 35–42 days", "Anaemia, haemorrhage"],
[B("FFP"), "200–250 mL","All clotting factors, fibrinogen, albumin", "≤−18°C, 12 months", "Coagulopathy, massive transfusion"],
[B("Platelets"), "55–300 mL", "Platelets", "20–24°C, 5–7 days", "Thrombocytopaenia, platelet dysfunction"],
[B("Cryoprecipitate"),"5–20 mL","Fibrinogen, F.VIII, F.XIII, vWF", "≤−18°C, 12 months", "Hypofibrinogenaemia, DIC"],
[B("PCC (4-factor)"),"Variable", "Factors II, VII, IX, X + Protein C & S", "Lyophilised (room temp)","Warfarin reversal"],
[B("Whole blood"), "~450 mL", "All components (physiologic ratio)", "1–6°C, 21–35 days", "Haemorrhagic shock (DCR/military)"],
],
col_widths=[W*0.18, W*0.12, W*0.32, W*0.20, W*0.18]
)
# Footer
story.append(Spacer(1, 8))
story.append(HRFlowable(width=W, thickness=1, color=colors.HexColor("#aaaaaa")))
story.append(Spacer(1, 4))
story.append(Paragraph(
f"<font color='#555555' size='8'>{B('Sources:')} Rosen's Emergency Medicine 9e (Ch. 108) • Bailey & Love's Surgery 28e • "
"Tietz Textbook of Laboratory Medicine 7e (Ch. 92) • Tintinalli's Emergency Medicine • "
"Harrison's Principles of Internal Medicine 22e • Miller's Anesthesia 10e</font>",
ParagraphStyle("footer", parent=body, alignment=TA_CENTER, fontSize=7.5, textColor=colors.grey)
))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF written to: {OUTPUT}")
cd /home/daytona/workspace/mbt-pdf && python3 generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/mbt-pdf/Massive_Blood_Transfusion_MD_Anaesthesia.pdf
Massive Blood Transfusion MD Anaesthesia
PDF Document · PDF