IJV anatomy ,methods of cannulation , and it’s complications 20 marks ,PDF format short note,MD anaesthesia exams

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

mkdir -p /home/daytona/workspace/ijv-note && ls /home/daytona/workspace/ijv-note…

Writing File

~/ijv-note/generate_ijv_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
import os

OUTPUT = "/home/daytona/workspace/ijv-note/IJV_Cannulation_MD_Anaesthesia.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=1.8*cm, bottomMargin=1.8*cm
)

W, H = A4
styles = getSampleStyleSheet()

# ── Custom styles ────────────────────────────────────────────────
title_style = ParagraphStyle(
    "TitleCustom",
    parent=styles["Title"],
    fontSize=16,
    leading=20,
    textColor=colors.HexColor("#1a3a5c"),
    spaceAfter=4,
    alignment=TA_CENTER,
)
subtitle_style = ParagraphStyle(
    "SubTitle",
    parent=styles["Normal"],
    fontSize=9,
    textColor=colors.HexColor("#555555"),
    alignment=TA_CENTER,
    spaceAfter=2,
)
h1_style = ParagraphStyle(
    "H1",
    parent=styles["Heading1"],
    fontSize=12,
    leading=15,
    textColor=colors.white,
    backColor=colors.HexColor("#1a3a5c"),
    spaceBefore=10,
    spaceAfter=4,
    leftIndent=-4,
    rightIndent=-4,
    borderPad=4,
)
h2_style = ParagraphStyle(
    "H2",
    parent=styles["Heading2"],
    fontSize=10.5,
    leading=13,
    textColor=colors.HexColor("#1a3a5c"),
    spaceBefore=7,
    spaceAfter=3,
    borderPad=2,
)
h3_style = ParagraphStyle(
    "H3",
    parent=styles["Heading3"],
    fontSize=9.5,
    leading=12,
    textColor=colors.HexColor("#c0392b"),
    spaceBefore=5,
    spaceAfter=2,
)
body_style = ParagraphStyle(
    "Body",
    parent=styles["Normal"],
    fontSize=9,
    leading=13,
    alignment=TA_JUSTIFY,
    spaceAfter=3,
)
bullet_style = ParagraphStyle(
    "Bullet",
    parent=styles["Normal"],
    fontSize=9,
    leading=12,
    leftIndent=14,
    bulletIndent=4,
    spaceAfter=1,
)
sub_bullet_style = ParagraphStyle(
    "SubBullet",
    parent=styles["Normal"],
    fontSize=8.5,
    leading=11.5,
    leftIndent=26,
    bulletIndent=14,
    spaceAfter=1,
)
key_style = ParagraphStyle(
    "Key",
    parent=styles["Normal"],
    fontSize=8.5,
    leading=11,
    textColor=colors.HexColor("#7d1111"),
    backColor=colors.HexColor("#fff3f3"),
    leftIndent=6,
    rightIndent=6,
    borderPad=3,
    spaceAfter=2,
)
footer_style = ParagraphStyle(
    "Footer",
    parent=styles["Normal"],
    fontSize=7.5,
    textColor=colors.HexColor("#888888"),
    alignment=TA_CENTER,
)

def section(title):
    return [
        Spacer(1, 4),
        Paragraph(f"  {title}", h1_style),
    ]

def h2(text):
    return Paragraph(text, h2_style)

def h3(text):
    return Paragraph(text, h3_style)

def p(text):
    return Paragraph(text, body_style)

def b(text):
    return Paragraph(f"• {text}", bullet_style)

def sb(text):
    return Paragraph(f"◦ {text}", sub_bullet_style)

def sp(n=4):
    return Spacer(1, n)

def hr():
    return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=3)

def key_point(text):
    return Paragraph(f"<b>KEY:</b> {text}", key_style)

# ════════════════════════════════════════════════════════════════
story = []

# ── TITLE BLOCK ─────────────────────────────────────────────────
story.append(Spacer(1, 6))
story.append(Paragraph("INTERNAL JUGULAR VEIN (IJV)", title_style))
story.append(Paragraph("Anatomy | Methods of Cannulation | Complications", subtitle_style))
story.append(Paragraph("Short Note — MD Anaesthesia Examination (20 Marks)", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor("#1a3a5c"), spaceAfter=6))
story.append(sp(2))

# ═══════════════════════════════════════════════════════════════
# SECTION 1: ANATOMY
# ═══════════════════════════════════════════════════════════════
story += section("1. ANATOMY OF THE INTERNAL JUGULAR VEIN")
story.append(sp(2))

story.append(h2("1.1  Origin and Course"))
story += [
    p("The IJV is the largest vein draining the head and neck. It is a continuation of the "
      "<b>sigmoid sinus</b> and begins at the <b>jugular foramen</b> at the base of the skull. "
      "It descends within the <b>carotid sheath</b> alongside the common carotid artery (medially) "
      "and the vagus nerve (posteriorly), terminating by joining the <b>subclavian vein</b> behind "
      "the sternoclavicular joint to form the <b>brachiocephalic (innominate) vein</b>."),
    sp(2),
    p("The right IJV has a <b>shorter, straighter course</b> to the superior vena cava (SVC) and "
      "right atrium, making it the preferred cannulation site. The left IJV joins the left subclavian "
      "vein, increasing the risk of thoracic duct injury and pleural effusion."),
]

story.append(h2("1.2  Surface Anatomy & Relations"))
anatomy_data = [
    ["Relation", "Structure"],
    ["Anterior/Medial", "Common carotid artery (CCA)"],
    ["Posterior", "Vagus nerve; anterior scalene muscle; dome of pleura (left > right)"],
    ["Lateral", "Sternocleidomastoid (SCM) muscle"],
    ["Medial (lower)", "Thyroid gland; trachea; oesophagus"],
    ["Posterior (root of neck)", "Phrenic nerve on anterior scalene; subclavian artery"],
    ["Left side only", "Thoracic duct (enters junction of L IJV and L subclavian vein)"],
]
t_anatomy = Table(anatomy_data, colWidths=[5.5*cm, 10.5*cm])
t_anatomy.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 8.5),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t_anatomy)
story.append(sp(4))

story.append(h2("1.3  The SCM Triangle (Key Landmark)"))
story += [
    p("The <b>two heads of the SCM muscle</b> (sternal and clavicular) and the <b>clavicle</b> "
      "form a triangle. The apex of this triangle is the primary landmark for IJV cannulation. "
      "The IJV lies just <b>deep to the apex</b>, lateral to the carotid pulse, and medial to "
      "the lateral (clavicular) head of SCM."),
    b("<b>Size:</b> diameter approximately 1.5–2.5 cm in an adult; distends in Trendelenburg position"),
    b("The vein is <b>compressible</b> on ultrasound — key to distinguishing it from the carotid artery"),
    b("Normally lies <b>antero-lateral</b> to the carotid artery in the lower neck"),
]
story.append(key_point("Right IJV preferred: Right IJV + right innominate vein + SVC = nearly straight line to right atrium. Avoids thoracic duct. Lower complication rate."))
story.append(sp(3))

# ═══════════════════════════════════════════════════════════════
# SECTION 2: INDICATIONS & CONTRAINDICATIONS
# ═══════════════════════════════════════════════════════════════
story += section("2. INDICATIONS & CONTRAINDICATIONS")
story.append(sp(2))

ind_contra = [
    ["INDICATIONS", "CONTRAINDICATIONS / PRECAUTIONS"],
    [
        "CVP monitoring\nInfusion of vasoactive / caustic drugs\nTotal parenteral nutrition (TPN)\nPoor peripheral venous access\nRapid fluid resuscitation (large-bore)\nTranscutaneous pacing / PA catheter insertion\nAspiration of venous air embolism\nScvO2 monitoring (sepsis bundles)\nECMO cannulation (R IJV - double lumen)",
        "Local infection / cellulitis at site\nIpsilateral carotid endarterectomy\nCoagulopathy (relative — use R IJV, compressible)\nRecent neck surgery / irradiation\nContralateral pneumothorax (use same side)\nCervical spine immobilisation\nKnown SVC thrombosis\nTumour / AV fistula in neck\nSevere thrombocytopaenia (relative)"
    ],
]
t_ic = Table(ind_contra, colWidths=[8*cm, 8*cm])
t_ic.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 8.5),
    ("FONTNAME", (0,1), (-1,-1), "Helvetica"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f0f4f8"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_ic)
story.append(sp(4))

# ═══════════════════════════════════════════════════════════════
# SECTION 3: METHODS OF CANNULATION
# ═══════════════════════════════════════════════════════════════
story += section("3. METHODS OF CANNULATION")
story.append(sp(2))

story.append(h2("3.1  Pre-Procedure Preparation"))
story += [
    b("Informed consent; time-out protocol (right patient, right side)"),
    b("Position: <b>Trendelenburg 15°</b> — distends IJV, reduces air embolism risk"),
    b("Head turned <b>30° to the contralateral side</b> (over-rotation collapses IJV)"),
    b("Full aseptic technique: sterile gloves, gown, mask, cap; chlorhexidine-alcohol skin prep; large sterile drape"),
    b("Equipment: central line kit (18G introducer needle, J-wire, dilator, triple/quadruple lumen catheter), 10 mL syringe, 1% lidocaine, USG machine"),
    b("<b>Ultrasound guidance is standard of care</b> — mandated by most institutions for IJV cannulation"),
]
story.append(sp(3))

story.append(h2("3.2  Three Landmark Approaches"))
story.append(p("All three approaches target the IJV as it lies beneath the SCM triangle. "
               "The <b>central (median) approach</b> is most widely used in anaesthesia."))
story.append(sp(3))

# Approaches table
approaches = [
    ["Approach", "Needle Entry Point", "Direction", "Advantages / Notes"],
    [
        "Central\n(Median)\n★ MOST USED",
        "Apex of SCM triangle\n(junction of sternal &\nclavicular heads)",
        "30-45° to skin;\naim toward ipsilateral\nnipple; lateral to\ncarotid pulse",
        "Highest success rate\nLow pneumothorax risk\nCarotid haematoma\neasily compressible\nBest for beginners"
    ],
    [
        "Anterior",
        "Medial border of SCM,\nat the level of thyroid\ncartilage",
        "30-45° to skin;\naim toward ipsilateral\nnipple; lateral to\ncarotid artery",
        "Good visualisation of\ncarotid\nHigher accidental\ncarotid puncture risk"
    ],
    [
        "Posterior",
        "Posterior border of SCM,\n5 cm above clavicle\n(junction of external\njugular & SCM)",
        "Needle passes beneath\nSCM; directed toward\nsternal notch",
        "Avoids carotid artery\nMore difficult to perform\nHigher pneumothorax\nrisk; for experienced\noperators"
    ],
]
t_app = Table(approaches, colWidths=[3.2*cm, 4.3*cm, 4.3*cm, 4.2*cm])
t_app.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 8),
    ("FONTNAME", (0,1), (-1,-1), "Helvetica"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eaf0fb"), colors.HexColor("#f9f9f9")]),
    ("BACKGROUND", (0,1), (0,1), colors.HexColor("#d4edda")),  # highlight central approach
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 4),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_app)
story.append(sp(4))

story.append(h2("3.3  Seldinger Technique (Step-by-Step)"))
story.append(p("The <b>Seldinger (catheter over guidewire) technique</b> is used for the "
               "overwhelming majority of central lines. Steps:"))
story.append(sp(2))
steps = [
    ("1", "Infiltrate skin/subcutaneous tissue with 1–2% lidocaine at insertion site."),
    ("2", "Locate IJV with <b>USG (short-axis/in-plane view)</b> or anatomical landmarks."),
    ("3", "Insert 22G finder needle at 30–45° toward ipsilateral nipple; aspirate gently — "
          "dark (venous) blood confirms entry. <i>(Optional step — skip with USG)</i>"),
    ("4", "Insert 18G introducer needle along same path. Confirm free venous blood aspiration "
          "in 10 mL syringe. USG confirms needle tip in IJV (not carotid)."),
    ("5", "Stabilise needle. Disconnect syringe; occlude hub with thumb to prevent air entry."),
    ("6", "Advance <b>J-tipped guidewire</b> through needle — should pass with ZERO resistance. "
          "ECG monitoring: PVCs indicate wire in RV — withdraw slightly."),
    ("7", "<b>Never let go of the guidewire.</b> Confirm wire position with USG or fluoroscopy."),
    ("8", "Withdraw needle over wire. Nick skin with No. 11 blade alongside wire."),
    ("9", "Advance dilator over wire with a gentle twisting motion. Remove dilator."),
    ("10", "Thread central venous catheter (CVC) over wire. Target depth: R IJV 12–14 cm "
           "(tip at SVC-RA junction)."),
    ("11", "Remove wire. Aspirate and flush all ports. Confirm blood return."),
    ("12", "Secure catheter with suture. Apply sterile occlusive dressing."),
    ("13", "<b>Confirm position with chest X-ray</b> (tip at carina level) and <b>rule out "
           "pneumothorax</b>."),
]
sdata = [["Step", "Action"]] + [[s, Paragraph(d, body_style)] for s, d in steps]
t_steps = Table(sdata, colWidths=[1.2*cm, 14.8*cm])
t_steps.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c6e8a")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (0,-1), 8.5),
    ("ALIGN", (0,0), (0,-1), "CENTER"),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef6fa"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 4),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_steps)
story.append(sp(4))

story.append(h2("3.4  Ultrasound Guidance"))
story += [
    p("<b>USG is now the standard of care</b> for IJV cannulation "
      "(Barash Clinical Anaesthesia, 9e; Morgan & Mikhail, 7e). "
      "Real-time USG reduces failed attempts, arterial puncture, haematoma, and time to cannulation."),
    sp(2),
]
usg_data = [
    ["Technique", "Description"],
    ["Short-axis\n(out-of-plane)", "Transverse view: IJV appears as compressible circle, "
     "CCA as pulsatile non-compressible circle. Needle visualised as hyperechoic dot. "
     "Risk: needle may be anterior to transducer (anterior wall puncture without posterior wall seen)."],
    ["Long-axis\n(in-plane)", "Needle visualised along its entire length. "
     "Allows confirmation of wire placement in real time. Technically more demanding but reduces complications."],
    ["Dynamic vs static", "Dynamic (real-time) guidance preferred over static (pre-cannulation marking) — "
     "significantly reduces failure and complications."],
]
t_usg = Table(usg_data, colWidths=[3*cm, 13*cm])
t_usg.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c6e8a")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 8.5),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef6fa"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 4),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_usg)
story.append(sp(4))

# ═══════════════════════════════════════════════════════════════
# SECTION 4: COMPLICATIONS
# ═══════════════════════════════════════════════════════════════
story += section("4. COMPLICATIONS")
story.append(sp(2))

story.append(h2("4.1  Classification of Complications"))
story.append(p("Complications are classified by <b>timing</b> (immediate / early / late) "
               "and <b>mechanism</b> (mechanical / thromboembolic / infectious)."))
story.append(sp(3))

comp_data = [
    ["Category", "Complication", "Notes / Incidence"],
    # MECHANICAL - IMMEDIATE
    ["MECHANICAL\n(Immediate)", "Arterial puncture\n(Carotid artery)", 
     "Most common serious complication. Incidence ~3–5% (landmark), <1% (USG).\nManagement: Remove needle; apply firm direct pressure for 5–10 min.\nIf unrecognised arterial dilation/catheter placed: do NOT remove — seek vascular surgical help. Risk: haematoma, airway compression, stroke, death."],
    ["", "Pneumothorax", 
     "Incidence: ~0.5% (IJV) vs 1.5–3% (subclavian). Lower with USG.\nPresents: decreased breath sounds, hypoxia, CXR confirms.\nTreatment: needle decompression / chest drain if significant."],
    ["", "Air embolism", 
     "Prevented by Trendelenburg position & occluding needle hub.\nTreatment: Durant's manoeuvre (L lateral decubitus + Trendelenburg), 100% O2, aspirate via CVC."],
    ["", "Arrhythmias", 
     "Guidewire or catheter tip in RV/RA. Prevented by not inserting wire >20 cm.\nSelf-limiting once wire repositioned."],
    ["", "Haematoma / haemothorax", 
     "More common with coagulopathy. IJV preferred over subclavian in coagulopathic patients (direct compression possible)."],
    # MECHANICAL - EARLY
    ["MECHANICAL\n(Early)", "Malposition of catheter tip",
     "Tip in R atrium (arrhythmias, tamponade), SVC (poor CVP reading), IJV ascending (rare).\nConfirm tip position by CXR — tip should lie at the carina level (SVC-RA junction)."],
    ["", "Cardiac tamponade",
     "Due to cardiac perforation by guidewire or stiff catheter tip. Life-threatening — pericardiocentesis required."],
    ["", "Nerve injury",
     "Brachial plexus, phrenic nerve, vagus, recurrent laryngeal nerve, stellate ganglion (Horner syndrome), accessory nerve. More common with posterior approach."],
    ["", "Thoracic duct injury (L side)",
     "Chylothorax. Occurs with left IJV cannulation. Avoided by preferring right side."],
    ["", "Guidewire / catheter embolism",
     "Never let go of the wire. If lost: immediate CXR; interventional radiology retrieval."],
    # THROMBOEMBOLIC
    ["THROMBOEMBOLIC\n(Late)", "Venous thrombosis",
     "CVC-related DVT. IJV < subclavian < femoral. Long-term catheters increase risk.\nClinical: arm oedema, SVC syndrome.\nManagement: anticoagulation, line removal."],
    ["", "Pulmonary embolism",
     "Can arise from catheter tip thrombus. Potentially fatal."],
    # INFECTIOUS
    ["INFECTIOUS\n(Late)", "CLABSI (Central Line-\nAssociated Bloodstream\nInfection)",
     "Rate: ~1–2 per 1000 catheter-days (IJV > subclavian for infection risk).\nPrevention: maximal sterile barrier, chlorhexidine prep, early removal when no longer needed, daily review.\nTreatment: remove line, blood cultures, antibiotics."],
    ["", "Exit site / tunnel infection",
     "Erythema, pus at insertion site. Change line if persistent."],
    # MISCELLANEOUS
    ["MISCELLANEOUS", "Hydrothorax",
     "Inadvertent IV fluid infusion into pleural space from malpositioned catheter.\nDiagnosis: pleural fluid glucose = serum glucose."],
    ["", "Chylothorax (L side)",
     "Thoracic duct injury. Milky pleural fluid; high triglycerides."],
    ["", "AV fistula (rare)",
     "Carotid artery-IJV fistula — rare complication of cannulation."],
]

# Build complication table rows with merged cells
comp_style_data = [
    ["Category", "Complication", "Notes / Incidence"],
]
for row in comp_data[1:]:
    comp_style_data.append([
        Paragraph(f"<b>{row[0]}</b>", ParagraphStyle("tc", fontSize=8, leading=10)),
        Paragraph(f"<b>{row[1]}</b>", ParagraphStyle("tc2", fontSize=8, leading=10)),
        Paragraph(row[2], ParagraphStyle("tc3", fontSize=7.8, leading=10.5))
    ])

t_comp = Table(comp_style_data, colWidths=[3.2*cm, 3.8*cm, 9*cm])
t_comp.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,0), 8.5),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#fef9f0"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 4),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    # Colour category rows
    ("BACKGROUND", (0,1), (0,5), colors.HexColor("#fde8e8")),
    ("BACKGROUND", (0,6), (0,10), colors.HexColor("#fff3cd")),
    ("BACKGROUND", (0,11), (0,12), colors.HexColor("#d4edda")),
    ("BACKGROUND", (0,13), (0,14), colors.HexColor("#d1ecf1")),
    ("BACKGROUND", (0,15), (0,17), colors.HexColor("#f3e8ff")),
]))
story.append(t_comp)
story.append(sp(4))

story.append(h2("4.2  Prevention Strategies"))
prev_data = [
    ["Prevention Bundle", "Rationale"],
    ["Ultrasound guidance (real-time)", "Reduces arterial puncture, pneumothorax, failed attempts"],
    ["Trendelenburg positioning", "Distends IJV; reduces air embolism risk"],
    ["Maximal sterile barrier precautions", "Reduces CLABSI (sterile gown, gloves, mask, cap, full drape)"],
    ["Chlorhexidine-alcohol skin antisepsis", "Superior to povidone-iodine for infection prevention"],
    ["Right IJV preference", "Straight path to SVC-RA; avoids thoracic duct"],
    ["Confirm guidewire with USG / fluoroscopy", "Prevents inadvertent arterial dilation"],
    ["Daily catheter necessity review", "Early removal = fewer infections"],
    ["Post-insertion chest X-ray", "Confirms tip position; rules out pneumothorax"],
]
t_prev = Table(prev_data, colWidths=[7*cm, 9*cm])
t_prev.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2c6e8a")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,-1), 8.5),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef6fa"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t_prev)
story.append(sp(4))

# ═══════════════════════════════════════════════════════════════
# SECTION 5: HIGH-YIELD EXAM POINTS
# ═══════════════════════════════════════════════════════════════
story += section("5. HIGH-YIELD EXAM POINTS (MD ANAESTHESIA)")
story.append(sp(3))

high_yield = [
    ("Why right IJV?", "Straight course: R IJV → R innominate vein → SVC → RA. "
     "Avoids thoracic duct. Lower complication rate. CVC tip at correct position easier to achieve."),
    ("Trendelenburg position", "Distends IJV (increases calibre), reduces risk of air embolism. "
     "15° head-down is optimal. Over-rotation of head (>45°) may collapse the IJV."),
    ("Catheter tip ideal position", "SVC-RA junction — at or just above the level of the carina on CXR. "
     "Too deep → arrhythmias, cardiac perforation; too high → inaccurate CVP."),
    ("Carotid artery puncture", "Most common serious complication. Remove needle, apply pressure. "
     "NEVER dilate if artery inadvertently cannulated without vascular surgical backup."),
    ("Air embolism prevention", "Trendelenburg; occlude needle hub; guidewire inserted during expiration "
     "or positive pressure breath."),
    ("CLABSI prevention", "Maximal sterile barrier + chlorhexidine + daily review for removal = central "
     "line bundle. CLABSI is higher with IJV vs subclavian — femoral is highest risk."),
    ("USG guidance", "Standard of care. Reduces arterial puncture (3–5% → <0.5%), improves first-pass "
     "success. Short-axis most used; long-axis gives better needle visualisation."),
    ("Guidewire rule", "NEVER release the guidewire. PVCs on ECG during wire insertion = wire in RV — withdraw."),
    ("Left IJV risks", "Thoracic duct injury → chylothorax; more tortuous path; higher pleural effusion risk."),
    ("Depth of insertion", "Right IJV: 12–14 cm to SVC-RA junction. Left IJV: ~16 cm."),
]

hy_rows = [["Point", "Answer"]] + [[Paragraph(f"<b>{k}</b>", ParagraphStyle("k", fontSize=8, leading=10)),
                                     Paragraph(v, ParagraphStyle("v", fontSize=8, leading=10.5))]
                                    for k, v in high_yield]
t_hy = Table(hy_rows, colWidths=[4.5*cm, 11.5*cm])
t_hy.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1a3a5c")),
    ("TEXTCOLOR", (0,0), (-1,0), colors.white),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,0), 8.5),
    ("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#f5f0ff"), colors.white]),
    ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
    ("LEFTPADDING", (0,0), (-1,-1), 5),
    ("TOPPADDING", (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_hy)
story.append(sp(5))

# ── FOOTER / REFERENCES ─────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor("#1a3a5c"), spaceAfter=4))
story.append(Paragraph(
    "<b>References:</b> Morgan &amp; Mikhail's Clinical Anaesthesiology 7e (Ch.5) | "
    "Miller's Anaesthesia 10e | Barash Clinical Anaesthesia 9e | "
    "Tintinalli's Emergency Medicine | Roberts &amp; Hedges' Clinical Procedures | "
    "Pfenninger &amp; Fowler's Procedures for Primary Care",
    footer_style
))
story.append(Paragraph(
    "Prepared for MD Anaesthesia Examination | Orris Medical AI | July 2026",
    footer_style
))

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

cd /home/daytona/workspace/ijv-note && python generate_ijv_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/ijv-note/IJV_Cannulation_MD_Anaesthesia.pdf

Running Command

python3 -c " from pypdf import PdfReader r = PdfReader('/home/daytona/workspace/…

Your PDF short note is ready - 4 pages, exam-ready format:

IJV Cannulation MD Anaesthesia

PDF Document · PDF


Here is a summary of what the note covers across 5 sections:

INTERNAL JUGULAR VEIN - Short Note (20 Marks)

1. Anatomy

  • Origin: Continuation of sigmoid sinus at the jugular foramen
  • Course: Descends within the carotid sheath alongside the CCA (medially) and vagus nerve (posteriorly); terminates joining the subclavian vein to form the brachiocephalic vein behind the sternoclavicular joint
  • SCM Triangle: Sternal and clavicular heads of SCM + clavicle form the triangle; IJV lies at the apex, lateral to the carotid pulse
  • Right IJV preferred: Right IJV + right innominate vein + SVC = nearly straight line to RA; avoids thoracic duct; lower complication rate
  • Left IJV risk: Thoracic duct injury, chylothorax, tortuous path

2. Methods of Cannulation

Three landmark approaches:
ApproachEntry PointDirection
Central (most used)Apex of SCM triangle30-45° toward ipsilateral nipple
AnteriorMedial border SCM at thyroid cartilage30-45° toward ipsilateral nipple
PosteriorPosterior border SCM, 5 cm above clavicleToward sternal notch
Seldinger technique (13 steps): Patient in Trendelenburg 15°, head 30° contralateral → local anaesthetic → finder needle → 18G introducer → confirm venous blood → guidewire (J-tip, never release) → nick skin → dilator → catheter → aspirate/flush all ports → secure → CXR to confirm tip + rule out pneumothorax
Catheter tip depth: Right IJV 12-14 cm; left IJV ~16 cm (tip at SVC-RA junction = carina level on CXR)
USG guidance is standard of care - reduces arterial puncture from 3-5% to <0.5%

3. Complications

Mechanical (immediate):
  • Carotid artery puncture - most common serious complication; compress directly; NEVER dilate if artery cannulated
  • Pneumothorax - 0.5% (IJV) vs 1.5-3% (subclavian)
  • Air embolism - prevented by Trendelenburg + occluding hub
  • Arrhythmias - wire/catheter tip in RV; withdraw wire
  • Haematoma / haemothorax
Mechanical (early):
  • Catheter malposition, cardiac tamponade, nerve injury (phrenic, recurrent laryngeal, brachial plexus, stellate ganglion)
  • Thoracic duct injury (left side only) - chylothorax
  • Guidewire embolism (never release wire)
Thromboembolic (late):
  • CVC-related DVT, SVC syndrome, pulmonary embolism
Infectious (late):
  • CLABSI - IJV > subclavian for infection risk; prevented by central line bundle (maximal sterile barrier, chlorhexidine, daily review)

Sources: Morgan & Mikhail's Clinical Anaesthesiology 7e | Miller's Anaesthesia 10e | Barash Clinical Anaesthesia 9e | Roberts & Hedges' Clinical Procedures | Tintinalli's Emergency Medicine
This is a shared conversation. Sign in to Orris to start your own chat.