Make a deatiled note on Urosepsis using latest SSC 2026 guidelines. Make sure to use all other latest evidance based guidelines for urosepsis
urosepsis management guidelines
Surviving Sepsis Campaign 2025 2026 guidelines urosepsis urinary tract infection sepsis management
https://www.idsociety.org/practice-guideline/surviving-sepsi…
urosepsis antibiotics outcomes treatment
https://www.esicm.org/2026-surviving-sepsis-campaing-guideli…
urosepsis "septic shock" obstructive drainage management
EAU guidelines 2025 2026 urosepsis urological infections management recommendations
sepsis "surviving sepsis campaign" antibiotics "source control" 2024 2025
https://www.guidelinecentral.com/guideline/4543237
PMID: 41597508
PMID: 40216650
| Pathogen | Notes |
|---|---|
| Escherichia coli | Most common (60-95%); community-acquired |
| Klebsiella pneumoniae | Often reinfection or hospital-acquired; ESBL rates 20-70% (2026 SR, PMID 41597508) |
| Enterococcus faecalis/faecium | Recurrent/complicated UTI |
| Proteus spp. | Associated with struvite calculi; urease-producing |
| Pseudomonas aeruginosa | Hospital-acquired; catheter-related; MDR concern |
| Serratia / Acinetobacter | Healthcare-associated |
| Candida spp. | Fungal UTI; diabetes, catheter, prior broad-spectrum antibiotics |
Textbook Note: "Patients who present with urosepsis typically have complicated UTI rather than nonobstructive pyelonephritis. Urosepsis can present with or progress to septic shock, which requires life-supporting treatment in addition to antibiotics." - Goldman-Cecil Medicine, 26th Ed.
| System | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| Respiratory PaO2/FiO2 | ≥400 | <400 | <300 | <200 | <100 |
| Coagulation (platelets ×10³/μL) | ≥150 | <150 | <100 | <50 | <20 |
| Liver (bilirubin mg/dL) | <1.2 | 1.2-1.9 | 2.0-5.9 | 6.0-11.9 | >12 |
| Cardiovascular | MAP ≥70 | MAP <70 | Dopamine <5 or dobutamine | Dopa 5.1-15 or epi/norepi ≤0.1 | Dopa >15 or epi/norepi >0.1 |
| CNS (GCS) | 15 | 13-14 | 10-12 | 6-9 | <6 |
| Renal (creat mg/dL) | <1.2 | 1.2-1.9 | 2.0-3.4 | 3.5-4.9 | >5 |
| Modality | Role | Evidence |
|---|---|---|
| Ultrasound (US) | First-line; rapid; detects hydronephrosis, abscess, calculi, obstruction; guides drainage | Bedside availability, no radiation |
| CT scan (non-contrast or contrast) | Gold standard; 71-100% sensitivity for obstructive complications, abscess, gas (emphysematous pyelonephritis); superior to US | Confirms diagnosis, guides intervention |
| MRI | Comparable diagnostic accuracy to CT in selected cases; avoids radiation; use in pregnancy | Selected cases |
| KUB X-ray | Limited value; may show calculi | Low sensitivity |
| CEUS / Doppler US | Assess renal perfusion | Adjunct |
CT of abdomen/pelvis should be performed urgently in all patients with urosepsis to identify obstructing calculi, perinephric abscess, emphysematous pyelonephritis, or other surgically correctable pathology.
| Scenario | SSC 2026 Recommendation | Strength |
|---|---|---|
| Probable/definite sepsis without shock | Antibiotics immediately, ideally within 1 hour of recognition | STRONG |
| Possible sepsis without shock | Time-limited rapid investigation; if concern persists, antibiotics within 3 hours | Conditional |
| Septic shock (any sepsis with vasopressor need) | Antibiotics immediately, within 1 hour | STRONG |
| Clinical Scenario | First-line Options | Alternatives |
|---|---|---|
| Community-acquired urosepsis, no MDR risk | 3rd/4th gen cephalosporin (ceftriaxone 1-2g IV q24h; cefotaxime; cefepime) | Piperacillin-tazobactam 4.5g IV q8h |
| Community-acquired, FQ-susceptible | Ciprofloxacin 400mg IV q12h (if local susceptibility >90%) | Levofloxacin 750mg IV q24h |
| ESBL risk (prior ESBL UTI, fluoroquinolone exposure, healthcare contact) | Carbapenem: Meropenem 1g IV q8h; Ertapenem 1g IV q24h (if stable, no P. aeruginosa risk) | Imipenem-cilastatin; Temocillin (where available) |
| MDR / Pseudomonas risk | Anti-pseudomonal carbapenem (Meropenem, Imipenem, Doripenem) | Cefepime; Piperacillin-tazobactam |
| Carbapenem-resistant (CRE/CPE) | Ceftazidime-avibactam; Meropenem-vaborbactam; Imipenem-cilastatin-relebactam | Cefiderocol; Aztreonam-avibactam (for MBL) |
| Complicated UTI with severe symptoms (Goldman-Cecil) | Plazomicin 15mg/kg IV q24h; OR Meropenem 1g IV q8h for 4-5 days, then oral step-down | Piperacillin-tazobactam; Fosfomycin 6g IV q8h |
| Fungal urosepsis (Candida) | Fluconazole 400mg loading then 200mg q24h (if susceptible, stable) | Echinocandin (caspofungin, micafungin) for septic shock/fluconazole-resistant |
| Cause | Intervention | Timing |
|---|---|---|
| Obstructing ureteric calculus | Ureteric stenting (retrograde DJ stent) OR percutaneous nephrostomy (PCN) | Emergent - within 6 hours of sepsis diagnosis |
| Perinephric / renal abscess | Percutaneous drainage (image-guided); surgical drainage if inaccessible | Urgent |
| Emphysematous pyelonephritis | Percutaneous drainage + aggressive antibiotics; nephrectomy if unresponsive | Emergency |
| Pyonephrosis | PCN decompression | Emergency |
| Infected obstructed renal transplant | PCN or stent | Emergency |
| Prostatic abscess | Transrectal or transperineal drainage | Urgent |
| Acute bacterial prostatitis | Antibiotics +/− drainage if abscess (no incision of non-abscess prostate) | Urgent |
| Infected urinary catheter | Remove/replace catheter | Immediate |
| Infected ureteric stent | Replace/remove stent | Urgent |
| Post-ureteroscopy sepsis | Drain collecting system; nephrostomy if needed | Emergency |
Key Point: Obstruction-related urosepsis (pyonephrosis, obstructed kidney) MUST be decompressed urgently. Antibiotics alone are insufficient. The obstructed, infected collecting system acts as a reservoir that is inaccessible to antibiotics until drained.
| Biomarker | Role | Key Threshold |
|---|---|---|
| Serum Lactate | Hypoperfusion; risk stratification; treatment response | ≥2 mmol/L = hypoperfusion; ≥4 mmol/L = high mortality risk |
| Procalcitonin (PCT) | Bacterial infection; de-escalation guide; septic shock prediction in AOP | >1.12 µg/L = predictor of shock (PMID 41597508); used for de-escalation (SSC 2026) |
| CRP | Inflammation; less specific | Elevation supports infection |
| Presepsin | Early sepsis diagnosis; septic shock prediction in AOP | Elevated in AOP; combined with NLR ≥8.7 predicts shock (PMID 41597508) |
| Neutrophil-to-Lymphocyte Ratio (NLR) | Septic shock predictor in AOP | NLR ≥8.7 (PMID 41597508) |
| Thrombocytopenia | Predictor of septic shock in obstructive AOP | Platelet count fall (PMID 41597508) |
| Albumin | Hypoalbuminemia = predictor of septic shock | Low albumin + AOP = high risk |
| Complication | Notes |
|---|---|
| Septic shock | Vasopressor requirement; mortality 20-40% |
| Acute Kidney Injury (AKI) | 79.2% of ICU urosepsis patients on admission (PMID 40216650); monitor for need for RRT |
| Emphysematous pyelonephritis | Gas-forming infection; CT diagnosis; emergency nephrectomy vs. drainage |
| Pyonephrosis | Obstructed, pus-filled collecting system; emergency decompression |
| Perinephric abscess | CT-guided or surgical drainage |
| DIC | Coagulopathy; FFP, cryoprecipitate, platelets |
| ARDS | Lung-protective ventilation |
| Multi-organ failure | ICU care |
| Renal papillary necrosis | Diabetes + pyelonephritis; avoid NSAIDs |
| Domain | SSC 2026 | EAU 2026 | IDSA 2025 |
|---|---|---|---|
| Definition | Sepsis-3 (SOFA ≥2) | Sepsis-3 framework | Sepsis-3 framework |
| Antibiotics - septic shock | Within 1 hour (Strong) | Immediate | 4-step empiric selection |
| Antibiotics - probable sepsis no shock | Within 1 hour (Strong) | Based on severity | Empiric selection |
| Antibiotics - possible sepsis no shock | Rapid eval; within 3 hours (Conditional) | - | - |
| Fluid resuscitation | ≥30 mL/kg crystalloid in 3h (Conditional) | Aggressive resuscitation | - |
| MAP target | ≥65 mmHg; 60-65 mmHg acceptable in elderly (NEW) | ≥65 mmHg | - |
| First vasopressor | Norepinephrine | Norepinephrine | - |
| Source control | Within 6 hours (Conditional) | Emergency decompression for obstruction | - |
| PCT for de-escalation | Suggest PCT + clinical eval (Conditional) | De-escalation recommended | Tailor to cultures |
| Corticosteroids | Hydrocortisone 200mg/day for refractory shock | - | - |
| Duration | Shorter preferred with adequate source control | Shortest effective course | Individualized |
| De-escalation | Strong emphasis | 56% RRR mortality | Narrow to susceptibilities |
| Post-sepsis care | NEW: structured recovery, medication review | - | - |
Create a clinical decision tree PDF for rapid diagnosis and management of urosepsis in ED/ICU settings
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/urosepsis-pdf && python3 -c "import reportlab; print('reportlab ok')" && python3 -c "from reportlab.lib import colors; print('colors ok')"
~/urosepsis-pdf/build_urosepsis_pdf.py
"""
Urosepsis Clinical Decision Tree PDF
SSC 2026 + EAU 2026 + IDSA 2025 Guidelines
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
from reportlab.platypus.flowables import Flowable
from reportlab.graphics.shapes import Drawing, Rect, String, Line, Polygon, Arrow
from reportlab.graphics import renderPDF
import reportlab.graphics.shapes as shapes
# ── Colour palette ──────────────────────────────────────────────────────────
C_RED = colors.HexColor("#C0392B")
C_ORANGE = colors.HexColor("#E67E22")
C_YELLOW = colors.HexColor("#F39C12")
C_GREEN = colors.HexColor("#27AE60")
C_BLUE = colors.HexColor("#2980B9")
C_DARK_BLUE = colors.HexColor("#1A5276")
C_TEAL = colors.HexColor("#148F77")
C_PURPLE = colors.HexColor("#7D3C98")
C_GREY_LT = colors.HexColor("#F2F3F4")
C_GREY_MID = colors.HexColor("#BDC3C7")
C_GREY_DK = colors.HexColor("#5D6D7E")
C_WHITE = colors.white
C_BLACK = colors.black
C_NAVY = colors.HexColor("#1B2631")
C_AMBER_LT = colors.HexColor("#FEF9E7")
C_RED_LT = colors.HexColor("#FDEDEC")
C_GREEN_LT = colors.HexColor("#EAFAF1")
C_BLUE_LT = colors.HexColor("#EAF2FF")
C_TEAL_LT = colors.HexColor("#E8F8F5")
W, H = A4 # 210 × 297 mm
# ── Custom Flowable: Decision Box ────────────────────────────────────────────
class DecisionBox(Flowable):
"""Coloured rounded rectangle with title + body text."""
def __init__(self, title, body_lines, bg=C_BLUE_LT, border=C_BLUE,
title_bg=C_BLUE, title_color=C_WHITE,
width=None, min_height=None, font_size=8):
super().__init__()
self.title = title
self.body_lines = body_lines
self.bg = bg
self.border = border
self.title_bg = title_bg
self.title_color = title_color
self.bwidth = width or (W - 4*cm)
self.font_size = font_size
self._min_height = min_height
self.hAlign = 'CENTER'
def wrap(self, availW, availH):
self.bwidth = min(self.bwidth, availW - 4)
line_h = self.font_size * 1.35
title_h = self.font_size * 1.5 + 6
body_h = len(self.body_lines) * line_h + 10
total = max(title_h + body_h, self._min_height or 0)
self._height = total
return (self.bwidth, total)
def draw(self):
c = self.canv
w, h = self.bwidth, self._height
r = 5
line_h = self.font_size * 1.35
title_h = self.font_size * 1.5 + 6
# Background
c.setFillColor(self.bg)
c.setStrokeColor(self.border)
c.setLineWidth(1.2)
c.roundRect(0, 0, w, h, r, fill=1, stroke=1)
# Title bar
c.setFillColor(self.title_bg)
c.roundRect(0, h - title_h, w, title_h, r, fill=1, stroke=0)
c.rect(0, h - title_h, w, title_h/2, fill=1, stroke=0) # square bottom
# Border on top again
c.setFillColor(self.bg)
c.setStrokeColor(self.border)
c.roundRect(0, 0, w, h, r, fill=0, stroke=1)
# Title text
c.setFillColor(self.title_color)
c.setFont("Helvetica-Bold", self.font_size + 0.5)
c.drawCentredString(w/2, h - title_h + 4, self.title)
# Body lines
c.setFillColor(C_BLACK)
c.setFont("Helvetica", self.font_size)
y = h - title_h - line_h
for line in self.body_lines:
bold = line.startswith("**") and line.endswith("**")
if bold:
line = line[2:-2]
c.setFont("Helvetica-Bold", self.font_size)
else:
c.setFont("Helvetica", self.font_size)
c.drawString(8, y, line)
y -= line_h
class ArrowDown(Flowable):
"""Simple downward arrow connector."""
def __init__(self, label="", color=C_GREY_DK, width=60, height=18):
super().__init__()
self._w = width
self._h = height
self.label = label
self.color = color
self.hAlign = 'CENTER'
def wrap(self, availW, availH):
return (self._w, self._h)
def draw(self):
c = self.canv
cx = self._w / 2
c.setStrokeColor(self.color)
c.setFillColor(self.color)
c.setLineWidth(1.5)
# Stem
c.line(cx, self._h, cx, 6)
# Arrowhead
c.setLineWidth(0)
p = c.beginPath()
p.moveTo(cx, 0)
p.lineTo(cx - 5, 8)
p.lineTo(cx + 5, 8)
p.close()
c.drawPath(p, fill=1, stroke=0)
if self.label:
c.setFillColor(self.color)
c.setFont("Helvetica-Bold", 6.5)
c.drawCentredString(cx, 9, self.label)
class TwoWayBranch(Flowable):
"""Horizontal branch: YES left, NO right with arrow down."""
def __init__(self, yes_label="YES", no_label="NO",
yes_color=C_GREEN, no_color=C_RED, width=None, height=30):
super().__init__()
self._w = width or (W - 4*cm)
self._h = height
self.yes_label = yes_label
self.no_label = no_label
self.yes_color = yes_color
self.no_color = no_color
self.hAlign = 'CENTER'
def wrap(self, availW, availH):
self._w = min(self._w, availW - 4)
return (self._w, self._h)
def draw(self):
c = self.canv
w, h = self._w, self._h
cx = w / 2
c.setStrokeColor(C_GREY_DK)
c.setLineWidth(1.5)
# Horizontal line
c.line(cx - w*0.3, h*0.6, cx + w*0.3, h*0.6)
# Vertical stem down from center
c.line(cx, h, cx, h*0.6)
# YES arrow (left)
c.setStrokeColor(self.yes_color)
c.setFillColor(self.yes_color)
c.line(cx - w*0.3, h*0.6, cx - w*0.3, 8)
p = c.beginPath()
p.moveTo(cx - w*0.3, 0)
p.lineTo(cx - w*0.3 - 5, 8)
p.lineTo(cx - w*0.3 + 5, 8)
p.close()
c.drawPath(p, fill=1, stroke=0)
c.setFont("Helvetica-Bold", 7)
c.drawCentredString(cx - w*0.3, h*0.6 + 4, self.yes_label)
# NO arrow (right)
c.setStrokeColor(self.no_color)
c.setFillColor(self.no_color)
c.line(cx + w*0.3, h*0.6, cx + w*0.3, 8)
p = c.beginPath()
p.moveTo(cx + w*0.3, 0)
p.lineTo(cx + w*0.3 - 5, 8)
p.lineTo(cx + w*0.3 + 5, 8)
p.close()
c.drawPath(p, fill=1, stroke=0)
c.setFont("Helvetica-Bold", 7)
c.drawCentredString(cx + w*0.3, h*0.6 + 4, self.no_label)
# ── Styles ────────────────────────────────────────────────────────────────────
def make_styles():
base = getSampleStyleSheet()
styles = {}
styles['title'] = ParagraphStyle(
'title', parent=base['Title'],
fontSize=18, leading=22, textColor=C_WHITE,
fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=2
)
styles['subtitle'] = ParagraphStyle(
'subtitle', parent=base['Normal'],
fontSize=9, leading=12, textColor=C_WHITE,
fontName='Helvetica', alignment=TA_CENTER, spaceAfter=2
)
styles['section'] = ParagraphStyle(
'section', parent=base['Normal'],
fontSize=11, leading=14, textColor=C_WHITE,
fontName='Helvetica-Bold', alignment=TA_LEFT,
spaceBefore=6, spaceAfter=3,
backColor=C_DARK_BLUE, leftIndent=6, rightIndent=6
)
styles['body'] = ParagraphStyle(
'body', parent=base['Normal'],
fontSize=8, leading=11, textColor=C_BLACK,
fontName='Helvetica', alignment=TA_LEFT,
spaceBefore=1, spaceAfter=1
)
styles['body_bold'] = ParagraphStyle(
'body_bold', parent=base['Normal'],
fontSize=8, leading=11, textColor=C_BLACK,
fontName='Helvetica-Bold', alignment=TA_LEFT
)
styles['small'] = ParagraphStyle(
'small', parent=base['Normal'],
fontSize=6.5, leading=9, textColor=C_GREY_DK,
fontName='Helvetica', alignment=TA_LEFT
)
styles['centre'] = ParagraphStyle(
'centre', parent=base['Normal'],
fontSize=8, leading=10, textColor=C_BLACK,
fontName='Helvetica', alignment=TA_CENTER
)
styles['red_bold'] = ParagraphStyle(
'red_bold', parent=base['Normal'],
fontSize=8.5, leading=11, textColor=C_RED,
fontName='Helvetica-Bold', alignment=TA_LEFT
)
styles['green_bold'] = ParagraphStyle(
'green_bold', parent=base['Normal'],
fontSize=8.5, leading=11, textColor=C_GREEN,
fontName='Helvetica-Bold', alignment=TA_LEFT
)
styles['box_label'] = ParagraphStyle(
'box_label', parent=base['Normal'],
fontSize=7, leading=9, textColor=C_GREY_DK,
fontName='Helvetica-BoldOblique', alignment=TA_CENTER
)
styles['footer'] = ParagraphStyle(
'footer', parent=base['Normal'],
fontSize=6, leading=8, textColor=C_GREY_DK,
fontName='Helvetica', alignment=TA_CENTER
)
return styles
# ── Helper: coloured cell table ───────────────────────────────────────────────
def ctable(data, col_widths, row_heights=None, style_cmds=None):
t = Table(data, colWidths=col_widths, rowHeights=row_heights)
base_style = [
('FONTNAME', (0,0), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,0), (-1,-1), 7.5),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('ROWBACKGROUNDS', (0,0), (-1,-1), [C_WHITE, C_GREY_LT]),
('GRID', (0,0), (-1,-1), 0.4, C_GREY_MID),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 5),
]
if style_cmds:
base_style.extend(style_cmds)
t.setStyle(TableStyle(base_style))
return t
# ── Header banner ──────────────────────────────────────────────────────────────
class HeaderBanner(Flowable):
def __init__(self, width, height=52):
super().__init__()
self._w = width
self._h = height
def wrap(self, availW, availH):
return (self._w, self._h)
def draw(self):
c = self.canv
w, h = self._w, self._h
# Gradient-like effect: dark navy → dark blue
c.setFillColor(C_NAVY)
c.rect(0, 0, w, h, fill=1, stroke=0)
c.setFillColor(C_DARK_BLUE)
c.rect(0, 0, w*0.5, h, fill=1, stroke=0)
# Red accent bar
c.setFillColor(C_RED)
c.rect(0, h-4, w, 4, fill=1, stroke=0)
# Title
c.setFillColor(C_WHITE)
c.setFont("Helvetica-Bold", 17)
c.drawString(14, h-24, "UROSEPSIS Clinical Decision Tree")
# Subtitle
c.setFont("Helvetica", 8)
c.setFillColor(C_GREY_MID)
c.drawString(14, h-36, "Rapid Diagnosis & Management | ED / ICU Setting")
# Guidelines badge
c.setFillColor(C_RED)
c.roundRect(w-168, h-38, 158, 32, 5, fill=1, stroke=0)
c.setFillColor(C_WHITE)
c.setFont("Helvetica-Bold", 7)
c.drawCentredString(w-89, h-22, "SSC 2026 | EAU 2026 | IDSA 2025")
c.setFont("Helvetica", 6.5)
c.drawCentredString(w-89, h-33, "Published: March 2026 / April 2026")
# Bottom strip
c.setFillColor(C_ORANGE)
c.rect(0, 0, w, 3, fill=1, stroke=0)
# ═══════════════════════════════════════════════════════════════════════════════
# MAIN BUILD
# ═══════════════════════════════════════════════════════════════════════════════
def build_pdf(out_path):
doc = SimpleDocTemplate(
out_path, pagesize=A4,
leftMargin=1.4*cm, rightMargin=1.4*cm,
topMargin=1.2*cm, bottomMargin=1.2*cm
)
S = make_styles()
story = []
full_w = W - 2.8*cm
half_w = (full_w - 0.4*cm) / 2
third_w = (full_w - 0.8*cm) / 3
# ── PAGE 1 ────────────────────────────────────────────────────────────────
story.append(HeaderBanner(full_w))
story.append(Spacer(1, 5))
# ─ STEP 1: Suspicion ──────────────────────────────────────────────────────
story.append(DecisionBox(
"STEP 1 — SUSPECT UROSEPSIS",
[
"**Patient presents with ANY combination of UTI symptoms + systemic features:**",
" • Fever (>38°C) or Hypothermia (<36°C) | Rigors / Chills",
" • Dysuria, Frequency, Urgency, Haematuria, Flank/CVA Tenderness",
" • Hypotension (SBP <90 or MAP <65) | Tachycardia (HR >90)",
" • Altered Mentation / Confusion | Tachypnoea (RR >22) | Oliguria",
" • Recent urological procedure / instrumentation | Indwelling urinary catheter",
"",
" HIGH-RISK FLAGS: Obstruction (stone, BPH) • Elderly • Diabetes • Immunocompromised",
" • Renal transplant • Post-PCNL / Ureteroscopy / TURP / Prostate biopsy",
],
bg=C_BLUE_LT, border=C_DARK_BLUE, title_bg=C_DARK_BLUE, font_size=8
))
story.append(ArrowDown(color=C_DARK_BLUE, height=16))
# ─ STEP 2: qSOFA ──────────────────────────────────────────────────────────
story.append(DecisionBox(
"STEP 2 — RAPID SCREENING | qSOFA (Sepsis-3 / SSC 2026)",
[
"Score 1 point each: (≥2 = HIGH suspicion for sepsis → proceed to full SOFA)",
" [ ] Respiratory Rate ≥ 22 / min",
" [ ] Altered Mentation (GCS < 15)",
" [ ] Systolic BP ≤ 100 mmHg",
],
bg=C_AMBER_LT, border=C_YELLOW, title_bg=C_YELLOW,
title_color=C_NAVY, font_size=8.5
))
story.append(ArrowDown(color=C_YELLOW, height=16))
# ─ STEP 3: Workup ─────────────────────────────────────────────────────────
# Two columns: Labs | Imaging
lab_box = DecisionBox(
"STEP 3A — IMMEDIATE INVESTIGATIONS",
[
"**Bloods (STAT):**",
" • Blood cultures ×2 (before antibiotics)",
" • Serum lactate (arterial/venous)",
" • FBC, CRP, Procalcitonin (PCT)",
" • U&E, Creatinine, eGFR",
" • LFTs, Bilirubin",
" • Coagulation (INR, APTT, Platelets, D-dimer)",
" • ABG | Blood glucose | Serum albumin",
" • Presepsin, NLR (if available)",
"",
"**Urine:**",
" • Midstream / catheter specimen: M/C/S + microscopy",
" • Gram stain (rapid)",
],
bg=C_BLUE_LT, border=C_BLUE, title_bg=C_BLUE,
width=half_w, font_size=7.5
)
img_box = DecisionBox(
"STEP 3B — IMAGING (URGENT)",
[
"**1st: Bedside Ultrasound (POCUS)**",
" Hydronephrosis • Calculi • Abscess • Pyonephrosis",
" Bladder volume • IVC collapsibility",
"",
"**2nd: CT Abdomen/Pelvis (urgent)**",
" Gold standard — 71-100% sensitivity",
" (Non-contrast + contrast if renal function allows)",
" → Obstructing stone • Perinephric abscess",
" → Emphysematous pyelonephritis • Pyonephrosis",
"",
"MRI: Pregnancy or contrast contraindicated",
"ECHO: If haemodynamic instability persists",
],
bg=C_TEAL_LT, border=C_TEAL, title_bg=C_TEAL,
width=half_w, font_size=7.5
)
story.append(Table(
[[lab_box, img_box]],
colWidths=[half_w, half_w],
style=TableStyle([
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 0),
('RIGHTPADDING', (0,0), (-1,-1), 0),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('COLPADDING', (0,0), (-1,-1), 2),
])
))
story.append(ArrowDown(color=C_TEAL, height=16))
# ─ STEP 4: Diagnosis / Severity ───────────────────────────────────────────
story.append(DecisionBox(
"STEP 4 — CONFIRM DIAGNOSIS & CLASSIFY SEVERITY (Sepsis-3 | SSC 2026)",
[
"**SOFA score: acute increase ≥ 2 points from baseline = SEPSIS**",
" Organ systems scored: Respiratory (PaO₂/FiO₂) | Coagulation (Platelets) | Liver (Bilirubin)",
" Cardiovascular (MAP / vasopressor) | CNS (GCS) | Renal (Creatinine / Urine output)",
],
bg=C_GREY_LT, border=C_GREY_DK, title_bg=C_GREY_DK,
title_color=C_WHITE, font_size=8
))
story.append(Spacer(1, 4))
# Three severity tiers
tier1 = DecisionBox(
"POSSIBLE SEPSIS",
[
"qSOFA < 2",
"Possible infectious source",
"No shock features",
"",
"→ Rapid evaluation",
"→ If concern persists:",
" Antibiotics within 3 hrs",
" (SSC 2026 Conditional)",
],
bg=C_GREEN_LT, border=C_GREEN, title_bg=C_GREEN,
width=third_w, font_size=7.5
)
tier2 = DecisionBox(
"SEPSIS (No Shock)",
[
"SOFA ≥ 2",
"No vasopressor needed",
"Lactate < 2 mmol/L",
"",
"→ Antibiotics within 1 hr",
" (SSC 2026 STRONG)",
"→ IV fluids",
"→ Source control",
],
bg=C_AMBER_LT, border=C_ORANGE, title_bg=C_ORANGE,
title_color=C_WHITE, width=third_w, font_size=7.5
)
tier3 = DecisionBox(
"SEPTIC SHOCK",
[
"Vasopressor needed to",
"maintain MAP ≥ 65 mmHg",
"AND Lactate > 2 mmol/L",
"despite fluid resus.",
"",
"→ Antibiotics NOW (<1hr)",
"→ ICU admission",
"→ Emergency source control",
],
bg=C_RED_LT, border=C_RED, title_bg=C_RED,
width=third_w, font_size=7.5
)
story.append(Table(
[[tier1, tier2, tier3]],
colWidths=[third_w, third_w, third_w],
style=TableStyle([
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 0),
('RIGHTPADDING', (0,0), (-1,-1), 0),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('COLPADDING', (0,0), (-1,-1), 2),
])
))
# Footer page 1
story.append(Spacer(1, 5))
story.append(HRFlowable(width="100%", thickness=0.5, color=C_GREY_MID))
story.append(Paragraph(
"Page 1 of 3 | SSC 2026 (CCM DOI: 10.1097/CCM.0000000000007075) | EAU Guidelines on Urological Infections April 2026 | IDSA 2025 cUTI Guidelines "
" For educational use — verify against local protocols and current guidelines",
S['footer']
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# PAGE 2 — MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════
story.append(HeaderBanner(full_w))
story.append(Spacer(1, 5))
story.append(DecisionBox(
"STEP 5 — HOUR-1 BUNDLE (SSC 2026 | Septic Shock / High-Risk Sepsis)",
[
"**1.** Measure serum LACTATE — re-measure at 2-4 h if initial > 2 mmol/L",
"**2.** Obtain BLOOD CULTURES ×2 (before antibiotics — do NOT delay >45 min for cultures)",
"**3.** Administer BROAD-SPECTRUM IV ANTIBIOTICS immediately (≤1 hour from recognition)",
"**4.** Start IV CRYSTALLOID 30 mL/kg if hypotension or lactate ≥ 4 mmol/L (complete within 3 h)",
"**5.** Start VASOPRESSOR if hypotensive during/after fluid resuscitation → TARGET MAP ≥ 65 mmHg",
],
bg=C_RED_LT, border=C_RED, title_bg=C_RED,
title_color=C_WHITE, font_size=8.5
))
story.append(ArrowDown(color=C_GREY_DK, height=14))
# Resuscitation + Antibiotics side by side
resus = DecisionBox(
"STEP 5A — RESUSCITATION (SSC 2026)",
[
"**FLUIDS:**",
" • Balanced crystalloid preferred (Ringer's Lactate / Plasmalyte)",
" • 30 mL/kg in first 3 h (conditional; actual body wt;",
" IBW/adj-wt if BMI >30)",
" • Reassess frequently — avoid over/under-resuscitation",
" • Albumin if large crystalloid volumes needed",
" • Active fluid REMOVAL once stable (de-resuscitation)",
" — NEW SSC 2026 statement",
"",
"**VASOPRESSORS:**",
" 1st: Norepinephrine (start 3–5 µg/min, titrate)",
" 2nd: Add Vasopressin 0.03 u/min (sparing agent)",
" 3rd: Epinephrine if above inadequate",
" Alt: Angiotensin II (refractory shock)",
" Avoid: Dopamine (arrhythmias)",
"",
"**MAP TARGETS (SSC 2026 — UPDATED):**",
" Standard: MAP ≥ 65 mmHg (STRONG)",
" Elderly (>75y): 60–65 mmHg acceptable",
" (Conditional — new 2026 recommendation)",
"",
"**OXYGEN:** SpO₂ ≥ 94%",
"**VENTILATION (if needed):** TV 6 mL/kg IBW",
],
bg=C_BLUE_LT, border=C_BLUE, title_bg=C_BLUE,
width=half_w, font_size=7.5
)
abx = DecisionBox(
"STEP 5B — ANTIBIOTICS (IDSA 2025 / EAU 2026 / SSC 2026)",
[
"**4-STEP IDSA 2025 EMPIRIC SELECTION:**",
" Step 1: MDR risk? (prior MDR, recent abx, hospital,",
" catheter, immunocomp., LTCF)",
" Step 2: Local antibiogram (if available & relevant)",
" Step 3: Patient factors (allergy, AKI, drug interactions)",
" Step 4: Stewardship (narrowest effective spectrum)",
"",
"**EMPIRIC REGIMENS:**",
" Community-acquired, no MDR risk:",
" Ceftriaxone 1–2g IV q24h OR",
" Piperacillin-tazobactam 4.5g IV q8h",
" FQ-susceptible (susceptibility >90% local):",
" Ciprofloxacin 400mg IV q12h",
" ESBL risk (prior ESBL / FQ exposure):",
" Ertapenem 1g IV q24h (no Pseudo risk) OR",
" Meropenem 1g IV q8h",
" MDR / Pseudomonas risk:",
" Meropenem / Imipenem / Piperacillin-TZB",
" CRE / CPE:",
" Ceftazidime-avibactam OR Meropenem-vaborbactam",
" Candida sepsis:",
" Fluconazole 400mg load → 200mg q24h (stable)",
" Caspofungin (shock / resistant species)",
"",
"**TIMING (SSC 2026):**",
" Septic shock / definite sepsis: ≤ 1 HOUR (STRONG)",
" Possible sepsis, no shock: ≤ 3 HOURS (Conditional)",
],
bg=C_TEAL_LT, border=C_TEAL, title_bg=C_TEAL,
width=half_w, font_size=7.5
)
story.append(Table(
[[resus, abx]],
colWidths=[half_w, half_w],
style=TableStyle([
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 0),
('RIGHTPADDING', (0,0), (-1,-1), 0),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('COLPADDING', (0,0), (-1,-1), 2),
])
))
story.append(ArrowDown(color=C_GREY_DK, height=14))
# Source Control
story.append(DecisionBox(
"STEP 6 — SOURCE CONTROL (SSC 2026 Good Practice + EAU 2026) — CORNERSTONE OF UROSEPSIS MANAGEMENT",
[
"**SSC 2026:** Rapidly evaluate for specific anatomical source requiring emergent source control.",
"**Ideally within 6 hours** of sepsis/septic shock diagnosis (Conditional recommendation, very low certainty)",
"**EAU 2026 SR:** Double-J stenting or PCN for obstructive AOP significantly improves survival.",
"",
"**OBSTRUCTION (most common & critical):** Ureteric stone, BPH, stricture, tumour",
" → Retrograde DJ stent (ureterorenoscopy) OR Percutaneous Nephrostomy (PCN) — EMERGENCY",
" → Antibiotics alone are INSUFFICIENT for obstructed, infected kidney",
"",
"**Perinephric / Renal Abscess:** Image-guided percutaneous drainage ± surgical drainage",
"**Emphysematous Pyelonephritis:** PCN + aggressive antibiotics → nephrectomy if no response",
"**Pyonephrosis:** Emergency PCN decompression",
"**Prostatic Abscess:** Transrectal or transperineal drainage",
"**Infected Catheter / Stent:** Remove / replace IMMEDIATELY",
"**Post-procedural sepsis:** Drain collecting system; nephrostomy if needed",
],
bg=colors.HexColor("#FDF2E9"), border=C_ORANGE, title_bg=C_ORANGE,
title_color=C_WHITE, font_size=7.8
))
story.append(Spacer(1, 5))
story.append(HRFlowable(width="100%", thickness=0.5, color=C_GREY_MID))
story.append(Paragraph(
"Page 2 of 3 | SSC 2026 (CCM DOI: 10.1097/CCM.0000000000007075) | EAU Guidelines on Urological Infections April 2026 | IDSA 2025 cUTI Guidelines",
S['footer']
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# PAGE 3 — ESCALATION, ADJUNCTS, DE-ESCALATION, BIOMARKERS, SPECIAL POPS
# ══════════════════════════════════════════════════════════════════════════
story.append(HeaderBanner(full_w))
story.append(Spacer(1, 5))
# Adjuncts + De-escalation
adj = DecisionBox(
"STEP 7 — ADJUNCTIVE THERAPIES (SSC 2026)",
[
"**CORTICOSTEROIDS:**",
" Indication: Refractory septic shock (vasopressor-unresponsive despite adequate fluids)",
" Regimen: IV Hydrocortisone 200 mg/day (continuous infusion preferred over bolus)",
" No benefit above 200–260 mg/day. Taper when vasopressors no longer needed.",
" Do NOT use: Vitamin C IV | IV Immunoglobulins | Polymyxin B hemoperfusion",
"",
"**GLUCOSE CONTROL:**",
" Start insulin when glucose ≥ 180 mg/dL (×2 consecutive readings)",
" Target: 144–180 mg/dL | Avoid hypoglycaemia | Use validated protocol",
"",
"**VTE PROPHYLAXIS:**",
" LMWH > UFH (SSC 2026) + Mechanical compression if pharmacological contraindicated",
"",
"**RRT (Renal Replacement Therapy):**",
" Only for definite renal indications — NOT purely on AKI stage",
" Bicarbonate: Only if pH ≤ 7.20 with AKI Stage 2–3",
"",
"**BLOOD TRANSFUSION:**",
" Restrictive strategy: Transfuse when Hgb < 7 g/dL | Target 7–9 g/dL",
],
bg=colors.HexColor("#F9F0FF"), border=C_PURPLE, title_bg=C_PURPLE,
width=half_w, font_size=7.5
)
deesc = DecisionBox(
"STEP 8 — DE-ESCALATION & STEWARDSHIP (SSC 2026 + EAU 2026)",
[
"**PCT-GUIDED DE-ESCALATION (SSC 2026 — NEW 2026):**",
" Use PCT + clinical evaluation to decide when to",
" DISCONTINUE antibiotics (Conditional, low certainty)",
" (PCT alone is NOT used to START antibiotics)",
"",
"**EAU 2026 EVIDENCE:**",
" Guideline-driven empiric therapy + de-escalation",
" → 35% RRR in mortality (95% CI 20–46%)",
" Narrowing to specific agent → 56% RRR mortality",
"",
"**DAILY REVIEW:**",
" • Are cultures back? → Narrow spectrum ASAP",
" • IV-to-oral step-down at 24–48 h if:",
" Clinical improvement + tolerating PO +",
" Susceptible organism + GI absorption intact",
" • Oral options: Co-trimoxazole, Cefixime, Cipro",
" (NOT nitrofurantoin / fosfomycin for pyelonephritis)",
"",
"**DURATION:**",
" Uncomplicated bacteraemic pyelonephritis: 7–14 days",
" FQ (pyelonephritis): 5–7 days adequate",
" Septic shock + complications: 14 days (individualise)",
" Prefer SHORTER over longer (SSC 2026 Conditional)",
],
bg=C_GREEN_LT, border=C_GREEN, title_bg=C_GREEN,
width=half_w, font_size=7.5
)
story.append(Table(
[[adj, deesc]],
colWidths=[half_w, half_w],
style=TableStyle([
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 0),
('RIGHTPADDING', (0,0), (-1,-1), 0),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('COLPADDING', (0,0), (-1,-1), 2),
])
))
story.append(Spacer(1, 4))
# Biomarkers table + Special populations
bio_data = [
[Paragraph("<b>Biomarker</b>", S['body_bold']),
Paragraph("<b>Role</b>", S['body_bold']),
Paragraph("<b>Key Threshold</b>", S['body_bold'])],
["Serum Lactate", "Hypoperfusion | Risk stratification | Treatment response",
"≥2 mmol/L = hypoperfusion; ≥4 mmol/L = high mortality"],
["Procalcitonin (PCT)", "Bacterial infection | De-escalation guide | Shock predictor",
">1.12 µg/L = predictor of septic shock in obstructive AOP"],
["Presepsin", "Early sepsis diagnosis | Septic shock prediction in AOP",
"Elevated + NLR ≥8.7 = high shock risk"],
["NLR (Neutrophil:Lymphocyte)", "Septic shock predictor in obstructive pyelonephritis",
"NLR ≥ 8.7"],
["Platelets / Albumin", "Septic shock predictors in AOP",
"Thrombocytopenia + hypoalbuminaemia = high risk"],
["CRP", "Inflammation marker (less specific)", "Trend >than absolute value"],
]
bio_t = ctable(
bio_data,
col_widths=[full_w*0.22, full_w*0.5, full_w*0.28],
style_cmds=[
('BACKGROUND', (0,0), (-1,0), C_DARK_BLUE),
('TEXTCOLOR', (0,0), (-1,0), C_WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_WHITE, C_GREY_LT]),
('FONTSIZE', (0,0), (-1,-1), 7),
]
)
sp_data = [
[Paragraph("<b>Population</b>", S['body_bold']),
Paragraph("<b>Key Considerations</b>", S['body_bold'])],
["Elderly (>75y)", "Lower MAP target 60–65 mmHg (SSC 2026 new). Atypical presentation (confusion only). Higher MDR risk."],
["Obstructive uropathy", "Emergency decompression MANDATORY (PCN/DJ stent). Carbapenems often needed. Abx alone insufficient."],
["Post-urological procedure", "Broader empiric coverage. ESBL, Enterococcus, Pseudomonas risk. Review local ecology."],
["Renal transplant", "Immunosuppression blunts signs. Culture-guided Rx essential. (PMID 40489015, 2025)"],
["Diabetes / Immunocomp.", "Higher risk emphysematous PN, fungal sepsis. Consider antifungal if risk factors present."],
["Candida urosepsis", "Fluconazole if susceptible + stable. Echinocandin if shock or resistant. Remove catheter."],
["Pregnancy", "MRI preferred over CT. Cephalosporins / nitrofurantoin (not 3rd trimester). No FQs."],
]
sp_t = ctable(
sp_data,
col_widths=[full_w*0.22, full_w*0.78],
style_cmds=[
('BACKGROUND', (0,0), (-1,0), C_TEAL),
('TEXTCOLOR', (0,0), (-1,0), C_WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('ROWBACKGROUNDS', (0,1), (-1,-1), [C_WHITE, C_TEAL_LT]),
('FONTSIZE', (0,0), (-1,-1), 7),
]
)
story.append(Paragraph(
"<b>KEY BIOMARKERS IN UROSEPSIS</b>",
ParagraphStyle('bh', parent=S['body_bold'], fontSize=8, textColor=C_DARK_BLUE)
))
story.append(bio_t)
story.append(Spacer(1, 4))
story.append(Paragraph(
"<b>SPECIAL POPULATIONS</b>",
ParagraphStyle('sh', parent=S['body_bold'], fontSize=8, textColor=C_TEAL)
))
story.append(sp_t)
story.append(Spacer(1, 4))
# Post-sepsis + Prognosis
post = DecisionBox(
"STEP 9 — POST-SEPSIS CARE (SSC 2026 — NEW 2026 SECTION)",
[
"First edition to include structured post-sepsis recovery recommendations:",
" • Primary care clinicians must be competent to support sepsis survivors",
" • Implement post-discharge support strategies",
" • Evaluate: Physical sequelae | Cognitive impairment | PTSD / Anxiety / Depression",
" • MEDICATION REVIEW at discharge (Conditional — new 2026):",
" Stop drugs started during acute illness that are no longer needed (sedatives, antacids, antipsychotics)",
],
bg=C_GREEN_LT, border=C_GREEN, title_bg=C_GREEN,
width=half_w, font_size=7.5
)
prog = DecisionBox(
"PROGNOSIS + POOR OUTCOME PREDICTORS (SR 2026, PMID 41597508)",
[
"Mortality without shock: 5–10%",
"Mortality with septic shock: 20–40%",
"",
"**Predictors of poor outcome:**",
" • Thrombocytopenia",
" • Hypoalbuminaemia",
" • PCT > 1.12 µg/L",
" • Presepsin elevation",
" • NLR ≥ 8.7",
" • Delay in source control",
" • ESBL / MDR pathogen (20–70%)",
" • Multi-organ failure at presentation",
" • Elderly + comorbidities",
],
bg=C_RED_LT, border=C_RED, title_bg=C_RED,
width=half_w, font_size=7.5
)
story.append(Table(
[[post, prog]],
colWidths=[half_w, half_w],
style=TableStyle([
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 0),
('RIGHTPADDING', (0,0), (-1,-1), 0),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('COLPADDING', (0,0), (-1,-1), 2),
])
))
story.append(Spacer(1, 5))
story.append(HRFlowable(width="100%", thickness=0.5, color=C_GREY_MID))
story.append(Paragraph(
"References: SSC 2026 — Prescott HC et al. Crit Care Med, Mar 2026. DOI: 10.1097/CCM.0000000000007075 | "
"EAU Guidelines on Urological Infections 2026 (Bonkat G et al.) | "
"IDSA 2025 cUTI Guidelines | "
"Chibu MC et al. Medicina 2026, PMID 41597508 | "
"Rozenblat D et al. Ann Intensive Care 2025, PMID 40216650 | "
"Goldman-Cecil Medicine 26E | Harrison's 22E 2025",
S['footer']
))
story.append(Paragraph(
"Page 3 of 3 | This decision tree is for educational purposes. Always verify against your institution's current protocols, local antibiogram, and relevant guidelines.",
S['footer']
))
doc.build(story)
print(f"PDF built: {out_path}")
if __name__ == "__main__":
build_pdf("/home/daytona/workspace/urosepsis-pdf/Urosepsis_Clinical_Decision_Tree.pdf")
cd /home/daytona/workspace/urosepsis-pdf && python3 build_urosepsis_pdf.py 2>&1
~/urosepsis-pdf/build_urosepsis_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/urosepsis-pdf/build_urosepsis_pdf.py'
cd /home/daytona/workspace/urosepsis-pdf && python3 build_urosepsis_pdf.py 2>&1
ls -lh /home/daytona/workspace/urosepsis-pdf/Urosepsis_Clinical_Decision_Tree.pdf
Urosepsis Clinical Decision Tree
PDF Document · PDF
How to start empirical antibiotics in urosepsis & how to de-escalate as per culture reports? Make a detailed note including choice of antibiotics
urosepsis empirical antibiotic de-escalation culture-guided
IDSA 2025 complicated UTI urosepsis empirical antibiotics de-escalation culture-guided therapy recommendations
https://www.emdocs.net/guideline-update-2025-idsa-management…
urosepsis antibiotic treatment ESBL MDR outcomes
EAU 2026 urosepsis antibiotic recommendations ESBL carbapenem de-escalation IV oral switch procalcitonin
urinary sepsis antibiotic de-escalation procalcitonin guided stewardship
sepsis antibiotic de-escalation procalcitonin guided duration outcomes
https://www.idsociety.org/practice-guideline/complicated-uri…
empirical antibiotic therapy urinary tract infection sepsis outcomes carbapenem cephalosporin
"In patients with bacterial septic shock, there is an estimated 7-8% increase in mortality for every 1-hour delay in appropriate antibiotic administration following shock recognition."
| Scenario | Classification | Antibiotic Approach |
|---|---|---|
| UTI symptoms only, no systemic signs, haemodynamically stable | cUTI without sepsis | Narrower spectrum - 3rd/4th gen cephalosporin, pip-tazo, FQ |
| UTI + SOFA ≥2 (organ dysfunction), no vasopressors | Sepsis (no shock) | Broader spectrum - carbapenems included; antibiotics within 1 hour |
| UTI + vasopressor needed + lactate >2 mmol/L | Septic shock | Broadest empirical coverage; antibiotics immediately (<1 hour); 90% susceptibility target on antibiogram |
| Risk Factor | Associated Resistance Pattern |
|---|---|
| Prior UTI or bacteraemia with ESBL-producing organism | ESBL (CTX-M, SHV, TEM) - E. coli, Klebsiella |
| Fluoroquinolone exposure in the past 12 months | Fluoroquinolone resistance |
| Prior 3rd-generation cephalosporin exposure | ESBL / AmpC resistance |
| Recent hospitalisation (past 3 months) | Healthcare-associated MDR GNR |
| Long-term care facility (LTCF) resident | MDR Enterobacterales |
| Indwelling urinary catheter / ureteric stent | MDR organisms, Pseudomonas, ESBL |
| Recurrent UTIs with prior antibiotic courses | ESBL, FQ-resistance |
| Post-urological procedure (PCNL, URS, TURP) | Enterococcus, Pseudomonas, ESBL |
| Travel to ESBL/CRE-endemic region (Asia, South Asia, SE Asia, Middle East) | ESBL, CPE/CRE |
| Immunocompromise (transplant, HIV, steroids) | MDR GNR, Pseudomonas, Candida |
| Diabetes mellitus | ESBL, Candida, emphysematous PN |
| Structural urological abnormality / obstruction | MDR organisms |
| Prior known carbapenem-resistant organism (CPE/CRE) | Carbapenem-resistant Enterobacterales (CRE) |
| Factor | Consideration |
|---|---|
| Penicillin / beta-lactam allergy | Clarify severity (rash vs anaphylaxis); if severe, use aztreonam (GN coverage) ± vancomycin; or use a carbapenem if cross-reactivity acceptable |
| Renal impairment (AKI/CKD) | Dose-adjust: aminoglycosides (avoid or single dose only); pip-tazo dose adjustment; colistin high risk |
| Pregnancy | Safe: cephalosporins, amoxicillin-clavulanate, aztreonam; Avoid: FQs, aminoglycosides (ototoxicity), tetracyclines, TMP-SMX (3rd trimester) |
| Drug-drug interactions | FQs + antiarrhythmics (QT prolongation); vancomycin + nephrotoxins |
| Hepatic impairment | Dose-adjust metronidazole, chloramphenicol |
| Prior adverse drug events | Review medication history |
| Drug | Dose | Route | Interval | Notes |
|---|---|---|---|---|
| Ceftriaxone | 1-2 g | IV | q24h | First choice; excellent UTI/bacteraemia coverage; once daily; de-escalate when sensitivities available |
| Cefotaxime | 1-2 g | IV | q8h | Alternative to ceftriaxone |
| Cefepime | 1-2 g | IV | q8-12h | 4th gen; broader GN/GPC; use if Pseudomonas possible |
| Levofloxacin | 750 mg | IV/PO | q24h | Use ONLY if local FQ susceptibility >80-90% AND no FQ exposure in past 12 months |
| Ciprofloxacin | 400 mg | IV | q12h | Same criteria as levofloxacin; preferred FQ for UTI |
| Piperacillin-tazobactam | 4.5 g | IV | q8h (ext. infusion 4h preferred) | Extended infusion optimises PD/PK; use if Enterococcus or mixed flora suspected |
| TMP-SMX | 1 DS tab (960 mg) | PO | q12h | Oral only; adequate only if local susceptibility >80% |
| Drug | Dose | Route | Interval | Notes |
|---|---|---|---|---|
| Piperacillin-tazobactam | 4.5 g | IV | q6-8h (4h extended infusion) | Broad GN + Gram-positive + anaerobic; preferred when Pseudomonas not excluded |
| Cefepime | 2 g | IV | q8h | Anti-pseudomonal 4th gen cephalosporin |
| Meropenem | 1 g | IV | q8h | Reserve for septic shock + MDR risk; superior PK for bacteraemia |
Note on Extended Infusion: Harrison's 22E: "Optimization of antibiotic delivery, such as prolonged infusion of β-lactam antibiotics after the initial infusion, and optimization of pharmacokinetics/pharmacodynamics should be considered."
| Drug | Dose | Route | Interval | Coverage | Notes |
|---|---|---|---|---|---|
| Ertapenem | 1 g | IV | q24h | ESBL Enterobacterales | First choice for ESBL urosepsis if NO Pseudomonas risk; once daily; excellent urinary penetration |
| Meropenem | 1 g | IV | q8h | ESBL + Pseudomonas | Preferred for septic shock / ICU / Pseudomonas risk |
| Imipenem-cilastatin | 500 mg | IV | q6h | Broad ESBL + Pseudomonas | Alternative |
| Doripenem | 500 mg | IV | q8h (4h infusion) | ESBL + Pseudomonas | Good PK/PD; 4h infusion |
| Temocillin | 2 g | IV | q8h | ESBL Enterobacterales (not Pseudomonas) | Where available (Europe); selective pressure-sparing; no carbapenem |
| Drug | Dose | Route | Interval | Notes |
|---|---|---|---|---|
| Piperacillin-tazobactam | 4.5 g | IV | q6h (4h infusion) | Broad anti-pseudomonal; also covers Enterococcus |
| Cefepime | 2 g | IV | q8h | Anti-pseudomonal 4th gen cephalosporin |
| Meropenem | 1 g | IV | q8h | Anti-pseudomonal; also covers ESBL |
| Imipenem-cilastatin | 500 mg | IV | q6h | Anti-pseudomonal; broader |
| Ceftazidime | 2 g | IV | q8h (3h infusion) | Specific anti-pseudomonal; no ESBL coverage |
| Ciprofloxacin | 400 mg | IV | q12h | If susceptible locally; do NOT use if prior FQ exposure |
| Aztreonam | 2 g | IV | q8h | Monobactam; anti-GN only; useful in beta-lactam allergy (no cross-reactivity with penicillin) |
| Ceftolozane-tazobactam | 1.5 g | IV | q8h | MDR/XDR Pseudomonas; novel BL/BLI |
| Drug | Spectrum | Dose | Notes |
|---|---|---|---|
| Ceftazidime-avibactam | KPC, OXA-48, AmpC, Pseudomonas | 2.5 g IV q8h (2h infusion) | Does NOT cover MBLs (NDM, VIM); must use with aztreonam for NDM |
| Meropenem-vaborbactam | KPC, AmpC, ESBL | 4 g IV q8h (3h infusion) | KPC coverage; does NOT cover OXA-48 or MBLs |
| Imipenem-cilastatin-relebactam | KPC, AmpC, ESBL, some OXA | 1.25 g IV q6h | Good option for KPC; also covers Pseudomonas |
| Cefiderocol | MBL (NDM, VIM, IMP), Acinetobacter, Stenotrophomonas, CRE | 2 g IV q8h (3h infusion) | Siderophore cephalosporin; broadest resistance coverage |
| Aztreonam + ceftazidime-avibactam | NDM and MBL-producing CRE | Aztreonam 2g IV q6h + Caz-Avi 2.5g IV q8h | Combination required for MBL; aztreonam not hydrolysed by MBLs |
| Plazomicin | KPC-CRE, ESBL | 15 mg/kg IV q24h | Goldman-Cecil: "IV plazomicin (15 mg/kg once daily)... particularly useful for highly resistant organisms" |
| Colistin / Polymyxin B | Pan-resistant GN (last resort) | Variable; TDM required | Significant nephrotoxicity; use only when no alternatives |
The Washington Manual (2025): "Ceftazidime-avibactam is broadly active against gram-negative bacteria, including some P. aeruginosa that are resistant to other antipseudomonal beta-lactams. This agent is also active against ESBL- and AmpC-producing strains and possesses unique activity against KPC- and OXA-48-producing carbapenem-resistant Enterobacterales (CRE). Ceftazidime-avibactam is NOT active against metallo-beta-lactamase-producing organisms."
| Organism | Setting | Preferred Antibiotic |
|---|---|---|
| Enterococcus faecalis | Recurrent UTI, structural abnormality, post-TURP, urological instrumentation | Ampicillin 2g IV q4h (if susceptible) OR Piperacillin-tazobactam |
| Enterococcus faecium | Nosocomial, often VRE | Linezolid 600mg IV/PO q12h; Daptomycin 6-8 mg/kg IV q24h |
| MRSA (rare in UTI) | IVDU, hospital-acquired, post-procedure | Vancomycin (target AUC/MIC 400-600); Daptomycin |
| Staphylococcus aureus bacteraemia with UTI | Consider endocarditis workup - may be seeding kidney | Flucloxacillin 2g IV q4h (MSSA); Vancomycin (MRSA) |
| Staphylococcus saprophyticus | Young women, uncomplicated | TMP-SMX, nitrofurantoin, FQ (cystitis; not sepsis) |
| Scenario | Drug | Dose | Notes |
|---|---|---|---|
| Stable, susceptible Candida (non-glabrata/krusei) | Fluconazole | 800 mg loading, then 400 mg IV/PO q24h (for candidaemia) OR 200 mg q24h (lower UTI) | Excellent urinary penetration; also bladder irrigation option for cystitis |
| Septic shock / fluconazole-resistant / C. glabrata / C. auris | Caspofungin | 70 mg IV loading, then 50 mg q24h | First-line echinocandin for candidaemia/septic shock |
| Alternative echinocandin | Micafungin | 100 mg IV q24h | Equivalent to caspofungin |
| C. krusei (innately resistant to fluconazole) | Voriconazole OR echinocandin | 200-300 mg IV/PO q12h | Note: poor urinary penetration with voriconazole; prefer echinocandin if bladder source |
| Remove indwelling catheter | - | - | Critical source control step |
| Antibiotic | Standard IV Dose | Interval | Infusion Duration | Dose Adjustment in AKI |
|---|---|---|---|---|
| Ceftriaxone | 1-2 g | q24h | 30 min | Not required (biliary excretion) |
| Cefotaxime | 1-2 g | q8h | 30 min | Reduce if eGFR <20 |
| Cefepime | 1-2 g | q8-12h | 30-60 min | Reduce if eGFR <50 |
| Ceftazidime | 2 g | q8h | 30 min-3h | Reduce if eGFR <50 |
| Piperacillin-tazobactam | 4.5 g | q6-8h | 4h extended infusion (preferred) | Reduce if eGFR <20 |
| Meropenem | 1-2 g | q8h | 30 min-3h (extended) | Reduce if eGFR <50 |
| Ertapenem | 1 g | q24h | 30 min-1h | Reduce if eGFR <30 |
| Imipenem-cilastatin | 500 mg | q6h | 30-60 min | Reduce if eGFR <70 |
| Ciprofloxacin | 400 mg | q8-12h | 60 min | Reduce if eGFR <30 |
| Levofloxacin | 500-750 mg | q24h | 60 min | Reduce if eGFR <50 |
| Vancomycin | AUC-guided (25-30 mg/kg loading) | q8-12h | 1-2h | TDM essential; reduce in AKI |
| Gentamicin | 5-7 mg/kg (single-dose synergy) | q24h | 30-60 min | TDM essential; single-dose in AKI |
| Amikacin | 15-20 mg/kg | q24h | 30-60 min | TDM essential |
| Ceftazidime-avibactam | 2.5 g | q8h | 2h | Reduce if eGFR <50 |
| Meropenem-vaborbactam | 4 g (2/2) | q8h | 3h | Reduce if eGFR <50 |
| Imipenem-relebactam | 1.25 g | q6h | 30 min | Reduce if eGFR <90 |
| Cefiderocol | 2 g | q8h | 3h | Reduce if eGFR <60 |
| Plazomicin | 15 mg/kg | q24h | 30 min | TDM; caution in AKI |
| Aztreonam | 2 g | q6-8h | 30 min-3h | Reduce if eGFR <30 |
| Caspofungin | 70 mg loading; 50 mg maintenance | q24h | 1h | No dose adjustment |
| Fluconazole | 800 mg loading; 400-800 mg maint. | q24h | 1h | Reduce by 50% if eGFR <50 |
Blood and urine cultures collected before antibiotics
↓
Empirical antibiotics started (Hour 1)
↓
Culture results: typically available at:
- Urine culture: 24-48 hours (final sensitivities 48-72h)
- Blood cultures: 12-72 hours (bottles flag positive)
↓
REASSESS at 48-72 hours:
1. What did the culture grow?
2. What is the sensitivity pattern?
3. Is the patient clinically improving?
4. Is there source control?
↓
De-escalate to narrowest effective agent
| Empirical Agent | De-escalate to | Route |
|---|---|---|
| Meropenem / Ertapenem (was started for ESBL risk) | Ceftriaxone 1-2g q24h (if susceptible to 3rd-gen cephalosporins) OR Co-trimoxazole 960mg q12h (if susceptible) | IV then PO step-down |
| Piperacillin-tazobactam | Ceftriaxone (if susceptible) | IV then PO |
| Any IV agent | Oral step-down after 24-48h improvement (see IVOST section) | PO |
| Culture Result | Definitive Agent | Dose | Notes |
|---|---|---|---|
| ESBL, susceptible to ertapenem | Ertapenem 1g IV q24h → step-down to oral | IV → PO | Once daily; good for step-down |
| ESBL, susceptible to TMP-SMX | Co-trimoxazole 960mg PO q12h | PO (after IV induction) | If susceptible, excellent oral bioavailability |
| ESBL, susceptible to FQ (ciprofloxacin MIC ≤0.25) | Ciprofloxacin 500mg PO q12h | PO step-down | Only if confirmed susceptible; excellent oral bioavailability |
| ESBL, susceptible to fosfomycin | Fosfomycin 3g PO q2-3 days | PO | Only for bladder infections; NOT pyelonephritis/bacteraemia |
| ESBL, multiple resistance | Continue carbapenem; ID consultation | IV | Consider ceftazidime-avibactam if carbapenem resistance co-present |
| Result | Definitive Agent | Dose | Notes |
|---|---|---|---|
| Ampicillin-susceptible E. faecalis | Ampicillin 2g IV q4-6h OR Amoxicillin 875mg PO q8h (step-down) | IV → PO | Stop GN coverage if mixed flora cleared |
| VRE (ampicillin-resistant, vancomycin-resistant) | Linezolid 600mg IV/PO q12h OR Daptomycin 6mg/kg IV q24h | IV → PO (linezolid) | ID consultation; long-term VRE management |
| Susceptibility | Agent | Dose | Notes |
|---|---|---|---|
| FQ-susceptible | Ciprofloxacin 500-750mg PO q12h | PO | Best oral option for Pseudomonas; excellent bioavailability |
| FQ-resistant, pip-tazo susceptible | Continue piperacillin-tazobactam IV | IV | No oral step-down unless ciprofloxacin-susceptible |
| MDR Pseudomonas | Ceftolozane-tazobactam or Ceftazidime-avibactam | IV | Based on susceptibility testing; ID consultation |
| Mechanism | Definitive Agent | Notes |
|---|---|---|
| KPC (carbapenemase) | Ceftazidime-avibactam 2.5g IV q8h | First choice for KPC-CRE |
| OXA-48 | Ceftazidime-avibactam 2.5g IV q8h | Active against OXA-48 |
| MBL (NDM, VIM, IMP) | Aztreonam 2g IV q6h + Ceftazidime-avibactam 2.5g IV q8h OR Cefiderocol 2g IV q8h | Combination needed; aztreonam not hydrolysed by MBLs but requires BLI protection |
| Unknown mechanism, panresistant | Cefiderocol ± polymyxin; ID consultation | Last resort; TDM |
| Species | Definitive Agent | Notes |
|---|---|---|
| C. albicans (susceptible) | Fluconazole 400mg IV/PO q24h | De-escalate from echinocandin if stable and susceptible |
| C. glabrata | Echinocandin (caspofungin/micafungin) throughout | Do NOT de-escalate to fluconazole without susceptibility testing |
| C. krusei | Echinocandin or Voriconazole | Innately fluconazole-resistant |
| C. auris | Echinocandin | Often multidrug-resistant; ID consultation essential |
| Criterion | Detail |
|---|---|
| Clinical improvement | Fever resolving/resolved; haemodynamically stable; heart rate improving; not on vasopressors |
| Able to take oral medication | Tolerating PO; no vomiting; functioning GI tract; no ileus, obstruction, or malabsorption |
| Effective oral option available | Organism susceptible to an oral agent that achieves adequate tissue levels (see table below) |
| Source control achieved | Obstruction drained; catheter managed; abscess drained if present |
| Bacteraemia improving | Repeat blood cultures negative or clinically resolved |
| Oral Antibiotic | Dose | Suitable For | NOT Suitable For | Notes |
|---|---|---|---|---|
| Ciprofloxacin | 500-750 mg q12h | Pyelonephritis, bacteraemia (GN), Pseudomonas | FQ-resistant organisms; prior FQ exposure | Excellent bioavailability (~70-80%); preferred FQ for UT |
| Levofloxacin | 750 mg q24h | Pyelonephritis, bacteraemia (GN) | FQ-resistant | Once daily; equivalent to cipro |
| Co-trimoxazole (TMP-SMX) | 960 mg (DS) q12h | Pyelonephritis, bacteraemia (if susceptible) | TMP-SMX-resistant organisms; 3rd trimester pregnancy; G6PD deficiency | Must confirm susceptibility; local resistance often >20% |
| Cefixime | 400 mg q24h | Pyelonephritis (if susceptible GN) | Pseudomonas, ESBL, Enterococcus | Oral 3rd-gen cephalosporin; reasonable tissue penetration |
| Amoxicillin | 500-875 mg q8h | Enterococcus faecalis (if susceptible) | ESBL-GN; Pseudomonas; most E. coli (resistant) | Only for confirmed ampicillin-susceptible Enterococcus |
| Amoxicillin-clavulanate | 875/125 mg q12h | Select uncomplicated/mild cUTI (community-acquired) | ESBL producers; sepsis | Less studied; not preferred over FQ/TMP-SMX |
| Fosfomycin | 3 g single dose or 3g q48h | Bladder-only ESBL/MDR infections | Pyelonephritis; bacteraemia; sepsis | Does NOT achieve adequate renal parenchyma levels - NOT for upper tract/blood |
| Nitrofurantoin | 100 mg (macrocrystalline) q12h | Bladder-only uncomplicated infection | Pyelonephritis; bacteraemia; sepsis; eGFR <45 | Same as fosfomycin - inadequate systemic levels |
| Fluconazole | 200-400 mg q24h | Candida UTI/candidaemia (susceptible species) | C. glabrata, C. krusei, C. auris | Check species susceptibility first |
| Linezolid | 600 mg q12h | VRE, MRSA (where oral needed) | GN organisms | IV = PO bioavailability; IV-to-PO switch is seamless |
| Voriconazole | 200 mg q12h | Invasive Aspergillus; C. krusei | Poor urinary penetration; not for isolated UTI | Hepatotoxicity; drug interactions |
Critical reminder (IDSA 2025 + Goldman-Cecil): Nitrofurantoin and oral fosfomycin are NOT suitable oral step-down agents after urosepsis/pyelonephritis - they do not achieve sufficient concentrations in the renal parenchyma or bloodstream to be effective for upper tract or systemic disease, even if the organism appears "susceptible" on MIC testing.
| Clinical Scenario | Total Duration | Evidence Base |
|---|---|---|
| Bacteraemic pyelonephritis, improving, source controlled | 7 days total (IV + oral combined) | IDSA 2025 (conditional, low certainty) |
| Uncomplicated bacteraemia from UTI (non-obstructed) | 7-10 days | IDSA 2025; Goldman-Cecil |
| Pyelonephritis (bacteraemia, treated with FQ) | 5-7 days | Goldman-Cecil 26E; shorter course adequate for FQ |
| Complicated UTI without bacteraemia, source controlled | 7 days | IDSA 2025 (7 vs 14 days, NI shown) |
| Septic shock (multi-organ involvement, bacteraemia) | 14 days (individualise) | Standard of care; review with ID |
| Obstructive urosepsis after decompression | 10-14 days (individualise) | Clinical consensus; EAU |
| Emphysematous pyelonephritis post-drainage | 4-6 weeks (varies by extent) | Case series; ID consultation |
| Prostatic abscess post-drainage | 4-6 weeks | FQ-based; tissue penetration critical |
| Renal abscess post-drainage | 4-6 weeks | IV induction then oral; ID consultation |
| Candidaemia (urinary source) | 14 days after last positive culture | IDSA Candida guidelines |
| PCT Finding | Interpretation | Action |
|---|---|---|
| PCT falling >80% from peak value | Strong bacterial infection resolving | Plan antibiotic discontinuation with clinical confirmation |
| PCT <0.5 µg/L (in non-critically ill) | Low probability of ongoing bacterial infection | Can discontinue antibiotics if clinically improving |
| PCT <0.1 µg/L | Bacterial infection very unlikely | Stop antibiotics |
| PCT static or rising despite treatment | Ongoing infection / undrained source / wrong antibiotic | Do NOT de-escalate; re-evaluate source control, resistance, diagnosis |
| PCT elevated but patient clinically improved, cultures positive and treated | Clinical picture overrides; apply antibiogram | Follow culture-guided therapy; use PCT as one data point |
| Allergy Type | Safe Alternatives |
|---|---|
| Non-severe (rash, GI) | 3rd/4th gen cephalosporins (cross-reactivity <2%); carbapenems (cross-reactivity ~1%); risk usually outweighed by benefit in sepsis |
| Severe (anaphylaxis, urticaria, SJS) | Aztreonam (monobactam - NO cross-reactivity with penicillin) + gentamicin; Aztreonam + ciprofloxacin; Tigecycline (if susceptible); consider allergy de-labelling after recovery |
| Carbapenem allergy | Aztreonam (GN only); FQ if susceptible; avoid pip-tazo (beta-lactam) |
| FQ allergy / contraindication | Aminoglycosides (short course TDM-guided); aztreonam; TMP-SMX if susceptible |
| Organism | Resistance Pattern | Empirical (before cultures) | Definitive (after cultures) | Oral Step-Down |
|---|---|---|---|---|
| E. coli | Susceptible | Ceftriaxone | Ceftriaxone → narrow further | TMP-SMX, Ciprofloxacin, Cefixime |
| E. coli | ESBL | Ertapenem / Meropenem | Ertapenem (if no pseudo risk) | TMP-SMX or Ciprofloxacin (if susceptible) |
| Klebsiella pneumoniae | Susceptible | Ceftriaxone | Ceftriaxone | TMP-SMX, Ciprofloxacin |
| Klebsiella pneumoniae | ESBL | Ertapenem / Meropenem | Ertapenem | Ciprofloxacin / TMP-SMX (if susceptible) |
| Klebsiella pneumoniae | KPC-CRE | Ceftazidime-avibactam | Ceftazidime-avibactam | Limited oral options; ID consultation |
| Klebsiella pneumoniae | NDM-MBL | Aztreonam + Caz-avi / Cefiderocol | Aztreonam + Caz-avi or Cefiderocol | ID consultation |
| Pseudomonas aeruginosa | Susceptible | Pip-tazo / Cefepime / Meropenem | Pip-tazo or Cefepime (narrow from carbapenem) | Ciprofloxacin 750mg q12h |
| Pseudomonas aeruginosa | MDR | Ceftolozane-tazo / Caz-avi | Based on susceptibility | ID consultation |
| Enterococcus faecalis | Ampicillin-susceptible | Pip-tazo | Ampicillin | Amoxicillin |
| Enterococcus faecium | VRE | Linezolid | Linezolid / Daptomycin | Linezolid PO |
| Proteus mirabilis | Susceptible | Ceftriaxone | Ceftriaxone / Amp-sulbactam | TMP-SMX, Ciprofloxacin |
| Candida albicans | FLC-susceptible | Echinocandin (if shock) / FLC (if stable) | Fluconazole (de-escalate from echinocandin if stable) | Fluconazole PO |
| Candida glabrata | FLC-resistant | Echinocandin | Echinocandin | Micafungin PO if available |