Hi

Hi! How can I help you today?

Am working as mbbs intern

That's great! Internship is one of the most intense and rewarding phases of medical training - you get real hands-on experience across all major departments.
How can I help you? Feel free to ask about:
  • Clinical cases - symptoms, differentials, workup
  • Drugs & dosages - pharmacology, interactions
  • Procedures - how-tos, indications, contraindications
  • Theory - pathophysiology, anatomy, guidelines
  • Exam prep - if you have any upcoming assessments
What's on your mind?

Yes i want all

Perfect! I'm here for all of it. Just ask me anything as it comes up during your internship rotation.
Here's how to get the most out of me:
Clinical scenarios
"Patient with chest pain, BP 90/60, diaphoresis - what do I do?"
Drug queries
"Dose of metformin in a newly diagnosed T2DM patient"
Quick theory
"Explain the mechanism of ACE inhibitors"
Procedures
"Steps for IV cannulation / pleural tap / lumbar puncture"
Differentials
"DDx for a young patient with painless jaundice"
Investigations
"What labs to order for suspected sepsis?"

Just type your question naturally - as if you're asking a senior resident. I'll give you a clear, practical answer backed by medical textbooks and current evidence.
What's your first question? 🩺

If patuentvcame with sore throat

Good clinical question! Sore throat (pharyngitis/tonsillitis) is one of the most common presentations in OPD.
Searching sources...
Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Here's a practical, structured approach to a patient presenting with sore throat:

🩺 Patient with Sore Throat - Clinical Approach

1. FIRST - Think About the Causes

Infectious (most common):
CauseFrequencyClue
Rhinovirus / Coronavirus~25%Common cold symptoms, runny nose, cough
Adenovirus5%Fever, conjunctivitis, pharyngitis
Group A beta-hemolytic Strep (GABHS)5-15% adults, 20-30% childrenExudate, no cough, fever
EBV (Mono)1-6% young adultsPosterior cervical LN, splenomegaly
Influenza A/B2%Myalgia, fever, headache
HSV4%Ulcers/vesicles
HIV (acute)RareHigh-risk history
Non-infectious (don't miss):
  • GERD, postnasal drip, allergies, smoking
  • Acute thyroiditis
  • Neoplasm (if chronic/recurrent)

2. USE THE CENTOR SCORE (for adults)

Score 1 point for each:
  1. ✅ History of fever
  2. ✅ No cough
  3. ✅ Tender anterior cervical lymphadenopathy
  4. ✅ Tonsillar exudate or swelling
ScoreGAS ProbabilityAction
02%No test, no antibiotic
13%No test, no antibiotic
28%Do rapid strep test
319%Do rapid strep test
441%Treat empirically OR rapid test
In children - always confirm with test even if criteria met, as Centor is less specific in kids.

3. INVESTIGATIONS

  • Rapid Strep Antigen Test - sensitivity ~80%, specificity ~95%, result in minutes
  • Throat culture - sensitivity 85-90%, takes 24-48 hrs (not routine in adults)
  • If mono suspected: CBC (atypical lymphocytes >10%), Monospot test
  • If STI risk: throat swab for Gonorrhea
  • If immunocompromised: HIV test

4. TREATMENT

For ALL pharyngitis (viral or bacterial):
  • Paracetamol / NSAIDs for pain
  • Saline gargles, soft diet, warm fluids with honey
For confirmed/likely GABHS (strep throat):
  • First line: Penicillin V - 10 day course (no resistance ever documented!)
  • Alternative: Amoxicillin (especially in kids - palatable syrup)
  • Penicillin mild allergy: Cephalexin or Cefadroxil
  • Severe penicillin allergy: Erythromycin, Clarithromycin, or Clindamycin
⚠️ Must complete 7-10 days even if symptoms resolve earlier - shorter courses are less effective for strep!
Steroids (dexamethasone) - NOT recommended routinely. Short-term pain benefit only; associated with sepsis, GI bleed, VTE risk.

5. RED FLAGS - Tell patient to return if:

  • Shaking chills/rigors
  • Neck swelling (beyond lymph nodes)
  • Difficulty swallowing or drooling (think peritonsillar abscess)
  • Symptoms not improving after 5 days
  • Muffled "hot potato" voice - peritonsillar abscess

6. COMPLICATIONS TO PREVENT

SuppurativeNonsuppurative
Peritonsillar abscessAcute Rheumatic Fever
Retropharyngeal abscessPost-streptococcal glomerulonephritis
Otitis mediaScarlet fever
Sinusitis
This is why we treat confirmed strep - to prevent rheumatic fever (especially important in India where prevalence is higher).

Sources: - Harrison's Principles of Internal Medicine 22E, p. 301 | Symptom to Diagnosis: An Evidence-Based Guide, 4th Ed, p. 535

Create a quick reference guide on pharyngitis for my internship

Asking for Preferences

What format do you want the quick reference guide in?

Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /home/daytona/workspace/pharyngitis-guide

Writing File

~/pharyngitis-guide/create_guide.py

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

# ── Color palette ──────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1a3a5c")
MED_BLUE    = colors.HexColor("#2563a8")
LIGHT_BLUE  = colors.HexColor("#dbeafe")
ORANGE      = colors.HexColor("#ea580c")
ORANGE_LIGHT= colors.HexColor("#fff7ed")
GREEN       = colors.HexColor("#166534")
GREEN_LIGHT = colors.HexColor("#dcfce7")
RED         = colors.HexColor("#991b1b")
RED_LIGHT   = colors.HexColor("#fee2e2")
YELLOW      = colors.HexColor("#854d0e")
YELLOW_LIGHT= colors.HexColor("#fef9c3")
GREY_BG     = colors.HexColor("#f1f5f9")
GREY_LINE   = colors.HexColor("#cbd5e1")
WHITE       = colors.white
BLACK       = colors.HexColor("#1e293b")

# ── Styles ─────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def make_style(name, parent='Normal', **kw):
    s = ParagraphStyle(name, parent=styles[parent], **kw)
    return s

title_style = make_style('DocTitle', fontSize=22, textColor=WHITE,
                         fontName='Helvetica-Bold', alignment=TA_CENTER,
                         spaceAfter=4)
subtitle_style = make_style('DocSub', fontSize=11, textColor=colors.HexColor("#bfdbfe"),
                            fontName='Helvetica', alignment=TA_CENTER, spaceAfter=2)
badge_style  = make_style('Badge', fontSize=9, textColor=WHITE,
                           fontName='Helvetica-Bold', alignment=TA_CENTER)

section_head = make_style('SecHead', fontSize=12, textColor=WHITE,
                          fontName='Helvetica-Bold', alignment=TA_LEFT,
                          spaceBefore=2, spaceAfter=2)

body = make_style('Body', fontSize=9, textColor=BLACK,
                  fontName='Helvetica', leading=14, spaceAfter=2)
body_bold = make_style('BodyBold', fontSize=9, textColor=BLACK,
                       fontName='Helvetica-Bold', leading=14)
small = make_style('Small', fontSize=8, textColor=colors.HexColor("#475569"),
                   fontName='Helvetica', leading=11)
small_bold = make_style('SmallBold', fontSize=8, textColor=BLACK,
                        fontName='Helvetica-Bold', leading=11)
footnote = make_style('Footnote', fontSize=7.5, textColor=colors.HexColor("#64748b"),
                      fontName='Helvetica-Oblique', alignment=TA_CENTER, leading=11)

red_alert = make_style('RedAlert', fontSize=9, textColor=RED,
                       fontName='Helvetica-Bold', leading=14)

# ── Helper: coloured section header row ───────────────────────────
def section_table(text, bg=MED_BLUE, emoji=""):
    label = f"{emoji}  {text}" if emoji else text
    t = Table([[Paragraph(label, section_head)]], colWidths=[17.6*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('ROUNDEDCORNERS', [4,4,4,4]),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
    ]))
    return t

def coloured_box(content_rows, bg=LIGHT_BLUE, col_widths=None):
    """Wrap a list of [cell, cell] rows in a coloured box table."""
    if col_widths is None:
        col_widths = [17.6*cm]
    t = Table(content_rows, colWidths=col_widths)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
        ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ]))
    return t

# ── Document setup ─────────────────────────────────────────────────
output_path = "/home/daytona/workspace/pharyngitis-guide/Pharyngitis_Quick_Reference.pdf"
doc = SimpleDocTemplate(
    output_path,
    pagesize=A4,
    leftMargin=1.2*cm, rightMargin=1.2*cm,
    topMargin=1.0*cm, bottomMargin=1.2*cm,
    title="Pharyngitis Quick Reference Guide",
    author="Orris Medical"
)

story = []

# ══════════════════════════════════════════════════════════════════
# HEADER BANNER
# ══════════════════════════════════════════════════════════════════
header_data = [[
    Paragraph("PHARYNGITIS", title_style),
],[
    Paragraph("Quick Reference Guide for MBBS Interns  |  ENT / General OPD", subtitle_style),
],[
    Paragraph("Sources: Harrison's Principles 22E · Symptom to Diagnosis 4E · Scott-Brown's ORL · Textbook of Family Medicine 9E", footnote),
]]
header_table = Table(header_data, colWidths=[17.6*cm])
header_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
    ('TOPPADDING', (0,0), (-1,-1), 8),
    ('BOTTOMPADDING', (0,0), (-1,-1), 8),
    ('LEFTPADDING', (0,0), (-1,-1), 12),
    ('ROUNDEDCORNERS', [6,6,6,6]),
]))
story.append(header_table)
story.append(Spacer(1, 0.3*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 1 — DEFINITION + EPIDEMIOLOGY
# ══════════════════════════════════════════════════════════════════
story.append(section_table("1.  DEFINITION & EPIDEMIOLOGY", bg=MED_BLUE))
story.append(Spacer(1, 0.15*cm))

epi_data = [
    [Paragraph("<b>Pharyngitis</b>", small_bold),
     Paragraph("Inflammation of the pharynx and/or tonsils. One of the most common OPD presentations.", small)],
    [Paragraph("<b>Viral (most common)</b>", small_bold),
     Paragraph("Rhinovirus & coronavirus account for ~25% of all sore throats", small)],
    [Paragraph("<b>GABHS (bacterial)</b>", small_bold),
     Paragraph("5–15% in adults | 20–30% in children — most common bacterial cause", small)],
    [Paragraph("<b>Peak season</b>", small_bold),
     Paragraph("Winter and early spring", small)],
    [Paragraph("<b>High-risk groups</b>", small_bold),
     Paragraph("Children 5–15 yrs, healthcare workers, teachers, parents of young children", small)],
]
t = Table(epi_data, colWidths=[4*cm, 13.6*cm])
t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (0,-1), LIGHT_BLUE),
    ('BACKGROUND', (1,0), (1,-1), WHITE),
    ('ROWBACKGROUNDS', (1,0), (1,-1), [WHITE, GREY_BG]),
    ('TOPPADDING', (0,0), (-1,-1), 5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(t)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 2 — DIFFERENTIAL DIAGNOSIS TABLE
# ══════════════════════════════════════════════════════════════════
story.append(section_table("2.  DIFFERENTIAL DIAGNOSIS", bg=MED_BLUE))
story.append(Spacer(1, 0.15*cm))

ddx_header = [
    Paragraph("<b>Pathogen</b>", small_bold),
    Paragraph("<b>Type</b>", small_bold),
    Paragraph("<b>Freq.</b>", small_bold),
    Paragraph("<b>Key Clinical Features</b>", small_bold),
]
ddx_rows = [
    [Paragraph("Rhinovirus / Coronavirus", small), Paragraph("Viral", small), Paragraph("~25%", small), Paragraph("Common cold, runny nose, mild throat pain, NO fever", small)],
    [Paragraph("Adenovirus", small), Paragraph("Viral", small), Paragraph("5%", small), Paragraph("Pharyngo-conjunctival fever: sore throat + conjunctivitis + fever", small)],
    [Paragraph("Influenza A/B", small), Paragraph("Viral", small), Paragraph("2%", small), Paragraph("High fever, myalgia, headache, non-exudative pharyngitis", small)],
    [Paragraph("HSV 1/2", small), Paragraph("Viral", small), Paragraph("4%", small), Paragraph("Vesicles/ulcers on pharynx or lips, stomatitis", small)],
    [Paragraph("EBV (Mono)", small), Paragraph("Viral", small), Paragraph("1–6%", small), Paragraph("Exudate + posterior cervical LAP + splenomegaly; young adults", small)],
    [Paragraph("HIV (acute)", small), Paragraph("Viral", small), Paragraph("Rare", small), Paragraph("Mono-like illness; high-risk history; fever, rash, LAP", small)],
    [Paragraph("GABHS (Strep A)", small), Paragraph("Bacterial", small), Paragraph("5–30%", small), Paragraph("Exudate, fever, NO cough, tender ant. cervical LN — USE CENTOR", small)],
    [Paragraph("Fusobacterium", small), Paragraph("Bacterial", small), Paragraph("Uncommon", small), Paragraph("Unilateral severe sore throat; risk of Lemierre syndrome", small)],
    [Paragraph("N. gonorrhoeae", small), Paragraph("Bacterial", small), Paragraph("~1%", small), Paragraph("STI history, often asymptomatic or exudative pharyngitis", small)],
    [Paragraph("C. diphtheriae", small), Paragraph("Bacterial", small), Paragraph("Rare", small), Paragraph("Grey pseudomembrane, bull neck, unvaccinated patient", small)],
]
ddx_table_data = [ddx_header] + ddx_rows
ddx_col_w = [4.0*cm, 2.0*cm, 1.8*cm, 9.8*cm]
ddx_t = Table(ddx_table_data, colWidths=ddx_col_w)
ddx_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), DARK_BLUE),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREY_BG]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 6),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    # Highlight GABHS row (index 7)
    ('BACKGROUND', (0,7), (-1,7), colors.HexColor("#fef3c7")),
]))
story.append(ddx_t)

story.append(Spacer(1, 0.1*cm))
story.append(Paragraph("★  Non-infectious causes: GERD, postnasal drip, allergies, smoking, acute thyroiditis, neoplasm (consider if chronic/recurrent)", small))
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 3 — CENTOR SCORE (2 columns)
# ══════════════════════════════════════════════════════════════════
story.append(section_table("3.  CENTOR SCORE  (Identifies likely GABHS in Adults)", bg=colors.HexColor("#d97706")))
story.append(Spacer(1, 0.15*cm))

# Left: criteria  | Right: score table
centor_criteria = Table([
    [Paragraph("<b>Score 1 point for each criterion:</b>", small_bold)],
    [Paragraph("1.  History of <b>fever</b>", small)],
    [Paragraph("2.  <b>Absence of cough</b>", small)],
    [Paragraph("3.  Tender <b>anterior cervical lymphadenopathy</b>", small)],
    [Paragraph("4.  <b>Tonsillar exudate</b> or swelling", small)],
    [Paragraph("  ", small)],
    [Paragraph("<i>In children: always confirm with rapid test\nregardless of score (Centor less specific).</i>", small)],
], colWidths=[8.4*cm])
centor_criteria.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), YELLOW_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
    ('GRID', (0,0), (-1,-1), 0, WHITE),
]))

score_data = [
    [Paragraph("<b>Score</b>", small_bold), Paragraph("<b>GAS Prob.</b>", small_bold), Paragraph("<b>Action</b>", small_bold)],
    [Paragraph("0", small), Paragraph("2%", small), Paragraph("No test, no antibiotic", small)],
    [Paragraph("1", small), Paragraph("3%", small), Paragraph("No test, no antibiotic", small)],
    [Paragraph("2", small), Paragraph("8%", small), Paragraph("Rapid strep test", small)],
    [Paragraph("3", small), Paragraph("19%", small), Paragraph("Rapid strep test", small)],
    [Paragraph("4", small), Paragraph("41%", small), Paragraph("<b>Treat empirically OR rapid test</b>", small)],
]
score_t = Table(score_data, colWidths=[1.6*cm, 2.4*cm, 5.0*cm])
score_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor("#92400e")),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREY_BG]),
    ('BACKGROUND', (0,5), (-1,5), colors.HexColor("#fde68a")),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 6),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('ALIGN', (0,0), (1,-1), 'CENTER'),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))

centor_combined = Table([[centor_criteria, score_t]], colWidths=[8.6*cm, 9.0*cm])
centor_combined.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0),
    ('RIGHTPADDING', (0,0), (-1,-1), 0),
]))
story.append(centor_combined)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 4 — INVESTIGATIONS
# ══════════════════════════════════════════════════════════════════
story.append(section_table("4.  INVESTIGATIONS", bg=colors.HexColor("#0f766e")))
story.append(Spacer(1, 0.15*cm))

inv_data = [
    [Paragraph("<b>Test</b>", small_bold), Paragraph("<b>Details</b>", small_bold), Paragraph("<b>When to order</b>", small_bold)],
    [Paragraph("Rapid Strep Antigen", small),
     Paragraph("Sensitivity ~80%, Specificity ~95%. Results in minutes.", small),
     Paragraph("Centor score 2–4", small)],
    [Paragraph("Throat Culture", small),
     Paragraph("Sensitivity 85–90%. Takes 24–48 hrs. Not routine in adults.", small),
     Paragraph("Children, treatment failure", small)],
    [Paragraph("CBC + Peripheral Smear", small),
     Paragraph("Atypical lymphocytes >10% → EBV mono", small),
     Paragraph("Suspect mono (young adult + posterior LAP)", small)],
    [Paragraph("Monospot Test", small),
     Paragraph("Rapid heterophile antibody test for EBV", small),
     Paragraph("Suspect mono", small)],
    [Paragraph("Throat swab for culture", small),
     Paragraph("GC culture on Thayer-Martin medium", small),
     Paragraph("STI risk / gonorrheal pharyngitis", small)],
    [Paragraph("HIV test", small),
     Paragraph("4th gen Ag/Ab combo test", small),
     Paragraph("High risk history, mono-like illness", small)],
]
inv_t = Table(inv_data, colWidths=[4.0*cm, 8.0*cm, 5.6*cm])
inv_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor("#134e4a")),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREEN_LIGHT]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 6),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(inv_t)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 5 — TREATMENT (2 cols: symptomatic | antibiotics)
# ══════════════════════════════════════════════════════════════════
story.append(section_table("5.  TREATMENT", bg=colors.HexColor("#7c3aed")))
story.append(Spacer(1, 0.15*cm))

sym_box = Table([
    [Paragraph("<b>Symptomatic (ALL pharyngitis)</b>", small_bold)],
    [Paragraph("• Paracetamol 500 mg–1 g PO q6h PRN", small)],
    [Paragraph("• NSAIDs (Ibuprofen 400 mg TDS with food)", small)],
    [Paragraph("• Warm saline gargles 3–4× daily", small)],
    [Paragraph("• Soft diet, warm fluids, honey in tea", small)],
    [Paragraph("• Humidification", small)],
    [Paragraph("<i>Note: Glucocorticoids NOT recommended routinely.\nMay reduce pain at 24 h but risk of sepsis, GI bleed,\nVTE within 30 days.</i>", small)],
], colWidths=[8.4*cm])
sym_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#f5f3ff")),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

abx_box = Table([
    [Paragraph("<b>Antibiotics — ONLY for confirmed/likely GABHS</b>", small_bold)],
    [Paragraph("<b>1st line:</b>  Penicillin V 500 mg PO BD–TDS × 10 days", small)],
    [Paragraph("<b>Children:</b>  Amoxicillin 50 mg/kg/day (palatable syrup)", small)],
    [Paragraph("<b>Mild PCN allergy:</b>  Cephalexin or Cefadroxil × 10 days", small)],
    [Paragraph("<b>Severe PCN allergy:</b>  Erythromycin / Clarithromycin / Clindamycin", small)],
    [Paragraph(" ", small)],
    [Paragraph("⚠  Complete full 7–10 day course even if symptoms\nresolve earlier. Shorter courses are less effective.", red_alert)],
], colWidths=[9.0*cm])
abx_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#fdf4ff")),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

tx_combined = Table([[sym_box, abx_box]], colWidths=[8.6*cm, 9.0*cm])
tx_combined.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0),
    ('RIGHTPADDING', (0,0), (-1,-1), 0),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
]))
story.append(tx_combined)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 6 — RED FLAGS + COMPLICATIONS (2 cols)
# ══════════════════════════════════════════════════════════════════
story.append(section_table("6.  RED FLAGS & COMPLICATIONS", bg=colors.HexColor("#be123c")))
story.append(Spacer(1, 0.15*cm))

red_flags_box = Table([
    [Paragraph("<b>🚨 Red Flags — Refer/Act Immediately</b>", small_bold)],
    [Paragraph("• Stridor or respiratory distress", small)],
    [Paragraph("• Drooling / inability to swallow (Epiglottitis / PTA)", small)],
    [Paragraph("• 'Hot potato' muffled voice → Peritonsillar Abscess", small)],
    [Paragraph("• Neck swelling beyond lymphadenopathy", small)],
    [Paragraph("• Shaking chills / rigors (bacteraemia)", small)],
    [Paragraph("• Symptoms not improving after 5 days", small)],
    [Paragraph("• Unilateral tonsillar enlargement (malignancy?)", small)],
    [Paragraph("• Trismus (difficulty opening mouth)", small)],
], colWidths=[8.4*cm])
red_flags_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), RED_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

comp_box = Table([
    [Paragraph("<b>Complications of Strep Pharyngitis</b>", small_bold)],
    [Paragraph("<b>Suppurative:</b>", small_bold)],
    [Paragraph("• Peritonsillar abscess (Quinsy)", small)],
    [Paragraph("• Retropharyngeal abscess", small)],
    [Paragraph("• Otitis media", small)],
    [Paragraph("• Sinusitis", small)],
    [Paragraph("<b>Non-suppurative:</b>", small_bold)],
    [Paragraph("• Acute Rheumatic Fever (ARF) → treat to PREVENT", small)],
    [Paragraph("• Post-streptococcal GN", small)],
    [Paragraph("• Scarlet fever", small)],
], colWidths=[9.0*cm])
comp_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#fff1f2")),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

rf_combined = Table([[red_flags_box, comp_box]], colWidths=[8.6*cm, 9.0*cm])
rf_combined.setStyle(TableStyle([
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0),
    ('RIGHTPADDING', (0,0), (-1,-1), 0),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
]))
story.append(rf_combined)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# SECTION 7 — SPECIAL SCENARIOS
# ══════════════════════════════════════════════════════════════════
story.append(section_table("7.  SPECIAL SCENARIOS", bg=colors.HexColor("#0369a1")))
story.append(Spacer(1, 0.15*cm))

sp_data = [
    [Paragraph("<b>Scenario</b>", small_bold), Paragraph("<b>Key Clues</b>", small_bold), Paragraph("<b>Action</b>", small_bold)],
    [Paragraph("Infectious Mono (EBV)", small),
     Paragraph("Young adult, posterior cervical LAP, splenomegaly, petechiae on palate, atypical lymphocytes", small),
     Paragraph("Monospot + CBC. No amoxicillin (causes rash). No contact sports (spleen rupture risk).", small)],
    [Paragraph("Peritonsillar Abscess", small),
     Paragraph("Unilateral bulge, uvula deviation, muffled 'hot potato' voice, trismus", small),
     Paragraph("ENT referral for I&D. IV antibiotics. Admit.", small)],
    [Paragraph("Diphtheria", small),
     Paragraph("Grey pseudomembrane, bull neck, unvaccinated / incomplete vaccines, sweet-smelling breath", small),
     Paragraph("Antitoxin + Penicillin/Erythromycin. Isolate. Notify.", small)],
    [Paragraph("Gonococcal", small),
     Paragraph("STI history, mild or no symptoms, exudative pharyngitis", small),
     Paragraph("Throat swab GC culture. Ceftriaxone 500 mg IM single dose.", small)],
    [Paragraph("History of ARF", small),
     Paragraph("Any pharyngitis in a patient with prior ARF", small),
     Paragraph("Lower threshold to treat empirically for GABHS. Long-term penicillin prophylaxis.", small)],
]
sp_t = Table(sp_data, colWidths=[3.8*cm, 7.0*cm, 6.8*cm])
sp_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor("#075985")),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_BLUE]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 6),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(sp_t)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# FOOTER
# ══════════════════════════════════════════════════════════════════
story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_LINE))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
    "References: Harrison's Principles of Internal Medicine 22E (2025) · Symptom to Diagnosis 4E · "
    "Scott-Brown's ORL Head & Neck Surgery · Textbook of Family Medicine 9E  |  "
    "Compiled by Orris AI · July 2026  |  For educational use only — always apply clinical judgment.",
    footnote
))

# ── Build ──────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {output_path}")
Running Command

cd /home/daytona/workspace/pharyngitis-guide && python create_guide.py 2>&1

Running Command

ls -lh /home/daytona/workspace/pharyngitis-guide/

Your Pharyngitis Quick Reference Guide is ready! Here's what's included in the single-page PDF:

Pharyngitis Quick Reference

PDF Document · PDF


The guide covers 7 sections on one A4 page:
  1. Definition & Epidemiology - frequency, high-risk groups, seasonality
  2. Differential Diagnosis Table - 10 pathogens with frequency and key clinical clues
  3. Centor Score - criteria + score-to-action table (highlighted for score 4)
  4. Investigations - when to order rapid strep test, mono workup, GC culture, HIV
  5. Treatment - symptomatic for all + antibiotic choice chart (Penicillin V first line, alternatives for allergy)
  6. Red Flags & Complications - when to refer, suppurative vs non-suppurative complications
  7. Special Scenarios - EBV mono, peritonsillar abscess, diphtheria, gonococcal, prior ARF patient
Print it out and keep it in your white coat pocket! Ask me for any other topic guides.

Create a guide for another common OPD complaint (fever, cough, abdomen pain, jaundice)

Asking for Preferences

Which complaint should I create the guide for?

Great choice - abdominal pain is one of the most complex OPD presentations. Let me pull textbook content first, then build the PDF.
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Good - I have solid content. Now building the PDF.
Writing File

~/pharyngitis-guide/abdominal_pain_guide.py

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

# ── Color palette ──────────────────────────────────────────────────
DARK_TEAL   = colors.HexColor("#0f4c5c")
MED_TEAL    = colors.HexColor("#0e7490")
LIGHT_TEAL  = colors.HexColor("#cffafe")
ORANGE      = colors.HexColor("#c2410c")
ORANGE_LIGHT= colors.HexColor("#fff7ed")
GREEN       = colors.HexColor("#166534")
GREEN_LIGHT = colors.HexColor("#dcfce7")
RED         = colors.HexColor("#991b1b")
RED_LIGHT   = colors.HexColor("#fee2e2")
PURPLE      = colors.HexColor("#6d28d9")
PURPLE_LIGHT= colors.HexColor("#ede9fe")
YELLOW      = colors.HexColor("#92400e")
YELLOW_LIGHT= colors.HexColor("#fef3c7")
GREY_BG     = colors.HexColor("#f1f5f9")
GREY_LINE   = colors.HexColor("#cbd5e1")
WHITE       = colors.white
BLACK       = colors.HexColor("#1e293b")
DARK_BLUE   = colors.HexColor("#1e3a5f")
MED_BLUE    = colors.HexColor("#2563a8")
LIGHT_BLUE  = colors.HexColor("#dbeafe")

# ── Styles ─────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def ms(name, parent='Normal', **kw):
    return ParagraphStyle(name, parent=styles[parent], **kw)

title_s   = ms('T', fontSize=22, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=3)
subtitle_s= ms('S', fontSize=10, textColor=colors.HexColor("#a5f3fc"), fontName='Helvetica', alignment=TA_CENTER)
sec_s     = ms('H', fontSize=11, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_LEFT, spaceBefore=1, spaceAfter=1)
body      = ms('B', fontSize=8.5, textColor=BLACK, fontName='Helvetica', leading=13)
body_b    = ms('BB', fontSize=8.5, textColor=BLACK, fontName='Helvetica-Bold', leading=13)
small     = ms('Sm', fontSize=8, textColor=BLACK, fontName='Helvetica', leading=12)
small_b   = ms('SmB', fontSize=8, textColor=BLACK, fontName='Helvetica-Bold', leading=12)
red_s     = ms('R', fontSize=8, textColor=RED, fontName='Helvetica-Bold', leading=12)
foot_s    = ms('F', fontSize=7, textColor=colors.HexColor("#64748b"), fontName='Helvetica-Oblique', alignment=TA_CENTER, leading=10)

def sec_hdr(text, bg=MED_TEAL):
    t = Table([[Paragraph(text, sec_s)]], colWidths=[17.6*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 9),
    ]))
    return t

# ── Document ───────────────────────────────────────────────────────
out = "/home/daytona/workspace/pharyngitis-guide/AbdominalPain_Quick_Reference.pdf"
doc = SimpleDocTemplate(out, pagesize=A4,
    leftMargin=1.2*cm, rightMargin=1.2*cm,
    topMargin=1.0*cm, bottomMargin=1.2*cm,
    title="Abdominal Pain Quick Reference Guide")

story = []

# ── HEADER ─────────────────────────────────────────────────────────
hdr = Table([
    [Paragraph("ABDOMINAL PAIN", title_s)],
    [Paragraph("Quick Reference Guide for MBBS Interns  |  General OPD / Emergency", subtitle_s)],
    [Paragraph("Sources: Yamada's Gastroenterology 7E · Harrison's 22E · Rosen's Emergency Medicine · Bailey & Love 28E · Textbook of Family Medicine 9E", foot_s)],
], colWidths=[17.6*cm])
hdr.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), DARK_TEAL),
    ('TOPPADDING', (0,0), (-1,-1), 7),
    ('BOTTOMPADDING', (0,0), (-1,-1), 7),
    ('LEFTPADDING', (0,0), (-1,-1), 10),
]))
story.append(hdr)
story.append(Spacer(1, 0.25*cm))

# ══════════════════════════════════════════════════════════════════
# 1. HISTORY — SOCRATES
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("1.  HISTORY — USE SOCRATES + KEY QUESTIONS", bg=DARK_TEAL))
story.append(Spacer(1, 0.12*cm))

soc_data = [
    [Paragraph("<b>S</b>ite", small_b), Paragraph("Where exactly? Point with one finger. Quadrant / diffuse?", small),
     Paragraph("<b>A</b>ssociated Sx", small_b), Paragraph("N/V, fever, jaundice, change in bowel/urinary habits, menstrual hx", small)],
    [Paragraph("<b>O</b>nset", small_b), Paragraph("Sudden (perforation/torsion/AAA) vs gradual (IBD/PUD/cancer)", small),
     Paragraph("<b>R</b>elieving", small_b), Paragraph("Food (PUD improves/worsens), posture, defecation (IBS), antacids", small)],
    [Paragraph("<b>C</b>haracter", small_b), Paragraph("Colicky = hollow viscus; Burning = PUD; Tearing = AAA; Dull/aching = solid organ", small),
     Paragraph("<b>T</b>iming", small_b), Paragraph("Constant vs intermittent; post-meal (mesenteric ischaemia); nocturnal waking (PUD)", small)],
    [Paragraph("<b>R</b>adiation", small_b), Paragraph("Shoulder tip (diaphragm/liver/spleen); Back (pancreatitis/AAA); Groin (ureteric colic)", small),
     Paragraph("<b>S</b>everity", small_b), Paragraph("Score 0–10. Severity ≠ seriousness (peritonitis may be deceptively mild in elderly)", small)],
    [Paragraph("<b>E</b>xacerbating", small_b), Paragraph("Movement (peritonitis); eating (mesenteric ischaemia/PUD); inspiration (cholecystitis)", small),
     Paragraph("<b>Key extras</b>", small_b), Paragraph("Last menstrual period (women); recent travel; medications (NSAIDs, steroids, antibiotics)", small)],
]
soc_t = Table(soc_data, colWidths=[2.4*cm, 6.4*cm, 2.6*cm, 6.2*cm])
soc_t.setStyle(TableStyle([
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [WHITE, GREY_BG]),
    ('BACKGROUND', (0,0), (0,-1), LIGHT_TEAL),
    ('BACKGROUND', (2,0), (2,-1), LIGHT_TEAL),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(soc_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 2. DDx BY QUADRANT
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("2.  DIFFERENTIAL DIAGNOSIS BY QUADRANT / REGION", bg=MED_TEAL))
story.append(Spacer(1, 0.12*cm))

ddx_header = [
    Paragraph("<b>Region</b>", small_b),
    Paragraph("<b>Common Causes</b>", small_b),
    Paragraph("<b>Don't Miss</b>", small_b),
]

ddx_rows = [
    [Paragraph("RUQ", small_b),
     Paragraph("Acute cholecystitis, cholelithiasis, hepatitis (A/B/E), PUD, GERD, right lower lobe pneumonia, liver abscess, Fitz-Hugh-Curtis syndrome", small),
     Paragraph("Inferior wall MI, ruptured liver abscess, cholangitis (Charcot's triad)", small)],

    [Paragraph("LUQ", small_b),
     Paragraph("Gastritis, PUD (gastric ulcer), splenic pathology (splenomegaly, infarct), pancreatitis tail, left lower lobe pneumonia", small),
     Paragraph("Splenic rupture (trauma/mono), aortic dissection", small)],

    [Paragraph("Epigastric", small_b),
     Paragraph("PUD, GERD, gastritis, pancreatitis, early appendicitis, MI (inferior wall)", small),
     Paragraph("Leaking AAA, perforated peptic ulcer, acute MI — ECG mandatory!", small)],

    [Paragraph("RLQ", small_b),
     Paragraph("Acute appendicitis, Meckel's diverticulitis, Crohn's disease (terminal ileum), mesenteric lymphadenitis, ectopic pregnancy (female), ovarian cyst/torsion (female), renal/ureteral calculi", small),
     Paragraph("Ectopic pregnancy (must exclude in all females of reproductive age), appendicitis in retrocecal position", small)],

    [Paragraph("LLQ", small_b),
     Paragraph("Diverticulitis (sigmoid), constipation, IBS, IBD (ulcerative colitis), renal/ureteral calculi, ectopic pregnancy, ovarian cyst/torsion", small),
     Paragraph("Sigmoid volvulus, perforated diverticulitis", small)],

    [Paragraph("Central / Periumbilical", small_b),
     Paragraph("Early appendicitis (migrates to RLQ), small bowel obstruction, mesenteric ischaemia, aortic aneurysm, IBD", small),
     Paragraph("Mesenteric ischaemia (pain out of proportion to findings), AAA", small)],

    [Paragraph("Hypogastric / Suprapubic", small_b),
     Paragraph("UTI/cystitis, PID, ectopic pregnancy, ovarian pathology, constipation, urinary retention, IBS", small),
     Paragraph("Ectopic pregnancy, ovarian torsion, urinary retention in elderly males", small)],

    [Paragraph("Diffuse / Generalised", small_b),
     Paragraph("Peritonitis (any cause), gastroenteritis, IBD, bowel obstruction, DKA, constipation, IBS", small),
     Paragraph("Perforated viscus, mesenteric ischaemia, ruptured AAA, DKA", small)],
]

ddx_data = [ddx_header] + ddx_rows
ddx_t = Table(ddx_data, colWidths=[2.8*cm, 8.4*cm, 6.4*cm])
ddx_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), DARK_TEAL),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREY_BG]),
    ('BACKGROUND', (2,1), (2,-1), RED_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(ddx_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 3. CLINICAL SIGNS TABLE
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("3.  KEY CLINICAL SIGNS & WHAT THEY MEAN", bg=colors.HexColor("#1d4ed8")))
story.append(Spacer(1, 0.12*cm))

signs_data = [
    [Paragraph("<b>Sign</b>", small_b), Paragraph("<b>How to Elicit</b>", small_b), Paragraph("<b>Positive if...</b>", small_b), Paragraph("<b>Suggests</b>", small_b)],
    [Paragraph("Murphy's Sign", small), Paragraph("Deep palpation RUQ + ask patient to inspire deeply", small), Paragraph("Pain arrests inspiration", small), Paragraph("Acute cholecystitis (Sens 65%, Spec 87%)", small)],
    [Paragraph("Rovsing's Sign", small), Paragraph("Press/release LLQ", small), Paragraph("Pain felt in RLQ", small), Paragraph("Appendicitis (indirect rebound)", small)],
    [Paragraph("Psoas Sign", small), Paragraph("Patient lifts right thigh vs resistance (supine)", small), Paragraph("RLQ pain increases", small), Paragraph("Retrocecal appendicitis, psoas abscess", small)],
    [Paragraph("Obturator Sign", small), Paragraph("Flex R hip+knee 90°, rotate internally/externally", small), Paragraph("Pain reproduced", small), Paragraph("Appendicitis, PID, pelvic abscess", small)],
    [Paragraph("Guarding / Rigidity", small), Paragraph("Gentle palpation; assess muscle tone during respiration", small), Paragraph("Board-like abdomen", small), Paragraph("Peritonitis (involuntary > voluntary)", small)],
    [Paragraph("CVAT", small), Paragraph("Firm fist percussion over costovertebral angle", small), Paragraph("Tenderness elicited", small), Paragraph("Pyelonephritis, renal calculus", small)],
    [Paragraph("Cullen's / Grey Turner's", small), Paragraph("Periumbilical (Cullen) or flank (Grey Turner) discolouration", small), Paragraph("Bruising visible", small), Paragraph("Retroperitoneal bleed, severe pancreatitis", small)],
]
signs_t = Table(signs_data, colWidths=[3.2*cm, 5.0*cm, 4.0*cm, 5.4*cm])
signs_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor("#1e3a8a")),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_BLUE]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(signs_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 4. INVESTIGATIONS + 5. RED FLAGS side by side
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("4.  INVESTIGATIONS                                                                5.  RED FLAGS", bg=colors.HexColor("#6d28d9")))
story.append(Spacer(1, 0.12*cm))

inv_box = Table([
    [Paragraph("<b>Basic workup (most patients)</b>", small_b)],
    [Paragraph("• CBC — WBC↑ (infection/inflammation), Hb↓ (bleed/perforation)", small)],
    [Paragraph("• CRP / ESR — infection, IBD, abscess", small)],
    [Paragraph("• LFTs — hepatitis, biliary, pancreatitis (AST/ALT)", small)],
    [Paragraph("• Serum amylase/lipase — pancreatitis (lipase more specific)", small)],
    [Paragraph("• RFTs + electrolytes — renal colic, obstruction", small)],
    [Paragraph("• Urine routine / microscopy — UTI, renal calculi, DKA", small)],
    [Paragraph("• Urine β-hCG — all females of reproductive age (MANDATORY)", small_b)],
    [Paragraph(" ", small)],
    [Paragraph("<b>Targeted investigations</b>", small_b)],
    [Paragraph("• USG abdomen — biliary, liver, kidney, gynaecological, AAA", small)],
    [Paragraph("• CECT abdomen/pelvis — appendicitis, pancreatitis, malignancy", small)],
    [Paragraph("• ECG — mandatory in all epigastric pain (rule out MI)", small_b)],
    [Paragraph("• Stool exam — dysentery, parasite, occult blood", small)],
    [Paragraph("• Blood culture — if febrile (suspect sepsis/peritonitis)", small)],
], colWidths=[8.4*cm])
inv_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), PURPLE_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
]))

rf_box = Table([
    [Paragraph("<b>🚨 Red Flags — Urgent / Surgical Referral</b>", red_s)],
    [Paragraph("• Sudden onset severe pain (perforation, AAA, torsion)", small)],
    [Paragraph("• Hemodynamic instability — BP↓, HR↑, sweating", small)],
    [Paragraph("• Peritonism — guarding, rigidity, rebound tenderness", small)],
    [Paragraph("• Positive pregnancy test + pain (ectopic pregnancy)", small)],
    [Paragraph("• Abdominal distension + absolute constipation (obstruction)", small)],
    [Paragraph("• Pulsatile abdominal mass (AAA)", small)],
    [Paragraph("• Fever >38.5°C + RLQ pain + Rovsing/Psoas/Obturator +ve (appendicitis)", small)],
    [Paragraph("• Jaundice + fever + RUQ pain = Charcot's triad → Cholangitis", small)],
    [Paragraph("• Pain out of proportion to physical findings → mesenteric ischaemia", small)],
    [Paragraph("• Blood PR (fresh or melena) → GI bleed", small)],
    [Paragraph("• Age >60 with new-onset abdominal pain — always take seriously", small)],
    [Paragraph(" ", small)],
    [Paragraph("<b>Populations requiring extra caution:</b>", small_b)],
    [Paragraph("Elderly | Pregnant | Immunocompromised | Post-bariatric surgery | Known vascular disease", small)],
], colWidths=[9.0*cm])
rf_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), RED_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
]))

inv_rf = Table([[inv_box, rf_box]], colWidths=[8.6*cm, 9.0*cm])
inv_rf.setStyle(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),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
]))
story.append(inv_rf)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 6. COMMON CONDITIONS AT A GLANCE
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("6.  COMMON CONDITIONS — QUICK RECOGNITION & INITIAL MANAGEMENT", bg=colors.HexColor("#065f46")))
story.append(Spacer(1, 0.12*cm))

cond_data = [
    [Paragraph("<b>Condition</b>", small_b), Paragraph("<b>Classic Presentation</b>", small_b), Paragraph("<b>Key Test</b>", small_b), Paragraph("<b>Initial Management</b>", small_b)],

    [Paragraph("Acute Appendicitis", small),
     Paragraph("Periumbilical pain → RLQ, N/V, low-grade fever, RLQ tenderness, Rovsing +ve", small),
     Paragraph("USG / CECT abdomen; WBC↑", small),
     Paragraph("NBM, IV fluids, analgesia, surgical referral", small)],

    [Paragraph("Acute Cholecystitis", small),
     Paragraph("RUQ colicky pain post-fatty meal, N/V, Murphy's sign +ve, fever", small),
     Paragraph("USG abdomen (gallstones + wall thickening)", small),
     Paragraph("NBM, analgesia, IV fluids, antibiotics, surgical consult", small)],

    [Paragraph("Acute Pancreatitis", small),
     Paragraph("Severe epigastric pain radiating to back, N/V, relieved by leaning forward; H/O alcohol or gallstones", small),
     Paragraph("Serum lipase >3× ULN; CECT for severity (Balthazar score)", small),
     Paragraph("NBM, aggressive IV fluids, analgesia, monitor vitals. No food until pain-free.", small)],

    [Paragraph("Peptic Ulcer / Perforation", small),
     Paragraph("Epigastric burning; H/O NSAIDs/H.pylori; Perforation: sudden board-like rigidity", small),
     Paragraph("Erect CXR (free air under diaphragm); OGD", small),
     Paragraph("Perforation: emergency surgery. PUD: PPI, H.pylori eradication (Triple therapy)", small)],

    [Paragraph("Intestinal Obstruction", small),
     Paragraph("Colicky central pain, distension, absolute constipation, bilious vomiting, visible peristalsis", small),
     Paragraph("Plain X-ray abdomen erect + supine (air-fluid levels, dilated loops)", small),
     Paragraph("NGT suction, IV fluids, NBM, Foley catheter, surgical referral", small)],

    [Paragraph("Renal / Ureteric Colic", small),
     Paragraph("Severe loin-to-groin colicky pain, hematuria, restlessness (can't sit still), N/V", small),
     Paragraph("Urine microscopy; NCCT KUB (best); USG", small),
     Paragraph("Diclofenac 75 mg IM or IV, adequate hydration, sieve urine, urology referral if stone >5 mm", small)],

    [Paragraph("Ectopic Pregnancy", small),
     Paragraph("Amenorrhoea + LLQ/RLQ pain + vaginal bleeding; haemodynamic instability possible", small),
     Paragraph("Urine/serum β-hCG; Transvaginal USG", small),
     Paragraph("EMERGENCY — IV access, fluid resuscitation, O2, urgent gynae referral / OT", small)],

    [Paragraph("PID / Salpingitis", small),
     Paragraph("Young female; bilateral lower abdominal pain, cervical motion tenderness, vaginal discharge, fever", small),
     Paragraph("Pelvic exam, HVS, HCG (rule out ectopic)", small),
     Paragraph("Doxycycline + Metronidazole ± Ceftriaxone; outpatient if mild", small)],

    [Paragraph("Acute Gastroenteritis", small),
     Paragraph("N/V + diarrhoea ± cramping, often diffuse tenderness, fever, recent food hx", small),
     Paragraph("Stool exam, culture; CBC if severe", small),
     Paragraph("Oral/IV rehydration; antibiotics only if bacterial (Ciprofloxacin for severe shigella/salmonella)", small)],
]

cond_t = Table(cond_data, colWidths=[3.0*cm, 5.5*cm, 3.8*cm, 5.3*cm])
cond_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor("#014737")),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, GREEN_LIGHT]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    # Highlight ectopic row (index 7) as high danger
    ('BACKGROUND', (0,7), (-1,7), colors.HexColor("#fde68a")),
]))
story.append(cond_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 7. ANALGESIA NOTE + BOTTOM TIPS
# ══════════════════════════════════════════════════════════════════
story.append(sec_hdr("7.  ANALGESIA & PRACTICAL TIPS", bg=colors.HexColor("#b45309")))
story.append(Spacer(1, 0.12*cm))

tips_data = [
    [Paragraph("<b>On analgesia:</b> Studies confirm that giving analgesics does NOT mask diagnosis or increase diagnostic errors. Do not withhold pain relief while evaluating. Use IV morphine 0.1 mg/kg titrated or IV paracetamol.", small),
     Paragraph("<b>On referral:</b> Immediate surgical referral if: peritonism, haemodynamic instability, suspected perforation, obstruction, ectopic pregnancy, or any patient where diagnosis is unclear after initial assessment.", small)],
    [Paragraph("<b>Nonspecific Abdominal Pain (NSAP):</b> ~40% of acute abdominal pain admissions. Diagnosis of exclusion. Active observation with serial examinations is acceptable. Early laparoscopy improves diagnosis rate but not clinical outcomes.", small),
     Paragraph("<b>Elderly caution:</b> Reduced peritoneal reaction — examination findings underestimate severity. Higher threshold for admission. Common causes missed: mesenteric ischaemia, aortic aneurysm, acute MI (atypical presentation).", small)],
]
tips_t = Table(tips_data, colWidths=[8.6*cm, 9.0*cm])
tips_t.setStyle(TableStyle([
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [YELLOW_LIGHT, colors.HexColor("#fff7ed")]),
    ('TOPPADDING', (0,0), (-1,-1), 5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
story.append(tips_t)
story.append(Spacer(1, 0.15*cm))

# ── FOOTER ─────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_LINE))
story.append(Spacer(1, 0.08*cm))
story.append(Paragraph(
    "References: Yamada's Textbook of Gastroenterology 7E · Harrison's Principles of Internal Medicine 22E (2025) · "
    "Rosen's Emergency Medicine · Bailey & Love's Short Practice of Surgery 28E · Textbook of Family Medicine 9E  |  "
    "Compiled by Orris AI · July 2026  |  For educational use only — always apply clinical judgment.",
    foot_s
))

doc.build(story)
print(f"PDF created: {out}")
Running Command

cd /home/daytona/workspace/pharyngitis-guide && python abdominal_pain_guide.py 2>&1

Running Command

ls -lh /home/daytona/workspace/pharyngitis-guide/

Your Abdominal Pain Quick Reference Guide is ready!

AbdominalPain Quick Reference

PDF Document · PDF


What's inside — 7 sections on one A4 page:
  1. History (SOCRATES) - Full structured history framework with abdominal-specific extras (LMP, NSAIDs, travel)
  2. DDx by Quadrant - All 8 regions (RUQ, LUQ, RLQ, LLQ, Epigastric, Central, Hypogastric, Diffuse) with common causes + "Don't Miss" column
  3. Clinical Signs Table - Murphy's, Rovsing, Psoas, Obturator, Guarding, CVAT, Cullen's/Grey Turner's - how to elicit + what each means
  4. Investigations - Tiered: basic workup → targeted (with reminders like β-hCG mandatory in all women, ECG for epigastric pain)
  5. Red Flags - 11 urgent findings + high-risk populations
  6. Common Conditions at a Glance - 9 conditions (appendicitis, cholecystitis, pancreatitis, PUD, obstruction, renal colic, ectopic pregnancy, PID, gastroenteritis) with classic presentation, key test, and initial management
  7. Analgesia & Practical Tips - Key reminder that analgesics don't mask diagnosis + NSAP approach + elderly caution

Want guides for the other complaints too - Fever, Cough, or Jaundice?

Cough

Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Finding Sources
Reading File
Finding Sources
Good content collected. Now building the PDF.
Writing File

~/pharyngitis-guide/cough_guide.py

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

# ── Palette ──────────────────────────────────────────────────────
DARK_GREEN   = colors.HexColor("#14532d")
MED_GREEN    = colors.HexColor("#16a34a")
LIGHT_GREEN  = colors.HexColor("#dcfce7")
TEAL_DARK    = colors.HexColor("#0f4c5c")
TEAL         = colors.HexColor("#0e7490")
TEAL_LIGHT   = colors.HexColor("#cffafe")
BLUE_DARK    = colors.HexColor("#1e3a8a")
BLUE         = colors.HexColor("#2563eb")
BLUE_LIGHT   = colors.HexColor("#dbeafe")
ORANGE_DARK  = colors.HexColor("#9a3412")
ORANGE       = colors.HexColor("#c2410c")
ORANGE_LIGHT = colors.HexColor("#fff7ed")
RED          = colors.HexColor("#991b1b")
RED_LIGHT    = colors.HexColor("#fee2e2")
PURPLE_DARK  = colors.HexColor("#4c1d95")
PURPLE       = colors.HexColor("#7c3aed")
PURPLE_LIGHT = colors.HexColor("#ede9fe")
YELLOW_DARK  = colors.HexColor("#78350f")
YELLOW_LIGHT = colors.HexColor("#fef3c7")
GREY_BG      = colors.HexColor("#f1f5f9")
GREY_LINE    = colors.HexColor("#cbd5e1")
WHITE        = colors.white
BLACK        = colors.HexColor("#1e293b")

styles = getSampleStyleSheet()

def ms(name, **kw):
    return ParagraphStyle(name, parent=styles['Normal'], **kw)

title_s   = ms('T', fontSize=22, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=3)
sub_s     = ms('S', fontSize=10, textColor=colors.HexColor("#bbf7d0"), fontName='Helvetica', alignment=TA_CENTER)
sec_s     = ms('H', fontSize=11, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_LEFT, spaceBefore=1, spaceAfter=1)
small     = ms('Sm', fontSize=8, textColor=BLACK, fontName='Helvetica', leading=12)
small_b   = ms('SmB', fontSize=8, textColor=BLACK, fontName='Helvetica-Bold', leading=12)
red_s     = ms('R', fontSize=8, textColor=RED, fontName='Helvetica-Bold', leading=12)
orange_s  = ms('O', fontSize=8, textColor=ORANGE, fontName='Helvetica-Bold', leading=12)
foot_s    = ms('F', fontSize=7, textColor=colors.HexColor("#64748b"), fontName='Helvetica-Oblique', alignment=TA_CENTER, leading=10)

def shdr(text, bg=TEAL_DARK):
    t = Table([[Paragraph(text, sec_s)]], colWidths=[17.6*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 9),
    ]))
    return t

out = "/home/daytona/workspace/pharyngitis-guide/Cough_Quick_Reference.pdf"
doc = SimpleDocTemplate(out, pagesize=A4,
    leftMargin=1.2*cm, rightMargin=1.2*cm,
    topMargin=1.0*cm, bottomMargin=1.2*cm,
    title="Cough Quick Reference Guide")

story = []

# ── HEADER ────────────────────────────────────────────────────────
hdr = Table([
    [Paragraph("COUGH", title_s)],
    [Paragraph("Quick Reference Guide for MBBS Interns  |  General OPD / Respiratory Clinic", sub_s)],
    [Paragraph("Sources: Murray & Nadel's Respiratory Medicine 7E · Textbook of Family Medicine 9E · Harrison's 22E · Rosen's Emergency Medicine", foot_s)],
], colWidths=[17.6*cm])
hdr.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), DARK_GREEN),
    ('TOPPADDING', (0,0), (-1,-1), 7),
    ('BOTTOMPADDING', (0,0), (-1,-1), 7),
    ('LEFTPADDING', (0,0), (-1,-1), 10),
]))
story.append(hdr)
story.append(Spacer(1, 0.22*cm))

# ══════════════════════════════════════════════════════════════════
# 1. CLASSIFICATION BY DURATION
# ══════════════════════════════════════════════════════════════════
story.append(shdr("1.  CLASSIFY FIRST — DURATION OF COUGH", bg=DARK_GREEN))
story.append(Spacer(1, 0.12*cm))

dur_data = [
    [Paragraph("<b>Type</b>", small_b), Paragraph("<b>Duration</b>", small_b), Paragraph("<b>Most Common Causes</b>", small_b), Paragraph("<b>Key Action</b>", small_b)],
    [Paragraph("ACUTE", small_b),
     Paragraph("<3 weeks", small),
     Paragraph("Viral URTI (most common), acute bronchitis, sinusitis, pneumonia, exacerbation of asthma/COPD, foreign body (children)", small),
     Paragraph("Treat conservatively. No antibiotics unless bacterial infection confirmed. CXR if fever, hemoptysis, or SOB.", small)],
    [Paragraph("SUBACUTE", small_b),
     Paragraph("3–8 weeks", small),
     Paragraph("Post-infectious cough (most common), pertussis (Bordetella), UACS/postnasal drip, asthma exacerbation", small),
     Paragraph("Consider pertussis especially if whooping + post-tussive vomiting. Macrolide if pertussis confirmed.", small)],
    [Paragraph("CHRONIC", small_b),
     Paragraph(">8 weeks", small),
     Paragraph("Non-smoker: Postnasal drip, Asthma, GERD, ACE inhibitor (PAGA mnemonic). Smoker: Add chronic bronchitis, lung cancer, bronchiectasis, TB", small),
     Paragraph("CXR mandatory. Spirometry. Trial of empiric therapy. ACE inhibitor? Switch to ARB.", small)],
]
dur_t = Table(dur_data, colWidths=[2.2*cm, 2.0*cm, 7.4*cm, 6.0*cm])
dur_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), DARK_GREEN),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_GREEN]),
    ('TOPPADDING', (0,0), (-1,-1), 5),
    ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('BACKGROUND', (0,3), (1,3), colors.HexColor("#fde68a")),
]))
story.append(dur_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 2. HISTORY — KEY QUESTIONS
# ══════════════════════════════════════════════════════════════════
story.append(shdr("2.  HISTORY — KEY QUESTIONS TO ASK", bg=TEAL_DARK))
story.append(Spacer(1, 0.12*cm))

hx_data = [
    [Paragraph("<b>Question</b>", small_b), Paragraph("<b>What it suggests</b>", small_b),
     Paragraph("<b>Question</b>", small_b), Paragraph("<b>What it suggests</b>", small_b)],
    [Paragraph("Productive or dry?", small),
     Paragraph("<b>Dry:</b> Asthma, GERD, ACE inhibitor, IPF, viral  |  <b>Productive:</b> Infection, bronchiectasis, TB, lung abscess", small),
     Paragraph("Nocturnal cough?", small),
     Paragraph("Asthma (classic!), GERD, postnasal drip, heart failure", small)],
    [Paragraph("Sputum colour?", small),
     Paragraph("<b>Clear/white:</b> Viral, asthma  |  <b>Yellow/green:</b> Bacterial  |  <b>Rusty:</b> Pneumococcal pneumonia  |  <b>Pink frothy:</b> Pulmonary oedema", small),
     Paragraph("Post-tussive vomiting?", small),
     Paragraph("Pertussis (whooping cough) — especially with paroxysmal nature", small)],
    [Paragraph("Haemoptysis?", small),
     Paragraph("TB, bronchiectasis, lung carcinoma, pulmonary embolism, mitral stenosis — NEVER ignore!", small),
     Paragraph("Wheezing / SOB?", small),
     Paragraph("Asthma, COPD, bronchitis, cardiac failure (cardiac asthma)", small)],
    [Paragraph("Heartburn / regurgitation?", small),
     Paragraph("GERD-related cough — often no GI symptoms despite GERD being the cause", small),
     Paragraph("Smoking history?", small),
     Paragraph("Chronic bronchitis, lung cancer, COPD. Pack-year history essential.", small)],
    [Paragraph("ACE inhibitor use?", small),
     Paragraph("Dry persistent cough — up to 15% of patients on ACEi. Switch to ARB.", small),
     Paragraph("TB contacts / travel?", small),
     Paragraph("TB — ask about weight loss, night sweats, fever. Mandatory in India.", small)],
    [Paragraph("Occupation / exposure?", small),
     Paragraph("Coal/grain dust → pneumoconiosis; birds → hypersensitivity pneumonitis; asbestos → mesothelioma", small),
     Paragraph("Child with sudden onset?", small),
     Paragraph("Foreign body aspiration until proven otherwise", small)],
]
hx_t = Table(hx_data, colWidths=[3.0*cm, 5.8*cm, 3.0*cm, 5.8*cm])
hx_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), TEAL_DARK),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, TEAL_LIGHT]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(hx_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 3. COMMON CAUSES WITH RECOGNITION + MANAGEMENT
# ══════════════════════════════════════════════════════════════════
story.append(shdr("3.  COMMON CAUSES — RECOGNITION & MANAGEMENT", bg=BLUE_DARK))
story.append(Spacer(1, 0.12*cm))

cond_data = [
    [Paragraph("<b>Condition</b>", small_b), Paragraph("<b>Classic Clues</b>", small_b), Paragraph("<b>Test</b>", small_b), Paragraph("<b>Management</b>", small_b)],
    [Paragraph("Viral URTI / Acute Bronchitis", small),
     Paragraph("Acute cough, runny nose, sore throat, no fever >38°C, self-limiting <3 weeks", small),
     Paragraph("Clinical diagnosis. No investigations needed routinely.", small),
     Paragraph("Supportive: fluids, honey, steam inhalation. No antibiotics. Paracetamol for fever.", small)],
    [Paragraph("Pneumonia", small),
     Paragraph("Fever, productive cough, tachypnoea, pleuritic chest pain, dullness on percussion, bronchial breath sounds", small),
     Paragraph("CXR (consolidation); CBC (WBC↑); sputum culture; SpO2", small),
     Paragraph("CAP: Amoxicillin 500 mg TDS × 5–7 days (outpatient). Severe/atypical: Add Azithromycin/Doxycycline. Admit if CURB-65 ≥2.", small)],
    [Paragraph("Asthma / Cough-variant Asthma", small),
     Paragraph("Nocturnal dry cough ± wheeze, breathlessness, reversible with bronchodilator; episodic; triggered by cold, exercise, allergens", small),
     Paragraph("Spirometry (FEV1/FVC <0.7, reversible); Peak flow variability >20%; CXR (hyperinflation)", small),
     Paragraph("Inhaled SABA (Salbutamol) for acute. Add ICS (Beclomethasone) for persistent. Trial of oral prednisolone if diagnosis unclear.", small)],
    [Paragraph("Postnasal Drip (UACS)", small),
     Paragraph("Sensation of drip at back of throat, throat clearing, cobblestoning of pharynx, often no nasal symptoms", small),
     Paragraph("Clinical. CT sinuses if recurrent sinusitis.", small),
     Paragraph("Nasal topical steroid (Fluticasone spray) + antihistamine. Ipratropium nasal spray for excessive secretions. Antibiotics if bacterial sinusitis.", small)],
    [Paragraph("GERD", small),
     Paragraph("Chronic dry cough worsened by lying down, post-meal; heartburn may be absent! Responds to PPI trial.", small),
     Paragraph("Clinical + PPI trial. OGD if refractory.", small),
     Paragraph("PPI (Omeprazole 20–40 mg OD) × 8 weeks. Elevate head of bed, avoid triggers (spicy food, coffee, alcohol, late meals).", small)],
    [Paragraph("ACE Inhibitor Cough", small),
     Paragraph("Persistent dry tickly cough starting weeks–months after ACEi initiation; no other symptoms", small),
     Paragraph("Clinical. Drug history.", small),
     Paragraph("Stop ACE inhibitor. Switch to ARB (Losartan). Cough resolves in 1–4 weeks.", small)],
    [Paragraph("Tuberculosis (TB)", small),
     Paragraph("Chronic productive cough >3 weeks, haemoptysis, evening fever, night sweats, weight loss, TB contact", small),
     Paragraph("Sputum AFB × 3 (or CBNAAT/Xpert MTB), CXR (upper lobe involvement, cavitation)", small),
     Paragraph("Refer to DOTS centre. RHEZ (Rifampicin, INH, Ethambutol, Pyrazinamide) × 2 months then RH × 4 months.", small)],
    [Paragraph("COPD (exacerbation)", small),
     Paragraph("Smoker, chronic productive cough + increased sputum volume/purulence, worsening dyspnoea", small),
     Paragraph("Spirometry (FEV1/FVC <0.7, not fully reversible); CXR; ABG if severe", small),
     Paragraph("SABD (Salbutamol + Ipratropium), systemic steroids (Prednisolone 30–40 mg × 5 days), antibiotics if purulent sputum (Amoxicillin/Doxycycline).", small)],
    [Paragraph("Bronchiectasis", small),
     Paragraph("Chronic copious mucopurulent/foul-smelling sputum, daily cough, recurrent chest infections, finger clubbing possible", small),
     Paragraph("HRCT chest (gold standard: dilated thick-walled bronchi)", small),
     Paragraph("Postural drainage/chest physiotherapy. Antibiotics for exacerbations. Inhaled LABA + ICS. Treat underlying cause.", small)],
    [Paragraph("Lung Cancer", small),
     Paragraph("Smoker >40 yrs, new or changed cough, haemoptysis, weight loss, hoarseness (recurrent laryngeal nerve), clubbing", small),
     Paragraph("CXR → CT chest (mass lesion). Bronchoscopy + biopsy.", small),
     Paragraph("Urgent oncology/pulmonology referral. Staging required before treatment.", small)],
]
cond_t = Table(cond_data, colWidths=[3.0*cm, 5.0*cm, 3.8*cm, 5.8*cm])
cond_t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), BLUE_DARK),
    ('TEXTCOLOR', (0,0), (-1,0), WHITE),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, BLUE_LIGHT]),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 5),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    # Highlight TB row (index 7) - important in India
    ('BACKGROUND', (0,7), (-1,7), colors.HexColor("#fde68a")),
    # Highlight lung cancer row (index 10)
    ('BACKGROUND', (0,10), (-1,10), RED_LIGHT),
]))
story.append(cond_t)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 4. INVESTIGATIONS  +  5. RED FLAGS  (side by side)
# ══════════════════════════════════════════════════════════════════
story.append(shdr("4.  INVESTIGATIONS                                                               5.  RED FLAGS", bg=PURPLE_DARK))
story.append(Spacer(1, 0.12*cm))

inv_box = Table([
    [Paragraph("<b>All patients with cough >3 weeks:</b>", small_b)],
    [Paragraph("• CXR PA view — MOST valuable single test", small_b)],
    [Paragraph("• CBC — eosinophilia (asthma), WBC↑ (infection), anaemia (malignancy)", small)],
    [Paragraph("• SpO2 — assess respiratory compromise", small)],
    [Paragraph(" ", small)],
    [Paragraph("<b>Targeted by suspected cause:</b>", small_b)],
    [Paragraph("• Sputum AFB × 3 / CBNAAT — if TB suspected (>3 wks cough in India)", small)],
    [Paragraph("• Spirometry — if asthma/COPD suspected (reversibility test)", small)],
    [Paragraph("• HRCT chest — bronchiectasis (dilated bronchi), ILD, malignancy", small)],
    [Paragraph("• CT sinuses — recurrent sinusitis/UACS", small)],
    [Paragraph("• OGD / 24h pH study — refractory GERD-related cough", small)],
    [Paragraph("• Sputum cytology — if malignancy suspected", small)],
    [Paragraph("• Bronchoscopy — haemoptysis, suspected malignancy, FB aspiration", small)],
    [Paragraph("• Mantoux/IGRA (Quantiferon) — TB latent/active workup", small)],
    [Paragraph(" ", small)],
    [Paragraph("<b>Empiric trials (if CXR normal, non-smoker):</b>", small_b)],
    [Paragraph("Stop ACEi → Wait 4 weeks | PPI trial × 8 wks | Nasal steroid × 4 wks | ICS trial × 6 wks", small)],
], colWidths=[8.4*cm])
inv_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), PURPLE_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
]))

rf_box = Table([
    [Paragraph("<b>🚨 Red Flags — Urgent Evaluation / Refer</b>", red_s)],
    [Paragraph("• Haemoptysis — never ignore (TB, cancer, PE)", small)],
    [Paragraph("• Weight loss + night sweats + chronic cough → TB / malignancy", small)],
    [Paragraph("• Stridor — upper airway obstruction (epiglottitis, foreign body, tumour)", small)],
    [Paragraph("• SpO2 <94% on air — respiratory failure", small)],
    [Paragraph("• Respiratory rate >30/min — severe pneumonia / sepsis", small)],
    [Paragraph("• Pleuritic chest pain + SOB — PE, pneumonia, pneumothorax", small)],
    [Paragraph("• Hoarse voice + cough → recurrent laryngeal nerve palsy (lung cancer)", small)],
    [Paragraph("• Clubbing + chronic cough → bronchiectasis, IPF, malignancy", small)],
    [Paragraph("• Cough + superior vena cava syndrome (face/arm oedema, JVP↑)", small)],
    [Paragraph("• Sudden onset severe dyspnoea + cough — pneumothorax, massive PE", small)],
    [Paragraph("• Child: sudden onset cough after playing with small objects → FB aspiration", small)],
    [Paragraph(" ", small)],
    [Paragraph("<b>CURB-65 (Admit if score ≥2):</b>", small_b)],
    [Paragraph("C=Confusion | U=Urea >7 mmol/L | R=RR ≥30 | B=BP<90/60 | 65=Age≥65", small)],
    [Paragraph("Score 0–1: Home | Score 2: Hospital | Score 3–5: ICU consider", small)],
], colWidths=[9.0*cm])
rf_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), RED_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 3),
    ('BOTTOMPADDING', (0,0), (-1,-1), 3),
    ('LEFTPADDING', (0,0), (-1,-1), 7),
]))

combined = Table([[inv_box, rf_box]], colWidths=[8.6*cm, 9.0*cm])
combined.setStyle(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),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
]))
story.append(combined)
story.append(Spacer(1, 0.2*cm))

# ══════════════════════════════════════════════════════════════════
# 6. CHRONIC COUGH MNEMONIC + SPECIAL NOTES
# ══════════════════════════════════════════════════════════════════
story.append(shdr("6.  CHRONIC COUGH MNEMONIC  +  SPECIAL CLINICAL NOTES", bg=colors.HexColor("#b45309")))
story.append(Spacer(1, 0.12*cm))

memo_box = Table([
    [Paragraph("<b>PAGA — Top 4 Causes of Chronic Cough (Non-smoker)</b>", small_b)],
    [Paragraph("<b>P</b> — Postnasal drip / Upper Airway Cough Syndrome (UACS)  →  most common", small)],
    [Paragraph("<b>A</b> — Asthma (including cough-variant asthma)  →  nocturnal, reversible", small)],
    [Paragraph("<b>G</b> — GERD  →  dry cough, no GI symptoms in 40%; PPI trial diagnostic", small)],
    [Paragraph("<b>A</b> — ACE inhibitor  →  dry tickly cough, 10–15% of users; stops when drug stopped", small)],
    [Paragraph(" ", small)],
    [Paragraph("<b>In Smokers, add:</b>  Chronic bronchitis | Lung carcinoma | Bronchiectasis | TB", small_b)],
], colWidths=[8.4*cm])
memo_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), YELLOW_LIGHT),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

notes_box = Table([
    [Paragraph("<b>Practical Tips for OPD</b>", small_b)],
    [Paragraph("• <b>Cough-variant asthma:</b> Cough is the ONLY symptom in up to 57% of asthmatics. No wheeze needed for diagnosis.", small)],
    [Paragraph("• <b>GERD cough:</b> May be completely silent — no heartburn or regurgitation. Diagnose by PPI trial response.", small)],
    [Paragraph("• <b>Pertussis in adults:</b> Whooping sound or post-tussive vomiting + paroxysmal cough + 3–8 week duration = suspect pertussis. Treat with Azithromycin 500 mg OD × 3 days.", small)],
    [Paragraph("• <b>TB in India:</b> Any cough >2–3 weeks needs sputum AFB / CBNAAT. Do not delay testing. Free DOTS treatment available.", small)],
    [Paragraph("• <b>IPF:</b> Chronic dry cough + progressive dyspnoea + Velcro crackles at bases = suspect IPF. HRCT is diagnostic. Refer pulmonology.", small)],
    [Paragraph("• <b>Foreign body (children):</b> Sudden onset choking + cough after playing = FB until proven otherwise. Urgent bronchoscopy.", small)],
], colWidths=[9.0*cm])
notes_box.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), LIGHT_GREEN),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 8),
]))

tips = Table([[memo_box, notes_box]], colWidths=[8.6*cm, 9.0*cm])
tips.setStyle(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),
    ('GRID', (0,0), (-1,-1), 0.3, GREY_LINE),
]))
story.append(tips)
story.append(Spacer(1, 0.15*cm))

# ── FOOTER ────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_LINE))
story.append(Spacer(1, 0.08*cm))
story.append(Paragraph(
    "References: Murray & Nadel's Textbook of Respiratory Medicine 7E · Textbook of Family Medicine 9E · "
    "Harrison's Principles of Internal Medicine 22E (2025) · Rosen's Emergency Medicine  |  "
    "Compiled by Orris AI · July 2026  |  For educational use only — always apply clinical judgment.",
    foot_s
))

doc.build(story)
print(f"PDF created: {out}")
Running Command

cd /home/daytona/workspace/pharyngitis-guide && python cough_guide.py 2>&1

Running Command

ls -lh /home/daytona/workspace/pharyngitis-guide/

Your Cough Quick Reference Guide is ready!

Cough Quick Reference

PDF Document · PDF


What's inside — 6 sections on one A4 page:
  1. Classify First by Duration - Acute (<3 wks) / Subacute (3–8 wks) / Chronic (>8 wks) with causes and key action for each
  2. History - Key Questions - Productive vs dry, sputum colour, haemoptysis, nocturnal cough, GERD symptoms, ACE inhibitor use, TB contact, smoking, occupation, foreign body in children
  3. Common Causes Table - 10 conditions (viral URTI, pneumonia, asthma, postnasal drip, GERD, ACEi cough, TB, COPD, bronchiectasis, lung cancer) with clues, test, and management
    • TB row highlighted - particularly relevant for India
    • Lung cancer row - highlighted as red flag
  4. Investigations - Tiered: basic (CXR, CBC, SpO2) → targeted → empiric trial sequence
  5. Red Flags - 11 warning signs including haemoptysis, stridor, hoarseness, clubbing + CURB-65 score for pneumonia admission decision
  6. PAGA Mnemonic + Practical Tips - Postnasal drip/Asthma/GERD/ACEi, plus 6 key OPD pearls (cough-variant asthma, silent GERD, pertussis in adults, TB in India, IPF, foreign body)

You now have all 3 guides. Want the Fever or Jaundice guide next?

I have completed hiv pep prophylaxis for 28 days

Completing 28 days of HIV PEP is a significant step - well done for finishing the full course. After completing PEP, the key question is: did it work? - and that requires follow-up HIV testing.
Searching sources...
Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Here is everything you need to know now that you have completed your 28-day PEP course:

✅ You Finished PEP — What Comes Next?

1. Follow-Up HIV Testing (Most Important Step)

Completing PEP does not mean you are cleared. You must do follow-up HIV testing to confirm the PEP worked.
Time PointTestWhy
At completion (now - Day 28)HIV Ag/Ab combo (4th gen)Baseline at end of PEP
6 weeks post-exposureHIV Ag/Ab combo (4th gen)Early detection window
3 months post-exposureHIV Ag/Ab combo (4th gen)Standard follow-up
4–6 months post-exposureHIV Ag/Ab combo (4th gen)Final conclusive test
Key point from guidelines:
  • If a 4th generation (p24 Ag + HIV Ab) combo test is used → testing can be concluded at 4 months post-exposure
  • If only older antibody-only tests are available → conclude at 6 months post-exposure
Testing negative at 6 months after a single exposure with a completed 28-day PEP course = effectively ruled out. - Goldman-Cecil Medicine, International Ed.

2. Why You Still Need to Test Even Though You Took PEP

PEP is highly effective but not 100%. Failure can occur due to:
  • Very large viral inoculum at time of exposure
  • Drug resistance in the source patient's virus
  • Delayed initiation of PEP (started close to 72-hour limit)
  • Poor adherence during the 28 days
If you took the full 28 days correctly and started within 72 hours, the risk of failure is very low — but still requires confirmation.

3. Drug Side Effects to Monitor After Stopping PEP

Most side effects resolve after stopping the drugs. Watch for:
  • Nausea, diarrhoea, headache - usually resolve in 1–2 weeks
  • Fatigue - improves over days to weeks
  • Renal function - if TDF (Tenofovir) was part of regimen, check creatinine and eGFR once after completion if you had any symptoms (decreased urine output, swelling)
  • Liver enzymes (LFTs) - check if jaundice or right upper abdominal discomfort develops

4. Behaviour During the Testing Window Period

Until your final HIV test is negative, you should:
  • Use condoms for all sexual activity
  • Do not donate blood, semen, or organs
  • Inform any sexual partner of the exposure event
  • Avoid breastfeeding (if applicable)

5. ARS (Acute Retroviral Syndrome) — What to Watch For

If PEP fails, HIV infection can still occur. Symptoms of acute HIV infection typically appear 2–4 weeks after exposure (even while on or just after PEP):
  • Fever, malaise, myalgia
  • Maculopapular rash (trunk/face)
  • Lymphadenopathy (especially posterior cervical)
  • Oral ulcers
  • Pharyngitis
If you develop any of these in the weeks after stopping PEP → get an HIV RNA PCR (viral load) test immediately — it can detect HIV before antibodies appear.

6. Mental Health

Going through PEP is stressful. It is completely normal to feel anxious during the window period. Many hospitals have post-exposure counselling services. Talk to your occupational health / ICTC (Integrated Counselling and Testing Centre) if you are struggling.

Summary Checklist for You Right Now

  • HIV Ag/Ab combo test at ~4–6 weeks post-exposure
  • Repeat at 3 months post-exposure
  • Final test at 4 months (4th gen test) or 6 months (older test)
  • Monitor for ARS symptoms
  • Renal function check if on TDF and any symptoms
  • Use protection until final test negative
  • Counselling if needed

Well done for completing the full course - that was the single most important thing you could do. The window period testing is just a formality to confirm what the PEP has most likely already achieved.
Source: - Goldman-Cecil Medicine, International Ed. | Barash's Clinical Anesthesia 9E | Park's Preventive & Social Medicine

Will it give protection for extra days

This is an important question to answer clearly and directly.
No - PEP does not give protection for "extra days" after you stop it.
Here is exactly why:

What PEP Does and Does NOT Do

PEP is NOT a vaccine. It does not create immunity or antibodies that persist after stopping.
PEP works by suppressing HIV replication during the drug intake period — it gives your immune system time to eliminate any virus that entered at the time of the original exposure.
Once you stop the drugs, the antiretroviral levels in your blood drop to zero within a few days. After that:
  • There is no residual protective effect
  • You are back to being fully susceptible to HIV
  • A new exposure after stopping PEP carries the same risk as if you had never taken PEP at all

What This Means Practically

SituationWhat happens
Original exposure (28 days ago)PEP has covered this. Follow-up testing still needed.
New exposure while on PEPPEP may or may not have covered it - depends on timing
New exposure after stopping PEPNot protected at all. Full risk.

If You Had a New Exposure Recently

This is critical:
  • If a new exposure occurred within the last 72 hours → you may need a new, separate PEP course. Go to your occupational health department or ICTC immediately.
  • You cannot simply extend the current course retrospectively - the 28-day clock for a new exposure starts from that new exposure.
  • Two consecutive or overlapping PEP courses are not recommended without specialist guidance, as this does not convert PEP into PrEP (pre-exposure prophylaxis).

PrEP vs PEP — The Key Difference

If you are in a situation of ongoing or repeated risk of HIV exposure (e.g. working in high-risk settings, occupational exposure risk), you should discuss PrEP (Pre-Exposure Prophylaxis) with your doctor:
PEPPrEP
TimingAfter exposureBefore/during ongoing risk
Duration28 days onlyOngoing (daily)
ProtectionCovers single exposure eventContinuous protection
When to useEmergency, one-offRecurring risk situation
PrEP (Tenofovir/Emtricitabine daily) provides sustained protection and is appropriate for healthcare workers with frequent high-risk exposures.

Bottom Line

PEP covers only the exposure it was prescribed for. It gives zero residual protection once stopped. Any new exposure after stopping requires a fresh assessment within 72 hours.
If you are concerned about a specific new exposure, please go to your occupational health / ICTC today - do not wait.

I haven taken hiv prophylaxis for,3 days after exposure. Within 72 hours

Let me make sure I understand your situation correctly before giving advice.
Asking for Preferences

Which situation applies to you?

Asking for Preferences

When did you stop taking the PEP?

This is a serious situation and you need to act today. Here is the honest, direct answer:

⚠️ 3 Days of PEP is NOT Enough — You Are at Risk

Why 3 Days is Insufficient

PEP works by maintaining continuous antiretroviral drug levels for the full 28 days to suppress HIV replication completely until your immune system can clear the virus.
  • Taking only 3 days means the HIV virus was not fully suppressed
  • When you stopped, drug levels fell to zero within 1–3 days
  • Any HIV that was present had time to replicate and establish infection
  • 3 days of PEP is essentially incomplete treatment — it may have reduced risk but does not provide the protection that a full 28-day course gives

⚠️ Can You Restart PEP Now?

You stopped 3–7 days ago, meaning your original exposure was approximately 10–14 days ago.
This is the difficult part:
Time since exposureCan PEP help?
0–72 hoursYes - PEP should be started
72 hours to ~7 daysBorderline - specialist decision needed
>7–10 daysPEP is generally NOT effective - HIV replication is likely already established
Since your exposure was ~10–14 days ago, restarting PEP now is unlikely to be effective at preventing infection from that exposure.

What You Must Do RIGHT NOW

1. Go to your occupational health department / ICTC TODAY

Do not wait. Explain:
  • Date of original exposure
  • That you took only 3 days of PEP and stopped
  • When you stopped
A specialist may still assess whether any intervention is appropriate.

2. Get HIV testing done immediately

  • HIV RNA PCR (viral load) - can detect HIV as early as 10–14 days post-exposure, before antibodies appear
  • This is critical because if you are infected, early detection = early treatment = near-normal life expectancy

3. Testing schedule going forward

TestWhen
HIV RNA PCRNow (immediately)
HIV Ag/Ab combo (4th gen)6 weeks from exposure
HIV Ag/Ab combo3 months from exposure
Final HIV Ag/Ab combo6 months from exposure

Why Did You Stop After 3 Days?

Common reasons people stop PEP early:
  • Side effects (nausea, fatigue, headache) - these are manageable with antiemetics and usually improve after week 1
  • Cost - free PEP is available at all government ART centres in India
  • Felt it was unnecessary - every day matters with PEP
If it was side effects, please know that there are alternative regimens with better tolerability that your doctor could have switched you to.

The Most Important Message

You must see a doctor today. Not tomorrow. Today. The window for intervention has passed, but early HIV diagnosis - if infection occurred - is life-changing. Modern HIV treatment (ART) started early means a person can live a completely normal, healthy life.
In India - go to your nearest Government ART Centre (free and confidential) or call the National AIDS Helpline: 1097 (free, 24 hours)

I understand this is frightening and stressful. Please do not sit with this alone - speak to a doctor today.

If i started again pep course,is it okay

This is an important question and I want to give you a completely honest answer.
Finding Sources
Finding Sources
Finding Sources
Finding Sources

Starting a New PEP Course Now — The Direct Answer

No. Restarting PEP at this point (10–14 days after the original exposure) will NOT prevent HIV infection from that exposure.
Here is the clear reasoning:

Why Restarting Won't Work

PEP has a strict biological rationale:
Exposure → HIV enters body → virus starts replicating locally (days 1–3)
→ spreads to regional lymph nodes (days 3–5)
→ systemic viraemia / enters bloodstream (days 5–10)
→ viral reservoir established (days 10–14+)
You are now at the stage where viral reservoir is likely being established. At this point:
  • PEP drugs cannot reverse an infection that is already taking hold
  • Starting drugs now would essentially be ART (treatment), not prophylaxis
  • ART requires a full, properly monitored regimen - not a 28-day PEP course

The Real Risk of Restarting PEP Incorrectly

If you restart PEP now without medical supervision, there are specific dangers:
RiskExplanation
Drug resistanceTaking subtherapeutic or incomplete ART can cause HIV to develop resistance to first-line drugs, making future treatment harder
False reassuranceYou may feel "covered" and delay proper testing and care
Missing early treatment windowEarly HIV diagnosis + proper ART initiation gives the best long-term outcome — restarting PEP on your own delays this
Drug toxicityAntiretrovirals have real side effects — taking them without proper indication and monitoring is harmful

What Needs to Happen Instead

The situation has moved from prophylaxis territory into possible early infection territory. The correct path now is:
Step 1 — HIV RNA PCR test immediately
  • This can detect HIV as early as 10 days post-exposure
  • If positive → you need proper ART initiation under HIV specialist care, NOT PEP
  • If negative → repeat at 6 weeks, 3 months, 6 months to confirm
Step 2 — See a doctor today, not tomorrow
  • Government ART Centre (free, confidential in India)
  • Or your hospital's occupational health / ICTC
  • Tell them the exact timeline: exposure date, 3 days of PEP taken, when you stopped
Step 3 — Do NOT self-prescribe ART/PEP
  • If infection has occurred, treatment requires proper CD4 count, viral load, resistance testing, and a monitored regimen - not a self-started PEP course

The Bottom Line

Do not restart PEP on your own. It will not prevent infection at this stage and may cause drug resistance. Get an HIV RNA PCR test today and see a doctor immediately.
If the result comes back positive, that is not the end - people on modern ART started early live full, healthy, normal lives with an undetectable viral load. The most important thing is getting tested and into care quickly.
National AIDS Helpline (India): 1097 - Free, 24 hours, confidential

I only missed 3 days

That changes things significantly - thank you for clarifying. I misunderstood earlier.
So to confirm your situation:
  • You completed most of the 28-day PEP course
  • You missed 3 doses/days somewhere in the middle or end
  • You are asking if you should restart or continue
This is a much better situation than I described before.
Asking for Preferences

When did you miss those 3 days?

Good news - this is a much more reassuring situation. Here is the honest, evidence-based answer:

You Took 25 Days of PEP and Missed the Last 3 — Here's What That Means

The Reassuring Part

PEP works by suppressing HIV replication during the critical early window period after exposure. The most critical period is the first 1–2 weeks after exposure, when the virus is still trying to establish itself.
By day 25:
  • The virus would have already been suppressed through the most critical replication window
  • Your immune system had 25 days of drug-assisted protection
  • Missing the last 3 days is far less significant than missing early doses
The 28-day duration is based on the time needed to ensure complete suppression - the tail end of the course is less critical than the early days.

Should You Restart / Complete Those Last 3 Days?

Yes - if it has been less than 1–2 days since your last dose, resume and complete the course.
Guidelines are clear:
  • If you missed doses but are still within the 28-day window from your exposure → resume and complete as soon as possible
  • Do not take double doses to make up for missed doses - just resume normally
If it has been more than 2–3 days since your last dose → speak to your prescribing doctor before resuming. They may advise completing the remaining doses or may consider the course effectively complete given 25 days were taken.

What is the Risk From Missing the Last 3 Days?

Realistically - very low, especially because:
  1. You started within 72 hours ✅
  2. You completed 25 out of 28 days (89% adherence) ✅
  3. The missed doses were at the end, not the beginning ✅
  4. The critical viral suppression window was covered ✅
No study has shown that 25 days vs 28 days makes a significant difference in PEP efficacy, especially when the first 3 weeks were covered.

What You Still Must Do

Missing the last 3 days does NOT cancel your follow-up testing requirement.
TestWhen
HIV Ag/Ab combo (4th gen)6 weeks from exposure date
HIV Ag/Ab combo3 months from exposure date
Final HIV Ag/Ab combo4–6 months from exposure date
This is standard protocol regardless of perfect adherence.

Bottom Line

You took 25 of 28 days correctly, started on time, and only missed the final 3 days. Your PEP course is considered substantially complete. The risk from those 3 missed end-doses is very low. Complete follow-up testing as scheduled and you can be reassured.
If side effects caused you to stop - mention this to your doctor at your follow-up so they can document it. Try to complete the remaining doses if it has only been 1–2 days since you last took them.

I completed first course

Okay - so now I understand your full situation clearly:
  • ✅ First PEP course - completed all 28 days (from earlier in the conversation)
  • ❓ Second exposure happened after that
  • ⚠️ You took only 3 days of a second PEP course, then missed the last 3 days of it...
Wait - let me just confirm exactly what happened with this second course.
Asking for Preferences

Which describes your situation accurately?

Asking for Preferences

When did you stop the second PEP course?

Okay - now the picture is clear. Here is the full honest assessment:

Your Complete Situation

Details
First exposureCompleted full 28-day PEP course ✅
Second exposureNew separate exposure occurred
Second PEP courseStarted within 72 hours ✅
ProblemStopped after only 3 days, now 3 days have passed without taking it
Time since second exposure~6 days total

The Critical Question: Can You Still Resume?

Yes - resume the second PEP course TODAY. Right now.
Here is why this is still actionable:
  • Your second exposure was approximately 6 days ago
  • You took 3 days of PEP, then stopped for 3 days
  • The 72-hour rule applies to STARTING PEP - not to resuming a course already started
  • Guidelines say: if you miss doses, resume as soon as possible and complete the full 28 days from the original start date
At day 6 post-exposure, HIV is likely still in the local replication phase for many exposures. Resuming now is much better than not resuming at all.

What You Must Do Right Now

🔴 Step 1 — Take your PEP dose TODAY

Do not wait until tomorrow. Resume immediately.

🔴 Step 2 — Go to your doctor / ART centre today

Tell them:
  • Date of second exposure
  • You started PEP within 72 hours
  • You took 3 days then stopped for 3 days
  • You want to resume and complete the full 28-day course
They will advise whether to:
  • Resume from where you left off and complete remaining 25 days, OR
  • Restart a fresh 28-day course from today (some guidelines recommend this after a gap)

🔴 Step 3 — Complete the full course this time

Whatever happens - do not stop again. Common reasons people stop and solutions:
Reason for stoppingSolution
NauseaTake with food, ask for antiemetic (Ondansetron/Domperidone)
FatigueExpected, improves after week 1
Forgot dosesSet phone alarms for same time every day
Felt it was unnecessaryIt is necessary - complete it

Why Resuming Now Still Matters

3 days of drug gap at day 3–6 post-exposure is serious but not necessarily catastrophic because:
  • The first 3 days of PEP created some viral suppression
  • HIV replication is not instantaneous - there is still a window
  • Resuming now and completing 28 days gives significantly better protection than abandoning the course entirely
Abandoning the course now = near-zero protection for the second exposure. Resuming now = still meaningful protection, especially with the earlier 3 days already taken.

Follow-Up Testing for BOTH Exposures

TestTimeline (from second exposure)
HIV Ag/Ab combo6 weeks
HIV Ag/Ab combo3 months
Final HIV Ag/Ab6 months

Bottom Line

Resume your second PEP course today - do not wait. See your doctor immediately to confirm the plan. A 3-day gap is not ideal but resuming now is far better than stopping completely. Complete all 28 days without further interruption.
You started correctly within 72 hours - do not let that effort go to waste. Go take your pill right now.
National AIDS Helpline India: 1097 (free, 24 hours)

Can i take pulmo clear tablet alongwith pep prophylaxis

Good question to ask before taking anything alongside PEP.
Searching the Web

Pulmo Clear tablet ingredients composition India

Now I know exactly what Pulmoclear is. Here is the interaction check:

Pulmoclear with PEP — Is It Safe?

Pulmoclear contains:
  • Acebrophylline 100 mg - bronchodilator (xanthine derivative, similar to theophylline)
  • Acetylcysteine (NAC) 600 mg - mucolytic / expectorant

Interaction Assessment with Common PEP Drugs

Most standard PEP regimens contain: TDF + FTC (Tenofovir + Emtricitabine) + Dolutegravir or Raltegravir
Pulmoclear ComponentInteraction with PEP drugsAssessment
Acetylcysteine (NAC)No significant interactions with TDF, FTC, Dolutegravir, or Raltegravir✅ Safe
AcebrophyllineAcebrophylline is a xanthine derivative - no documented interaction with standard PEP antiretrovirals✅ Generally safe

One Important Caution — Acebrophylline

Acebrophylline is related to theophylline. It has known interactions with:
  • Carbamazepine, Phenytoin (not in PEP)
  • Azithromycin - can increase theophylline levels (not in standard PEP but sometimes co-prescribed)
  • Cimetidine (not relevant here)
With standard TDF + FTC + DTG/RAL PEP regimen - no significant interaction with Acebrophylline is documented.

Acetylcysteine (NAC) — Actually Beneficial During PEP

NAC has an interesting bonus effect here:
  • It is an antioxidant and glutathione precursor
  • It may help reduce oxidative stress caused by antiretroviral drugs
  • Some studies suggest NAC may have mild benefit in HIV-exposed individuals
  • It also helps with nausea which is a common PEP side effect

Bottom Line

Yes, Pulmoclear (Acebrophylline + Acetylcysteine) is generally safe to take alongside standard PEP regimens. No clinically significant interactions with TDF, Emtricitabine, Dolutegravir, or Raltegravir are documented.
However, 2 things to confirm:
  1. Tell your doctor what PEP regimen you are on (exact drug names) so they can double-check - especially if your PEP contains any unusual components
  2. Why are you taking Pulmoclear? - If it is for cough, make sure the cough is not a side effect of PEP itself (some ARVs can cause cough), or early ARS symptom - worth mentioning to your doctor
Take Pulmoclear and PEP at slightly different times (e.g. 1 hour apart) to avoid any absorption interference - this is general good practice with any two drugs.

Can i drink alcohol along with

Short answer: No — avoid alcohol completely while on PEP.
Here is why, broken down by each drug:

Alcohol + PEP Drugs

1. Tenofovir (TDF) + Alcohol

  • Both are nephrotoxic (kidney toxic)
  • Alcohol + TDF together increases the risk of kidney damage
  • TDF already requires monitoring of creatinine/eGFR — alcohol adds extra strain

2. Emtricitabine (FTC) + Alcohol

  • Less direct toxicity, but alcohol impairs liver metabolism
  • FTC is processed renally — alcohol-induced dehydration affects this

3. Dolutegravir (DTG) or Raltegravir (RAL) + Alcohol

  • Both are hepatically metabolised
  • Alcohol competes with the same liver enzymes (CYP450)
  • Can increase or decrease drug blood levels unpredictably
  • Dolutegravir specifically can cause liver enzyme elevation — alcohol makes this significantly worse

Alcohol + Acebrophylline (Pulmoclear)

  • Alcohol lowers the seizure threshold when combined with xanthine derivatives
  • Can cause increased CNS effects — dizziness, headache, palpitations
  • Not a safe combination

The Bigger Picture

EffectWhy alcohol is harmful during PEP
AdherenceAlcohol makes you forget doses — the single biggest cause of PEP failure
NauseaAlcohol worsens PEP-related nausea significantly
Liver stressARVs already stress the liver — alcohol multiplies this
Kidney stressTDF + alcohol = increased renal toxicity risk
Drug levelsAlcohol alters metabolism, making drug levels unpredictable
Immune systemAlcohol suppresses immunity — the opposite of what you need right now

How Long to Avoid?

  • During the full PEP course - complete abstinence is ideal
  • After stopping PEP - wait at least 1 week before drinking, to allow drug levels to clear and liver enzymes to normalise
  • If you get LFTs checked at follow-up and they are normal, then moderate alcohol is acceptable

Bottom line: No alcohol at all during PEP. It risks treatment failure through missed doses, harms your liver and kidneys, and interacts with every drug in your regimen. The 28-day course is short — avoid alcohol completely until it is finished.

What should i do to maintain liver during treatment

Great question - being proactive about liver health during PEP is smart medicine.

Liver Protection During PEP — Complete Guide

1. Monitor — Get a Baseline LFT Done

Before or early in your PEP course, get:
  • LFTs (Liver Function Tests): AST, ALT, ALP, bilirubin, albumin
  • Repeat at end of course (day 28)
  • If you develop jaundice, dark urine, RUQ pain, or unusual fatigue → get LFTs immediately without waiting
Normal ALT/AST: up to 40 U/L. If >3× upper limit of normal on PEP → report to your doctor — drug may need to be changed.

2. Diet — What to Eat and Avoid

✅ Eat more of:
FoodWhy it helps
Green leafy vegetables (spinach, methi, broccoli)Antioxidants, folate — support liver detox pathways
Fruits (amla, papaya, watermelon, citrus)Vitamin C — powerful antioxidant, supports glutathione
Turmeric (haldi)Curcumin has hepatoprotective and anti-inflammatory properties
GarlicActivates liver enzymes, contains allicin (antioxidant)
BeetrootBetaine reduces oxidative stress on liver
Nuts and seeds (walnuts, flaxseed)Omega-3, Vitamin E — reduce liver inflammation
Oats, whole grainsReduce fat load on liver
Adequate water (2.5–3 L/day)Essential — TDF is nephrotoxic and dehydration worsens toxicity
❌ Avoid completely:
Food/SubstanceWhy
AlcoholDirect hepatotoxin — as discussed above
Fatty / fried foodsIncreases fat accumulation in liver (drug-induced steatosis)
Paracetamol >2 g/dayCombined with ARV hepatotoxicity = significant risk
Herbal supplements (St. John's Wort especially)St. John's Wort reduces Dolutegravir/Raltegravir levels by 50%+ — never take with PEP
Raw/undercooked shellfishHepatitis A/E risk — avoid during this period
Excess sugar / processed foodsWorsens metabolic liver load

3. Supplements That Are Safe and Helpful

SupplementBenefitDose
Silymarin (Milk Thistle / Liv-52)Hepatoprotective — reduces ARV-induced liver enzyme elevationSilymarin 140 mg TDS or Liv-52 2 tabs BD
N-Acetylcysteine (NAC)You are already getting this in Pulmoclear! Replenishes glutathione — liver's main antioxidantAlready covered
Vitamin E (natural)Antioxidant, reduces hepatic oxidative stress400 IU/day
Vitamin CAntioxidant, supports glutathione synthesis500 mg/day
B-complexB vitamins support liver metabolism, commonly depleted by ARVs1 tablet daily
Note: Liv-52 / Silymarin has no known interaction with standard PEP drugs and is widely used alongside ARV therapy in India.

4. Lifestyle

HabitImpact
Sleep 7–8 hoursLiver regenerates during sleep — most repair happens between 11 PM–3 AM
Moderate exerciseReduces fatty liver risk, improves metabolism
Avoid unnecessary medicationsEvery extra drug the liver has to process adds to the load
No smokingOxidative stress from smoking competes with liver's antioxidant capacity
Stress managementCortisol elevation impairs liver function

5. Warning Signs — Go to Doctor Immediately if You Notice

  • 🟡 Yellowing of eyes or skin (jaundice)
  • 🟤 Dark yellow/brown urine (like tea)
  • ⬜ Pale/clay-coloured stools
  • 😣 Right upper abdominal pain or tenderness
  • 😴 Extreme fatigue or confusion
  • 🤢 Persistent nausea/vomiting that won't settle
These are signs of drug-induced liver injury (DILI) — a rare but real complication of ARVs that requires immediate drug review.

Simple Daily Routine During PEP

Morning:   PEP tablet with food + B-complex + Vitamin C
           Glass of warm water with turmeric

Midday:    Plenty of water, fruit, light balanced meal

Evening:   Pulmoclear (Acebrophylline/NAC) — 1 hour after PEP
           Liv-52 / Silymarin if prescribed

Night:     Light dinner, no fried food
           Sleep by 11 PM

Your NAC in Pulmoclear is already giving your liver antioxidant support. Add Liv-52, eat clean, stay hydrated, avoid alcohol and paracetamol overuse, and get LFTs checked at end of course. Your liver will handle PEP well with these measures.

Can i smoke cigarettes

Technically no direct drug interaction — but strongly advised against during PEP.
Here is the honest breakdown:

Cigarettes + PEP — The Facts

Direct Drug Interaction

  • No direct pharmacokinetic interaction between nicotine/cigarette smoke and TDF, FTC, Dolutegravir, or Raltegravir
  • Cigarettes do not reduce PEP drug levels significantly
  • So it won't cause PEP to fail in the way alcohol can

But Here is Why You Should Not Smoke During PEP

1. Immune Suppression

  • Cigarette smoke directly suppresses immune function — reduces NK cells, macrophage activity, and T-cell response
  • Right now your immune system is the backup defence alongside PEP — you need it working at full capacity
  • Smoking weakens exactly the immune cells that help clear HIV-exposed cells

2. Liver Impact

  • Cigarette smoke contains polycyclic aromatic hydrocarbons (PAHs) that induce CYP1A2 liver enzymes
  • This increases the metabolic load on the liver — which is already under stress from ARVs
  • Combined liver stress = higher risk of elevated LFTs

3. Oxidative Stress

  • Smoking generates massive amounts of free radicals
  • These deplete glutathione — your liver's and body's main antioxidant
  • You are taking NAC (in Pulmoclear) specifically to replenish glutathione
  • Smoking undoes this benefit directly

4. You Are Already on Pulmoclear

  • You are taking Pulmoclear for respiratory symptoms
  • Smoking directly counteracts Acebrophylline's bronchodilator effect and worsens airway inflammation
  • It makes Pulmoclear less effective

5. Healing and Recovery

  • Smoking reduces tissue oxygenation and slows cellular repair
  • Your body needs optimal conditions to mount an immune response right now

Summary Table

ConcernAlcoholCigarettes
Direct PEP drug interaction✅ Yes — significant❌ No significant interaction
Liver harm✅ Direct hepatotoxin⚠️ Indirect — enzyme induction
Immune suppression✅ Yes✅ Yes
Oxidative stress✅ Yes✅ Yes — depletes glutathione
Counteracts PulmoclearPartially✅ Directly
VerdictCompletely avoidStrongly avoid

Bottom Line

No direct PEP drug interaction with cigarettes — but smoking suppresses your immune system, depletes the antioxidants you are trying to build up, worsens your respiratory symptoms, and adds liver stress. The 28-day course is short. If there was ever a good time to quit or at minimum cut down significantly — this is it.
If you are a regular smoker and finding this difficult, even reducing to minimum during the course makes a real difference. Your immune system is your partner in PEP right now — do not handicap it.

During sexuak intercourse,i wear condom

That is good practice. Let me give you the complete picture.

Condom Use During and After PEP — What You Need to Know

During the PEP Course

Using a condom is mandatory during this period, and you are doing the right thing.
Reasons:
  • PEP is not confirmed to have worked until follow-up testing is complete
  • You could potentially transmit HIV to a partner if infection occurred despite PEP
  • Condoms also protect you from any new HIV exposure — which would be a third exposure requiring assessment
  • Protects against other STIs (Hepatitis B, syphilis, gonorrhoea, chlamydia) which are independent concerns

How Effective is Condom Use?

Used correctly and consistentlyHIV transmission risk reduction
Male latex condom~85–98% reduction
Condom + PEP (if still on course)Extremely high protection
Condom alone (after completing PEP, before final test)Good but not 100%
"Wearing a condom" depends on correct use:
  • ✅ Put on before any genital contact — not just before ejaculation
  • ✅ Use correct size — too loose = slippage, too tight = breakage
  • ✅ Leave space at the tip
  • ✅ Use water-based lubricant (oil-based lubricants degrade latex)
  • ✅ Check expiry date
  • ✅ One condom per act — never reuse
  • ❌ Do not use two condoms together — friction causes breakage

After Completing PEP — Until Final Test is Negative

Continue using condoms for all sexual activity until your 6-month HIV test is confirmed negative.
This is important because:
  • You are still in the window period after your second exposure
  • A negative test at 6 weeks or 3 months is reassuring but not final
  • Until the final test at 4–6 months is negative, you cannot be 100% certain

What About Your Partner?

If your partner is HIV negative and you have had sexual contact during this period:
  • They should be informed so they can get tested
  • Their testing timeline: HIV Ag/Ab at 6 weeks and 3 months from the date of contact with you
If your partner is already HIV positive:
  • Condoms still protect you from reinfection with a different strain (superinfection) which can cause drug resistance
  • And protect them from other STIs

One Important Question

You mentioned wearing a condom during the second exposure that triggered the second PEP course — was the condom used correctly, or did it break/slip?
This matters because:
  • Intact condom throughout = very low HIV transmission risk even without PEP
  • Condom failure = higher risk, PEP was definitely the right call
If the condom was intact and used correctly the entire time, your actual risk from the second exposure was already very low — and the PEP (even if partially taken) adds further protection on top of that.

Bottom Line

Condom use is the right thing to do and you must continue it throughout the testing window period (up to 6 months post-exposure). Combined with PEP, it gives very strong protection. Make sure technique is correct — most failures are due to incorrect use, not the condom itself.
You are managing this situation responsibly. The key things remaining are:
  1. Resume/complete the second PEP course
  2. Follow-up HIV testing at 6 weeks, 3 months, 6 months
  3. Continue condoms until final test is negative

I have doubt

Of course — go ahead, ask your doubt. I'm here to help.

If my pennis touch her vaginal during intercourse and she doesn't release fluid

Good question — this is about understanding actual HIV transmission risk.

HIV Transmission Risk — Skin Contact vs Fluid Exchange

The Key Principle

HIV is transmitted through specific body fluids, not through skin-to-skin contact alone.
Fluids that CAN transmit HIV:
  • Vaginal secretions
  • Blood
  • Semen / pre-seminal fluid (pre-cum)
  • Rectal secretions
  • Breast milk
What CANNOT transmit HIV:
  • Dry skin contact
  • Touching external genitalia with no fluid exchange
  • Saliva, sweat, tears, urine (not blood-stained)

Your Specific Scenario

Penis touches vagina externally, no fluid released from her side:
FactorAssessment
External skin-to-skin contact onlyVery low risk
No vaginal fluid contactSignificantly reduces risk
Her HIV status unknownRisk depends on this
No penetrationLower risk than penetrative sex
With condomRisk reduced further
However — important reality:
  • The vaginal area is always moist to some degree — some secretions are always present even if not obviously "wet"
  • Pre-seminal fluid (pre-cum) from your side is also a transmission fluid — this is present before ejaculation
  • External contact with mucosal surfaces (the glans penis is a mucous membrane) does carry low but non-zero risk

Risk Categories for Reference

Act (without condom, HIV+ partner)Estimated risk per exposure
Receptive anal intercourse~1.4% (highest)
Insertive anal intercourse~0.11%
Receptive vaginal intercourse~0.08%
Insertive vaginal intercourse~0.04%
External genital contact onlyVery low — <0.01%
Oral sexExtremely low
Touching/skin contact, no fluidEffectively zero

Bottom Line for Your Situation

External penile-vaginal contact with no visible fluid exchange carries very low to negligible HIV transmission risk. The main risk in vaginal intercourse comes from mucosal exposure to vaginal secretions and semen during penetration.
That said:
  • You already did the right thing by taking PEP
  • Continue completing the course
  • The condom you mentioned using provides the correct protection for actual intercourse
  • External contact without penetration or fluid exchange does not require additional PEP assessment

Is there a specific incident you are trying to assess the risk of? If you tell me exactly what happened — penetration or not, condom used or not, duration — I can give you a more precise risk assessment.

New chapter

Sure! What topic would you like to cover? Ask me anything — clinical case, drug, procedure, theory, or another quick reference guide.

I have exam excit osce tomorrow

OSCE tomorrow — let's make the most of tonight!
Asking for Preferences

Which subject is your OSCE in? · How can I help you prepare?

First ,injection

OSCE — Injection Techniques

There are 4 types commonly tested. Here is everything you need to know for each:

1. INTRAMUSCULAR (IM) Injection

Sites:
  • Deltoid — most common (vaccines, small volumes ≤2 ml)
  • Vastus lateralis — infants, large volumes
  • Dorsogluteal — gluteus maximus (avoid — risk of sciatic nerve injury)
  • Ventrogluteal — safest gluteal site, preferred in adults
Needle: 21–23G, 1.5 inch (38 mm)
Angle: 90°
Volume: Up to 5 ml (deltoid max 2 ml)
Steps for OSCE:
  1. Wash hands, wear gloves
  2. Check drug, dose, expiry, patient ID
  3. Draw up drug, expel air bubbles
  4. Position patient, expose site
  5. Clean skin with spirit swab — let it dry completely
  6. Stretch skin taut (Z-track technique for irritant drugs)
  7. Insert needle at 90°, full length
  8. Aspirate (pull plunger back) — if blood → withdraw, new needle
  9. Inject slowly
  10. Withdraw needle smoothly, apply cotton — do not recap needle
  11. Dispose in sharps bin immediately
  12. Document
Z-track technique — pull skin 2–3 cm laterally before injecting, release after withdrawing. Prevents drug tracking into subcutaneous tissue.

2. SUBCUTANEOUS (SC) Injection

Sites: Outer upper arm, abdomen (2 inches from umbilicus), anterior thigh, upper back
Needle: 25–27G, 5/8 inch (16 mm)
Angle: 45° (thin patient) or 90° (obese patient)
Volume: Max 1–1.5 ml
Common drugs: Insulin, heparin, adrenaline, vaccines
Key differences from IM:
  • Pinch skin up (do NOT stretch)
  • No aspiration needed for insulin and heparin
  • Rotate sites to prevent lipodystrophy

3. INTRADERMAL (ID) Injection

Site: Volar (inner) forearm — 4 finger-breadths below antecubital fossa
Needle: 26–27G, 3/8–5/8 inch
Angle: 5–15° (almost parallel to skin)
Volume: 0.1 ml only
Common uses: Mantoux test (TB), allergy testing, local anaesthetic, BCG vaccine
Key feature: A pale wheal (bleb) should appear — if no wheal, injection was too deep (went SC)
Steps:
  1. Bevel UP
  2. Stretch skin taut with non-dominant hand
  3. Insert almost flat, bevel up, just under epidermis
  4. Inject slowly — watch for wheal formation
  5. Do NOT massage after (disperses the antigen)
  6. Circle the wheal with pen, note time (for Mantoux: read at 48–72 hrs)

4. INTRAVENOUS (IV) Injection / Cannulation

Sites: Dorsum of hand, antecubital fossa (cephalic, basilic, median cubital vein)
Needle/Cannula: 18G (green) for adults, 20G (pink) for standard, 22G (blue) for children
Steps:
  1. Apply tourniquet 4–6 cm above site
  2. Ask patient to pump fist
  3. Clean with alcohol swab, let dry
  4. Anchor vein with thumb below puncture site
  5. Insert bevel UP at 15–30°
  6. Watch for flashback of blood in chamber
  7. Advance slightly, then slide cannula in while withdrawing needle
  8. Release tourniquet, apply pressure at site
  9. Withdraw needle, cap cannula
  10. Flush with 2–5 ml normal saline (check for swelling = extravasation)
  11. Secure with transparent dressing
  12. Needle straight into sharps bin — never recap

Quick Comparison Table

FeatureIMSCIDIV
Angle90°45°/90°5–15°15–30°
Needle size21–23G25–27G26–27G18–22G
Skin techniqueStretch / Z-trackPinchStretchAnchor below
Aspirate?YesNo (heparin/insulin)NoCheck flashback
VolumeUp to 5 mlMax 1.5 ml0.1 mlVariable
Sign of correct techniqueNoneNoneWheal/blebFlashback

OSCE Examiner's Favourite Points — Don't Miss These

  • ✅ Always let spirit dry before injecting (wet alcohol causes sting + may inactivate live vaccines)
  • ✅ Never recap needle — straight into sharps bin
  • ✅ Check 5 Rs: Right patient, Right drug, Right dose, Right route, Right time
  • ✅ Consent the patient before starting
  • ✅ Document after completion
  • ✅ Gloves on before touching the patient
  • ✅ Announce what you are doing at each step (examiners love verbal communication)

What's next? IV fluids, wound dressing, catheterisation, ABG, suturing, or something else?

Catheterisation

OSCE — Urinary Catheterisation


Indications (Know These)

  • Urinary retention (most common)
  • Accurate urine output monitoring (ICU, surgery)
  • Bladder irrigation
  • Urological surgery / procedures
  • Neurogenic bladder
  • Urine sample (when clean catch not possible)

Contraindications

  • Suspected urethral injury (pelvic fracture, blood at meatus, high-riding prostate on PR) → do not attempt, call urology
  • Urethral stricture (relative)

Equipment (Say This Out Loud in OSCE)

  • Sterile catheterisation pack (drape, tray, gauze, forceps)
  • Appropriate catheter (Foley 14F adult male, 12F female)
  • 10 ml syringe + sterile water (to inflate balloon)
  • Lignocaine gel 2% (anaesthetic + lubricant)
  • Antiseptic solution (chlorhexidine or povidone iodine)
  • Sterile gloves
  • Urine drainage bag
  • Sterile normal saline for cleaning

Catheter Sizes (Important for OSCE)

PatientSize
Adult male14 Fr (standard)
Adult female12–14 Fr
Child6–10 Fr
Haematuria / clots18–22 Fr (3-way catheter)

MALE CATHETERISATION — Step by Step

Preparation

  1. Introduce yourself, explain procedure, obtain verbal consent
  2. Wash hands, open sterile pack using aseptic technique
  3. Put on sterile gloves
  4. Arrange equipment on sterile field
  5. Draw up 10 ml sterile water into syringe (for balloon)
  6. Test balloon — inflate then deflate before insertion

Positioning

  1. Patient supine, expose genitalia, place sterile drape with hole over penis

Cleaning

  1. Hold penis with non-dominant hand (this hand is now contaminated — do not touch sterile equipment with it)
  2. Retract foreskin fully
  3. Clean glans and meatus with antiseptic, moving outward in concentric circles × 3 times (use forceps in dominant hand)

Anaesthesia

  1. Insert lignocaine gel 2% into urethra
  2. Apply gentle pressure at tip of penis for 3–5 minutes to allow gel to work
  3. Tell the patient they will feel pressure but not pain

Insertion

  1. Hold penis perpendicular to body (90° — to straighten the two urethral curves)
  2. Insert catheter gently using forceps or sterile-gloved hand
  3. Advance to the bifurcation (until the Y-junction of catheter reaches meatus) — do not stop at first sign of urine
  4. Urine will flow — do not inflate balloon yet until catheter is fully in

Securing

  1. Inflate balloon with 10 ml sterile water
  2. Gently pull back until resistance felt (confirms balloon in bladder)
  3. Connect to drainage bag
  4. Replace foreskin (paraphimosis risk if left retracted — common OSCE trap!)
  5. Secure catheter to thigh with tape
  6. Position drainage bag below bladder level (gravity drainage)

After

  1. Remove gloves, wash hands
  2. Document: catheter size, balloon volume, amount of urine drained, colour
  3. Dispose of sharps and waste appropriately

FEMALE CATHETERISATION — Key Differences

StepFemale
PositionSupine, knees flexed apart (frog-leg position)
CleaningLabia majora → minora → urethral meatus, top to bottom, one stroke each
Catheter lengthInsert only 5–7 cm (shorter urethra)
Lignocaine gelApply to catheter tip only (smaller volume)
LandmarksLocate urethral meatus correctly — between clitoris (above) and vaginal opening (below)
Common errorAccidentally inserting into vagina — leave it in as a landmark, use new catheter

Balloon Inflation — Critical Points

Detail
Volume10 ml sterile water (not saline — crystallises in valve)
If patient feels pain on inflationBalloon may be in urethra — deflate immediately, advance further
Never inflate before urine flowsUrethral rupture risk
Always advance to bifurcation firstPrevents inflation in urethra

Complications — Examiner Will Ask

ComplicationCause / Note
ParaphimosisForeskin not replaced after procedure — tight ring, vascular compromise
UTI / CAUTIMost common complication overall — aseptic technique prevents this
Urethral traumaForced insertion, balloon inflated in urethra
False passageRepeated forceful attempts in stricture
HaematuriaMucosal trauma
BypassingCatheter too small or blocked
Bladder spasmCommon post-catheter — antispasmodics (oxybutynin)

OSCE Scoring Points — Don't Miss

  • ✅ Introduce + consent
  • ✅ Sterile technique throughout — gloves, drape, aseptic handling
  • ✅ Non-dominant hand = contaminated hand rule
  • ✅ Lignocaine gel and wait 3–5 mins
  • ✅ Advance to bifurcation before inflating balloon
  • ✅ Confirm position by urine flow + gentle traction
  • ✅ Replace foreskin — examiners specifically check this
  • ✅ Bag below bladder level
  • ✅ Document

One-Line Mnemonics

"Clean, Lube, Insert, Urine, Inflate, Secure, Bag Down, Foreskin Back"

What's next? NGT insertion, IV cannula, wound dressing, suturing, ABG, or history taking?

Foley cathere

Foley Catheter — Complete OSCE Guide


What is a Foley Catheter?

A Foley catheter is a soft, flexible, indwelling urinary catheter with a self-retaining balloon at the tip that holds it in place inside the bladder.
Named after Frederic Foley who designed it in the 1930s.

Anatomy of a Foley Catheter

Tip (drainage holes)
        |
    BALLOON (inflated inside bladder)
        |
    Catheter shaft
        |
    Y-junction (bifurcation)
       / \
Drainage  Balloon
  port     port
  (to bag) (10 ml water)
3 lumens in a standard 2-way Foley:
  • Lumen 1 — urine drainage
  • Lumen 2 — balloon inflation channel
3-way Foley (for haematuria/irrigation):
  • Lumen 3 — irrigation fluid inlet

Types of Foley Catheters

TypeLumensUse
2-way Foley2Standard drainage
3-way Foley3Continuous bladder irrigation (haematuria, post-TURP)
Coude tip2Enlarged prostate, urethral stricture (curved tip)
Silicone Foley2Long-term use (>4 weeks), latex allergy
Latex Foley2Short-term use

Materials

MaterialDurationNote
LatexShort-term (<2 weeks)Cheap, flexible
Latex + silicone coatedMedium (2–4 weeks)Reduces encrustation
100% SiliconeLong-term (>4 weeks)Preferred for long-term, latex allergy
Hydrogel coatedLong-termMost biocompatible, least infection risk

French (Fr) Size Guide

1 French = 0.33 mm diameter
PatientSizeColour code
Adult male (standard)14 FrGreen
Adult female (standard)12–14 FrGreen
Haematuria / clots18–22 Fr (3-way)—
Child6–10 Fr—
Post-urological surgeryAs per surgeon—
Rule: Use the smallest size that drains adequately — larger sizes cause more urethral trauma and bypassing

Balloon Volume

SituationVolume
Standard adult10 ml sterile water
Paediatric3–5 ml
Post-TURP (haemostasis)30–50 ml (traction catheter)
Never useSaline (crystallises in valve), air (burst risk)

How the Balloon Works

  • Balloon is located just proximal to the drainage holes at the tip
  • When inflated inside the bladder → sits at the bladder neck
  • Gentle traction confirms correct position
  • If pain on inflation → deflate immediately — balloon is in urethra

Inserting vs Removing

Insertion

  • Advance catheter to bifurcation before inflating
  • Confirm urine flow first
  • Then inflate with 10 ml sterile water
  • Gentle pull back until resistance = balloon seated at bladder neck

Removal

  1. Explain procedure to patient
  2. Place absorbent pad under patient
  3. Attach syringe to balloon port — aspirate all 10 ml (do not cut the tube!)
  4. Ask patient to take a deep breath
  5. Withdraw catheter smoothly in one motion
  6. Check catheter is intact
  7. Note time of removal — patient should void within 6–8 hours
  8. If no void in 6–8 hours → check for retention, consider re-catheterisation

Catheter Care (Maintenance)

Care pointDetails
Meatal hygieneClean with soap and water twice daily
Bag positionAlways below bladder level — gravity drainage
Bag never on floorInfection risk
Closed systemNever disconnect bag unnecessarily
Change frequencyLatex: every 2 weeks | Silicone: every 4–6 weeks
Fluid intakeEncourage 2–3 L/day — flushes bladder, prevents blockage
Avoid kinkingSecure to inner thigh — prevents traction and kinking

Troubleshooting — Common Problems

ProblemCauseAction
No urine drainingBlocked, kinked, misplacedCheck for kinks → bladder washout → reposition → change catheter
Bypassing (leaking around catheter)Catheter too small, bladder spasm, blockageCheck size, treat spasm (oxybutynin), clear blockage
Balloon won't deflateValve blockedTry different syringe, cut inflation port as last resort, urology referral
HaematuriaTrauma, UTI, underlying pathologyCheck cause, increase fluids, 3-way if heavy
CAUTIBreak in aseptic techniqueUrine C&S, appropriate antibiotics, consider removal
ParaphimosisForeskin not replaced after insertionImmediate manual reduction, ice, urology if fails

CAUTI Prevention (Catheter-Associated UTI)

Most common hospital-acquired infection — examiners love this.
Bundle of care:
  • ✅ Insert only when indicated
  • ✅ Strict aseptic technique on insertion
  • ✅ Maintain closed drainage system
  • ✅ Remove as early as possible — "if in doubt, take it out"
  • ✅ Daily review of need
  • ✅ Perineal hygiene
  • ✅ Adequate hydration
  • ❌ Never routine bladder washouts
  • ❌ Never antibiotics just because catheter is in (treat only symptomatic UTI)

Key OSCE Points Summary

PointDetail
Advance to bifurcationBefore inflating balloon
Balloon volume10 ml sterile water
Confirm positionUrine flow + gentle traction
Replace foreskinAlways — paraphimosis prevention
Bag positionBelow bladder, never on floor
First void after removalWithin 6–8 hours
Long-term materialSilicone, not latex
Largest size for clots3-way 18–22 Fr

One Liner for Exam

"Foley = self-retaining 2-way catheter with 10 ml balloon, inserted to bifurcation, confirmed by urine flow, secured by gentle traction, bag always below bladder, foreskin always replaced."

What's next for your OSCE prep? NGT, wound dressing, IV cannula, suturing, ABG, or clinical examination?

Ryle tube

Ryle's Tube (Nasogastric Tube) — Complete OSCE Guide


What is a Ryle's Tube?

A Ryle's tube is a nasogastric tube (NGT) — a long, flexible tube passed through the nose → nasopharynx → oesophagus → stomach.
Named after John Alfred Ryle, British physician.

Indications

CategoryExamples
FeedingUnconscious patient, dysphagia, facial trauma, neurological disease
Gastric decompressionBowel obstruction, post-surgery, paralytic ileus
Drug administrationWhen oral route not possible
Gastric lavagePoisoning/overdose
Gastric aspirationDiagnosis (bile, blood), pre-surgery
Gastric analysisAcid secretion studies

Contraindications

AbsoluteRelative
Basal skull fracture (risk of intracranial placement)Coagulation disorders
Severe maxillofacial traumaOesophageal varices
Oesophageal obstruction / perforationRecent oesophageal surgery
Choanal atresiaUncooperative patient
⚠️ Basal skull fracture = absolute contraindication — OSCE favourite. Signs: raccoon eyes, Battle's sign, CSF rhinorrhoea/otorrhoea, haemotympanum. Use oral gastric tube (OGT) instead.

Equipment

  • Ryle's tube (size 14–16 Fr adult, 8–10 Fr child)
  • Lubricant (KY jelly / lignocaine gel)
  • Gloves (non-sterile)
  • 20 ml syringe
  • Litmus paper / pH paper
  • Stethoscope
  • Tape (to secure)
  • Glass of water + straw (if patient conscious and can swallow)
  • Kidney tray
  • Tissues

Sizes

PatientSize
Adult14–16 Fr
Child8–12 Fr
Neonate5–6 Fr
Gastric lavage (adult)36–40 Fr (large bore Ewald tube)

Measuring the Length to Insert

NEX Measurement:
N = Nose tip
E = Earlobe
X = Xiphisternum
Measure from nose tip → earlobe → xiphisternum
Typical length in adults: 45–55 cm (mark with tape before insertion)

Step-by-Step Procedure

Preparation

  1. Introduce yourself, explain procedure, obtain consent
  2. Sit patient upright at 45–90° (reduces aspiration risk)
  3. Ask about nasal problems — use more patent nostril
  4. Wash hands, wear gloves
  5. Measure NEX length, mark tube with tape
  6. Lubricate distal 10–15 cm of tube with KY jelly / lignocaine gel

Insertion

  1. Tilt patient's head slightly forward (chin to chest — closes airway, opens oesophagus)
  2. Insert tube through nostril, aiming straight back (not upward — floor of nose is horizontal)
  3. Advance gently along floor of nasal passage
  4. When tube reaches nasopharynx (~10 cm) — patient may gag
  5. Ask conscious patient to swallow repeatedly (sip water if able) — this closes the epiglottis and guides tube into oesophagus
  6. Advance tube with each swallow until marked length reached
  7. Stop immediately if — persistent coughing, cyanosis, respiratory distress, unable to speak (tube in trachea)

Confirmation of Position (Most Important)

  1. Aspirate gastric contents with syringe
  2. Test aspirate with pH paper — pH ≤ 5.5 confirms gastric position
  3. Auscultation method (less reliable but commonly tested in OSCE) — inject 20 ml air with syringe while auscultating epigastrium with stethoscope — hear gurgling/whooshing sound
⚠️ CXR is the GOLD STANDARD for confirmation before feeding — mandatory in unconscious patients

Securing

  1. Secure tube to nose with tape (avoid pressure on nostril — necrosis risk)
  2. Mark tube at nostril entry point with marker pen
  3. Connect to drainage bag or spigot (plug)

Documentation

  1. Document: tube size, length inserted, confirmation method, aspirate pH, patient tolerance

Confirming Position — Methods Ranked

MethodReliabilityWhen to use
pH of aspirate ≤5.5✅ GoodRoutine, preferred bedside method
CXR✅✅ Gold standardUnconscious, before first feed, any doubt
Auscultation (whoosh test)⚠️ Unreliable aloneOSCE demo only — not sufficient alone in practice
Submerge in water❌ UnreliableOutdated — do not use
CO2 detector✅ GoodConfirms tracheal vs oesophageal placement
Examiner key point: "Whoosh test alone is NOT sufficient to confirm position before feeding."

What pH Values Mean

pHInterpretation
≤5.5Gastric — safe to feed
5.5–6.0Borderline — confirm with CXR
>6.0Respiratory or oesophageal — do NOT feed, reposition
Unable to aspirateReposition tube, try again

Complications

ComplicationDetails
Pulmonary aspirationTube in bronchus — most dangerous. Always confirm position.
Intracranial placementIn basal skull fracture — always check for contraindications first
Oesophageal perforationForced insertion
EpistaxisNasal mucosal trauma
SinusitisLong-term NGT — change nostril
Pressure necrosisNostril — secure correctly, avoid tension
Aspiration pneumoniaIf feeding without confirming position
Tube coiling in pharynxVisible on CXR — reinsert

Tube Feeding — Key Points

PointDetail
Head position during feeding30–45° elevated — reduces aspiration
Check residual volume before each feed>200–250 ml → hold feed, reassess
Flush before and after each feed20–30 ml water — prevents blockage
Change tubeEvery 2–4 weeks (latex), 4–6 weeks (polyurethane)
Alternate nostrilsOn each change

Removing the NGT

  1. Explain procedure
  2. Place tissue/kidney tray near face
  3. Remove securing tape
  4. Ask patient to take a deep breath and hold
  5. Pinch tube (prevents dripping) and withdraw in one smooth swift motion
  6. Check tube is intact

OSCE Examiner Favourite Questions

Q: How do you confirm NGT position?
Aspirate → pH ≤5.5. If doubt → CXR. Never feed on auscultation alone.
Q: What is the absolute contraindication?
Basal skull fracture.
Q: Patient starts coughing during insertion — what do you do?
Stop immediately. Withdraw tube. Allow patient to recover. Check position before proceeding.
Q: Patient is unconscious — how do you guide the tube?
Flex neck forward, advance with each ventilator cycle or manually flex neck. Confirm with CXR before any feeding.

Memory Aid

"Nose → Ear → Xiphoid = Length. pH ≤5.5 = Safe. CXR = Gold Standard. Skull fracture = Stop."

Quick Comparison — Ryle's Tube vs Foley Catheter

Ryle's TubeFoley Catheter
RouteNasal → StomachUrethra → Bladder
Confirm positionpH paper / CXRUrine flow + traction
Secure withTape to noseBalloon 10 ml water
Key complicationPulmonary aspirationParaphimosis / CAUTI
Key contraindicationBasal skull fractureUrethral injury

What's next? IV cannulation, wound dressing, suturing, ABG, or clinical examination stations?

Cpr

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.

I have exam

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.