Sepsis recent guidelines

Reading File
Searching PubMed

"sepsis" AND "guidelines"

Searching the Web

Surviving Sepsis Campaign guidelines 2024 2025 updates

Finding Sources
Reading Article

PMID: 41869844

Reading Web Page

https://link.springer.com/article/10.1007/s00134-026-08361-1

Reading File
Reading Web Page

https://www.ebmedicine.net/media_library/files/Sepsis-Emerge…

I now have enough to deliver a comprehensive, current answer.

Sepsis: Recent Guidelines (2025-2026)

Definition (Sepsis-3, still current)

  • Sepsis: Life-threatening organ dysfunction caused by a dysregulated host response to infection, operationalized as a SOFA score increase ≥2 from baseline in the presence of infection.
  • Septic shock: Sepsis + vasopressor requirement to maintain MAP ≥65 mmHg + serum lactate >2 mmol/L despite adequate resuscitation.
  • The qSOFA (RR ≥22, altered mentation, SBP ≤100) remains a bedside screening tool but is NOT a diagnostic criterion.

Surviving Sepsis Campaign (SSC) 2026 - Adult Guidelines (Key Updates)

The newest SSC adult guidelines were published in 2026 via the SSC International Adult Guidelines (Springer, 2026). Here are the most important recommendations:

1. Diagnosis & Screening

  • Sepsis should be suspected in any patient with infection + new organ dysfunction (SOFA ≥2).
  • Obtain serum lactate and 2 sets of blood cultures prior to antibiotics whenever practical.
  • Point-of-care ultrasound (POCUS) is recommended to assess fluid status and cardiac function.

2. Fluid Resuscitation

SituationRecommendation
Hypotension or lactate ≥4 mmol/L30 mL/kg IV crystalloid bolus (balanced crystalloids preferred over normal saline)
After initial bolusFurther fluid guided by dynamic measures (pulse pressure variation, stroke volume variation, passive leg raise)
After acute resuscitation phaseActive fluid removal (diuretics; ultrafiltration if refractory) - NEW 2026 recommendation
  • Balanced crystalloids (e.g., Lactated Ringer's, Plasma-Lyte) are preferred over 0.9% saline to reduce hyperchloremic acidosis and AKI risk.
  • Albumin can be considered as an adjunct in patients requiring large volumes of crystalloid.
  • Avoid fluid overload - de-resuscitation is now explicitly endorsed.

3. Vasopressors

  • Norepinephrine remains the first-line vasopressor - target MAP ≥65 mmHg.
  • New 2026: For adults with sepsis-induced hypotension, initial IV crystalloid followed by vasopressor if hypotension persists (conditional). In unstable septic shock, immediate concurrent vasopressor + fluids is warranted.
  • Vasopressin (0.03 U/min) added as a second agent if norepinephrine doses are high.
  • Dopamine use is discouraged (higher arrhythmia risk vs. norepinephrine).
  • Inotropes (dobutamine or epinephrine alone): suggested when cardiac dysfunction with persistent hypoperfusion despite adequate fluids and MAP target - add to, not instead of, vasopressors.

4. Antimicrobials

  • Septic shock: Empiric antibiotics within 1 hour of recognition.
  • Sepsis without shock: Antibiotics within 3 hours; if diagnosis uncertain, allow time-limited clinical evaluation but start by 3 hours if no alternative diagnosis found.
  • Antimicrobial selection principles (Harrison's 22e):
    • Consider site of infection, community vs. healthcare exposure, local resistance patterns, immune status.
    • Undifferentiated sepsis without Pseudomonas risk: 3rd-generation cephalosporin (ceftriaxone/cefotaxime).
    • Pseudomonas risk: cefepime, pip-tazo, or carbapenem.
    • MRSA risk (healthcare exposure, hospital-onset): add vancomycin or linezolid.
    • Fungal risk (recent abdominal surgery, TPN, liver failure, multi-site Candida colonization): empiric echinocandin.
    • De-escalation and source control as early as possible.
    • Consider prolonged beta-lactam infusion and PK/PD optimization.

5. Source Control

  • Identify and control the infectious source as rapidly as possible (drainage, debridement, removal of infected devices).
  • Necrotizing soft tissue infections, perforated viscus, cholangitis, and pyelonephritis are surgical/interventional emergencies.

6. Corticosteroids

  • IV hydrocortisone (200 mg/day continuous infusion or 50 mg q6h) recommended in septic shock refractory to adequate fluid resuscitation and vasopressors.
  • Not recommended routinely in sepsis without shock.

7. Respiratory Support

  • High-flow nasal oxygen (HFNO) is preferred over conventional O2 or early intubation for sepsis-induced hypoxic respiratory failure.
  • If mechanically ventilated: low tidal volume (6 mL/kg IBW), target plateau pressure <30 cmH2O (lung-protective ventilation).
  • Prone positioning for moderate-severe ARDS (P/F <150).

8. Glucose Control

  • Initiate insulin when glucose ≥180 mg/dL (10 mmol/L).
  • Target range: 144-180 mg/dL (8-10 mmol/L) - liberal targets preferred due to reduced hypoglycemia risk with similar mortality outcomes.

9. Adjunctive Therapies - What's OUT

TherapyCurrent Recommendation
Vitamin CNot recommended - does not improve mortality
Sodium bicarbonateNot for lactic acidosis alone; beneficial if pH <7.2 + AKI stage 2-3
Routine antifungalsNot in undifferentiated sepsis without risk factors
Tight glucose controlNot recommended (<140 mg/dL targets abandoned)

10. Monitoring & De-escalation

  • Reassess antibiotic spectrum daily; de-escalate based on cultures.
  • Procalcitonin-guided antibiotic discontinuation may reduce duration.
  • Lactate clearance (target >10% reduction per 2 hours) as a resuscitation endpoint.

Pediatric Sepsis - SSC 2026 (PMID: 41869844)

The SSC Pediatric 2026 guidelines (61 statements; 5 strong, 24 conditional) updated key areas:
  • Fluid resuscitation: individualized rather than fixed 20 mL/kg bolus strategy.
  • Vasopressors: dopamine no longer preferred; norepinephrine/epinephrine favored.
  • Antibiotic timing and stewardship remain central.

German S3 Sepsis Guideline Update 2025 (PMID: 40824313)

The German multidisciplinary S3 guideline update (2025) covers prevention, diagnosis, therapy, and long-term follow-up including post-sepsis syndrome - an area gaining increasing guideline attention.

Summary of Major 2026 Changes vs. Prior SSC (2021)

Area2021 SSC2026 SSC Update
Vasopressors timingFluid-first approachConcurrent vasopressors allowed in unstable shock
Fluid removalNot addressedActive de-resuscitation recommended
Glucose target≤180 mg/dL144-180 mg/dL range emphasized
InotropesDobutamine preferredDobutamine or epinephrine alone (equivalent)

For a video overview of what's new in 2026:

Create a clinical decision flowchart for sepsis diagnosis and initial management

Reading File
Running Command

mkdir -p /tmp/workspace/sepsis-flowchart && ls /tmp/workspace/sepsis-flowchart/

Writing File

~/sepsis-flowchart/generate_flowchart.py

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import matplotlib.patheffects as pe
import numpy as np

fig, ax = plt.subplots(1, 1, figsize=(22, 34))
ax.set_xlim(0, 22)
ax.set_ylim(0, 34)
ax.axis('off')
fig.patch.set_facecolor('#F0F4F8')

# ─── Color palette ───────────────────────────────────────────────────────────
C_TITLE   = '#1A2E44'   # dark navy
C_START   = '#1A2E44'   # start/end
C_SCREEN  = '#2C6E9E'   # screening box
C_DIAM    = '#E67E22'   # decision diamond
C_ACTION  = '#1B7A4C'   # action / intervention
C_SHOCK   = '#C0392B'   # septic shock (urgent)
C_BUNDLE  = '#6C3483'   # bundle/treatment
C_NOTE    = '#5D6D7E'   # note/grey
C_MONI    = '#117A65'   # monitoring
C_WHITE   = '#FFFFFF'
C_CREAM   = '#FEF9F0'
C_LTGREEN = '#D5F5E3'
C_LTBLUE  = '#D6EAF8'
C_LTORANG = '#FDEBD0'
C_LTRED   = '#FADBD8'
C_LTPURP  = '#E8DAEF'
C_LTGREY  = '#EBF5FB'

# ─── Helper functions ─────────────────────────────────────────────────────────

def rounded_box(ax, x, y, w, h, color, text, fontsize=9, text_color='white',
                bold=False, radius=0.35, alpha=1.0, linestyle='-', edge_color=None,
                line_spacing=1.4):
    ec = edge_color if edge_color else color
    box = FancyBboxPatch((x - w/2, y - h/2), w, h,
                         boxstyle=f"round,pad=0.15,rounding_size={radius}",
                         linewidth=1.5, edgecolor=ec, facecolor=color, alpha=alpha,
                         linestyle=linestyle, zorder=3)
    ax.add_patch(box)
    weight = 'bold' if bold else 'normal'
    ax.text(x, y, text, ha='center', va='center', fontsize=fontsize,
            color=text_color, fontweight=weight, zorder=4,
            linespacing=line_spacing,
            wrap=False)

def diamond(ax, x, y, w, h, color, text, fontsize=8.5, text_color='white'):
    dx, dy = w/2, h/2
    xs = [x, x+dx, x, x-dx, x]
    ys = [y+dy, y, y-dy, y, y+dy]
    ax.fill(xs, ys, color=color, zorder=3, alpha=0.95)
    ax.plot(xs, ys, color=color, linewidth=1.5, zorder=4)
    ax.text(x, y, text, ha='center', va='center', fontsize=fontsize,
            color=text_color, fontweight='bold', zorder=5,
            linespacing=1.3)

def arrow(ax, x1, y1, x2, y2, color='#2C3E50', lw=1.8, label='', label_side='right'):
    ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
                arrowprops=dict(arrowstyle='->', color=color, lw=lw,
                                connectionstyle='arc3,rad=0.0'),
                zorder=2)
    if label:
        mx, my = (x1+x2)/2, (y1+y2)/2
        offset = 0.25 if label_side == 'right' else -0.25
        ax.text(mx + offset, my, label, fontsize=8, color=color,
                ha='left' if label_side == 'right' else 'right',
                va='center', fontstyle='italic', zorder=5)

def elbow_arrow(ax, x1, y1, x2, y2, color='#2C3E50', lw=1.8, label='',
                label_side='right', via_x=None, via_y=None):
    """Arrow going x1,y1 → via_x,via_y → x2,y2 with elbow"""
    if via_x is None: via_x = x1
    if via_y is None: via_y = y2
    ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
                arrowprops=dict(arrowstyle='->', color=color, lw=lw,
                                connectionstyle=f'angle,angleA=0,angleB=90,rad=0.3'),
                zorder=2)
    if label:
        ax.text((x1+x2)/2 + 0.2, (y1+y2)/2, label, fontsize=8,
                color=color, ha='left', va='center', fontstyle='italic', zorder=5)

def section_label(ax, x, y, text, color):
    ax.text(x, y, text, ha='left', va='center', fontsize=8,
            color=color, fontweight='bold',
            bbox=dict(boxstyle='round,pad=0.2', facecolor=color, alpha=0.15, edgecolor=color),
            zorder=6)

# ─── TITLE ───────────────────────────────────────────────────────────────────
title_box = FancyBboxPatch((0.4, 32.8), 21.2, 1.0,
                            boxstyle="round,pad=0.15,rounding_size=0.4",
                            linewidth=2, edgecolor=C_TITLE, facecolor=C_TITLE, zorder=3)
ax.add_patch(title_box)
ax.text(11, 33.3, 'SEPSIS: Clinical Decision Flowchart for Diagnosis & Initial Management',
        ha='center', va='center', fontsize=14, color='white', fontweight='bold', zorder=4)
ax.text(11, 33.05, 'Based on Surviving Sepsis Campaign 2026 Guidelines (SSC 2026)  |  SOFA-based Sepsis-3 Definition',
        ha='center', va='center', fontsize=8.5, color='#AED6F1', zorder=4)

# ─── STEP 1: PATIENT PRESENTATION ────────────────────────────────────────────
rounded_box(ax, 11, 32.1, 10, 0.65, C_SCREEN,
            'PATIENT PRESENTS WITH SUSPECTED INFECTION\n(fever/hypothermia, tachycardia, tachypnea, hypotension, altered mentation, leukocytosis/leukopenia)',
            fontsize=8.5, bold=True, radius=0.3)

arrow(ax, 11, 31.77, 11, 31.3)

# ─── STEP 2: SOFA SCREENING ──────────────────────────────────────────────────
rounded_box(ax, 11, 31.0, 10, 0.55, C_LTBLUE,
            'BEDSIDE SCREENING   ▶   qSOFA ≥2?\n(RR ≥22 | Altered mentation | SBP ≤100 mmHg)',
            fontsize=8.5, bold=False, text_color=C_TITLE, radius=0.3,
            edge_color=C_SCREEN)

arrow(ax, 11, 30.72, 11, 30.2)

# ─── STEP 3: DIAGNOSIS DIAMOND ───────────────────────────────────────────────
diamond(ax, 11, 29.6, 5.5, 1.05, C_DIAM,
        'Suspected Infection\n+ SOFA ≥ 2 above baseline?\n(New organ dysfunction)', fontsize=8.5)

# NO branch (right)
arrow(ax, 13.75, 29.6, 17, 29.6, color='#922B21', label='NO', label_side='right')
rounded_box(ax, 19, 29.6, 3.6, 0.7, '#922B21',
            'NOT SEPSIS\nReassess; treat underlying\ncondition; continue monitoring',
            fontsize=7.8, radius=0.25)

# YES arrow down
arrow(ax, 11, 29.07, 11, 28.55, label='YES', label_side='right')

# ─── STEP 4: IMMEDIATE ACTIONS (HOUR 1 BUNDLE) ───────────────────────────────
section_label(ax, 0.5, 28.85, '⏱ HOUR 1 BUNDLE', C_ACTION)

rounded_box(ax, 11, 28.1, 19, 0.85, C_LTGREEN,
            '① Measure serum LACTATE    ② Draw 2 sets BLOOD CULTURES (before ABx)    ③ Initiate IV ACCESS (peripheral or central)\n④ MONITOR: continuous pulse ox, ECG, urine output, BP; obtain CBC, CMP, coagulation, ABG/VBG, procalcitonin',
            fontsize=8.3, text_color='#1B4332', radius=0.3, edge_color=C_ACTION)

arrow(ax, 11, 27.67, 11, 27.15)

# ─── STEP 5: SEPTIC SHOCK DIAMOND ────────────────────────────────────────────
diamond(ax, 11, 26.5, 5.8, 1.1, C_DIAM,
        'Signs of SEPTIC SHOCK?\nVasopressor needed to maintain\nMAP ≥65 + Lactate >2 mmol/L', fontsize=8.5)

# ─── YES BRANCH (left - septic shock) ────────────────────────────────────────
arrow(ax, 8.1, 26.5, 4.8, 26.5, color=C_SHOCK, label='YES', label_side='right')
ax.text(4.8, 27.15, 'SEPTIC SHOCK', ha='center', va='center', fontsize=9,
        color=C_SHOCK, fontweight='bold')
rounded_box(ax, 4.8, 26.5, 6, 1.0, C_LTRED,
            'Antibiotics within 1 HOUR\nNorepinephrine IMMEDIATELY\n(concurrent with fluids if unstable shock)\nTarget MAP ≥65 mmHg',
            fontsize=8, text_color='#641E16', radius=0.3, edge_color=C_SHOCK)
arrow(ax, 4.8, 26.0, 4.8, 25.1, color=C_SHOCK)

# ─── NO BRANCH (right - sepsis no shock) ─────────────────────────────────────
arrow(ax, 13.9, 26.5, 17.5, 26.5, color=C_ACTION, label='NO', label_side='right')
ax.text(17.5, 27.15, 'SEPSIS (no shock)', ha='center', va='center', fontsize=9,
        color=C_ACTION, fontweight='bold')
rounded_box(ax, 17.5, 26.5, 6, 1.0, C_LTGREEN,
            'Antibiotics within 3 HOURS\nIf diagnosis uncertain:\n  time-limited eval, start by 3 h\nIV crystalloid bolus 30 mL/kg\n  if lactate ≥4 or hypotension',
            fontsize=8, text_color='#1B4332', radius=0.3, edge_color=C_ACTION)
arrow(ax, 17.5, 26.0, 17.5, 25.1, color=C_ACTION)

# ─── MERGE BACK ──────────────────────────────────────────────────────────────
# Both branches feed into FLUID & VASOPRESSOR block at y=24.7
ax.annotate('', xy=(11, 24.7), xytext=(4.8, 25.1),
            arrowprops=dict(arrowstyle='->', color='#2C3E50', lw=1.8,
                            connectionstyle='angle,angleA=0,angleB=90,rad=0.3'), zorder=2)
ax.annotate('', xy=(11, 24.7), xytext=(17.5, 25.1),
            arrowprops=dict(arrowstyle='->', color='#2C3E50', lw=1.8,
                            connectionstyle='angle,angleA=0,angleB=90,rad=0.3'), zorder=2)

# ─── STEP 6: FLUID & VASOPRESSOR MANAGEMENT ─────────────────────────────────
section_label(ax, 0.5, 25.1, '💧 RESUSCITATION', C_SCREEN)
rounded_box(ax, 11, 24.3, 19, 0.7, C_LTBLUE,
            'FLUID RESUSCITATION  |  Balanced crystalloids preferred (Lactated Ringer\'s or Plasma-Lyte) over 0.9% NaCl\n30 mL/kg bolus → reassess with dynamic measures (PPV, SVV, passive leg raise, POCUS cardiac/IVC)',
            fontsize=8.3, text_color='#154360', radius=0.3, edge_color=C_SCREEN)

arrow(ax, 11, 23.95, 11, 23.4)

# ─── STEP 7: RESPONSE TO FLUIDS ──────────────────────────────────────────────
diamond(ax, 11, 22.8, 5.5, 1.05, C_DIAM,
        'Hemodynamically\nSTABLE after resuscitation?\n(MAP ≥65, lactate improving)', fontsize=8.5)

# NO → more vasopressors
arrow(ax, 8.25, 22.8, 5.0, 22.8, color=C_SHOCK, label='NO', label_side='right')
rounded_box(ax, 3.8, 22.8, 5.2, 1.1, C_LTRED,
            'ESCALATE VASOPRESSORS\n1st: Norepinephrine (titrate)\n2nd: Add Vasopressin 0.03 U/min\n  or Angiotensin II\nConsider Hydrocortisone\n  200 mg/day if refractory shock',
            fontsize=7.8, text_color='#641E16', radius=0.3, edge_color=C_SHOCK)

# YES → continue monitoring
arrow(ax, 13.75, 22.8, 16.5, 22.8, color=C_ACTION, label='YES', label_side='right')
rounded_box(ax, 18.5, 22.8, 5.5, 1.1, C_LTGREEN,
            'CONTINUE MONITORING\nReassess fluid status q1-2h\nLactate clearance target ≥10%/2h\nConsider de-escalation of fluids\nAvoid fluid overload',
            fontsize=7.8, text_color='#1B4332', radius=0.3, edge_color=C_ACTION)

arrow(ax, 11, 22.27, 11, 21.7)

# ─── STEP 8: ANTIBIOTIC SELECTION ────────────────────────────────────────────
section_label(ax, 0.5, 22.2, '💊 ANTIMICROBIALS', C_BUNDLE)
rounded_box(ax, 11, 21.2, 19, 0.85, C_LTPURP,
            'EMPIRIC ANTIBIOTIC SELECTION  (tailor to suspected source, risk factors, local resistance patterns)\n'
            'No Pseudomonas risk → Ceftriaxone/Cefotaxime  |  Pseudomonas risk → Cefepime / Pip-Tazo / Carbapenem\n'
            'MRSA risk → Add Vancomycin or Linezolid  |  Fungal risk (post-abdominal surgery, TPN, Candida colonization) → Echinocandin',
            fontsize=8, text_color='#4A235A', radius=0.3, edge_color=C_BUNDLE)

arrow(ax, 11, 20.77, 11, 20.25)

# ─── STEP 9: SOURCE CONTROL ──────────────────────────────────────────────────
rounded_box(ax, 11, 19.9, 14, 0.65, '#117A65',
            '🔍 SOURCE CONTROL: Identify & control infection source ASAP (abscess drainage, debridement, device removal)\n'
            'Surgical emergencies: perforated viscus, necrotizing fasciitis, cholangitis, pyelonephritis',
            fontsize=8, text_color='white', radius=0.3)

arrow(ax, 11, 19.57, 11, 19.05)

# ─── STEP 10: RESPIRATORY SUPPORT ────────────────────────────────────────────
section_label(ax, 0.5, 19.35, '🫁 RESP / ICU', '#2471A3')
diamond(ax, 11, 18.5, 5.5, 1.05, '#2471A3',
        'Hypoxic Respiratory\nFailure or O2 sat <94%?', fontsize=8.5)

arrow(ax, 8.25, 18.5, 5.0, 18.5, color='#2471A3', label='YES', label_side='right')
rounded_box(ax, 3.5, 18.5, 5.5, 1.1, '#D6EAF8',
            '1st: High-Flow Nasal Oxygen (HFNO)\n  or Non-Invasive Ventilation\n2nd: Intubate if HFNO fails\nMechanical ventilation:\n  Tidal vol 6 mL/kg IBW\n  Plateau P <30 cmH₂O\n  Prone if P/F <150 mmHg',
            fontsize=7.8, text_color='#1A5276', radius=0.3, edge_color='#2471A3')

arrow(ax, 13.75, 18.5, 16.0, 18.5, color=C_NOTE, label='NO / Mild', label_side='right')
rounded_box(ax, 18.0, 18.5, 5.5, 0.65, C_LTGREY,
            'Supplemental O₂ via face mask\nMonitor closely; POCUS cardiac output\nTarget SpO₂ 94-98%',
            fontsize=7.8, text_color=C_NOTE, radius=0.25, edge_color=C_NOTE)

arrow(ax, 11, 17.97, 11, 17.4)

# ─── STEP 11: ADJUNCTIVE / ADDITIONAL MANAGEMENT ────────────────────────────
section_label(ax, 0.5, 17.65, '⚙  ADJUNCTIVE CARE', C_NOTE)
rounded_box(ax, 11, 16.95, 19, 0.8, '#F4F6F7',
            'GLUCOSE CONTROL: Start insulin if glucose ≥180 mg/dL  |  Target 144-180 mg/dL  (avoid tight <140 mg/dL)\n'
            'CORTICOSTEROIDS: Hydrocortisone 200 mg/day if shock refractory to fluids + vasopressors\n'
            'NOT recommended: Vitamin C (no mortality benefit) | Bicarbonate (unless pH <7.2 + AKI stage 2-3) | Routine antifungals',
            fontsize=8, text_color='#2C3E50', radius=0.3,
            edge_color='#85929E')

arrow(ax, 11, 16.55, 11, 16.0)

# ─── STEP 12: ICU ADMISSION & MONITORING ─────────────────────────────────────
section_label(ax, 0.5, 16.25, '🏥 ICU / MONITORING', C_MONI)
rounded_box(ax, 11, 15.55, 19, 0.8, C_LTGREEN,
            'ICU ADMISSION within 6 hours for critically ill / shocked patients\n'
            'MONITORING: Hourly urine output (target ≥0.5 mL/kg/h) | Serial lactate q2h until <2 mmol/L | Daily SOFA score\n'
            'Hemodynamic targets: MAP ≥65 mmHg | CVP 8-12 mmHg (if used) | ScvO₂ ≥70%',
            fontsize=8, text_color='#1B4332', radius=0.3, edge_color=C_MONI)

arrow(ax, 11, 15.15, 11, 14.6)

# ─── STEP 13: REASSESSMENT AT 6H ─────────────────────────────────────────────
diamond(ax, 11, 14.0, 5.8, 1.1, C_DIAM,
        'Clinical IMPROVEMENT\nat 6 hours?\n(MAP, lactate, UO, mentation)', fontsize=8.5)

# YES
arrow(ax, 13.9, 14.0, 17.0, 14.0, color=C_ACTION, label='YES', label_side='right')
rounded_box(ax, 19.3, 14.0, 4.8, 1.1, C_LTGREEN,
            'CONTINUE CURRENT PLAN\nDe-escalate antibiotics\n  per culture results\nGradual vasopressor wean\nActive fluid removal\n  (diuretics once stable)',
            fontsize=7.8, text_color='#1B4332', radius=0.3, edge_color=C_ACTION)

# NO
arrow(ax, 8.1, 14.0, 4.8, 14.0, color=C_SHOCK, label='NO', label_side='right')
rounded_box(ax, 3.3, 14.0, 5.2, 1.1, C_LTRED,
            'REASSESS:\nRepeat cultures / imaging\nEscalate antibiotics\nConsider additional vasopressors\n  / inotropes (Dobutamine\n  if cardiac dysfunction)\nReevaluate source control',
            fontsize=7.8, text_color='#641E16', radius=0.3, edge_color=C_SHOCK)

arrow(ax, 11, 13.45, 11, 12.9)

# ─── STEP 14: ANTIBIOTIC DE-ESCALATION ──────────────────────────────────────
section_label(ax, 0.5, 13.15, '🔁 DE-ESCALATION', C_BUNDLE)
rounded_box(ax, 11, 12.45, 19, 0.8, C_LTPURP,
            'ANTIBIOTIC STEWARDSHIP: Review cultures daily  |  Narrow spectrum based on sensitivities\n'
            'Procalcitonin-guided discontinuation  |  Target shortest effective course (typically 5-7 days)\n'
            'Stop antifungals/antivirals if not supported by cultures/clinical picture',
            fontsize=8, text_color='#4A235A', radius=0.3, edge_color=C_BUNDLE)

arrow(ax, 11, 12.05, 11, 11.5)

# ─── STEP 15: SPECIAL POPULATIONS NOTE ──────────────────────────────────────
rounded_box(ax, 11, 11.1, 19, 0.7, '#F8F9FA',
            '⚠  SPECIAL POPULATIONS: Immunocompromised → broader coverage; Pregnant → avoid certain antibiotics; Pediatric → SSC 2026 Pediatric Guidelines apply\n'
            'Low/Middle-income settings → adapt to available resources per SSC 2026 LMIC recommendations',
            fontsize=8, text_color='#566573', radius=0.3, edge_color='#AAB7B8', bold=False)

arrow(ax, 11, 10.75, 11, 10.2)

# ─── OUTCOMES / EXIT ─────────────────────────────────────────────────────────
rounded_box(ax, 11, 9.85, 10, 0.65, C_START,
            'ONGOING: Daily goals reassessment  |  DVT/stress ulcer prophylaxis  |  Early enteral nutrition  |  Rehabilitation\nSurvivor: Screen for Post-Sepsis Syndrome at discharge & follow-up',
            fontsize=8.3, bold=False, radius=0.3)

# ─── LEGEND ──────────────────────────────────────────────────────────────────
legend_x, legend_y = 0.5, 8.9
ax.text(legend_x, legend_y + 0.2, 'LEGEND', fontsize=9, fontweight='bold', color=C_TITLE,
        va='bottom')

items = [
    (C_SCREEN,  C_WHITE,  'Screening / Assessment'),
    (C_DIAM,    C_WHITE,  'Decision Point'),
    (C_ACTION,  C_WHITE,  'Action / Intervention (stable/less urgent)'),
    (C_SHOCK,   C_WHITE,  'Urgent Action (septic shock)'),
    (C_BUNDLE,  C_WHITE,  'Treatment Bundle / Stewardship'),
    (C_MONI,    C_WHITE,  'Monitoring / ICU'),
]
for i, (fc, tc, lbl) in enumerate(items):
    bx = legend_x
    by = legend_y - 0.55 - i * 0.52
    b = FancyBboxPatch((bx, by - 0.18), 1.2, 0.36,
                       boxstyle="round,pad=0.05,rounding_size=0.1",
                       facecolor=fc, edgecolor=fc, linewidth=1, zorder=3)
    ax.add_patch(b)
    ax.text(bx + 0.6, by, tc, ha='center', va='center', fontsize=7.5, color=tc, zorder=4)
    ax.text(bx + 1.4, by, lbl, ha='left', va='center', fontsize=8, color=C_TITLE, zorder=4)

# ─── KEY NUMBERS BOX ─────────────────────────────────────────────────────────
kx, ky = 7.5, 8.9
ax.text(kx, ky + 0.2, 'KEY NUMBERS', fontsize=9, fontweight='bold', color=C_TITLE)
key_items = [
    ('Antibiotic timing (septic shock)', '≤ 1 hour'),
    ('Antibiotic timing (sepsis, no shock)', '≤ 3 hours'),
    ('Initial crystalloid bolus', '30 mL/kg'),
    ('MAP target', '≥ 65 mmHg'),
    ('Lactate clearance target', '≥ 10% per 2 h'),
    ('Glucose target', '144-180 mg/dL'),
    ('Tidal volume (MV)', '6 mL/kg IBW'),
    ('Hydrocortisone dose', '200 mg/day'),
    ('ICU admission target', 'Within 6 hours'),
]
for i, (label, val) in enumerate(key_items):
    yy = ky - 0.5 - i * 0.48
    ax.text(kx, yy, f'• {label}:', fontsize=8, color=C_TITLE, va='center')
    ax.text(kx + 5.2, yy, val, fontsize=8.5, color=C_SHOCK, fontweight='bold', va='center')

# ─── SEPSIS-3 DEFINITION BOX ─────────────────────────────────────────────────
dx, dy = 14.5, 8.9
ax.text(dx, dy + 0.2, 'SEPSIS-3 DEFINITIONS', fontsize=9, fontweight='bold', color=C_TITLE)
defs = [
    ('SEPSIS', 'Infection + new SOFA ≥2 above baseline'),
    ('SEPTIC SHOCK', 'Sepsis + vasopressor for MAP ≥65\n+ Lactate >2 mmol/L (no hypovolemia)'),
    ('qSOFA', 'RR ≥22, Altered mentation, SBP ≤100\n(screening tool, not diagnostic)'),
    ('SOFA domains', 'Respiration, Coagulation, Liver,\nCVS, CNS, Renal'),
]
for i, (term, defn) in enumerate(defs):
    yy = dy - 0.55 - i * 0.9
    rounded_box(ax, dx + 3.3, yy, 7.0, 0.75,
                C_LTBLUE if i % 2 == 0 else C_LTGREEN,
                f'{term}:  {defn}',
                fontsize=7.8, text_color=C_TITLE, radius=0.2, edge_color=C_SCREEN)

# ─── FOOTER ──────────────────────────────────────────────────────────────────
ax.plot([0.4, 21.6], [0.5, 0.5], color='#AAB7B8', lw=1)
ax.text(11, 0.3, 'Based on: Surviving Sepsis Campaign 2026 Adult & Pediatric Guidelines (SSC 2026) | ESICM 2025 | Sepsis-3 Definitions | Harrison\'s Internal Medicine 22e',
        ha='center', va='center', fontsize=7.5, color='#717D7E', style='italic')

plt.tight_layout(pad=0.3)
plt.savefig('/tmp/workspace/sepsis-flowchart/sepsis_flowchart.png',
            dpi=180, bbox_inches='tight', facecolor='#F0F4F8')
print("Saved successfully.")
Running Command

cd /tmp/workspace/sepsis-flowchart && python generate_flowchart.py 2>&1

Editing File

~/sepsis-flowchart/generate_flowchart.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sepsis-flowchart/generate_flowchart.py'
Running Command

cd /tmp/workspace/sepsis-flowchart && sed -i \ "s/'💧 RESUSCITATION'/'[~] RESUSCITATION'/g" \ "s/'💊 ANTIMICROBIALS'/'[Rx] ANTIMICROBIALS'/g" \ "s/'🔍 SOURCE CONTROL'/'[S] SOURCE CONTROL'/g" \ "s/'🫁 RESP \/ ICU'/'[Resp] RESP \/ ICU'/g" \ "s/'🏥 ICU \/ MONITORING'/'[ICU] ICU \/ MONITORING'/g" \ "s/'🔁 DE-ESCALATION'/'[v] DE-ESCALATION'/g" \ generate_flowchart.py && python generate_flowchart.py 2>&1 | grep -v UserWarning | grep -v "plt\."

Editing File

~/sepsis-flowchart/generate_flowchart.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sepsis-flowchart/generate_flowchart.py'
Editing File

~/sepsis-flowchart/generate_flowchart.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sepsis-flowchart/generate_flowchart.py'
Running Command

python3 -c " content = open('/tmp/workspace/sepsis-flowchart/generate_flowchart.py').read() replacements = { '💧 RESUSCITATION': '[~] RESUSCITATION', '🔍 SOURCE CONTROL': '[S] SOURCE CONTROL', '🫁 RESP / ICU': '[Resp] RESP / ICU', '🏥 ICU / MONITORING': '[ICU] ICU / MONITORING', '🔁 DE-ESCALATION': '[>>] DE-ESCALATION', '⚙ ADJUNCTIVE CARE': '[+] ADJUNCTIVE CARE', '⚠ SPECIAL POPULATIONS': '[!] SPECIAL POPULATIONS', } for old, new in replacements.items(): content = content.replace(old, new) open('/tmp/workspace/sepsis-flowchart/generate_flowchart.py', 'w').write(content) print('Done') "

Running Command

cd /tmp/workspace/sepsis-flowchart && python generate_flowchart.py 2>&1

Running Command

ls -lh /tmp/workspace/sepsis-flowchart/sepsis_flowchart.png

1.3 MB - a full-resolution chart. Here it is:

Your clinical decision flowchart is ready:

sepsis flowchart

Image · PNG


Here's what the flowchart covers, top to bottom:
  1. Patient Presentation - suspected infection with clinical signs
  2. Bedside Screening - qSOFA ≥2 triggers further assessment
  3. Diagnosis Diamond - Infection + SOFA ≥2 = Sepsis (Sepsis-3); NO branch exits to "Not Sepsis"
  4. Hour 1 Bundle - serum lactate, 2x blood cultures, IV access, monitoring labs
  5. Septic Shock Branch - splits into two parallel tracks:
    • Shock (YES): antibiotics within 1 hour, immediate norepinephrine (can be concurrent with fluids in unstable shock)
    • No Shock (NO): antibiotics within 3 hours, 30 mL/kg crystalloid if indicated
  6. Fluid Resuscitation - balanced crystalloids, dynamic reassessment
  7. Hemodynamic Response Diamond - escalate vasopressors (NE → vasopressin → hydrocortisone) if no improvement
  8. Antibiotic Selection - risk-stratified (Pseudomonas / MRSA / fungal)
  9. Source Control - surgical/procedural emergencies
  10. Respiratory Support - HFNO first, intubation with lung-protective ventilation if needed
  11. Adjunctive Care - glucose control (144-180), steroids, what NOT to use (Vitamin C, bicarb, tight glycemia)
  12. ICU Monitoring - MAP, lactate, urine output, SOFA
  13. 6-Hour Reassessment - continue vs. escalate/de-escalate
  14. Antibiotic De-escalation - stewardship, procalcitonin-guided
  15. Special Populations note and post-sepsis survivor care
The color coding (blue = screening, orange = decisions, green = stable actions, red = urgent/shock, purple = antimicrobials) helps clinicians navigate at a glance.
This is a shared conversation. Sign in to Orris to start your own chat.