bacterial classification
| Rank | Example |
|---|---|
| Kingdom | Prokaryotae |
| Division | Gracilicutes |
| Class | Scotobacteria |
| Order | Eubacteriales |
| Family | Enterobacteriaceae |
| Genus | Escherichia |
| Species | coli |
| Subtype | E. coli O157:H7 |
| Characteristic | Eukaryote | Prokaryote (Bacteria) |
|---|---|---|
| Size | >5 µm | 0.5-3.0 µm |
| Nucleus | Membrane-bound | No nuclear membrane |
| Chromosomes | Diploid, multiple | Single, circular, haploid |
| Ribosomes | 80S (60S+40S) | 70S (50S+30S) - antibiotic target |
| Mitochondria | Present | Absent |
| Cytoplasmic membrane | Contains sterols | No sterols (except Mycoplasma) |
| Cell wall | Absent (except fungi) | Peptidoglycan-based |
| Reproduction | Sexual and asexual | Asexual (binary fission only) |

| Shape | Description | Example |
|---|---|---|
| Coccus | Spherical | Staphylococcus, Streptococcus |
| Bacillus | Rod-shaped | E. coli, Bacillus spp. |
| Coccobacillus | Short rod | Haemophilus influenzae |
| Vibrio | Comma-shaped curve | Vibrio cholerae |
| Spirillum | Rigid spiral | Campylobacter |
| Spirochete | Flexible coiled | Treponema, Borrelia |
| Fusiform bacillus | Spindle-shaped | Fusobacterium |
| Filamentous | Branching hyphae-like | Nocardia, Actinomyces |
| Feature | Gram-Positive | Gram-Negative |
|---|---|---|
| Color result | Purple (crystal violet retained) | Red/Pink (safranin counterstain) |
| Peptidoglycan layer | Thick | Thin |
| Outer membrane | Absent | Present |
| Lipopolysaccharide (LPS/Endotoxin) | Absent | Present |
| Teichoic acid | Often present | Absent |
| Sporulation | Some bacteria (e.g., Clostridium, Bacillus) | None |
| Penicillin susceptibility | More susceptible | More resistant |
| Lysozyme sensitivity | Sensitive | Resistant |
| Category | Description | Examples |
|---|---|---|
| Obligate aerobe | Require O2 as terminal electron acceptor | Mycobacterium tuberculosis, Bacillus spp. |
| Obligate anaerobe | Cannot survive in O2 | Clostridium, Bacteroides |
| Facultative anaerobe | Grow with or without O2 | E. coli, most Enterobacteriaceae |
| Microaerophile | Require low O2 | Campylobacter, Helicobacter |
| Aerotolerant anaerobe | Tolerate O2 but do not use it | Lactobacillus |
| Test | What it Detects | Example Use |
|---|---|---|
| Catalase | H2O2-splitting enzyme | Staphylococci (+) vs Streptococci (-) |
| Coagulase | Fibrin-clotting enzyme | S. aureus (+) vs S. epidermidis (-) |
| Oxidase | Cytochrome C oxidase | Pseudomonas (+) vs E. coli (-) |
| Urease | Urea hydrolysis → NH3 | Proteus (strongly +) |
| Nitrate reduction | NO3- → NO2- + N2 | Used in urinalysis for Gram-neg rods |
| Lactose fermentation | Acid production from lactose | E. coli (pink) vs Salmonella (white) on MacConkey |
| Voges-Proskauer | Acetoin production | Differentiates enteric rods |

| Media Type | Purpose | Example |
|---|---|---|
| Non-selective (complex) | Supports most bacteria | Blood agar, Chocolate agar |
| Selective | Inhibits unwanted organisms | MacConkey (Gram-neg rods), CNA agar (Gram-pos cocci) |
| Differential | Distinguishes by metabolic reaction | MacConkey (lactose fermentation) |
| Method | Principle | Use |
|---|---|---|
| 16S rRNA sequencing | Conserved ribosomal RNA gene sequence | Gold standard for species identification |
| Whole genome sequencing | Full genomic comparison | Strain-level identification, outbreak tracing |
| DNA-DNA hybridization | % genetic similarity | Species definition (>70% = same species) |
| MLST (multi-locus sequence typing) | 7 housekeeping gene alleles | Epidemiologic typing |
| Category | Stain | Example Organisms |
|---|---|---|
| Acid-fast | Ziehl-Neelsen / Auramine | Mycobacterium tuberculosis, M. leprae |
| No cell wall | No Gram stain possible | Mycoplasma spp. |
| Intracellular obligates | Giemsa, immunofluorescence | Chlamydia, Rickettsia |
| Endospore-formers | Schaeffer-Fulton | Bacillus, Clostridium |
Bacteria
├── By Gram stain: Gram-positive | Gram-negative | Acid-fast | No wall
├── By shape: Cocci | Bacilli | Spirochetes | Filamentous
├── By O2 need: Aerobe | Anaerobe | Facultative | Microaerophile
├── By metabolism: Fermentative | Oxidative | Photosynthetic
├── By structure: Capsule / Flagella / Pili / Spores
├── By serology: O, H, K antigens (serotypes)
└── By genetics: 16S rRNA / Whole genome / DNA hybridization
Flowchart with example of bacteria species with explaination
What format would you like the flowchart in?
A detailed educational flowchart for bacterial classification with example species. The flowchart starts at the top with "BACTERIA" and branches step by step: Step 1 - Gram Stain splits into two branches: - LEFT branch: "GRAM-POSITIVE (Purple)" with label "Thick peptidoglycan, no outer membrane" - RIGHT branch: "GRAM-NEGATIVE (Red/Pink)" with label "Thin peptidoglycan, has outer membrane & LPS" Step 2 - Each branch splits by Shape: GRAM-POSITIVE left side: - "Cocci (spherical)" → further splits by Catalase: - Catalase POSITIVE → "Staphylococcus" → splits by Coagulase: - Coagulase + → "S. aureus" (causes skin infections, pneumonia, toxic shock) - Coagulase − → "S. epidermidis" (causes catheter infections) - Catalase NEGATIVE → "Streptococcus" → splits by Hemolysis: - Beta-hemolysis → "S. pyogenes" (strep throat, rheumatic fever) - Alpha-hemolysis → "S. pneumoniae" (pneumonia, meningitis) - Gamma (no hemolysis) → "Enterococcus faecalis" (UTI, endocarditis) - "Bacilli (rods)" → splits by Spores: - Spore-forming → "Bacillus anthracis" (anthrax), "Clostridium tetani" (tetanus) - Non-spore-forming → "Listeria monocytogenes" (listeriosis), "Corynebacterium diphtheriae" (diphtheria) GRAM-NEGATIVE right side: - "Cocci (spherical)" → "Neisseria meningitidis" (meningitis), "N. gonorrhoeae" (gonorrhea) - "Bacilli (rods)" → splits by Oxygen requirement: - Aerobic/Facultative → "Enterobacteriaceae": "E. coli" (UTI, diarrhea), "Salmonella typhi" (typhoid), "Klebsiella pneumoniae" (pneumonia) - Anaerobic → "Bacteroides fragilis" (intra-abdominal infections) - "Spirochetes (spiral)" → "Treponema pallidum" (syphilis), "Borrelia burgdorferi" (Lyme disease) At the bottom, a separate box: "GRAM-STAIN EXCEPTIONS: Acid-fast stain → Mycobacterium tuberculosis (TB), M. leprae (leprosy). No cell wall → Mycoplasma pneumoniae (atypical pneumonia). Obligate intracellular → Chlamydia trachomatis, Rickettsia rickettsii" Use a clean white background, blue and red color coding for gram positive/negative branches, green for organism names, small italic text for disease examples. Use clear arrows and boxes. Professional medical education style, highly readable, organized layout.

| Test | Result | Organism | Diseases |
|---|---|---|---|
| Catalase | + | Staphylococcus | - |
| Coagulase (from Staph) | + | S. aureus | Skin abscesses, pneumonia, toxic shock syndrome, food poisoning |
| Coagulase (from Staph) | - | S. epidermidis | Catheter/prosthetic device infections |
| Catalase | - | Streptococcus | - |
| Beta-hemolysis (from Strep) | S. pyogenes (Group A) | Strep throat, scarlet fever, rheumatic fever | |
| Alpha-hemolysis (from Strep) | S. pneumoniae | Pneumonia, meningitis, otitis media | |
| No hemolysis | Enterococcus faecalis | UTI, endocarditis |
| Feature | Organism | Diseases |
|---|---|---|
| Spore-forming, aerobic | Bacillus anthracis | Anthrax |
| Spore-forming, anaerobic | Clostridium tetani | Tetanus |
| Spore-forming, anaerobic | C. difficile | Pseudomembranous colitis (antibiotic-associated diarrhea) |
| Non-spore-forming | Listeria monocytogenes | Listeriosis (dangerous in pregnancy) |
| Non-spore-forming | Corynebacterium diphtheriae | Diphtheria |
| Acid-fast positive (special) | Mycobacterium tuberculosis | Tuberculosis |
| Organism | Diseases |
|---|---|
| Neisseria meningitidis | Bacterial meningitis, septicemia |
| N. gonorrhoeae | Gonorrhea, neonatal conjunctivitis |
| Organism | Key Feature | Diseases |
|---|---|---|
| E. coli | Oxidase-neg, lactose fermenter | UTI, neonatal meningitis, diarrhea |
| Salmonella typhi | Non-lactose fermenter | Typhoid fever |
| Klebsiella pneumoniae | Mucoid capsule | Pneumonia (especially alcoholics), UTI |
| Shigella dysenteriae | Non-motile | Bloody dysentery |
| Organism | Key Feature | Diseases |
|---|---|---|
| Pseudomonas aeruginosa | Oxidase-positive, blue-green pigment | Burn/wound infections, CF pneumonia |
| Helicobacter pylori | Microaerophile, urease+ | Peptic ulcer, gastric cancer |
| Organism | Diseases |
|---|---|
| Bacteroides fragilis | Intra-abdominal infections, abscesses |
| Organism | Diseases |
|---|---|
| Treponema pallidum | Syphilis |
| Borrelia burgdorferi | Lyme disease |
| Leptospira interrogans | Leptospirosis |
| Category | Reason | Organism | Disease |
|---|---|---|---|
| Acid-fast | Waxy mycolic acid wall | M. tuberculosis, M. leprae | TB, Leprosy |
| No cell wall | Cannot retain any stain | Mycoplasma pneumoniae | Atypical ("walking") pneumonia |
| Obligate intracellular | Too small, no independent metabolism | Chlamydia trachomatis | STI, trachoma |
| Obligate intracellular | Rickettsia rickettsii | Rocky Mountain Spotted Fever |
gpc, gnb , Kingdom Division Class Order Family Genus Species c Subtype
A detailed professional educational taxonomy table/diagram showing full Linnaean classification for Gram-Positive Cocci (GPC) and Gram-Negative Bacilli (GNB) bacteria. Layout: Two large side-by-side columns, left column is blue-themed for GPC, right column is red-themed for GNB. Each column shows a vertical taxonomy ladder with 8 rows for the ranks: Kingdom, Division, Class, Order, Family, Genus, Species, Subtype. LEFT COLUMN - GRAM-POSITIVE COCCI (GPC) - Blue theme: Title: "GPC - Gram-Positive Cocci" Show TWO example organisms side by side within the column: Example 1: Staphylococcus aureus Kingdom: Bacteria Division: Firmicutes Class: Bacilli Order: Bacillales Family: Staphylococcaceae Genus: Staphylococcus Species: S. aureus Subtype: MRSA (Methicillin-Resistant S. aureus) Disease note: Skin infections, pneumonia, toxic shock Example 2: Streptococcus pyogenes Kingdom: Bacteria Division: Firmicutes Class: Bacilli Order: Lactobacillales Family: Streptococcaceae Genus: Streptococcus Species: S. pyogenes Subtype: Group A Streptococcus (GAS) Disease note: Strep throat, rheumatic fever RIGHT COLUMN - GRAM-NEGATIVE BACILLI (GNB) - Red/orange theme: Title: "GNB - Gram-Negative Bacilli" Show TWO example organisms side by side within the column: Example 1: Escherichia coli Kingdom: Bacteria Division: Proteobacteria Class: Gammaproteobacteria Order: Enterobacterales Family: Enterobacteriaceae Genus: Escherichia Species: E. coli Subtype: E. coli O157:H7 Disease note: UTI, diarrhea, neonatal meningitis Example 2: Klebsiella pneumoniae Kingdom: Bacteria Division: Proteobacteria Class: Gammaproteobacteria Order: Enterobacterales Family: Enterobacteriaceae Genus: Klebsiella Species: K. pneumoniae Subtype: CRKP (Carbapenem-Resistant K. pneumoniae) Disease note: Hospital pneumonia, UTI At the very top center, a title box: "Full Linnaean Taxonomy: GPC vs GNB" At the bottom, a legend box: "GPC = Gram-Positive Cocci (purple on Gram stain, thick peptidoglycan, NO outer membrane) | GNB = Gram-Negative Bacilli (pink/red on Gram stain, thin peptidoglycan, HAS outer membrane + LPS endotoxin)" Use clean white background, clear bold rank labels on left side, connecting arrows between ranks, color-coded boxes per organism, professional medical textbook style, large readable font.

| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | Prokaryote, no nucleus |
| Division (Phylum) | Firmicutes | Low G+C content, thick peptidoglycan |
| Class | Bacilli | Despite name, includes cocci too |
| Order | Bacillales | |
| Family | Staphylococcaceae | Catalase-positive cocci |
| Genus | Staphylococcus | 40+ species |
| Species | S. aureus | Coagulase-positive |
| Subtype | MRSA | Methicillin-Resistant S. aureus - major hospital pathogen |
| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | |
| Division (Phylum) | Firmicutes | |
| Class | Bacilli | |
| Order | Lactobacillales | |
| Family | Streptococcaceae | Catalase-negative cocci |
| Genus | Streptococcus | |
| Species | S. pyogenes | Beta-hemolytic |
| Subtype | Group A Streptococcus (GAS) | Lancefield group A antigen |
| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | |
| Division (Phylum) | Firmicutes | |
| Class | Bacilli | |
| Order | Lactobacillales | |
| Family | Streptococcaceae | |
| Genus | Streptococcus | |
| Species | S. pneumoniae | Alpha-hemolytic, bile-soluble |
| Subtype | >90 serotypes | Classified by polysaccharide capsule type |
| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | |
| Division (Phylum) | Proteobacteria | Largest phylum of Gram-negatives |
| Class | Gammaproteobacteria | |
| Order | Enterobacterales | |
| Family | Enterobacteriaceae | "Enterics" - gut flora |
| Genus | Escherichia | |
| Species | E. coli | Oxidase-negative, lactose fermenter |
| Subtype | E. coli O157:H7 | O = somatic antigen, H = flagellar antigen |
| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | |
| Division (Phylum) | Proteobacteria | |
| Class | Gammaproteobacteria | |
| Order | Enterobacterales | |
| Family | Enterobacteriaceae | |
| Genus | Klebsiella | |
| Species | K. pneumoniae | Large mucoid capsule, non-motile |
| Subtype | CRKP | Carbapenem-Resistant K. pneumoniae - WHO priority pathogen |
| Rank | Classification | Notes |
|---|---|---|
| Kingdom | Bacteria | |
| Division (Phylum) | Proteobacteria | |
| Class | Gammaproteobacteria | |
| Order | Pseudomonadales | |
| Family | Pseudomonadaceae | |
| Genus | Pseudomonas | |
| Species | P. aeruginosa | Oxidase-positive, blue-green pyocyanin pigment |
| Subtype | Mucoid strains | Found in cystic fibrosis patients |
| Feature | GPC | GNB |
|---|---|---|
| Gram stain | Purple | Pink/Red |
| Phylum | Firmicutes | Proteobacteria |
| Peptidoglycan | Thick | Thin |
| Outer membrane | Absent | Present |
| LPS (Endotoxin) | No | Yes - causes septic shock |
| Typical antibiotics | Penicillin, Vancomycin | Cephalosporins, Fluoroquinolones, Carbapenems |
| Key virulence | Exotoxins, Coagulase, Protein A | Endotoxin, Pili, Type III secretion |
add all gpc species and gnb
| Rank | All Species |
|---|---|
| Kingdom | Bacteria |
| Division/Phylum | Firmicutes |
| Class | Bacilli |
| Order | Bacillales |
| Family | Staphylococcaceae |
| Genus | Staphylococcus |
| Species | Subtype | Key Disease | Notes |
|---|---|---|---|
| S. aureus | MRSA (methicillin-resistant) | Skin/soft tissue infections, bacteremia, pneumonia, endocarditis, toxic shock syndrome, food poisoning | Most virulent; coagulase+, catalase+ |
| MSSA (methicillin-sensitive) | Same as above | Antibiotic-sensitive strain | |
| VRSA (vancomycin-resistant) | Last-resort treatment failures | Rare but critical |
| Species | Subtype/Resistance | Key Disease | Distinguishing Feature |
|---|---|---|---|
| S. epidermidis | Slime-producing strains | Catheter/prosthetic device infections, neonatal sepsis, endocarditis | Most common CoNS; biofilm producer |
| S. saprophyticus | - | UTI in young sexually active women | Novobiocin-resistant |
| S. haemolyticus | Vancomycin-reduced susceptibility | UTI in hospitalized patients, wound infections | 2nd most common CoNS clinically |
| S. lugdunensis | - | Aggressive endocarditis, skin infections | Behaves like S. aureus in virulence |
| S. schleiferi | - | Wound infections, otitis | Less common |
| S. warneri | - | Bacteremia in immunocompromised | Rare pathogen |
| S. capitis | - | Neonatal sepsis, endocarditis | Found on scalp/face |
| S. hominis | - | Bacteremia, catheter infections | Normal skin flora |
| Rank | Classification |
|---|---|
| Kingdom | Bacteria |
| Division/Phylum | Firmicutes |
| Class | Bacilli |
| Order | Lactobacillales |
| Family | Streptococcaceae |
| Genus | Streptococcus |
| Species | Lancefield Group | Hemolysis | Subtype | Key Disease |
|---|---|---|---|---|
| S. pyogenes | Group A (GAS) | Beta | M-protein types (1, 3, 5, 12, 28...) | Strep throat, scarlet fever, rheumatic fever, necrotizing fasciitis, glomerulonephritis |
| S. agalactiae | Group B (GBS) | Beta | Serotypes Ia, Ib, II-IX | Neonatal meningitis & bacteremia, maternal peripartum infections |
| S. dysgalactiae | Group C/G | Beta | - | Pharyngitis, cellulitis, bacteremia |
| S. pneumoniae | No Lancefield group | Alpha | >90 capsular serotypes | Pneumonia, bacterial meningitis, otitis media, sinusitis |
| S. viridans group | No Lancefield group | Alpha | - | Subacute bacterial endocarditis, dental caries |
| - S. mutans | - | Alpha/None | - | Dental caries |
| - S. mitis | - | Alpha | - | Endocarditis |
| - S. sanguinis | - | Alpha | - | Endocarditis |
| - S. salivarius | - | Alpha | - | Opportunistic infections |
| - S. milleri group (S. anginosus, S. constellatus, S. intermedius) | - | Variable | - | Brain/liver/lung abscesses |
| S. bovis / S. gallolyticus | Group D | None (gamma) | - | Endocarditis, bacteremia - associated with colon cancer |
| Rank | Classification |
|---|---|
| Kingdom | Bacteria |
| Division/Phylum | Firmicutes |
| Class | Bacilli |
| Order | Lactobacillales |
| Family | Enterococcaceae |
| Genus | Enterococcus |
| Species | Subtype/Resistance | Key Disease | Notes |
|---|---|---|---|
| E. faecalis | VSE (vancomycin-sensitive) | UTI, endocarditis, bacteremia | 80-90% of enterococcal infections |
| E. faecium | VRE (vancomycin-resistant) | Nosocomial UTI, bacteremia | More resistant than E. faecalis; hospital pathogen |
| E. gallinarum | Intrinsic low-level vancomycin resistance | Rare infections | |
| E. casseliflavus | Intrinsic low-level vancomycin resistance | Rare infections |
| Rank | Classification |
|---|---|
| Kingdom | Bacteria |
| Division/Phylum | Proteobacteria |
| Class | Gammaproteobacteria |
| Order | Enterobacterales |
| Family | Enterobacteriaceae |
| Genus | Species | Subtype | Key Disease | Key Feature |
|---|---|---|---|---|
| Escherichia | E. coli | O157:H7 (EHEC) | UTI, neonatal meningitis, HUS, traveler's diarrhea | Most common GNB; lactose fermenter, oxidase- |
| ETEC | Traveler's diarrhea | Heat-labile & heat-stable toxins | ||
| EPEC | Infant diarrhea | |||
| UPEC | UTI | Uropathogenic | ||
| Klebsiella | K. pneumoniae | CRKP, ESBL+ | Hospital pneumonia, UTI, liver abscess | Mucoid capsule; "currant jelly" sputum |
| K. oxytoca | ESBL+ | UTI, bacteremia | ||
| Proteus | P. mirabilis | - | UTI, kidney stones, wound infections | Urease+, swarming motility, staghorn calculi |
| P. vulgaris | - | UTI, wound infections | ||
| Salmonella | S. typhi | - | Typhoid fever | Non-lactose fermenter; H2S+ |
| S. paratyphi | A, B, C | Paratyphoid fever | ||
| S. enteritidis / typhimurium | Many serovars | Food poisoning, gastroenteritis | ||
| Shigella | S. dysenteriae | Serotype 1 | Bloody dysentery (most severe) | Shiga toxin; non-motile |
| S. flexneri | 15 serotypes | Bacillary dysentery | Most common in developing countries | |
| S. sonnei | - | Mild diarrhea | Most common in developed countries | |
| S. boydii | - | Diarrhea | ||
| Enterobacter | E. cloacae | AmpC beta-lactamase | Nosocomial pneumonia, UTI, bacteremia | Inducible AmpC resistance |
| E. aerogenes (now Klebsiella aerogenes) | Hospital infections | |||
| Serratia | S. marcescens | - | Hospital pneumonia, UTI, bacteremia | Red pigment (prodigiosin); IV drug users |
| Citrobacter | C. freundii | - | UTI, neonatal meningitis, brain abscess | |
| C. koseri | - | Neonatal brain abscess | ||
| Providencia | P. stuartii | - | UTI in catheterized patients | |
| Morganella | M. morganii | - | UTI, wound infections | |
| Yersinia | Y. pestis | Biovar Orientalis, Antiqua, Medievalis | Plague (bubonic, pneumonic, septicemic) | Bioterrorism agent |
| Y. enterocolitica | - | Enterocolitis, mesenteric adenitis | Mimics appendicitis | |
| Y. pseudotuberculosis | - | Mesenteric adenitis |
| Genus | Species | Order/Family | Subtype | Key Disease | Key Feature |
|---|---|---|---|---|---|
| Pseudomonas | P. aeruginosa | Pseudomonadales / Pseudomonadaceae | Mucoid strains (CF) | Burn infections, VAP, cystic fibrosis, hot tub folliculitis | Oxidase+, blue-green pyocyanin pigment, grape odor |
| Acinetobacter | A. baumannii | Pseudomonadales / Moraxellaceae | CRAB (carbapenem-resistant) | VAP, wound infections, bacteremia in ICU | "ESKAPE" pathogen; survives on surfaces |
| Stenotrophomonas | S. maltophilia | Xanthomonadales | - | Pneumonia in immunocompromised, CF | Intrinsically resistant to carbapenems |
| Burkholderia | B. cepacia complex | Burkholderiales | Multiple genomovars | Lung infections in CF patients | |
| B. pseudomallei | - | Melioidosis | Endemic in SE Asia |
| Genus | Species | Phylum/Class | Key Disease | Special Feature |
|---|---|---|---|---|
| Haemophilus | H. influenzae | Proteobacteria / Pasteurellales | Meningitis (type b), pneumonia, otitis | Requires X and V factors; type b has polysaccharide capsule |
| H. ducreyi | Chancroid (painful genital ulcer) | |||
| Legionella | L. pneumophila | Legionellales | Legionnaire's disease (severe pneumonia), Pontiac fever | Intracellular; grows in air conditioning/water systems |
| Bordetella | B. pertussis | Burkholderiales | Whooping cough (pertussis) | Pertussis toxin; "whoop" inspiratory sound |
| B. parapertussis | Milder pertussis | |||
| Brucella | B. melitensis | Rhizobiales | Brucellosis (undulant fever) | Zoonosis (goats) |
| B. abortus | Brucellosis | Zoonosis (cattle) | ||
| Francisella | F. tularensis | Thiotrichales | Tularemia ("rabbit fever") | Bioterrorism agent; extremely infectious |
| Pasteurella | P. multocida | Pasteurellales | Wound infections after animal bites | Cat/dog bites |
| Bartonella | B. henselae | Rhizobiales | Cat scratch disease, bacillary angiomatosis |
| Genus | Species | Order/Family | Key Disease | Special Feature |
|---|---|---|---|---|
| Campylobacter | C. jejuni | Campylobacterales | Most common bacterial diarrhea worldwide; Guillain-Barré syndrome | Microaerophile; comma/S-shaped rods |
| C. fetus | Bacteremia in immunocompromised | |||
| Helicobacter | H. pylori | Campylobacterales | Peptic ulcer disease, gastric cancer, MALT lymphoma | Urease+; spiral rods; lives in gastric mucosa |
| Vibrio | V. cholerae | Vibrionales | Cholera ("rice water" diarrhea) | O1 and O139 serovars cause epidemics |
| V. parahaemolyticus | Seafood-associated gastroenteritis | Halophile | ||
| V. vulnificus | Wound infections, septicemia | Raw oysters; fatal in liver disease patients |
| Genus | Species | Key Disease |
|---|---|---|
| Neisseria | N. meningitidis | Bacterial meningitis, Waterhouse-Friderichsen syndrome |
| N. gonorrhoeae | Gonorrhea, PID, neonatal ophthalmia | |
| Moraxella | M. catarrhalis | Otitis media, sinusitis, COPD exacerbations |
| Group | Phylum | Class | Order | Family | Example |
|---|---|---|---|---|---|
| GPC - Staphylococci | Firmicutes | Bacilli | Bacillales | Staphylococcaceae | S. aureus, S. epidermidis |
| GPC - Streptococci | Firmicutes | Bacilli | Lactobacillales | Streptococcaceae | S. pyogenes, S. pneumoniae |
| GPC - Enterococci | Firmicutes | Bacilli | Lactobacillales | Enterococcaceae | E. faecalis, E. faecium |
| GNB - Enterobacterales | Proteobacteria | Gammaproteobacteria | Enterobacterales | Enterobacteriaceae | E. coli, Klebsiella, Salmonella |
| GNB - Non-fermenters | Proteobacteria | Gammaproteobacteria | Pseudomonadales | Pseudomonadaceae / Moraxellaceae | P. aeruginosa, A. baumannii |
| GNB - Fastidious | Proteobacteria | Various | Various | Various | H. influenzae, Legionella |
| GNB - Curved | Proteobacteria | Epsilonproteobacteria | Campylobacterales | Campylobacteraceae | Campylobacter, H. pylori |
Create a comparative PDF chart of GPC vs GNB antibiotic susceptibility
mkdir -p /home/daytona/workspace/gpc-gnb-chart && ls /home/daytona/workspace/gpc-gnb-chart
~/gpc-gnb-chart/generate_chart.py
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/gpc-gnb-chart/GPC_vs_GNB_Antibiotic_Susceptibility.pdf"
# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2e6da4")
LIGHT_BLUE = colors.HexColor("#d0e4f7")
PALE_BLUE = colors.HexColor("#eaf3fb")
DARK_RED = colors.HexColor("#8b1a1a")
MID_RED = colors.HexColor("#c0392b")
LIGHT_RED = colors.HexColor("#fdd5d0")
PALE_RED = colors.HexColor("#fff0ee")
DARK_GREEN = colors.HexColor("#1a5c2e")
LIGHT_GREEN = colors.HexColor("#d4edda")
DARK_ORANGE = colors.HexColor("#7d4e00")
LIGHT_ORANGE= colors.HexColor("#fff3cd")
GREY_HEADER = colors.HexColor("#2c3e50")
LIGHT_GREY = colors.HexColor("#f2f4f6")
WHITE = colors.white
BLACK = colors.black
# Susceptibility cell colours
S_COLOR = colors.HexColor("#27ae60") # Susceptible - green
R_COLOR = colors.HexColor("#e74c3c") # Resistant - red
V_COLOR = colors.HexColor("#f39c12") # Variable - amber
I_COLOR = colors.HexColor("#8e44ad") # Intermediate - purple
NA_COLOR = colors.HexColor("#95a5a6") # N/A - grey
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A3),
leftMargin=1.2*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm,
title="GPC vs GNB Antibiotic Susceptibility Chart",
author="Orris Medical Reference"
)
styles = getSampleStyleSheet()
def style(name, **kw):
s = ParagraphStyle(name, parent=styles["Normal"], **kw)
return s
title_style = style("Title2", fontSize=20, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, spaceAfter=4)
subtitle_style = style("Sub", fontSize=11, fontName="Helvetica",
textColor=colors.HexColor("#ccddee"), alignment=TA_CENTER)
section_style = style("Sec", fontSize=13, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER)
cell_hdr = style("CH", fontSize=8.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=10)
cell_body = style("CB", fontSize=7.5, fontName="Helvetica",
textColor=BLACK, alignment=TA_LEFT, leading=9)
cell_center = style("CC", fontSize=7.5, fontName="Helvetica",
textColor=BLACK, alignment=TA_CENTER, leading=9)
legend_style = style("Leg", fontSize=8, fontName="Helvetica",
textColor=BLACK, alignment=TA_LEFT)
note_style = style("Note", fontSize=7.5, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#555555"), alignment=TA_CENTER)
# ── Helper: coloured susceptibility cell ─────────────────────────────────────
def sc(text, bg=None):
"""Return a (Paragraph, bg_color) tuple for susceptibility cells."""
mapping = {
"S": (S_COLOR, WHITE, "S"),
"R": (R_COLOR, WHITE, "R"),
"V": (V_COLOR, WHITE, "V"),
"I": (I_COLOR, WHITE, "I"),
"S*": (colors.HexColor("#1e8449"), WHITE, "S*"),
"R*": (colors.HexColor("#b03a2e"), WHITE, "R*"),
"V*": (colors.HexColor("#d68910"), WHITE, "V*"),
"-": (NA_COLOR, WHITE, "-"),
}
if text in mapping:
bg_col, fg_col, label = mapping[text]
p = Paragraph(f"<b>{label}</b>",
style("SC", fontSize=8, fontName="Helvetica-Bold",
textColor=fg_col, alignment=TA_CENTER, leading=10))
return p, bg_col
p = Paragraph(text, cell_center)
return p, (bg if bg else WHITE)
# ── Data definition ──────────────────────────────────────────────────────────
# Columns: Antibiotic | Class | S.aureus(MSSA) | S.aureus(MRSA) | S.pyogenes |
# S.pneumoniae | E.faecalis | E.faecium(VRE) ||
# E.coli | Klebsiella | Pseudomonas | Acinetobacter | Salmonella | H.influenzae
# Key: S=Susceptible, R=Resistant, V=Variable, I=Intermediate, -=Not applicable / not used
# S* / V* / R* = with caveats (footnote)
ABX_DATA = [
# [Antibiotic, Drug Class,
# MSSA, MRSA, S.pyo, S.pneu, E.fae, E.fae(VRE),
# E.coli, Klebsiella, Pseudomonas, Acinetobacter, Salmonella, H.influenzae]
# ── Beta-lactams ──────────────────────────────────────────────
["Penicillin G", "Natural Penicillin",
"S","R","S","V*","S","-",
"R","R","R","R","R","R"],
["Amoxicillin", "Aminopenicillin",
"S","R","S","S","S","-",
"V","R","R","R","V","V"],
["Amoxicillin-Clavulanate", "Beta-lactam + Inhibitor",
"S","R","S","S","S","-",
"S","S","R","V","V","S"],
["Nafcillin / Oxacillin", "Antistaphylococcal PCN",
"S","R","S","S","R","R",
"R","R","R","R","R","R"],
["Piperacillin-Tazobactam", "Extended PCN + Inhibitor",
"S","R","S","S","S","-",
"S","S","V","V","S","S"],
["Cefazolin (1st gen)", "1st-Gen Cephalosporin",
"S","R","S","S","R","R",
"S","S","R","R","V","V"],
["Ceftriaxone (3rd gen)", "3rd-Gen Cephalosporin",
"S","R","S","S","R","R",
"S","S","R","R","S","S"],
["Ceftazidime (3rd gen)", "3rd-Gen Cephalosporin (anti-Pseudo)",
"R","R","R","R","R","R",
"S","S","S","V","S","S"],
["Cefepime (4th gen)", "4th-Gen Cephalosporin",
"S","R","S","S","R","R",
"S","S","S","V","S","S"],
["Ceftaroline (5th gen)", "5th-Gen Cephalosporin (anti-MRSA)",
"S","S","S","S","R","R",
"S","S","R","R","S","S"],
["Imipenem/Meropenem", "Carbapenem",
"S","R","S","S","S","R",
"S","S","V","V","S","S"],
["Ertapenem", "Carbapenem (no Pseudo)",
"S","R","S","S","S","R",
"S","S","R","V","S","S"],
["Aztreonam", "Monobactam",
"R","R","R","R","R","R",
"S","S","S","V","S","S"],
# ── Glycopeptides ──────────────────────────────────────────────
["Vancomycin", "Glycopeptide",
"S","S","S","S","S","R",
"R","R","R","R","R","R"],
["Teicoplanin", "Glycopeptide",
"S","S","S","S","S","R",
"R","R","R","R","R","R"],
# ── Lipopeptide ────────────────────────────────────────────────
["Daptomycin", "Lipopeptide",
"S","S","S","S","S","V",
"R","R","R","R","R","R"],
# ── Oxazolidinones ─────────────────────────────────────────────
["Linezolid", "Oxazolidinone",
"S","S","S","S","S","S",
"R","R","R","R","R","R"],
["Tedizolid", "Oxazolidinone (2nd gen)",
"S","S","S","S","S","S",
"R","R","R","R","R","R"],
# ── Aminoglycosides ────────────────────────────────────────────
["Gentamicin", "Aminoglycoside",
"S","V","V","R","V*","V*",
"S","S","S","V","V","V"],
["Amikacin", "Aminoglycoside",
"S","V","V","R","V*","V*",
"S","S","S","V","V","S"],
# ── Fluoroquinolones ───────────────────────────────────────────
["Ciprofloxacin", "Fluoroquinolone",
"S","R","V","R","V","V",
"S","S","S","V","V","S"],
["Levofloxacin", "Respiratory FQ",
"S","R","S","S","S","V",
"S","S","S","V","S","S"],
["Moxifloxacin", "Respiratory FQ",
"S","R","S","S","S","V",
"S","S","R","V","S","S"],
# ── Macrolides ─────────────────────────────────────────────────
["Azithromycin", "Macrolide",
"V","R","S","V","R","R",
"R","R","R","R","V","S"],
["Erythromycin", "Macrolide",
"V","R","S","V","R","R",
"R","R","R","R","R","R"],
# ── Tetracyclines ──────────────────────────────────────────────
["Doxycycline", "Tetracycline",
"S","V","S","S","V","V",
"V","V","R","V","V","R"],
["Tigecycline", "Glycylcycline",
"S","S","S","S","S","S",
"S","S","R","S","S","S"],
# ── Folate Inhibitors ──────────────────────────────────────────
["TMP-SMX", "Sulfonamide Combo",
"S","V","V","V","R","R",
"V","V","R","V","V","V"],
# ── Other ──────────────────────────────────────────────────────
["Clindamycin", "Lincosamide",
"S","V","S","S","R","R",
"R","R","R","R","R","R"],
["Metronidazole", "Nitroimidazole",
"R","R","R","R","R","R",
"R","R","R","R","R","R"],
["Rifampicin", "Rifamycin",
"S","S","S","S","V","V",
"R","R","R","R","R","R"],
["Colistin / Polymyxin B", "Polymyxin",
"R","R","R","R","R","R",
"S","S","S","S","S","R"],
["Nitrofurantoin", "Nitrofuran",
"S","S","S","V","S","R",
"S","V","R","R","R","R"],
["Fosfomycin", "Phosphonic acid",
"S","S","V","V","S","V",
"S","V","V","R","V","V"],
]
# Column widths (landscape A3 = 420 x 297mm, usable ~397mm)
# Antibiotic(90), Class(80), then 12 organism cols each 19mm => 228mm => total 398mm
COL_W = [90, 80] + [19]*12
page_w = sum(COL_W)
# ── Build table rows ─────────────────────────────────────────────────────────
def hdr(txt, bg, fg=WHITE, size=8):
return Paragraph(f"<b>{txt}</b>",
style("H", fontSize=size, fontName="Helvetica-Bold",
textColor=fg, alignment=TA_CENTER, leading=9))
# Row 0: mega header
R0 = [
hdr("ANTIBIOTIC", GREY_HEADER, size=9),
hdr("DRUG CLASS", GREY_HEADER, size=9),
hdr("GRAM-POSITIVE COCCI (GPC)", MID_BLUE, size=10),
Paragraph(""), Paragraph(""), Paragraph(""), Paragraph(""), Paragraph(""),
hdr("GRAM-NEGATIVE BACILLI (GNB)", MID_RED, size=10),
Paragraph(""), Paragraph(""), Paragraph(""), Paragraph(""), Paragraph(""),
]
# Row 1: organism names
org_names_gpc = ["S. aureus\n(MSSA)", "S. aureus\n(MRSA)", "S. pyogenes\n(GAS)",
"S. pneumoniae", "E. faecalis", "E. faecium\n(VRE)"]
org_names_gnb = ["E. coli", "Klebsiella\npneumoniae", "Pseudomonas\naeruginosa",
"Acinetobacter\nbaumannii", "Salmonella\nspp.", "H. influenzae"]
R1 = [hdr("ANTIBIOTIC", DARK_BLUE, size=8),
hdr("CLASS", DARK_BLUE, size=8)]
for n in org_names_gpc:
R1.append(hdr(n, MID_BLUE, size=7.5))
for n in org_names_gnb:
R1.append(hdr(n, MID_RED, size=7.5))
# Data rows
data_rows = []
style_commands = []
row_idx = 2 # rows 0,1 are headers
for i, row in enumerate(ABX_DATA):
abx, cls = row[0], row[1]
sus_vals = row[2:] # 12 values
tr = [
Paragraph(f"<b>{abx}</b>",
style("A", fontSize=8, fontName="Helvetica-Bold",
textColor=DARK_BLUE, alignment=TA_LEFT, leading=10)),
Paragraph(cls,
style("C", fontSize=7.5, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#333333"), alignment=TA_LEFT, leading=9)),
]
for j, val in enumerate(sus_vals):
p, bg = sc(val)
tr.append(p)
col = 2 + j
bg_key = f"bg_{row_idx}_{col}"
style_commands.append(("BACKGROUND", (col, row_idx), (col, row_idx), bg))
row_bg = PALE_BLUE if i % 2 == 0 else WHITE
style_commands.append(("BACKGROUND", (0, row_idx), (1, row_idx), row_bg))
data_rows.append(tr)
row_idx += 1
all_rows = [R0, R1] + data_rows
# ── Table style ──────────────────────────────────────────────────────────────
base_style = [
# Spanning
("SPAN", (2, 0), (7, 0)), # GPC header spans cols 2-7
("SPAN", (8, 0), (13, 0)), # GNB header spans cols 8-13
("SPAN", (0, 0), (0, 1)), # Antibiotic header spans rows 0-1
("SPAN", (1, 0), (1, 1)), # Class header spans rows 0-1
# Fonts / alignment
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
("ALIGN", (0, 0), (-1, -1), "CENTER"),
("ALIGN", (0, 2), (1, -1), "LEFT"),
# Grid
("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#aaaaaa")),
("LINEBELOW", (0, 1), (-1, 1), 1.2, DARK_BLUE),
# Row 0 backgrounds
("BACKGROUND", (0, 0), (1, 1), GREY_HEADER),
("BACKGROUND", (2, 0), (7, 0), MID_BLUE),
("BACKGROUND", (2, 1), (7, 1), DARK_BLUE),
("BACKGROUND", (8, 0), (13, 0), MID_RED),
("BACKGROUND", (8, 1), (13, 1), DARK_RED),
# Vertical separator between GPC and GNB
("LINEAFTER", (7, 0), (7, -1), 2, GREY_HEADER),
# Row heights
("ROWBACKGROUNDS", (0, 2), (-1, -1), [PALE_BLUE, WHITE]),
# Padding
("TOPPADDING", (0, 0), (-1, -1), 4),
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
("LEFTPADDING", (0, 0), (-1, -1), 3),
("RIGHTPADDING", (0, 0), (-1, -1), 3),
]
ts = TableStyle(base_style + style_commands)
t = Table(all_rows, colWidths=COL_W, repeatRows=2)
t.setStyle(ts)
# ── Legend ────────────────────────────────────────────────────────────────────
legend_items = [
(S_COLOR, "S = Susceptible (typically effective)"),
(R_COLOR, "R = Resistant (not effective)"),
(V_COLOR, "V = Variable (depends on strain/resistance pattern)"),
(I_COLOR, "I = Intermediate / reduced susceptibility"),
(NA_COLOR, "- = Not applicable / not used clinically"),
]
def legend_row(col, label):
box = Table([[""]], colWidths=[12], rowHeights=[12])
box.setStyle(TableStyle([("BACKGROUND",(0,0),(0,0),col),
("GRID",(0,0),(0,0),0.5,colors.grey)]))
return [box, Paragraph(f" {label}", legend_style)]
leg_data = [legend_row(c, l) for c, l in legend_items]
# Build as a single-row horizontal legend
leg_cells = []
for c, l in legend_items:
box = Table([[""]], colWidths=[10], rowHeights=[10])
box.setStyle(TableStyle([("BACKGROUND",(0,0),(0,0),c),
("GRID",(0,0),(0,0),0.5,colors.grey)]))
leg_cells.append(box)
leg_cells.append(Paragraph(f" {l} ", legend_style))
leg_table = Table([leg_cells], colWidths=([12,120]*5))
leg_table.setStyle(TableStyle([
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
("ALIGN", (0,0),(-1,-1),"LEFT"),
("TOPPADDING",(0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3),
]))
notes = [
"* V for penicillin against S. pneumoniae: susceptibility varies by site (meningitis requires higher MIC breakpoints).",
"* Gentamicin/Amikacin used synergistically with beta-lactams for enterococcal endocarditis (not monotherapy).",
"* MRSA = Methicillin-Resistant S. aureus; VRE = Vancomycin-Resistant Enterococcus; ESBL/CRKP strains may show further resistance.",
"* Pseudomonas aeruginosa is intrinsically resistant to many antibiotics; always verify local antibiogram.",
"* This chart reflects general/typical susceptibility patterns. Always consult local antibiogram and culture/sensitivity results.",
]
# ── Assemble document ─────────────────────────────────────────────────────────
elements = []
# Page title banner
title_table = Table(
[[Paragraph("GPC vs GNB", title_style)],
[Paragraph("Comparative Antibiotic Susceptibility Reference Chart", subtitle_style)],
[Paragraph("Gram-Positive Cocci (GPC) | Gram-Negative Bacilli (GNB) • Orris Medical Reference 2026", subtitle_style)]],
colWidths=[page_w]
)
title_table.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,2), DARK_BLUE),
("TOPPADDING", (0,0),(0,2), 6),
("BOTTOMPADDING",(0,0),(0,2), 6),
("LEFTPADDING", (0,0),(0,2), 8),
("RIGHTPADDING",(0,0),(0,2), 8),
]))
elements.append(title_table)
elements.append(Spacer(1, 6))
elements.append(t)
elements.append(Spacer(1, 6))
# Legend box
leg_outer = Table(
[[Paragraph("<b>LEGEND:</b>", style("LT", fontSize=8.5, fontName="Helvetica-Bold",
textColor=GREY_HEADER, alignment=TA_LEFT)),
leg_table]],
colWidths=[55, page_w - 55]
)
leg_outer.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), LIGHT_GREY),
("BOX",(0,0),(-1,-1), 0.8, colors.HexColor("#aaaaaa")),
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
("TOPPADDING",(0,0),(-1,-1),5),
("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),6),
]))
elements.append(leg_outer)
elements.append(Spacer(1, 5))
for note in notes:
elements.append(Paragraph(f"<i>{note}</i>", note_style))
elements.append(Spacer(1, 2))
doc.build(elements)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/gpc-gnb-chart && python generate_chart.py 2>&1
ls -lh /home/daytona/workspace/gpc-gnb-chart/
GPC vs GNB Antibiotic Susceptibility
PDF Document · PDF
| GPC (6) | GNB (6) |
|---|---|
| S. aureus MSSA | E. coli |
| S. aureus MRSA | Klebsiella pneumoniae |
| S. pyogenes (GAS) | Pseudomonas aeruginosa |
| S. pneumoniae | Acinetobacter baumannii |
| E. faecalis | Salmonella spp. |
| E. faecium (VRE) | H. influenzae |
gnb Genus Species Phylum/Class Special Feature Key Disease
A detailed professional medical reference table for Gram-Negative Bacilli (GNB). The table should show 40+ clinically relevant species organized by category. Table with 5 columns: - Column 1: GENUS (bold, left-aligned) - Column 2: SPECIES (italicized, left-aligned) - Column 3: PHYLUM/CLASS (smaller text, center) - Column 4: SPECIAL FEATURE (concise, left-aligned) - Column 5: KEY DISEASE (left-aligned) Organize into sections with color-coded category headers: SECTION 1 - ENTEROBACTERIACEAE (FAMILY ENTEROBACTERALES, PHYLUM PROTEOBACTERIA, CLASS GAMMAPROTEOBACTERIA) - Blue header - Escherichia | E. coli | Gamma | Oxidase-, lactose ferment | UTI, neonatal meningitis, diarrhea, HUS - Escherichia | E. coli O157:H7 | Gamma | Shiga toxin producer | Hemolytic uremic syndrome - Klebsiella | K. pneumoniae | Gamma | Mucoid capsule, non-motile | Hospital pneumonia, UTI, liver abscess - Klebsiella | K. oxytoca | Gamma | ESBL producer | UTI, bacteremia - Proteus | P. mirabilis | Gamma | Urease+, swarming | Staghorn calculi, UTI - Proteus | P. vulgaris | Gamma | Urease+, indole+ | UTI, wound infections - Morganella | M. morganii | Gamma | Urease+, indole+ | UTI, wound infection - Salmonella | S. typhi | Gamma | Non-lactose ferment, H2S+ | Typhoid fever (systemic) - Salmonella | S. paratyphi | Gamma | Non-lactose ferment | Paratyphoid fever - Salmonella | S. enteritidis | Gamma | Food pathogen | Foodborne gastroenteritis - Salmonella | S. typhimurium | Gamma | Multiple serovars | Foodborne gastroenteritis - Shigella | S. dysenteriae | Gamma | Non-motile, Shiga toxin | Severe bloody dysentery - Shigella | S. flexneri | Gamma | 15 serotypes | Bacillary dysentery - Shigella | S. sonnei | Gamma | Non-motile | Mild diarrhea - Shigella | S. boydii | Gamma | Non-motile | Diarrhea - Yersinia | Y. pestis | Gamma | Biofilm | PLAGUE (bubonic/pneumonic/septicemic) - Yersinia | Y. enterocolitica | Gamma | Psychrophilic | Enterocolitis, mesenteric adenitis - Yersinia | Y. pseudotuberculosis | Gamma | Cold-loving | Mesenteric adenitis, mimics appendicitis - Enterobacter | E. cloacae | Gamma | AmpC beta-lactamase | Nosocomial infections - Enterobacter | E. aerogenes | Gamma | AmpC producer | Hospital-acquired infections - Serratia | S. marcescens | Gamma | Red pigment | Hospital infections, IV drug users - Citrobacter | C. freundii | Gamma | ESBL producer | UTI, neonatal meningitis - Citrobacter | C. koseri | Gamma | Meningitis risk | Neonatal brain abscess - Providencia | P. stuartii | Gamma | Urease+ | UTI in catheterized patients - Hafnia | H. alvei | Gamma | Lactose delayed | Rarely pathogenic SECTION 2 - NON-FERMENTATIVE GRAM-NEGATIVE BACILLI - Red header - Pseudomonas | P. aeruginosa | Gamma | Oxidase+, blue-green pigment, mucoid | Burn/wound infections, VAP, CF lung disease - Pseudomonas | P. fluorescens | Gamma | Oxidase+, fluorescence | Environmental contaminant - Pseudomonas | P. putida | Gamma | Oxidase+ | Environmental - Acinetobacter | A. baumannii | Gamma | Oxidase-, CRAB strains | Hospital VAP, wound infections - Acinetobacter | A. lwoffii | Gamma | Oxidase- | Opportunistic - Stenotrophomonas | S. maltophilia | Xanthomonas (class) | Oxidase-, carbapenem-resistant | CF pneumonia, VAP in ICU - Burkholderia | B. cepacia | Burkholderiales | Multiple genomovars | CF lung colonization - Burkholderia | B. pseudomallei | Burkholderiales | Bipolar staining | Melioidosis (endemic SE Asia) SECTION 3 - FASTIDIOUS GRAM-NEGATIVE BACILLI - Orange header - Haemophilus | H. influenzae | Pasteurellales | Requires X & V factors, type b has capsule | Meningitis, pneumonia, epiglottitis - Haemophilus | H. ducreyi | Pasteurellales | Gram-negative bacillus | Chancroid (STI) - Legionella | L. pneumophila | Legionellales | Intracellular, water systems | Legionnaire's disease, Pontiac fever - Bordetella | B. pertussis | Burkholderiales | Pertussis toxin producer | Whooping cough (pertussis) - Bordetella | B. parapertussis | Burkholderiales | Mild toxin | Parapertussis (milder) - Brucella | B. melitensis | Rhizobiales | Zoonosis (goats) | Brucellosis (undulant fever) - Brucella | B. abortus | Rhizobiales | Zoonosis (cattle) | Brucellosis - Francisella | F. tularensis | Thiotrichales | Bioterror agent, highly infectious | Tularemia (rabbit fever) - Pasteurella | P. multocida | Pasteurellales | Animal bite wound pathogen | Cat/dog bite infections - Bartonella | B. henselae | Rhizobiales | Cat flea vector | Cat scratch disease, bacillary angiomatosis SECTION 4 - CURVED/SPIRAL GRAM-NEGATIVE BACILLI - Purple header - Campylobacter | C. jejuni | Epsilonproteobacteria | Microaerophile, comma-shaped | Most common bacterial diarrhea - Campylobacter | C. fetus | Epsilonproteobacteria | Microaerophile, S-shaped | Bacteremia in elderly/immunocompromised - Helicobacter | H. pylori | Epsilonproteobacteria | Urease+, spiral, lives in stomach | Peptic ulcer, gastric cancer, MALT lymphoma - Vibrio | V. cholerae | Vibrionales | O1 & O139 epidemic strains | Cholera (rice-water diarrhea) - Vibrio | V. parahaemolyticus | Vibrionales | Halophile (salt-loving) | Seafood-associated gastroenteritis - Vibrio | V. vulnificus | Vibrionales | Highly virulent | Raw oyster infections, septicemia SECTION 5 - GRAM-NEGATIVE COCCI / COCCOBACILLI - Green header - Neisseria | N. meningitidis | Gammaproteobacteria | Gram-negative diplococcus | Bacterial meningitis, septicemia - Neisseria | N. gonorrhoeae | Gammaproteobacteria | Gram-negative diplococcus | Gonorrhea, PID, neonatal ophthalmia - Moraxella | M. catarrhalis | Gammaproteobacteria | Gram-negative diplococcus | Otitis media, sinusitis, COPD exacerbation Use white background. Section headers bold, full-width color bands. Alternate row shading (very light grey/white) for readability. Professional, high-contrast layout. Include a footer: "Data source: Henry's Clinical Diagnosis & Laboratory Methods, Red Book 2021, Medical Microbiology 9e. *Phylum = Proteobacteria unless noted; Class = Gammaproteobacteria unless noted."
400, message: Got more than 4194304 bytes when reading: b'data: {"candidates": [{"content": {"role": "model","parts": [{"inlineData": {"mimeType": "image/png"...'.
We encountered an error while processing your request. Please try again or reach out to us for help.
gnb Group Phylum Class Order Family species Key Disease
~/gpc-gnb-chart/gnb_taxonomy.py
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/gpc-gnb-chart/GNB_Full_Taxonomy_Table.pdf"
# ── Palette ──────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0d2b45")
BLUE_H = colors.HexColor("#1a5276")
BLUE_L = colors.HexColor("#d6eaf8")
BLUE_P = colors.HexColor("#eaf4fb")
RED_H = colors.HexColor("#922b21")
RED_L = colors.HexColor("#fadbd8")
RED_P = colors.HexColor("#fef9f9")
GREEN_H = colors.HexColor("#1e8449")
GREEN_L = colors.HexColor("#d5f5e3")
GREEN_P = colors.HexColor("#f0faf4")
ORANGE_H = colors.HexColor("#784212")
ORANGE_L = colors.HexColor("#fdebd0")
ORANGE_P = colors.HexColor("#fef9f4")
PURPLE_H = colors.HexColor("#4a235a")
PURPLE_L = colors.HexColor("#e8daef")
PURPLE_P = colors.HexColor("#faf5fc")
TEAL_H = colors.HexColor("#0e6655")
TEAL_L = colors.HexColor("#d1f2eb")
TEAL_P = colors.HexColor("#f0faf8")
GREY_H = colors.HexColor("#2c3e50")
GREY_L = colors.HexColor("#f2f3f4")
WHITE = colors.white
BLACK = colors.black
def st(name, **kw):
base = getSampleStyleSheet()["Normal"]
return ParagraphStyle(name, parent=base, **kw)
# Paragraph styles
TH = st("TH", fontSize=8, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=10)
TD_L = st("TDL", fontSize=7.5, fontName="Helvetica",
textColor=BLACK, alignment=TA_LEFT, leading=9)
TD_I = st("TDI", fontSize=7.5, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#1a3a5c"), alignment=TA_LEFT, leading=9)
TD_C = st("TDC", fontSize=7.5, fontName="Helvetica",
textColor=BLACK, alignment=TA_CENTER, leading=9)
SEC_H = st("SEC", fontSize=9.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=12)
NOTE = st("NOTE", fontSize=7, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#555555"), alignment=TA_LEFT, leading=9)
def p(text, style): return Paragraph(text, style)
def ph(text): return p(text, TH)
def pl(text): return p(text, TD_L)
def pi(text): return p(text, TD_I)
def pc(text): return p(text, TD_C)
def pb(text): return p(f"<b>{text}</b>", TD_L)
# ── Column widths (landscape A3 usable ~397mm) ───────────────────────────────
# Group | Phylum | Class | Order | Family | Species | Key Disease
CW = [38, 45, 60, 52, 58, 65, 110] # mm
# total = 428 → slightly over; reduce
CW = [35, 42, 58, 50, 55, 62, 108] # ≈ 410mm
# ── Header row ────────────────────────────────────────────────────────────────
HDR = [ph("GROUP"), ph("PHYLUM"), ph("CLASS"),
ph("ORDER"), ph("FAMILY"), ph("SPECIES"), ph("KEY DISEASE")]
# ── Section header helper ─────────────────────────────────────────────────────
def sec(label, bg, n_cols=7):
row = [p(f"<b>{label}</b>", SEC_H)] + [p("", SEC_H)] * (n_cols - 1)
return row, bg
# ── Data ──────────────────────────────────────────────────────────────────────
# Each tuple: (group, phylum, class_, order, family, species_italic, disease)
# ─── 1. Enterobacteriaceae ────────────────────────────────────────────────────
ENTERO = [
("Enteric\nFermenters", "Pseudomonadota\n(Proteobacteria)", "Gamma-\nproteobacteria",
"Enterobacterales", "Enterobacteriaceae",
"Escherichia coli", "UTI, neonatal meningitis, diarrhea (ETEC/EHEC), HUS (O157:H7)"),
("", "", "", "", "",
"Klebsiella pneumoniae", "Hospital-acquired pneumonia, UTI, liver abscess; ESBL/CRKP strains"),
("", "", "", "", "",
"Klebsiella oxytoca", "UTI, bacteremia; ESBL-producing strains"),
("", "", "", "", "",
"Proteus mirabilis", "UTI, staghorn kidney calculi; swarming, urease+"),
("", "", "", "", "",
"Proteus vulgaris", "UTI, wound infections; indole+"),
("", "", "", "", "",
"Morganella morganii", "UTI, wound infections; nosocomial"),
("", "", "", "", "",
"Providencia stuartii", "UTI in catheterised patients; aminoglycoside-resistant"),
("", "", "", "", "",
"Enterobacter cloacae", "Nosocomial pneumonia, UTI, bacteremia; AmpC β-lactamase"),
("", "", "", "", "",
"Enterobacter aerogenes\n(Klebsiella aerogenes)", "Hospital infections; AmpC producer"),
("", "", "", "", "",
"Serratia marcescens", "Hospital pneumonia, UTI; red pigment (prodigiosin); IV drug users"),
("", "", "", "", "",
"Citrobacter freundii", "UTI, neonatal meningitis; ESBL producer"),
("", "", "", "", "",
"Citrobacter koseri", "Neonatal brain abscess; meningitis risk"),
("", "", "", "", "",
"Hafnia alvei", "Rare opportunist; gastroenteritis"),
]
SALMONELLA = [
("Salmonella /\nShigella\n(Enteric)", "Pseudomonadota", "Gamma-\nproteobacteria",
"Enterobacterales", "Enterobacteriaceae",
"Salmonella typhi", "Typhoid fever (enteric fever); rose spots, hepatosplenomegaly"),
("", "", "", "", "",
"Salmonella paratyphi A/B/C", "Paratyphoid fever"),
("", "", "", "", "",
"Salmonella enteritidis", "Foodborne gastroenteritis (poultry/eggs)"),
("", "", "", "", "",
"Salmonella typhimurium", "Foodborne gastroenteritis; bacteremia in sickle cell"),
("", "", "", "", "",
"Shigella dysenteriae", "Severe bloody dysentery; Shiga toxin; HUS risk"),
("", "", "", "", "",
"Shigella flexneri", "Bacillary dysentery; most common in developing countries"),
("", "", "", "", "",
"Shigella sonnei", "Mild diarrhea; most common in developed countries"),
("", "", "", "", "",
"Shigella boydii", "Diarrhea; endemic in Indian subcontinent"),
]
YERSINIA = [
("Yersinia", "Pseudomonadota", "Gamma-\nproteobacteria",
"Enterobacterales", "Yersiniaceae",
"Yersinia pestis", "PLAGUE: bubonic / pneumonic / septicemic; bioterrorism agent"),
("", "", "", "", "",
"Yersinia enterocolitica", "Enterocolitis, mesenteric adenitis (mimics appendicitis)"),
("", "", "", "", "",
"Yersinia pseudotuberculosis", "Mesenteric adenitis; Kawasaki-like syndrome in children"),
]
# ─── 2. Non-fermenters ────────────────────────────────────────────────────────
NONFERMENT = [
("Non-\nFermentative\nGNB", "Pseudomonadota", "Gamma-\nproteobacteria",
"Pseudomonadales", "Pseudomonadaceae",
"Pseudomonas aeruginosa", "Burn/wound infections, VAP, CF lung disease, hot-tub folliculitis; oxidase+, pyocyanin"),
("", "", "", "", "Pseudomonadaceae",
"Pseudomonas fluorescens", "Rare opportunist; blood product contamination"),
("", "", "Gamma-\nproteobacteria",
"Pseudomonadales", "Moraxellaceae",
"Acinetobacter baumannii", "VAP, wound infections; CRAB strains; survives on dry surfaces"),
("", "", "", "", "Moraxellaceae",
"Acinetobacter lwoffii", "Meningitis, bacteremia; rarely pathogenic"),
("", "", "Xanthomonadetes",
"Xanthomonadales", "Xanthomonadaceae",
"Stenotrophomonas maltophilia", "VAP in ICU, CF; intrinsically carbapenem-resistant; TMP-SMX"),
("", "", "Beta-\nproteobacteria",
"Burkholderiales", "Burkholderiaceae",
"Burkholderia cepacia complex", "CF lung colonisation; multiple genomovars; hard to treat"),
("", "", "", "Burkholderiales", "Burkholderiaceae",
"Burkholderia pseudomallei", "Melioidosis; SE Asia/N. Australia; mimics TB"),
]
# ─── 3. Fastidious GNB ───────────────────────────────────────────────────────
FASTIDIOUS = [
("Fastidious\nGNB", "Pseudomonadota", "Gamma-\nproteobacteria",
"Pasteurellales", "Pasteurellaceae",
"Haemophilus influenzae", "Meningitis (type b), epiglottitis, otitis media; requires X & V factors"),
("", "", "", "Pasteurellales", "Pasteurellaceae",
"Haemophilus ducreyi", "Chancroid (painful genital ulcer); STI"),
("", "", "", "Pasteurellales", "Pasteurellaceae",
"Pasteurella multocida", "Animal bite wound infections (cat/dog); cellulitis"),
("", "", "", "Legionellales", "Legionellaceae",
"Legionella pneumophila", "Legionnaire's disease (severe pneumonia); Pontiac fever; water systems"),
("", "", "Beta-\nproteobacteria",
"Burkholderiales", "Alcaligenaceae",
"Bordetella pertussis", "Whooping cough; pertussis toxin → lymphocytosis"),
("", "", "", "Burkholderiales", "Alcaligenaceae",
"Bordetella parapertussis", "Milder pertussis-like illness"),
("", "", "Alpha-\nproteobacteria",
"Rhizobiales", "Brucellaceae",
"Brucella melitensis", "Brucellosis (undulant fever); goats; undulating fever"),
("", "", "", "Rhizobiales", "Brucellaceae",
"Brucella abortus", "Brucellosis; cattle; occupational disease"),
("", "", "Gamma-\nproteobacteria",
"Thiotrichales", "Francisellaceae",
"Francisella tularensis", "Tularemia (rabbit fever); extremely infectious; bioterrorism agent"),
("", "", "Alpha-\nproteobacteria",
"Rhizobiales", "Bartonellaceae",
"Bartonella henselae", "Cat scratch disease, bacillary angiomatosis (HIV patients)"),
("", "", "", "Rhizobiales", "Bartonellaceae",
"Bartonella quintana", "Trench fever; bacillary angiomatosis in homeless"),
]
# ─── 4. Curved/Microaerophilic ────────────────────────────────────────────────
CURVED = [
("Curved /\nMicroaero-\nphilic GNB", "Pseudomonadota", "Epsilon-\nproteobacteria",
"Campylobacterales", "Campylobacteraceae",
"Campylobacter jejuni", "Most common bacterial diarrhea worldwide; Guillain-Barré post-infection"),
("", "", "", "Campylobacterales", "Campylobacteraceae",
"Campylobacter fetus", "Bacteremia; meningitis in immunocompromised & elderly"),
("", "", "", "Campylobacterales", "Helicobacteraceae",
"Helicobacter pylori", "Peptic ulcer disease, gastric cancer, MALT lymphoma; urease+"),
("", "", "Gamma-\nproteobacteria",
"Vibrionales", "Vibrionaceae",
"Vibrio cholerae (O1/O139)", "Cholera (rice-water diarrhea); massive fluid loss"),
("", "", "", "Vibrionales", "Vibrionaceae",
"Vibrio parahaemolyticus", "Seafood-associated gastroenteritis; halophile"),
("", "", "", "Vibrionales", "Vibrionaceae",
"Vibrio vulnificus", "Septicemia from raw oysters; fatal in liver disease"),
]
# ─── 5. GN Cocci/Coccobacilli ────────────────────────────────────────────────
GNCOC = [
("GN Cocci /\nCoccobacilli", "Pseudomonadota", "Beta-\nproteobacteria",
"Neisseriales", "Neisseriaceae",
"Neisseria meningitidis", "Bacterial meningitis, Waterhouse-Friderichsen syndrome; capsule serogroups A,B,C,W,Y"),
("", "", "", "Neisseriales", "Neisseriaceae",
"Neisseria gonorrhoeae", "Gonorrhea, PID, neonatal ophthalmia, disseminated GC infection"),
("", "", "Gamma-\nproteobacteria",
"Pseudomonadales", "Moraxellaceae",
"Moraxella catarrhalis", "Otitis media, sinusitis, COPD exacerbation; β-lactamase+"),
]
# ─── 6. Anaerobic GNB ────────────────────────────────────────────────────────
ANAEROB = [
("Anaerobic\nGNB", "Bacteroidota\n(Bacteroidetes)", "Bacteroidia",
"Bacteroidales", "Bacteroidaceae",
"Bacteroides fragilis", "Intra-abdominal infections, abscesses; most common anaerobe in clinical specimens"),
("", "", "", "Bacteroidales", "Prevotellaceae",
"Prevotella melaninogenica", "Oral infections, aspiration pneumonia, brain abscess"),
("", "", "", "Bacteroidales", "Porphyromonadaceae",
"Porphyromonas gingivalis", "Periodontal disease; implicated in cardiovascular disease"),
("", "Fusobacteriota\n(Fusobacteria)", "Fusobacteriia",
"Fusobacteriales", "Fusobacteriaceae",
"Fusobacterium nucleatum", "Oral infections, Lemierre syndrome, colorectal cancer association"),
]
# ── Build PDF ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A3),
leftMargin=1.0*cm, rightMargin=1.0*cm,
topMargin=1.3*cm, bottomMargin=1.3*cm,
title="GNB Full Taxonomy Table",
author="Orris Medical Reference"
)
def build_section(label, bg_h, bg_l, bg_p, data_rows):
"""Returns list of table row lists for one section."""
rows = []
# Section header spanning all 7 cols
sec_row = [p(f"<b> {label}</b>",
st("SH", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_LEFT, leading=11))]
sec_row += [p("", TH)] * 6
rows.append(("SEC", sec_row, bg_h))
for i, (grp, phyl, cls, ord_, fam, spp, dis) in enumerate(data_rows):
row = [
pb(grp) if grp else p("", TD_L),
pc(phyl) if phyl else p("", TD_C),
pc(cls) if cls else p("", TD_C),
pc(ord_) if ord_ else p("", TD_C),
pc(fam) if fam else p("", TD_C),
pi(spp),
pl(dis),
]
bg = bg_l if i % 2 == 0 else bg_p
rows.append(("DATA", row, bg))
return rows
sections = [
("GROUP 1 · ENTEROBACTERIACEAE (Enteric Fermenters + Salmonella/Shigella + Yersinia)",
BLUE_H, BLUE_L, BLUE_P,
ENTERO + SALMONELLA + YERSINIA),
("GROUP 2 · NON-FERMENTATIVE GNB (Environmental / Opportunistic)",
RED_H, RED_L, RED_P,
NONFERMENT),
("GROUP 3 · FASTIDIOUS GNB (Special Growth Requirements)",
ORANGE_H, ORANGE_L, ORANGE_P,
FASTIDIOUS),
("GROUP 4 · CURVED / MICROAEROPHILIC GNB",
PURPLE_H, PURPLE_L, PURPLE_P,
CURVED),
("GROUP 5 · GN COCCI & COCCOBACILLI",
GREEN_H, GREEN_L, GREEN_P,
GNCOC),
("GROUP 6 · ANAEROBIC GNB",
TEAL_H, TEAL_L, TEAL_P,
ANAEROB),
]
# Collect all rows with metadata
all_rows_meta = [] # list of (type, row_data, bg_color)
all_rows_meta.append(("HDR", HDR, GREY_H))
for label, bg_h, bg_l, bg_p, data in sections:
all_rows_meta.extend(build_section(label, bg_h, bg_l, bg_p, data))
all_rows = [r for _, r, _ in all_rows_meta]
# Build table style
ts_cmds = [
# Grid
("GRID", (0,0),(-1,-1), 0.35, colors.HexColor("#bbbbbb")),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("ALIGN", (0,0),(0,-1), "LEFT"),
("ALIGN", (5,0),(6,-1), "LEFT"),
# Padding
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 3),
# Header row
("BACKGROUND", (0,0),(-1,0), GREY_H),
("LINEBELOW", (0,0),(-1,0), 1.2, WHITE),
]
for i, (rtype, row, bg) in enumerate(all_rows_meta):
if rtype == "SEC":
ts_cmds.append(("SPAN", (0,i),(-1,i)))
ts_cmds.append(("BACKGROUND", (0,i),(-1,i), bg))
ts_cmds.append(("LINEABOVE", (0,i),(-1,i), 1.0, colors.HexColor("#888888")))
ts_cmds.append(("LINEBELOW", (0,i),(-1,i), 0.8, colors.HexColor("#888888")))
elif rtype == "DATA":
ts_cmds.append(("BACKGROUND", (0,i),(-1,i), bg))
# Bold species column
ts_cmds.append(("FONTNAME", (5,1),(5,-1), "Helvetica-Oblique"))
ts = TableStyle(ts_cmds)
tbl = Table(all_rows, colWidths=CW, repeatRows=1)
tbl.setStyle(ts)
# ── Title banner ──────────────────────────────────────────────────────────────
total_w = sum(CW)
title_tbl = Table([
[p("<b>GRAM-NEGATIVE BACILLI (GNB)</b>",
st("T1", fontSize=18, fontName="Helvetica-Bold", textColor=WHITE,
alignment=TA_CENTER))],
[p("Complete Taxonomic Classification · Group | Phylum | Class | Order | Family | Species | Key Disease",
st("T2", fontSize=9.5, fontName="Helvetica", textColor=colors.HexColor("#aaccee"),
alignment=TA_CENTER))],
[p("6 Groups · 40+ Clinically Relevant Species · Orris Medical Reference 2026",
st("T3", fontSize=8, fontName="Helvetica-Oblique", textColor=colors.HexColor("#88aacc"),
alignment=TA_CENTER))],
], colWidths=[total_w])
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,2), NAVY),
("TOPPADDING", (0,0),(0,2), 5),
("BOTTOMPADDING", (0,0),(0,2), 5),
("LEFTPADDING", (0,0),(0,2), 8),
]))
notes = [
"Phylum 'Pseudomonadota' is the modern name for Proteobacteria (same organisms). "
"Class abbreviations: Gamma = Gammaproteobacteria; Beta = Betaproteobacteria; "
"Alpha = Alphaproteobacteria; Epsilon = Epsilonproteobacteria.",
"GNB = Gram-Negative Bacilli. All stain pink/red on Gram stain due to thin peptidoglycan + outer membrane with LPS (endotoxin). "
"Species in italics per standard microbiological nomenclature.",
"Sources: Henry's Clinical Diagnosis & Laboratory Methods; Red Book 2021; Medical Microbiology 9e (Murray); Jawetz, Melnick & Adelberg's Medical Microbiology 28e.",
]
elements = [title_tbl, Spacer(1, 5), tbl, Spacer(1, 5)]
for n in notes:
elements.append(Paragraph(n, NOTE))
elements.append(Spacer(1, 2))
doc.build(elements)
print(f"PDF saved: {OUTPUT}")
cd /home/daytona/workspace/gpc-gnb-chart && python gnb_taxonomy.py 2>&1
ls -lh /home/daytona/workspace/gpc-gnb-chart/GNB_Full_Taxonomy_Table.pdf
GNB Full Taxonomy Table
PDF Document · PDF
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| Enteric Fermenters | Proteobacteria | Gammaproteobacteria | Enterobacterales | Enterobacteriaceae | Escherichia coli | UTI, neonatal meningitis, diarrhea (ETEC/EHEC), HUS (O157:H7) |
| Klebsiella pneumoniae | Hospital-acquired pneumonia, UTI, liver abscess; ESBL/CRKP strains | |||||
| Klebsiella oxytoca | UTI, bacteremia; ESBL-producing strains | |||||
| Proteus mirabilis | UTI, staghorn kidney calculi; swarming, urease+ | |||||
| Proteus vulgaris | UTI, wound infections; indole+ | |||||
| Morganella morganii | UTI, wound infections; nosocomial | |||||
| Providencia stuartii | UTI in catheterised patients; aminoglycoside-resistant | |||||
| Enterobacter cloacae | Nosocomial pneumonia, UTI, bacteremia; AmpC β-lactamase | |||||
| Enterobacter aerogenes | Hospital infections; AmpC producer | |||||
| Serratia marcescens | Hospital pneumonia, UTI; red pigment; IV drug users | |||||
| Citrobacter freundii | UTI, neonatal meningitis; ESBL producer | |||||
| Citrobacter koseri | Neonatal brain abscess | |||||
| Salmonella / Shigella | Salmonella typhi | Typhoid fever; rose spots, hepatosplenomegaly | ||||
| Salmonella paratyphi A/B/C | Paratyphoid fever | |||||
| Salmonella enteritidis | Foodborne gastroenteritis (poultry/eggs) | |||||
| Salmonella typhimurium | Foodborne gastroenteritis; bacteremia in sickle cell | |||||
| Shigella dysenteriae | Severe bloody dysentery; Shiga toxin; HUS risk | |||||
| Shigella flexneri | Bacillary dysentery; most common in developing countries | |||||
| Shigella sonnei | Mild diarrhea; most common in developed countries | |||||
| Shigella boydii | Diarrhea; endemic in Indian subcontinent | |||||
| Yersinia | Yersiniaceae | Yersinia pestis | PLAGUE (bubonic/pneumonic/septicemic); bioterrorism agent | |||
| Yersinia enterocolitica | Enterocolitis, mesenteric adenitis (mimics appendicitis) | |||||
| Yersinia pseudotuberculosis | Mesenteric adenitis; Kawasaki-like in children |
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| Non-Fermenters | Proteobacteria | Gammaproteobacteria | Pseudomonadales | Pseudomonadaceae | Pseudomonas aeruginosa | Burn/wound infections, VAP, cystic fibrosis, hot-tub folliculitis; oxidase+, pyocyanin pigment |
| Pseudomonas fluorescens | Rare; blood product contamination | |||||
| Pseudomonadales | Moraxellaceae | Acinetobacter baumannii | VAP, wound infections; CRAB strains; survives on dry surfaces | |||
| Xanthomonadetes | Xanthomonadales | Xanthomonadaceae | Stenotrophomonas maltophilia | VAP in ICU, CF; intrinsically carbapenem-resistant; TMP-SMX | ||
| Betaproteobacteria | Burkholderiales | Burkholderiaceae | Burkholderia cepacia complex | CF lung colonisation; multiple genomovars | ||
| Burkholderia pseudomallei | Melioidosis; SE Asia/N. Australia; mimics TB |
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| Fastidious | Proteobacteria | Gammaproteobacteria | Pasteurellales | Pasteurellaceae | Haemophilus influenzae | Meningitis (type b), epiglottitis, otitis media; requires X & V factors |
| Haemophilus ducreyi | Chancroid (painful genital ulcer - STI) | |||||
| Pasteurella multocida | Cat/dog bite wound infections; cellulitis | |||||
| Legionellales | Legionellaceae | Legionella pneumophila | Legionnaire's disease; Pontiac fever; water/AC systems | |||
| Betaproteobacteria | Burkholderiales | Alcaligenaceae | Bordetella pertussis | Whooping cough (pertussis); lymphocytosis | ||
| Bordetella parapertussis | Milder pertussis-like illness | |||||
| Alphaproteobacteria | Rhizobiales | Brucellaceae | Brucella melitensis | Brucellosis (undulant fever); goats | ||
| Brucella abortus | Brucellosis; cattle; occupational disease | |||||
| Gammaproteobacteria | Thiotrichales | Francisellaceae | Francisella tularensis | Tularemia (rabbit fever); bioterrorism agent | ||
| Alphaproteobacteria | Rhizobiales | Bartonellaceae | Bartonella henselae | Cat scratch disease; bacillary angiomatosis (HIV) | ||
| Bartonella quintana | Trench fever; bacillary angiomatosis in homeless |
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| Curved | Proteobacteria | Epsilonproteobacteria | Campylobacterales | Campylobacteraceae | Campylobacter jejuni | Most common bacterial diarrhea worldwide; Guillain-Barré post-infection |
| Campylobacter fetus | Bacteremia; meningitis in immunocompromised | |||||
| Campylobacterales | Helicobacteraceae | Helicobacter pylori | Peptic ulcer, gastric cancer, MALT lymphoma; urease+ | |||
| Gammaproteobacteria | Vibrionales | Vibrionaceae | Vibrio cholerae O1/O139 | Cholera (rice-water diarrhea); massive fluid loss | ||
| Vibrio parahaemolyticus | Seafood-associated gastroenteritis; halophile | |||||
| Vibrio vulnificus | Septicemia from raw oysters; fatal in liver disease |
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| GN Cocci | Proteobacteria | Betaproteobacteria | Neisseriales | Neisseriaceae | Neisseria meningitidis | Bacterial meningitis; Waterhouse-Friderichsen syndrome; serogroups A,B,C,W,Y |
| Neisseria gonorrhoeae | Gonorrhea, PID, neonatal ophthalmia | |||||
| Gammaproteobacteria | Pseudomonadales | Moraxellaceae | Moraxella catarrhalis | Otitis media, sinusitis, COPD exacerbation; β-lactamase+ |
| Group | Phylum | Class | Order | Family | Species | Key Disease |
|---|---|---|---|---|---|---|
| Anaerobic | Bacteroidetes | Bacteroidia | Bacteroidales | Bacteroidaceae | Bacteroides fragilis | Intra-abdominal infections, abscesses; most common anaerobe in clinical specimens |
| Prevotellaceae | Prevotella melaninogenica | Oral infections, aspiration pneumonia, brain abscess | ||||
| Porphyromonadaceae | Porphyromonas gingivalis | Periodontal disease; linked to cardiovascular disease | ||||
| Fusobacteria | Fusobacteriia | Fusobacteriales | Fusobacteriaceae | Fusobacterium nucleatum | Oral infections, Lemierre syndrome; colorectal cancer association |
Generate antibiotic resistance patterns for common GNB (ESBL, MRSA, VRE)
~/gpc-gnb-chart/resistance_patterns.py
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
OUTPUT = "/home/daytona/workspace/gpc-gnb-chart/Antibiotic_Resistance_Patterns.pdf"
# ── Palette ───────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0d2b45")
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2471a3")
PALE_BLUE = colors.HexColor("#d6eaf8")
VLIGHT_BLUE= colors.HexColor("#eaf4fb")
DARK_RED = colors.HexColor("#7b241c")
MID_RED = colors.HexColor("#c0392b")
PALE_RED = colors.HexColor("#fadbd8")
VLIGHT_RED = colors.HexColor("#fff5f4")
DARK_GREEN = colors.HexColor("#1d6a3a")
MID_GREEN = colors.HexColor("#27ae60")
PALE_GREEN = colors.HexColor("#d5f5e3")
VLIGHT_GRN = colors.HexColor("#f0faf4")
DARK_ORNG = colors.HexColor("#784212")
MID_ORNG = colors.HexColor("#d35400")
PALE_ORNG = colors.HexColor("#fdebd0")
VLIGHT_ORG = colors.HexColor("#fef9f4")
DARK_PURP = colors.HexColor("#4a235a")
MID_PURP = colors.HexColor("#7d3c98")
PALE_PURP = colors.HexColor("#e8daef")
VLIGHT_PRP = colors.HexColor("#faf5fc")
DARK_TEAL = colors.HexColor("#0e6655")
PALE_TEAL = colors.HexColor("#d1f2eb")
VLIGHT_TEL = colors.HexColor("#f0faf8")
GREY = colors.HexColor("#2c3e50")
LGREY = colors.HexColor("#f2f3f4")
WHITE = colors.white
BLACK = colors.black
# Cell colours for susceptibility
S_CLR = colors.HexColor("#27ae60") # Susceptible
R_CLR = colors.HexColor("#e74c3c") # Resistant
V_CLR = colors.HexColor("#f39c12") # Variable
I_CLR = colors.HexColor("#8e44ad") # Intermediate
N_CLR = colors.HexColor("#95a5a6") # N/A
def sty(name, **kw):
base = getSampleStyleSheet()["Normal"]
return ParagraphStyle(name, parent=base, **kw)
TH = sty("TH", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER, leading=10)
THL = sty("THL", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_LEFT, leading=10)
TD = sty("TD", fontSize=7.5, fontName="Helvetica", textColor=BLACK, alignment=TA_LEFT, leading=9)
TDC = sty("TDC", fontSize=7.5, fontName="Helvetica", textColor=BLACK, alignment=TA_CENTER, leading=9)
TDB = sty("TDB", fontSize=7.5, fontName="Helvetica-Bold", textColor=BLACK, alignment=TA_LEFT, leading=9)
TDBR = sty("TDBR", fontSize=7.5, fontName="Helvetica-Bold", textColor=BLACK, alignment=TA_CENTER, leading=9)
SEC = sty("SEC", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_LEFT, leading=12)
NOTE = sty("NOTE", fontSize=7, fontName="Helvetica-Oblique", textColor=colors.HexColor("#555555"), alignment=TA_LEFT, leading=9)
MECH = sty("MECH", fontSize=7.5, fontName="Helvetica", textColor=colors.HexColor("#1a3a5c"), alignment=TA_LEFT, leading=9)
BOX = sty("BOX", fontSize=8, fontName="Helvetica", textColor=BLACK, alignment=TA_LEFT, leading=10)
def ph(t): return Paragraph(t, TH)
def phl(t): return Paragraph(t, THL)
def p(t): return Paragraph(t, TD)
def pc(t): return Paragraph(t, TDC)
def pb(t): return Paragraph(f"<b>{t}</b>", TDB)
def pbc(t):return Paragraph(f"<b>{t}</b>", TDBR)
def sc_cell(code):
"""Coloured susceptibility cell."""
MAP = {
"S": (S_CLR, "S"),
"R": (R_CLR, "R"),
"V": (V_CLR, "V"),
"I": (I_CLR, "I"),
"-": (N_CLR, "-"),
"S*": (colors.HexColor("#1e8449"), "S*"),
"R*": (colors.HexColor("#b03a2e"), "R*"),
}
col, label = MAP.get(code, (N_CLR, code))
return Paragraph(f"<b>{label}</b>",
sty("SC", fontSize=8, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=10)), col
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A3),
leftMargin=1.0*cm, rightMargin=1.0*cm,
topMargin=1.2*cm, bottomMargin=1.2*cm,
title="Antibiotic Resistance Patterns – ESBL · CRE · MRSA · VRE · MDR-GNB",
author="Orris Medical Reference"
)
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 1 — RESISTANCE MECHANISM OVERVIEW TABLE
# ═══════════════════════════════════════════════════════════════════════════════
# Columns: Resistance Type | Organism(s) | Mechanism | Genes/Enzymes |
# Drugs RESISTANT | Drugs ACTIVE | Detection | Clinical Notes
OV_CW = [40, 70, 75, 62, 75, 75, 45, 68] # total ~510 → trim
OV_CW = [38, 65, 72, 60, 70, 72, 42, 62] # ~481mm — fits landscape A3
OV_HDR = [ph("RESISTANCE\nTYPE"), ph("AFFECTED\nORGANISMS"),
ph("MECHANISM"), ph("GENES /\nENZYMES"),
ph("RESISTANT TO\n(avoid)"), ph("ACTIVE DRUGS\n(treatment)"),
ph("DETECTION"), ph("KEY CLINICAL NOTES")]
OV_DATA = [
# ── ESBL ──
["ESBL\n(Extended-Spectrum\nBeta-Lactamase)",
"E. coli, K. pneumoniae,\nK. oxytoca, P. mirabilis,\nEnterobacter spp.",
"Plasmid-encoded β-lactamases\nhydroly se extended-spectrum\ncephalosporins; overcome\ninhibitors variably",
"blaTEM, blaSHV,\nblaCTX-M\n(CTX-M most common\nworldwide)",
"Penicillins, ALL\ncephalosporins (1st–4th gen),\nAztreonam;\nPiperacillin-tazobactam\n(unreliable)",
"Carbapenems (DOC):\nErtapenem, Meropenem;\nFosfomycin (UTI);\nNitrofurantoin (UTI);\nFluoroquinolones (if susceptible);\nTMP-SMX (if susceptible)",
"Double-disk synergy\ntest (DDST);\nCombination disk;\nMIC testing;\nMolecular PCR",
"Carbapenem superior to\npiperacillin-tazobactam (RCT);\nHigh-risk: hospital, elderly,\nprior antibiotics, travel;\nPlasmid-mediated = rapid spread"],
# ── CRE ──
["CRE\n(Carbapenem-Resistant\nEnterobacterales)",
"K. pneumoniae (KPC),\nE. coli, Enterobacter,\nSerratia, Proteus",
"Carbapenemase production\n(KPC, MBL, OXA);\nOR porin loss +\nAmpC/ESBL coproduction",
"blaKPC (Class A)\nblaNDM, blaVIM,\nblaIMP (Class B MBL)\nblaOXA-48 (Class D)",
"ALL beta-lactams\nincl. carbapenems;\nOften also: FQ,\naminoglycosides,\nTMP-SMX",
"Ceftazidime-avibactam (KPC,\nsome OXA);\nMeropenem-vaborbactam (KPC);\nImipenem-cilastatin-relebactam;\nCefiderocol (MBL, OXA-48);\nAztreonam-avibactam (MBL);\nColistin (last resort, nephrotoxic)",
"Modified Hodge test;\nCarbaNP test;\nMicrobroth dilution;\nMolecular: PCR/\nWGS for gene type",
"50% of CRE produce\ncarbapenemase;\nKPC dominant in USA;\nNDM dominant in\nS. Asia/Africa;\nMortality 40-50%\nin bloodstream infection"],
# ── AmpC ──
["AmpC β-Lactamase\n(Inducible/\nChromosomal)",
"SPACE organisms:\nSerratia, Pseudomonas,\nAcinetobacter,\nCitrobacter, Enterobacter\n(+ Morganella, Hafnia)",
"Inducible chromosomal\nor plasmid AmpC;\ninduced by 3rd-gen\ncephalosporins →\nhydrolyses them",
"ampC gene\n(chromosomal);\nplasmid AmpC:\nblaCMY, blaDHA,\nblaFOX, blaACT",
"All penicillins;\nAll cephalosporins\n1st–3rd gen;\nClavulanate combinations;\n(avoid even if in vitro\nsusceptible to 3GC)",
"Cefepime (4th gen) if\nMIC ≤2 μg/mL;\nCarbapenem if\nMIC ≥4 μg/mL;\nFluoroquinolones;\nPiperacillin-tazobactam\n(limited evidence)",
"No reliable phenotypic\ntest for inducible AmpC;\nWatch for MIC creep;\nMolecular PCR",
"3rd-gen cephalosporin\nmay test 'susceptible'\nbut fail clinically;\nCo-production of ESBL\ncommon; use 4th-gen or\ncarbapenem empirically"],
# ── MDR Pseudomonas ──
["MDR Pseudomonas\naeruginosa\n(Non-fermentative)",
"Pseudomonas aeruginosa\n(especially ICU,\nCF patients)",
"Multiple: porin loss (OprD),\nefflux pumps (MexAB-OprM),\nbeta-lactamases (IMP/VIM/NDM),\nAmpC upregulation,\nmodified PBPs",
"blaIMP, blaVIM,\nblaOXA-48;\nOprD mutation;\nMexAB-OprM, MexCD,\nMexXY efflux pumps",
"Ampicillin (intrinsic R);\nTMP-SMX (intrinsic R);\nAll early gen cephalosporins;\nErtapenem;\n1st/2nd gen FQ",
"Piperacillin-tazobactam;\nCeftazidime;\nCefepime;\nImipenem/Meropenem;\nCiprofloxacin;\nAmikacin;\nColistin (XDR strains);\nCeftolozane-tazobactam\n(MDR Pseudomonas)",
"Susceptibility testing\nmandatory;\nCombination therapy\nfor serious infections;\nPDD extended infusion",
"Intrinsic resistance to\nmany drug classes;\nAlways obtain cultures;\nConsult ID for MDR\nstrains; de-escalate\nbased on C&S"],
# ── CRAB ──
["CRAB\n(Carbapenem-Resistant\nAcinetobacter baumannii)",
"Acinetobacter baumannii\n(ICU, war wounds,\nhospital environment)",
"OXA-type carbapenemases\n(OXA-23, OXA-40, OXA-58);\nMBL (NDM, IMP, VIM);\nPorin loss;\nMultiple efflux pumps",
"blaOXA-23 (dominant);\nblaOXA-40,\nblaOXA-58;\nblaNDM (emerging)",
"ALL beta-lactams;\nFluoroquinolones;\nAminoglycosides;\nTMP-SMX;\n(pan-resistant strains\nexist)",
"Colistin/Polymyxin B\n(last resort);\nSulbactam (intrinsic\nactivity vs. Acinetobacter);\nTigecycline;\nMinocycline;\nCefiderocol (emerging);\nRifampicin (combination)",
"MIC testing essential;\nOXA carbapenemase PCR;\nSurface sampling\nfor outbreak tracing",
"Survives on dry\nsurfaces for weeks;\nHospital outbreak\npotential is high;\npan-drug resistance\n(PDR) reported;\nBundled infection\ncontrol critical"],
# ── MRSA ──
["MRSA\n(Methicillin-Resistant\nS. aureus)\n[GPC, not GNB]",
"Staphylococcus aureus\n(HA-MRSA: hospital;\nCA-MRSA: community;\nLA-MRSA: livestock)",
"mecA gene → altered PBP2a\n(PBP2') with low affinity for\nall beta-lactams;\nCA-MRSA also carries\nPVL (Panton-Valentine\nleukocidin) toxin",
"mecA, mecC\n(PBP2a);\nPVL (CA-MRSA);\nnuc gene (ID);\nSCCmec types\nI–XI",
"ALL beta-lactams\n(penicillins, cephalosporins,\ncarbapenems, monobactam);\nErythromycin;\nOften Clindamycin (V/R)",
"Vancomycin (DOC for\nbacteremia, endocarditis,\nmeningitis);\nLinezolid (skin, pneumonia);\nDaptomycin (bacteremia);\nTedizolid;\nTMP-SMX (skin, SSTI);\nDoxycycline (skin);\nCeftaroline (5th gen β-lac)",
"Oxacillin/cefoxitin\ndisk screen;\nPBP2a latex\nagglutination;\nMRSA PCR;\nMolecular typing\n(spa, MLST, WGS)",
"Vancomycin penetrates\npoorly into lung & bone;\nuse linezolid/daptomycin\nfor MRSA pneumonia;\nNasal screening detects\ncarriage (MRSA bundle);\nVRSA/VISA strains rare"],
# ── VRE ──
["VRE\n(Vancomycin-Resistant\nEnterococcus)\n[GPC, not GNB]",
"Enterococcus faecium\n(VanA/VanB);\nE. faecalis (VanB,\nless common;\nintrinsic low-level\nVanC: E. gallinarum)",
"Acquired van gene clusters\nmodify D-Ala-D-Ala terminus\nof peptidoglycan precursor\nto D-Ala-D-Lac (VanA,B)\nor D-Ala-D-Ser (VanC) →\nvancomycin cannot bind",
"vanA (high-level;\nR to vancomycin\n+ teicoplanin);\nvanB (variable;\nR to vancomycin,\nS to teicoplanin);\nvanC (intrinsic,\nlow-level)",
"Vancomycin;\nTeicoplanin (VanA);\nAmpicillin (E. faecium\nusually resistant);\nAll cephalosporins;\nAll carbapenems (MRSE)",
"Linezolid (DOC);\nDaptomycin;\nTedizolid;\nQ-D (Quinupristin-\ndalfopristin) – E. faecium\nonly;\nHigh-dose ampicillin\n(if MIC allows, E. faecalis)",
"Vancomycin MIC;\nVan gene PCR\n(vanA, vanB);\nVRE rectal swab\nscreening in ICU;\nEpidemic strain\ntyping (WGS)",
"Risk factors: prolonged\nhospitalisation, prior\nvancomycin, GI surgery;\nStrict contact\nprecautions;\nLinezolid resistance\ncan emerge on therapy;\nDaptomycin non-\nsusceptible strains exist"],
# ── Stenotrophomonas ──
["Intrinsic MDR:\nStenotrophomonas\nmaltophilia",
"Stenotrophomonas\nmaltophilia\n(ICU, CF, immunocomp.)",
"Intrinsic resistance to\ncarbapenems via\nL1 (MBL) + L2 (cephalosporinase);\nMultiple efflux pumps;\nOuter membrane impermeability",
"L1 MBL (blaL1);\nL2 cephalosporinase\n(blaL2);\nSmeABC, SmeDEF\nefflux pumps",
"ALL carbapenems\n(intrinsically resistant);\nAll penicillins;\nMost cephalosporins;\nAminoglycosides;\nMany FQ",
"TMP-SMX (DOC);\nLevofloxacin;\nMinocycline/Doxycycline;\nTigecycline;\nChloramphenicol;\nCeftazidime-avibactam\n(variable)",
"Disk diffusion or\nMIC (TMP-SMX);\nMolecular:\nblaL1, blaL2",
"Carbapenem therapy\ncan select for\nStenotrophomonas;\nConsider in patients\non prolonged carbapenem;\nCF patients: chronic\ncolonisation common"],
]
def build_overview_table(data):
all_rows = [OV_HDR]
cmd = [
("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#aaaaaa")),
("BACKGROUND",(0,0),(-1,0), GREY),
("VALIGN", (0,0),(-1,-1), "TOP"),
("ALIGN", (0,0),(-1,-1), "LEFT"),
("ALIGN", (0,0),(-1,0), "CENTER"),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 3),
("LINEBELOW", (0,0),(-1,0), 1.0, WHITE),
]
row_bgs = [
(PALE_BLUE, VLIGHT_BLUE), # ESBL
(PALE_RED, VLIGHT_RED), # CRE
(PALE_ORNG, VLIGHT_ORG), # AmpC
(PALE_PURP, VLIGHT_PRP), # Pseudomonas
(PALE_RED, VLIGHT_RED), # CRAB
(PALE_BLUE, VLIGHT_BLUE), # MRSA
(PALE_GREEN, VLIGHT_GRN), # VRE
(PALE_TEAL, VLIGHT_TEL), # Steno
]
for i, row_data in enumerate(data):
styled_row = []
for j, cell in enumerate(row_data):
if j == 0:
styled_row.append(Paragraph(f"<b>{cell}</b>",
sty("R0", fontSize=8, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=10)))
elif j in (4, 5): # resistant / active
styled_row.append(Paragraph(cell, MECH))
else:
styled_row.append(Paragraph(cell, TD))
ri = i + 1
bg0, bg1 = row_bgs[i % len(row_bgs)]
# col 0 gets distinctive dark bg
dark_cols = [
MID_BLUE, MID_RED, MID_ORNG, MID_PURP,
MID_RED, MID_BLUE, MID_GREEN, DARK_TEAL
]
cmd.append(("BACKGROUND", (0,ri),(0,ri), dark_cols[i % len(dark_cols)]))
cmd.append(("TEXTCOLOR", (0,ri),(0,ri), WHITE))
# Resistant column = pale red
cmd.append(("BACKGROUND", (4,ri),(4,ri), PALE_RED))
# Active drugs column = pale green
cmd.append(("BACKGROUND", (5,ri),(5,ri), PALE_GREEN))
# rest alternating
for c in [1,2,3,6,7]:
cmd.append(("BACKGROUND", (c,ri),(c,ri), bg0 if i%2==0 else bg1))
all_rows.append(styled_row)
cmd.append(("FONTSIZE", (0,1),(0,-1), 8))
ts = TableStyle(cmd)
t = Table(all_rows, colWidths=OV_CW, repeatRows=1)
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# PAGE 2 — DRUG-BY-DRUG COMPARISON MATRIX
# Rows = antibiotics, Cols = resistance phenotype
# ═══════════════════════════════════════════════════════════════════════════════
# Cols: Antibiotic | Class | ESBL-E.coli | CRE-Kpn | MDR-Psa | CRAB | MRSA | VRE | AmpC
MAT_CW = [75, 65, 28, 28, 28, 28, 28, 28, 28] # ~336mm
MAT_ORG_HDR = [
ph("ANTIBIOTIC"), ph("CLASS"),
ph("ESBL\nE. coli"), ph("CRE\nK. pneu."),
ph("MDR\nP. aeru."), ph("CRAB\nA. bau."),
ph("MRSA\nS. aur."), ph("VRE\nE. fae."),
ph("AmpC\nEnterob."),
]
# (drug, class, ESBL-Ec, CRE-Kp, MDR-Pa, CRAB, MRSA, VRE, AmpC)
MAT_DATA = [
# ── Penicillins ────────────────────────────────────────────────────────────
("Amoxicillin-Clavulanate", "Aminopenicillin+BLI", "R","R","R","R","R","R","R"),
("Piperacillin-Tazobactam", "Ureidopenicillin+BLI", "V*","R","V","R","R","R","V*"),
("Ampicillin-Sulbactam", "Aminopenicillin+BLI", "R","R","R","V*","R","R","R"),
# ── Cephalosporins ────────────────────────────────────────────────────────
("Cefazolin (1G)", "1st Gen Cephalosporin", "R","R","R","R","R","R","R"),
("Cefuroxime (2G)", "2nd Gen Cephalosporin", "R","R","R","R","R","R","R"),
("Ceftriaxone (3G)", "3rd Gen Cephalosporin", "R","R","R","R","R","R","R"),
("Ceftazidime (3G anti-Psa)","3rd Gen Cephalosporin", "R","R","V","R","R","R","R"),
("Cefepime (4G)", "4th Gen Cephalosporin", "V*","R","V","R","R","R","V*"),
("Ceftaroline (5G)", "5th Gen Cephalosporin\n(anti-MRSA)", "V","R","R","R","S","R","V"),
("Ceftazidime-Avibactam", "3GC + BLI (non-MBL)", "S","S*","S","V","R","R","S"),
("Ceftolozane-Tazobactam", "3GC + BLI (Pseudo)", "S","R","S","R","R","R","S"),
("Cefiderocol", "Siderophore Cephalosporin","S","S","S","S","R","R","S"),
# ── Carbapenems ──────────────────────────────────────────────────────────
("Ertapenem", "Carbapenem (no Psa)", "S","R","R","R","R","R","S"),
("Meropenem", "Carbapenem", "S","V*","V","R","R","R","S"),
("Imipenem-Cilastatin", "Carbapenem", "S","V*","V","R","R","R","S"),
("Meropenem-Vaborbactam", "Carbapenem+BLI (KPC)", "S","S*","V","R","R","R","S"),
("Imip-Cilastatin-Relebact.","Carbapenem+BLI (KPC)", "S","S*","S","R","R","R","S"),
("Aztreonam-Avibactam", "Monobactam+BLI (MBL)", "S","S*","V","R","R","R","S"),
# ── Glycopeptides ─────────────────────────────────────────────────────────
("Vancomycin", "Glycopeptide", "R","R","R","R","S","R","R"),
("Teicoplanin", "Glycopeptide", "R","R","R","R","S","V*","R"),
# ── Lipopeptide / Oxazolidinone ──────────────────────────────────────────
("Daptomycin", "Lipopeptide", "R","R","R","R","S","S","R"),
("Linezolid", "Oxazolidinone", "R","R","R","R","S","S","R"),
("Tedizolid", "Oxazolidinone (2G)", "R","R","R","R","S","S","R"),
# ── Aminoglycosides ───────────────────────────────────────────────────────
("Gentamicin", "Aminoglycoside", "V","V","V","V","R","V*","V"),
("Amikacin", "Aminoglycoside", "V","V","S","V","R","V*","V"),
# ── Fluoroquinolones ──────────────────────────────────────────────────────
("Ciprofloxacin", "Fluoroquinolone", "V","V","V","V","R","V","V"),
("Levofloxacin", "Respiratory FQ", "V","V","V","V","R","V","V"),
# ── Tetracyclines ─────────────────────────────────────────────────────────
("Doxycycline", "Tetracycline", "V","V","R","V","S*","V","V"),
("Tigecycline", "Glycylcycline", "S","S","R","S","S","S","S"),
("Minocycline", "Tetracycline", "V","V","R","S","S","V","V"),
# ── Folate inhibitors ─────────────────────────────────────────────────────
("TMP-SMX", "Sulfonamide Combo", "V","V","R","R","V*","R","V"),
# ── Polymyxins ────────────────────────────────────────────────────────────
("Colistin / Polymyxin B", "Polymyxin", "S","S*","S","S","R","R","S"),
# ── Misc ──────────────────────────────────────────────────────────────────
("Nitrofurantoin", "Nitrofuran (UTI only)", "S","V","R","R","V","V","S"),
("Fosfomycin", "Phosphonic acid", "S","V","V","R","S","V","S"),
("Rifampicin", "Rifamycin (adjunct)", "R","R","R","R","S","V","R"),
("Chloramphenicol", "Amphenicol", "V","V","R","V","V","V","V"),
]
def build_matrix(data):
# Determine row count (cols for A3 landscape = up to ~520mm usable with narrow cols)
# We'll split into two halves for readability
all_rows = [MAT_ORG_HDR]
cmd = [
("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#aaaaaa")),
("BACKGROUND",(0,0),(-1,0), GREY),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("ALIGN", (0,1),(1,-1), "LEFT"),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 3),
("LINEBELOW", (0,0),(-1,0), 1.0, WHITE),
("FONTNAME", (0,1),(1,-1), "Helvetica"),
("FONTSIZE", (0,1),(1,-1), 7.5),
]
# Group separators (by drug class)
sep_indices_after = [2, 11, 17, 22, 25, 27, 30, 31, 34] # row indices (0-based data)
for i, (drug, cls, *sus_vals) in enumerate(data):
ri = i + 1
row = [p(drug), p(cls)]
for j, val in enumerate(sus_vals):
cell_p, cell_bg = sc_cell(val)
row.append(cell_p)
cmd.append(("BACKGROUND", (j+2, ri), (j+2, ri), cell_bg))
row_bg = LGREY if i % 2 == 0 else WHITE
cmd.append(("BACKGROUND", (0,ri),(1,ri), row_bg))
all_rows.append(row)
if i in sep_indices_after:
cmd.append(("LINEBELOW", (0,ri),(-1,ri), 1.0, colors.HexColor("#888888")))
ts = TableStyle(cmd)
t = Table(all_rows, colWidths=MAT_CW, repeatRows=1)
t.setStyle(ts)
return t
# ═══════════════════════════════════════════════════════════════════════════════
# LEGEND + FOOTNOTES
# ═══════════════════════════════════════════════════════════════════════════════
LEGEND_DATA = [
(S_CLR, "S = Susceptible – drug is effective"),
(R_CLR, "R = Resistant – drug not effective"),
(V_CLR, "V = Variable – depends on local resistance/MIC testing"),
(I_CLR, "I = Intermediate susceptibility"),
(N_CLR, "- = Not applicable"),
]
def legend_box(items):
cells = []
for col, label in items:
box = Table([[""]], colWidths=[10], rowHeights=[10])
box.setStyle(TableStyle([("BACKGROUND",(0,0),(0,0),col),
("GRID",(0,0),(0,0),0.5,colors.grey)]))
cells.extend([box, Paragraph(f" {label} ", BOX)])
lt = Table([cells], colWidths=([12,115]*5))
lt.setStyle(TableStyle([("VALIGN",(0,0),(-1,-1),"MIDDLE"),
("TOPPADDING",(0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3)]))
return lt
NOTES = [
"S* = Susceptible with caveats (e.g., ESBL + pip-tazo: inferior to carbapenem per RCT; CRE + meropenem: only if MIC ≤1 and no carbapenemase gene; MRSA + doxycycline/TMP-SMX: skin infections only).",
"V* = Variable with important caveats (e.g., Gentamicin/Amikacin used synergistically for enterococcal endocarditis only; Piperacillin-tazobactam for ESBL: unreliable, use carbapenem for serious infections).",
"CRE treatment: drug of choice depends on carbapenemase type — KPC→Ceftazidime-avibactam or Meropenem-vaborbactam; MBL (NDM/VIM/IMP)→Aztreonam-avibactam or Cefiderocol; OXA-48→Ceftazidime-avibactam.",
"CRAB (Carbapenem-resistant A. baumannii): Sulbactam has intrinsic activity against Acinetobacter spp.; consider sulbactam-based combinations or Cefiderocol for severe infections.",
"BLI = Beta-Lactamase Inhibitor. GPC = Gram-Positive Cocci (MRSA, VRE included for completeness). GNB = Gram-Negative Bacilli.",
"Sources: The Harriet Lane Handbook 23e; Red Book 2021; Goldman-Cecil Medicine; Harrison's Principles of Internal Medicine 22e; Medical Microbiology 9e.",
]
# ═══════════════════════════════════════════════════════════════════════════════
# ASSEMBLE DOCUMENT
# ═══════════════════════════════════════════════════════════════════════════════
total_w = sum(OV_CW)
def make_title(text, sub, col=NAVY):
tt = Table([
[Paragraph(f"<b>{text}</b>",
sty("T1", fontSize=17, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER))],
[Paragraph(sub,
sty("T2", fontSize=9, fontName="Helvetica",
textColor=colors.HexColor("#aaccee"),
alignment=TA_CENTER))],
], colWidths=[total_w])
tt.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,1), col),
("TOPPADDING", (0,0),(0,1), 5),
("BOTTOMPADDING", (0,0),(0,1), 5),
("LEFTPADDING", (0,0),(0,1), 8),
]))
return tt
def sec_banner(text, bg):
tt = Table([[Paragraph(f" <b>{text}</b>",
sty("SB", fontSize=9.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_LEFT, leading=12))]],
colWidths=[total_w])
tt.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), bg),
("TOPPADDING", (0,0),(0,0), 4),
("BOTTOMPADDING", (0,0),(0,0), 4),
("LEFTPADDING", (0,0),(0,0), 8),
]))
return tt
elements = []
# ── PAGE 1: Mechanism table ───────────────────────────────────────────────────
elements.append(make_title(
"ANTIBIOTIC RESISTANCE PATTERNS IN COMMON PATHOGENS",
"ESBL · CRE · AmpC · MDR-Pseudomonas · CRAB · MRSA · VRE — Mechanisms, Genes, Treatment & Clinical Notes",
NAVY))
elements.append(Spacer(1, 5))
elements.append(sec_banner(
"SECTION 1 — RESISTANCE MECHANISMS: Organisms | Mechanism | Genes | Resistant-to | Active Drugs | Detection | Notes",
DARK_BLUE))
elements.append(Spacer(1, 4))
elements.append(build_overview_table(OV_DATA))
elements.append(Spacer(1, 6))
elements.append(legend_box(LEGEND_DATA))
elements.append(Spacer(1, 4))
for n in NOTES[:3]:
elements.append(Paragraph(n, NOTE))
elements.append(Spacer(1,2))
# ── PAGE 2: Matrix ────────────────────────────────────────────────────────────
from reportlab.platypus import PageBreak
elements.append(PageBreak())
mat_total_w = sum(MAT_CW)
mat_title = Table([
[Paragraph("<b>SECTION 2 — DRUG × PATHOGEN SUSCEPTIBILITY MATRIX</b>",
sty("MT", fontSize=14, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER))],
[Paragraph("36 Antibiotics × 7 Resistance Phenotypes · Colour-coded Susceptibility",
sty("MS", fontSize=9, fontName="Helvetica",
textColor=colors.HexColor("#aaccee"), alignment=TA_CENTER))],
], colWidths=[mat_total_w])
mat_title.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,1), NAVY),
("TOPPADDING",(0,0),(0,1),5),("BOTTOMPADDING",(0,0),(0,1),5),
("LEFTPADDING",(0,0),(0,1),8),
]))
elements.append(mat_title)
elements.append(Spacer(1,5))
elements.append(build_matrix(MAT_DATA))
elements.append(Spacer(1,6))
elements.append(legend_box(LEGEND_DATA))
elements.append(Spacer(1,4))
for n in NOTES[3:]:
elements.append(Paragraph(n, NOTE))
elements.append(Spacer(1,2))
doc.build(elements)
print(f"PDF saved: {OUTPUT}")
cd /home/daytona/workspace/gpc-gnb-chart && python resistance_patterns.py 2>&1
ls -lh /home/daytona/workspace/gpc-gnb-chart/Antibiotic_Resistance_Patterns.pdf
Antibiotic Resistance Patterns
PDF Document · PDF
| Phenotype | Key Organisms | Mechanism | Genes |
|---|---|---|---|
| ESBL | E. coli, K. pneumoniae, P. mirabilis | Plasmid β-lactamases hydrolyse cephalosporins | blaTEM, blaSHV, blaCTX-M |
| CRE | K. pneumoniae (KPC), E. coli, Enterobacter | Carbapenemase production OR porin loss + AmpC | blaKPC, blaNDM, blaVIM, blaOXA-48 |
| AmpC | SPACE organisms (Serratia, Pseudomonas, Acinetobacter, Citrobacter, Enterobacter) | Inducible chromosomal AmpC; 3rd-gen cephalosporins induce it | ampC, blaCMY, blaDHA |
| MDR-Pseudomonas | P. aeruginosa (ICU/CF) | Porin loss + efflux pumps + beta-lactamases | OprD, MexAB-OprM, blaVIM/IMP |
| CRAB | A. baumannii | OXA carbapenemases + efflux + impermeability | blaOXA-23, blaNDM |
| MRSA | S. aureus (HA/CA/LA) | mecA → altered PBP2a (low β-lactam affinity) | mecA, PVL toxin (CA-MRSA) |
| VRE | E. faecium (VanA/B) | van genes modify peptidoglycan terminus | vanA (high-level), vanB (variable) |
| Stenotrophomonas | S. maltophilia | Intrinsic MBL (L1) + cephalosporinase (L2) + efflux | blaL1, blaL2 |
gnb lf and nlf seperate data
~/gpc-gnb-chart/gnb_lf_nlf.py
from reportlab.lib.pagesizes import A3, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/home/daytona/workspace/gpc-gnb-chart/GNB_LF_vs_NLF.pdf"
# ── Palette ───────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0d2b45")
# LF = pink/red theme (pink colonies on MacConkey)
LF_DARK = colors.HexColor("#7b1d38")
LF_MID = colors.HexColor("#c0392b")
LF_LIGHT = colors.HexColor("#fadbd8")
LF_PALE = colors.HexColor("#fef5f4")
LF_ALT = colors.HexColor("#fdecea")
# NLF = colourless/white on MacConkey → use teal/grey-blue
NLF_DARK = colors.HexColor("#0e4d5c")
NLF_MID = colors.HexColor("#117a8b")
NLF_LIGHT = colors.HexColor("#d1ecf1")
NLF_PALE = colors.HexColor("#f0fafc")
NLF_ALT = colors.HexColor("#e4f4f8")
# Sub-group headers
SUB_PINK = colors.HexColor("#922b21")
SUB_TEAL = colors.HexColor("#0e6655")
SUB_PURPLE = colors.HexColor("#4a235a")
SUB_OLIVE = colors.HexColor("#4d4011")
SUB_NAVY2 = colors.HexColor("#1a3a5c")
GREY = colors.HexColor("#2c3e50")
LGREY = colors.HexColor("#f2f3f4")
WHITE = colors.white
BLACK = colors.black
def sty(name, **kw):
return ParagraphStyle(name, parent=getSampleStyleSheet()["Normal"], **kw)
TH = sty("TH", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER, leading=10)
THL = sty("THL", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_LEFT, leading=10)
TD = sty("TD", fontSize=7.5, fontName="Helvetica", textColor=BLACK, alignment=TA_LEFT, leading=9)
TDI = sty("TDI", fontSize=7.5, fontName="Helvetica-Oblique",textColor=colors.HexColor("#1a3a5c"), alignment=TA_LEFT, leading=9)
TDC = sty("TDC", fontSize=7.5, fontName="Helvetica", textColor=BLACK, alignment=TA_CENTER, leading=9)
TDB = sty("TDB", fontSize=7.5, fontName="Helvetica-Bold", textColor=BLACK, alignment=TA_LEFT, leading=9)
NOTE = sty("NOTE",fontSize=7, fontName="Helvetica-Oblique",textColor=colors.HexColor("#555"), alignment=TA_LEFT, leading=9)
def ph(t): return Paragraph(t, TH)
def p(t): return Paragraph(t, TD)
def pi(t): return Paragraph(f"<i>{t}</i>", TDI)
def pb(t): return Paragraph(f"<b>{t}</b>", TDB)
def pc(t): return Paragraph(t, TDC)
doc = SimpleDocTemplate(
OUTPUT,
pagesize=landscape(A3),
leftMargin=1.0*cm, rightMargin=1.0*cm,
topMargin=1.2*cm, bottomMargin=1.2*cm,
title="GNB: Lactose Fermenters vs Non-Lactose Fermenters",
author="Orris Medical Reference"
)
# ─────────────────────────────────────────────────────────────────────────────
# COLUMN DEFINITIONS
# Cols: No. | Genus | Species | MacConkey | O2 Req | Oxidase | Other Tests |
# Key Disease | Treatment hints
# ─────────────────────────────────────────────────────────────────────────────
CW = [10, 38, 60, 38, 32, 28, 62, 88, 80] # total ~436mm
HDR_ROW = [ph("#"), ph("GENUS"), ph("SPECIES"),
ph("MacConkey\nColony"), ph("O₂\nReq."),
ph("Oxidase"), ph("KEY TESTS /\nDISTINGUISHING FEATURES"),
ph("KEY DISEASE"), ph("TREATMENT HINTS")]
# ─────────────────────────────────────────────────────────────────────────────
# DATA: (genus, species, macconkey, o2, oxidase, tests, disease, rx)
# ─────────────────────────────────────────────────────────────────────────────
# ══ LACTOSE FERMENTERS ═══════════════════════════════════════════════════════
# MacConkey: PINK to PINK-PURPLE colonies (acid production from lactose)
LF_SUBGROUPS = [
# (subgroup_label, subgroup_bg, rows_list)
(
"▶ FAST LACTOSE FERMENTERS (Pink/Pink-Purple colonies on MacConkey within 24h)",
LF_DARK,
[
("Escherichia", "E. coli",
"Pink-Red\n(flat, dry)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Indole+;\nIMViC: ++-−;\nTSI: A/A, gas+;\nH₂S−",
"UTI (most common cause);\nNeonatal meningitis;\nTraverler's diarrhea (ETEC);\nBloody diarrhea + HUS (O157:H7);\nBacteremia/Sepsis",
"UTI: TMP-SMX, FQ, nitrofurantoin;\nSerious/ESBL: Carbapenem;\nO157:H7: supportive only\n(antibiotics worsen HUS)"),
("Klebsiella", "K. pneumoniae",
"Pink, mucoid\n(large, viscous)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+;\nIMViC: −−++;\nMucoid capsule;\nVoges-Proskauer+;\nTSI: A/A, gas+, H₂S−",
"Hospital pneumonia\n('currant jelly' sputum);\nUTI, liver abscess;\nNeonatal meningitis;\nSepsis (ESBL/CRKP)",
"Non-MDR: Cephalosporins, FQ;\nESBL: Carbapenem;\nCRKP: Ceftazidime-avibactam;\nMeropenem-vaborbactam"),
("Klebsiella", "K. oxytoca",
"Pink, mucoid", "Fac. Anaerobe",
"Negative",
"Oxidase−; Indole+;\nUrease+; ONPG+;\nVP+",
"UTI; antibiotic-associated\nhemorrhagic colitis;\nbacteremia",
"Similar to K. pneumoniae;\nESBL strains: Carbapenem"),
("Enterobacter", "E. cloacae",
"Pink-Purple\n(mucoid)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Motile;\nVP+; Citrate+;\nAmpC β-lactamase;\nTSI: A/A, gas+",
"Nosocomial pneumonia;\nUTI; wound infections;\nbacteremia;\nMeningitis (neonates)",
"Cefepime (if MIC ≤2);\nCarbapenem;\nFluoroquinolones;\nAvoid 3GC (AmpC)"),
("Enterobacter", "E. aerogenes\n(K. aerogenes)",
"Pink, mucoid", "Fac. Anaerobe",
"Negative",
"Oxidase−; VP+;\nMotile; Urease V;\nAmpC β-lactamase",
"Nosocomial infections;\nUTI; pneumonia;\nbacteremia",
"Same as E. cloacae;\nAvoid 3GC"),
("Serratia", "S. marcescens",
"Pink/Red\n(red pigment)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Gelatinase+;\nDNase+; Lipase+;\nRed pigment (prodigiosin)\non some strains;\nSlate white if non-pigmented",
"Hospital pneumonia;\nUTI; wound infections;\nEndocarditis (IV drug\nusers); keratitis;\nbacteremia",
"TMP-SMX, FQ;\nCarbapenem for MDR;\nAvoid aminoglycosides\n(intrinsic resistance)"),
("Citrobacter", "C. freundii",
"Pink\n(late fermenter)", "Fac. Anaerobe",
"Negative",
"Oxidase−; H₂S+;\nCitrate+; Indole−;\nAmpC + ESBL producer;\nTSI: A/A or K/A, H₂S+",
"UTI; wound infections;\nneonatal meningitis;\nbrain abscess (neonates);\nbacteremia",
"Carbapenem preferred;\nAvoid 3GC (AmpC);\nFQ if susceptible"),
("Citrobacter", "C. koseri",
"Pink", "Fac. Anaerobe",
"Negative",
"Oxidase−; Indole+;\nH₂S−; Citrate+;\nURBAN: neonatal\nbrain abscess marker",
"Neonatal brain abscess;\nmeningitis; UTI",
"Carbapenem;\nExtended infusion\nfor serious infections"),
]
),
(
"▶ DELAYED / SLOW LACTOSE FERMENTERS (Pale pink after 24h; or positive ONPG test)",
colors.HexColor("#5d1a00"),
[
("Hafnia", "H. alvei",
"Pale pink\n(delayed)", "Fac. Anaerobe",
"Negative",
"Oxidase−; VP+ at 22°C;\nONPG+; Indole−;\nCitrate−",
"Rare opportunist;\ngastroenteritis;\nbacteremia in\nimmunocompromised",
"FQ; TMP-SMX;\nCarbapenem for serious"),
("Cronobacter", "C. sakazakii\n(Enterobacter s.)",
"Yellow-pink\n(mucoid)", "Fac. Anaerobe",
"Negative",
"Yellow pigment;\nONPG+; VP+;\nMotile",
"Neonatal meningitis\nand sepsis (powdered\nformula contamination);\nBrain abscess",
"Carbapenem;\nCiprofloxacin;\nHigh mortality in neonates"),
]
),
]
# ══ NON-LACTOSE FERMENTERS ═══════════════════════════════════════════════════
# MacConkey: COLOURLESS / PALE colonies (no acid from lactose)
NLF_SUBGROUPS = [
(
"▶ NLF — ENTEROBACTERALES (Pale/Colourless on MacConkey; Oxidase−; Fermentative)",
NLF_DARK,
[
("Salmonella", "S. typhi",
"Colourless\n(pale, H₂S+)", "Fac. Anaerobe",
"Negative",
"Oxidase−; H₂S+ on TSI;\nLactose−; Motile;\nTSI: K/A, H₂S+;\nIMViC: −−−+;\nWidal test (serology)",
"Typhoid fever:\nfever >38.5°C ≥3 days,\nrose spots, relative\nbradycardia, splenomegaly,\nconstipation > diarrhea",
"Ceftriaxone (DOC);\nAzithromycin (oral);\nFluoroquinolone (check\nresistance);\nNEVER aminoglycosides"),
("Salmonella", "S. enteritidis /\ntyphimurium\n(non-typhoidal)",
"Colourless\n(H₂S+)", "Fac. Anaerobe",
"Negative",
"Oxidase−; H₂S+;\nMotile; Lactose−;\nTSI: K/A, H₂S+",
"Foodborne gastroenteritis\n(self-limiting);\nbacteremia in sickle\ncell, HIV patients",
"Gastro: supportive\n(antibiotics may\nprolong carrier state);\nBacteremia: Ceftriaxone"),
("Shigella", "S. dysenteriae\n(most severe)",
"Colourless", "Fac. Anaerobe",
"Negative",
"Oxidase−; H₂S−;\nNon-motile;\nLactose−; Indole V;\nTSI: K/A, no gas;\nShiga toxin (type 1)",
"Bloody dysentery;\nShiga toxin → HUS;\nhigh mortality without Rx;\nfecal-oral spread",
"Azithromycin;\nCeftriaxone;\nFluoroquinolone (check\nresistance);\nAmpicillin (if sensitive)"),
("Shigella", "S. flexneri / sonnei /\nboydii",
"Colourless", "Fac. Anaerobe",
"Negative",
"Oxidase−; Non-motile;\nH₂S−; Gas−;\nNo toxin (flexneri/sonnei)",
"Bacillary dysentery\n(flexneri, boydii);\nMild watery→bloody\ndiarrhea (sonnei)",
"Azithromycin;\nCiprofloxacin;\nCeftriaxone"),
("Proteus", "P. mirabilis",
"Colourless\n(swarming haze)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+++;\nSwarming motility;\nIndole−; H₂S+;\nTSI: K/A, H₂S+;\nPhenylpyruvic acid+",
"UTI (2nd most common);\nstaghorn calculi\n(urease → struvite);\nwound infections",
"Ampicillin-sulbactam;\nCephalosporins;\nTMP-SMX; FQ;\nCarbapenem if MDR"),
("Proteus", "P. vulgaris",
"Colourless\n(swarming)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+;\nIndole+; H₂S+;\nSwarming less\nprominent",
"UTI; wound infections;\nbacteremia",
"Avoid ampicillin\n(intrinsic resistant);\nCephalosporins; FQ;\nCarbapenem for MDR"),
("Yersinia", "Y. pestis",
"Colourless\n(small, grey)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease−;\nBipolar 'safety-pin'\nstaining (Wayson);\nGrows at 28°C;\nNon-motile at 37°C;\nFragilin antigen F1",
"PLAGUE:\nBubonic (bubo);\nPneumonic (droplet);\nSepticemic;\nBioterrorism category A",
"Streptomycin (DOC);\nGentamicin;\nDoxycycline;\nCiprofloxacin"),
("Yersinia", "Y. enterocolitica",
"Pale pink\n(delayed)", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+;\nMotile at 22°C;\nVP+ at 22°C;\nCold enrichment\n(4°C) for isolation;\nTSI: K/A or A/A",
"Enterocolitis;\nmesenteric adenitis\n(mimics appendicitis);\nreactive arthritis;\nbacteria in cold meats/\npork products",
"Mild: self-limiting;\nSevere: TMP-SMX,\nciprofloxacin,\ndoxycycline;\nSepsis: ceftriaxone"),
("Morganella", "M. morganii",
"Colourless", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+;\nIndole+; H₂S−;\nPhenylalanine\ndeaminase+;\nMotile",
"UTI; wound infections;\nneonatal meningitis;\nnecrotizing fasciitis;\nbacteremia",
"TMP-SMX; FQ;\nIntrinsic resistant to\npenicillin + colistin;\nCarbapenem for MDR"),
("Providencia", "P. stuartii /\nP. rettgeri",
"Colourless", "Fac. Anaerobe",
"Negative",
"Oxidase−; Urease+;\nMotile; Indole+;\nPhenylalanine\ndeaminase+",
"UTI in long-term\ncatheterised patients;\nwound infections;\nbacteremia;\nburn wound infections",
"FQ; Carbapenem;\nIntrinsically resistant\nto many agents;\nAmikacin may work"),
]
),
(
"▶ NLF — NON-FERMENTATIVE GNB (Pale/Colourless on MacConkey; variable Oxidase; Oxidative or non-reactive)",
NLF_MID,
[
("Pseudomonas", "P. aeruginosa",
"Colourless/Green\n(blue-green pigment,\ngrape-like odour)", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Pyocyanin\n(blue-green pigment);\nPyoverdin (fluorescent);\nNon-fermenter;\nGlucose: oxidative;\nTSI: K/K (no rxn);\nOdour: grape-like",
"Burn/wound infections;\nVAP (ICU, ventilator);\nCF chronic lung disease;\nHot-tub folliculitis;\nExternal otitis\n('swimmer's ear');\nEcthyma gangrenosum\n(black skin lesions)",
"Anti-pseudomonal\nβ-lactam (pip-tazo,\nceftazidime, cefepime,\nceftolozane-tazo);\n+ aminoglycoside for\nserious infections;\nColistin for XDR"),
("Pseudomonas", "P. fluorescens /\nP. putida",
"Colourless\n(fluorescent)", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Pyoverdin\n(fluorescent);\nNon-fermenter;\nGrows at 4°C",
"Rare; blood/IV product\ncontamination;\nbacteremia in\nimmunocompromised",
"Pip-tazo; FQ;\nCarbapenem"),
("Acinetobacter", "A. baumannii",
"Colourless /\nPale grey\n(mucoid)", "Strict Aerobe",
"NEGATIVE",
"Oxidase−; Coccobacillus\n(short rods → cocci\nafter 48h);\nNon-motile;\nNon-fermenter;\nGlucose: oxidative\nor non-reactive;\nGrows on MacConkey",
"VAP (ICU);\nWound infections\n(war wounds);\nbacteremia; UTI;\nSurvives on dry\nsurfaces 3+ weeks;\nHospital outbreaks",
"Sulbactam-based\n(Amp-sulbactam);\nColistin/Polymyxin B;\nTigecycline;\nCefiderocol;\nMinocycline"),
("Stenotrophomonas", "S. maltophilia",
"Pale yellow\n(lavender odour)", "Strict Aerobe",
"POSITIVE",
"Oxidase+/weak;\nDNase+; Lipase+;\nOxidative (not\nfermentative);\nLavender-green odour;\nResistant to\ncarbapenems",
"VAP in ICU;\nPneumonia in CF;\nbacteremia in\nimmunocompromised;\nBronchiectasis",
"TMP-SMX (DOC);\nLevofloxacin;\nMinocycline;\nTigecycline;\nCarbapenem: RESISTANT"),
("Burkholderia", "B. cepacia complex\n(Bcc)",
"Pale pink /\nColourless", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Motile;\nOxidative; Lysine+;\nONPG+; Oxidase+;\nResistant to\npolymyxins",
"CF lung colonisation\n(poor prognosis);\nHospital infections;\nbacteremia;\nPneumonia",
"TMP-SMX;\nMeropenem;\nCeftazidime;\nChloramphenicol;\nIntrinsic polymyxin R"),
("Burkholderia", "B. pseudomallei",
"Colourless\n(wrinkled colony)", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Bipolar\nstaining ('safety pin');\nOxidative; Motile;\nArginine+; Grows\n41–42°C;\nBiohazard L3",
"MELIOIDOSIS:\npneumonia, sepsis,\nliver/spleen abscesses;\nendemic SE Asia,\nN. Australia;\nmimics TB",
"IV: Ceftazidime or\nMeropenem ×14 days;\nEradication: TMP-SMX\n×3–6 months"),
]
),
(
"▶ NLF — FASTIDIOUS & CURVED GNB (Require special media; slow/special growth)",
SUB_PURPLE,
[
("Haemophilus", "H. influenzae",
"Does not grow on\nMacConkey\n(requires X+V)", "Fac. Anaerobe",
"POSITIVE",
"Requires hemin (X factor)\n+ NAD (V factor);\nSatellitism around\nS. aureus on blood agar;\nCapsule type b = PRP;\nOxidase+",
"Type b: meningitis,\nepiglottitis, sepsis;\nnon-typeable:\notitis media, sinusitis,\nCOPD exacerbation;\npneumonia",
"Type b meningitis:\nCeftriaxone;\nMild: Amoxicillin-\nclavulanate;\nβ-lactamase strains:\ncephalosporins"),
("Legionella", "L. pneumophila",
"Does not grow on\nMacConkey\n(BCYE agar)", "Strict Aerobe",
"POSITIVE\n(weak)",
"Requires L-cysteine;\nBCYE agar only;\nUrinary antigen test\n(serogroup 1);\nSilver stain in tissue;\nDIF smear",
"Legionnaire's disease\n(severe pneumonia);\nPontiac fever\n(self-limiting)\n(flu-like, no pneumonia);\nSource: water tanks,\nAC systems",
"Azithromycin (DOC);\nLevofloxacin;\nDoxycycline;\nDuration: 7–10 days\n(21 days if immuno-)"),
("Bordetella", "B. pertussis",
"Does not grow on\nMacConkey\n(Bordet-Gengou)", "Strict Aerobe",
"POSITIVE",
"Bordet-Gengou agar;\nRegan-Lowe medium;\nDFA or PCR\n(gold standard);\nLymphocytosis++\n(pertussis toxin);\nFilamentous\nhemagglutinin (FHA)",
"Whooping cough:\nCatarrhal → Paroxysmal\n(whoop + apnoea) →\nConvalescent;\nMost severe in infants;\nVaccine-preventable",
"Azithromycin (DOC);\nClarithromycin;\nTMP-SMX (alternative);\nTreat close contacts;\nVaccine: DTaP/Tdap"),
("Campylobacter", "C. jejuni",
"Does not grow on\nstandard MacConkey\n(CCDA/Skirrow)", "Microaerophile\n(5% O₂)",
"POSITIVE",
"Skirrow or CCDA\nmedium; 42°C;\nComma/S-shaped rods;\nDarting motility;\nOxidase+; Hippurate+\n(distinguishes from\nC. coli)",
"Most common bacterial\ndiarrhoea worldwide;\nbloody diarrhoea;\npost-infectious GBS\n(Guillain-Barré);\nReactive arthritis;\nZoonosis (poultry)",
"Mild: self-limiting;\nSevere: Azithromycin;\nAlternative: FQ\n(but resistance rising);\nNEVER\ncephalosporins"),
("Helicobacter", "H. pylori",
"Does not grow on\nMacConkey\n(Skirrow/CA)", "Microaerophile\n(5% O₂)",
"POSITIVE",
"Urease+++ (CLO test);\nOxidase+; Catalase+;\nSpiral rods;\nGrows at 37°C;\nUrea breath test;\nStool antigen test;\nHistology (Giemsa)",
"Peptic ulcer disease\n(gastric + duodenal);\nGastric adenocarcinoma;\nMALT lymphoma;\nFunctional dyspepsia;\nPresent in ~50% world\npopulation",
"Triple therapy:\nPPI + Clarithromycin +\nAmoxicillin ×7–14d;\nQuadruple (bismuth):\nPPI+Bismuth+Metronidazole\n+Tetracycline;\nLevo-based for resistant"),
("Vibrio", "V. cholerae\n(O1 / O139)",
"Pale/colourless on\nMacConkey;\nGrows on TCBS\n(yellow colonies)", "Fac. Anaerobe",
"POSITIVE",
"Oxidase+; Curved rod;\nRapid darting motility;\nTCBS agar (yellow\ncolonies = cholera);\nO1 antigen: El Tor\n(El Tor biotype\nnow dominant);\nCholeragen toxin",
"CHOLERA:\nRice-water diarrhoea;\nmassive fluid loss\n(up to 20 L/day);\nHypovolaemic shock;\nmortality without Rx",
"ORS/IV fluids (main Rx);\nDoxycycline;\nAzithromycin;\nSingle dose cipro"),
("Neisseria", "N. meningitidis",
"Does not grow\non MacConkey\n(chocolate agar)", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Gram-neg\ndiplococcus; Ferments\nglucose AND maltose\n(vs. N. gonorrhoeae);\nPolysaccharide capsule\nserogroups A,B,C,W,Y;\nCSF India ink−",
"Bacterial meningitis;\nWaterhouse-Friderichsen\nsyndrome (adrenal\nhaemorrhage, DIC);\nMeningococcaemia;\nPetechial/purpuric rash;\nHigh mortality without Rx",
"Ceftriaxone (DOC);\nPenicillin G (if sens.);\nChemoprophylaxis:\nRifampicin or\nciprofloxacin for\nclose contacts;\nVaccines: MenACWY,\nMenB"),
("Neisseria", "N. gonorrhoeae",
"Does not grow\non MacConkey\n(Thayer-Martin)", "Strict Aerobe",
"POSITIVE",
"Oxidase+; Gram-neg\ndiplococcus; Ferments\nglucose ONLY;\nRequires CO₂;\nThayer-Martin medium;\nIntracellular in PMNs\non Gram smear;\nNuclease+",
"Gonorrhoea (urethritis,\ncervicitis);\nPID; Fitz-Hugh-\nCurtis syndrome;\nSeptic arthritis\n(DGI); Neonatal\nophthalmia neonatorum",
"Ceftriaxone 500mg IM\n(dual Rx: +\nazithromycin if\nchlamydia not excluded);\nNo fluoroquinolones\n(widespread resistance)"),
]
),
]
# ── Build tables ──────────────────────────────────────────────────────────────
def make_title():
total_w = sum(CW)
tt = Table([
[Paragraph("<b>GRAM-NEGATIVE BACILLI (GNB)</b>",
sty("T1", fontSize=19, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER))],
[Paragraph("LACTOSE FERMENTERS (LF) ⟵ MacConkey Agar ⟶ NON-LACTOSE FERMENTERS (NLF)",
sty("T2", fontSize=10, fontName="Helvetica",
textColor=colors.HexColor("#aaccee"), alignment=TA_CENTER))],
[Paragraph("Complete Species Reference · Taxonomy · Colony Appearance · Key Tests · Disease · Treatment · Orris Medical Reference 2026",
sty("T3", fontSize=8, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#88aacc"), alignment=TA_CENTER))],
], colWidths=[total_w])
tt.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,2), NAVY),
("TOPPADDING", (0,0),(0,2), 5),
("BOTTOMPADDING",(0,0),(0,2), 5),
]))
return tt
def make_macckey_banner(lf=True):
total_w = sum(CW)
if lf:
text = "🔴 LACTOSE FERMENTERS (LF) — PINK to PINK-PURPLE colonies on MacConkey Agar (acid + bile precipitate = colour change)"
bg = LF_DARK
else:
text = "⬜ NON-LACTOSE FERMENTERS (NLF) — COLOURLESS / PALE colonies on MacConkey Agar (no acid from lactose)"
bg = NLF_DARK
tt = Table([[Paragraph(f" <b>{text}</b>",
sty("BN", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_LEFT, leading=12))]],
colWidths=[total_w])
tt.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,0), bg),
("TOPPADDING",(0,0),(0,0),5),("BOTTOMPADDING",(0,0),(0,0),5),
("LEFTPADDING",(0,0),(0,0),10),
]))
return tt
def make_subgroup_banner(label, bg):
total_w = sum(CW)
tt = Table([[Paragraph(f" <b>{label}</b>",
sty("SG", fontSize=8.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_LEFT, leading=11))]],
colWidths=[total_w])
tt.setStyle(TableStyle([
("BACKGROUND",(0,0),(0,0), bg),
("TOPPADDING",(0,0),(0,0),3),("BOTTOMPADDING",(0,0),(0,0),3),
("LEFTPADDING",(0,0),(0,0),10),
]))
return tt
def build_data_table(groups, row_offset=0):
"""Build one Table object for a list of subgroups."""
all_rows = [HDR_ROW]
cmd = [
("GRID", (0,0),(-1,-1), 0.3, colors.HexColor("#bbbbbb")),
("BACKGROUND",(0,0),(-1,0), GREY),
("VALIGN", (0,0),(-1,-1), "TOP"),
("ALIGN", (0,0),(-1,-1), "LEFT"),
("ALIGN", (0,0),(-1,0), "CENTER"),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 3),
("LINEBELOW",(0,0),(-1,0), 1.0, WHITE),
]
row_num = 0 # data counter (for numbering)
table_row_idx = 1 # 0 = header
for grp_label, grp_bg, rows in groups:
# Sub-group separator row
sep_row = [Paragraph(f"<b> {grp_label}</b>",
sty("SR", fontSize=8.5, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_LEFT, leading=11))]
sep_row += [p("")] * (len(CW) - 1)
all_rows.append(sep_row)
cmd.append(("SPAN", (0,table_row_idx),(-1,table_row_idx)))
cmd.append(("BACKGROUND", (0,table_row_idx),(-1,table_row_idx), grp_bg))
cmd.append(("LINEABOVE", (0,table_row_idx),(-1,table_row_idx), 1.0, colors.HexColor("#666")))
table_row_idx += 1
for row in rows:
genus, spp, macconkey, o2, oxidase, tests, disease, rx = row
tr = [
pc(str(row_offset + row_num + 1)),
pb(genus),
pi(spp),
p(macconkey),
pc(o2),
Paragraph(f"<b>{oxidase}</b>",
sty("OX", fontSize=7.5, fontName="Helvetica-Bold",
textColor=(colors.HexColor("#1e8449") if "POSITIVE" in oxidase.upper()
else colors.HexColor("#c0392b")),
alignment=TA_CENTER, leading=9)),
p(tests),
p(disease),
p(rx),
]
bg = LF_LIGHT if row_num % 2 == 0 else LF_PALE
all_rows.append(tr)
cmd.append(("BACKGROUND", (0,table_row_idx),(-1,table_row_idx),
bg if "LF" in grp_label else
(NLF_LIGHT if row_num % 2 == 0 else NLF_PALE)))
table_row_idx += 1
row_num += 1
ts = TableStyle(cmd)
t = Table(all_rows, colWidths=CW, repeatRows=1)
t.setStyle(ts)
return t, row_num
# ── Legend ────────────────────────────────────────────────────────────────────
total_w = sum(CW)
def make_legend():
legend_data = [
[pb("MacConkey Agar Key:"),
p("Pink/Pink-Purple = Lactose Fermenters (acid from lactose → colour change with neutral red indicator)"),
pb(" Colourless/Pale = Non-Lactose Fermenters (no acid production)"),
p("Yellow on TCBS = Vibrio cholerae")],
]
lt = Table(legend_data, colWidths=[60, 160, 130, 90])
lt.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), LGREY),
("BOX",(0,0),(-1,-1),0.8, colors.grey),
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
("TOPPADDING",(0,0),(-1,-1),4),("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING",(0,0),(-1,-1),5),
]))
return lt
NOTES = [
"O₂ Req: Fac. Anaerobe = Facultative Anaerobe (grows with or without O₂). Strict Aerobe = requires O₂. Microaerophile = requires 5% O₂.",
"TSI = Triple Sugar Iron agar: K/A = alkaline slant/acid butt; A/A = acid/acid. H₂S+ = black precipitate. IMViC = Indole, Methyl Red, Voges-Proskauer, Citrate.",
"Oxidase+/− refers to cytochrome C oxidase test. All Enterobacteriaceae are Oxidase−. Pseudomonas, Campylobacter, Helicobacter, Neisseria, Vibrio are Oxidase+.",
"ESBL-producing species (E. coli, Klebsiella, Proteus, Enterobacter, Citrobacter): always confirm susceptibility; carbapenem for serious infections.",
"Sources: Medical Microbiology 9e (Murray et al.), pp. 296-298; Henry's Clinical Diagnosis & Laboratory Methods; Harriet Lane Handbook 23e.",
]
# ── Assemble ──────────────────────────────────────────────────────────────────
elements = []
elements.append(make_title())
elements.append(Spacer(1, 5))
# LF section
elements.append(make_macckey_banner(lf=True))
elements.append(Spacer(1, 4))
lf_table, lf_count = build_data_table(LF_SUBGROUPS, row_offset=0)
elements.append(lf_table)
elements.append(Spacer(1, 8))
# NLF section
elements.append(make_macckey_banner(lf=False))
elements.append(Spacer(1, 4))
nlf_table, nlf_count = build_data_table(NLF_SUBGROUPS, row_offset=lf_count)
elements.append(nlf_table)
elements.append(Spacer(1, 6))
# Legend + notes
elements.append(make_legend())
elements.append(Spacer(1, 5))
for n in NOTES:
elements.append(Paragraph(n, NOTE))
elements.append(Spacer(1, 2))
doc.build(elements)
print(f"PDF saved: {OUTPUT}")
cd /home/daytona/workspace/gpc-gnb-chart && python gnb_lf_nlf.py 2>&1
ls -lh /home/daytona/workspace/gpc-gnb-chart/GNB_LF_vs_NLF.pdf
GNB LF vs NLF
PDF Document · PDF
| # | Genus | Species | O₂ | Oxidase | Key Tests | Key Disease |
|---|---|---|---|---|---|---|
| 1 | Escherichia | E. coli | Fac. | − | Indole+; IMViC ++−−; TSI A/A | UTI, neonatal meningitis, HUS (O157:H7) |
| 2 | Klebsiella | K. pneumoniae | Fac. | − | Urease+; mucoid capsule; VP+; TSI A/A | Hospital pneumonia ("currant jelly"), UTI, liver abscess |
| 3 | Klebsiella | K. oxytoca | Fac. | − | Indole+; Urease+; ONPG+ | UTI, hemorrhagic colitis, bacteremia |
| 4 | Enterobacter | E. cloacae | Fac. | − | VP+; Citrate+; AmpC β-lactamase | Nosocomial pneumonia, UTI, bacteremia |
| 5 | Enterobacter | E. aerogenes | Fac. | − | VP+; motile; AmpC | Hospital-acquired infections |
| 6 | Serratia | S. marcescens | Fac. | − | DNase+; red pigment; Gelatinase+ | Hospital pneumonia, UTI, endocarditis (IVDU) |
| 7 | Citrobacter | C. freundii | Fac. | − | H₂S+; Citrate+; Indole−; AmpC | UTI, neonatal meningitis, brain abscess |
| 8 | Citrobacter | C. koseri | Fac. | − | Indole+; H₂S−; Citrate+ | Neonatal brain abscess |
| 9 | Hafnia | H. alvei | Fac. | − | VP+ at 22°C; ONPG+ | Rare opportunist, gastroenteritis |
| 10 | Cronobacter | C. sakazakii | Fac. | − | Yellow pigment; VP+; ONPG+ | Neonatal meningitis (powdered formula) |
| # | Genus | Species | Oxidase | Key Tests | Key Disease |
|---|---|---|---|---|---|
| 11 | Salmonella | S. typhi | − | H₂S+; TSI K/A; non-motile at 37°C; Widal test | Typhoid fever (rose spots, relative bradycardia) |
| 12 | Salmonella | S. enteritidis/typhimurium | − | H₂S+; motile; TSI K/A | Foodborne gastroenteritis |
| 13 | Shigella | S. dysenteriae | − | Non-motile; H₂S−; gas−; Shiga toxin | Severe bloody dysentery, HUS |
| 14 | Shigella | S. flexneri/sonnei/boydii | − | Non-motile; no toxin | Bacillary dysentery (flexneri), mild diarrhea (sonnei) |
| 15 | Proteus | P. mirabilis | − | Swarming; Urease+++; H₂S+; Indole− | UTI, staghorn calculi |
| 16 | Proteus | P. vulgaris | − | Swarming; Urease+; Indole+ | UTI, wound infections |
| 17 | Yersinia | Y. pestis | − | Safety-pin staining (Wayson); non-motile at 37°C | PLAGUE (bubonic/pneumonic/septicemic) |
| 18 | Yersinia | Y. enterocolitica | − | Urease+; motile at 22°C; cold enrichment | Enterocolitis, mesenteric adenitis |
| 19 | Morganella | M. morganii | − | Urease+; Indole+; Phenylalanine deaminase+ | UTI, wound infections, necrotizing fasciitis |
| 20 | Providencia | P. stuartii | − | Urease+; Phenylalanine deaminase+; Indole+ | UTI in catheterised patients, burn wounds |
| # | Genus | Species | Oxidase | Key Tests | Key Disease |
|---|---|---|---|---|---|
| 21 | Pseudomonas | P. aeruginosa | + | Pyocyanin (blue-green); grape odour; TSI K/K | Burn infections, VAP, CF lung, ecthyma gangrenosum |
| 22 | Acinetobacter | A. baumannii | − | Coccobacillus; non-motile; oxidative/non-reactive | VAP, ICU outbreaks, war wounds; CRAB |
| 23 | Stenotrophomonas | S. maltophilia | + | DNase+; lavender odour; carbapenem resistant | VAP, CF pneumonia; TMP-SMX |
| 24 | Burkholderia | B. cepacia complex | + | Oxidase+; Lysine+; polymyxin R | CF colonisation, bacteremia |
| 25 | Burkholderia | B. pseudomallei | + | Safety-pin staining; wrinkled colony; grows 42°C | Melioidosis (SE Asia) |
| # | Genus | Species | Oxidase | Key Growth | Key Disease |
|---|---|---|---|---|---|
| 26 | Haemophilus | H. influenzae | + | Requires X + V factors; satellitism | Meningitis (type b), epiglottitis, otitis media |
| 27 | Legionella | L. pneumophila | + | BCYE agar only; urinary antigen test | Legionnaire's disease, Pontiac fever |
| 28 | Bordetella | B. pertussis | + | Bordet-Gengou agar; lymphocytosis | Whooping cough |
| 29 | Campylobacter | C. jejuni | + | Skirrow agar; 42°C; microaerophile | Most common bacterial diarrhea; Guillain-Barré |
| 30 | Helicobacter | H. pylori | + | Urease+++; CLO test; Urea breath test | Peptic ulcer, gastric cancer, MALT lymphoma |
| 31 | Vibrio | V. cholerae | + | TCBS (yellow colonies); choleragen toxin | Cholera (rice-water diarrhea) |
| 32 | Neisseria | N. meningitidis | + | Chocolate agar; ferments glucose + maltose | Bacterial meningitis; Waterhouse-Friderichsen |
| 33 | Neisseria | N. gonorrhoeae | + | Thayer-Martin; ferments glucose only | Gonorrhea, PID, neonatal ophthalmia |