Doxycycline will effective in gastroentritis pt had vomiting since4 day no fever loose stool
doxycycline gastroenteritis treatment
"In general, antibiotics are not indicated for the treatment of the vast majority of cases of acute gastroenteritis."
| Pathogen | Role of Doxycycline | Notes |
|---|---|---|
| Vibrio cholerae (Cholera) | First-line adjunct to rehydration (single dose 300 mg) | Reduces duration and stool shedding |
| Yersinia enterocolitica | Alternative (with TMP-SMX or fluoroquinolone) | Rarely needed |
| Brucella | With gentamicin | Not typical GI presentation |
| V. parahaemolyticus | May shorten illness; used if severe | Usually self-limiting |
Find recent guidelines for acute gastroenteritis management
acute gastroenteritis management guidelines
acute gastroenteritis management guidelines 2024 2025 WHO IDSA
infectious diarrhea clinical practice guideline IDSA
https://infectology.by/wp-content/uploads/2025/12/2025_state…
infectious diarrhea diagnosis management adults
| Presentation | Action |
|---|---|
| >3 watery stools/24h, volume replete, no fever, no bloody stools | ORS only, avoid antibiotics, consider anti-diarrheal |
| >3 watery stools + signs of dehydration (dark urine, decreased skin turgor, orthostatic hypotension) | ORS preferred, avoid antibiotics, consider anti-diarrheal |
| Hypovolemic shock (SBP <90, tachycardia, elevated lactate) | IV fluids (not Lactated Ringers), avoid antibiotics |
| Bloody stools / fever / tenesmus / severe abdominal pain | ORS + antibiotic therapy |
| Age <5 or >65, cardiac disease, immunocompromise, pregnancy | ORS + antibiotic therapy; low threshold for admission |
| Indication | Preferred Antibiotic | Alternative |
|---|---|---|
| Empirical (toxic, fever, suspected bacterial dysentery) | Azithromycin 500 mg/day x 3 days | Ciprofloxacin 500 mg BID x 3-5 days |
| Traveler's diarrhea (severe) | Azithromycin 1g single dose or 500 mg/day x 3d | Ciprofloxacin 500 mg BID x 3d |
| Campylobacter | Azithromycin 500 mg/day x 3d | Ciprofloxacin (if sensitive) |
| Shigella | Azithromycin or ciprofloxacin | TMP-SMX (if sensitive) |
| Cholera (V. cholerae) | Doxycycline 300 mg single dose | Azithromycin 1g single dose |
| C. difficile | Fidaxomicin 200 mg BID x 10d (preferred) | Vancomycin 125 mg QID x 10d |
| Salmonella (non-typhoidal) | Only for high-risk groups; ciprofloxacin or azithromycin | Ceftriaxone for bacteremia |
| Yersinia | TMP-SMX or ciprofloxacin | Doxycycline (alternative) |
CAUTION: Avoid antibiotics in STEC O157:H7 (E. coli) - increases HUS risk up to 17-fold.
| Guideline | Year | Publisher |
|---|---|---|
| IDSA Clinical Practice Guidelines: Infectious Diarrhea | 2017 | Infectious Diseases Society of America |
| ACG Clinical Guideline: Acute Diarrheal Infections in Adults | 2016 | American College of Gastroenterology |
| State-of-the-Art Review: Infectious Diarrhea | 2025 | Clinical Infectious Diseases |
| IDSA/ASM Microbiology Laboratory Guide | 2024 | IDSA + American Society for Microbiology |
| AGA Update: C. difficile Management | 2026 | American Gastroenterological Association |
Create a management flowchart PDF for acute gastroenteritis
mkdir -p /home/daytona/workspace/gastroenteritis-flowchart && ls /home/daytona/w…
~/gastroenteritis-flowchart/generate_flowchart.py
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/gastroenteritis-flowchart/AGE_Management_Flowchart.pdf"
# ── colour palette ──────────────────────────────────────────────────────────
C_TITLE_BG = HexColor("#1A3C5E") # deep navy
C_TITLE_FG = colors.white
C_START_BG = HexColor("#2980B9") # mid-blue (patient entry)
C_ASSESS_BG = HexColor("#2980B9")
C_DIAMOND_BG = HexColor("#E67E22") # amber (decisions)
C_GREEN_BG = HexColor("#27AE60") # green (no-AB boxes)
C_RED_BG = HexColor("#C0392B") # red (danger/admit)
C_BLUE_BG = HexColor("#2471A3") # blue (treatment)
C_TEAL_BG = HexColor("#148F77") # teal (antibiotics)
C_GREY_BG = HexColor("#95A5A6") # grey (disposition)
C_LIGHT = HexColor("#EBF5FB") # very light blue (symptom box)
C_WARN = HexColor("#F9E79F") # yellow (warning)
C_TEXT = HexColor("#1B2631") # dark text
W, H = landscape(A3) # 420 × 297 mm → ~1190 × 842 pt
# ── helpers ─────────────────────────────────────────────────────────────────
def rounded_rect(c, x, y, w, h, r=8, fill_color=colors.white,
stroke_color=colors.grey, stroke_w=1):
c.setFillColor(fill_color)
c.setStrokeColor(stroke_color)
c.setLineWidth(stroke_w)
c.roundRect(x, y, w, h, r, stroke=1, fill=1)
def diamond(c, cx, cy, hw, hh, fill_color=C_DIAMOND_BG,
stroke_color=HexColor("#CA6F1E"), stroke_w=1.5):
"""Draw a diamond centred at (cx,cy) with half-widths hw, hh."""
path = c.beginPath()
path.moveTo(cx, cy + hh)
path.lineTo(cx + hw, cy)
path.lineTo(cx, cy - hh)
path.lineTo(cx - hw, cy)
path.close()
c.setFillColor(fill_color)
c.setStrokeColor(stroke_color)
c.setLineWidth(stroke_w)
c.drawPath(path, fill=1, stroke=1)
def wrap_text(c, text, x, y, max_w, font="Helvetica", size=8,
color=C_TEXT, leading=10, align="center"):
"""Very simple word-wrap inside a box."""
c.setFont(font, size)
c.setFillColor(color)
words = text.split()
lines, line = [], ""
for w in words:
test = (line + " " + w).strip()
if c.stringWidth(test, font, size) <= max_w:
line = test
else:
if line:
lines.append(line)
line = w
if line:
lines.append(line)
total_h = len(lines) * leading
start_y = y + total_h / 2 - leading
for i, ln in enumerate(lines):
yy = start_y - i * leading
if align == "center":
c.drawCentredString(x, yy, ln)
else:
c.drawString(x - max_w / 2, yy, ln)
def arrow(c, x1, y1, x2, y2, label="", color=HexColor("#2C3E50"), lw=1.5):
"""Arrow from (x1,y1) to (x2,y2) with optional midpoint label."""
c.setStrokeColor(color)
c.setLineWidth(lw)
c.line(x1, y1, x2, y2)
# arrowhead
import math
ang = math.atan2(y2 - y1, x2 - x1)
size = 7
c.setFillColor(color)
path = c.beginPath()
path.moveTo(x2, y2)
path.lineTo(x2 - size * math.cos(ang - 0.4),
y2 - size * math.sin(ang - 0.4))
path.lineTo(x2 - size * math.cos(ang + 0.4),
y2 - size * math.sin(ang + 0.4))
path.close()
c.drawPath(path, fill=1, stroke=0)
if label:
mx, my = (x1 + x2) / 2, (y1 + y2) / 2
c.setFont("Helvetica-Bold", 7)
c.setFillColor(color)
c.drawCentredString(mx, my + 4, label)
def box(c, cx, cy, bw, bh, text, bg, fg=colors.white,
font="Helvetica-Bold", size=8, r=7, border=None):
"""Convenience: draw rounded rect + centred wrapped text."""
stroke = border if border else bg.clone() if hasattr(bg, "clone") else bg
# darken stroke slightly
rounded_rect(c, cx - bw/2, cy - bh/2, bw, bh, r,
fill_color=bg, stroke_color=stroke, stroke_w=1.2)
wrap_text(c, text, cx, cy, bw - 8, font=font, size=size, color=fg)
# ── page setup ───────────────────────────────────────────────────────────────
c = canvas.Canvas(OUTPUT, pagesize=landscape(A3))
c.setTitle("Acute Gastroenteritis – Management Flowchart")
# ── TITLE BANNER ────────────────────────────────────────────────────────────
c.setFillColor(C_TITLE_BG)
c.rect(0, H - 48, W, 48, fill=1, stroke=0)
c.setFillColor(colors.white)
c.setFont("Helvetica-Bold", 18)
c.drawCentredString(W / 2, H - 28, "ACUTE GASTROENTERITIS — MANAGEMENT FLOWCHART")
c.setFont("Helvetica", 9)
c.drawCentredString(W / 2, H - 40,
"Based on IDSA 2017 Guidelines, ACG 2016, Shane et al. CID 2025 State-of-the-Art Review")
# ── FOOTER ───────────────────────────────────────────────────────────────────
c.setFillColor(C_TITLE_BG)
c.rect(0, 0, W, 18, fill=1, stroke=0)
c.setFillColor(colors.white)
c.setFont("Helvetica", 7)
c.drawCentredString(W / 2, 5,
"For clinical reference only | IDSA 2017 | ACG 2016 | Shane et al. CID 2025 | Harrison's 22E (2025) | Rosen's EM")
# ── LEGEND ───────────────────────────────────────────────────────────────────
lx, ly = 30, 55
c.setFont("Helvetica-Bold", 7.5)
c.setFillColor(C_TEXT)
c.drawString(lx, ly + 10, "LEGEND:")
items = [
(C_START_BG, "Entry / Assessment"),
(C_DIAMOND_BG, "Decision"),
(C_GREEN_BG, "Conservative Tx"),
(C_TEAL_BG, "Antibiotic Indicated"),
(C_RED_BG, "Admit / High Risk"),
(C_GREY_BG, "Disposition"),
]
for i, (col, lbl) in enumerate(items):
xx = lx + i * 130
c.setFillColor(col)
c.rect(xx, ly - 5, 12, 10, fill=1, stroke=0)
c.setFillColor(C_TEXT)
c.setFont("Helvetica", 7)
c.drawString(xx + 15, ly + 1, lbl)
# ─────────────────────────────────────────────────────────────────────────────
# LAYOUT (all coords in points, origin bottom-left)
# We'll draw top-down. Top of drawing area: H-55 (below banner).
# ─────────────────────────────────────────────────────────────────────────────
TOP = H - 62
BOT = 75 # above footer + legend
# Row Y positions (centres)
R1 = TOP - 28 # Patient Presentation
R2 = R1 - 58 # Initial Assessment box
R3 = R2 - 60 # Diamond: Red flags?
R4 = R3 - 65 # Diamond: Dehydration? | RED FLAG pathway
R5 = R4 - 65 # Diamond: Special pop? | Admit box
R6 = R5 - 65 # Mild path splits
R7 = R6 - 65 # Treatment boxes (Mild / Moderate / AB)
R8 = R7 - 58 # Disposition row
CX = W / 2 # centre x
# ── BOX DIMENSIONS ──────────────────────────────────────────────────────────
BW_STD = 148 # standard box width
BH_STD = 36
BW_WIDE = 175
BH_TALL = 42
BW_SM = 130
BH_SM = 32
# ═══════════════════════════════════════════════════════════════════════════
# ROW 1 – Patient Presentation
# ═══════════════════════════════════════════════════════════════════════════
box(c, CX, R1, 320, 34,
"PATIENT PRESENTS WITH SUSPECTED ACUTE GASTROENTERITIS\n"
"(Diarrhoea ≥3 stools/24h ± nausea, vomiting, cramps, ±fever)",
C_START_BG, colors.white, size=9, r=17)
arrow(c, CX, R1 - 17, CX, R2 + BH_STD/2)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 2 – Initial Assessment
# ═══════════════════════════════════════════════════════════════════════════
box(c, CX, R2, 360, BH_TALL,
"INITIAL ASSESSMENT: History (duration, stool character, fever, travel, diet, "
"contacts, antibiotics) • Exam (HR, BP, skin turgor, mucosae) • "
"Labs if indicated (CBC, electrolytes, stool culture/PCR)",
C_LIGHT, C_TEXT, font="Helvetica", size=7.5, r=6,
border=HexColor("#2980B9"))
arrow(c, CX, R2 - BH_TALL/2, CX, R3 + 28)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 3 – Diamond: RED FLAGS?
# ═══════════════════════════════════════════════════════════════════════════
diamond(c, CX, R3, 130, 28, C_DIAMOND_BG)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.white)
c.drawCentredString(CX, R3 + 5, "RED FLAGS present?")
c.setFont("Helvetica", 7)
c.drawCentredString(CX, R3 - 6,
"Bloody stool • Fever >38.5°C • Severe abd pain • Tenesmus")
# NO branch – arrow down
arrow(c, CX, R3 - 28, CX, R4 + 28, label="NO")
# YES branch – arrow RIGHT to admit
arrow(c, CX + 130, R3, CX + 310, R3, label="YES")
# ADMIT / HIGH RISK box (far right)
RF_X = CX + 385
box(c, RF_X, R3, 140, BH_TALL,
"BACTERIAL DYSENTERY PATHWAY\n"
"Stool culture + C. diff PCR\n"
"ORS/IV fluids\n"
"Empirical ABs (see antibiotic box)",
C_RED_BG, colors.white, size=7.5)
# arrow down from red box
arrow(c, RF_X, R3 - BH_TALL/2 - 2, RF_X, R5 - 16)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 4 – Diamond: DEHYDRATION?
# ═══════════════════════════════════════════════════════════════════════════
diamond(c, CX, R4, 130, 28, C_DIAMOND_BG)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.white)
c.drawCentredString(CX, R4 + 5, "DEHYDRATION?")
c.setFont("Helvetica", 7)
c.drawCentredString(CX, R4 - 6,
"Dark urine • Decreased turgor • Orthostatic hypotension • Shock")
# NO (mild) → left
arrow(c, CX - 130, R4, CX - 270, R4, label="NONE/MILD")
# MODERATE → down
arrow(c, CX, R4 - 28, CX, R5 + 28, label="MODERATE")
# SEVERE/SHOCK → right
arrow(c, CX + 130, R4, CX + 270, R4, label="SEVERE/SHOCK")
# ═══════════════════════════════════════════════════════════════════════════
# ROW 4 SIDE BOXES (Mild left, Severe right)
# ═══════════════════════════════════════════════════════════════════════════
MILD_X = CX - 340
SEVERE_X = CX + 340
box(c, MILD_X, R4, BW_WIDE, BH_TALL,
"MILD / NO DEHYDRATION\nVolume replete\nOral intake tolerated",
C_GREEN_BG, colors.white, size=8)
box(c, SEVERE_X, R4, BW_WIDE, BH_TALL,
"SEVERE DEHYDRATION / SHOCK\nIV Fluids (NS preferred)\nAvoid Lactated Ringers\nConsider ICU/HDU",
C_RED_BG, colors.white, size=8)
# arrows from side boxes down to row 6
arrow(c, MILD_X, R4 - BH_TALL/2, MILD_X, R6 + BH_STD/2)
arrow(c, SEVERE_X, R4 - BH_TALL/2, SEVERE_X, R6 + BH_STD/2)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 5 – Diamond: SPECIAL POPULATION? (centre column only)
# ═══════════════════════════════════════════════════════════════════════════
diamond(c, CX, R5, 130, 28, C_DIAMOND_BG)
c.setFont("Helvetica-Bold", 8)
c.setFillColor(colors.white)
c.drawCentredString(CX, R5 + 5, "SPECIAL POPULATION?")
c.setFont("Helvetica", 7)
c.drawCentredString(CX, R5 - 6,
"Age <5 or >65 • Immunocomp. • Pregnancy • Cardiac disease")
# YES → right to lower admit
arrow(c, CX + 130, R5, CX + 270, R5, label="YES")
box(c, CX + 370, R5, 165, BH_TALL,
"HIGHER RISK PATHWAY\nLow threshold for admission\nIV hydration preferred\nEarly antibiotic therapy\nClose monitoring",
C_RED_BG, colors.white, size=7.5)
# NO → down
arrow(c, CX, R5 - 28, CX, R6 + BH_STD/2, label="NO")
# ═══════════════════════════════════════════════════════════════════════════
# ROW 6 – Three treatment pathway boxes
# ═══════════════════════════════════════════════════════════════════════════
# Centre (moderate dehydration ORS)
box(c, CX, R6, BW_WIDE, BH_STD,
"MODERATE DEHYDRATION\nORS 50–100 mL/kg over 2–4 h\n(NG tube if vomiting persists)\nReassess in 2–4 h",
C_BLUE_BG, colors.white, size=8)
# Left (mild) – already positioned at MILD_X
box(c, MILD_X, R6, BW_WIDE, BH_STD,
"CONSERVATIVE MANAGEMENT\nORS / encourage oral fluids\nDiet: starchy foods, avoid dairy/fat\nLoperamide (adults, non-dysentery)\nOndansetron for vomiting",
C_GREEN_BG, colors.white, size=7.5)
# Right (severe) – already at SEVERE_X
box(c, SEVERE_X, R6, BW_WIDE, BH_STD,
"IV FLUID RESUSCITATION\n0.9% NS bolus 20 mL/kg\nMonitor electrolytes/renal Fn\nAntiemetics IV\nNPO initially → advance diet",
C_BLUE_BG, colors.white, size=7.5)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 7 – ANTIBIOTIC decision + Symptomatic Rx
# ═══════════════════════════════════════════════════════════════════════════
arrow(c, CX, R6 - BH_STD/2, CX, R7 + BH_TALL/2)
arrow(c, MILD_X, R6 - BH_STD/2, MILD_X, R7 + BH_TALL/2)
arrow(c, SEVERE_X,R6 - BH_STD/2, SEVERE_X,R7 + BH_TALL/2)
# Centre: ANTIBIOTIC GUIDE
box(c, CX, R7, 210, BH_TALL + 10,
"ANTIBIOTIC GUIDE (when indicated)\n"
"Empirical: Azithromycin 500 mg/day × 3d OR\n"
"Ciprofloxacin 500 mg BID × 3–5d\n"
"Traveler's diarrhea: Azithromycin 1g single dose\n"
"Cholera: Doxycycline 300 mg single dose\n"
"C. difficile: Fidaxomicin 200 mg BID × 10d\n"
"⚠ AVOID ABs in STEC O157:H7 (↑HUS risk)",
C_TEAL_BG, colors.white, size=7.5)
# Left: Symptomatic Treatment
box(c, MILD_X, R7, BW_WIDE + 10, BH_TALL + 10,
"SYMPTOMATIC TREATMENT\n"
"Ondansetron 4–8 mg (antiemetic 1st line)\n"
"Loperamide 4 mg then 2 mg/stool (max 16 mg/d)\n"
"Zinc 20 mg/day (malnourished children >6 mo)\n"
"Probiotics: not proven in adults\n"
"Avoid antimotility in dysentery without ABs",
C_BLUE_BG, colors.white, size=7.5)
# Right: Monitoring
box(c, SEVERE_X, R7, BW_WIDE + 10, BH_TALL + 10,
"MONITORING & ESCALATION\n"
"Repeat vitals & hydration status 2–4 h\n"
"Electrolytes if IV fluids given\n"
"Stool culture if: fever + bloody stool,\n"
"immunocomp., outbreak, duration >7 days\n"
"C. diff PCR if: recent ABs or hospital stay",
C_BLUE_BG, colors.white, size=7.5)
# Red flag admit arrow to row 7 region
arrow(c, RF_X, R5 - 16, RF_X, R7 + BH_TALL/2 + 5)
box(c, RF_X, R7, 148, BH_TALL + 10,
"DYSENTERY ANTIBIOTICS\n"
"Shigella: Azithromycin 500 mg/d × 3d\n"
"Campylobacter: Azithromycin × 3d\n"
"Salmonella (high risk): Cipro × 5–7d\n"
"NTS: ABs only if bacteraemia suspected\n"
"Stool cx before starting if possible",
C_TEAL_BG, colors.white, size=7.5)
# ═══════════════════════════════════════════════════════════════════════════
# ROW 8 – DISPOSITION
# ═══════════════════════════════════════════════════════════════════════════
arrow(c, MILD_X, R7 - (BH_TALL+10)/2, MILD_X, R8 + BH_STD/2)
arrow(c, CX, R7 - (BH_TALL+10)/2, CX, R8 + BH_STD/2)
arrow(c, SEVERE_X,R7 - (BH_TALL+10)/2, SEVERE_X,R8 + BH_STD/2)
box(c, MILD_X, R8, BW_WIDE, BH_STD,
"DISCHARGE\nWritten ORS/diet instructions\nReturn precautions\nFollow-up if >7 days",
C_GREY_BG, colors.white, size=8)
box(c, CX, R8, BW_WIDE, BH_STD,
"DISCHARGE (reassess after rehydration)\nOutpatient if tolerating oral fluids\nFollow-up in 24–48 h",
C_GREY_BG, colors.white, size=8)
box(c, SEVERE_X, R8, BW_WIDE, BH_STD,
"ADMIT\nIV hydration & electrolyte correction\nConsult if no improvement 48–72 h\nIsolation precautions",
C_RED_BG, colors.white, size=8)
# ── COLUMN HEADERS ──────────────────────────────────────────────────────────
hdr_y = R4 + 50
for hx, label in [(MILD_X, "MILD / NO DEHYDRATION"),
(CX, "MODERATE DEHYDRATION"),
(SEVERE_X,"SEVERE / SHOCK")]:
c.setFont("Helvetica-Bold", 7)
c.setFillColor(C_TITLE_BG)
c.drawCentredString(hx, hdr_y, f"── {label} ──")
c.save()
print("PDF saved to:", OUTPUT)
cd /home/daytona/workspace/gastroenteritis-flowchart && python generate_flowchar…
ls -lh /home/daytona/workspace/gastroenteritis-flowchart/AGE_Management_Flowchar…
AGE Management Flowchart
PDF Document · PDF