List of top 30 oral antibiotics in general practice in india with famous brand names and uses in detail

Reading File
Searching the Web

top oral antibiotics general practice India brand names 2024

Finding Sources
Finding Sources
Searching the Web

commonly prescribed oral antibiotics India brand names amoxicillin azithromycin cefixime doxycycline metronidazole uses

I now have enough information to compile a thorough, accurate list. Let me deliver the complete answer:

Top 30 Oral Antibiotics in Indian General Practice

PENICILLINS


1. Amoxicillin

Class: Aminopenicillin Famous Indian Brands: Mox (Ranbaxy), Novamox (Cipla), Amoxil (GSK), Trimox Usual Dose: 250-500 mg TDS for 5-7 days Uses:
  • Acute otitis media (ear infections) - first line
  • Acute sinusitis and pharyngitis (strep throat)
  • Community-acquired pneumonia (mild)
  • Dental infections and prophylaxis
  • Helicobacter pylori eradication (triple therapy)
  • Urinary tract infections (uncomplicated, in pregnancy)
  • Typhoid (mild outpatient cases - per NCDC India guidelines)

2. Amoxicillin + Clavulanic Acid (Co-amoxiclav)

Class: Aminopenicillin + Beta-lactamase inhibitor Famous Indian Brands: Augmentin (GSK), Clavam (Alkem), Moxikind-CV (Mankind), Amoxyclav (Cipla), Potklav Usual Dose: 625 mg (500+125) BD or TDS; 1g BD for severe infections Uses:
  • Beta-lactamase-producing organism infections (resistant URTI, LRTI)
  • Acute exacerbations of chronic bronchitis (AECB)
  • Bite wounds (human/animal) - drug of choice
  • Diabetic foot infections (mild to moderate)
  • Skin and soft tissue infections (SSTI)
  • Sinusitis, otitis media when first-line amoxicillin fails
  • Community-acquired pneumonia with beta-lactam resistance

3. Ampicillin

Class: Aminopenicillin Famous Indian Brands: Roscillin (Ranbaxy), Penbritin (GSK) Usual Dose: 250-500 mg QID Uses:
  • Historically used for respiratory, urinary, enteric infections
  • Now largely replaced by amoxicillin due to better oral bioavailability
  • Listeria infections in immunocompromised
  • Mostly used parenterally in modern practice

4. Cloxacillin

Class: Isoxazolyl penicillin (penicillinase-resistant) Famous Indian Brands: Clox (Cipla), Bioclox (Alkem) Usual Dose: 250-500 mg QID (empty stomach) Uses:
  • Staphylococcal infections (methicillin-sensitive, MSSA)
  • Impetigo, boils, carbuncles, cellulitis caused by Staphylococcus
  • Osteomyelitis (staphylococcal, oral step-down after IV)
  • Post-surgical wound infections

CEPHALOSPORINS


5. Cephalexin (Cefalexin)

Class: 1st Generation Cephalosporin Famous Indian Brands: Sporidex (Ranbaxy/Sun), Ibilex (Cipla), Keflex Usual Dose: 250-500 mg QID for 7-10 days Uses:
  • Skin and soft tissue infections (SSTIs)
  • Mild cellulitis, folliculitis, furuncles
  • Streptococcal pharyngitis (penicillin-allergic patients)
  • Urinary tract infections (uncomplicated)
  • Dental prophylaxis before procedures
  • Post-surgical prophylaxis (oral)

6. Cefadroxil

Class: 1st Generation Cephalosporin Famous Indian Brands: Droxyl (Cipla), Cefadrox (Ranbaxy), Odroxil (Alkem) Usual Dose: 500 mg-1g BD Uses:
  • Skin and soft tissue infections
  • Streptococcal pharyngitis and tonsillitis
  • Urinary tract infections (uncomplicated cystitis)
  • Less frequent dosing advantage (BD) over cephalexin

7. Cefuroxime Axetil

Class: 2nd Generation Cephalosporin Famous Indian Brands: Ceftin (Alkem), Zinnat (GSK), Stafurox, Supacef Oral Usual Dose: 250-500 mg BD for 7-10 days Uses:
  • Community-acquired pneumonia (CAP)
  • Acute exacerbation of chronic bronchitis (AECB)
  • Urinary tract infections (complicated)
  • Otitis media and sinusitis (when first-line fails)
  • Lyme disease (early localized, per international guidelines)
  • Skin infections with mixed flora

8. Cefixime

Class: 3rd Generation Cephalosporin Famous Indian Brands: Taxim-O (Alkem), Zifi (FDC), Cefix (Cipla), Orcef (Orchid), Mahacef (Macleods) Usual Dose: 200 mg BD or 400 mg OD for 5-14 days Uses:
  • Typhoid/enteric fever (outpatient, NCDC India guideline - 14 days)
  • Urinary tract infections (uncomplicated and complicated)
  • Gonorrhea (uncomplicated urogenital - single 400 mg dose)
  • Respiratory tract infections (bronchitis, pneumonia - step-down)
  • Acute bacterial diarrhea (Shigella, Salmonella)
  • One of the most widely prescribed oral antibiotics in India

9. Cefpodoxime Proxetil

Class: 3rd Generation Cephalosporin Famous Indian Brands: Cepodem (Wockhardt), Cefpod (Cipla), Pedcef, Cefoprox (Torrent) Usual Dose: 100-200 mg BD for 5-10 days Uses:
  • Community-acquired pneumonia
  • Acute sinusitis and otitis media
  • Urinary tract infections
  • Pharyngitis/tonsillitis
  • Gonorrhea (uncomplicated)

10. Cefdinir

Class: 3rd Generation Cephalosporin Famous Indian Brands: Cednir (Cipla), Omnicef, Dinir Usual Dose: 300 mg BD or 600 mg OD for 5-10 days Uses:
  • Community-acquired pneumonia
  • Sinusitis, otitis media, pharyngitis
  • Skin and soft tissue infections
  • Good oral bioavailability and palatability (useful in children)

MACROLIDES


11. Azithromycin

Class: Macrolide (azalide) Famous Indian Brands: Azithral (Alembic), Zithromax (Pfizer), Azee (Cipla), Aziwin (Win Medicare), Atm (Alkem) Usual Dose: 500 mg OD for 3 days or 1g single dose; Z-pack regimen Uses:
  • Community-acquired pneumonia (atypical - Mycoplasma, Chlamydophila, Legionella)
  • Pharyngitis and tonsillitis (penicillin-intolerant)
  • Sexually transmitted infections: Chlamydia (1g single dose), Chancroid
  • Acute bacterial exacerbation of COPD
  • Enteric fever/Typhoid (azithromycin alternative per NCDC)
  • Cholera (in children and pregnant women)
  • Traveler's diarrhea (Campylobacter - drug of choice)
  • Pertussis (whooping cough)
  • MAC prophylaxis in HIV

12. Clarithromycin

Class: Macrolide Famous Indian Brands: Claribid (Cipla), Klaricid (Abbott), Clarimac (Macleods), Biaxin Usual Dose: 250-500 mg BD for 7-14 days Uses:
  • H. pylori eradication (triple/quadruple therapy with PPI + amoxicillin)
  • Community-acquired pneumonia (atypical organisms)
  • Chronic bronchitis exacerbation
  • Sinusitis and otitis media
  • Skin and soft tissue infections
  • MAC (Mycobacterium avium complex) prophylaxis and treatment
  • Pertussis

13. Erythromycin

Class: Macrolide (original) Famous Indian Brands: Erythrocin (Abbott), Althrocin (Alembic), Eryspan (Elder) Usual Dose: 250-500 mg QID for 7-14 days Uses:
  • Streptococcal/pneumococcal infections in penicillin-allergic patients
  • Chlamydial infections (lower efficacy, now replaced by azithromycin)
  • Pertussis
  • Diphtheria (carriers)
  • Campylobacter enteritis
  • Acne vulgaris (oral, though tetracyclines preferred)
  • Prokinetic: low-dose erythromycin for gastroparesis

FLUOROQUINOLONES


14. Ciprofloxacin

Class: 2nd Generation Fluoroquinolone Famous Indian Brands: Cifran (Ranbaxy/Sun), Ciplox (Cipla), Ciprobid (Cadila), Quintor (Alkem) Usual Dose: 250-750 mg BD for 5-14 days Uses:
  • Urinary tract infections (complicated, pyelonephritis - most common use)
  • Enteric fever (typhoid) - though resistance increasing in India
  • Acute bacterial diarrhea (traveler's diarrhea, Shigella)
  • Cholera (500 mg BD x 3 days)
  • Prostatitis (chronic bacterial - drug of choice, 4 weeks)
  • Anthrax post-exposure prophylaxis
  • Bone and joint infections (oral step-down)
  • Gram-negative organism infections

15. Ofloxacin

Class: 2nd Generation Fluoroquinolone Famous Indian Brands: Zanocin (Ranbaxy), Oflin (Cipla), Oflox (Cipla), Oflomac (Macleods) Usual Dose: 200-400 mg BD for 7-14 days Uses:
  • Urinary tract infections
  • Gonorrhea (single dose 400 mg - though resistance increasing)
  • Pelvic inflammatory disease (PID)
  • Acute bacterial bronchitis
  • Typhoid fever
  • Skin and soft tissue infections
  • Tuberculosis (second-line, in MDR-TB regimens)

16. Levofloxacin

Class: 3rd Generation Fluoroquinolone (respiratory quinolone) Famous Indian Brands: Lox (Cipla), Levobact (Ranbaxy), Levoflox (Sun), Glevo (Glenmark), Lezyncin Usual Dose: 500-750 mg OD for 5-14 days Uses:
  • Community-acquired pneumonia (CAP) - "respiratory quinolone"
  • Healthcare-associated pneumonia (oral step-down)
  • Complicated UTI and pyelonephritis
  • Acute sinusitis and AECB when other agents fail
  • Prostatitis (chronic bacterial)
  • MDR tuberculosis (second-line agent)
  • Skin and soft tissue infections (complicated)

17. Moxifloxacin

Class: 4th Generation Fluoroquinolone Famous Indian Brands: Avelox (Bayer), Moxiford (Alkem), Moxif (Sun), Moxicip (Cipla) Usual Dose: 400 mg OD for 5-10 days Uses:
  • Community-acquired pneumonia (excellent atypical and pneumococcal coverage)
  • Acute bacterial sinusitis
  • Acute exacerbation of chronic bronchitis
  • Skin and soft tissue infections
  • Anaerobic coverage (no dose adjustment for renal impairment needed)
  • Note: Not used for UTI (inadequate urinary concentration)

TETRACYCLINES


18. Doxycycline

Class: Tetracycline (2nd generation) Famous Indian Brands: Doxicip (Cipla), Doxt (Alkem), Vibact (Wockhardt), Biodoxi Usual Dose: 100 mg BD (loading 200 mg first dose) for 7-14 days Uses:
  • Atypical pneumonia (Mycoplasma, Chlamydophila, Q fever)
  • Rickettsial diseases (scrub typhus - drug of choice in India, Rocky Mountain spotted fever)
  • Malaria prophylaxis (travel, with chloroquine)
  • Brucellosis (combination with rifampicin or streptomycin)
  • Cholera (300 mg single dose)
  • Leptospirosis (mild cases)
  • Acne vulgaris (long-term, anti-inflammatory mechanism)
  • Pelvic inflammatory disease (combination therapy)
  • Chlamydial infections (100 mg BD x 7 days)
  • Lyme disease

19. Minocycline

Class: Tetracycline (2nd generation) Famous Indian Brands: Minolox (Cipla), Minoz (Sun), Minocin Usual Dose: 100 mg BD for 7-14 days Uses:
  • Acne vulgaris (oral acne therapy - widely used in India)
  • Mycobacterium marinum infections
  • MRSA skin infections (community-acquired MRSA - useful orally)
  • Chlamydial infections
  • Nocardiosis

NITROIMIDAZOLES


20. Metronidazole

Class: Nitroimidazole Famous Indian Brands: Flagyl (Abbott), Metrogyl (J.B. Chemical), Aldezole, Metronex Usual Dose: 400-500 mg TDS for 5-14 days Uses:
  • Amoebic dysentery and liver abscess - drug of choice
  • Giardiasis (tinidazole now preferred, but metronidazole widely used)
  • Bacterial vaginosis (BV) - drug of choice
  • Anaerobic bacterial infections (dental, intra-abdominal, pelvic)
  • Clostridium difficile colitis (though oral vancomycin now preferred)
  • H. pylori eradication (as part of triple therapy)
  • Trichomoniasis (2g single dose)
  • Pre-surgical bowel preparation

21. Tinidazole

Class: Nitroimidazole (2nd generation) Famous Indian Brands: Tiniba (Cipla), Fasigyn (Pfizer), Tini (Alkem) Usual Dose: 2g single dose or 500 mg BD for 5-7 days Uses:
  • Giardiasis (2g single dose - shorter course than metronidazole)
  • Amoebiasis (intestinal and liver abscess)
  • Trichomoniasis
  • Bacterial vaginosis
  • Anaerobic infections
  • H. pylori eradication (quadruple therapy)
  • Better tolerated than metronidazole (less nausea)

22. Secnidazole

Class: Nitroimidazole (3rd generation) Famous Indian Brands: Secnil (Cipla), Sindose (Sun), Seczol (Ranbaxy) Usual Dose: 2g single dose (for most indications) Uses:
  • Amoebiasis, giardiasis (single-dose convenience)
  • Bacterial vaginosis
  • Trichomoniasis
  • Widely prescribed in India due to single-dose completion (better compliance)

SULFONAMIDES / TRIMETHOPRIM


23. Cotrimoxazole (Trimethoprim + Sulfamethoxazole / TMP-SMX)

Class: Dihydrofolate reductase inhibitor + Sulfonamide Famous Indian Brands: Bactrim (Roche), Septran (GSK), Cotrim (Cipla) Usual Dose: 960 mg (800+160 mg) BD for 5-14 days Uses:
  • Urinary tract infections (uncomplicated - still used where E. coli sensitive)
  • Pneumocystis jirovecii pneumonia (PCP) prophylaxis and treatment in HIV - drug of choice
  • Toxoplasmosis prophylaxis in HIV
  • Nocardiosis (long-term)
  • Traveler's diarrhea (where susceptibility confirmed)
  • Brucellosis
  • Listeria (alternative to ampicillin)
  • Paediatric ENT infections where resistance low

LINCOSAMIDES


24. Clindamycin

Class: Lincosamide Famous Indian Brands: Dalacin C (Pfizer), Clinmycin (Cipla), Clincin (Glenmark) Usual Dose: 150-300 mg QID (severe: 450 mg QID) for 7-14 days Uses:
  • Anaerobic bacterial infections (dental/oral, intra-abdominal, pelvic)
  • Skin and soft tissue infections (SSTI) including diabetic foot
  • Osteomyelitis (oral step-down, excellent bone penetration)
  • Community-acquired MRSA skin infections (alongside TMP-SMX)
  • Aspiration pneumonia (anaerobic coverage)
  • Bacterial vaginosis (oral alternative)
  • Toxoplasma encephalitis (with pyrimethamine)
  • Dental prophylaxis (in penicillin-allergic patients)

NITROFURANS


25. Nitrofurantoin

Class: Nitrofuran Famous Indian Brands: Furadantin (Norwich), Macrobid, Niftran (Alkem), Furazolidone-related preparations Usual Dose: 50-100 mg QID (macrocrystals: 100 mg BD - Macrobid) Uses:
  • Uncomplicated lower urinary tract infections (UTI/cystitis) - concentrated only in urine
  • UTI prophylaxis in recurrent cases (50 mg OD long-term)
  • Particularly useful in pregnancy (2nd trimester UTI)
  • NOT used for upper UTI (pyelonephritis) - insufficient tissue levels

COMBINATIONS (VERY COMMON IN INDIA)


26. Ofloxacin + Ornidazole

Class: Fluoroquinolone + Nitroimidazole combination Famous Indian Brands: Oflomac-M (Macleods), Zanocin-OZ (Ranbaxy), Norflox-OZ, Oflotas-OZ Usual Dose: 200+500 mg BD for 5-7 days Uses:
  • Mixed aerobic-anaerobic infections of GI and genital tract
  • Bacterial diarrhea with dysentery
  • Pelvic inflammatory disease (PID)
  • One of the most frequently prescribed combinations in Indian general practice
  • Note: Fixed-dose combinations are controversial due to broad-spectrum overuse

27. Norfloxacin

Class: 2nd Generation Fluoroquinolone Famous Indian Brands: Norflox (Cipla), Uroflox (Elder), Norbactin (Ranbaxy) Usual Dose: 400 mg BD for 3-7 days (empty stomach) Uses:
  • Uncomplicated urinary tract infections (concentrated in urine)
  • Traveler's diarrhea
  • GI infections (Shigella, Salmonella, E. coli)
  • Note: Less systemic bioavailability; largely being replaced by ciprofloxacin and cefixime

OTHER IMPORTANT ANTIBIOTICS


28. Doxycycline + Tinidazole / Azithromycin Combinations

Famous Indian Brands: Used widely as combination prescriptions; Doxy-1 (single-dose STI regimens) (Most prescribed as separate drugs together, not fixed combinations)

28. Linezolid

Class: Oxazolidinone Famous Indian Brands: Linox (Cipla), Linospan (Ranbaxy), Zyvox (Pfizer), Linezolid-600 Usual Dose: 600 mg BD for 10-14 days Uses:
  • MRSA (Methicillin-resistant Staphylococcus aureus) skin and soft tissue infections
  • Hospital-acquired pneumonia with MRSA (oral step-down)
  • VRE (Vancomycin-resistant Enterococcus) infections
  • MDR tuberculosis (second-line in DR-TB regimens)
  • Diabetic foot osteomyelitis (MRSA, excellent bone bioavailability)
  • Nosocomial infections when glycopeptides unavailable

29. Doxycycline / Azithromycin for Sexually Transmitted Infections

Separate brands combined in practice: Doxicip + Fasigyn / Azithral 1g
(For completeness, the 29th slot covers the STI/tropical disease combination regimens used in Indian OPD practice)

29. Rifaximin

Class: Rifamycin derivative (poorly absorbed - acts locally in gut) Famous Indian Brands: Xifaxan (Lupin), Rcifax (Cipla), Rifagut (Sun), Normix Usual Dose: 200 mg TDS or 550 mg BD for 3-14 days Uses:
  • Traveler's diarrhea (non-invasive E. coli)
  • Hepatic encephalopathy prevention (long-term, 550 mg BD)
  • Irritable bowel syndrome with diarrhea (IBS-D)
  • Small intestinal bacterial overgrowth (SIBO)
  • Widely used in India for acute GI infections

30. Cefuroxime / Cefprozil / Cefaclor (2nd Gen oral cephalosporins) - represented by:

30. Cefprozil

Class: 2nd Generation Cephalosporin Famous Indian Brands: Cefzil (Bristol-Myers Squibb), Procef (Mankind), Rezol Usual Dose: 250-500 mg BD for 7-10 days Uses:
  • Acute otitis media and sinusitis
  • Community-acquired pneumonia (mild)
  • Skin and soft tissue infections
  • Pharyngitis/tonsillitis
  • Upper and lower RTIs in children and adults
  • Broader anaerobe coverage than cephalexin

Quick Reference Summary Table

#DrugTop India BrandClassPrimary Use
1AmoxicillinMox, NovamoxAminopenicillinRTI, ENT, dental
2Amoxicillin-ClavulanateAugmentin, ClavamPenicillin + BLIResistant RTI, bite wounds
3AmpicillinRoscillinAminopenicillinMostly parenteral now
4CloxacillinClox, BiocloxPenicillinase-resistantMSSA skin/bone
5CephalexinSporidex, Ibilex1st-Gen CephalosporinSSTI, UTI, prophylaxis
6CefadroxilDroxyl, Odroxil1st-Gen CephalosporinPharyngitis, SSTI, UTI
7Cefuroxime axetilZinnat, Ceftin2nd-Gen CephalosporinCAP, AECB, complicated UTI
8CefiximeTaxim-O, Zifi3rd-Gen CephalosporinTyphoid, UTI, gonorrhea
9CefpodoximeCepodem, Cefpod3rd-Gen CephalosporinCAP, sinusitis, UTI
10CefdinirCednir, Omnicef3rd-Gen CephalosporinRTI, otitis media
11AzithromycinAzithral, AzeeMacrolideAtypical pneumonia, STIs
12ClarithromycinClaribid, KlaricidMacrolideH. pylori, CAP
13ErythromycinErythrocin, AlthrocinMacrolidePenicillin-allergic, acne
14CiprofloxacinCifran, CiploxFluoroquinolone (2G)UTI, typhoid, diarrhea
15OfloxacinZanocin, OfloxFluoroquinolone (2G)UTI, PID, STIs
16LevofloxacinLox, GlevoFluoroquinolone (3G)CAP, complicated UTI
17MoxifloxacinAvelox, MoxifordFluoroquinolone (4G)CAP, sinusitis, AECB
18DoxycyclineDoxicip, DoxtTetracyclineScrub typhus, acne, atypical
19MinocyclineMinoz, MinoloxTetracyclineAcne, MRSA, rickettsia
20MetronidazoleFlagyl, MetrogylNitroimidazoleAmoebiasis, BV, anaerobes
21TinidazoleTiniba, FasigynNitroimidazoleGiardia, amoebiasis, BV
22SecnidazoleSecnil, SindoseNitroimidazoleSingle-dose amoebiasis, BV
23CotrimoxazoleSeptran, BactrimSulfonamide+TMPPCP, UTI, nocardia
24ClindamycinDalacin C, ClinmycinLincosamideDental, MRSA, osteomyelitis
25NitrofurantoinFuradantin, NiftranNitrofuranUncomplicated lower UTI
26Ofloxacin+OrnidazoleZanocin-OZ, Oflomac-MFQ+Nitroimidazole comboGI+Pelvic mixed infections
27NorfloxacinNorflox, UrofloxFluoroquinolone (2G)Uncomplicated UTI, diarrhea
28LinezolidLinox, ZyvoxOxazolidinoneMRSA, MDR-TB, VRE
29RifaximinRcifax, RifagutRifamycin (non-absorbed)Traveler's diarrhea, HE, SIBO
30CefprozilProcef, Rezol2nd-Gen CephalosporinRTI, otitis media, pharyngitis

Key Notes for Indian Practice

  1. Resistance patterns in India: E. coli resistance to fluoroquinolones is very high (>50-70% in many regions). Cefixime and nitrofurantoin are preferred for uncomplicated UTI. NCDC National Treatment Guidelines recommend empirical antibiotic choices based on local resistance data.
  2. Typhoid treatment in India: Due to fluoroquinolone resistance, cefixime (oral, 14 days) or azithromycin are now preferred over ciprofloxacin for outpatient enteric fever management.
  3. Scrub typhus: Extremely common in India; doxycycline remains the drug of choice.
  4. Fixed-dose combinations (FDCs): Combinations like Ofloxacin+Ornidazole are widely used in India but criticized in antibiotic stewardship guidelines. They remain commercially very popular.
  5. Amoxicillin+Clavulanate (Augmentin): Has the highest number of branded formulations (~102) in the Indian market, reflecting widespread prescribing.
  6. Always complete the full course and prescribe based on culture sensitivity when possible to reduce antimicrobial resistance (AMR), which is a major public health crisis in India.
Disclaimer: This information is for educational reference. All antibiotic prescriptions must be based on clinical judgment, local resistance patterns, patient allergy history, and where possible, culture and sensitivity reports.

Create a quick reference PDF guide for antibiotic selection by infection type

Reading File
Running Command

mkdir -p /tmp/workspace/antibiotic-guide && ls /tmp/workspace/

Writing File

~/antibiotic-guide/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor
import datetime

# ── Color Palette ──────────────────────────────────────────────────────────────
DARK_NAVY    = HexColor('#1a2e4a')
MED_BLUE     = HexColor('#2563eb')
LIGHT_BLUE   = HexColor('#dbeafe')
ACCENT_TEAL  = HexColor('#0d9488')
TEAL_LIGHT   = HexColor('#ccfbf1')
ACCENT_RED   = HexColor('#dc2626')
RED_LIGHT    = HexColor('#fee2e2')
ACCENT_AMBER = HexColor('#d97706')
AMBER_LIGHT  = HexColor('#fef3c7')
ACCENT_GREEN = HexColor('#16a34a')
GREEN_LIGHT  = HexColor('#dcfce7')
ACCENT_PURPLE= HexColor('#7c3aed')
PURPLE_LIGHT = HexColor('#ede9fe')
HEADER_BG    = HexColor('#0f172a')
ROW_ALT      = HexColor('#f8fafc')
ROW_NORM     = HexColor('#ffffff')
BORDER_GREY  = HexColor('#cbd5e1')
TEXT_DARK    = HexColor('#1e293b')
TEXT_MED     = HexColor('#475569')
TEXT_LIGHT   = HexColor('#94a3b8')
ORANGE_LIGHT = HexColor('#ffedd5')
ACCENT_ORANGE= HexColor('#ea580c')

W, H = A4

# ── Page numbering canvas ──────────────────────────────────────────────────────
class NumberedCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        canvas.Canvas.__init__(self, *args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_footer(num_pages)
            canvas.Canvas.showPage(self)
        canvas.Canvas.save(self)

    def draw_page_footer(self, page_count):
        page_num = self._pageNumber
        self.setFillColor(HEADER_BG)
        self.rect(0, 0, W, 22, fill=1, stroke=0)
        self.setFillColor(colors.white)
        self.setFont('Helvetica', 7.5)
        self.drawString(20, 7, 'Antibiotic Quick Reference Guide – India General Practice')
        self.drawRightString(W - 20, 7, f'Page {page_num} of {page_count}')
        self.setStrokeColor(MED_BLUE)
        self.setLineWidth(2)
        self.line(0, 22, W, 22)


def make_header(canvas_obj, doc):
    """Draw the branded page header."""
    canvas_obj.saveState()
    # Header background
    canvas_obj.setFillColor(HEADER_BG)
    canvas_obj.rect(0, H - 52, W, 52, fill=1, stroke=0)
    # Accent stripe
    canvas_obj.setFillColor(MED_BLUE)
    canvas_obj.rect(0, H - 55, W, 3, fill=1, stroke=0)
    # Title
    canvas_obj.setFillColor(colors.white)
    canvas_obj.setFont('Helvetica-Bold', 16)
    canvas_obj.drawString(20, H - 32, 'ANTIBIOTIC QUICK REFERENCE GUIDE')
    canvas_obj.setFont('Helvetica', 9)
    canvas_obj.setFillColor(HexColor('#94a3b8'))
    canvas_obj.drawString(20, H - 47, 'India General Practice  |  Selection by Infection Type  |  2025–26')
    canvas_obj.restoreState()


def build_styles():
    styles = getSampleStyleSheet()
    base = dict(fontName='Helvetica', textColor=TEXT_DARK, leading=12)

    section_title = ParagraphStyle('SectionTitle',
        fontName='Helvetica-Bold', fontSize=11,
        textColor=colors.white, leading=14,
        spaceAfter=0, spaceBefore=4)

    sub_note = ParagraphStyle('SubNote',
        fontName='Helvetica-Oblique', fontSize=7.5,
        textColor=TEXT_MED, leading=10)

    cell_body = ParagraphStyle('CellBody',
        fontName='Helvetica', fontSize=8,
        textColor=TEXT_DARK, leading=11, spaceAfter=1)

    cell_bold = ParagraphStyle('CellBold',
        fontName='Helvetica-Bold', fontSize=8.5,
        textColor=DARK_NAVY, leading=11)

    drug_first = ParagraphStyle('DrugFirst',
        fontName='Helvetica-Bold', fontSize=8.5,
        textColor=ACCENT_GREEN, leading=11)

    drug_alt = ParagraphStyle('DrugAlt',
        fontName='Helvetica', fontSize=8,
        textColor=ACCENT_TEAL, leading=11)

    drug_third = ParagraphStyle('DrugThird',
        fontName='Helvetica-Oblique', fontSize=7.5,
        textColor=TEXT_MED, leading=10)

    warn = ParagraphStyle('Warn',
        fontName='Helvetica-Bold', fontSize=7.5,
        textColor=ACCENT_RED, leading=10)

    toc_title = ParagraphStyle('TOCTitle',
        fontName='Helvetica-Bold', fontSize=18,
        textColor=DARK_NAVY, leading=22, alignment=TA_CENTER)

    big_title = ParagraphStyle('BigTitle',
        fontName='Helvetica-Bold', fontSize=28,
        textColor=colors.white, leading=32, alignment=TA_CENTER)

    return {
        'section_title': section_title, 'sub_note': sub_note,
        'cell_body': cell_body, 'cell_bold': cell_bold,
        'drug_first': drug_first, 'drug_alt': drug_alt,
        'drug_third': drug_third, 'warn': warn,
        'toc_title': toc_title, 'big_title': big_title
    }


# ── DATA ───────────────────────────────────────────────────────────────────────
# Format per row:
#  (Infection, First-Line, Alternative, Notes, Duration)

RESPIRATORY_DATA = [
    ('Strep Pharyngitis\n(Group A Strep)',
     'Amoxicillin 500mg TDS\n(Mox, Novamox)',
     'Azithromycin 500mg OD x3d\n(Azithral, Azee)',
     'Penicillin-allergic: Cephalexin\nor Clindamycin',
     '10 days\n(Amox)'),
    ('Acute Otitis Media',
     'Amoxicillin 500mg TDS\n(Mox, Novamox)',
     'Amoxiclav 625mg BD\n(Augmentin, Clavam)',
     'If failed 48–72h or recurrent;\nPenicillin allergic: Cefuroxime',
     '5–7 days'),
    ('Acute Bacterial Sinusitis',
     'Amoxicillin 500mg TDS\n(Novamox, Mox)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Levofloxacin 500mg OD if\nfailed first-line',
     '5–7 days'),
    ('Community-Acquired\nPneumonia (mild, OPD)',
     'Amoxicillin 1g TDS\n(Novamox)\n+ Azithromycin 500mg OD\n(Azithral)',
     'Levofloxacin 500mg OD\n(Glevo, Lox)',
     'Atypicals: Doxycycline 100mg BD\n(Doxicip) as alternative',
     '5–7 days'),
    ('AECB (Chronic Bronchitis)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Levofloxacin 500mg OD\n(Lox, Glevo)',
     'Mild: Azithromycin 500mg OD\nx5d acceptable',
     '5–7 days'),
    ('Atypical Pneumonia\n(Mycoplasma/Chlamydophila)',
     'Azithromycin 500mg OD\n(Azithral, Azee)',
     'Doxycycline 100mg BD\n(Doxicip, Doxt)',
     'Clarithromycin 500mg BD\n(Claribid) if Azithro unavail.',
     '5–7 days'),
]

UTI_DATA = [
    ('Uncomplicated Cystitis\n(Non-pregnant women)',
     'Nitrofurantoin 100mg BD\n(Niftran, Macrobid)',
     'Cefixime 200mg BD\n(Taxim-O, Zifi)',
     'Avoid FQ empirically (high\nresistance in India)',
     '5–7 days\n(Nitrofurantoin)'),
    ('Uncomplicated Cystitis\n(Pregnancy – 2nd trimester)',
     'Nitrofurantoin 100mg BD\n(Niftran)',
     'Cephalexin 500mg QID\n(Sporidex)',
     'Avoid in 1st/3rd trimester;\nAvoid TMP-SMX in 1st trimester',
     '7 days'),
    ('Complicated UTI /\nPyelonephritis (Oral)',
     'Levofloxacin 500mg OD\n(Glevo, Lox)',
     'Ciprofloxacin 500mg BD\n(Cifran, Ciplox)',
     'Start IV if severely ill;\nCefuroxime if FQ-resistant',
     '10–14 days'),
    ('Recurrent UTI\n(Prophylaxis)',
     'Nitrofurantoin 50mg OD\n(Niftran) – post-coital or\nnightly',
     'Cotrimoxazole 480mg OD\n(Septran)',
     'Based on culture sensitivity;\nassess after 6 months',
     '3–6 months'),
    ('Asymptomatic Bacteriuria\n(Pregnancy)',
     'Based on culture sensitivity\n(Cephalexin/Nitrofurantoin)',
     'Amoxicillin 500mg TDS\n(Mox)',
     'Always treat in pregnancy;\nrepeat culture after treatment',
     '7 days'),
]

GI_DATA = [
    ('Typhoid / Enteric Fever\n(Outpatient)',
     'Cefixime 200mg BD\n(Taxim-O, Mahacef)',
     'Azithromycin 500mg OD\n(Azithral)',
     'Avoid FQ – high resistance\nin India; treat 14 days with Cefixime',
     'Cefixime: 14d\nAzithro: 7–10d'),
    ('Acute Bacterial Diarrhea\n(Shigella/Salmonella)',
     'Cefixime 200mg BD\n(Taxim-O, Zifi)',
     'Azithromycin 500mg OD\n(Azithral)',
     'Ciprofloxacin 500mg BD if\nsensitivity confirmed',
     '5 days'),
    ('Amoebic Dysentery /\nLiver Abscess',
     'Metronidazole 400mg TDS\n(Flagyl, Metrogyl)',
     'Tinidazole 2g OD\n(Fasigyn, Tiniba)',
     'Follow with Diloxanide furoate\nfor luminal cysts',
     '7–10 days\n(Metro)'),
    ('Giardiasis',
     'Tinidazole 2g single dose\n(Fasigyn)',
     'Metronidazole 400mg TDS\n(Flagyl)',
     'Secnidazole 2g single dose\n(Secnil) – convenience option',
     'Single dose\n(Tinidazole)'),
    ('Cholera',
     'Azithromycin 1g single dose\n(Azithral) – pregnant/children',
     'Doxycycline 300mg stat\n(Doxicip) – adults',
     'ORS/IV rehydration is primary\ntreatment; antibiotics adjunctive',
     'Single dose'),
    ('H. pylori Eradication\n(Triple Therapy)',
     'Amoxicillin 1g BD +\nClarithromycin 500mg BD +\nPPI (Omeprazole 20mg BD)',
     'Amoxicillin 1g BD +\nMetronidazole 400mg BD +\nPPI',
     'Quadruple if clarithromycin\nresistance suspected (add Bismuth)',
     '14 days\n(preferred)'),
    ('Traveler\'s Diarrhea\n(Campylobacter)',
     'Azithromycin 500mg OD\n(Azithral)',
     'Ciprofloxacin 500mg BD\n(Cifran)',
     'Rifaximin 200mg TDS (Rcifax)\nfor non-invasive E.coli',
     '3 days'),
]

STI_DATA = [
    ('Chlamydia\n(Uncomplicated genital)',
     'Azithromycin 1g single dose\n(Azithral 1g)',
     'Doxycycline 100mg BD\n(Doxicip)',
     'Notify and treat partner;\ntest for other STIs',
     'Single dose\n(Azithro); 7d Doxy'),
    ('Gonorrhea\n(Uncomplicated urogenital)',
     'Cefixime 400mg single dose\n(Taxim-O 400mg)',
     'Cefpodoxime 200mg\nsingle dose (Cepodem)',
     'Add Azithromycin 1g for\nco-treatment of Chlamydia',
     'Single dose'),
    ('Bacterial Vaginosis',
     'Metronidazole 400mg BD\n(Metrogyl)',
     'Clindamycin 300mg BD\n(Dalacin C)',
     'Secnidazole 2g single dose\n(Secnil) – good compliance',
     '7 days\n(Metro oral)'),
    ('Trichomoniasis',
     'Metronidazole 2g single dose\n(Metrogyl)',
     'Tinidazole 2g single dose\n(Fasigyn)',
     'Treat partner simultaneously;\navoid alcohol during treatment',
     'Single dose'),
    ('Pelvic Inflammatory\nDisease (PID) – Oral',
     'Ofloxacin 400mg BD +\nMetronidazole 400mg TDS\n(Zanocin + Flagyl)',
     'Doxycycline 100mg BD +\nMetronidazole 400mg TDS',
     'Admit if severe; Ceftriaxone\nIM + oral follow-up',
     '14 days'),
]

SKIN_DATA = [
    ('Impetigo\n(Non-bullous)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Cephalexin 500mg QID\n(Sporidex)',
     'Topical Mupirocin 2% for\nlimited lesions; oral for extensive',
     '7 days'),
    ('Cellulitis\n(Non-purulent)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Cephalexin 500mg QID\n(Sporidex, Ibilex)',
     'Severe: IV Cloxacillin;\nMark borders to track progression',
     '5–7 days'),
    ('Furuncle / Carbuncle\n(Staphylococcal)',
     'Cloxacillin 500mg QID\n(Clox, Bioclox)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'I&D is primary; antibiotics\nfor surrounding cellulitis',
     '5–7 days'),
    ('Community-Acquired MRSA\nSSTI (CA-MRSA)',
     'Cotrimoxazole 960mg BD\n(Septran) Β± Doxycycline',
     'Clindamycin 300mg TDS\n(Dalacin C, Clinmycin)',
     'Linezolid 600mg BD (Linox)\nif severe; always I&D abscesses',
     '5–7 days'),
    ('Diabetic Foot\n(Mild-Moderate)',
     'Amoxiclav 625–1000mg BD\n(Augmentin)',
     'Clindamycin 300mg TDS +\nCiprofloxacin 500mg BD',
     'Severe/MRSA risk: Linezolid;\nWound care + glucose control',
     '7–14 days'),
    ('Bite Wounds\n(Human/Animal)',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Doxycycline 100mg BD +\nMetronidazole 400mg TDS',
     'Augmentin = drug of choice;\nRabies/tetanus prophylaxis',
     '5–7 days\n(prophylaxis)'),
    ('Acne Vulgaris\n(Moderate-Severe)',
     'Doxycycline 100mg BD\n(Doxicip, Doxt)',
     'Minocycline 100mg BD\n(Minoz, Minolox)',
     'Combine with topical retinoid;\nUsually 3–6 months course',
     '3–6 months'),
]

BONE_DATA = [
    ('Osteomyelitis\n(MSSA, oral step-down)',
     'Cloxacillin 500mg QID\n(Clox)',
     'Cephalexin 1g QID\n(Sporidex)',
     'After initial IV; continue\n4–6 weeks total',
     '4–6 weeks\ntotal'),
    ('Osteomyelitis\n(MRSA, oral)',
     'Linezolid 600mg BD\n(Linox, Zyvox)',
     'Cotrimoxazole 960mg BD\n(Septran)',
     'Monitor CBC weekly\n(Linezolid); bone biopsy ideal',
     '6 weeks\ntotal'),
    ('Septic Arthritis\n(Oral step-down)',
     'Based on culture\n(commonly Cephalexin/Cloxacillin)',
     'Ciprofloxacin 500mg BD\n(Cifran) if Gram-neg',
     'Start IV; oral only after\nclinical improvement',
     '4–6 weeks'),
]

TROPICAL_DATA = [
    ('Scrub Typhus\n(Rickettsia)',
     'Doxycycline 100mg BD\n(Doxicip, Doxt)',
     'Azithromycin 500mg OD\n(Azithral) – pregnancy/children',
     'Start empirically in\nendemic areas; do not wait for serology',
     '7 days'),
    ('Leptospirosis (Mild)',
     'Doxycycline 100mg BD\n(Doxicip)',
     'Amoxicillin 500mg TDS\n(Novamox)',
     'Severe: IV Penicillin or\nCeftriaxone (hospital admission)',
     '7 days'),
    ('Brucellosis',
     'Doxycycline 100mg BD +\nRifampicin 600mg OD\n(Doxicip + Rifampicin)',
     'Doxycycline + Streptomycin IM\n(1g/day IM x 21 days)',
     'Combination mandatory;\nRifampicin for 6 weeks (with Doxy)',
     '6 weeks'),
    ('Malaria Prophylaxis\n(Chloroquine-resistant zones)',
     'Doxycycline 100mg OD\n(Doxicip)',
     'Atovaquone-Proguanil\n(Malanil)',
     'Start 1–2 days before travel;\ncontinue 4 weeks after return',
     'Duration of\nexposure + 4 wks'),
    ('Dengue / Chikungunya',
     'Supportive only\n(No antibiotics needed)',
     'β€”',
     'Antibiotics NOT indicated;\nAvoid NSAIDs in dengue (bleeding risk)',
     'N/A'),
]

MISC_DATA = [
    ('Dental Abscess /\nOral Infections',
     'Amoxiclav 625mg BD\n(Augmentin)',
     'Metronidazole 400mg TDS +\nAmoxicillin 500mg TDS',
     'Penicillin-allergic:\nClindamycin 300mg TDS',
     '5–7 days'),
    ('Dental Prophylaxis\n(Before procedures)',
     'Amoxicillin 2g single dose\n1h before procedure',
     'Clindamycin 600mg\n(Dalacin C) if Pen-allergic',
     'For high-risk cardiac patients\n(prosthetic valves, previous IE)',
     'Single dose'),
    ('Hepatic Encephalopathy\n(Prevention)',
     'Rifaximin 550mg BD\n(Rcifax, Rifagut)',
     'Lactulose + Rifaximin\ncombination',
     'Rifaximin: poorly absorbed;\nlong-term use acceptable',
     'Long-term'),
    ('SIBO (Small Intestinal\nBacterial Overgrowth)',
     'Rifaximin 200mg TDS x14d\n(Rcifax)',
     'Metronidazole 400mg TDS\n(Flagyl)',
     'Breath test to confirm;\naddress underlying cause',
     '14 days'),
    ('Pneumocystis (PCP)\nProphylaxis – HIV',
     'Cotrimoxazole 960mg OD\n(Septran)',
     'Dapsone 100mg OD',
     'Start when CD4 < 200;\nalso covers Toxoplasma prophylaxis',
     'Until CD4 > 200\nfor 3 months'),
]

WARNING_NOTES = [
    ('⚠ Fluoroquinolone Resistance', 'E. coli FQ resistance >60–70% in many Indian cities. Avoid empirical FQ for uncomplicated UTI.'),
    ('⚠ Typhoid Resistance', 'Nalidixic acid-resistant S. Typhi common. Cefixime or Azithromycin preferred over Ciprofloxacin for enteric fever.'),
    ('⚠ FDC Combinations', 'Fixed-dose combinations (e.g. Ofloxacin+Ornidazole) are popular in India but often irrational. Use only when both components are genuinely indicated.'),
    ('⚠ Duration Matters', 'Complete full antibiotic course. Stopping early causes resistance. Monitor for C. difficile with prolonged broad-spectrum use.'),
    ('⚠ Pregnancy Caution', 'Avoid: Fluoroquinolones, Tetracyclines, TMP-SMX (1st trimester), Nitrofurantoin (3rd trimester), Metronidazole (1st trimester).'),
    ('⚠ Culture First', 'Send swab/urine/blood culture before starting antibiotics whenever feasible. Adjust therapy based on sensitivity reports.'),
]


def section_header(text, bg_color, styles):
    data = [[Paragraph(text, styles['section_title'])]]
    t = Table(data, colWidths=[W - 3*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg_color),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('RIGHTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('ROUNDEDCORNERS', [4,4,4,4]),
    ]))
    return t


def make_table(data_rows, styles, col_widths=None):
    S = styles
    if col_widths is None:
        col_widths = [4.5*cm, 4.8*cm, 4.8*cm, 5.2*cm, 2.1*cm]

    header_row = [
        Paragraph('<b>Infection</b>', S['cell_bold']),
        Paragraph('<b>First-Line Drug(s)</b>', S['cell_bold']),
        Paragraph('<b>Alternative</b>', S['cell_bold']),
        Paragraph('<b>Notes / Special Populations</b>', S['cell_bold']),
        Paragraph('<b>Duration</b>', S['cell_bold']),
    ]
    rows = [header_row]

    for i, (inf, first, alt, notes, dur) in enumerate(data_rows):
        row = [
            Paragraph(inf, S['cell_bold']),
            Paragraph(first.replace('\n', '<br/>'), S['drug_first']),
            Paragraph(alt.replace('\n', '<br/>'), S['drug_alt']),
            Paragraph(notes.replace('\n', '<br/>'), S['cell_body']),
            Paragraph(dur.replace('\n', '<br/>'), S['cell_body']),
        ]
        rows.append(row)

    t = Table(rows, colWidths=col_widths, repeatRows=1)

    style_cmds = [
        ('BACKGROUND', (0,0), (-1,0), DARK_NAVY),
        ('TEXTCOLOR', (0,0), (-1,0), colors.white),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('FONTSIZE', (0,0), (-1,0), 8.5),
        ('TOPPADDING', (0,0), (-1,0), 6),
        ('BOTTOMPADDING', (0,0), (-1,0), 6),
        ('GRID', (0,0), (-1,-1), 0.4, BORDER_GREY),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,1), (-1,-1), 5),
        ('BOTTOMPADDING', (0,1), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 6),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [ROW_NORM, ROW_ALT]),
        ('LINEBELOW', (0,0), (-1,0), 1.5, MED_BLUE),
    ]
    t.setStyle(TableStyle(style_cmds))
    return t


def make_warning_table(styles):
    S = styles
    header = [Paragraph('<b>⚠  IMPORTANT WARNINGS &amp; INDIA-SPECIFIC NOTES</b>', S['section_title'])]
    header_row = [header]

    rows_data = []
    for title, note in WARNING_NOTES:
        rows_data.append([
            Paragraph(f'<b>{title}</b>', ParagraphStyle('wt', fontName='Helvetica-Bold', fontSize=8, textColor=ACCENT_RED, leading=11)),
            Paragraph(note, ParagraphStyle('wn', fontName='Helvetica', fontSize=8, textColor=TEXT_DARK, leading=11)),
        ])

    header_t = Table(header_row, colWidths=[W - 3*cm])
    header_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), ACCENT_RED),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))

    warn_t = Table(rows_data, colWidths=[5.2*cm, 16.0*cm])
    warn_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), RED_LIGHT),
        ('GRID', (0,0), (-1,-1), 0.4, HexColor('#fca5a5')),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    return header_t, warn_t


def make_legend_table(styles):
    S = styles
    legend_items = [
        (ACCENT_GREEN, 'First-Line Drug', 'Preferred empirical choice per Indian treatment guidelines'),
        (ACCENT_TEAL, 'Alternative Drug', 'Used when first-line is contraindicated, fails, or causes allergy'),
        (TEXT_MED, 'Third-Line / Note', 'Reserve for specific indications; check sensitivity'),
    ]
    rows = []
    for color, label, desc in legend_items:
        swatch = Table([['']], colWidths=[1*cm], rowHeights=[0.5*cm])
        swatch.setStyle(TableStyle([('BACKGROUND', (0,0), (0,0), color), ('BOX', (0,0), (0,0), 0.5, colors.white)]))
        rows.append([
            swatch,
            Paragraph(f'<b>{label}</b>', ParagraphStyle('ll', fontName='Helvetica-Bold', fontSize=8, textColor=color, leading=11)),
            Paragraph(desc, ParagraphStyle('ld', fontName='Helvetica', fontSize=7.5, textColor=TEXT_MED, leading=10)),
        ])

    t = Table(rows, colWidths=[1.2*cm, 4*cm, 12*cm])
    t.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 3),
        ('BOTTOMPADDING', (0,0), (-1,-1), 3),
        ('LEFTPADDING', (0,0), (-1,-1), 4),
    ]))
    return t


# ── COVER PAGE ─────────────────────────────────────────────────────────────────
def make_cover(styles):
    elements = []
    # Big spacing for visual balance
    elements.append(Spacer(1, 3*cm))

    # Main title block
    cover_title_data = [[
        Paragraph('ANTIBIOTIC', ParagraphStyle('ct1', fontName='Helvetica-Bold', fontSize=38, textColor=colors.white, leading=42, alignment=TA_CENTER)),
    ]]
    cover_title_data2 = [[
        Paragraph('QUICK REFERENCE GUIDE', ParagraphStyle('ct2', fontName='Helvetica-Bold', fontSize=22, textColor=HexColor('#93c5fd'), leading=26, alignment=TA_CENTER)),
    ]]

    t1 = Table(cover_title_data, colWidths=[W - 3*cm])
    t1.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), DARK_NAVY),
        ('TOPPADDING', (0,0), (-1,-1), 18),
        ('BOTTOMPADDING', (0,0), (-1,-1), 0),
        ('LEFTPADDING', (0,0), (-1,-1), 20),
    ]))
    t2 = Table(cover_title_data2, colWidths=[W - 3*cm])
    t2.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), DARK_NAVY),
        ('TOPPADDING', (0,0), (-1,-1), 0),
        ('BOTTOMPADDING', (0,0), (-1,-1), 18),
        ('LEFTPADDING', (0,0), (-1,-1), 20),
    ]))
    elements.append(t1)
    elements.append(t2)
    elements.append(Spacer(1, 0.5*cm))

    # Subtitle bar
    sub_data = [[Paragraph('India General Practice  |  Selection by Infection Type  |  Edition 2025–26',
        ParagraphStyle('csub', fontName='Helvetica', fontSize=12, textColor=DARK_NAVY, leading=16, alignment=TA_CENTER))]]
    sub_t = Table(sub_data, colWidths=[W - 3*cm])
    sub_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
        ('TOPPADDING', (0,0), (-1,-1), 10),
        ('BOTTOMPADDING', (0,0), (-1,-1), 10),
    ]))
    elements.append(sub_t)
    elements.append(Spacer(1, 1*cm))

    # Contents list
    sections = [
        ('🫁', 'Respiratory Tract Infections', 'URTI, pharyngitis, sinusitis, CAP, AECB, atypical pneumonia'),
        ('πŸ”¬', 'Urinary Tract Infections', 'Cystitis, pyelonephritis, UTI in pregnancy, prophylaxis'),
        ('🍽', 'Gastrointestinal Infections', 'Typhoid, amoebiasis, H. pylori, diarrhea, cholera'),
        ('🩺', 'Sexually Transmitted Infections', 'Chlamydia, gonorrhea, BV, trichomoniasis, PID'),
        ('🩹', 'Skin & Soft Tissue Infections', 'Cellulitis, MRSA, impetigo, diabetic foot, acne, bites'),
        ('🦴', 'Bone & Joint Infections', 'Osteomyelitis (MSSA/MRSA), septic arthritis'),
        ('🌑', 'Tropical & Endemic Diseases', 'Scrub typhus, leptospirosis, brucellosis, malaria'),
        ('πŸ“‹', 'Miscellaneous', 'Dental, HE prophylaxis, SIBO, PCP prophylaxis'),
    ]

    toc_rows = []
    for icon, section, detail in sections:
        toc_rows.append([
            Paragraph(icon, ParagraphStyle('icon', fontName='Helvetica-Bold', fontSize=14, leading=18, alignment=TA_CENTER)),
            Paragraph(f'<b>{section}</b><br/><font size="8" color="#64748b">{detail}</font>',
                ParagraphStyle('toc_item', fontName='Helvetica', fontSize=10, leading=15, textColor=DARK_NAVY)),
        ])

    toc_t = Table(toc_rows, colWidths=[1.2*cm, W - 3*cm - 1.2*cm])
    toc_t.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [LIGHT_BLUE, colors.white]),
        ('BOX', (0,0), (-1,-1), 0.5, BORDER_GREY),
        ('LINEBELOW', (0,0), (-1,-1), 0.3, BORDER_GREY),
    ]))
    elements.append(toc_t)
    elements.append(Spacer(1, 1*cm))

    # Disclaimer
    disc = Paragraph(
        '<b>Disclaimer:</b> This guide is for educational reference only. Always prescribe antibiotics based on clinical '
        'assessment, local resistance patterns, allergy history, and culture/sensitivity reports where available. '
        'Drug doses may vary by weight, renal/hepatic function, and patient age. Refer to current NCDC/WHO/institutional '
        'guidelines for definitive treatment protocols.',
        ParagraphStyle('disc', fontName='Helvetica-Oblique', fontSize=7.5, textColor=TEXT_MED, leading=11)
    )
    disc_t = Table([[disc]], colWidths=[W - 3*cm])
    disc_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), AMBER_LIGHT),
        ('BOX', (0,0), (-1,-1), 0.8, ACCENT_AMBER),
        ('TOPPADDING', (0,0), (-1,-1), 8),
        ('BOTTOMPADDING', (0,0), (-1,-1), 8),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('RIGHTPADDING', (0,0), (-1,-1), 10),
    ]))
    elements.append(disc_t)
    elements.append(PageBreak())
    return elements


# ── MAIN BUILD ─────────────────────────────────────────────────────────────────
def build_pdf():
    outpath = '/tmp/workspace/antibiotic-guide/Antibiotic_Quick_Reference_India.pdf'

    doc = BaseDocTemplate(
        outpath, pagesize=A4,
        leftMargin=1.5*cm, rightMargin=1.5*cm,
        topMargin=2.2*cm, bottomMargin=1.5*cm,
        title='Antibiotic Quick Reference Guide – India',
        author='General Practice Reference',
        subject='Antibiotic selection by infection type',
    )

    # COVER page (no header/footer) – using a blank template
    cover_frame = Frame(0, 0, W, H, leftPadding=1.5*cm, rightPadding=1.5*cm,
                        topPadding=1.5*cm, bottomPadding=1.5*cm)
    cover_template = PageTemplate(id='Cover', frames=[cover_frame])
    cover_template.beforeDrawPage = lambda c, d: (
        c.setFillColor(HEADER_BG),
        c.rect(0, 0, W, H, fill=1, stroke=0),
        c.setFillColor(MED_BLUE),
        c.rect(0, 0, W, 8, fill=1, stroke=0),
        c.rect(0, H - 8, W, 8, fill=1, stroke=0),
    )

    # Content pages
    content_frame = Frame(
        1.5*cm, 1.5*cm,
        W - 3*cm, H - 3.8*cm,   # leave room for header + footer
        leftPadding=0, rightPadding=0,
        topPadding=0, bottomPadding=0
    )
    content_template = PageTemplate(id='Content', frames=[content_frame], onPage=make_header)

    doc.addPageTemplates([cover_template, content_template])

    styles = build_styles()
    elems = []

    # Cover
    elems.extend(make_cover(styles))

    # Switch to content template
    from reportlab.platypus import NextPageTemplate
    elems.append(NextPageTemplate('Content'))

    def section(title, bg, data, extra_space=True):
        block = []
        block.append(section_header(title, bg, styles))
        block.append(make_table(data, styles))
        if extra_space:
            block.append(Spacer(1, 0.4*cm))
        return KeepTogether(block[:2]) if len(data) <= 3 else block

    # LEGEND
    legend_title_data = [[Paragraph('<b>COLOR LEGEND</b>', styles['section_title'])]]
    legend_header_t = Table(legend_title_data, colWidths=[W - 3*cm])
    legend_header_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), DARK_NAVY),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ]))
    legend_content_t = make_legend_table(styles)
    legend_wrap = Table([[legend_content_t]], colWidths=[W - 3*cm])
    legend_wrap.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), HexColor('#f1f5f9')),
        ('BOX', (0,0), (-1,-1), 0.5, BORDER_GREY),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ]))
    elems.append(KeepTogether([legend_header_t, legend_wrap]))
    elems.append(Spacer(1, 0.4*cm))

    # 1. Respiratory
    s = section('🫁  RESPIRATORY TRACT INFECTIONS', MED_BLUE, RESPIRATORY_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 2. UTI
    s = section('πŸ”¬  URINARY TRACT INFECTIONS', ACCENT_TEAL, UTI_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 3. GI
    s = section('🍽  GASTROINTESTINAL INFECTIONS', ACCENT_AMBER, GI_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 4. STI
    s = section('🩺  SEXUALLY TRANSMITTED INFECTIONS', ACCENT_PURPLE, STI_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 5. Skin
    s = section('🩹  SKIN &amp; SOFT TISSUE INFECTIONS', ACCENT_ORANGE, SKIN_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 6. Bone
    s = section('🦴  BONE &amp; JOINT INFECTIONS', HexColor('#b45309'), BONE_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 7. Tropical
    s = section('🌑  TROPICAL &amp; ENDEMIC DISEASES (India)', HexColor('#0e7490'), TROPICAL_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # 8. Misc
    s = section('πŸ“‹  MISCELLANEOUS', HexColor('#4338ca'), MISC_DATA)
    if isinstance(s, list): elems.extend(s)
    else: elems.append(s)

    # Warnings
    w_header, w_body = make_warning_table(styles)
    elems.append(Spacer(1, 0.2*cm))
    elems.append(w_header)
    elems.append(w_body)
    elems.append(Spacer(1, 0.4*cm))

    # Final note
    final_note = Paragraph(
        '<b>Key References:</b> NCDC National Treatment Guidelines for Antimicrobial Use in Infectious Diseases (India) | '
        'WHO AWaRe Classification 2023 | KD Tripathi Essentials of Medical Pharmacology 9th Ed. | '
        'Harrison\'s Principles of Internal Medicine 22E (2025)',
        ParagraphStyle('fnote', fontName='Helvetica-Oblique', fontSize=7, textColor=TEXT_LIGHT, leading=10)
    )
    final_t = Table([[final_note]], colWidths=[W - 3*cm])
    final_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), HexColor('#f8fafc')),
        ('BOX', (0,0), (-1,-1), 0.4, BORDER_GREY),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    elems.append(final_t)

    doc.build(elems, canvasmaker=NumberedCanvas)
    print(f'PDF saved to: {outpath}')
    return outpath


if __name__ == '__main__':
    path = build_pdf()
    print(f'SUCCESS: {path}')
Running Command

cd /tmp/workspace/antibiotic-guide && python generate_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/antibiotic-guide/Antibiotic_Quick_Reference_India.pdf

Running Command

python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/antibiotic-guide/Antibiotic_Quick_Reference_India.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() or '' print(f'Page {i+1}: {len(text)} chars | preview: {text[:120].strip()}') "

Your PDF is ready for download:

Antibiotic Quick Reference India

PDF Document Β· PDF


Here's what's inside the 5-page guide:
Page 1 - Cover
  • Branded dark-navy cover with title, edition, and a full table of contents listing all 8 sections with descriptions
Page 2-4 - Main Reference Tables (color-coded by system) Each section has columns: Infection | First-Line Drug + Brand | Alternative | Notes/Special Populations | Duration
SectionColorInfections Covered
🫁 RespiratoryBluePharyngitis, otitis media, sinusitis, CAP, AECB, atypical pneumonia
πŸ”¬ UTITealCystitis, pyelonephritis, UTI in pregnancy, prophylaxis
🍽 GIAmberTyphoid, amoebiasis, H. pylori (triple therapy), cholera, giardiasis
🩺 STIPurpleChlamydia, gonorrhea, BV, trichomoniasis, PID
🩹 Skin/SSTIOrangeCellulitis, MRSA, impetigo, diabetic foot, acne, bites
🦴 Bone & JointBrownOsteomyelitis (MSSA/MRSA), septic arthritis
🌑 TropicalCyanScrub typhus, leptospirosis, brucellosis, malaria
πŸ“‹ MiscellaneousIndigoDental, hepatic encephalopathy, SIBO, PCP prophylaxis
Page 5 - Warnings Panel
  • Red-highlighted box with 6 India-specific warnings: FQ resistance, typhoid resistance patterns, pregnancy cautions, FDC irrational use, culture-first advice
All brand names are India-market specific (Augmentin, Azithral, Cifran, Taxim-O, Metrogyl, etc.).

Make such pdf for parental antibiotics

Writing File

~/antibiotic-guide/generate_parenteral_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    KeepTogether, PageBreak, NextPageTemplate, BaseDocTemplate,
    PageTemplate, Frame
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib.colors import HexColor
from reportlab.pdfgen import canvas

# ── Palette ────────────────────────────────────────────────────────────────────
DARK_NAVY     = HexColor('#0f172a')
NAVY2         = HexColor('#1e3a5f')
MED_BLUE      = HexColor('#1d4ed8')
LIGHT_BLUE    = HexColor('#dbeafe')
ACCENT_TEAL   = HexColor('#0f766e')
TEAL_LIGHT    = HexColor('#ccfbf1')
ACCENT_RED    = HexColor('#b91c1c')
RED_LIGHT     = HexColor('#fee2e2')
ACCENT_AMBER  = HexColor('#b45309')
AMBER_LIGHT   = HexColor('#fef3c7')
ACCENT_GREEN  = HexColor('#15803d')
GREEN_LIGHT   = HexColor('#dcfce7')
ACCENT_PURPLE = HexColor('#6d28d9')
PURPLE_LIGHT  = HexColor('#ede9fe')
ACCENT_ORANGE = HexColor('#c2410c')
ORANGE_LIGHT  = HexColor('#ffedd5')
ACCENT_ROSE   = HexColor('#be123c')
ROSE_LIGHT    = HexColor('#ffe4e6')
ACCENT_CYAN   = HexColor('#0e7490')
CYAN_LIGHT    = HexColor('#cffafe')
ACCENT_LIME   = HexColor('#4d7c0f')
LIME_LIGHT    = HexColor('#ecfccb')
HEADER_BG     = HexColor('#0f172a')
ROW_ALT       = HexColor('#f8fafc')
ROW_NORM      = HexColor('#ffffff')
BORDER_GREY   = HexColor('#cbd5e1')
TEXT_DARK     = HexColor('#1e293b')
TEXT_MED      = HexColor('#475569')
TEXT_LIGHT    = HexColor('#94a3b8')
W, H = A4


# ── Numbered Canvas ────────────────────────────────────────────────────────────
class NumberedCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        canvas.Canvas.__init__(self, *args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_footer(num_pages)
            canvas.Canvas.showPage(self)
        canvas.Canvas.save(self)

    def draw_footer(self, page_count):
        self.setFillColor(HEADER_BG)
        self.rect(0, 0, W, 22, fill=1, stroke=0)
        self.setFillColor(colors.white)
        self.setFont('Helvetica', 7.5)
        self.drawString(20, 7, 'Parenteral Antibiotic Quick Reference Guide – India Hospital Practice')
        self.drawRightString(W - 20, 7, f'Page {self._pageNumber} of {page_count}')
        self.setStrokeColor(ACCENT_RED)
        self.setLineWidth(2)
        self.line(0, 22, W, 22)


def make_header(c, doc):
    c.saveState()
    c.setFillColor(HEADER_BG)
    c.rect(0, H - 54, W, 54, fill=1, stroke=0)
    c.setFillColor(ACCENT_RED)
    c.rect(0, H - 57, W, 3, fill=1, stroke=0)
    c.setFillColor(colors.white)
    c.setFont('Helvetica-Bold', 15)
    c.drawString(20, H - 33, 'PARENTERAL ANTIBIOTIC QUICK REFERENCE GUIDE')
    c.setFont('Helvetica', 8.5)
    c.setFillColor(HexColor('#94a3b8'))
    c.drawString(20, H - 48, 'India Hospital / ICU Practice  |  IV/IM Selection by Infection Type  |  2025–26')
    c.restoreState()


# ── Styles ─────────────────────────────────────────────────────────────────────
def build_styles():
    S = {}
    S['sec_title'] = ParagraphStyle('SecTitle', fontName='Helvetica-Bold',
        fontSize=10.5, textColor=colors.white, leading=14)
    S['cell_bold'] = ParagraphStyle('CellBold', fontName='Helvetica-Bold',
        fontSize=8, textColor=DARK_NAVY, leading=11)
    S['cell_body'] = ParagraphStyle('CellBody', fontName='Helvetica',
        fontSize=7.5, textColor=TEXT_DARK, leading=11, spaceAfter=1)
    S['drug_first'] = ParagraphStyle('DrugFirst', fontName='Helvetica-Bold',
        fontSize=8, textColor=ACCENT_GREEN, leading=11)
    S['drug_alt'] = ParagraphStyle('DrugAlt', fontName='Helvetica',
        fontSize=7.5, textColor=ACCENT_TEAL, leading=11)
    S['warn_title'] = ParagraphStyle('WarnTitle', fontName='Helvetica-Bold',
        fontSize=7.5, textColor=ACCENT_RED, leading=10)
    S['warn_body'] = ParagraphStyle('WarnBody', fontName='Helvetica',
        fontSize=7.5, textColor=TEXT_DARK, leading=10)
    S['dose_tag'] = ParagraphStyle('DoseTag', fontName='Helvetica-Bold',
        fontSize=7, textColor=ACCENT_AMBER, leading=10)
    return S


# ── DATA ───────────────────────────────────────────────────────────────────────
# Columns: Infection | First-Line IV/IM + Dose + Brand | Alternative | Notes | Route/Freq/Duration

RESP_DATA = [
    ('Severe CAP\n(Hospitalized, non-ICU)',
     'Co-amoxiclav 1.2g IV 8-hrly\n(Augmentin IV, Amoxyclav IV)\n+ Azithromycin 500mg IV OD\n(Azithral IV)',
     'Ceftriaxone 1–2g IV OD\n(Monocef, Oframax)\n+ Azithromycin 500mg IV OD',
     'Atypical coverage mandatory;\nswitch to oral after 48–72h\nclinical improvement',
     'IV β†’ Oral step-down\nat 48–72 h\n5–7 days total'),
    ('Severe CAP\n(ICU / Ventilated)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact, Pipcin-TZ)\n+ Levofloxacin 500mg IV OD\n(Glevo IV)',
     'Meropenem 1g IV 8-hrly\n(Meromer, Meronem)\n+ Azithromycin 500mg IV',
     'Add Vancomycin if MRSA\npneumonia suspected;\ncheck PCT/CRP to guide duration',
     '7–10 days IV\n(reassess at 72h)'),
    ('Hospital-Acquired\nPneumonia (HAP)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Meropenem 1g IV 8-hrly\n(Meromer)\nΒ± Vancomycin 15mg/kg IV\n8-hrly (Vancorid)',
     'Anti-pseudomonal cover\nmandatory; de-escalate based\non culture in 48–72h',
     '7–8 days\n(avoid prolonging)'),
    ('Aspiration Pneumonia',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Ceftriaxone 1g IV OD +\nMetronidazole 500mg IV 8-hrly\n(Metrogyl IV)',
     'Anaerobic cover essential;\nnot all aspiration episodes\nneed antibiotics',
     '5–7 days'),
    ('Lung Abscess',
     'Amoxiclav 1.2g IV 8-hrly\n(Augmentin IV)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly + Metronidazole\n500mg IV 8-hrly',
     'Long course needed;\nswitch to oral Amoxiclav\nafter initial IV response',
     'IV 2–3 wks then\noral 4–6 wks total'),
    ('Pleural Empyema',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Ceftriaxone 2g IV OD +\nMetronidazole 500mg IV 8-hrly',
     'Drainage (ICD/VATS) mandatory;\nantibiotics adjunctive',
     '4–6 weeks total'),
]

UTI_DATA = [
    ('Acute Pyelonephritis\n(Moderate)',
     'Ceftriaxone 1–2g IV OD\n(Monocef, Oframax)',
     'Ciprofloxacin 400mg IV BD\n(Ciplox IV)\n[if sensitivity confirmed]',
     'E. coli FQ resistance\n>60% empirically in India;\nstep down to oral after 48–72h',
     'IV 3–5 days then\noral 7–14 days total'),
    ('Complicated UTI /\nUrosepsis',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Meropenem 1g IV 8-hrly\n(Meromer) if ESBL suspected',
     'ESBL common in India;\nAvoid Cephalosporins for\nESBL-producing organisms',
     '10–14 days\n(IV until afebrile)'),
    ('Catheter-Associated\nUTI (CA-UTI)',
     'Based on culture/sensitivity\n(Ceftriaxone empirically\nif Gram-neg)',
     'Meropenem 1g IV 8-hrly if\nESBL/Carbapenem-sensitive',
     'Remove/change catheter first;\ndon\'t treat asymptomatic\nbacteriuria in catheterised pts',
     '7 days\n(symptomatic)'),
    ('Candidal UTI\n(Candiduria)',
     'Fluconazole 200–400mg IV\nthen oral (Zocon IV)',
     'Amphotericin B 0.3–0.6mg/kg\nIV OD (Fungizone) if resistant',
     'Treat only if symptomatic\nor immunocompromised;\nremove catheter if possible',
     '14 days'),
]

SEPSIS_DATA = [
    ('Sepsis (Unknown\nSource – Empirical)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)\nΒ± Gentamicin 5mg/kg IV OD\n(Garamycin)',
     'Meropenem 1g IV 8-hrly\n(Meromer) + Vancomycin\n15mg/kg IV 8-hrly',
     'De-escalate in 48–72h based\non cultures; follow Sepsis-3\nprotocol; measure lactate',
     'Minimum 5–7 days;\nde-escalate early'),
    ('Septic Shock\n(ICU)',
     'Meropenem 2g IV 8-hrly\n(Meromer) + Vancomycin\n25–30mg/kg loading then\n15mg/kg 8-hrly (Vancorid)',
     'Cefoperazone-Sulbactam 3g\nIV 12-hrly (Magnex-Forte)\n+ Colistin (if pan-resistant)',
     'Source control paramount;\nprocalcitonin-guided\nde-escalation recommended',
     '7–10 days\n(guided by PCT)'),
    ('Bacteremia / Primary\nBloodstream Infection',
     'Based on blood culture\n(empirical: Vancomycin IV\n+ Piperacillin-Tazobactam IV)',
     'Teicoplanin 400mg IV\nOD (Targocid) if MRSA',
     'Two sets blood cultures before\nstarting; echocardiogram if\nS. aureus bacteremia',
     'S. aureus: 14 days;\nother organisms: 7–14 days'),
    ('Neutropenic Fever\n(Febrile Neutropenia)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Cefepime 2g IV 8-hrly\n(Cefepim) or Meropenem 1g\nIV 8-hrly if unstable',
     'Add Vancomycin if skin\ninfection/catheter infection;\nadd Antifungal after 72–96h fever',
     'Until ANC >500;\nmin 7 days'),
]

CNS_DATA = [
    ('Bacterial Meningitis\n(Community-acquired adult)',
     'Ceftriaxone 2g IV 12-hrly\n(Monocef 2g)',
     'Chloramphenicol 1g IV 6-hrly\n(Enteromycetin)\n[if Cephalosporin allergy]',
     'Add Dexamethasone 0.15mg/kg\nIV 6-hrly x4 days (1st dose\nbefore/with antibiotic)\nEmpiric Ampicillin if Listeria risk (elderly/immuno)',
     '10–14 days\n(S. pneumoniae)\n21 days (Listeria)'),
    ('Bacterial Meningitis\n(Post-neurosurgery / Trauma)',
     'Meropenem 2g IV 8-hrly\n(Meromer) + Vancomycin\n15mg/kg IV 8-hrly (Vancorid)',
     'Cefepime 2g IV 8-hrly +\nVancomycin 15mg/kg IV 8-hrly',
     'Gram-negatives and\nS. aureus most common;\nAcinetobacter frequent in ICU\nNeurosurgery settings',
     '14–21 days\n(based on organism)'),
    ('Brain Abscess',
     'Ceftriaxone 2g IV 12-hrly +\nMetronidazole 500mg IV 8-hrly\n(Metrogyl IV)',
     'Meropenem 2g IV 8-hrly\n+ Vancomycin (if MRSA risk)',
     'Neurosurgical drainage often\nrequired; prolong IV 4–6 weeks;\nfollow MRI response',
     '4–6 weeks IV'),
    ('Tuberculous Meningitis\n(TBM)',
     'HRZE regimen (Isoniazid +\nRifampicin + Pyrazinamide +\nEthambutol) – 2 months\nthen HR x10 months',
     'Dexamethasone IV adjunctive\n0.3–0.4mg/kg tapered over 8 wks',
     'Add Pyridoxine with INH;\nSteroids reduce mortality;\nDrug interactions with antiretrovirals',
     '12 months total\nfor TBM'),
]

ABDOMINAL_DATA = [
    ('Intra-abdominal Sepsis /\nSecondary Peritonitis',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Ceftriaxone 2g IV OD +\nMetronidazole 500mg IV 8-hrly\n(Metrogyl IV)',
     'Source control (surgery/drainage)\nmandatory; anaerobic coverage\nessential for colonic perforation',
     '4–7 days\n(after source control)'),
    ('Acute Cholecystitis /\nCholangitis',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Ceftriaxone 2g IV OD +\nMetronidazole 500mg IV 8-hrly',
     'Tokyo Guidelines severity:\nGrade III – early biliary\ndrainage + IV antibiotics',
     '4–7 days\n(mild–moderate)'),
    ('Liver Abscess\n(Pyogenic)',
     'Ceftriaxone 2g IV OD +\nMetronidazole 500mg IV 8-hrly\n(Metrogyl IV)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly',
     'Drainage (percutaneous)\nfor >5cm abscess; E. coli most\ncommon organism in India',
     'IV 2–3 weeks then\noral 4–6 weeks'),
    ('Amoebic Liver Abscess\n(Severe)',
     'Metronidazole 500mg IV\n8-hrly (Metrogyl IV)',
     'Tinidazole IV if available\n(Tinidazole 800mg IV BD)',
     'Most respond to medical\ntherapy; drainage only if\n>10cm or left lobe/impending rupture',
     'IV 7–10 days then\noral completion'),
    ('Spontaneous Bacterial\nPeritonitis (SBP)',
     'Cefotaxime 2g IV 8-hrly\n(Claforan) or Ceftriaxone\n2g IV OD (Monocef)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly if nosocomial SBP',
     'Give IV Albumin 1.5g/kg\nDay 1 + 1g/kg Day 3;\nreduces renal failure/mortality;\nPrimary prophylaxis: Norfloxacin\n400mg OD (in Child-Pugh C)',
     '5 days IV'),
    ('Typhoid with\nComplications',
     'Ceftriaxone 2g IV OD\n(Monocef, Oframax)',
     'Azithromycin 500mg IV OD\n(Azithral IV)',
     'IV for all complicated\ntyphoid; intestinal perforation\nrequires surgery + broad-spectrum\ncover (add Metronidazole)',
     '10–14 days IV'),
]

BONE_DATA = [
    ('Acute Osteomyelitis\n(Haematogenous)',
     'Cloxacillin 2g IV 6-hrly\n(Cloxacillin inj) – MSSA\nor Cefazolin 2g IV 8-hrly',
     'Vancomycin 15–20mg/kg\nIV 8-hrly (Vancorid) – if\nMRSA suspected',
     'S. aureus most common;\nMRI for diagnosis; bone biopsy\nbefore starting if possible;\nseek orthopedic input',
     'IV 4–6 weeks\nthen oral step-down'),
    ('Diabetic Foot\nOsteomyelitis (MSSA)',
     'Cloxacillin 2g IV 6-hrly +\nMetronidazole 500mg IV 8-hrly',
     'Amoxiclav 1.2g IV 8-hrly\n(Augmentin IV)',
     'Vascular assessment;\nbone biopsy for organism ID;\noral step-down with Cloxacillin/\nClindamycin after initial IV response',
     'IV 4–6 weeks total'),
    ('Diabetic Foot\nOsteomyelitis (MRSA)',
     'Vancomycin 15–20mg/kg\nIV 8-hrly (Vancorid)',
     'Linezolid 600mg IV BD\n(Linox IV, Zyvox IV)',
     'Linezolid: monitor CBC weekly;\nexcellent bone bioavailability;\nconsider oral Linezolid for\nstep-down',
     'IV 4–6 weeks;\noral Linezolid step-down'),
    ('Septic Arthritis',
     'Cloxacillin 2g IV 6-hrly\n(MSSA) or Ceftriaxone\n2g IV OD (Gram-neg)',
     'Vancomycin 15mg/kg IV\n8-hrly if MRSA suspected',
     'Drainage (arthrocentesis/\narthroscopy) is primary therapy;\ncontinue until synovial WBC <50k',
     'IV 2–4 weeks;\noral step-down after\nclinical improvement'),
]

SKIN_DATA = [
    ('Severe Cellulitis /\nErysipelas',
     'Cloxacillin 2g IV 6-hrly\n(MSSA)',
     'Cefazolin 2g IV 8-hrly\nor Amoxiclav 1.2g IV 8-hrly\n(Augmentin IV)',
     'Mark lesion borders;\nIV until fever resolves\nand lesion not progressing;\nstep down to oral Cefalexin',
     'IV 3–5 days then\noral 7–10 days total'),
    ('MRSA Skin/Soft\nTissue Infection (Severe)',
     'Vancomycin 15–20mg/kg\nIV 8-hrly (Vancorid)',
     'Teicoplanin 12mg/kg IV BD\nx3 doses then 6mg/kg OD\n(Targocid)',
     'I&D for abscesses;\nmonitor vancomycin trough\n15–20 mcg/mL; AUC-guided\ndosing preferred',
     '7–14 days'),
    ('Necrotizing Fasciitis',
     'Meropenem 1g IV 8-hrly +\nClindamycin 900mg IV 8-hrly +\nVancomycin 15mg/kg IV 8-hrly',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly + Clindamycin\n900mg IV 8-hrly',
     'SURGICAL EMERGENCY:\ndebridement within hours;\nClindamycin inhibits toxin\nproduction (Group A Strep)',
     'IV until wound\nhealed post-surgery'),
    ('Gas Gangrene\n(Clostridial Myonecrosis)',
     'Benzylpenicillin 4MU IV\n4-hrly + Clindamycin\n900mg IV 8-hrly',
     'Meropenem 1g IV 8-hrly +\nClindamycin 900mg IV 8-hrly',
     'SURGICAL EMERGENCY;\namputation may be needed;\nHyperbaric O2 adjunctive;\nClindamycin blocks toxin',
     'IV until wound healed'),
    ('Burns Wound\nInfection',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)',
     'Meropenem 1g IV 8-hrly +\nVancomycin 15mg/kg IV 8-hrly',
     'P. aeruginosa most common;\ntopical Silver Sulfadiazine;\nculture-guided adjustment;\nearly enteral nutrition',
     '7–14 days\n(culture-guided)'),
]

CARDIAC_DATA = [
    ('Infective Endocarditis\n(Native Valve – Streptococcal)',
     'Benzylpenicillin 12–18MU\nIV/day in 6 divided doses\n(Crystapen)',
     'Ceftriaxone 2g IV OD\n(Monocef 2g)',
     'Confirm with ECHO;\nDuke criteria for diagnosis;\nadd Gentamicin 1mg/kg IV 8-hrly\nfor synergy in first 2 weeks',
     '4 weeks IV\n(uncomplicated)'),
    ('Infective Endocarditis\n(Staphylococcal / MRSA)',
     'Vancomycin 15–20mg/kg\nIV 8-hrly (Vancorid)',
     'Daptomycin 6–8mg/kg IV OD\n[if available]',
     'Rifampicin 300mg oral BD\nadded for prosthetic valve;\nsurgery if large vegetation\nor heart failure',
     'Native valve: 6 wks\nProsthetic: β‰₯6 wks'),
    ('Infective Endocarditis\n(HACEK organisms)',
     'Ceftriaxone 2g IV OD\n(Monocef)',
     'Ampicillin-Sulbactam 3g\nIV 6-hrly (Unasyn)',
     'Ampicillin if beta-lactamase\nnegative; FQ alternative\nif cephalosporin-intolerant',
     '4 weeks IV'),
]

MDR_DATA = [
    ('ESBL-Producing\nEnterobacteriaceae',
     'Meropenem 1g IV 8-hrly\n(Meromer, Meronem)',
     'Ertapenem 1g IV OD\n(Invanz) for non-ICU',
     'Do NOT use\nCephalosporins/Piperacillin-\nTazobactam for definitive ESBL\ntreatment; preserve Carbapenems',
     'Based on source\n(UTI: 10–14d;\nSepsis: 14d)'),
    ('Carbapenem-Resistant\nEnterobacteriaceae (CRE/KPC)',
     'Colistin 9MU loading then\n4.5MU IV 12-hrly (Colistin-CMS)\n+ Meropenem 2g IV 8-hrly\n(extended infusion)',
     'Ceftazidime-Avibactam\n2.5g IV 8-hrly (Avycaz)\n[if KPC-producer confirmed]',
     'Nephrotoxicity with Colistin;\nmonitor renal function daily;\ninfection control isolation\nmandatory',
     '14 days minimum'),
    ('Acinetobacter baumannii\n(Pan-Drug Resistant)',
     'Colistin 9MU loading then\n4.5MU IV 12-hrly\n+ Sulbactam 3g IV 6-hrly',
     'Tigecycline 100mg IV loading\nthen 50mg IV 12-hrly\n(Tygacil)',
     'Contact precautions;\ncombination therapy;\nTigecycline NOT for bloodstream;\nAmpicillin-Sulbactam active\nagainst some strains',
     '14–21 days'),
    ('MRSA Bacteremia /\nDeep Infections',
     'Vancomycin 25–30mg/kg\nloading then 15mg/kg IV\n8-hrly (Vancorid)\n[target AUC/MIC >400]',
     'Teicoplanin 12mg/kg IV BD\nx3 then 12mg/kg OD\n(Targocid)',
     'Echocardiogram for all\nS. aureus bacteremia;\nremove all foreign bodies;\nLinezolid for osteoarticular',
     'Bacteremia: 14d\nEndocarditis: 6 wks\nOsteomyelitis: 6 wks'),
    ('Pseudomonas aeruginosa\n(Severe)',
     'Piperacillin-Tazobactam 4.5g\nIV 6-hrly (Tazact)\nor Cefepime 2g IV 8-hrly',
     'Meropenem 1g IV 8-hrly\n(Meromer) + Ciprofloxacin\n400mg IV 12-hrly if sensitive',
     'Combination therapy for\nbacteremia/pneumonia;\nDuration: 7 days minimum\nfor non-severe\n14 days for bacteremia',
     '7–14 days'),
]

SPECIAL_DATA = [
    ('Leptospirosis\n(Severe / Weil\'s Disease)',
     'Benzylpenicillin 1.5MU IV\n6-hrly x7 days (Crystapen)',
     'Ceftriaxone 1g IV OD\n(Monocef)',
     'Most common in India:\nMaharashtra, Kerala post-flood;\nICU for ARDS/renal failure\n(Weil\'s disease)',
     '7 days IV'),
    ('Scrub Typhus\n(Severe / Complicated)',
     'Doxycycline 100mg IV BD\n(IV Doxycycline)',
     'Azithromycin 500mg IV OD\n(Azithral IV) – pregnancy',
     'IV if severe/cannot\ntake orally; switch to oral\ndoxycycline once stable;\nCommon in NE India, Himalayas',
     '7 days'),
    ('Malaria (Severe\nP. falciparum)',
     'Artesunate 2.4mg/kg IV\nat 0, 12, 24h then OD\n(IV Artesunate)',
     'Quinine 20mg/kg IV\nloading then 10mg/kg 8-hrly\n+ Doxycycline IV',
     'Artesunate preferred over\nQuinine (SEAQUAMAT trial);\nICU monitoring: hypoglycemia,\ncerebral malaria, ARDS',
     'IV until oral possible\nthen oral ACT to\ncomplete course'),
    ('Tetanus\n(Adjunctive antibiotics)',
     'Metronidazole 500mg IV\n8-hrly (Metrogyl IV)',
     'Benzylpenicillin 1MU IV\n6-hrly',
     'Antibiotics secondary to\nHuman TIG + wound debridement;\nMetronidazole preferred over\nPenicillin (less convulsant)',
     '7–10 days'),
    ('Cholera\n(Severe / Hospitalized)',
     'Azithromycin 1g IV then\noral (Azithral)',
     'Doxycycline 100mg IV BD\n(IV Doxy)',
     'Aggressive IV rehydration\n(Ringer\'s Lactate) is primary\ntherapy; antibiotics reduce\nduration/shedding',
     'Single dose (adults);\n3 days (children)'),
    ('Rabies Post-Exposure\n(Infected wound antibiotics)',
     'Amoxiclav 1.2g IV 8-hrly\n(Augmentin IV)',
     'Ceftriaxone 1g IV OD\n(Monocef)',
     'Antibiotics for wound infection\nonly – NOT for rabies itself;\nRabies immunoglobulin (RIG) +\nvaccine is the prevention',
     '5–7 days\n(wound prophylaxis)'),
]

OB_GYN_DATA = [
    ('Chorioamnionitis\n(Intrapartum)',
     'Ampicillin 2g IV 6-hrly +\nGentamicin 5mg/kg IV OD',
     'Piperacillin-Tazobactam\n4.5g IV 6-hrly (if polymicrobial)',
     'Continue until\n24–48h afebrile post-delivery;\nClindamycin added if\nC-section done',
     'IV until 24–48h\nafebrile'),
    ('Post-Partum\nEndometritis',
     'Clindamycin 900mg IV 8-hrly\n+ Gentamicin 5mg/kg IV OD\n(Garamycin)',
     'Piperacillin-Tazobactam\n4.5g IV 6-hrly',
     'Most effective regimen per\nCochrane reviews;\ncontinue until 24–48h afebrile',
     'IV until 24–48h\nafebrile, then oral'),
    ('Septic Abortion',
     'Piperacillin-Tazobactam\n4.5g IV 6-hrly (Tazact)',
     'Clindamycin 900mg IV 8-hrly\n+ Gentamicin 5mg/kg IV OD',
     'Surgical evacuation of uterus\nurgent; Clostridium and\nanaerobes coverage critical',
     '7–10 days IV'),
    ('Pre-operative\nProphylaxis (C-section)',
     'Cefazolin 2g IV single dose\n30–60 min before incision',
     'Clindamycin 600mg IV\n(if Pen allergy)',
     'Single dose adequate;\ndo NOT extend postoperatively;\nreduce SSI risk by >50%',
     'Single dose'),
]

WARNING_NOTES = [
    ('⚠ ESBL Epidemic in India',
     'ESBL-producing E. coli and Klebsiella are extremely prevalent. Do NOT use Cephalosporins or Piperacillin-Tazobactam for definitive treatment of confirmed ESBL infections. Carbapenems are the drug of choice.'),
    ('⚠ Vancomycin Dosing',
     'Use AUC/MIC-guided dosing (target AUC 400–600 mgΒ·h/L). Trough-only monitoring is outdated. Load 25–30 mg/kg for seriously ill patients. Monitor renal function daily.'),
    ('⚠ Aminoglycoside Toxicity',
     'Gentamicin and Amikacin are nephrotoxic and ototoxic. Once-daily dosing is preferred. Monitor peak/trough levels; adjust for renal impairment. Avoid in elderly and existing CKD.'),
    ('⚠ Colistin Nephrotoxicity',
     'Colistin causes acute kidney injury in ~50% of patients. Use only as last resort for pan-resistant organisms. Monitor creatinine daily. Hydration and avoidance of other nephrotoxins is critical.'),
    ('⚠ De-escalation Mandatory',
     'Broad-spectrum empirical therapy must be de-escalated within 48–72h based on culture reports. Prolonged broad-spectrum use drives resistance. Follow PCT/CRP to guide antibiotic discontinuation.'),
    ('⚠ Blood Cultures First',
     'Draw TWO sets of blood cultures from DIFFERENT sites before starting antibiotics in all sepsis cases. Never delay antibiotics >1 hour in septic shock, but cultures must be drawn first.'),
    ('⚠ Carbapenem Stewardship',
     'Reserve Meropenem/Imipenem for ESBL, CRE, or severe infections only. Ertapenem can be used for outpatient/non-Pseudomonal coverage. Inappropriate Carbapenem use creates XDR/PDR organisms.'),
]

COMMON_PARENTERALS = [
    ('Benzylpenicillin\n(Penicillin G)', 'Crystapen\n(Pfizer)', 'Meningitis (Strep/Listeria),\nEndocarditis, Gas gangrene, Tetanus', '1–4 MU IV q4–6h'),
    ('Ampicillin', 'Roscillin inj\n(Ranbaxy)', 'Meningitis (Listeria), Chorioamnionitis,\nUTI (step-up)', '0.5–2g IV q6h'),
    ('Cloxacillin', 'Clox inj (Cipla)', 'MSSA osteomyelitis, cellulitis,\nsevere SSTI', '1–2g IV q4–6h'),
    ('Amoxiclav IV', 'Augmentin IV\n(GSK)', 'CAP, intra-abdominal, SSTI,\nbite wounds', '1.2g IV q8h'),
    ('Piperacillin-Tazobactam', 'Tazact (Sun)\nPipcin-TZ (Cipla)', 'Sepsis, HAP, urosepsis, ICU infections\nwith Pseudomonal risk', '4.5g IV q6h'),
    ('Ceftriaxone', 'Monocef (Biochem)\nOframax (Ranbaxy)', 'CAP, meningitis, typhoid, SBP,\nabdominal, bone, gonorrhea', '1–2g IV q12–24h'),
    ('Cefazolin', 'Reflin (Cipla)\nCefazone', 'Surgical prophylaxis, MSSA\nskin/bone (alternative to Cloxacillin)', '1–2g IV q8h'),
    ('Cefotaxime', 'Claforan (Sanofi)\nCefotax (Biochem)', 'SBP, neonatal meningitis,\ngonorrhea, RTI', '1–2g IV q6–8h'),
    ('Ceftazidime', 'Fortum (GSK)\nTazide (Cipla)', 'Pseudomonal infections,\nfebrile neutropenia', '1–2g IV q8h'),
    ('Cefepime', 'Cefipim (Sun)\nMaxipime', 'HAP, febrile neutropenia, UTI\n(Pseudomonal coverage)', '1–2g IV q8–12h'),
    ('Cefoperazone-Sulbactam', 'Magnex-Forte (Pfizer)\nSulbacef (Cipla)', 'ICU infections, HAP, intra-abdominal,\nAcinetobacter (sulbactam activity)', '1.5–3g IV q8–12h'),
    ('Meropenem', 'Meromer (Zydus)\nMeronem (AZ)', 'ESBL, CRE, sepsis, meningitis,\nfebrile neutropenia, HAP', '0.5–2g IV q8h'),
    ('Imipenem-Cilastatin', 'Tienam (MSD)\nImipem (Cipla)', 'Polymicrobial, intra-abdominal,\nICU (avoid CNS infections)', '500mg–1g IV q6–8h'),
    ('Ertapenem', 'Invanz (MSD)', 'ESBL infections, non-pseudomonal\noutpatient IV therapy, diabetic foot', '1g IV/IM q24h'),
    ('Vancomycin', 'Vancorid (Abbott)\nVancotex', 'MRSA, Gram-pos endocarditis,\nC. diff (oral), MRSA meningitis', '15–20mg/kg IV q8–12h\n[AUC-guided]'),
    ('Teicoplanin', 'Targocid (Sanofi)\nTeicomine', 'MRSA, MSSA, VRE (some), endocarditis\nas Vancomycin alternative', '12mg/kg IV BD x3\nthen OD'),
    ('Linezolid IV', 'Linox IV (Cipla)\nZyvox IV (Pfizer)', 'MRSA pneumonia, MRSA SSTI,\nVRE, MDR-TB', '600mg IV q12h'),
    ('Gentamicin', 'Garamycin (Schering)\nGenatcin', 'Sepsis synergy, UTI (Gram-neg),\nchorioamnionitis combination', '5mg/kg IV OD\n[once-daily]'),
    ('Amikacin', 'Amikin (BMS)\nBiklin (Cipla)', 'Gentamicin-resistant Gram-negatives,\nNTM infections', '15–20mg/kg IV OD'),
    ('Metronidazole IV', 'Metrogyl IV (J.B.Chem)\nFlagyl IV (Abbott)', 'Anaerobic infections, peritonitis,\namoebiasis, tetanus adjuvant', '500mg IV q8h'),
    ('Colistin (Polymyxin E)', 'Colistin-CMS\n(Cipla/Sun)', 'XDR Acinetobacter, PDR KPC,\nlast-resort only', '9MU load then\n4.5MU IV q12h'),
    ('Azithromycin IV', 'Azithral IV\n(Alembic)', 'Severe atypical CAP, typhoid IV,\nCampylobacter (hospitalized)', '500mg IV OD'),
]


# ── Helpers ────────────────────────────────────────────────────────────────────
def sec_header(title, bg, styles):
    t = Table([[Paragraph(title, styles['sec_title'])]], colWidths=[W - 3*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    return t


def make_table(rows, styles, col_widths=None):
    S = styles
    if col_widths is None:
        col_widths = [4.0*cm, 5.0*cm, 4.6*cm, 5.4*cm, 2.4*cm]
    header = [
        Paragraph('<b>Infection / Indication</b>', S['cell_bold']),
        Paragraph('<b>First-Line IV/IM + Dose + Brand</b>', S['cell_bold']),
        Paragraph('<b>Alternative IV/IM</b>', S['cell_bold']),
        Paragraph('<b>Notes / Cautions</b>', S['cell_bold']),
        Paragraph('<b>Duration</b>', S['cell_bold']),
    ]
    tbl_rows = [header]
    for inf, first, alt, notes, dur in rows:
        tbl_rows.append([
            Paragraph(inf, S['cell_bold']),
            Paragraph(first.replace('\n', '<br/>'), S['drug_first']),
            Paragraph(alt.replace('\n', '<br/>'), S['drug_alt']),
            Paragraph(notes.replace('\n', '<br/>'), S['cell_body']),
            Paragraph(dur.replace('\n', '<br/>'), S['cell_body']),
        ])
    t = Table(tbl_rows, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), DARK_NAVY),
        ('TEXTCOLOR', (0,0), (-1,0), colors.white),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('FONTSIZE', (0,0), (-1,0), 8),
        ('TOPPADDING', (0,0), (-1,0), 6),
        ('BOTTOMPADDING', (0,0), (-1,0), 6),
        ('GRID', (0,0), (-1,-1), 0.4, BORDER_GREY),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,1), (-1,-1), 5),
        ('BOTTOMPADDING', (0,1), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [ROW_NORM, ROW_ALT]),
        ('LINEBELOW', (0,0), (-1,0), 1.5, ACCENT_RED),
    ]))
    return t


def make_drug_table(styles):
    S = styles
    header_data = [[Paragraph('<b>πŸ’Š  QUICK REFERENCE: COMMON PARENTERAL ANTIBIOTICS IN INDIA</b>', S['sec_title'])]]
    header_t = Table(header_data, colWidths=[W - 3*cm])
    header_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), DARK_NAVY),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    col_h = [
        Paragraph('<b>Drug (Generic)</b>', S['cell_bold']),
        Paragraph('<b>India Brand(s)</b>', S['cell_bold']),
        Paragraph('<b>Key Uses</b>', S['cell_bold']),
        Paragraph('<b>Typical IV Dose</b>', S['cell_bold']),
    ]
    rows = [col_h]
    for i, (drug, brand, use, dose) in enumerate(COMMON_PARENTERALS):
        rows.append([
            Paragraph(drug.replace('\n', '<br/>'),
                ParagraphStyle('dr', fontName='Helvetica-Bold', fontSize=7.5, textColor=DARK_NAVY, leading=11)),
            Paragraph(brand.replace('\n', '<br/>'),
                ParagraphStyle('br', fontName='Helvetica', fontSize=7.5, textColor=ACCENT_TEAL, leading=11)),
            Paragraph(use,
                ParagraphStyle('us', fontName='Helvetica', fontSize=7.5, textColor=TEXT_DARK, leading=11)),
            Paragraph(dose.replace('\n', '<br/>'),
                ParagraphStyle('ds', fontName='Helvetica-Bold', fontSize=7.5, textColor=ACCENT_AMBER, leading=11)),
        ])
    t = Table(rows, colWidths=[4.5*cm, 4.0*cm, 8.5*cm, 4.4*cm], repeatRows=1)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), NAVY2),
        ('TEXTCOLOR', (0,0), (-1,0), colors.white),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('FONTSIZE', (0,0), (-1,0), 8),
        ('TOPPADDING', (0,0), (-1,0), 6),
        ('BOTTOMPADDING', (0,0), (-1,0), 6),
        ('GRID', (0,0), (-1,-1), 0.4, BORDER_GREY),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,1), (-1,-1), 4),
        ('BOTTOMPADDING', (0,1), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [ROW_NORM, ROW_ALT]),
        ('LINEBELOW', (0,0), (-1,0), 1.5, MED_BLUE),
    ]))
    return header_t, t


def make_warn_table(styles):
    S = styles
    header_data = [[Paragraph('<b>⚠  CRITICAL WARNINGS FOR PARENTERAL ANTIBIOTIC USE IN INDIA</b>', S['sec_title'])]]
    header_t = Table(header_data, colWidths=[W - 3*cm])
    header_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), ACCENT_RED),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    rows = []
    for t, n in WARNING_NOTES:
        rows.append([
            Paragraph(t, S['warn_title']),
            Paragraph(n, S['warn_body']),
        ])
    body_t = Table(rows, colWidths=[5.5*cm, 15.9*cm])
    body_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), RED_LIGHT),
        ('GRID', (0,0), (-1,-1), 0.4, HexColor('#fca5a5')),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    return header_t, body_t


# ── COVER ──────────────────────────────────────────────────────────────────────
def make_cover(styles):
    elems = []
    elems.append(Spacer(1, 2.5*cm))

    title_rows = [
        [Paragraph('PARENTERAL', ParagraphStyle('c1', fontName='Helvetica-Bold', fontSize=36,
            textColor=colors.white, leading=40, alignment=TA_CENTER))],
        [Paragraph('ANTIBIOTIC', ParagraphStyle('c2', fontName='Helvetica-Bold', fontSize=36,
            textColor=HexColor('#fca5a5'), leading=40, alignment=TA_CENTER))],
        [Paragraph('QUICK REFERENCE GUIDE', ParagraphStyle('c3', fontName='Helvetica-Bold', fontSize=19,
            textColor=HexColor('#93c5fd'), leading=24, alignment=TA_CENTER))],
    ]
    cover_t = Table(title_rows, colWidths=[W - 3*cm])
    cover_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), HEADER_BG),
        ('TOPPADDING', (0,0), (-1,-1), 10),
        ('BOTTOMPADDING', (0,0), (-1,-1), 10),
        ('LEFTPADDING', (0,0), (-1,-1), 20),
        ('RIGHTPADDING', (0,0), (-1,-1), 20),
    ]))
    elems.append(cover_t)
    elems.append(Spacer(1, 0.4*cm))

    sub_data = [[Paragraph(
        'India Hospital / ICU Practice  |  IV &amp; IM Selection by Infection Type  |  Edition 2025–26',
        ParagraphStyle('csub', fontName='Helvetica', fontSize=11,
            textColor=DARK_NAVY, leading=16, alignment=TA_CENTER))]]
    sub_t = Table(sub_data, colWidths=[W - 3*cm])
    sub_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE),
        ('TOPPADDING', (0,0), (-1,-1), 10),
        ('BOTTOMPADDING', (0,0), (-1,-1), 10),
    ]))
    elems.append(sub_t)
    elems.append(Spacer(1, 0.8*cm))

    sections = [
        ('🫁', 'Respiratory Tract Infections',    'Severe CAP, HAP, VAP, aspiration pneumonia, empyema, lung abscess'),
        ('πŸ”¬', 'Urinary Tract Infections',         'Pyelonephritis, urosepsis, CA-UTI, candidal UTI'),
        ('πŸ”₯', 'Sepsis & Bacteremia',              'Empirical sepsis, septic shock, bloodstream infection, febrile neutropenia'),
        ('🧠', 'CNS Infections',                   'Bacterial meningitis, brain abscess, TBM'),
        ('🍽', 'Abdominal / GI Infections',        'Peritonitis, cholangitis, liver abscess, SBP, typhoid complications'),
        ('🦴', 'Bone & Joint Infections',          'Osteomyelitis (MSSA/MRSA), septic arthritis, diabetic foot'),
        ('🩹', 'Skin & Soft Tissue',               'Severe cellulitis, necrotizing fasciitis, MRSA SSTI, gas gangrene, burns'),
        ('❀', 'Cardiac Infections',               'Infective endocarditis (streptococcal, staphylococcal, HACEK)'),
        ('🦠', 'MDR / Resistant Organisms',        'ESBL, CRE/KPC, XDR Acinetobacter, MRSA bacteremia, Pseudomonas'),
        ('🌑', 'Tropical & Special Situations',    'Leptospirosis, scrub typhus, severe malaria, tetanus, cholera'),
        ('🀰', 'Obstetric Infections',             'Chorioamnionitis, endometritis, septic abortion, surgical prophylaxis'),
        ('πŸ’Š', 'Drug Reference Table',             '22 common parenteral antibiotics: brands, doses, key uses'),
    ]
    toc_rows = []
    for icon, sec, detail in sections:
        toc_rows.append([
            Paragraph(icon, ParagraphStyle('icon', fontName='Helvetica-Bold', fontSize=13,
                leading=18, alignment=TA_CENTER)),
            Paragraph(f'<b>{sec}</b><br/><font size="8" color="#64748b">{detail}</font>',
                ParagraphStyle('ti', fontName='Helvetica', fontSize=9.5, leading=14, textColor=DARK_NAVY)),
        ])
    toc_t = Table(toc_rows, colWidths=[1.1*cm, W - 3*cm - 1.1*cm])
    toc_t.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [LIGHT_BLUE, ROW_NORM]),
        ('BOX', (0,0), (-1,-1), 0.5, BORDER_GREY),
        ('LINEBELOW', (0,0), (-1,-1), 0.3, BORDER_GREY),
    ]))
    elems.append(toc_t)
    elems.append(Spacer(1, 0.8*cm))

    disc = Paragraph(
        '<b>⚠ Disclaimer:</b> This guide is for clinical reference only. Antibiotic selection must be based on local '
        'resistance data, cultures, patient allergies, renal/hepatic function, and clinical severity. '
        'Empirical regimens must be reviewed and de-escalated within 48–72h. Always refer to NCDC, IDSA, and '
        'institutional antibiotic stewardship protocols for definitive guidance.',
        ParagraphStyle('disc', fontName='Helvetica-Oblique', fontSize=7.5, textColor=TEXT_MED, leading=11))
    disc_t = Table([[disc]], colWidths=[W - 3*cm])
    disc_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), AMBER_LIGHT),
        ('BOX', (0,0), (-1,-1), 0.8, ACCENT_AMBER),
        ('TOPPADDING', (0,0), (-1,-1), 8),
        ('BOTTOMPADDING', (0,0), (-1,-1), 8),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('RIGHTPADDING', (0,0), (-1,-1), 10),
    ]))
    elems.append(disc_t)
    elems.append(PageBreak())
    return elems


# ── BUILD ──────────────────────────────────────────────────────────────────────
def build_pdf():
    outpath = '/tmp/workspace/antibiotic-guide/Parenteral_Antibiotic_Quick_Reference_India.pdf'

    doc = BaseDocTemplate(
        outpath, pagesize=A4,
        leftMargin=1.5*cm, rightMargin=1.5*cm,
        topMargin=2.3*cm, bottomMargin=1.5*cm,
        title='Parenteral Antibiotic Quick Reference Guide – India',
        author='Hospital Practice Reference',
        subject='Parenteral antibiotic selection by infection type',
    )

    cover_frame = Frame(0, 0, W, H, leftPadding=1.5*cm, rightPadding=1.5*cm,
                        topPadding=1.5*cm, bottomPadding=1.5*cm)

    def cover_bg(c, d):
        c.setFillColor(HEADER_BG)
        c.rect(0, 0, W, H, fill=1, stroke=0)
        c.setFillColor(ACCENT_RED)
        c.rect(0, 0, W, 8, fill=1, stroke=0)
        c.rect(0, H - 8, W, 8, fill=1, stroke=0)

    cover_tpl = PageTemplate(id='Cover', frames=[cover_frame])
    cover_tpl.beforeDrawPage = cover_bg

    content_frame = Frame(1.5*cm, 1.5*cm, W - 3*cm, H - 3.9*cm,
                          leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0)
    content_tpl = PageTemplate(id='Content', frames=[content_frame], onPage=make_header)

    doc.addPageTemplates([cover_tpl, content_tpl])

    S = build_styles()
    elems = []
    elems.extend(make_cover(S))
    elems.append(NextPageTemplate('Content'))

    def add_section(title, bg, data, gap=True):
        sh = sec_header(title, bg, S)
        tb = make_table(data, S)
        elems.append(sh)
        elems.append(tb)
        if gap:
            elems.append(Spacer(1, 0.35*cm))

    add_section('🫁  RESPIRATORY TRACT INFECTIONS (IV/IM)',  MED_BLUE,      RESP_DATA)
    add_section('πŸ”¬  URINARY TRACT INFECTIONS (Parenteral)', ACCENT_TEAL,   UTI_DATA)
    add_section('πŸ”₯  SEPSIS, BACTEREMIA & FEBRILE NEUTROPENIA', ACCENT_RED, SEPSIS_DATA)
    add_section('🧠  CNS INFECTIONS (IV)',                    ACCENT_PURPLE, CNS_DATA)
    add_section('🍽  ABDOMINAL & GI INFECTIONS (IV)',         ACCENT_AMBER,  ABDOMINAL_DATA)
    add_section('🦴  BONE & JOINT INFECTIONS (IV)',           HexColor('#92400e'), BONE_DATA)
    add_section('🩹  SKIN & SOFT TISSUE INFECTIONS (IV)',     ACCENT_ORANGE, SKIN_DATA)
    add_section('❀  INFECTIVE ENDOCARDITIS (IV)',            ACCENT_ROSE,   CARDIAC_DATA)
    add_section('🦠  MDR / RESISTANT ORGANISM REGIMENS',     HexColor('#374151'), MDR_DATA)
    add_section('🌑  TROPICAL & SPECIAL SITUATIONS (IV)',     ACCENT_CYAN,   SPECIAL_DATA)
    add_section('🀰  OBSTETRIC INFECTIONS (IV)',              HexColor('#7c3aed'), OB_GYN_DATA)

    # Drug reference table
    dh, dt = make_drug_table(S)
    elems.append(dh)
    elems.append(dt)
    elems.append(Spacer(1, 0.35*cm))

    # Warnings
    wh, wt = make_warn_table(S)
    elems.append(wh)
    elems.append(wt)
    elems.append(Spacer(1, 0.35*cm))

    # Footer references
    ref = Paragraph(
        '<b>References:</b> NCDC National Treatment Guidelines (India) | IDSA Sepsis / Endocarditis / Osteomyelitis Guidelines | '
        'WHO AWaRe 2023 | Harrison\'s Principles of Internal Medicine 22E | Surviving Sepsis Campaign 2021 | '
        'Goldman-Cecil Medicine | SEAQUAMAT Trial (Artesunate vs Quinine)',
        ParagraphStyle('ref', fontName='Helvetica-Oblique', fontSize=7, textColor=TEXT_LIGHT, leading=10))
    ref_t = Table([[ref]], colWidths=[W - 3*cm])
    ref_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), HexColor('#f8fafc')),
        ('BOX', (0,0), (-1,-1), 0.4, BORDER_GREY),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    elems.append(ref_t)

    doc.build(elems, canvasmaker=NumberedCanvas)
    return outpath


if __name__ == '__main__':
    path = build_pdf()
    print(f'SUCCESS: {path}')
Running Command

cd /tmp/workspace/antibiotic-guide && python generate_parenteral_pdf.py 2>&1

Running Command

python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/antibiotic-guide/Parenteral_Antibiotic_Quick_Reference_India.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): t = (page.extract_text() or '') print(f' Page {i+1}: {len(t)} chars | {t[:100].strip()}') " ls -lh /tmp/workspace/antibiotic-guide/Parenteral_Antibiotic_Quick_Reference_India.pdf

Your parenteral antibiotic PDF is ready:

Parenteral Antibiotic Quick Reference India

PDF Document Β· PDF


Here's what the 9-page guide covers:
Page 1 - Cover - Dark navy/red branded cover with full table of contents (12 sections)
Pages 2-8 - Clinical Reference Tables with columns: Infection | First-Line IV/IM Drug + Dose + Brand | Alternative | Notes/Cautions | Duration
SectionColorKey Content
🫁 RespiratoryBlueSevere CAP, HAP/VAP, aspiration pneumonia, empyema, lung abscess
πŸ”¬ UTITealPyelonephritis, urosepsis, CA-UTI, ESBL, candidal UTI
πŸ”₯ Sepsis/BacteremiaRedEmpirical sepsis, septic shock, febrile neutropenia (Sepsis-3)
🧠 CNSPurpleBacterial meningitis, post-neurosurgery meningitis, brain abscess, TBM
🍽 AbdominalAmberPeritonitis, cholangitis, liver abscess, SBP + Albumin, typhoid complications
🦴 Bone & JointBrownOsteomyelitis MSSA/MRSA, diabetic foot, septic arthritis
🩹 Skin/SSTIOrangeNecrotizing fasciitis, gas gangrene, MRSA, burns wound infection
❀ EndocarditisRoseStreptococcal, Staphylococcal/MRSA, HACEK organisms
🦠 MDR OrganismsDark greyESBL, CRE/KPC, XDR Acinetobacter, MRSA bacteremia, Pseudomonas
🌑 TropicalCyanLeptospirosis, scrub typhus, severe malaria (Artesunate), tetanus
🀰 ObstetricPurpleChorioamnionitis, endometritis, septic abortion, C-section prophylaxis
πŸ’Š Drug TableNavy22 parenteral antibiotics: brands (Tazact, Monocef, Vancorid, Meromer, etc.), doses
Page 9 - Warnings Panel - 7 critical red-flagged warnings covering ESBL epidemic, Vancomycin AUC dosing, aminoglycoside toxicity, Colistin nephrotoxicity, de-escalation, blood cultures first, and Carbapenem stewardship.

Bacterial coverage and Best antibiotics

Asking for Preferences
Here is a comprehensive reference of all major bacteria, their coverage profile, and the best antibiotics - organized by Gram stain, then organism type.

Bacterial Coverage & Best Antibiotics - Complete Reference


GRAM-POSITIVE COCCI


1. Streptococcus pyogenes (Group A Strep - GAS)

Diseases: Strep throat, impetigo, cellulitis, necrotizing fasciitis, scarlet fever, rheumatic fever
PriorityAntibioticRouteNotes
Drug of ChoiceBenzylpenicillin / AmoxicillinIV / OralNever resistant to penicillin
OralAmoxicillin 500mg TDS x10dOral(Mox, Novamox)
Pen-allergicAzithromycin 500mg OD x5dOralSome macrolide resistance (10–15%)
Pen-allergicClindamycin 300mg TDSOral/IVAlso inhibits toxin in NF
Severe (NF)Benzylpenicillin IV + Clindamycin IVIVClindamycin blocks toxin production
Key fact: GAS has NEVER developed resistance to penicillin. Penicillin always works.

2. Streptococcus pneumoniae (Pneumococcus)

Diseases: CAP, meningitis, sinusitis, otitis media, bacteremia
PriorityAntibioticRouteNotes
Drug of ChoiceAmoxicillin / BenzylpenicillinOral/IVFor penicillin-sensitive strains
MeningitisCeftriaxone 2g IV BDIVUse high dose; penetrates CSF
Oral (mild)Amoxicillin 1g TDSOral(Novamox 1g)
Atypical/resistantLevofloxacin 500mg ODOral/IVRespiratory fluoroquinolone
Pen-resistantMoxifloxacin 400mg ODOralBest oral for resistant pneumococcus
Pen-allergicCeftriaxone IV or LevofloxacinIV/Oral
India note: Penicillin-resistant Pneumococcus increasing; use high-dose Amoxicillin (1g TDS) for outpatient CAP.

3. Streptococcus agalactiae (Group B Strep - GBS)

Diseases: Neonatal meningitis/sepsis, post-partum endometritis, UTI in pregnancy
PriorityAntibioticRouteNotes
Drug of ChoiceBenzylpenicillin IVIVNeonatal/maternal treatment
Prophylaxis (intrapartum)Benzylpenicillin 5MU then 2.5MU q4hIVDuring labour for GBS+ mothers
AlternativeAmpicillin IVIV
Pen-allergicClindamycin or VancomycinIVBased on sensitivity

4. Streptococcus viridans group

Diseases: Infective endocarditis (native valve), dental/oral infections
PriorityAntibioticRouteNotes
Drug of ChoiceBenzylpenicillin 12–18MU/day IVIV4 weeks for endocarditis
AlternativeCeftriaxone 2g IV ODIVEqual efficacy, outpatient IV option
Pen-resistant strainVancomycin IVIVWith Gentamicin synergy
Synergy+ Gentamicin 1mg/kg q8h x2 wksIVFirst 2 weeks of IE treatment

5. Enterococcus faecalis

Diseases: UTI, endocarditis, intra-abdominal infections, bacteremia
PriorityAntibioticRouteNotes
Drug of Choice (UTI)Amoxicillin 500mg TDSOralSensitive to penicillins
Drug of Choice (IE)Ampicillin IV + Gentamicin IVIVSynergy mandatory for IE
Alternative (IE)Ampicillin IV + Ceftriaxone 2g BDIVAmpicillin-Ceftriaxone for IE if aminoglycoside toxicity
VRELinezolid 600mg BDIV/OralZyvox, Linox
VRE alternativeDaptomycin 6mg/kg IV ODIV

6. Enterococcus faecium (VRE)

Diseases: Hospital infections, UTI, bacteremia (often drug-resistant)
PriorityAntibioticRouteNotes
Drug of ChoiceLinezolid 600mg BDIV/OralZyvox, Linox - static
AlternativeDaptomycin 8–10mg/kg IV ODIVBactericidal
Last resortTeicoplanin (if vancomycin-sensitive strain)IV

7. Staphylococcus aureus - MSSA

(Methicillin-Sensitive) Diseases: Skin/bone/joint infections, bacteremia, endocarditis, pneumonia, toxic shock
PriorityAntibioticRouteNotes
Drug of Choice (IV)Cloxacillin / Flucloxacillin 2g q4–6hIVBest bactericidal for MSSA
Drug of Choice (Oral)Cloxacillin 500mg QIDOralEmpty stomach (Bioclox, Clox)
Alternative IVCefazolin 2g q8hIVEqual to Cloxacillin, easier dosing
Oral step-downCephalexin 1g QIDOral(Sporidex) for SSTI/bone
Bone/JointCloxacillin IV β†’ Cephalexin oralIV then Oral4–6 weeks total
EndocarditisCloxacillin 12g/day IVIV6 weeks native valve
Pen-allergicVancomycin IVIVInferior to Cloxacillin for MSSA - use only if truly allergic
Critical: Never use Vancomycin when MSSA is confirmed. Cloxacillin/Cefazolin is superior and bactericidal.

8. Staphylococcus aureus - MRSA

(Methicillin-Resistant) Diseases: Hospital-acquired infections, device infections, osteomyelitis, bacteremia, pneumonia
PriorityAntibioticRouteNotes
Drug of Choice (severe/IV)Vancomycin 15–20mg/kg q8–12hIVAUC/MIC-guided; Vancorid, Vancotex
Alternative (IV)Teicoplanin 12mg/kg BD x3 then ODIVTargocid; easier monitoring
Oral (SSTI)Cotrimoxazole 960mg BDOralSeptran; community MRSA skin infections
Oral alternativeMinocycline 100mg BDOralMinoz; for community MRSA
Oral/IV (bone/lung)Linezolid 600mg BDIV/OralLinox, Zyvox; excellent tissue penetration
Daptomycin6–8mg/kg IV ODIVFor bacteremia/right-sided IE; NOT for pneumonia
VRSA (extremely rare)Linezolid + consultationIV
Daptomycin is inactivated by pulmonary surfactant - never use for MRSA pneumonia.

9. Staphylococcus epidermidis / CoNS (Coagulase-Negative Staph)

Diseases: Prosthetic valve endocarditis, line infections, implant infections
PriorityAntibioticRouteNotes
Drug of ChoiceVancomycin IVIVMost CoNS are Methicillin-resistant
+ for prosthetic+ Rifampicin 300mg BD oralOralBiofilm penetration
+ for prosthetic+ Gentamicin IV (first 2 weeks)IVSynergy
Oral (mild, sensitive)Cotrimoxazole 960mg BDOralOnly if sensitive on culture

GRAM-POSITIVE BACILLI


10. Clostridium perfringens (Gas Gangrene)

Diseases: Gas gangrene, myonecrosis, food poisoning
PriorityAntibioticRouteNotes
Drug of ChoiceBenzylpenicillin 4MU q4h IVIVCrystapen
Synergy+ Clindamycin 900mg q8h IVIVBlocks alpha-toxin and theta-toxin production
AlternativeMeropenem IV + ClindamycinIVIf penicillin-allergic
SurgicalAggressive debridement/amputationAntibiotics alone insufficient

11. Clostridium difficile (C. diff)

Diseases: Antibiotic-associated diarrhea, pseudomembranous colitis, fulminant colitis
PriorityAntibioticRouteNotes
Drug of Choice (mild–moderate)Vancomycin 125mg QID oralOralNOT IV; must reach colon lumen
Drug of Choice (severe)Vancomycin 500mg QID oralOral+ Metronidazole IV 500mg q8h if ileus
AlternativeMetronidazole 400mg TDS oralOralOnly for mild 1st episode if Vancomycin unavailable
RecurrentFidaxomicin 200mg BD x10dOralReduces recurrence
Fulminant/SurgeryVancomycin oral + Metronidazole IVBothConsider surgical colectomy

12. Bacillus anthracis (Anthrax)

Diseases: Cutaneous, pulmonary, GI anthrax
PriorityAntibioticRouteNotes
Drug of ChoiceCiprofloxacin 500mg BDOral/IVPost-exposure prophylaxis x60d
AlternativeDoxycycline 100mg BDOralAlternative prophylaxis
Severe/SystemicCiprofloxacin IV + Clindamycin IV + Anthrax antitoxinIVTriple combination

13. Listeria monocytogenes

Diseases: Meningitis (neonates/elderly/immunocompromised), bacteremia, listeriosis in pregnancy
PriorityAntibioticRouteNotes
Drug of ChoiceAmpicillin 2g IV q4hIV+ Gentamicin for synergy
AlternativeCotrimoxazole IV/oralIV/OralFor Pen-allergic
NoteCephalosporins do NOT cover ListeriaAdd Ampicillin in meningitis in elderly
This is why elderly/neonatal meningitis empirical therapy must include Ampicillin alongside Ceftriaxone.

GRAM-NEGATIVE COCCI


14. Neisseria meningitidis (Meningococcus)

Diseases: Bacterial meningitis, meningococcemia, Waterhouse-Friderichsen syndrome
PriorityAntibioticRouteNotes
Drug of ChoiceBenzylpenicillin 2.4g IV q4hIVCrystapen
AlternativeCeftriaxone 2g IV BDIVAlso used empirically
ChemoprophylaxisRifampicin 600mg BD x2dOralFor close contacts
Chemoprophylaxis altCiprofloxacin 500mg single doseOralSingle dose preferred in adults

15. Neisseria gonorrhoeae (Gonococcus)

Diseases: Gonorrhea (urethritis, cervicitis, PID, disseminated)
PriorityAntibioticRouteNotes
Drug of Choice (uncomplicated)Ceftriaxone 500mg IM single doseIMOr Cefixime 400mg oral single dose
OralCefixime 400mg single doseOral(Taxim-O 400mg)
+ Chlamydia co-treatment+ Azithromycin 1g single doseOralAlways co-treat
Disseminated (DGI)Ceftriaxone 1g IV ODIV7 days
Ophthalmia neonatorumCeftriaxone 25–50mg/kg IV single doseIV
Fluoroquinolone resistance is now >50% globally. Never use Ciprofloxacin empirically for gonorrhea.

GRAM-NEGATIVE BACILLI (Enterobacteriaceae)


16. Escherichia coli

Diseases: UTI (most common cause), gastroenteritis, sepsis, neonatal meningitis
StrainDrug of ChoiceAlternativeNotes
Sensitive E. coli (UTI)Nitrofurantoin 100mg BD (oral)Cotrimoxazole 960mg BDAvoid FQ empirically in India
Sensitive (systemic)Ceftriaxone 1–2g IV ODCiprofloxacin IV (if sensitive)
ESBL E. coliMeropenem 1g IV q8hErtapenem 1g IV OD (non-ICU)Do NOT use Cephalosporins for ESBL
ESBL (UTI only - oral)Fosfomycin 3g sachet statNitrofurantoin 100mg BDBoth concentrated in urine
CRE E. coliColistin + MeropenemCeftazidime-AvibactamLast-resort; specialist consult

17. Klebsiella pneumoniae

Diseases: Pneumonia (diabetics), UTI, liver abscess, bacteremia, meningitis (neonatal)
StrainDrug of ChoiceAlternativeNotes
Sensitive KlebsiellaCeftriaxone 2g IV ODCefuroxime (mild)
ESBL KlebsiellaMeropenem 1g IV q8hErtapenem 1g IV ODCephalosporins fail for ESBL
KPC-producingCeftazidime-Avibactam 2.5g IV q8hMeropenem + ColistinAvycaz - if KPC confirmed
NDM-producingColistin + Aztreonam/TigecyclineCeftazidime-Avibactam + AztreonamCombination only; ID consult
Hypervirulent K. pneumoniae (hvKP): Common in India; causes pyogenic liver abscess and endophthalmitis in diabetics. Treat with Ceftriaxone if sensitive.

18. Salmonella typhi / paratyphi (Enteric Fever)

Diseases: Typhoid fever, enteric fever
PriorityAntibioticRouteNotes
Drug of Choice (India)Cefixime 20mg/kg/day max 1.2gOral14 days; Taxim-O, Mahacef
AlternativeAzithromycin 10–20mg/kg ODOral7–10 days; Azithral
Severe/IVCeftriaxone 2g IV ODIV10–14 days
AVOIDCiprofloxacinβ€”High-level FQ resistance in India
Old (avoid now)Chloramphenicol / Ampicillinβ€”MDR strains common

19. Salmonella non-typhoidal (NTS)

Diseases: Gastroenteritis, bacteremia (in sickle cell/immunocompromised)
PriorityAntibioticRouteNotes
Gastroenteritis (healthy adult)No antibioticsβ€”Self-limiting in 3–5 days
Bacteremia / immunocompromisedCeftriaxone 2g IV ODIVCiprofloxacin if sensitive
Sickle cell diseaseCeftriaxone IVIVOsteomyelitis risk; treat aggressively

20. Shigella spp.

Diseases: Bacillary dysentery (bloody diarrhea)
PriorityAntibioticRouteNotes
Drug of ChoiceAzithromycin 500mg OD x3dOralAzithral
AlternativeCefixime 200mg BD x5dOralTaxim-O
Ciprofloxacin500mg BD x3dOralOnly if confirmed sensitivity
Severe/IVCeftriaxone 2g IV ODIV

21. Campylobacter jejuni

Diseases: Gastroenteritis, traveler's diarrhea (most common cause), Guillain-BarrΓ© (post-infectious)
PriorityAntibioticRouteNotes
Drug of ChoiceAzithromycin 500mg OD x3dOralAzithral - drug of choice
AlternativeCiprofloxacin 500mg BD x3dOralOnly if sensitive (FQ resistance rising)
Severe/bacteremicAzithromycin IV or Imipenem IVIV

22. Helicobacter pylori

Diseases: Peptic ulcer disease, gastritis, MALT lymphoma, gastric cancer risk
PriorityRegimenDurationNotes
Standard Triple TherapyPPI + Amoxicillin 1g BD + Clarithromycin 500mg BD14 daysUse 14d > 7d for better eradication
Bismuth QuadruplePPI + Bismuth + Metronidazole + Tetracycline10–14 daysIf Clarithromycin resistance suspected
Levofloxacin TriplePPI + Amoxicillin 1g BD + Levofloxacin 500mg OD10–14 days3rd line or Clarithromycin-resistant areas
Sequential TherapyPPI + Amoxicillin x5d, then PPI + Clarithromycin + Metronidazole x5d10 daysAlternative where resistance high

23. Pseudomonas aeruginosa

Diseases: HAP/VAP, burn infections, UTI, osteomyelitis (IVDU), otitis externa (malignant), cystic fibrosis
PriorityAntibioticRouteNotes
Drug of Choice (IV)Piperacillin-Tazobactam 4.5g q6hIVTazact, Pipcin-TZ
Alternative (IV)Ceftazidime 2g q8hIVFortum, Tazide
IV alternativeCefepime 2g q8hIV4th gen; better for Pseudomonas
Carbapenem neededMeropenem 1g q8h or ImipenemIVFor severe/resistant
OralCiprofloxacin 750mg BDOralOnly oral anti-pseudomonal; Cifran 750mg
MDR PseudomonasColistin + Piperacillin-TazobactamIVCombination only
Otitis externaCiprofloxacin ear dropsTopical
Combination therapy is recommended for Pseudomonas bacteremia and pneumonia. Never monotherapy in life-threatening infections.

24. Acinetobacter baumannii

Diseases: ICU pneumonia (VAP), wound infections, bacteremia, meningitis (post-neurosurgery)
PriorityAntibioticRouteNotes
Sensitive strainCarbapenems (Meropenem/Imipenem)IV
Carbapenem-resistant (CRAB)Colistin 9MU loading + 4.5MU q12hIVNephrotoxic; monitor creatinine
+ Sulbactam activity+ Ampicillin-Sulbactam 3g IV q6hIVSulbactam has intrinsic activity against Acinetobacter
AlternativeTigecycline 100mg load then 50mg q12hIVNot for bacteremia; Tygacil
New agentCefiderocol (siderophore cephalosporin)IVNot widely available in India yet
XDR Acinetobacter is a major ICU crisis in India. Contact precautions and Colistin + Sulbactam are often the only options.

25. Haemophilus influenzae

Diseases: Otitis media, sinusitis, AECB, meningitis (unvaccinated), epiglottitis
PriorityAntibioticRouteNotes
Drug of Choice (oral)Amoxiclav 625mg BDOralAugmentin - covers beta-lactamase producers
Alternative oralCefuroxime 250mg BDOralZinnat
MeningitisCeftriaxone 2g IV BDIVMost common in unvaccinated children
Non-beta-lactamaseAmoxicillin aloneOralIf beta-lactamase negative on test
AlternativeAzithromycin or LevofloxacinOralAECB in COPD patients

26. Bordetella pertussis (Whooping Cough)

Diseases: Pertussis (whooping cough)
PriorityAntibioticRouteNotes
Drug of ChoiceAzithromycin 500mg OD x5dOralAzithral; reduces infectivity
AlternativeClarithromycin 500mg BD x7dOralClaribid
AlternativeCotrimoxazole 960mg BD x14dOralSeptran; if macrolide-intolerant
NoteAntibiotics reduce contagiousnessLittle effect on symptoms if started late

27. Vibrio cholerae (Cholera)

Diseases: Cholera (profuse watery diarrhea - "rice-water stool")
PriorityAntibioticRouteNotes
AdultsDoxycycline 300mg single doseOralDoxicip
Pregnant/ChildrenAzithromycin 1g (adults) / 20mg/kg (children)OralSingle dose; Azithral
AlternativeCiprofloxacin 500mg BD x3dOralIf sensitivity confirmed
Primary treatmentIV/ORS RehydrationIV/OralAntibiotics are adjunctive only

ANAEROBIC BACTERIA


28. Bacteroides fragilis and other gut anaerobes

Diseases: Intra-abdominal infections, peritonitis, pelvic infections, aspiration pneumonia
PriorityAntibioticRouteNotes
Drug of ChoiceMetronidazole 400–500mg TDSOral/IVFlagyl, Metrogyl - excellent anaerobic coverage
AlternativeClindamycin 300–600mg TDSOral/IVDalacin C
Combination coverageMetronidazole + CephalosporinIVFor aerobic + anaerobic cover
Broad spectrumPiperacillin-TazobactamIVSingle agent covers aerobes + anaerobes
NoteMeropenem covers anaerobesIVSingle agent for severe intra-abdominal

29. Clostridium tetani (Tetanus)

Diseases: Tetanus (lockjaw, spasms)
PriorityAntibioticRouteNotes
Drug of ChoiceMetronidazole 500mg IV q8hIVMetrogyl IV; preferred over Penicillin
AlternativeBenzylpenicillin 1MU IV q6hIVAvoid - slight convulsant risk
Primary treatmentHuman TIG (Tetanus Immunoglobulin) 3000–6000 IU IMIMAntibiotics are adjunctive
Wound careDebridement + wound cleaningRemove source

ATYPICAL / INTRACELLULAR ORGANISMS


30. Mycoplasma pneumoniae

Diseases: Atypical (walking) pneumonia, URTI
PriorityAntibioticRouteNotes
Drug of ChoiceAzithromycin 500mg OD x5dOralAzithral
AlternativeDoxycycline 100mg BD x7dOralDoxicip
AlternativeLevofloxacin 500mg ODOralGlevo
NoteNo cell wall - penicillins/cephalosporins INACTIVE

31. Chlamydophila pneumoniae / Chlamydia trachomatis

Diseases: Atypical pneumonia (C. pneumoniae), genital/ocular chlamydiosis (C. trachomatis)
PriorityAntibioticRouteNotes
Drug of Choice (genital)Azithromycin 1g single doseOralAzithral 1g
Alternative (genital)Doxycycline 100mg BD x7dOralDoxicip
PneumoniaAzithromycin 500mg OD x5dOralor Doxycycline
Trachoma (eye)Azithromycin 1g single doseOral+ topical Tetracycline eye ointment
LGV (invasive)Doxycycline 100mg BD x21dOral

32. Rickettsia spp. (Scrub Typhus / RMSF)

Diseases: Scrub typhus (O. tsutsugamushi in India), RMSF, murine typhus
PriorityAntibioticRouteNotes
Drug of ChoiceDoxycycline 100mg BD x7dOralDoxicip, Doxt - do NOT delay
Pregnancy / ChildrenAzithromycin 500mg OD x5dOralAzithral
Severe/ICUDoxycycline IVIV
NoteStart empirically in endemic areasDon't wait for serology results

33. Coxiella burnetii (Q Fever)

Diseases: Q fever (acute - pneumonia/hepatitis; chronic - endocarditis)
PriorityAntibioticRouteNotes
AcuteDoxycycline 100mg BD x14–21dOral
Chronic (endocarditis)Doxycycline 100mg BD + Hydroxychloroquine 200mg TDSOral18 months - 3 years
PregnancyCotrimoxazole 960mg BDOralUntil delivery

34. Brucella spp. (Brucellosis)

Diseases: Brucellosis (Malta fever, undulant fever) - from livestock/milk
PriorityAntibioticRouteNotes
Drug of ChoiceDoxycycline 100mg BD x6wks + Rifampicin 600mg OD x6wksOralCombination mandatory; monotherapy = relapse
AlternativeDoxycycline x6wks + Streptomycin 1g IM/day x21dOral + IMDoxy + Aminoglycoside - best evidence
CNS/EndocarditisTriple therapy: Doxy + Rifampicin + Cotrimoxazole or GentamicinIV/OralProlonged 3–6 months
Children < 8yCotrimoxazole + RifampicinOralAvoid Doxycycline in children

35. Legionella pneumophila (Legionnaires' disease)

Diseases: Severe pneumonia, especially in elderly/immunocompromised/smokers
PriorityAntibioticRouteNotes
Drug of ChoiceLevofloxacin 500–750mg ODIV/OralBest outcomes
AlternativeAzithromycin 500mg ODIV/Oral
NoteBeta-lactams are INACTIVEIntracellular organism

MYCOBACTERIA


36. Mycobacterium tuberculosis (TB)

Diseases: Pulmonary TB, extrapulmonary TB (lymph nodes, CNS, bone, miliary)
PhaseRegimenDurationNotes
Intensive phaseIsoniazid + Rifampicin + Pyrazinamide + Ethambutol (HRZE)2 monthsDaily or 3x/week (DOTS)
Continuation phaseIsoniazid + Rifampicin (HR)4 months6 months total for pulmonary TB
CNS/Bone/MiliaryHRZE intensive + HR continuation2 + 10 months12 months total
MDR-TBBedaquiline + Delamanid + Levofloxacin + Linezolid + Cycloserine18–24 monthsBased on DST; specialist management

37. Mycobacterium leprae (Leprosy)

Diseases: Leprosy (tuberculoid / lepromatous)
TypeRegimenDuration
PaucibacillaryRifampicin 600mg monthly (supervised) + Dapsone 100mg daily6 months
MultibacillaryRifampicin 600mg monthly + Clofazimine 300mg monthly + Dapsone 100mg daily + Clofazimine 50mg daily12 months

SPIROCHAETES


38. Treponema pallidum (Syphilis)

Diseases: Primary, secondary, latent, tertiary syphilis; congenital syphilis
StageDrug of ChoiceAlternative
Primary / SecondaryBenzathine Penicillin G 2.4MU IM single doseDoxycycline 100mg BD x14d (Pen-allergic)
Latent (early <1y)Benzathine Penicillin G 2.4MU IM single doseDoxycycline 100mg BD x14d
Latent (late/>1y) / TertiaryBenzathine Penicillin G 2.4MU IM weekly x3 dosesDoxycycline 100mg BD x28d
NeurosyphilisBenzylpenicillin 18–24MU/day IV x10–14dCeftriaxone 2g IV OD x14d
CongenitalBenzylpenicillin 50,000U/kg IV q12h (1st 7 days)

39. Leptospira spp. (Leptospirosis)

Diseases: Leptospirosis (Weil's disease, Fort Bragg fever)
PriorityAntibioticRouteNotes
MildDoxycycline 100mg BD x7dOralDoxicip
ModerateAmoxicillin 500mg TDS x7dOralor IV Benzylpenicillin
Severe (Weil's)Benzylpenicillin 1.5MU IV q6hIV7 days
Alternative (severe)Ceftriaxone 1g IV ODIVMonocef

40. Borrelia burgdorferi (Lyme Disease)

Diseases: Lyme disease (rare in India but present in some regions)
StageDrug of ChoiceAlternative
Early localizedDoxycycline 100mg BD x10–21dAmoxicillin 500mg TDS x14–21d
Disseminated (cardiac/neuro)Ceftriaxone 2g IV OD x14–28dDoxycycline oral for mild neuro
ArthritisDoxycycline 100mg BD x28dAmoxicillin 500mg TDS x28d

FUNGI (Selected - for reference)


41. Candida spp.

Diseases: Oral thrush, esophagitis, candidemia, vaginal candidiasis, UTI
InfectionDrug of ChoiceAlternative
OropharyngealFluconazole 150–200mg OD x7–14dNystatin suspension
Vaginal (VVC)Fluconazole 150mg single doseClotrimazole pessary
EsophagealFluconazole 200mg OD x14–21dItraconazole
Candidemia (ICU)Caspofungin 70mg loading then 50mg ODMicafungin or Anidulafungin
Step-down (oral)Fluconazole 400mg ODAfter 5–7d IV Echinocandin if sensitive
C. auris (MDR)Echinocandin (Caspofungin/Micafungin)

ANTIBIOTIC COVERAGE SPECTRUM - QUICK VISUAL GUIDE

Antibiotic vs. Organism Coverage

AntibioticGPC (MSSA)GPC (MRSA)GNR (Entero)PseudomonasAnaerobesAtypicals
Amoxicillinβœ… Strep/EnteroβŒβœ… (sensitive)❌Partial❌
Amoxiclavβœ…βŒβœ… + ESBL partialβŒβœ…βŒ
Cloxacillinβœ…βœ… MSSA❌❌❌❌❌
Ceftriaxoneβœ… StrepβŒβœ…βŒβŒβŒ
Piperacillin-TZBβœ…βŒβœ… + ESBL partialβœ…βœ…βœ…βŒ
Meropenemβœ…βŒβœ…βœ… ESBLβœ…βœ…βœ…βœ…βŒ
Vancomycinβœ…βœ… MRSAβœ…βœ…βŒβŒβŒβŒ
MetronidazoleβŒβŒβŒβŒβœ…βœ…βŒ
Azithromycinβœ… StrepβŒβŒβŒβŒβœ…βœ…
Doxycyclineβœ… partial❌❌❌Partialβœ…βœ…
CiprofloxacinβŒβŒβœ…βœ…βŒβœ… partial
Levofloxacinβœ… StrepβŒβœ…PartialβŒβœ…βœ…
Linezolidβœ…βœ…βœ…βœ… MRSA❌❌❌❌
ColistinβŒβŒβœ…βœ… MDRβœ…βœ… MDR❌❌
GPC = Gram-positive cocci | GNR = Gram-negative rods | βœ…βœ… = drug of choice | βœ… = effective | ❌ = inactive

CRITICAL RULES - NEVER FORGET

RuleDetail
Penicillin always works for GASGroup A Strep has never developed penicillin resistance
MSSA = Cloxacillin, not VancomycinVancomycin is inferior for MSSA; use only if truly penicillin-allergic
ESBL = Carbapenem, not CephalosporinCephalosporins fail against ESBL even if MIC appears low (inoculum effect)
Listeria = add AmpicillinCephalosporins don't cover Listeria - critical for elderly/neonatal meningitis
Daptomycin fails in lungInactivated by surfactant - never use for pneumonia
FQ for gonorrhea is outdated>50% resistance globally; use Ceftriaxone IM
Metronidazole > Penicillin for tetanusPenicillin is a GABA antagonist and can worsen spasms
Atypicals have no cell wallBeta-lactams and Glycopeptides are completely inactive
De-escalate in 48–72hAlways narrow spectrum once culture results return
Never treat asymptomatic bacteriuriaExcept in pregnancy and before urological procedures

Generate a drug-to-bacteria cross-reference table (reverse lookup)

Writing File

~/antibiotic-guide/generate_crossref_pdf.py

"""
Drug-to-Bacteria Cross-Reference Table PDF
Reverse lookup: given a drug, which organisms does it cover?
India Hospital & GP Practice | 2025-26
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
    BaseDocTemplate, PageTemplate, Frame, Paragraph, Spacer, Table,
    TableStyle, KeepTogether, PageBreak, NextPageTemplate
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib.colors import HexColor
from reportlab.pdfgen import canvas

# ── Palette ────────────────────────────────────────────────────────────────────
C = {
    'navy':        HexColor('#0f172a'),
    'navy2':       HexColor('#1e3a5f'),
    'blue':        HexColor('#1d4ed8'),
    'blue_lt':     HexColor('#dbeafe'),
    'teal':        HexColor('#0f766e'),
    'teal_lt':     HexColor('#ccfbf1'),
    'red':         HexColor('#b91c1c'),
    'red_lt':      HexColor('#fee2e2'),
    'amber':       HexColor('#b45309'),
    'amber_lt':    HexColor('#fef3c7'),
    'green':       HexColor('#15803d'),
    'green_lt':    HexColor('#dcfce7'),
    'purple':      HexColor('#6d28d9'),
    'purple_lt':   HexColor('#ede9fe'),
    'orange':      HexColor('#c2410c'),
    'orange_lt':   HexColor('#ffedd5'),
    'rose':        HexColor('#be123c'),
    'rose_lt':     HexColor('#ffe4e6'),
    'cyan':        HexColor('#0e7490'),
    'cyan_lt':     HexColor('#cffafe'),
    'lime':        HexColor('#4d7c0f'),
    'lime_lt':     HexColor('#ecfccb'),
    'slate':       HexColor('#334155'),
    'slate_lt':    HexColor('#f1f5f9'),
    'border':      HexColor('#cbd5e1'),
    'text':        HexColor('#1e293b'),
    'text_med':    HexColor('#475569'),
    'text_lt':     HexColor('#94a3b8'),
    'white':       colors.white,
    'row_alt':     HexColor('#f8fafc'),
    'row_norm':    HexColor('#ffffff'),
    # Coverage cell colours
    'doc':         HexColor('#15803d'),   # dark green  – Drug of Choice
    'doc_bg':      HexColor('#bbf7d0'),   # light green
    'eff':         HexColor('#1d4ed8'),   # blue        – Effective
    'eff_bg':      HexColor('#bfdbfe'),   # light blue
    'var':         HexColor('#b45309'),   # amber       – Variable/Conditional
    'var_bg':      HexColor('#fef3c7'),   # light amber
    'res':         HexColor('#b91c1c'),   # red         – Resistant/Inactive
    'res_bg':      HexColor('#fee2e2'),   # light red
}
W, H = A4

# ── Numbered canvas ────────────────────────────────────────────────────────────
class NC(canvas.Canvas):
    def __init__(self, *a, **kw):
        canvas.Canvas.__init__(self, *a, **kw)
        self._saved = []
    def showPage(self):
        self._saved.append(dict(self.__dict__))
        self._startPage()
    def save(self):
        n = len(self._saved)
        for s in self._saved:
            self.__dict__.update(s)
            self._footer(n)
            canvas.Canvas.showPage(self)
        canvas.Canvas.save(self)
    def _footer(self, total):
        self.setFillColor(C['navy'])
        self.rect(0, 0, W, 22, fill=1, stroke=0)
        self.setFillColor(C['white'])
        self.setFont('Helvetica', 7.5)
        self.drawString(20, 7, 'Drug-to-Bacteria Cross-Reference Table  |  India Clinical Practice  |  2025–26')
        self.drawRightString(W - 20, 7, f'Page {self._pageNumber} of {total}')
        self.setStrokeColor(C['blue'])
        self.setLineWidth(2)
        self.line(0, 22, W, 22)


def make_header(c, doc):
    c.saveState()
    c.setFillColor(C['navy'])
    c.rect(0, H - 54, W, 54, fill=1, stroke=0)
    c.setFillColor(C['blue'])
    c.rect(0, H - 57, W, 3, fill=1, stroke=0)
    c.setFillColor(C['white'])
    c.setFont('Helvetica-Bold', 14)
    c.drawString(18, H - 31, 'DRUG-TO-BACTERIA CROSS-REFERENCE TABLE')
    c.setFont('Helvetica', 8.5)
    c.setFillColor(HexColor('#94a3b8'))
    c.drawString(18, H - 47, 'Reverse Lookup: Given a Drug, Which Organisms Does it Cover?  |  India Practice 2025–26')
    c.restoreState()

# ── Styles ─────────────────────────────────────────────────────────────────────
def S(name, **kw):
    base = dict(fontName='Helvetica', fontSize=8, textColor=C['text'], leading=11)
    base.update(kw)
    return ParagraphStyle(name, **base)

ST = {
    'sec':      S('sec', fontName='Helvetica-Bold', fontSize=10, textColor=C['white'], leading=13),
    'hdr':      S('hdr', fontName='Helvetica-Bold', fontSize=7.5, textColor=C['white'], leading=10),
    'drug':     S('drug', fontName='Helvetica-Bold', fontSize=8.5, textColor=C['navy'], leading=12),
    'brand':    S('brand', fontName='Helvetica-Oblique', fontSize=7.5, textColor=C['teal'], leading=10),
    'class_':   S('class_', fontName='Helvetica-Bold', fontSize=7.5, textColor=C['white'], leading=10),
    'doc':      S('doc', fontName='Helvetica-Bold', fontSize=7.5, textColor=C['doc'], leading=10),
    'eff':      S('eff', fontName='Helvetica', fontSize=7.5, textColor=C['eff'], leading=10),
    'var':      S('var', fontName='Helvetica-Oblique', fontSize=7, textColor=C['var'], leading=10),
    'res':      S('res', fontName='Helvetica', fontSize=7, textColor=C['text_lt'], leading=10),
    'note':     S('note', fontName='Helvetica-Oblique', fontSize=7, textColor=C['text_med'], leading=10),
    'body':     S('body', fontName='Helvetica', fontSize=7.5, textColor=C['text'], leading=10),
    'warn_t':   S('warn_t', fontName='Helvetica-Bold', fontSize=7.5, textColor=C['red'], leading=10),
    'warn_b':   S('warn_b', fontName='Helvetica', fontSize=7.5, textColor=C['text'], leading=10),
    'leg':      S('leg', fontName='Helvetica-Bold', fontSize=8, textColor=C['navy'], leading=11),
    'leg_desc': S('leg_desc', fontName='Helvetica', fontSize=7.5, textColor=C['text_med'], leading=10),
}

# ── Coverage cell builder ──────────────────────────────────────────────────────
def doc_cell(text):   # Drug of choice
    return Paragraph(f'<b>β˜… {text}</b>', ST['doc'])
def eff_cell(text):   # Effective
    return Paragraph(text, ST['eff'])
def var_cell(text):   # Variable/conditional
    return Paragraph(f'~ {text}', ST['var'])
def no_cell():        # Not active
    return Paragraph('<font color="#94a3b8">βœ—  Not active</font>', ST['res'])
def na_cell():
    return Paragraph('<font color="#94a3b8">–</font>', ST['res'])

# ── DATA ───────────────────────────────────────────────────────────────────────
# Each entry:
# (Drug name, Brand (India), Drug class, coverage_dict, clinical_note)
# coverage_dict keys = organism groups (defined below)
# values: 'doc' | 'eff' | 'var' | 'no'

# Organism column headers (abbreviated to fit)
ORG_COLS = [
    'Strep\n(GAS/GBS/\nViridans)',
    'Pneumo-\ncoccus',
    'MSSA\n(S. aureus)',
    'MRSA',
    'Entero-\ncoccus',
    'E. coli /\nKlebsiella\n(Sensitive)',
    'ESBL\nOrganisms',
    'Pseudo-\nmonas',
    'Acineto-\nbacter',
    'H. influ-\nenzae',
    'Anaer-\nobes',
    'Atypicals\n(Myco/Chlam\n/Rickett)',
]

# Row format: (Drug, Brand, Class, [cov per col 0..11], note)
# Coverage codes: D=doc, E=eff, V=var, N=no
DRUG_DATA = [
    # ── PENICILLINS ──────────────────────────────────────────────────────────
    ('Benzylpenicillin\n(Penicillin G)',
     'Crystapen (Pfizer)',
     'Natural Penicillin',
     ['D','D','N','N','E','N','N','N','N','N','N','N'],
     'IV only. Drug of choice: GAS, GBS, viridans strep IE, meningococcus, pneumococcus (sensitive). Inactive against Staph.'),

    ('Amoxicillin',
     'Mox, Novamox\n(Cipla/Ranbaxy)',
     'Aminopenicillin',
     ['D','E','N','N','E','E','N','N','N','E','N','N'],
     'Oral. Drug of choice for pharyngitis, otitis media, mild CAP. ESBL/beta-lactamase-producing strains inactive.'),

    ('Amoxicillin +\nClavulanic Acid',
     'Augmentin (GSK)\nClavam (Alkem)',
     'Aminopenicillin\n+ BLI',
     ['D','E','E','N','E','E','V','N','N','E','E','N'],
     'Oral/IV. Most prescribed antibiotic combination in India (102+ brands). Covers beta-lactamase producers. ESBL coverage marginal; do not rely for definitive ESBL treatment.'),

    ('Cloxacillin /\nFlucloxacillin',
     'Clox (Cipla)\nBioclox (Alkem)',
     'Penicillinase-\nResistant Pen.',
     ['V','N','D','N','N','N','N','N','N','N','N','N'],
     'Oral/IV. Drug of choice for MSSA skin, bone, endocarditis. Completely inactive against MRSA and Gram-negatives. Must be taken on empty stomach.'),

    ('Ampicillin /\nAmpicillin-\nSulbactam',
     'Roscillin inj\nUnasyn',
     'Aminopenicillin\n(Β± BLI)',
     ['D','E','N','N','D','E','N','N','V','E','E','N'],
     'Ampicillin alone: covers Listeria (critical for neonatal/elderly meningitis). Sulbactam component has intrinsic activity against Acinetobacter.'),

    ('Piperacillin-\nTazobactam',
     'Tazact (Sun)\nPipcin-TZ (Cipla)',
     'Anti-pseudomonal\nPenicillin + BLI',
     ['E','E','E','N','E','E','V','D','V','E','E','N'],
     'IV only. Broadest penicillin. ESBL coverage unreliable (inoculum effect – do NOT use for definitive ESBL). Best single agent for Pseudomonal sepsis empirically. NOT for MRSA.'),

    # ── CEPHALOSPORINS ───────────────────────────────────────────────────────
    ('Cephalexin /\nCefadroxil\n(1st Gen)',
     'Sporidex (Sun)\nDroxyl (Cipla)',
     '1st Gen\nCephalosporin',
     ['E','E','E','N','N','V','N','N','N','V','N','N'],
     'Oral. Excellent for MSSA SSTI and Strep pharyngitis. No Gram-negative activity of clinical significance. Step-down from IV for MSSA osteomyelitis.'),

    ('Cefuroxime\nAxetil\n(2nd Gen)',
     'Zinnat (GSK)\nCeftin (Alkem)',
     '2nd Gen\nCephalosporin',
     ['E','E','E','N','N','E','N','N','N','E','N','N'],
     'Oral. Broader than 1st gen. Good for otitis media, sinusitis, mild CAP with H. influenzae risk. Lyme disease (early). No Pseudomonal activity.'),

    ('Ceftriaxone\n(3rd Gen)',
     'Monocef (Biochem)\nOframax (Ranbaxy)',
     '3rd Gen\nCephalosporin',
     ['E','D','E','N','N','E','N','N','N','E','N','N'],
     'IV/IM. Workhorse of hospital practice. Drug of choice: pneumococcal meningitis, CAP, typhoid (IV). Once-daily dosing. Does NOT cover Pseudomonas, MRSA, anaerobes, Enterococcus.'),

    ('Cefixime\n(3rd Gen Oral)',
     'Taxim-O (Alkem)\nZifi (FDC)',
     '3rd Gen Oral\nCephalosporin',
     ['E','E','N','N','N','E','N','N','N','E','N','N'],
     'Oral only. Drug of choice for typhoid in India (14d) and gonorrhea (400mg single dose). No MSSA, no Pseudomonas. Most widely prescribed oral 3rd-gen ceph in India.'),

    ('Ceftazidime\n(3rd Gen Anti-\npseudomonal)',
     'Fortum (GSK)\nTazide (Cipla)',
     '3rd Gen Anti-\npseudomonal Ceph',
     ['E','E','N','N','N','E','N','D','N','E','N','N'],
     'IV. Anti-pseudomonal cephalosporin. Less Gram-positive coverage than Ceftriaxone. Used in febrile neutropenia, VAP with Pseudomonas risk.'),

    ('Cefepime\n(4th Gen)',
     'Cefipim (Sun)\nMaxipime',
     '4th Gen\nCephalosporin',
     ['E','E','E','N','N','E','N','E','N','E','N','N'],
     'IV. Broader spectrum than ceftazidime. Good Pseudomonas and Gram-positive coverage. Used in HAP, febrile neutropenia, complicated UTI.'),

    ('Cefoperazone-\nSulbactam',
     'Magnex-Forte (Pfizer)\nSulbacef (Cipla)',
     '3rd Gen Ceph\n+ BLI',
     ['E','E','E','N','N','E','V','E','E','E','E','N'],
     'IV. Sulbactam component has intrinsic activity against Acinetobacter baumannii. Used widely in Indian ICUs for HAP/VAP. Variable ESBL coverage.'),

    ('Ceftazidime-\nAvibactam',
     'Avycaz (Pfizer)',
     'Advanced Ceph\n+ Novel BLI',
     ['N','N','N','N','N','E','E','E','V','E','N','N'],
     'IV. Reserved for KPC-producing CRE and MDR Pseudomonas. Not active against MBL (NDM, VIM). Game-changer for KPC infections in India.'),

    # ── CARBAPENEMS ──────────────────────────────────────────────────────────
    ('Meropenem',
     'Meromer (Zydus)\nMeronem (AZ)',
     'Carbapenem',
     ['E','E','E','N','E','D','D','E','E','E','D','N'],
     'IV. Broadest spectrum beta-lactam. Drug of choice for ESBL infections. Preferred carbapenem for CNS infections (no seizure risk unlike Imipenem). NOT active against MRSA.'),

    ('Imipenem-\nCilastatin',
     'Tienam (MSD)\nImipem (Cipla)',
     'Carbapenem',
     ['E','E','E','N','E','D','D','E','E','E','D','N'],
     'IV. Similar to Meropenem. Avoid for CNS infections (seizure risk). Cilastatin prevents renal metabolism. Less Pseudomonal activity than Meropenem.'),

    ('Ertapenem',
     'Invanz (MSD)',
     'Carbapenem\n(No Pseudo)',
     ['E','E','E','N','N','D','D','N','N','E','D','N'],
     'IV/IM once daily. Excellent for ESBL outpatient/step-down therapy. Critically: NO activity against Pseudomonas or Acinetobacter. Preserves carbapenems active against MDR organisms.'),

    # ── GLYCOPEPTIDES ────────────────────────────────────────────────────────
    ('Vancomycin',
     'Vancorid (Abbott)\nVancotex',
     'Glycopeptide',
     ['E','E','E','D','E','N','N','N','N','N','N','N'],
     'IV (or oral for C. diff). Drug of choice: MRSA all infections. AUC/MIC-guided dosing. NEVER use for MSSA if Cloxacillin is available (inferior outcomes). Nephrotoxic.'),

    ('Teicoplanin',
     'Targocid (Sanofi)\nTeicomine',
     'Glycopeptide',
     ['E','E','E','D','E','N','N','N','N','N','N','N'],
     'IV. Alternative to Vancomycin. Easier monitoring. Used for MRSA, endocarditis, prosthetic joint infections. Add Rifampicin for biofilm infections.'),

    # ── OXAZOLIDINONES ───────────────────────────────────────────────────────
    ('Linezolid',
     'Linox (Cipla)\nZyvox (Pfizer)',
     'Oxazolidinone',
     ['E','E','E','D','E','N','N','N','N','N','N','N'],
     'IV/Oral (100% bioavailability). Drug of choice for MRSA pneumonia and osteoarticular infections. Also active in MDR-TB regimens. Bacteriostatic. Monitor CBC weekly (thrombocytopenia). Serotonin syndrome risk.'),

    # ── LIPOPEPTIDES ─────────────────────────────────────────────────────────
    ('Daptomycin',
     'Cubicin (MSD)',
     'Lipopeptide\n(Cyclic)',
     ['E','E','E','D','E','N','N','N','N','N','N','N'],
     'IV only. Rapidly bactericidal. Drug of choice: MRSA bacteremia, right-sided endocarditis. NEVER use for pneumonia (inactivated by pulmonary surfactant). Monitor CPK weekly.'),

    # ── FLUOROQUINOLONES ─────────────────────────────────────────────────────
    ('Ciprofloxacin',
     'Cifran (Ranbaxy)\nCiplox (Cipla)',
     '2nd Gen\nFluoroquinolone',
     ['N','N','N','N','N','E','N','E','N','E','N','V'],
     'Oral/IV. Best oral anti-pseudomonal. Drug of choice: chronic bacterial prostatitis (4 weeks), anthrax prophylaxis. HIGH resistance in India for UTI (>60%). Poor Strep/Pneumo coverage.'),

    ('Levofloxacin',
     'Glevo (Glenmark)\nLox (Cipla)',
     '3rd Gen\nFluoroquinolone\n(Respiratory)',
     ['E','D','N','N','N','E','N','V','N','E','N','D'],
     'Oral/IV. "Respiratory quinolone" – excellent Pneumococcus and atypical coverage. Drug of choice: severe CAP when beta-lactam fails, Legionella. Used in MDR-TB second-line.'),

    ('Moxifloxacin',
     'Avelox (Bayer)\nMoxiford (Alkem)',
     '4th Gen\nFluoroquinolone',
     ['E','D','N','N','N','N','N','N','N','N','E','D'],
     'Oral/IV. Best anaerobic coverage among FQs. Excellent for CAP, sinusitis, AECB. NO urinary concentration – never use for UTI. No Pseudomonal or MRSA activity.'),

    ('Ofloxacin',
     'Zanocin (Ranbaxy)\nOflox (Cipla)',
     '2nd Gen\nFluoroquinolone',
     ['N','N','N','N','N','E','N','V','N','E','N','E'],
     'Oral/IV. Active against Chlamydia, Mycobacterium leprae (MDT). Used in MDR-TB regimens. Similar to Ciprofloxacin for Gram-negatives.'),

    # ── MACROLIDES ───────────────────────────────────────────────────────────
    ('Azithromycin',
     'Azithral (Alembic)\nAzee (Cipla)',
     'Macrolide\n(Azalide)',
     ['E','E','N','N','N','N','N','N','N','E','N','D'],
     'Oral/IV. Drug of choice: atypical pneumonia (Mycoplasma, Chlamydophila), Chlamydia trachomatis (1g single dose), Campylobacter, typhoid (alternative), MAC prophylaxis. Prolonged tissue half-life.'),

    ('Clarithromycin',
     'Claribid (Cipla)\nKlaricid (Abbott)',
     'Macrolide',
     ['E','E','N','N','N','N','N','N','N','E','N','D'],
     'Oral. Drug of choice (component): H. pylori eradication triple therapy. Also atypical CAP. Better GI tolerability than Erythromycin. MAC prophylaxis/treatment in HIV.'),

    ('Erythromycin',
     'Erythrocin (Abbott)\nAlthrocin (Alembic)',
     'Macrolide\n(Original)',
     ['E','E','N','N','N','N','N','N','N','E','N','E'],
     'Oral. Oldest macrolide. Used for Strep infections in penicillin-allergic, Chlamydia (inferior to Azithromycin), diphtheria carriers. Prokinetic at low doses (gastroparesis).'),

    # ── TETRACYCLINES ────────────────────────────────────────────────────────
    ('Doxycycline',
     'Doxicip (Cipla)\nDoxt (Alkem)',
     'Tetracycline\n(2nd Gen)',
     ['V','V','N','N','N','N','N','N','N','V','V','D'],
     'Oral/IV. Drug of choice: scrub typhus, rickettsial diseases, brucellosis (+ Rifampicin), leptospirosis (mild), Chlamydia, malaria prophylaxis, acne (long-term). Avoid in pregnancy and children <8y.'),

    ('Minocycline',
     'Minoz (Sun)\nMinolox (Cipla)',
     'Tetracycline\n(2nd Gen)',
     ['V','V','E','V','N','N','N','N','V','V','N','D'],
     'Oral. Drug of choice: acne vulgaris (long-term). Also community MRSA skin infections (CA-MRSA). Nocardiosis. Penetrates CSF better than Doxycycline. Vestibular side effects.'),

    # ── NITROIMIDAZOLES ──────────────────────────────────────────────────────
    ('Metronidazole',
     'Flagyl (Abbott)\nMetrogyl (J.B.Chem)',
     'Nitroimidazole',
     ['N','N','N','N','N','N','N','N','N','N','D','N'],
     'Oral/IV. Drug of choice: amoebiasis, giardiasis, BV, anaerobic infections (B. fragilis, C. difficile), tetanus (preferred over Penicillin). Zero aerobic coverage. Avoid alcohol.'),

    ('Tinidazole',
     'Fasigyn (Pfizer)\nTiniba (Cipla)',
     'Nitroimidazole\n(2nd Gen)',
     ['N','N','N','N','N','N','N','N','N','N','D','N'],
     'Oral. Better tolerated than Metronidazole (less nausea). Drug of choice: giardiasis (2g single dose). Amoebiasis, trichomoniasis, BV. Shorter course than Metro.'),

    # ── SULFONAMIDES ─────────────────────────────────────────────────────────
    ('Cotrimoxazole\n(TMP-SMX)',
     'Septran (GSK)\nBactrim (Roche)',
     'Sulfonamide +\nTMP',
     ['E','E','N','V','V','V','N','N','N','E','N','N'],
     'Oral/IV. Drug of choice: PCP prophylaxis/treatment (HIV), Nocardia, Toxoplasma prophylaxis. CA-MRSA skin infections (Septran 960mg BD). UTI where E. coli sensitive. Avoid in 1st trimester.'),

    # ── LINCOSAMIDES ─────────────────────────────────────────────────────────
    ('Clindamycin',
     'Dalacin C (Pfizer)\nClinmycin (Cipla)',
     'Lincosamide',
     ['E','E','E','V','N','N','N','N','N','N','D','N'],
     'Oral/IV. Excellent anaerobic and Gram-positive coverage. Drug of choice: dental/oral anaerobic infections, bone osteomyelitis (excellent bone penetration), CA-MRSA (combination), NF (blocks GAS toxin). C. diff risk with use.'),

    # ── AMINOGLYCOSIDES ──────────────────────────────────────────────────────
    ('Gentamicin /\nAmikacin',
     'Garamycin (Schering)\nAmikin (BMS)',
     'Aminoglycoside',
     ['N','N','E','N','V','E','V','E','E','E','N','N'],
     'IV/IM only. Used for synergy (+ Penicillin for IE), Gram-neg sepsis. Amikacin for Gentamicin-resistant organisms. Nephrotoxic + ototoxic – once-daily dosing preferred. Monitor levels. Avoid in CKD.'),

    # ── POLYMYXINS ───────────────────────────────────────────────────────────
    ('Colistin\n(Polymyxin E)',
     'Colistin-CMS\n(Cipla/Sun)',
     'Polymyxin\n(Last Resort)',
     ['N','N','N','N','N','E','E','D','D','N','N','N'],
     'IV/inhaled. Last-resort only. Drug of choice: XDR Acinetobacter, PDR Pseudomonas, CRE. Nephrotoxic (~50% AKI). Always use in combination. Monitor creatinine daily. 9MU loading dose mandatory.'),

    # ── RIFAMYCINS ───────────────────────────────────────────────────────────
    ('Rifampicin',
     'Rifampicin (Lupin)\nRimactane',
     'Rifamycin',
     ['E','N','E','E','N','N','N','N','N','N','N','V'],
     'Oral. NEVER use as monotherapy (rapid resistance). Combinations: TB (HRZE), leprosy (MDT), Brucellosis (+ Doxy), MRSA prosthetic infections (+ Vancomycin/Teicoplanin), meningococcal prophylaxis. Strong CYP450 inducer.'),

    ('Rifaximin',
     'Rcifax (Cipla)\nRifagut (Sun)',
     'Rifamycin\n(Non-absorbed)',
     ['N','N','N','N','N','V','N','N','N','N','E','N'],
     'Oral only (non-absorbed – acts in gut lumen). Traveler\'s diarrhea (non-invasive E. coli), hepatic encephalopathy prevention (550mg BD), SIBO (200mg TDS). Not for systemic infections.'),

    # ── NITROFURANS ──────────────────────────────────────────────────────────
    ('Nitrofurantoin',
     'Niftran (Alkem)\nFuradantin',
     'Nitrofuran',
     ['N','N','N','N','E','E','V','N','N','N','N','N'],
     'Oral only. Concentrated exclusively in urine – use ONLY for lower UTI/cystitis. Drug of choice: uncomplicated UTI in women and pregnancy (2nd trimester). NOT for pyelonephritis (inadequate tissue levels). Do not use if CrCl <30.'),

    # ── TIGECYCLINE ──────────────────────────────────────────────────────────
    ('Tigecycline',
     'Tygacil (Pfizer)',
     'Glycylcycline',
     ['E','E','E','E','E','E','E','N','E','E','E','E'],
     'IV only. Broadest non-carbapenem spectrum. Drug of choice: XDR Acinetobacter combination therapy. NOT active against Pseudomonas. Do NOT use for bacteremia or UTI (inadequate serum/urine levels). High mortality in bloodstream infections.'),
]

# ── Table builders ─────────────────────────────────────────────────────────────
ORG_WIDTHS = [2.15*cm] * 12
CELL_RENDERERS = {
    'D': doc_cell,
    'E': eff_cell,
    'V': var_cell,
    'N': no_cell,
}

def cov_cell(code, text=''):
    if code == 'D':
        p = Paragraph('<b>β˜… DOC</b>', ParagraphStyle('dc',
            fontName='Helvetica-Bold', fontSize=7, textColor=C['doc'], leading=9))
        bg = C['doc_bg']
    elif code == 'E':
        p = Paragraph('βœ” Eff.', ParagraphStyle('ec',
            fontName='Helvetica', fontSize=7, textColor=C['eff'], leading=9))
        bg = C['eff_bg']
    elif code == 'V':
        p = Paragraph('~ Var.', ParagraphStyle('vc',
            fontName='Helvetica-Oblique', fontSize=7, textColor=C['var'], leading=9))
        bg = C['var_bg']
    else:
        p = Paragraph('βœ— No', ParagraphStyle('nc',
            fontName='Helvetica', fontSize=6.5, textColor=C['text_lt'], leading=9))
        bg = C['row_norm']
    return p, bg


def build_drug_table(drug_entries, styles):
    """Build the main cross-reference table for a set of drug entries."""
    # Column widths: drug col + 12 org cols
    drug_col_w = 3.0*cm
    brand_col_w = 2.6*cm
    # Org cols spread across remaining width
    avail_w = W - 3.0*cm - drug_col_w - brand_col_w
    oc_w = avail_w / 12

    col_widths = [drug_col_w, brand_col_w] + [oc_w] * 12

    # Header row
    header_row = [
        Paragraph('<b>Drug</b>', ST['hdr']),
        Paragraph('<b>Brand / Class</b>', ST['hdr']),
    ]
    for org in ORG_COLS:
        header_row.append(Paragraph(f'<b>{org}</b>', ParagraphStyle('oh',
            fontName='Helvetica-Bold', fontSize=6, textColor=C['white'], leading=8, alignment=TA_CENTER)))

    rows = [header_row]
    style_cmds = [
        # Header
        ('BACKGROUND', (0,0), (-1,0), C['navy']),
        ('TEXTCOLOR', (0,0), (-1,0), C['white']),
        ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
        ('TOPPADDING', (0,0), (-1,0), 5),
        ('BOTTOMPADDING', (0,0), (-1,0), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 4),
        ('RIGHTPADDING', (0,0), (-1,-1), 4),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,1), (-1,-1), 4),
        ('BOTTOMPADDING', (0,1), (-1,-1), 4),
        ('GRID', (0,0), (-1,-1), 0.3, C['border']),
        ('LINEBELOW', (0,0), (-1,0), 1.2, C['blue']),
        ('ALIGN', (2,0), (-1,-1), 'CENTER'),
    ]

    for row_i, (drug, brand, cls, cov, note) in enumerate(drug_entries):
        r = row_i + 1  # 0 = header
        bg_base = C['row_alt'] if row_i % 2 == 0 else C['row_norm']
        style_cmds.append(('BACKGROUND', (0,r), (1,r), bg_base))

        row = [
            Paragraph(drug.replace('\n', '<br/>'), ST['drug']),
            Paragraph(f'{brand.replace(chr(10), "<br/>")}<br/><font size="6.5" color="#6d28d9"><i>{cls.replace(chr(10), " ")}</i></font>', ST['brand']),
        ]
        for col_i, code in enumerate(cov):
            p, cell_bg = cov_cell(code)
            row.append(p)
            c_col = 2 + col_i
            style_cmds.append(('BACKGROUND', (c_col,r), (c_col,r), cell_bg))

        rows.append(row)

    t = Table(rows, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle(style_cmds))
    return t


def build_notes_table(drug_entries):
    """Build clinical notes table."""
    header = [
        Paragraph('<b>Drug</b>', ST['hdr']),
        Paragraph('<b>Clinical Notes &amp; Key Facts</b>', ST['hdr']),
    ]
    rows = [header]
    for drug, brand, cls, cov, note in drug_entries:
        rows.append([
            Paragraph(drug.replace('\n', '<br/>') + f'<br/><font size="6.5" color="#0f766e"><i>{cls.replace(chr(10), " ")}</i></font>',
                ST['drug']),
            Paragraph(note, ST['note']),
        ])
    t = Table(rows, colWidths=[4.5*cm, W - 3*cm - 4.5*cm], repeatRows=1)
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), C['navy2']),
        ('TEXTCOLOR', (0,0), (-1,0), C['white']),
        ('TOPPADDING', (0,0), (-1,0), 5),
        ('BOTTOMPADDING', (0,0), (-1,0), 5),
        ('GRID', (0,0), (-1,-1), 0.3, C['border']),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,1), (-1,-1), 4),
        ('BOTTOMPADDING', (0,1), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
        ('RIGHTPADDING', (0,0), (-1,-1), 5),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [C['row_norm'], C['row_alt']]),
        ('LINEBELOW', (0,0), (-1,0), 1.2, C['blue']),
    ]))
    return t


def sec_hdr(title, bg):
    t = Table([[Paragraph(title, ST['sec'])]], colWidths=[W - 3*cm])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    return t


# ── Legend ─────────────────────────────────────────────────────────────────────
def build_legend():
    items = [
        (C['doc_bg'], C['doc'], 'β˜…  DOC', 'Drug of Choice – best proven agent for this organism'),
        (C['eff_bg'], C['eff'], 'βœ”  Eff.', 'Effective – clinically active, used routinely'),
        (C['var_bg'], C['var'], '~  Var.', 'Variable – conditional activity (resistance patterns, site-specific, or organism sub-type dependent)'),
        (C['red_lt'], C['red'], 'βœ—  No', 'Not active – intrinsically resistant or clinically inactive'),
    ]
    rows = []
    for bg, fg, label, desc in items:
        p_label = Paragraph(f'<b>{label}</b>', ParagraphStyle('ll',
            fontName='Helvetica-Bold', fontSize=8, textColor=fg, leading=11))
        p_desc = Paragraph(desc, ST['leg_desc'])
        swatch = Table([['']], colWidths=[0.8*cm], rowHeights=[0.55*cm])
        swatch.setStyle(TableStyle([('BACKGROUND', (0,0), (0,0), bg),
                                    ('BOX', (0,0), (0,0), 0.5, C['border'])]))
        rows.append([swatch, p_label, p_desc])

    t = Table(rows, colWidths=[1.0*cm, 3.0*cm, W - 3*cm - 4.0*cm])
    t.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 3),
        ('BOTTOMPADDING', (0,0), (-1,-1), 3),
        ('LEFTPADDING', (0,0), (-1,-1), 5),
    ]))
    wrap = Table([[t]], colWidths=[W - 3*cm])
    wrap.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['slate_lt']),
        ('BOX', (0,0), (-1,-1), 0.5, C['border']),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ]))
    return wrap


# ── Cover page ─────────────────────────────────────────────────────────────────
def make_cover():
    elems = []
    elems.append(Spacer(1, 2.5*cm))

    rows = [
        [Paragraph('DRUG-TO-BACTERIA', ParagraphStyle('t1', fontName='Helvetica-Bold',
            fontSize=30, textColor=C['white'], leading=34, alignment=TA_CENTER))],
        [Paragraph('CROSS-REFERENCE TABLE', ParagraphStyle('t2', fontName='Helvetica-Bold',
            fontSize=24, textColor=HexColor('#93c5fd'), leading=28, alignment=TA_CENTER))],
        [Paragraph('Reverse Lookup: For Each Drug, Which Organisms Are Covered?',
            ParagraphStyle('t3', fontName='Helvetica', fontSize=12,
            textColor=HexColor('#94a3b8'), leading=16, alignment=TA_CENTER))],
    ]
    ct = Table(rows, colWidths=[W - 3*cm])
    ct.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['navy']),
        ('TOPPADDING', (0,0), (-1,-1), 10),
        ('BOTTOMPADDING', (0,0), (-1,-1), 10),
        ('LEFTPADDING', (0,0), (-1,-1), 20),
        ('RIGHTPADDING', (0,0), (-1,-1), 20),
    ]))
    elems.append(ct)
    elems.append(Spacer(1, 0.4*cm))

    sub = Table([[Paragraph(
        'India Hospital &amp; General Practice  |  Edition 2025–26  |  40 Antibiotics Γ— 12 Organism Groups',
        ParagraphStyle('s', fontName='Helvetica', fontSize=10.5, textColor=C['navy'],
                       leading=14, alignment=TA_CENTER))]], colWidths=[W - 3*cm])
    sub.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['blue_lt']),
        ('TOPPADDING', (0,0), (-1,-1), 10),
        ('BOTTOMPADDING', (0,0), (-1,-1), 10),
    ]))
    elems.append(sub)
    elems.append(Spacer(1, 0.8*cm))

    # Classes covered
    classes = [
        ('πŸ’Š', 'Penicillins', 'Benzylpenicillin, Amoxicillin, Co-amoxiclav, Cloxacillin, Ampicillin-Sulbactam, Pip-Tazo'),
        ('πŸ’Š', 'Cephalosporins', 'Cephalexin (1G), Cefuroxime (2G), Ceftriaxone, Cefixime, Ceftazidime, Cefepime (4G), Cef-Avibactam'),
        ('πŸ’Š', 'Carbapenems', 'Meropenem, Imipenem-Cilastatin, Ertapenem'),
        ('πŸ’Š', 'Glycopeptides & Lipopeptides', 'Vancomycin, Teicoplanin, Daptomycin'),
        ('πŸ’Š', 'Oxazolidinones', 'Linezolid'),
        ('πŸ’Š', 'Fluoroquinolones', 'Ciprofloxacin, Levofloxacin, Moxifloxacin, Ofloxacin'),
        ('πŸ’Š', 'Macrolides', 'Azithromycin, Clarithromycin, Erythromycin'),
        ('πŸ’Š', 'Tetracyclines', 'Doxycycline, Minocycline'),
        ('πŸ’Š', 'Nitroimidazoles', 'Metronidazole, Tinidazole'),
        ('πŸ’Š', 'Others', 'Cotrimoxazole, Clindamycin, Aminoglycosides, Colistin, Rifampicin, Rifaximin, Nitrofurantoin, Tigecycline'),
    ]
    cls_rows = []
    for icon, cls, detail in classes:
        cls_rows.append([
            Paragraph(icon, ParagraphStyle('ic', fontName='Helvetica-Bold', fontSize=11,
                leading=14, alignment=TA_CENTER)),
            Paragraph(f'<b>{cls}</b><br/><font size="7.5" color="#64748b">{detail}</font>',
                ParagraphStyle('cr', fontName='Helvetica', fontSize=9, leading=13, textColor=C['navy'])),
        ])
    cls_t = Table(cls_rows, colWidths=[0.9*cm, W - 3*cm - 0.9*cm])
    cls_t.setStyle(TableStyle([
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [C['blue_lt'], C['row_norm']]),
        ('BOX', (0,0), (-1,-1), 0.5, C['border']),
        ('LINEBELOW', (0,0), (-1,-1), 0.3, C['border']),
    ]))
    elems.append(cls_t)
    elems.append(Spacer(1, 0.6*cm))

    # Organism columns legend
    org_info = [
        ('Strep (GAS/GBS/Viridans)', 'Group A/B Strep, viridans strep, oral Streptococci'),
        ('Pneumococcus', 'S. pneumoniae – CAP, meningitis, sinusitis, otitis media'),
        ('MSSA (S. aureus)', 'Methicillin-sensitive S. aureus – skin, bone, bacteremia'),
        ('MRSA', 'Methicillin-resistant S. aureus – hospital and community'),
        ('Enterococcus', 'E. faecalis / E. faecium – UTI, endocarditis'),
        ('E. coli / Klebsiella (Sensitive)', 'Common Enterobacteriaceae – UTI, sepsis, pneumonia'),
        ('ESBL Organisms', 'Extended-spectrum beta-lactamase producers – resistant Enterobacteriaceae'),
        ('Pseudomonas', 'P. aeruginosa – VAP, burn infections, UTI, cystic fibrosis'),
        ('Acinetobacter', 'A. baumannii – ICU-acquired, ventilator-associated infections'),
        ('H. influenzae', 'Haemophilus – otitis media, sinusitis, AECB, epiglottitis'),
        ('Anaerobes', 'B. fragilis, Clostridia, oral anaerobes – abdominal, dental'),
        ('Atypicals', 'Mycoplasma, Chlamydophila, Rickettsia, Legionella'),
    ]
    o_rows = []
    for org, desc in org_info:
        o_rows.append([
            Paragraph(f'<b>{org}</b>', ParagraphStyle('on', fontName='Helvetica-Bold',
                fontSize=7.5, textColor=C['navy'], leading=10)),
            Paragraph(desc, ParagraphStyle('od', fontName='Helvetica',
                fontSize=7.5, textColor=C['text_med'], leading=10)),
        ])
    org_t = Table(o_rows, colWidths=[5.5*cm, W - 3*cm - 5.5*cm])
    org_t.setStyle(TableStyle([
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [C['teal_lt'], C['row_norm']]),
        ('GRID', (0,0), (-1,-1), 0.3, C['border']),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,0), (-1,-1), 4),
        ('BOTTOMPADDING', (0,0), (-1,-1), 4),
        ('LEFTPADDING', (0,0), (-1,-1), 7),
        ('RIGHTPADDING', (0,0), (-1,-1), 7),
    ]))
    org_hdr = Table([[Paragraph('<b>ORGANISM COLUMN GUIDE</b>',
        ParagraphStyle('oh2', fontName='Helvetica-Bold', fontSize=9,
        textColor=C['white'], leading=12))]], colWidths=[W - 3*cm])
    org_hdr.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['teal']),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ]))
    elems.append(org_hdr)
    elems.append(org_t)
    elems.append(Spacer(1, 0.6*cm))

    disc = Paragraph(
        '<b>⚠ Important:</b> This table represents general spectrum of activity under typical susceptibility patterns. '
        'Coverage may vary based on local resistance rates, organism sub-type, and infection site. '
        'ALWAYS confirm with culture/sensitivity results and local antibiogram data. '
        'De-escalate empiric broad-spectrum therapy within 48–72 hours.',
        ParagraphStyle('d', fontName='Helvetica-Oblique', fontSize=7.5, textColor=C['text_med'], leading=11))
    disc_t = Table([[disc]], colWidths=[W - 3*cm])
    disc_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['amber_lt']),
        ('BOX', (0,0), (-1,-1), 0.8, C['amber']),
        ('TOPPADDING', (0,0), (-1,-1), 8),
        ('BOTTOMPADDING', (0,0), (-1,-1), 8),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('RIGHTPADDING', (0,0), (-1,-1), 10),
    ]))
    elems.append(disc_t)
    elems.append(PageBreak())
    return elems


# ── Drug class sections ─────────────────────────────────────────────────────────
CLASS_SECTIONS = [
    ('πŸ’Š  PENICILLINS', C['blue'],
     [d for d in DRUG_DATA if 'Penicillin' in d[2] or 'penicillin' in d[2].lower() or 'Aminopenicillin' in d[2] or 'BLI' in d[2]]),
    ('πŸ’Š  CEPHALOSPORINS', C['teal'],
     [d for d in DRUG_DATA if 'Cephalosporin' in d[2] or 'Ceph' in d[2]]),
    ('πŸ’Š  CARBAPENEMS', C['amber'],
     [d for d in DRUG_DATA if 'Carbapenem' in d[2]]),
    ('πŸ’Š  GLYCOPEPTIDES, LIPOPEPTIDES & OXAZOLIDINONES', C['purple'],
     [d for d in DRUG_DATA if any(x in d[2] for x in ['Glycopeptide','Lipopeptide','Oxazolidinone'])]),
    ('πŸ’Š  FLUOROQUINOLONES', C['orange'],
     [d for d in DRUG_DATA if 'Fluoroquinolone' in d[2]]),
    ('πŸ’Š  MACROLIDES & TETRACYCLINES', C['rose'],
     [d for d in DRUG_DATA if any(x in d[2] for x in ['Macrolide','Tetracycline'])]),
    ('πŸ’Š  NITROIMIDAZOLES, SULFONAMIDES & LINCOSAMIDES', C['cyan'],
     [d for d in DRUG_DATA if any(x in d[2] for x in ['Nitroimidazole','Sulfonamide','Lincosamide'])]),
    ('πŸ’Š  AMINOGLYCOSIDES, POLYMYXINS, RIFAMYCINS & OTHERS', C['slate'],
     [d for d in DRUG_DATA if any(x in d[2] for x in ['Aminoglycoside','Polymyxin','Rifamycin','Nitrofuran','Glycylcycline'])]),
]


# ── Build PDF ──────────────────────────────────────────────────────────────────
def build():
    out = '/tmp/workspace/antibiotic-guide/Drug_Bacteria_CrossReference_India.pdf'
    doc = BaseDocTemplate(
        out, pagesize=A4,
        leftMargin=1.5*cm, rightMargin=1.5*cm,
        topMargin=2.3*cm, bottomMargin=1.5*cm,
        title='Drug-to-Bacteria Cross-Reference Table – India',
        author='Clinical Reference',
        subject='Antibiotic spectrum reverse lookup',
    )

    # Cover template (no header)
    cf = Frame(0, 0, W, H, leftPadding=1.5*cm, rightPadding=1.5*cm,
               topPadding=1.5*cm, bottomPadding=1.5*cm)
    def cover_bg(c, d):
        c.setFillColor(C['navy']); c.rect(0, 0, W, H, fill=1, stroke=0)
        c.setFillColor(C['blue']); c.rect(0, 0, W, 8, fill=1, stroke=0)
        c.rect(0, H - 8, W, 8, fill=1, stroke=0)
    cover_tpl = PageTemplate(id='Cover', frames=[cf])
    cover_tpl.beforeDrawPage = cover_bg

    # Content template
    content_f = Frame(1.5*cm, 1.5*cm, W - 3*cm, H - 3.9*cm,
                      leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0)
    content_tpl = PageTemplate(id='Content', frames=[content_f], onPage=make_header)
    doc.addPageTemplates([cover_tpl, content_tpl])

    elems = []
    elems.extend(make_cover())
    elems.append(NextPageTemplate('Content'))

    # Legend first
    leg_hdr = Table([[Paragraph('<b>COVERAGE LEGEND</b>', ST['sec'])]], colWidths=[W - 3*cm])
    leg_hdr.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['navy']),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ]))
    elems.append(leg_hdr)
    elems.append(build_legend())
    elems.append(Spacer(1, 0.4*cm))

    # One table per class section
    for sec_title, sec_color, drug_list in CLASS_SECTIONS:
        if not drug_list:
            continue
        elems.append(sec_hdr(sec_title, sec_color))
        elems.append(build_drug_table(drug_list, ST))
        elems.append(Spacer(1, 0.35*cm))

    # Clinical notes section
    elems.append(sec_hdr('πŸ“‹  CLINICAL NOTES & KEY FACTS (All Drugs)', C['slate']))
    elems.append(build_notes_table(DRUG_DATA))
    elems.append(Spacer(1, 0.4*cm))

    # Critical rules table
    rules = [
        ('MSSA β†’ Cloxacillin, NOT Vancomycin', 'Vancomycin is clinically inferior to Cloxacillin for MSSA. Use only if true penicillin allergy documented.'),
        ('ESBL β†’ Carbapenem, NOT Cephalosporin', 'Cephalosporins fail against ESBL despite low MIC on sensitivity report (inoculum effect). Meropenem is drug of choice.'),
        ('MRSA pneumonia β†’ Linezolid preferred over Daptomycin', 'Daptomycin is inactivated by pulmonary surfactant. Vancomycin or Linezolid for MRSA lung infections.'),
        ('GAS Strep β†’ Penicillin always works', 'Group A Streptococcus has never developed clinical resistance to Penicillin.'),
        ('Listeria β†’ Add Ampicillin', 'Cephalosporins (including Ceftriaxone) do NOT cover Listeria. Critical for elderly/neonatal meningitis.'),
        ('Gonorrhea β†’ Ceftriaxone IM, not Ciprofloxacin', 'Fluoroquinolone resistance >50% globally. Always use Ceftriaxone IM + Azithromycin 1g oral.'),
        ('Tetanus β†’ Metronidazole > Penicillin', 'Penicillin G is a GABA antagonist and may worsen tetanic spasms. Metronidazole is preferred.'),
        ('Typhoid in India β†’ Cefixime or Azithromycin', 'FQ resistance high in India. Do NOT use Ciprofloxacin empirically for enteric fever.'),
        ('Acinetobacter β†’ Colistin + Sulbactam', 'XDR Acinetobacter: only Colistin, Tigecycline (not bacteremia), and Sulbactam (Magnex-Forte) have activity.'),
        ('C. diff β†’ Oral Vancomycin (not IV)', 'IV Vancomycin does NOT reach colon lumen. Use oral Vancomycin 125–500mg QID for C. difficile colitis.'),
        ('Atypicals β†’ No cell wall β†’ Beta-lactams inactive', 'Mycoplasma, Chlamydia, Rickettsia, Legionella lack cell walls. All penicillins and cephalosporins are completely inactive.'),
        ('De-escalate at 48–72h', 'Always review and narrow empirical broad-spectrum antibiotics once culture sensitivity results are available.'),
    ]
    rules_hdr = Table([[Paragraph('<b>🚨  CRITICAL RULES – NEVER FORGET</b>', ST['sec'])]], colWidths=[W - 3*cm])
    rules_hdr.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['red']),
        ('LEFTPADDING', (0,0), (-1,-1), 10),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    rules_rows = [[
        Paragraph('<b>Rule</b>', ST['hdr']),
        Paragraph('<b>Explanation</b>', ST['hdr']),
    ]]
    for rule, expl in rules:
        rules_rows.append([
            Paragraph(f'<b>{rule}</b>', ParagraphStyle('rt', fontName='Helvetica-Bold',
                fontSize=7.5, textColor=C['red'], leading=10)),
            Paragraph(expl, ST['note']),
        ])
    rules_t = Table(rules_rows, colWidths=[6.5*cm, W - 3*cm - 6.5*cm], repeatRows=1)
    rules_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), C['navy']),
        ('TEXTCOLOR', (0,0), (-1,0), C['white']),
        ('GRID', (0,0), (-1,-1), 0.3, C['border']),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,0), (-1,-1), 5),
        ('BOTTOMPADDING', (0,0), (-1,-1), 5),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 6),
        ('ROWBACKGROUNDS', (0,1), (-1,-1), [C['red_lt'], C['row_norm']]),
        ('LINEBELOW', (0,0), (-1,0), 1.2, C['red']),
    ]))
    elems.append(rules_hdr)
    elems.append(rules_t)
    elems.append(Spacer(1, 0.35*cm))

    # Ref footer
    ref = Paragraph(
        '<b>References:</b> KD Tripathi Essentials of Medical Pharmacology 9E | Harrison\'s Principles of Internal Medicine 22E (2025) | '
        'NCDC National Treatment Guidelines India | IDSA Antimicrobial Guidelines | WHO AWaRe Classification 2023 | '
        'Mandell Douglas Bennett\'s Principles of Infectious Diseases',
        ParagraphStyle('ref', fontName='Helvetica-Oblique', fontSize=7, textColor=C['text_lt'], leading=10))
    ref_t = Table([[ref]], colWidths=[W - 3*cm])
    ref_t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), C['slate_lt']),
        ('BOX', (0,0), (-1,-1), 0.4, C['border']),
        ('TOPPADDING', (0,0), (-1,-1), 6),
        ('BOTTOMPADDING', (0,0), (-1,-1), 6),
        ('LEFTPADDING', (0,0), (-1,-1), 8),
        ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ]))
    elems.append(ref_t)

    doc.build(elems, canvasmaker=NC)
    return out


if __name__ == '__main__':
    p = build()
    print(f'SUCCESS: {p}')
Running Command

cd /tmp/workspace/antibiotic-guide && python generate_crossref_pdf.py 2>&1

Running Command

python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/antibiotic-guide/Drug_Bacteria_CrossReference_India.pdf') as pdf: print(f'Pages: {len(pdf.pages)}') for i, p in enumerate(pdf.pages): t = (p.extract_text() or '') print(f' P{i+1}: {len(t)}ch | {t[:90].strip()}') " ls -lh /tmp/workspace/antibiotic-guide/Drug_Bacteria_CrossReference_India.pdf

Your cross-reference PDF is ready:

Drug Bacteria CrossReference India

PDF Document Β· PDF


Here's what's inside this 9-page PDF:

Structure

Page 1 - Cover
  • Title, edition, list of 40 antibiotics covered across 10 drug classes
  • Organism column guide explaining all 12 bacterial groups used in the tables
Page 2 - Coverage Legend Color-coded key used throughout every table:
SymbolMeaningColor
β˜… DOCDrug of ChoiceGreen
βœ” Eff.Effective / routinely usedBlue
~ Var.Variable (resistance-dependent)Amber
βœ— NoNot active / intrinsically resistantGrey
Pages 3–6 - Cross-Reference Tables by Drug Class Each drug gets a full row against 12 organism columns:
Strep (GAS/GBS) | Pneumococcus | MSSA | MRSA | Enterococcus | E. coli/Klebsiella | ESBL | Pseudomonas | Acinetobacter | H. influenzae | Anaerobes | Atypicals
Drug classes covered: Penicillins β†’ Cephalosporins (1G–4G + Avibactam) β†’ Carbapenems β†’ Glycopeptides/Lipopeptides β†’ Oxazolidinones β†’ Fluoroquinolones β†’ Macrolides β†’ Tetracyclines β†’ Nitroimidazoles β†’ Cotrimoxazole β†’ Clindamycin β†’ Aminoglycosides β†’ Colistin β†’ Rifamycins β†’ Nitrofurantoin β†’ Tigecycline
Pages 7–8 - Clinical Notes Table Every drug with a dedicated paragraph covering: mechanism notes, India-specific pearls, special indications, and critical cautions
Page 9 - Critical Rules (red panel) 12 must-know rules - MSSA vs. Vancomycin, ESBL vs. Carbapenem, Daptomycin lung failure, Listeria blind spots, C. diff oral-only, atypicals cell-wall absence, and more.
This is a shared conversation. Sign in to Orris to start your own chat.