LAQS 1.A) Define & Classify Shock. B)HYPOVOLAEMIC shock ****-pathophysiology, C/F, investigations & Management. (Haemorrhagic shock ****) (OR) SEPTIC SHOCK****-Pathophysiology, C/F& management. SAQS & VSAQs 1. Describe shock syndrome. 2. Write short note on SEPTIC SHOCK****. 3.A)classify Haemorrhage. B)Haemorrhagic shock****-pathophysiology, Management. 4. Measurement of Central venous Pressure. [CVP] 5.A)Systemic Inflammatory Response Syndrome [SIRS]*** B Multiple Organ Dysfunction Syndrome. [MODS] 6.A)Reactionary Haemorrhage *** B)Secondary Haemorrhage*** [3marks] Blood Transfusion SAQs & VSAQs 1. BLOOD TRANSFUSION: B)INDICATIONS**** A)Principles )Complications[Acute Transfusion rxn]***-3m 2. Blood Products (Fresh Frozen Plasma***, Cryoprecipitate) 3.Write short note on Massive blood transfusion & It's complications.**** 5. Blood group typing (BGT) & cross matching. 6.Hyperbaric Oxygen. [3marks] Answer all the questions and make a pdf for tomorrow exam
mkdir -p /tmp/workspace/surgery-exam && ls /tmp/workspace/
cat << 'PYEOF' > /tmp/workspace/surgery-exam/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, PageBreak from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY doc = SimpleDocTemplate( "/tmp/workspace/surgery-exam/Surgery_Exam_Notes.pdf", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle('Title', parent=styles['Title'], fontSize=18, textColor=colors.HexColor('#1a237e'), spaceAfter=6) h1_style = ParagraphStyle('H1', parent=styles['Heading1'], fontSize=14, textColor=colors.HexColor('#1565c0'), spaceBefore=12, spaceAfter=4, borderPad=4) h2_style = ParagraphStyle('H2', parent=styles['Heading2'], fontSize=12, textColor=colors.HexColor('#0277bd'), spaceBefore=10, spaceAfter=3) h3_style = ParagraphStyle('H3', parent=styles['Heading3'], fontSize=11, textColor=colors.HexColor('#01579b'), spaceBefore=8, spaceAfter=2) body_style = ParagraphStyle('Body', parent=styles['Normal'], fontSize=10, leading=14, spaceAfter=4, alignment=TA_JUSTIFY) bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'], fontSize=10, leading=13, leftIndent=15, spaceAfter=2) sub_bullet_style = ParagraphStyle('SubBullet', parent=styles['Normal'], fontSize=10, leading=13, leftIndent=28, spaceAfter=2) important_style = ParagraphStyle('Important', parent=styles['Normal'], fontSize=10, leading=14, backColor=colors.HexColor('#fff9c4'), borderPad=4, spaceAfter=4, alignment=TA_JUSTIFY) table_header_style = ParagraphStyle('TableHeader', parent=styles['Normal'], fontSize=9, textColor=colors.white, fontName='Helvetica-Bold') table_body_style = ParagraphStyle('TableBody', parent=styles['Normal'], fontSize=9, leading=12) def B(text): return f"<b>{text}</b>" def I(text): return f"<i>{text}</i>" story = [] # ============================================================ # COVER PAGE # ============================================================ story.append(Spacer(1, 2*cm)) story.append(Paragraph("SURGERY EXAM PREPARATION NOTES", title_style)) story.append(Paragraph("SHOCK & BLOOD TRANSFUSION", ParagraphStyle('sub', parent=styles['Title'], fontSize=15, textColor=colors.HexColor('#37474f'), spaceAfter=4))) story.append(Spacer(1, 0.5*cm)) story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1565c0'))) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("Comprehensive Answers to All LAQs, SAQs & VSAQs", ParagraphStyle('sub2', parent=styles['Normal'], fontSize=12, textColor=colors.grey, alignment=TA_CENTER))) story.append(Paragraph("Date: July 27, 2026", ParagraphStyle('date', parent=styles['Normal'], fontSize=11, textColor=colors.grey, alignment=TA_CENTER, spaceAfter=4))) story.append(Spacer(1, 1*cm)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(PageBreak()) # ============================================================ # SECTION 1: SHOCK # ============================================================ story.append(Paragraph("SECTION 1: SHOCK", ParagraphStyle('SectionTitle', parent=styles['Heading1'], fontSize=16, textColor=colors.white, backColor=colors.HexColor('#1565c0'), spaceAfter=8, spaceBefore=4, borderPad=6))) story.append(Spacer(1, 0.3*cm)) # LAQ 1A: Define & Classify Shock story.append(Paragraph("LAQ 1A: DEFINITION AND CLASSIFICATION OF SHOCK", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("DEFINITION:"), h2_style)) story.append(Paragraph( "Shock is a <b>systemic state of low tissue perfusion that is inadequate for normal cellular respiration</b>. " "Cells are deprived of oxygen and switch from aerobic to anaerobic metabolism; if perfusion is not restored, " "cell death ensues. It may also be defined as a state of <b>acute circulatory failure</b> in which tissue " "oxygenation is insufficient to meet metabolic demands.", body_style)) story.append(Paragraph(B("CLASSIFICATION OF SHOCK:"), h2_style)) story.append(Paragraph("Shock is classified into <b>4 main types</b>:", body_style)) shock_data = [ [Paragraph(B("Type"), table_header_style), Paragraph(B("Mechanism"), table_header_style), Paragraph(B("Examples"), table_header_style)], [Paragraph("1. Hypovolaemic", table_body_style), Paragraph("Reduced circulating blood volume", table_body_style), Paragraph("Haemorrhage, burns, dehydration, plasma loss", table_body_style)], [Paragraph("2. Cardiogenic", table_body_style), Paragraph("Pump failure - heart unable to maintain CO", table_body_style), Paragraph("MI, arrhythmia, cardiac tamponade, tension pneumothorax", table_body_style)], [Paragraph("3. Distributive", table_body_style), Paragraph("Vasodilation - maldistribution of blood flow", table_body_style), Paragraph("Septic, anaphylactic, neurogenic shock", table_body_style)], [Paragraph("4. Obstructive", table_body_style), Paragraph("Obstruction to blood flow", table_body_style), Paragraph("Pulmonary embolism, tension pneumothorax, cardiac tamponade", table_body_style)], ] shock_table = Table(shock_data, colWidths=[4*cm, 6*cm, 6.5*cm]) shock_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1565c0')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e3f2fd'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ])) story.append(shock_table) story.append(Spacer(1, 0.4*cm)) story.append(Paragraph(B("Sub-classification of Hypovolaemic Shock:"), h3_style)) story.append(Paragraph("• <b>Haemorrhagic</b> (blood loss)", bullet_style)) story.append(Paragraph("• <b>Non-haemorrhagic</b> (plasma loss in burns, fluid loss in diarrhoea/vomiting, third space losses)", bullet_style)) story.append(Paragraph(B("Sub-classification of Distributive Shock:"), h3_style)) story.append(Paragraph("• <b>Septic shock</b> - most common distributive shock", bullet_style)) story.append(Paragraph("• <b>Anaphylactic shock</b> - IgE-mediated hypersensitivity", bullet_style)) story.append(Paragraph("• <b>Neurogenic shock</b> - loss of sympathetic tone (spinal injury)", bullet_style)) story.append(Spacer(1, 0.5*cm)) # LAQ 1B: Hypovolaemic / Haemorrhagic Shock story.append(Paragraph("LAQ 1B: HYPOVOLAEMIC SHOCK (HAEMORRHAGIC SHOCK)", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("PATHOPHYSIOLOGY:"), h2_style)) story.append(Paragraph( "Haemorrhagic shock results from acute loss of circulating blood volume. The pathophysiology occurs at three levels:", body_style)) story.append(Paragraph(B("1. Cellular Level:"), h3_style)) story.append(Paragraph( "As tissue perfusion decreases, cells are deprived of oxygen and switch from <b>aerobic to anaerobic metabolism</b>. " "The product of anaerobic respiration is <b>lactic acid</b>, leading to systemic metabolic acidosis. " "As glucose within cells is exhausted, anaerobic respiration ceases, causing failure of the <b>Na+/K+ pump</b>. " "Intracellular lysosomes release autodigestive enzymes, causing <b>cell lysis</b>. " "Intracellular contents (including potassium) are released into the bloodstream.", body_style)) story.append(Paragraph(B("2. Microvascular Level:"), h3_style)) story.append(Paragraph( "Tissue ischaemia activates immune and coagulation systems. " "Hypoxia and acidosis activate complement and prime leukocytes, generating <b>oxygen free radicals and cytokines</b>. " "These injure capillary endothelial cells, causing loss of integrity (\"leaky\" endothelium). " "Fluid leaks into interstitium, causing <b>tissue oedema</b> and worsening cellular hypoxia. " "In trauma, <b>Acute Traumatic Coagulopathy (ATC)</b> develops - up to 25% of trauma patients develop ATC " "within minutes of injury, associated with 4x increased mortality. ATC is characterised by systemic " "hyperfibrinolysis, low fibrinogen levels, and platelet dysfunction.", body_style)) story.append(Paragraph(B("3. Systemic Level:"), h3_style)) story.append(Paragraph(B("Cardiovascular:"), ParagraphStyle('inline_h', parent=styles['Normal'], fontSize=10, leading=14))) story.append(Paragraph( "As preload and afterload decrease, baroreceptors trigger compensatory <b>increased sympathetic activity</b> " "and catecholamine release, resulting in <b>tachycardia and systemic vasoconstriction</b>.", body_style)) story.append(Paragraph(B("Respiratory:"), ParagraphStyle('inline_h', parent=styles['Normal'], fontSize=10, leading=14))) story.append(Paragraph( "Metabolic acidosis increases respiratory rate and minute ventilation to excrete CO2 (compensatory <b>respiratory alkalosis</b>).", body_style)) story.append(Paragraph(B("Renal:"), ParagraphStyle('inline_h', parent=styles['Normal'], fontSize=10, leading=14))) story.append(Paragraph( "Decreased perfusion pressure reduces glomerular filtration → <b>reduced urine output</b>. " "Renin-angiotensin-aldosterone axis (RAAS) is stimulated → further vasoconstriction + Na/water retention. " "ADH release → further water retention.", body_style)) story.append(Paragraph(B("CLASSIFICATION OF HAEMORRHAGIC SHOCK (ATLS Classes):"), h2_style)) class_data = [ [Paragraph(B("Parameter"), table_header_style), Paragraph(B("Class I"), table_header_style), Paragraph(B("Class II"), table_header_style), Paragraph(B("Class III"), table_header_style), Paragraph(B("Class IV"), table_header_style)], [Paragraph("Blood loss (ml)", table_body_style), Paragraph("< 750", table_body_style), Paragraph("750-1500", table_body_style), Paragraph("1500-2000", table_body_style), Paragraph("> 2000", table_body_style)], [Paragraph("Blood loss (%)", table_body_style), Paragraph("< 15%", table_body_style), Paragraph("15-30%", table_body_style), Paragraph("30-40%", table_body_style), Paragraph("> 40%", table_body_style)], [Paragraph("Pulse rate", table_body_style), Paragraph("< 100", table_body_style), Paragraph("100-120", table_body_style), Paragraph("120-140", table_body_style), Paragraph("> 140", table_body_style)], [Paragraph("BP", table_body_style), Paragraph("Normal", table_body_style), Paragraph("Normal", table_body_style), Paragraph("Decreased", table_body_style), Paragraph("Very low", table_body_style)], [Paragraph("Pulse pressure", table_body_style), Paragraph("Normal", table_body_style), Paragraph("Decreased", table_body_style), Paragraph("Decreased", table_body_style), Paragraph("Very low", table_body_style)], [Paragraph("RR (/min)", table_body_style), Paragraph("14-20", table_body_style), Paragraph("20-30", table_body_style), Paragraph("30-40", table_body_style), Paragraph("> 35", table_body_style)], [Paragraph("Urine output (ml/h)", table_body_style), Paragraph("> 30", table_body_style), Paragraph("20-30", table_body_style), Paragraph("5-15", table_body_style), Paragraph("Negligible", table_body_style)], [Paragraph("Mental status", table_body_style), Paragraph("Anxious", table_body_style), Paragraph("Mildly anxious", table_body_style), Paragraph("Confused", table_body_style), Paragraph("Lethargic/Comatose", table_body_style)], [Paragraph("Fluid replacement", table_body_style), Paragraph("Crystalloid", table_body_style), Paragraph("Crystalloid", table_body_style), Paragraph("Crystalloid + Blood", table_body_style), Paragraph("Blood + Crystalloid", table_body_style)], ] class_table = Table(class_data, colWidths=[3.5*cm, 3*cm, 3*cm, 3*cm, 3*cm]) class_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#d32f2f')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#ffebee'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ])) story.append(class_table) story.append(Spacer(1, 0.4*cm)) story.append(Paragraph(B("CLINICAL FEATURES:"), h2_style)) story.append(Paragraph(B("Early/Compensated Shock:"), h3_style)) story.append(Paragraph("• Tachycardia (earliest sign)", bullet_style)) story.append(Paragraph("• Increased respiratory rate", bullet_style)) story.append(Paragraph("• Pallor, cold and clammy skin", bullet_style)) story.append(Paragraph("• Anxiety, restlessness", bullet_style)) story.append(Paragraph("• Oliguria", bullet_style)) story.append(Paragraph("• Blood pressure may be normal (hypotension is a LATE sign)", bullet_style)) story.append(Paragraph(B("Late/Decompensated Shock:"), h3_style)) story.append(Paragraph("• Hypotension (SBP < 90 mmHg)", bullet_style)) story.append(Paragraph("• Tachycardia > 120 bpm", bullet_style)) story.append(Paragraph("• Cold extremities, mottled skin", bullet_style)) story.append(Paragraph("• Confusion, altered consciousness", bullet_style)) story.append(Paragraph("• Anuria", bullet_style)) story.append(Paragraph("• Air hunger (Kussmaul breathing) from metabolic acidosis", bullet_style)) story.append(Paragraph(B("Important Note:"), important_style)) story.append(Paragraph( "Hypotension is one of the LAST signs of shock. Children and fit young adults can maintain BP until " "the final stages by dramatic increases in stroke volume and vasoconstriction. " "Elderly hypertensive patients may appear normotensive while in shock. Beta-blockers may mask tachycardia.", body_style)) story.append(Paragraph(B("INVESTIGATIONS:"), h2_style)) story.append(Paragraph(B("Laboratory:"), h3_style)) story.append(Paragraph("• <b>FBC</b> - Hb, haematocrit (may be normal acutely as haemodilution takes time)", bullet_style)) story.append(Paragraph("• <b>ABG</b> - metabolic acidosis (low pH, low HCO3, high base deficit), high lactate", bullet_style)) story.append(Paragraph("• <b>Serum lactate</b> - most sensitive marker of tissue hypoperfusion (>2 mmol/L = significant)", bullet_style)) story.append(Paragraph("• <b>Urea and electrolytes</b> - renal function, hyperkalemia", bullet_style)) story.append(Paragraph("• <b>LFTs, clotting screen</b> (PT, APTT, fibrinogen) - DIC assessment", bullet_style)) story.append(Paragraph("• <b>Blood group and crossmatch</b> - urgent in haemorrhagic shock", bullet_style)) story.append(Paragraph("• <b>Blood glucose</b>", bullet_style)) story.append(Paragraph(B("Haemodynamic Monitoring:"), h3_style)) story.append(Paragraph("• <b>CVP</b> - low in hypovolaemic shock (normal 0-8 cmH2O)", bullet_style)) story.append(Paragraph("• <b>Urine output</b> - catheterise; target > 0.5 ml/kg/hr (best monitor of organ perfusion)", bullet_style)) story.append(Paragraph("• <b>Blood pressure monitoring</b> (arterial line in severe cases)", bullet_style)) story.append(Paragraph("• <b>Pulse oximetry</b>", bullet_style)) story.append(Paragraph(B("Imaging:"), h3_style)) story.append(Paragraph("• <b>FAST ultrasound</b> - detect intra-abdominal/pericardial haemorrhage at bedside", bullet_style)) story.append(Paragraph("• <b>Chest X-ray</b> - haemothorax, rib fractures", bullet_style)) story.append(Paragraph("• <b>CT scan</b> - once stabilised, to identify bleeding source", bullet_style)) story.append(Paragraph(B("MANAGEMENT:"), h2_style)) story.append(Paragraph( "The priority in haemorrhagic shock is <b>STOP THE BLEEDING</b>. Fluid resuscitation alone without " "haemorrhage control leads to physiological exhaustion (coagulopathy + acidosis + hypothermia = 'lethal triad') and death.", important_style)) story.append(Paragraph(B("1. Primary Survey (ABCDE):"), h3_style)) story.append(Paragraph("• <b>A</b>irway - secure airway, protect cervical spine", bullet_style)) story.append(Paragraph("• <b>B</b>reathing - supplemental O2 (high-flow, 15L/min via non-rebreather mask), ventilate if needed", bullet_style)) story.append(Paragraph("• <b>C</b>irculation - 2 large-bore IV cannulae (14-16G), control external haemorrhage (direct pressure)", bullet_style)) story.append(Paragraph("• <b>D</b>isability - GCS, pupils", bullet_style)) story.append(Paragraph("• <b>E</b>xposure - undress, examine fully, keep warm", bullet_style)) story.append(Paragraph(B("2. Haemostasis:"), h3_style)) story.append(Paragraph("• Direct pressure on external wounds", bullet_style)) story.append(Paragraph("• Tourniquet for limb haemorrhage", bullet_style)) story.append(Paragraph("• Surgical or interventional radiology control of internal haemorrhage", bullet_style)) story.append(Paragraph("• Tranexamic acid (TXA) - within 3 hours of injury (CRASH-2 trial): 1g IV over 10 min, then 1g over 8 hours", bullet_style)) story.append(Paragraph(B("3. Fluid Resuscitation:"), h3_style)) story.append(Paragraph("• <b>Warm crystalloid</b> (Normal saline or Hartmann's) as initial resuscitation fluid", bullet_style)) story.append(Paragraph("• <b>Target:</b> permissive hypotension in active bleeding (SBP 80-90 mmHg) until surgical control", bullet_style)) story.append(Paragraph("• <b>Blood products</b> in Class III/IV haemorrhage:", bullet_style)) story.append(Paragraph(" - Packed Red Blood Cells (PRBCs)", sub_bullet_style)) story.append(Paragraph(" - Fresh Frozen Plasma (FFP) - in 1:1:1 ratio with PRBCs and platelets (massive transfusion)", sub_bullet_style)) story.append(Paragraph(" - Platelets", sub_bullet_style)) story.append(Paragraph(" - Cryoprecipitate (for hypofibrinogenaemia)", sub_bullet_style)) story.append(Paragraph("• <b>Avoid</b> excessive crystalloid - worsens coagulopathy and hypothermia", bullet_style)) story.append(Paragraph(B("4. Monitoring Goals (End-Points of Resuscitation):"), h3_style)) story.append(Paragraph("• Urine output > 0.5 ml/kg/hr", bullet_style)) story.append(Paragraph("• MAP > 65 mmHg (or SBP > 90 mmHg)", bullet_style)) story.append(Paragraph("• Lactate clearance (target < 2 mmol/L)", bullet_style)) story.append(Paragraph("• Base excess normalisation", bullet_style)) story.append(Paragraph("• CVP 8-12 cmH2O", bullet_style)) story.append(Paragraph("• Temperature > 36°C", bullet_style)) story.append(Paragraph(B("5. Damage Control Surgery (DCS):"), h3_style)) story.append(Paragraph( "In major haemorrhage - abbreviated surgery to control bleeding and contamination, " "then ICU resuscitation before definitive surgery.", body_style)) story.append(PageBreak()) # SEPTIC SHOCK story.append(Paragraph("SAQ 2 / LAQ OPTION: SEPTIC SHOCK", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("DEFINITION (Sepsis-3, 2016):"), h2_style)) story.append(Paragraph( "Septic shock is a subset of sepsis in which underlying circulatory and cellular/metabolic abnormalities " "are profound enough to substantially increase mortality. Clinical criteria: <b>vasopressor requirement to " "maintain MAP ≥ 65 mmHg</b> AND <b>serum lactate > 2 mmol/L</b> despite adequate fluid resuscitation. " "Mortality > 40%.", body_style)) story.append(Paragraph(B("SEPSIS-3 DEFINITIONS:"), h2_style)) story.append(Paragraph("• <b>Infection</b>: pathological process caused by invasion of normally sterile tissue by organisms", bullet_style)) story.append(Paragraph("• <b>Sepsis</b>: life-threatening organ dysfunction caused by dysregulated host response to infection (SOFA score ≥ 2)", bullet_style)) story.append(Paragraph("• <b>Septic shock</b>: sepsis + circulatory failure + cellular metabolic abnormality (vasopressors needed + lactate > 2 mmol/L)", bullet_style)) story.append(Paragraph(B("SIRS CRITERIA (older criteria, still relevant):"), h3_style)) story.append(Paragraph("2 or more of:", body_style)) story.append(Paragraph("• Temperature > 38°C or < 36°C", bullet_style)) story.append(Paragraph("• HR > 90 bpm", bullet_style)) story.append(Paragraph("• RR > 20/min or PaCO2 < 32 mmHg", bullet_style)) story.append(Paragraph("• WBC > 12,000 or < 4,000 cells/mm³ or > 10% band forms", bullet_style)) story.append(Paragraph(B("PATHOPHYSIOLOGY:"), h2_style)) story.append(Paragraph(B("1. Trigger:"), h3_style)) story.append(Paragraph( "Gram-negative bacteria (most common) release <b>lipopolysaccharide (LPS/endotoxin)</b>; " "Gram-positive bacteria release <b>peptidoglycan and teichoic acid</b>. " "Fungi, viruses, parasites can also trigger septic shock.", body_style)) story.append(Paragraph(B("2. Immune Cascade:"), h3_style)) story.append(Paragraph("LPS binds to <b>CD14/TLR4</b> receptors on macrophages/monocytes → massive release of pro-inflammatory cytokines:", body_style)) story.append(Paragraph("• <b>TNF-α</b> (tumour necrosis factor alpha)", bullet_style)) story.append(Paragraph("• <b>IL-1, IL-6, IL-8</b>", bullet_style)) story.append(Paragraph("• <b>PAF</b> (platelet activating factor)", bullet_style)) story.append(Paragraph("These activate coagulation cascade → <b>DIC</b>, endothelial injury, nitric oxide (NO) production.", bullet_style)) story.append(Paragraph(B("3. Haemodynamic Changes:"), h3_style)) story.append(Paragraph( "Massive <b>nitric oxide</b> release causes <b>profound vasodilation</b> → reduced SVR → <b>distributive shock</b>. " "Unlike hypovolaemic shock, septic shock is characterised by:", body_style)) story.append(Paragraph("• <b>High CO / hyperdynamic circulation</b> (early 'warm shock')", bullet_style)) story.append(Paragraph("• <b>Low SVR</b>", bullet_style)) story.append(Paragraph("• Warm peripheries (early), cold peripheries (late)", bullet_style)) story.append(Paragraph("• <b>Maldistribution</b> of blood flow - tissue hypoperfusion despite normal/high CO", bullet_style)) story.append(Paragraph("• Late: myocardial depression from cytokines ('cold shock')", bullet_style)) story.append(Paragraph(B("4. Metabolic Effects:"), h3_style)) story.append(Paragraph("• Cellular metabolic dysfunction: mitochondrial dysfunction → impaired O2 utilisation", bullet_style)) story.append(Paragraph("• Elevated lactate despite normal/high CO (cytopathic hypoxia)", bullet_style)) story.append(Paragraph("• Hyperglycaemia followed by hypoglycaemia", bullet_style)) story.append(Paragraph("• DIC: consumptive coagulopathy with bleeding and microvascular thrombosis", bullet_style)) story.append(Paragraph(B("CLINICAL FEATURES:"), h2_style)) story.append(Paragraph(B("Early (Warm Shock):"), h3_style)) story.append(Paragraph("• High fever (> 38.5°C) or hypothermia (< 36°C) - hypothermia is a bad sign", bullet_style)) story.append(Paragraph("• Tachycardia, tachypnoea", bullet_style)) story.append(Paragraph("• Warm, flushed, vasodilated peripheries", bullet_style)) story.append(Paragraph("• Wide pulse pressure", bullet_style)) story.append(Paragraph("• Confusion/altered mental status", bullet_style)) story.append(Paragraph("• Hypotension (MAP < 65 mmHg)", bullet_style)) story.append(Paragraph(B("Late (Cold Shock):"), h3_style)) story.append(Paragraph("• Cold, clammy, mottled extremities", bullet_style)) story.append(Paragraph("• Profound hypotension", bullet_style)) story.append(Paragraph("• Oliguria/anuria", bullet_style)) story.append(Paragraph("• Jaundice (hepatic failure)", bullet_style)) story.append(Paragraph("• Petechiae, bleeding (DIC)", bullet_style)) story.append(Paragraph("• ARDS - hypoxia, bilateral infiltrates", bullet_style)) story.append(Paragraph("• Multiple Organ Dysfunction Syndrome (MODS)", bullet_style)) story.append(Paragraph(B("INVESTIGATIONS:"), h2_style)) story.append(Paragraph("• <b>Blood cultures</b> (x2 sets, before antibiotics) - most important", bullet_style)) story.append(Paragraph("• <b>Serum lactate</b> - critical (> 2 mmol/L confirms septic shock)", bullet_style)) story.append(Paragraph("• <b>FBC</b> - leukocytosis/leukopenia, thrombocytopenia", bullet_style)) story.append(Paragraph("• <b>CRP, Procalcitonin (PCT)</b> - elevated; PCT helps guide antibiotic duration", bullet_style)) story.append(Paragraph("• <b>ABG</b> - metabolic acidosis, respiratory alkalosis early", bullet_style)) story.append(Paragraph("• <b>Coagulation screen</b> (PT/INR, APTT, D-dimer, fibrinogen) - DIC workup", bullet_style)) story.append(Paragraph("• <b>LFTs, Urea/Creatinine</b> - organ function", bullet_style)) story.append(Paragraph("• <b>Urine culture, wound cultures, sputum culture</b> - identify source", bullet_style)) story.append(Paragraph("• <b>CXR, USS, CT</b> - identify source of infection", bullet_style)) story.append(Paragraph(B("MANAGEMENT (Surviving Sepsis Campaign - Hour-1 Bundle):"), h2_style)) story.append(Paragraph(B("Within 1 Hour:"), h3_style)) story.append(Paragraph("1. <b>Measure serum lactate</b>; re-measure if initial lactate > 2 mmol/L", bullet_style)) story.append(Paragraph("2. <b>Blood cultures before antibiotics</b>", bullet_style)) story.append(Paragraph("3. <b>Broad-spectrum antibiotics</b> (within 1 hour of recognition)", bullet_style)) story.append(Paragraph("4. <b>IV fluid resuscitation</b>: 30 ml/kg crystalloid (NS or Hartmann's) if hypotension or lactate ≥ 4 mmol/L", bullet_style)) story.append(Paragraph("5. <b>Vasopressors</b> if hypotension during/after fluid resuscitation to maintain MAP ≥ 65 mmHg", bullet_style)) story.append(Paragraph(B("Antibiotic Therapy:"), h3_style)) story.append(Paragraph("• Empirical broad-spectrum - Piperacillin-Tazobactam OR Meropenem/Imipenem for severe sepsis", bullet_style)) story.append(Paragraph("• Add Vancomycin/Teicoplanin if MRSA suspected", bullet_style)) story.append(Paragraph("• Add Fluconazole/Caspofungin if fungal sepsis suspected", bullet_style)) story.append(Paragraph("• Narrow spectrum once cultures/sensitivities available (de-escalation)", bullet_style)) story.append(Paragraph(B("Vasopressors:"), h3_style)) story.append(Paragraph("• <b>Noradrenaline (Norepinephrine)</b> - first line vasopressor (alpha-1 agonist)", bullet_style)) story.append(Paragraph("• <b>Vasopressin</b> - add if noradrenaline dose > 0.25 mcg/kg/min", bullet_style)) story.append(Paragraph("• <b>Dobutamine</b> - add for myocardial dysfunction/low CO", bullet_style)) story.append(Paragraph("• <b>Dopamine</b> - alternative if no arrhythmia risk; no longer recommended routinely", bullet_style)) story.append(Paragraph(B("Source Control:"), h3_style)) story.append(Paragraph("• Identify and eliminate infection source as soon as possible", bullet_style)) story.append(Paragraph("• Surgical drainage of abscess, debridement of infected tissue", bullet_style)) story.append(Paragraph("• Remove infected lines, catheters", bullet_style)) story.append(Paragraph(B("Supportive Care (ICU):"), h3_style)) story.append(Paragraph("• Mechanical ventilation for ARDS (low tidal volume 6 ml/kg)", bullet_style)) story.append(Paragraph("• Renal replacement therapy for AKI", bullet_style)) story.append(Paragraph("• Stress ulcer prophylaxis", bullet_style)) story.append(Paragraph("• DVT prophylaxis (LMWH)", bullet_style)) story.append(Paragraph("• Tight glycaemic control (target 7.8-10 mmol/L)", bullet_style)) story.append(Paragraph("• Hydrocortisone 200 mg/day if refractory to vasopressors", bullet_style)) story.append(PageBreak()) # SAQ 1: Shock Syndrome story.append(Paragraph("SAQ 1: SHOCK SYNDROME", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "Shock syndrome refers to the constellation of signs and symptoms arising from inadequate tissue perfusion. " "It is a syndrome because it involves multiple organ systems simultaneously.", body_style)) story.append(Paragraph(B("Organs affected in Shock Syndrome:"), h3_style)) organ_data = [ [Paragraph(B("Organ"), table_header_style), Paragraph(B("Effect"), table_header_style), Paragraph(B("Clinical Feature"), table_header_style)], [Paragraph("Heart", table_body_style), Paragraph("Myocardial depression, arrhythmia", table_body_style), Paragraph("Tachycardia, reduced CO", table_body_style)], [Paragraph("Lung", table_body_style), Paragraph("ARDS (acute lung injury)", table_body_style), Paragraph("Hypoxia, bilateral infiltrates", table_body_style)], [Paragraph("Kidney", table_body_style), Paragraph("Acute tubular necrosis", table_body_style), Paragraph("Oliguria, rising creatinine", table_body_style)], [Paragraph("Liver", table_body_style), Paragraph("Centrilobular necrosis", table_body_style), Paragraph("Elevated LFTs, coagulopathy", table_body_style)], [Paragraph("Brain", table_body_style), Paragraph("Cerebral oedema, ischaemia", table_body_style), Paragraph("Confusion, coma", table_body_style)], [Paragraph("GI tract", table_body_style), Paragraph("Mucosal ischaemia, bacterial translocation", table_body_style), Paragraph("Stress ulcers, ileus", table_body_style)], [Paragraph("Coagulation", table_body_style), Paragraph("DIC", table_body_style), Paragraph("Bleeding + thrombosis", table_body_style)], ] organ_table = Table(organ_data, colWidths=[3*cm, 6*cm, 6.5*cm]) organ_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1565c0')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e3f2fd'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ])) story.append(organ_table) story.append(Spacer(1, 0.5*cm)) # SAQ 3: Classify Haemorrhage story.append(Paragraph("SAQ 3A: CLASSIFICATION OF HAEMORRHAGE", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("A. By Type of Vessel:"), h2_style)) story.append(Paragraph("• <b>Arterial haemorrhage</b>: bright red, spurting (pulsatile), rapid and life-threatening", bullet_style)) story.append(Paragraph("• <b>Venous haemorrhage</b>: dark red, oozing continuously, less dramatic", bullet_style)) story.append(Paragraph("• <b>Capillary haemorrhage</b>: bright red, oozing from wound surface", bullet_style)) story.append(Paragraph(B("B. By Location:"), h2_style)) story.append(Paragraph("• <b>External haemorrhage</b>: visible blood outside body", bullet_style)) story.append(Paragraph("• <b>Internal haemorrhage</b>: bleeding into body cavity (haemothorax, haemoperitoneum, retroperitoneal)", bullet_style)) story.append(Paragraph("• <b>Concealed haemorrhage</b>: bleeding into closed space (haematoma)", bullet_style)) story.append(Paragraph(B("C. By Timing (Surgical Classification):"), h2_style)) story.append(Paragraph("• <b>Primary haemorrhage</b>: occurs at the time of injury/surgery", bullet_style)) story.append(Paragraph("• <b>Reactionary haemorrhage</b>: within 24 hours - due to rise in BP dislodging clot or ligature", bullet_style)) story.append(Paragraph("• <b>Secondary haemorrhage</b>: 7-14 days after surgery - due to infection eroding vessel wall", bullet_style)) story.append(Paragraph(B("D. ATLS Classification by Volume (Class I-IV)"), h2_style)) story.append(Paragraph("(See table in LAQ 1B above)", body_style)) story.append(Spacer(1, 0.3*cm)) # SAQ 4: CVP story.append(Paragraph("SAQ 4: CENTRAL VENOUS PRESSURE (CVP)", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "CVP is the blood pressure in the superior vena cava/right atrium. " "It reflects right ventricular preload and intravascular volume status. " "<b>Normal: 0-8 cmH2O (or 0-6 mmHg)</b>.", body_style)) story.append(Paragraph(B("Clinical Uses:"), h2_style)) story.append(Paragraph("• Assessment of volume status (hypovolaemia vs hypervolaemia)", bullet_style)) story.append(Paragraph("• Guide for fluid resuscitation", bullet_style)) story.append(Paragraph("• Monitoring of cardiac function", bullet_style)) story.append(Paragraph("• Drug infusion route (vasopressors, TPN)", bullet_style)) story.append(Paragraph("• Measurement of mixed venous oxygen saturation", bullet_style)) story.append(Paragraph(B("CVP Measurement Technique:"), h2_style)) story.append(Paragraph(B("Central Venous Catheter Insertion:"), h3_style)) story.append(Paragraph("Sites: Internal jugular vein (most common), subclavian vein, femoral vein", body_style)) story.append(Paragraph(B("Steps:"), h3_style)) story.append(Paragraph("1. Aseptic technique - sterile gown, gloves, drape", bullet_style)) story.append(Paragraph("2. Position patient - 15-20° Trendelenburg (distends vein)", bullet_style)) story.append(Paragraph("3. Seldinger technique: needle → guidewire → dilator → catheter", bullet_style)) story.append(Paragraph("4. Position tip at SVC/RA junction (confirmed by CXR)", bullet_style)) story.append(Paragraph("5. Zero the transducer at mid-axillary line (phlebostatic axis)", bullet_style)) story.append(Paragraph("6. Water manometer or electronic transducer for measurement", bullet_style)) story.append(Paragraph(B("Interpretation:"), h2_style)) cvp_data = [ [Paragraph(B("CVP"), table_header_style), Paragraph(B("Interpretation"), table_header_style)], [Paragraph("< 0 cmH2O", table_body_style), Paragraph("Hypovolaemia - give fluids", table_body_style)], [Paragraph("0-8 cmH2O", table_body_style), Paragraph("Normal", table_body_style)], [Paragraph("8-12 cmH2O", table_body_style), Paragraph("Borderline high - caution with fluids", table_body_style)], [Paragraph("> 12 cmH2O", table_body_style), Paragraph("Raised: cardiac failure, tamponade, tension pneumothorax, fluid overload", table_body_style)], ] cvp_table = Table(cvp_data, colWidths=[4*cm, 11.5*cm]) cvp_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1565c0')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e3f2fd'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ])) story.append(cvp_table) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Limitations of CVP:"), h3_style)) story.append(Paragraph( "CVP is NOT a reliable indicator of volume status or fluid responsiveness. " "Dynamic parameters (pulse pressure variation, stroke volume variation) are more reliable. " "CVP should be used in conjunction with clinical assessment.", body_style)) story.append(Spacer(1, 0.3*cm)) # SAQ 5: SIRS and MODS story.append(Paragraph("SAQ 5A: SYSTEMIC INFLAMMATORY RESPONSE SYNDROME (SIRS)", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "SIRS is an uncontrolled, non-specific systemic inflammatory response to a variety of clinical insults " "(infection, trauma, burns, pancreatitis). It is defined by the presence of 2 or more of the following:", body_style)) story.append(Paragraph("1. <b>Temperature</b> > 38°C or < 36°C", bullet_style)) story.append(Paragraph("2. <b>Heart rate</b> > 90 bpm", bullet_style)) story.append(Paragraph("3. <b>Respiratory rate</b> > 20/min or PaCO2 < 32 mmHg", bullet_style)) story.append(Paragraph("4. <b>WBC</b> > 12,000/mm³ or < 4,000/mm³ or > 10% band forms", bullet_style)) story.append(Paragraph(B("Causes of SIRS:"), h3_style)) story.append(Paragraph("• Infection (sepsis = SIRS + infection)", bullet_style)) story.append(Paragraph("• Trauma/burns", bullet_style)) story.append(Paragraph("• Pancreatitis", bullet_style)) story.append(Paragraph("• Ischaemia-reperfusion injury", bullet_style)) story.append(Paragraph("• Major surgery", bullet_style)) story.append(Paragraph(B("Pathophysiology:"), h3_style)) story.append(Paragraph( "During systemic hypoperfusion, cellular/organ damage occurs from tissue hypoxia and local inflammation. " "On reperfusion, the acid and potassium load causes direct myocardial depression and vasodilation. " "Molecules released from cells (DAMPs) activate leukocytes. " "Complement, neutrophils, and microvascular thrombi overwhelm the local anti-inflammatory response " "and enter systemic circulation, causing injury to distant organs (lungs, kidneys, brain) → " "SIRS → MODS.", body_style)) story.append(Paragraph(B("SAQ 5B: MULTIPLE ORGAN DYSFUNCTION SYNDROME (MODS)"), h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "MODS is the presence of altered function of <b>two or more organ systems</b> in an acutely ill patient " "such that homeostasis cannot be maintained without intervention. It is the end-stage of SIRS. " "<b>Mortality: ~60%</b>.", body_style)) story.append(Paragraph(B("Types:"), h3_style)) story.append(Paragraph("• <b>Primary MODS</b>: direct organ injury (e.g., direct lung contusion in trauma)", bullet_style)) story.append(Paragraph("• <b>Secondary MODS</b>: organ failure as part of systemic inflammatory response (more common)", bullet_style)) story.append(Paragraph(B("Organs involved (in order of common involvement):"), h3_style)) story.append(Paragraph("1. <b>Lungs</b> - ARDS (most common first organ)", bullet_style)) story.append(Paragraph("2. <b>Liver</b> - hepatic dysfunction, coagulopathy", bullet_style)) story.append(Paragraph("3. <b>Kidneys</b> - acute renal failure (ATN)", bullet_style)) story.append(Paragraph("4. <b>GI tract</b> - stress ulcers, bacterial translocation", bullet_style)) story.append(Paragraph("5. <b>Cardiovascular</b> - myocardial depression, arrhythmias", bullet_style)) story.append(Paragraph("6. <b>CNS</b> - encephalopathy, cerebral oedema", bullet_style)) story.append(Paragraph("7. <b>Coagulation</b> - DIC", bullet_style)) story.append(Paragraph(B("Management of MODS:"), h3_style)) story.append(Paragraph( "There is NO specific treatment for MODS - management is supportive organ system by system:", body_style)) story.append(Paragraph("• <b>Lungs</b>: mechanical ventilation, PEEP, low tidal volume (6 ml/kg)", bullet_style)) story.append(Paragraph("• <b>Kidneys</b>: renal replacement therapy (haemofiltration/dialysis)", bullet_style)) story.append(Paragraph("• <b>Cardiovascular</b>: vasopressors, inotropes, fluid management", bullet_style)) story.append(Paragraph("• <b>Nutrition</b>: enteral feeding early (within 24-48 hours)", bullet_style)) story.append(Paragraph("• <b>Infection control</b>: source control, appropriate antibiotics", bullet_style)) story.append(Paragraph("• <b>Prevention</b>: early aggressive identification and reversal of shock", bullet_style)) story.append(PageBreak()) # SAQ 6: Reactionary and Secondary Haemorrhage story.append(Paragraph("SAQ 6A: REACTIONARY HAEMORRHAGE", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "Reactionary haemorrhage is bleeding that occurs <b>within 24 hours</b> of surgery or trauma, " "usually within the first 4-6 hours.", body_style)) story.append(Paragraph(B("Causes:"), h3_style)) story.append(Paragraph("• <b>Rise in blood pressure</b> post-operatively (reversal of shock) dislodging a clot", bullet_style)) story.append(Paragraph("• <b>Slipping of a ligature</b> or vascular clip", bullet_style)) story.append(Paragraph("• <b>Reversal of vasoconstriction</b> when patient is warm and pain is controlled", bullet_style)) story.append(Paragraph("• <b>Inadequate surgical haemostasis</b>", bullet_style)) story.append(Paragraph(B("Management:"), h3_style)) story.append(Paragraph("• Return to theatre for surgical haemostasis", bullet_style)) story.append(Paragraph("• Blood transfusion/resuscitation", bullet_style)) story.append(Paragraph("• Re-exploration and control of bleeding vessel", bullet_style)) story.append(Paragraph(B("SAQ 6B: SECONDARY HAEMORRHAGE"), h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#90caf9'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "Secondary haemorrhage is delayed bleeding occurring <b>7-14 days after surgery or injury</b>, " "classically at day 10.", body_style)) story.append(Paragraph(B("Causes:"), h3_style)) story.append(Paragraph("• <b>Infection</b> eroding vessel wall (most important cause)", bullet_style)) story.append(Paragraph("• Wound infection with arterial pseudoaneurysm", bullet_style)) story.append(Paragraph("• Pressure necrosis from drain or prosthesis", bullet_style)) story.append(Paragraph(B("Sites:"), h3_style)) story.append(Paragraph("• Post-tonsillectomy bleed (common example)", bullet_style)) story.append(Paragraph("• Carotid artery blowout after neck dissection", bullet_style)) story.append(Paragraph("• GI anastomotic breakdown", bullet_style)) story.append(Paragraph(B("Management:"), h3_style)) story.append(Paragraph("• Control infection (antibiotics)", bullet_style)) story.append(Paragraph("• Surgical haemostasis", bullet_style)) story.append(Paragraph("• Blood transfusion as required", bullet_style)) story.append(PageBreak()) # ============================================================ # SECTION 2: BLOOD TRANSFUSION # ============================================================ story.append(Paragraph("SECTION 2: BLOOD TRANSFUSION", ParagraphStyle('SectionTitle2', parent=styles['Heading1'], fontSize=16, textColor=colors.white, backColor=colors.HexColor('#b71c1c'), spaceAfter=8, spaceBefore=4, borderPad=6))) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("BLOOD TRANSFUSION: PRINCIPLES, INDICATIONS & COMPLICATIONS", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#ef9a9a'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("A. PRINCIPLES OF BLOOD TRANSFUSION:"), h2_style)) story.append(Paragraph( "Blood transfusion is a form of <b>transplantation of regenerative tissue</b> from a donor to a recipient. " "It is not without hazard and must be treated as a serious clinical undertaking.", body_style)) story.append(Paragraph("1. <b>Indication must be clear</b> - transfuse only when benefits outweigh risks", bullet_style)) story.append(Paragraph("2. <b>Informed consent</b> should be obtained", bullet_style)) story.append(Paragraph("3. <b>Blood grouping and crossmatching</b> mandatory before transfusion", bullet_style)) story.append(Paragraph("4. <b>ABO and Rh compatibility</b> must be confirmed", bullet_style)) story.append(Paragraph("5. <b>Double checking</b> of patient identity and blood label at bedside", bullet_style)) story.append(Paragraph("6. <b>Minimum effective dose</b> - transfuse only what is needed", bullet_style)) story.append(Paragraph("7. <b>Objective for transfusion</b>: increase red cell mass → optimise oxygen delivery to tissues", bullet_style)) story.append(Paragraph("8. <b>Avoid in elderly</b> at risk of volume overload and cardiac failure", bullet_style)) story.append(Paragraph("9. <b>In hypovolaemia</b>, expansion of blood volume may be more important than raising Hct", bullet_style)) story.append(Paragraph(B("B. INDICATIONS FOR BLOOD TRANSFUSION:"), h2_style)) story.append(Paragraph(B("1. Acute Blood Loss:"), h3_style)) story.append(Paragraph("• Trauma with haemorrhagic shock (Class III/IV)", bullet_style)) story.append(Paragraph("• Major intraoperative haemorrhage", bullet_style)) story.append(Paragraph("• Ruptured aortic aneurysm", bullet_style)) story.append(Paragraph("• GI bleeding (massive upper/lower GI bleed)", bullet_style)) story.append(Paragraph("• Obstetric haemorrhage (PPH, placenta praevia)", bullet_style)) story.append(Paragraph(B("2. Chronic Anaemia:"), h3_style)) story.append(Paragraph("• Symptomatic anaemia (Hb < 7 g/dL) OR Hb < 8 g/dL in cardiac patients", bullet_style)) story.append(Paragraph("• Anaemia of chronic disease (CKD, malignancy)", bullet_style)) story.append(Paragraph("• Iron deficiency anaemia unresponsive to oral/IV iron", bullet_style)) story.append(Paragraph("• Aplastic anaemia, haematological malignancy", bullet_style)) story.append(Paragraph(B("3. Pre-operative:"), h3_style)) story.append(Paragraph("• Pre-op optimisation if Hb < 8 g/dL in elective major surgery", bullet_style)) story.append(Paragraph(B("4. Specific Conditions:"), h3_style)) story.append(Paragraph("• Sickle cell crisis (exchange transfusion)", bullet_style)) story.append(Paragraph("• Thalassaemia major (regular transfusions)", bullet_style)) story.append(Paragraph("• Haemolytic disease of newborn", bullet_style)) story.append(Paragraph("• Bone marrow failure", bullet_style)) story.append(Paragraph("• Immune modulation: renal transplantation (enhances graft survival)", bullet_style)) story.append(Paragraph(B("Triggers for Transfusion:"), h3_style)) story.append(Paragraph("• <b>Hb < 7 g/dL</b>: most patients", bullet_style)) story.append(Paragraph("• <b>Hb < 8 g/dL</b>: post-operative patients, cardiovascular disease", bullet_style)) story.append(Paragraph("• <b>Hb < 10 g/dL</b>: active myocardial ischaemia, severe cardiorespiratory disease", bullet_style)) story.append(Spacer(1, 0.4*cm)) story.append(Paragraph(B("C. COMPLICATIONS OF BLOOD TRANSFUSION:"), h2_style)) story.append(Paragraph(B("ACUTE TRANSFUSION REACTIONS (within 24 hours):"), h2_style)) comp_data = [ [Paragraph(B("Reaction"), table_header_style), Paragraph(B("Cause"), table_header_style), Paragraph(B("Features"), table_header_style), Paragraph(B("Management"), table_header_style)], [Paragraph("Acute Haemolytic Reaction", table_body_style), Paragraph("ABO incompatibility (usually clerical error)", table_body_style), Paragraph("Fever, chills, back/loin pain, haemoglobinuria, renal failure, DIC, shock - MOST DANGEROUS", table_body_style), Paragraph("STOP transfusion immediately, supportive care, fluids, monitor renal function", table_body_style)], [Paragraph("Febrile Non-Haemolytic Reaction (FNHTR)", table_body_style), Paragraph("Antibodies vs donor WBCs/HLA antigens; cytokines in stored blood", table_body_style), Paragraph("Fever (>1°C rise), chills, malaise, headache - most common reaction", table_body_style), Paragraph("Slow/stop transfusion, antipyretics (paracetamol), monitor, can usually continue", table_body_style)], [Paragraph("Allergic Reaction", table_body_style), Paragraph("IgE-mediated reaction to plasma proteins", table_body_style), Paragraph("Urticaria, pruritus, flushing; anaphylaxis in severe cases", table_body_style), Paragraph("Stop transfusion, antihistamines, adrenaline if anaphylaxis", table_body_style)], [Paragraph("TRALI (Transfusion-Related Acute Lung Injury)", table_body_style), Paragraph("Donor Ab vs recipient WBCs; pulmonary endothelial injury", table_body_style), Paragraph("Acute respiratory distress within 6hrs, bilateral pulmonary oedema, hypoxia (non-cardiogenic)", table_body_style), Paragraph("Stop transfusion, supportive O2, ventilation; second most common cause of transfusion death", table_body_style)], [Paragraph("TACO (Transfusion-Associated Circulatory Overload)", table_body_style), Paragraph("Volume overload - too fast/too much", table_body_style), Paragraph("Pulmonary oedema, hypertension, dyspnoea, cardiogenic", table_body_style), Paragraph("Stop/slow transfusion, furosemide, sit up", table_body_style)], [Paragraph("Bacterial Contamination", table_body_style), Paragraph("Contaminated blood products (platelets most common)", table_body_style), Paragraph("High fever, rigors, shock - rapidly septic", table_body_style), Paragraph("Stop transfusion, blood cultures, broad-spectrum antibiotics, ICU", table_body_style)], ] comp_table = Table(comp_data, colWidths=[2.8*cm, 3*cm, 4*cm, 3.7*cm]) comp_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#b71c1c')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#ffebee'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('FONTSIZE', (0,0), (-1,-1), 8), ])) story.append(comp_table) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph(B("DELAYED TRANSFUSION REACTIONS (after 24 hours):"), h2_style)) story.append(Paragraph("• <b>Delayed haemolytic reaction</b> (2-10 days): anamnestic antibody response, mild jaundice, falling Hb", bullet_style)) story.append(Paragraph("• <b>Post-transfusion purpura</b>: thrombocytopenia 5-10 days post-transfusion", bullet_style)) story.append(Paragraph("• <b>Transfusion-associated graft-vs-host disease (TA-GvHD)</b>: donor T-lymphocytes attack recipient tissues (fatal in immunocompromised)", bullet_style)) story.append(Paragraph("• <b>Iron overload</b> (transfusion haemosiderosis): in chronically transfused patients (thalassaemia)", bullet_style)) story.append(Paragraph("• <b>Infection transmission</b>: HIV, Hepatitis B, Hepatitis C, CMV (rare with modern screening)", bullet_style)) story.append(PageBreak()) # Blood Products story.append(Paragraph("SAQ: BLOOD PRODUCTS", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#ef9a9a'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("1. PACKED RED BLOOD CELLS (PRBCs):"), h2_style)) story.append(Paragraph("• Prepared by centrifuging whole blood to remove plasma", bullet_style)) story.append(Paragraph("• <b>Haematocrit ~60-80%</b>", bullet_style)) story.append(Paragraph("• <b>Storage</b>: 4°C, up to 42 days (in SAGM - saline, adenine, glucose, mannitol)", bullet_style)) story.append(Paragraph("• <b>Indication</b>: increase red cell mass, correct anaemia, haemorrhage", bullet_style)) story.append(Paragraph("• One unit raises Hb by ~1 g/dL in adults", bullet_style)) story.append(Paragraph(B("2. FRESH FROZEN PLASMA (FFP):"), h2_style)) story.append(Paragraph( "FFP is plasma separated from whole blood and <b>frozen within 6 hours of collection</b> " "to preserve all coagulation factors.", body_style)) story.append(Paragraph(B("Contents:"), h3_style)) story.append(Paragraph("• <b>All coagulation factors</b> (including labile factors V and VIII)", bullet_style)) story.append(Paragraph("• Fibrinogen, albumin, immunoglobulins", bullet_style)) story.append(Paragraph(B("Storage:"), h3_style)) story.append(Paragraph("• Stored at -30°C for up to 12 months", bullet_style)) story.append(Paragraph("• Must be thawed before use (15-30 mins)", bullet_style)) story.append(Paragraph(B("Volume:"), h3_style)) story.append(Paragraph("• 200-300 mL per unit", bullet_style)) story.append(Paragraph(B("Indications:"), h3_style)) story.append(Paragraph("• Massive blood transfusion (1:1:1 ratio with PRBCs and platelets)", bullet_style)) story.append(Paragraph("• Coagulopathy with active bleeding (INR > 1.5)", bullet_style)) story.append(Paragraph("• DIC", bullet_style)) story.append(Paragraph("• Reversal of warfarin in emergency (with Vit K)", bullet_style)) story.append(Paragraph("• Thrombotic thrombocytopenic purpura (TTP) - plasma exchange", bullet_style)) story.append(Paragraph("• Specific factor deficiencies when factor concentrates unavailable", bullet_style)) story.append(Paragraph("• Dose: 10-15 ml/kg", bullet_style)) story.append(Paragraph(B("Not indicated for:"), h3_style)) story.append(Paragraph("Volume expansion alone, nutritional supplementation, wound healing", body_style)) story.append(Paragraph(B("3. CRYOPRECIPITATE:"), h2_style)) story.append(Paragraph( "Cryoprecipitate is the <b>cold-insoluble protein fraction</b> that precipitates when FFP is thawed at 4°C, " "then re-suspended in a small amount of plasma (~20 mL per unit).", body_style)) story.append(Paragraph(B("Rich in:"), h3_style)) story.append(Paragraph("• <b>Fibrinogen</b> (most important - 150-300 mg/unit)", bullet_style)) story.append(Paragraph("• <b>Factor VIII</b> (~80-100 IU/unit)", bullet_style)) story.append(Paragraph("• <b>vWF</b> (von Willebrand Factor)", bullet_style)) story.append(Paragraph("• <b>Factor XIII</b>", bullet_style)) story.append(Paragraph("• Fibronectin", bullet_style)) story.append(Paragraph(B("Storage:"), h3_style)) story.append(Paragraph("• -30°C for up to 12 months", bullet_style)) story.append(Paragraph(B("Indications:"), h3_style)) story.append(Paragraph("• <b>Hypofibrinogenaemia</b> (fibrinogen < 1.5 g/L) - most important indication", bullet_style)) story.append(Paragraph("• DIC with low fibrinogen", bullet_style)) story.append(Paragraph("• Massive haemorrhage", bullet_style)) story.append(Paragraph("• Haemophilia A (if factor VIII concentrate unavailable)", bullet_style)) story.append(Paragraph("• von Willebrand disease", bullet_style)) story.append(Paragraph("• Dose: 1-2 pools (each pool = 5 units)", bullet_style)) story.append(Paragraph(B("4. PLATELETS:"), h2_style)) story.append(Paragraph("• Storage: 22°C with agitation, 5-7 days", bullet_style)) story.append(Paragraph("• Indications: thrombocytopenia with bleeding, platelet < 10,000/mm³ prophylactically, < 50,000/mm³ before surgery", bullet_style)) story.append(Paragraph("• One pool raises platelet count by 20,000-30,000/mm³", bullet_style)) story.append(Spacer(1, 0.4*cm)) # Massive Blood Transfusion story.append(Paragraph("SAQ: MASSIVE BLOOD TRANSFUSION (MBT) AND COMPLICATIONS", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#ef9a9a'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("DEFINITION:"), h2_style)) story.append(Paragraph( "Massive blood transfusion is defined as transfusion of <b>≥ 10 units of PRBCs within 24 hours</b>, " "OR replacement of the patient's entire blood volume within 24 hours, " "OR transfusion of > 4 units within 1 hour with ongoing haemorrhage.", body_style)) story.append(Paragraph(B("MASSIVE TRANSFUSION PROTOCOL (MTP):"), h2_style)) story.append(Paragraph( "Activation of MTP provides blood products in a <b>1:1:1 ratio</b>: " "PRBCs : FFP : Platelets (e.g. 6 units PRBCs + 6 units FFP + 1 platelet pool).", body_style)) story.append(Paragraph("Additional: Cryoprecipitate for fibrinogen, Tranexamic acid (TXA)", body_style)) story.append(Paragraph(B("COMPLICATIONS OF MASSIVE BLOOD TRANSFUSION:"), h2_style)) mbt_data = [ [Paragraph(B("Complication"), table_header_style), Paragraph(B("Mechanism / Details"), table_header_style)], [Paragraph("Hypothermia", table_body_style), Paragraph("Cold stored blood. Core temp < 35°C. Impairs coagulation, causes arrhythmia. Use blood warmers.", table_body_style)], [Paragraph("Dilutional Coagulopathy", table_body_style), Paragraph("Depletion of clotting factors and platelets by giving crystalloid/PRBCs without FFP. Treat with FFP + cryoprecipitate.", table_body_style)], [Paragraph("Hypocalcaemia", table_body_style), Paragraph("Citrate (anticoagulant in stored blood) chelates ionised calcium. Causes cardiac depression, tetany. Give IV calcium gluconate.", table_body_style)], [Paragraph("Hyperkalaemia", table_body_style), Paragraph("Potassium leaks from stored RBCs during storage. Worsened by acidosis. Can cause cardiac arrhythmias.", table_body_style)], [Paragraph("Metabolic Acidosis", table_body_style), Paragraph("Stored blood has low pH (citric acid, lactic acid). Also from continued tissue hypoperfusion.", table_body_style)], [Paragraph("Hypokalaemia", table_body_style), Paragraph("Paradoxical late effect - as metabolised citrate converts to HCO3- and K+ shifts intracellularly.", table_body_style)], [Paragraph("DIC", table_body_style), Paragraph("Dilution of clotting factors + shock + tissue injury → consumptive coagulopathy.", table_body_style)], [Paragraph("TRALI", table_body_style), Paragraph("Acute lung injury from plasma-containing products. Non-cardiogenic pulmonary oedema within 6 hours.", table_body_style)], [Paragraph("TACO", table_body_style), Paragraph("Circulatory overload - pulmonary oedema, hypertension.", table_body_style)], [Paragraph("2,3-DPG depletion", table_body_style), Paragraph("Stored blood low in 2,3-DPG → increased O2 affinity of Hb → reduced O2 delivery to tissues.", table_body_style)], [Paragraph("Microaggregates", table_body_style), Paragraph("Fibrin-platelet aggregates in stored blood - cause pulmonary microemboli. Use microfilter (40 micron).", table_body_style)], [Paragraph("Infection transmission", table_body_style), Paragraph("HIV, HCV, HBV, CMV, parasites (rare with modern screening).", table_body_style)], [Paragraph("Immunosuppression", table_body_style), Paragraph("Transfusion-related immunomodulation (TRIM) - increased infection risk.", table_body_style)], ] mbt_table = Table(mbt_data, colWidths=[4*cm, 11.5*cm]) mbt_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#b71c1c')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#ffebee'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('FONTSIZE', (0,0), (-1,-1), 9), ])) story.append(mbt_table) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph(B("Lethal Triad in Massive Haemorrhage:"), h3_style)) story.append(Paragraph( "• <b>Hypothermia</b> (< 35°C) + <b>Metabolic Acidosis</b> + <b>Coagulopathy</b> = Death", important_style)) story.append(PageBreak()) # Blood Group Typing and Crossmatching story.append(Paragraph("SAQ: BLOOD GROUP TYPING (BGT) AND CROSSMATCHING", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#ef9a9a'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("ABO BLOOD GROUP SYSTEM:"), h2_style)) abo_data = [ [Paragraph(B("Blood Group"), table_header_style), Paragraph(B("Antigen on RBC"), table_header_style), Paragraph(B("Antibody in Serum"), table_header_style), Paragraph(B("Can donate to"), table_header_style), Paragraph(B("Can receive from"), table_header_style)], [Paragraph("A", table_body_style), Paragraph("A antigen", table_body_style), Paragraph("Anti-B", table_body_style), Paragraph("A, AB", table_body_style), Paragraph("A, O", table_body_style)], [Paragraph("B", table_body_style), Paragraph("B antigen", table_body_style), Paragraph("Anti-A", table_body_style), Paragraph("B, AB", table_body_style), Paragraph("B, O", table_body_style)], [Paragraph("AB", table_body_style), Paragraph("A and B antigens", table_body_style), Paragraph("None", table_body_style), Paragraph("AB only", table_body_style), Paragraph("A, B, AB, O (Universal Recipient)", table_body_style)], [Paragraph("O", table_body_style), Paragraph("Neither A nor B", table_body_style), Paragraph("Anti-A and Anti-B", table_body_style), Paragraph("A, B, AB, O (Universal Donor)", table_body_style), Paragraph("O only", table_body_style)], ] abo_table = Table(abo_data, colWidths=[2*cm, 3*cm, 3.5*cm, 3*cm, 4*cm]) abo_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#b71c1c')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#ffebee'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('FONTSIZE', (0,0), (-1,-1), 9), ])) story.append(abo_table) story.append(Paragraph(B("RHESUS (Rh) SYSTEM:"), h2_style)) story.append(Paragraph("• <b>Rh positive</b>: D antigen present on RBCs (~85% of population)", bullet_style)) story.append(Paragraph("• <b>Rh negative</b>: D antigen absent - can form anti-D antibodies if exposed to Rh+ blood", bullet_style)) story.append(Paragraph("• Rh-negative women of childbearing age should receive Rh-negative blood only", bullet_style)) story.append(Paragraph("• Anti-D immunoglobulin given to Rh-negative mothers to prevent haemolytic disease of newborn", bullet_style)) story.append(Paragraph(B("BLOOD GROUP TYPING:"), h2_style)) story.append(Paragraph(B("Forward Grouping (Cell grouping):"), h3_style)) story.append(Paragraph("Patient's RBCs + known Anti-A and Anti-B sera → detect antigens on RBCs", body_style)) story.append(Paragraph(B("Reverse Grouping (Serum grouping):"), h3_style)) story.append(Paragraph("Patient's serum + known group A and group B RBCs → detect antibodies in serum", body_style)) story.append(Paragraph("Both forward and reverse grouping must agree for a valid blood group.", body_style)) story.append(Paragraph(B("CROSSMATCHING:"), h2_style)) story.append(Paragraph( "Crossmatching is the <b>final compatibility test</b> between donor blood and recipient before transfusion.", body_style)) story.append(Paragraph(B("Types:"), h3_style)) story.append(Paragraph("1. <b>Major crossmatch</b>: Donor RBCs + Recipient serum - detects recipient antibodies vs donor cells (most important)", bullet_style)) story.append(Paragraph("2. <b>Minor crossmatch</b>: Recipient RBCs + Donor serum - detects donor antibodies vs recipient cells", bullet_style)) story.append(Paragraph("3. <b>Full crossmatch</b>: Includes indirect Coombs test (detects IgG antibodies)", bullet_style)) story.append(Paragraph(B("Techniques:"), h3_style)) story.append(Paragraph("• <b>Saline crossmatch</b> (immediate spin) - detects IgM antibodies", bullet_style)) story.append(Paragraph("• <b>Antiglobulin crossmatch</b> (indirect Coombs) - detects IgG antibodies", bullet_style)) story.append(Paragraph(B("Time required:"), h3_style)) story.append(Paragraph("• Full crossmatch: 45-60 minutes", bullet_style)) story.append(Paragraph("• Emergency: Type and Screen (20 min) or O-negative blood (immediate)", bullet_style)) story.append(Spacer(1, 0.4*cm)) # Hyperbaric Oxygen story.append(Paragraph("VSAQ: HYPERBARIC OXYGEN THERAPY (HBO)", h1_style)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#ef9a9a'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph(B("Definition:"), h2_style)) story.append(Paragraph( "Hyperbaric oxygen (HBO) therapy involves breathing <b>100% oxygen at pressures greater than 1 atmosphere " "(ATA)</b>, typically 2-3 ATA, in a specially designed pressurised chamber.", body_style)) story.append(Paragraph(B("Mechanism:"), h2_style)) story.append(Paragraph("• At 3 ATA O2, dissolved O2 in plasma = ~6 ml/dL (normally 0.3 ml/dL)", bullet_style)) story.append(Paragraph("• Sufficient to sustain life without haemoglobin", bullet_style)) story.append(Paragraph("• Vasoconstriction reduces oedema while maintaining oxygenation", bullet_style)) story.append(Paragraph("• Kills anaerobic bacteria (raises tissue O2 > 300 mmHg)", bullet_style)) story.append(Paragraph("• Enhances antibiotic activity, promotes wound healing, angiogenesis", bullet_style)) story.append(Paragraph(B("Indications (Surgical Relevance):"), h2_style)) story.append(Paragraph("• <b>Carbon monoxide poisoning</b> (most common/important surgical/emergency indication)", bullet_style)) story.append(Paragraph("• <b>Clostridial myonecrosis</b> (gas gangrene) - kills Clostridium perfringens", bullet_style)) story.append(Paragraph("• <b>Necrotising fasciitis</b>", bullet_style)) story.append(Paragraph("• <b>Diabetic foot ulcers</b> (non-healing wounds)", bullet_style)) story.append(Paragraph("• <b>Decompression sickness</b> (Caisson disease)", bullet_style)) story.append(Paragraph("• <b>Air/gas embolism</b>", bullet_style)) story.append(Paragraph("• Refractory osteomyelitis", bullet_style)) story.append(Paragraph("• Radiation necrosis (osteoradionecrosis)", bullet_style)) story.append(Paragraph(B("Contraindications:"), h2_style)) story.append(Paragraph("• Untreated pneumothorax (absolute)", bullet_style)) story.append(Paragraph("• COPD with CO2 retention", bullet_style)) story.append(Paragraph("• Claustrophobia", bullet_style)) story.append(Paragraph("• Active viral infection, fever", bullet_style)) story.append(Paragraph(B("Complications:"), h2_style)) story.append(Paragraph("• Oxygen toxicity (seizures - Paul Bert effect; pulmonary toxicity - Lorrain Smith effect)", bullet_style)) story.append(Paragraph("• Barotrauma (ear, sinus, pneumothorax)", bullet_style)) story.append(Paragraph("• Fire hazard", bullet_style)) story.append(PageBreak()) # Quick Revision Summary story.append(Paragraph("QUICK REVISION SUMMARY", ParagraphStyle('SummaryTitle', parent=styles['Heading1'], fontSize=16, textColor=colors.white, backColor=colors.HexColor('#37474f'), spaceAfter=8, spaceBefore=4, borderPad=6))) story.append(Spacer(1, 0.3*cm)) summary_data = [ [Paragraph(B("Topic"), table_header_style), Paragraph(B("Key Point"), table_header_style)], [Paragraph("Shock Definition", table_body_style), Paragraph("Inadequate tissue perfusion for normal cellular respiration", table_body_style)], [Paragraph("Shock Types", table_body_style), Paragraph("Hypovolaemic, Cardiogenic, Distributive, Obstructive", table_body_style)], [Paragraph("Earliest sign of shock", table_body_style), Paragraph("Tachycardia (NOT hypotension - that's a late sign)", table_body_style)], [Paragraph("Haemorrhage Classes", table_body_style), Paragraph("I (<15%), II (15-30%), III (30-40%), IV (>40%)", table_body_style)], [Paragraph("Best monitor", table_body_style), Paragraph("Urine output (target > 0.5 ml/kg/hr)", table_body_style)], [Paragraph("Septic shock criteria", table_body_style), Paragraph("Vasopressors needed to maintain MAP ≥ 65 + lactate > 2 mmol/L", table_body_style)], [Paragraph("Septic shock vasopressor", table_body_style), Paragraph("Noradrenaline (1st line)", table_body_style)], [Paragraph("SIRS criteria", table_body_style), Paragraph("Temp, HR, RR, WBC - 2 of 4", table_body_style)], [Paragraph("CVP normal", table_body_style), Paragraph("0-8 cmH2O", table_body_style)], [Paragraph("Reactionary haemorrhage", table_body_style), Paragraph("< 24 hours (usually 4-6h) - BP rise dislodges clot", table_body_style)], [Paragraph("Secondary haemorrhage", table_body_style), Paragraph("7-14 days - infection erodes vessel", table_body_style)], [Paragraph("Blood transfusion trigger", table_body_style), Paragraph("Hb < 7 (most patients), < 8 (cardiac patients)", table_body_style)], [Paragraph("Universal donor", table_body_style), Paragraph("Group O Rh-negative", table_body_style)], [Paragraph("Universal recipient", table_body_style), Paragraph("Group AB", table_body_style)], [Paragraph("Most common transfusion reaction", table_body_style), Paragraph("FNHTR (febrile non-haemolytic)", table_body_style)], [Paragraph("Most dangerous transfusion reaction", table_body_style), Paragraph("Acute haemolytic reaction (ABO incompatibility)", table_body_style)], [Paragraph("FFP contents", table_body_style), Paragraph("All clotting factors including V and VIII", table_body_style)], [Paragraph("Cryoprecipitate rich in", table_body_style), Paragraph("Fibrinogen, Factor VIII, vWF, Factor XIII", table_body_style)], [Paragraph("Massive transfusion defined as", table_body_style), Paragraph("≥ 10 units PRBCs / 24h; ratio 1:1:1 (RBC:FFP:Plt)", table_body_style)], [Paragraph("Lethal triad", table_body_style), Paragraph("Hypothermia + Acidosis + Coagulopathy", table_body_style)], [Paragraph("HBO - most important indication", table_body_style), Paragraph("CO poisoning; Gas gangrene", table_body_style)], [Paragraph("TXA dosing", table_body_style), Paragraph("1g IV over 10 min, then 1g over 8h (within 3 hours)", table_body_style)], ] summary_table = Table(summary_data, colWidths=[5*cm, 10.5*cm]) summary_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#37474f')), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eceff1'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.grey), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('FONTSIZE', (0,0), (-1,-1), 9), ])) story.append(summary_table) # Footer story.append(Spacer(1, 0.5*cm)) story.append(HRFlowable(width="100%", thickness=1, color=colors.grey)) story.append(Paragraph("Sources: Bailey and Love's Surgery 28th Ed | Sabiston Textbook of Surgery | Pye's Surgical Handicraft | Robbins Pathology", ParagraphStyle('footer', parent=styles['Normal'], fontSize=8, textColor=colors.grey, alignment=TA_CENTER))) # Build PDF doc.build(story) print("PDF generated successfully!") PYEOF python3 /tmp/workspace/surgery-exam/generate_pdf.py
Download the PDF exam prep file I just created