Give me classification of microbiology bacteriology with gpc gnc gnb gnc with separate flow chart with example and biochemical test

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
I now have solid textbook data. Let me compile the comprehensive classification with flow charts from medical microbiology knowledge.

Classification of Bacteriology - Complete Guide with Flow Charts

Sources: Medical Microbiology 9e (Murray), Jawetz Medical Microbiology 28e, Sherris & Ryan's Medical Microbiology 8e

The Master Framework: Gram Stain First

Gram staining is the foundational step in bacterial identification. It divides all clinically significant bacteria into four major groups:
GroupAbbreviationCell WallColor After Gram Stain
Gram-Positive CocciGPCThick peptidoglycan, teichoic acidPurple/Violet
Gram-Negative CocciGNCThin peptidoglycan + outer membranePink/Red
Gram-Positive BacilliGPBThick peptidoglycanPurple/Violet
Gram-Negative BacilliGNBThin peptidoglycan + outer membrane (LPS)Pink/Red

1. GRAM-POSITIVE COCCI (GPC) - Flow Chart

GRAM-POSITIVE COCCI (GPC)
         │
         ▼
  [CATALASE TEST]
    /          \
  +               -
(Catalase +)   (Catalase -)
    │               │
    ▼               ▼
STAPHYLOCOCCUS  STREPTOCOCCUS / ENTEROCOCCUS
    │               │
    ▼               ▼
[COAGULASE]    [HEMOLYSIS ON BLOOD AGAR]
  /      \       /        |        \
 +         -   α           β        γ
 │         │  (Green)  (Complete)  (None)
 ▼         ▼    │          │         │
S. aureus  CoNS  │      [LANCEFIELD]  │
           │     │        /    \      │
           │     │  Group A    Group B │
           │     ▼  (S.pyogenes)(S.agalactiae)
           │  [OPTOCHIN/BILE SOLUBILITY]
           │    /         \
           │   +            -
           ▼  S.pneumoniae  Viridans streptococci
      [NOVOBIOCIN]          (S.mutans, S.mitis, etc.)
         /    \
        +       -            (γ-hemolysis: ENTEROCOCCUS)
        │       │               [GROWTH IN 6.5% NaCl]
        ▼       ▼                /           \
  S.epidermidis S.saprophyticus +              -
                              E.faecalis    Non-Enterococcus

GPC Key Organisms & Biochemical Tests

OrganismCatalaseCoagulaseHemolysisOptochinNovobiocinKey Feature
S. aureus++β--Golden colonies, mannitol fermenter
S. epidermidis+-None-SensitiveNovobiocin sensitive, slime layer
S. saprophyticus+-None-ResistantUTI in young women
S. pyogenes--β--Bacitracin sensitive, PYR+
S. agalactiae--β--CAMP test+, hippurate+
S. pneumoniae--αSensitive-Bile soluble, quellung reaction
Viridans strep--αResistant-No bile solubility
E. faecalis--γ/β--6.5% NaCl growth, PYR+

2. GRAM-NEGATIVE COCCI (GNC) - Flow Chart

GRAM-NEGATIVE COCCI (GNC)
          │
          ▼
    [OXIDASE TEST]
         +
         │
         ▼
     NEISSERIA spp.
    /              \
   +                -
[GLUCOSE FERMENTER]   [ACID from sugars]
         │
  [MALTOSE TEST]
    /         \
   +             -
   │             │
   ▼             ▼
N. meningitidis  N. gonorrhoeae
(glucose+        (glucose only)
 maltose+)

Other GNC:
Moraxella catarrhalis - Oxidase+, DNase+, Butyrate+

GNC Key Organisms & Biochemical Tests

OrganismOxidaseGlucoseMaltoseLactoseSucroseDNaseKey Feature
N. meningitidis+++---Polysaccharide capsule, CSF meningitis
N. gonorrhoeae++----Thayer-Martin medium, STI
M. catarrhalis+----+ONPG-, causes otitis media/LRTI

3. GRAM-NEGATIVE BACILLI (GNB) - Flow Chart

GRAM-NEGATIVE BACILLI (GNB)
           │
           ▼
     [OXIDASE TEST]
     /              \
    -                 +
    │                 │
    ▼                 ▼
ENTEROBACTERIACEAE   NON-ENTEROBACTERIACEAE
    │                (Pseudomonas, Vibrio,
    │                 Campylobacter, H.pylori,
    │                 Haemophilus, Brucella)
    │
    ▼
[LACTOSE FERMENTATION - MacConkey Agar]
    /                     \
LACTOSE+                  LACTOSE-
(Pink colonies)           (Colorless colonies)
    │                          │
    ▼                     [H2S PRODUCTION]
[IMViC Tests]             /           \
    │                    +              -
E. coli (++--)      Salmonella      [INDOLE TEST]
Klebsiella (--++)   Proteus         /       \
Enterobacter (--++) │               +         -
                    │           Shigella   [UREASE TEST]
              [UREASE TEST]      /    \
                /      \        +      -
               +         -     Y.ent.  Others
          Proteus     Salmonella

IMViC Pattern Key

TestMeaningE. coliKlebsiellaEnterobacterSalmonellaShigella
I - IndoleTryptophan→Indole+---+
M - Methyl RedMixed acid ferm.+--++
V - VP (Voges-Proskauer)2,3-butanediol-++--
C - CitrateCitrate as C source-+++-

GNB: Enterobacteriaceae Full Biochemical Table

OrganismOxidaseLactoseH₂SIndoleMRVPCitrateUreaseMotility
E. coli-+-++---+
Klebsiella-+---+++-
Enterobacter-+---++-+
Salmonella typhi--+-+---+
Salmonella non-typhi--+-+-+-+
Shigella----/++----
Proteus mirabilis--+-+--++ (swarming)
Yersinia enterocolitica---++--+- (37°C)
Vibrio cholerae+--+-++-+
Pseudomonas aeruginosa+-----+-+

4. GRAM-POSITIVE BACILLI (GPB) - Flow Chart

GRAM-POSITIVE BACILLI (GPB)
          │
          ▼
    [SPORE FORMING?]
    /              \
   YES               NO
   │                 │
   ▼                 ▼
[AEROBIC/            [AEROBIC/ANAEROBIC]
 ANAEROBIC?]         /              \
  /        \       Aerobic          Anaerobic
Aerobic    Anaerobic  │               │
  │           │    [Catalase/       Actinomyces,
  ▼           ▼     Motility]       Propionibacterium
Bacillus   Clostridium
 anthracis  perfringens  [Motility + β-hemolysis]
 cereus     tetani         /         \
 subtilis   botulinum     +            -
            difficile  Listeria    Corynebacterium
                       monocytogenes diphtheriae
                       (tumbling)   (Chinese-letter pattern)
                                        │
                                  [ELEK TEST]
                                  Toxin production

GPB Key Organisms & Biochemical Tests

OrganismSporeAerobeCatalaseMotilityHemolysisKey Test
B. anthracis+Aerobic+-Non-hemolyticString of pearls (penicillin), India ink
B. cereus+Aerobic++βMotile, food poisoning
C. perfringens+Anaerobic--Double zone βLecithinase+ (Nagler's), stormy clot
C. tetani+ (terminal)Anaerobic-+-Drumstick appearance
C. botulinum+Anaerobic-+-Neurotoxin, honey in infants
C. difficile+Anaerobic---Toxin A+B, horse-shoe pattern
L. monocytogenes-Aerobic++βTumbling motility (4°C), CAMP+
C. diphtheriae-Aerobic+--Elek test, tellurite agar (black)

MASTER SUMMARY FLOW CHART

UNKNOWN BACTERIUM
        │
        ▼
  [GRAM STAIN]
  /           \
Purple(+)     Pink(-)
  │               │
  ▼               ▼
SHAPE?          SHAPE?
/   \           /   \
Cocci Bacilli  Cocci  Bacilli
│      │        │       │
▼      ▼        ▼       ▼
GPC   GPB      GNC     GNB
│              │       │
CATALASE      OXIDASE  OXIDASE
│              │       │
COAGULASE     GLUCOSE  LACTOSE
│             MALTOSE   H₂S
S.aureus/            IMViC
CoNS/Strep/
Enterococcus

Quick Reference: Special Biochemical Tests

TestPrinciplePositive ResultExamples
CatalaseH₂O₂ → H₂O + O₂BubblesStaphylococcus (+) vs Streptococcus (-)
CoagulaseClots plasmaClot formationS. aureus (+) vs CoNS (-)
OxidaseCytochrome c oxidaseBlue-purple colorPseudomonas, Neisseria (+)
OptochinInhibits S. pneumoniaeZone of inhibitionS. pneumoniae (+)
BacitracinInhibits S. pyogenesZone of inhibitionGroup A Strep (+)
CAMP testEnhanced hemolysisArrow-head β-hemolysisS. agalactiae (+)
Bile solubilityLyses S. pneumoniaeColony disappearsS. pneumoniae (+)
PYR testPyrrolidonyl aminopeptidaseRed colorS. pyogenes, E. faecalis (+)
UreaseUrea → NH₃ + CO₂Pink/Red (Christensen's)Proteus, Klebsiella, H. pylori (+)
IndoleTryptophanase activityRed ring (Kovac's)E. coli (+), Klebsiella (-)
Methyl Red (MR)Mixed acid fermentationRed colorE. coli (+), Klebsiella (-)
VP (Voges-Proskauer)2,3-butanediol productionRed colorKlebsiella, Enterobacter (+)
CitrateCitrate as sole C sourceBlue (Simmon's)Klebsiella, Enterobacter (+)
H₂S productionSulfur reductionBlack precipitateSalmonella, Proteus (+)
NovobiocinInhibits CoNSInhibition zoneS. epidermidis (S), S. saprophyticus (R)
Elek testImmunodiffusion for toxinPrecipitin lineC. diphtheriae toxin (+)
Nagler's reactionLecithinase activityTurbidity inhibitedC. perfringens (+)

Clinical Examples at a Glance

GroupOrganismDiseaseKey Clue
GPCS. aureusBoils, MRSA, food poisoning, toxic shockCoagulase+, clusters
GPCS. pyogenesStrep throat, rheumatic fever, cellulitisBacitracin+, chains
GPCS. pneumoniaePneumonia, meningitis, otitisLancet-shaped diplococci, optochin+
GPCE. faecalisUTI, endocarditis6.5% NaCl growth
GNCN. meningitidisBacterial meningitis, septicemiaCoffee bean diplococci in CSF
GNCN. gonorrhoeaeGonorrhea, PID, ophthalmia neonatorumIntracellular diplococci in PMNs
GNBE. coliUTI, diarrhea, meningitis (neonates)IMViC: ++--, lactose+
GNBSalmonella typhiTyphoid feverH₂S+, rose spots, Widal test
GNBShigellaBloody dysenteryNon-motile, non-lactose, H₂S-
GNBKlebsiellaLobar pneumonia, UTIMucoid colonies, IMViC: --++
GNBP. aeruginosaBurns, cystic fibrosis, nosocomialOxidase+, blue-green pyocyanin
GNBVibrio choleraeCholera (rice water stool)Oxidase+, string test+, comma shape
GPBC. tetaniTetanus (spastic paralysis)Drumstick spore, terminal spore
GPBC. perfringensGas gangrene, food poisoningStormy clot, double-zone hemolysis
GPBC. diphtheriaeDiphtheria (pseudomembrane)Elek test, metachromatic granules
GPBL. monocytogenesMeningitis (neonates/elderly)Tumbling motility, CAMP+

Medical Microbiology 9e (Murray) - Chapter 18 (Staphylococcus), Jawetz Medical Microbiology 28e - Chapter 12 (Gram-Positive Bacteria)

Create a diagnostic PowerPoint flowchart I can present to students

Reading File
Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null | head -20

Running Command

mkdir -p /home/daytona/workspace/bacteriology-pptx

Writing File

~/bacteriology-pptx/build.js

const pptxgen = require("pptxgenjs");

const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3" x 7.5"
pres.title = "Diagnostic Bacteriology - Gram Stain Classification";
pres.author = "Microbiology Teaching";

// ─── Color palette ───────────────────────────────────────────────────────────
const C = {
  navy:    "0D1B2A",   // dominant dark bg
  midBlue: "1B3A5C",
  teal:    "1B6CA8",
  accent:  "F0A500",   // amber accent
  white:   "FFFFFF",
  offWhite:"F5F7FA",
  gpcBlue: "1565C0",   // GPC node
  gncOrange:"E65100",  // GNC node
  gnbGreen:"2E7D32",   // GNB node
  gpbPurp: "6A1B9A",   // GPB node
  posGreen:"2E7D32",
  negRed:  "C62828",
  arrowGray:"AAAAAA",
  boxLight:"EBF3FB",
  lineGray:"CBD5E0",
};

// ─── Helper: rounded rect node ───────────────────────────────────────────────
function addNode(slide, txt, x, y, w, h, fillColor, textColor, fontSize) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill: { color: fillColor },
    line: { color: "FFFFFF", width: 0.5 },
    rectRadius: 0.08,
  });
  slide.addText(txt, {
    x, y, w, h,
    fontSize: fontSize || 11,
    color: textColor || "FFFFFF",
    bold: true,
    align: "center",
    valign: "middle",
    fontFace: "Calibri",
    margin: 2,
  });
}

// ─── Helper: diamond decision node ───────────────────────────────────────────
function addDiamond(slide, txt, x, y, w, h, fillColor) {
  slide.addShape(pres.ShapeType.diamond, {
    x, y, w, h,
    fill: { color: fillColor },
    line: { color: "FFFFFF", width: 0.6 },
  });
  slide.addText(txt, {
    x, y, w, h,
    fontSize: 9.5,
    color: "FFFFFF",
    bold: true,
    align: "center",
    valign: "middle",
    fontFace: "Calibri",
    margin: 2,
  });
}

// ─── Helper: connector line ──────────────────────────────────────────────────
function addLine(slide, x1, y1, x2, y2, color) {
  slide.addShape(pres.ShapeType.line, {
    x: x1, y: y1, w: x2 - x1, h: y2 - y1,
    line: { color: color || C.arrowGray, width: 1.2, endArrowType: "arrow" },
  });
}

function addVLine(slide, x, y1, y2, color) {
  slide.addShape(pres.ShapeType.line, {
    x: x, y: y1, w: 0, h: y2 - y1,
    line: { color: color || C.arrowGray, width: 1.2, endArrowType: "arrow" },
  });
}

function addHLine(slide, x1, x2, y, color) {
  slide.addShape(pres.ShapeType.line, {
    x: x1, y: y, w: x2 - x1, h: 0,
    line: { color: color || C.arrowGray, width: 1.2, endArrowType: "arrow" },
  });
}

function labelText(slide, txt, x, y, w, color, fontSize, bold) {
  slide.addText(txt, {
    x, y, w, h: 0.25,
    fontSize: fontSize || 8.5,
    color: color || C.navy,
    bold: bold !== undefined ? bold : false,
    align: "center",
    fontFace: "Calibri",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();

  // Full bg
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.navy } });

  // Decorative horizontal band
  s.addShape(pres.ShapeType.rect, { x: 0, y: 3.1, w: 13.3, h: 0.06, fill: { color: C.accent } });

  // Title
  s.addText("Diagnostic Bacteriology", {
    x: 1, y: 1.0, w: 11.3, h: 1.2,
    fontSize: 44, color: C.white, bold: true, align: "center",
    fontFace: "Calibri", charSpacing: 2,
  });

  s.addText("Gram Stain Classification & Identification Flowcharts", {
    x: 1, y: 2.4, w: 11.3, h: 0.7,
    fontSize: 22, color: C.accent, bold: false, align: "center", fontFace: "Calibri",
  });

  // Four group badges
  const badges = [
    { label: "GPC", sub: "Gram-Positive Cocci", color: C.gpcBlue, x: 1.3 },
    { label: "GNC", sub: "Gram-Negative Cocci", color: C.gncOrange, x: 4.3 },
    { label: "GNB", sub: "Gram-Negative Bacilli", color: C.gnbGreen, x: 7.3 },
    { label: "GPB", sub: "Gram-Positive Bacilli", color: C.gpbPurp, x: 10.3 },
  ];

  badges.forEach(b => {
    s.addShape(pres.ShapeType.roundRect, {
      x: b.x, y: 3.5, w: 2.4, h: 1.4,
      fill: { color: b.color }, line: { color: C.accent, width: 1 }, rectRadius: 0.1,
    });
    s.addText(b.label, { x: b.x, y: 3.55, w: 2.4, h: 0.7, fontSize: 26, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
    s.addText(b.sub, { x: b.x, y: 4.2, w: 2.4, h: 0.6, fontSize: 10, color: C.offWhite, align: "center", fontFace: "Calibri" });
  });

  s.addText("Biochemical Tests  •  Key Organisms  •  Clinical Examples", {
    x: 1, y: 5.3, w: 11.3, h: 0.4,
    fontSize: 13, color: "#8AA8C8", align: "center", fontFace: "Calibri",
  });

  s.addText("Microbiology — Teaching Resource", {
    x: 1, y: 6.9, w: 11.3, h: 0.3,
    fontSize: 10, color: "#5A7A9A", align: "center", fontFace: "Calibri",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — MASTER ALGORITHM (Gram Stain → 4 groups)
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.navy } });

  s.addText("MASTER DIAGNOSTIC ALGORITHM", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45,
    fontSize: 18, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 3,
  });

  // UNKNOWN BACTERIUM box
  addNode(s, "UNKNOWN BACTERIUM\n(Clinical Isolate)", 4.9, 0.85, 3.5, 0.75, C.navy, C.white, 12);

  // Arrow down to GRAM STAIN
  addVLine(s, 6.65, 1.6, 2.1, C.teal);

  // GRAM STAIN diamond
  addDiamond(s, "GRAM STAIN", 5.4, 2.1, 2.5, 0.9, C.teal);

  // Left branch — GRAM POSITIVE
  addHLine(s, 3.5, 5.4, 2.55, C.gpcBlue);
  addVLine(s, 3.5, 2.55, 3.25, C.gpcBlue);
  labelText(s, "PURPLE (+)", 2.0, 2.35, 2.2, C.gpcBlue, 9, true);

  // Right branch — GRAM NEGATIVE
  addHLine(s, 7.9, 10.2, 2.55, C.gnbGreen);
  addVLine(s, 10.2, 2.55, 3.25, C.gnbGreen);
  labelText(s, "PINK (−)", 9.5, 2.35, 2.0, C.gnbGreen, 9, true);

  // GP: SHAPE decision
  addDiamond(s, "CELL\nSHAPE?", 2.55, 3.25, 1.9, 0.9, C.midBlue);

  // GN: SHAPE decision
  addDiamond(s, "CELL\nSHAPE?", 9.35, 3.25, 1.9, 0.9, C.midBlue);

  // GPC box
  addVLine(s, 3.0, 4.15, 4.65, C.gpcBlue);
  addHLine(s, 2.0, 3.0, 4.15, C.gpcBlue);
  labelText(s, "Cocci", 1.3, 3.95, 1.2, C.gpcBlue, 9, true);
  addNode(s, "GPC\nGram-Positive Cocci", 1.2, 4.65, 2.5, 0.85, C.gpcBlue, C.white, 11);

  // GPB box
  addVLine(s, 3.8, 4.15, 4.65, C.gpbPurp);
  addHLine(s, 3.5, 4.5, 4.15, C.gpbPurp);
  labelText(s, "Bacilli", 4.0, 3.95, 1.2, C.gpbPurp, 9, true);
  addNode(s, "GPB\nGram-Positive Bacilli", 3.6, 4.65, 2.5, 0.85, C.gpbPurp, C.white, 11);

  // GNC box
  addVLine(s, 9.9, 4.15, 4.65, C.gncOrange);
  addHLine(s, 9.0, 9.9, 4.15, C.gncOrange);
  labelText(s, "Cocci", 8.3, 3.95, 1.2, C.gncOrange, 9, true);
  addNode(s, "GNC\nGram-Negative Cocci", 8.7, 4.65, 2.5, 0.85, C.gncOrange, C.white, 11);

  // GNB box
  addVLine(s, 10.7, 4.15, 4.65, C.gnbGreen);
  addHLine(s, 10.3, 11.2, 4.15, C.gnbGreen);
  labelText(s, "Bacilli", 10.6, 3.95, 1.2, C.gnbGreen, 9, true);
  addNode(s, "GNB\nGram-Negative Bacilli", 9.8, 4.65, 2.5, 0.85, C.gnbGreen, C.white, 11);

  // Next steps — arrows down from each box
  const nextLabels = [
    { x: 1.2, color: C.gpcBlue, next: "→ Slide 3" },
    { x: 3.6, color: C.gpbPurp, next: "→ Slide 6" },
    { x: 8.7, color: C.gncOrange, next: "→ Slide 5" },
    { x: 9.8, color: C.gnbGreen, next: "→ Slide 4" },
  ];

  nextLabels.forEach(n => {
    addVLine(s, n.x + 1.25, 5.5, 5.9, n.color);
    s.addShape(pres.ShapeType.roundRect, {
      x: n.x, y: 5.9, w: 2.5, h: 0.45,
      fill: { color: n.color }, line: { color: n.color, width: 0 }, rectRadius: 0.07,
    });
    s.addText(n.next, { x: n.x, y: 5.9, w: 2.5, h: 0.45, fontSize: 10, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
  });

  // Legend bottom
  s.addShape(pres.ShapeType.rect, { x: 0, y: 7.1, w: 13.3, h: 0.4, fill: { color: C.navy } });
  s.addText("KEY:  Start with Gram Stain  →  Determine cell shape  →  Apply organism-specific biochemical tests on each branch", {
    x: 0.3, y: 7.12, w: 12.7, h: 0.35, fontSize: 9.5, color: C.accent, fontFace: "Calibri", align: "center",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — GPC FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.gpcBlue } });
  s.addText("GPC — GRAM-POSITIVE COCCI  |  Diagnostic Flowchart", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 16, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  // GPC node
  addNode(s, "Gram-Positive Cocci", 5.0, 0.8, 3.3, 0.65, C.gpcBlue, C.white, 13);
  addVLine(s, 6.65, 1.45, 1.9, C.gpcBlue);

  // CATALASE diamond
  addDiamond(s, "CATALASE\nTEST", 5.4, 1.9, 2.5, 0.85, C.teal);

  // Left (catalase +) → Staphylococcus
  addHLine(s, 2.8, 5.4, 2.32, C.gpcBlue);
  labelText(s, "(+) Bubbles", 3.2, 2.12, 1.8, C.posGreen, 8.5, true);
  addNode(s, "STAPHYLOCOCCUS", 1.5, 2.7, 2.6, 0.6, C.gpcBlue, C.white, 11);
  addVLine(s, 2.8, 2.55, 2.7, C.gpcBlue);

  // Coagulase under Staphylococcus
  addVLine(s, 2.8, 3.3, 3.7, C.gpcBlue);
  addDiamond(s, "COAGULASE\nTEST", 1.6, 3.7, 2.4, 0.85, C.teal);

  // S. aureus
  addHLine(s, 0.3, 1.6, 4.12, C.negRed);
  labelText(s, "(+)", 0.4, 3.95, 0.7, C.posGreen, 8.5, true);
  addNode(s, "S. aureus\n(Coagulase +)", 0.05, 4.65, 1.9, 0.75, C.negRed, C.white, 9.5);
  addVLine(s, 0.95, 4.55, 4.65, C.negRed);

  // CoNS
  addHLine(s, 4.0, 5.4, 4.12, C.gpcBlue);
  labelText(s, "(−)", 4.5, 3.95, 0.6, C.negRed, 8.5, true);
  addNode(s, "CoNS\n(Coagulase −)", 4.05, 4.65, 1.85, 0.75, C.midBlue, C.white, 9.5);
  addVLine(s, 4.98, 4.55, 4.65, C.midBlue);

  // Novobiocin under CoNS
  addVLine(s, 4.98, 5.4, 5.75, C.midBlue);
  addDiamond(s, "NOVOBIOCIN", 3.85, 5.75, 2.2, 0.75, C.teal);

  addHLine(s, 2.9, 3.85, 6.12);
  labelText(s, "Sensitive", 2.15, 5.95, 1.3, C.posGreen, 8.5, true);
  addNode(s, "S. epidermidis", 1.6, 6.55, 1.8, 0.55, C.midBlue, C.white, 9);
  addVLine(s, 2.5, 6.5, 6.55, C.midBlue);

  addHLine(s, 6.05, 6.7, 6.12);
  labelText(s, "Resistant", 6.1, 5.95, 1.2, C.negRed, 8.5, true);
  addNode(s, "S. saprophyticus", 6.05, 6.55, 1.9, 0.55, C.midBlue, C.white, 9);

  // Right (catalase −) → Streptococcus / Enterococcus
  addHLine(s, 7.9, 10.3, 2.32, C.gpcBlue);
  labelText(s, "(−) No bubbles", 8.3, 2.12, 1.8, C.negRed, 8.5, true);
  addNode(s, "STREPTOCOCCUS /\nENTEROCOCCUS", 9.5, 2.7, 2.7, 0.65, C.gpcBlue, C.white, 11);
  addVLine(s, 10.85, 2.55, 2.7, C.gpcBlue);

  // Hemolysis
  addVLine(s, 10.85, 3.35, 3.75, C.gpcBlue);
  addDiamond(s, "HEMOLYSIS\n(Blood Agar)", 9.65, 3.75, 2.4, 0.85, C.teal);

  // Alpha hemolysis
  addHLine(s, 8.5, 9.65, 4.17);
  labelText(s, "α (green)", 7.8, 3.95, 1.3, C.posGreen, 8.5, true);
  addNode(s, "α-Hemolysis", 7.6, 4.65, 1.8, 0.55, C.midBlue, C.white, 9.5);
  addVLine(s, 8.5, 4.55, 4.65, C.midBlue);
  addVLine(s, 8.5, 5.2, 5.5, C.midBlue);
  addDiamond(s, "OPTOCHIN\nTEST", 7.5, 5.5, 2.0, 0.75, C.teal);
  addHLine(s, 6.8, 7.5, 5.87);
  labelText(s, "Sensitive", 6.0, 5.7, 1.4, C.posGreen, 8.5, true);
  addNode(s, "S. pneumoniae", 5.5, 6.55, 1.8, 0.55, C.gpcBlue, C.white, 9);
  addVLine(s, 6.4, 6.5, 6.55, C.gpcBlue);
  addHLine(s, 9.5, 10.0, 5.87);
  labelText(s, "Resistant", 9.7, 5.7, 1.3, C.negRed, 8.5, true);
  addNode(s, "Viridans Strep", 9.5, 6.55, 1.8, 0.55, C.midBlue, C.white, 9);

  // Beta hemolysis
  addVLine(s, 10.85, 4.6, 4.85, C.gpcBlue);
  addNode(s, "β-Hemolysis", 10.0, 4.85, 1.7, 0.55, C.midBlue, C.white, 9.5);

  addVLine(s, 10.85, 5.4, 5.6, C.gpcBlue);
  addDiamond(s, "BACITRACIN\nLANCEFIELD", 10.0, 5.6, 1.7, 0.75, C.teal);

  addHLine(s, 9.3, 10.0, 5.97);
  labelText(s, "Grp A", 8.6, 5.8, 1.1, C.posGreen, 8.5, true);
  addNode(s, "S. pyogenes\n(Group A)", 7.8, 6.55, 1.8, 0.55, C.gpcBlue, C.white, 9);
  addVLine(s, 8.7, 6.5, 6.55, C.gpcBlue);

  addHLine(s, 11.7, 12.2, 5.97);
  labelText(s, "Grp B", 11.7, 5.8, 1.1, C.posGreen, 8.5, true);
  addNode(s, "S. agalactiae\n(Group B)", 11.2, 6.55, 1.8, 0.55, C.gpcBlue, C.white, 9);

  // Gamma hemolysis
  addHLine(s, 12.3, 12.9, 4.17);
  labelText(s, "γ (none)", 12.4, 3.95, 1.2, C.arrowGray, 8.5, true);
  addNode(s, "ENTEROCOCCUS\n(6.5% NaCl +)", 11.5, 4.65, 1.8, 0.65, C.gncOrange, C.white, 9);
  addVLine(s, 12.4, 4.55, 4.65, C.gncOrange);
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — GNB FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.gnbGreen } });
  s.addText("GNB — GRAM-NEGATIVE BACILLI  |  Diagnostic Flowchart", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 16, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  // Start
  addNode(s, "Gram-Negative Bacilli", 5.0, 0.8, 3.3, 0.6, C.gnbGreen, C.white, 13);
  addVLine(s, 6.65, 1.4, 1.85, C.gnbGreen);

  // Oxidase
  addDiamond(s, "OXIDASE\nTEST", 5.4, 1.85, 2.5, 0.85, C.teal);

  // Oxidase negative → Enterobacteriaceae
  addHLine(s, 2.8, 5.4, 2.27);
  labelText(s, "(−) Enterobacteriaceae", 2.0, 2.07, 2.5, C.negRed, 8.5, true);
  addNode(s, "ENTEROBACTERIACEAE\n(Oxidase −)", 1.2, 2.7, 2.9, 0.65, C.gnbGreen, C.white, 11);
  addVLine(s, 2.65, 2.55, 2.7, C.gnbGreen);

  // Lactose on MacConkey
  addVLine(s, 2.65, 3.35, 3.7, C.gnbGreen);
  addDiamond(s, "LACTOSE\nMacConkey", 1.5, 3.7, 2.3, 0.85, C.teal);

  // Lactose positive
  addHLine(s, 0.3, 1.5, 4.12);
  labelText(s, "PINK (+)", 0.3, 3.95, 0.85, C.posGreen, 8.5, true);
  addNode(s, "E. coli\nKlebsiella\nEnterobacter", 0.05, 4.65, 1.8, 0.9, C.gnbGreen, C.white, 9);
  addVLine(s, 0.95, 4.55, 4.65, C.gnbGreen);

  addVLine(s, 0.95, 5.55, 5.75, C.gnbGreen);
  addNode(s, "IMViC Tests\n(see Slide 7)", 0.2, 5.75, 1.5, 0.65, C.midBlue, C.white, 9);

  // Lactose negative
  addHLine(s, 3.8, 5.2, 4.12);
  labelText(s, "COLORLESS (−)", 3.5, 3.95, 1.4, C.negRed, 8.5, true);
  addVLine(s, 3.8, 4.12, 4.4);
  addNode(s, "Salmonella\nShigella\nProteus", 3.2, 4.4, 1.8, 0.85, C.gnbGreen, C.white, 9);
  addVLine(s, 4.1, 5.25, 5.5);

  addDiamond(s, "H₂S\nPROD.", 3.3, 5.5, 1.6, 0.75, C.teal);
  addHLine(s, 2.5, 3.3, 5.87);
  labelText(s, "(+)", 2.6, 5.7, 0.6, C.posGreen, 8.5, true);
  addNode(s, "Salmonella\nProteus", 1.75, 6.55, 1.6, 0.55, C.gnbGreen, C.white, 9);
  addVLine(s, 2.55, 6.5, 6.55, C.gnbGreen);
  addHLine(s, 4.9, 5.5, 5.87);
  labelText(s, "(−)", 5.0, 5.7, 0.6, C.negRed, 8.5, true);
  addNode(s, "Shigella\nYersinia", 4.95, 6.55, 1.6, 0.55, C.gnbGreen, C.white, 9);

  // Oxidase positive → Non-enterobacteriaceae
  addHLine(s, 7.9, 10.6, 2.27);
  labelText(s, "(+) Non-Enterobacteriaceae", 8.3, 2.07, 2.8, C.posGreen, 8.5, true);
  addNode(s, "NON-ENTEROBACTERIACEAE\n(Oxidase +)", 9.5, 2.7, 3.0, 0.65, C.gnbGreen, C.white, 11);
  addVLine(s, 11.0, 2.55, 2.7, C.gnbGreen);

  addVLine(s, 11.0, 3.35, 3.6, C.gnbGreen);
  addDiamond(s, "GLUCOSE\nFERM.", 9.9, 3.6, 2.2, 0.8, C.teal);

  addHLine(s, 8.5, 9.9, 4.0);
  labelText(s, "(−) Oxidative", 8.2, 3.82, 1.6, C.negRed, 8.5, true);
  addNode(s, "Pseudomonas\naeruginsoa\n(Pyocyanin+)", 7.6, 4.65, 2.0, 0.85, C.gnbGreen, C.white, 9);
  addVLine(s, 8.6, 4.55, 4.65, C.gnbGreen);

  addHLine(s, 12.1, 12.5, 4.0);
  labelText(s, "(+) Ferment.", 12.0, 3.82, 1.5, C.posGreen, 8.5, true);
  addNode(s, "Vibrio cholerae\nAeromonas", 11.7, 4.65, 1.8, 0.65, C.gnbGreen, C.white, 9);
  addVLine(s, 12.6, 4.55, 4.65, C.gnbGreen);

  // Curved path — fastidious
  addVLine(s, 11.0, 4.4, 4.65, C.gnbGreen);
  addNode(s, "Fastidious GNB\nHaemophilus\nBrucella\nCampylobacter", 9.8, 4.65, 2.3, 1.0, C.midBlue, C.white, 9);

  // Legend box
  s.addShape(pres.ShapeType.roundRect, {
    x: 5.8, y: 5.0, w: 3.3, h: 2.2,
    fill: { color: C.navy }, line: { color: C.accent, width: 1 }, rectRadius: 0.1,
  });
  s.addText("KEY TESTS — GNB", { x: 5.9, y: 5.05, w: 3.1, h: 0.4, fontSize: 10, color: C.accent, bold: true, align: "center", fontFace: "Calibri" });
  s.addText([
    { text: "• Oxidase: ", options: { bold: true } }, { text: "Divides Enterobact. vs Non\n" },
    { text: "• MacConkey: ", options: { bold: true } }, { text: "Lactose fermenters (pink)\n" },
    { text: "• H₂S: ", options: { bold: true } }, { text: "Salmonella / Proteus (black ppt)\n" },
    { text: "• IMViC: ", options: { bold: true } }, { text: "Indole, MR, VP, Citrate\n" },
    { text: "• Urease: ", options: { bold: true } }, { text: "Proteus, Klebsiella, H. pylori" },
  ], { x: 5.9, y: 5.5, w: 3.1, h: 1.65, fontSize: 9, color: C.offWhite, fontFace: "Calibri" });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — GNC FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.gncOrange } });
  s.addText("GNC — GRAM-NEGATIVE COCCI  |  Diagnostic Flowchart", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 16, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  addNode(s, "Gram-Negative Cocci\n(Diplococci / Coffee bean shape)", 4.6, 0.9, 4.1, 0.65, C.gncOrange, C.white, 13);
  addVLine(s, 6.65, 1.55, 2.0, C.gncOrange);

  addDiamond(s, "OXIDASE\nTEST", 5.4, 2.0, 2.5, 0.85, C.teal);

  // All GNC are oxidase positive
  addVLine(s, 6.65, 2.85, 3.1, C.gncOrange);
  labelText(s, "(+) ALL clinically significant GNC are Oxidase Positive", 3.0, 2.87, 7.3, C.posGreen, 9, true);

  addNode(s, "NEISSERIA spp.", 5.1, 3.1, 3.1, 0.6, C.gncOrange, C.white, 13);
  addVLine(s, 6.65, 3.7, 4.05, C.gncOrange);

  addDiamond(s, "ACID FROM\nSUGARS", 5.4, 4.05, 2.5, 0.85, C.teal);

  // N. meningitidis branch
  addHLine(s, 3.3, 5.4, 4.47);
  labelText(s, "Glucose + Maltose", 2.3, 4.27, 2.5, C.posGreen, 8.5, true);
  addNode(s, "N. meningitidis", 2.0, 4.95, 2.5, 0.65, C.gncOrange, C.white, 12);
  addVLine(s, 3.25, 4.82, 4.95, C.gncOrange);
  addVLine(s, 3.25, 5.6, 5.85, C.gncOrange);
  s.addShape(pres.ShapeType.roundRect, {
    x: 1.2, y: 5.85, w: 4.1, h: 1.3,
    fill: { color: C.navy }, line: { color: C.gncOrange, width: 1 }, rectRadius: 0.08,
  });
  s.addText([
    { text: "KEY FEATURES\n", options: { bold: true, color: C.accent } },
    { text: "• Glucose + Maltose acid\n• Polysaccharide capsule\n• Causes: MENINGITIS, Septicaemia\n• Medium: Chocolate / Thayer-Martin\n• Droplet spread" },
  ], { x: 1.25, y: 5.9, w: 4.0, h: 1.2, fontSize: 9, color: C.offWhite, fontFace: "Calibri" });

  // N. gonorrhoeae branch
  addHLine(s, 7.9, 9.0, 4.47);
  labelText(s, "Glucose only", 8.3, 4.27, 1.8, C.negRed, 8.5, true);
  addNode(s, "N. gonorrhoeae", 8.5, 4.95, 2.5, 0.65, C.gncOrange, C.white, 12);
  addVLine(s, 9.75, 4.82, 4.95, C.gncOrange);
  addVLine(s, 9.75, 5.6, 5.85, C.gncOrange);
  s.addShape(pres.ShapeType.roundRect, {
    x: 7.7, y: 5.85, w: 4.1, h: 1.3,
    fill: { color: C.navy }, line: { color: C.gncOrange, width: 1 }, rectRadius: 0.08,
  });
  s.addText([
    { text: "KEY FEATURES\n", options: { bold: true, color: C.accent } },
    { text: "• Glucose acid only (NOT maltose)\n• No capsule, pili for attachment\n• Causes: GONORRHEA, PID, Ophthalmia neonatorum\n• Intracellular diplococci in PMNs\n• Medium: Thayer-Martin (VCNT agar)" },
  ], { x: 7.75, y: 5.9, w: 4.0, h: 1.2, fontSize: 9, color: C.offWhite, fontFace: "Calibri" });

  // Moraxella catarrhalis
  addVLine(s, 6.65, 4.9, 5.1, C.arrowGray);
  s.addShape(pres.ShapeType.roundRect, {
    x: 5.4, y: 5.1, w: 2.5, h: 0.65,
    fill: { color: "#78909C" }, line: { color: C.arrowGray, width: 0.5 }, rectRadius: 0.08,
  });
  s.addText("Moraxella catarrhalis", { x: 5.4, y: 5.1, w: 2.5, h: 0.65, fontSize: 10, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
  addVLine(s, 6.65, 5.75, 5.95, C.arrowGray);
  s.addText("DNase (+), Butyrate (+), No acid from sugars\nOtitis media, LRTI, Elderly patients", {
    x: 5.3, y: 5.95, w: 2.7, h: 0.7, fontSize: 8.5, color: C.navy, align: "center", fontFace: "Calibri",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — GPB FLOWCHART
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.gpbPurp } });
  s.addText("GPB — GRAM-POSITIVE BACILLI  |  Diagnostic Flowchart", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 16, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  addNode(s, "Gram-Positive Bacilli", 5.0, 0.85, 3.3, 0.6, C.gpbPurp, C.white, 13);
  addVLine(s, 6.65, 1.45, 1.9, C.gpbPurp);

  addDiamond(s, "SPORE\nFORMING?", 5.4, 1.9, 2.5, 0.85, C.teal);

  // Spore forming - YES
  addHLine(s, 3.1, 5.4, 2.32);
  labelText(s, "YES", 3.4, 2.12, 1.0, C.posGreen, 9, true);
  addNode(s, "SPORE-FORMING\nBACILLI", 2.0, 2.75, 2.2, 0.65, C.gpbPurp, C.white, 11);
  addVLine(s, 3.1, 2.62, 2.75, C.gpbPurp);
  addVLine(s, 3.1, 3.4, 3.7, C.gpbPurp);

  addDiamond(s, "AEROBIC /\nANAEROBIC?", 2.0, 3.7, 2.2, 0.8, C.teal);

  // Aerobic spore forming
  addHLine(s, 0.3, 2.0, 4.1);
  labelText(s, "Aerobic", 0.3, 3.9, 1.0, C.posGreen, 8.5, true);
  addNode(s, "Bacillus spp.\n(Aerobic)", 0.1, 4.65, 1.8, 0.65, C.gpbPurp, C.white, 10);
  addVLine(s, 1.0, 4.55, 4.65, C.gpbPurp);
  addVLine(s, 1.0, 5.3, 5.5, C.gpbPurp);
  s.addShape(pres.ShapeType.roundRect, { x: 0.1, y: 5.5, w: 1.8, h: 1.55, fill: { color: C.navy }, line: { color: C.gpbPurp, width: 1 }, rectRadius: 0.08 });
  s.addText("B. anthracis\n(No hemolysis,\nString of pearls)\nB. cereus\n(Food poisoning)", { x: 0.15, y: 5.55, w: 1.7, h: 1.45, fontSize: 8.5, color: C.offWhite, fontFace: "Calibri" });

  // Anaerobic spore forming
  addHLine(s, 4.2, 5.2, 4.1);
  labelText(s, "Anaerobic", 4.0, 3.9, 1.4, C.negRed, 8.5, true);
  addNode(s, "Clostridium spp.\n(Anaerobic)", 4.0, 4.65, 2.0, 0.65, C.gpbPurp, C.white, 10);
  addVLine(s, 5.0, 4.55, 4.65, C.gpbPurp);

  // Clostridium branches
  addVLine(s, 5.0, 5.3, 5.5, C.gpbPurp);
  s.addShape(pres.ShapeType.roundRect, { x: 3.6, y: 5.5, w: 2.8, h: 1.55, fill: { color: C.navy }, line: { color: C.gpbPurp, width: 1 }, rectRadius: 0.08 });
  s.addText([
    { text: "C. perfringens ", options: { bold: true } }, { text: "— Double β-hemolysis, Stormy clot, Lecithinase+\n" },
    { text: "C. tetani ", options: { bold: true } }, { text: "— Drumstick spore, Spastic paralysis\n" },
    { text: "C. botulinum ", options: { bold: true } }, { text: "— Flaccid paralysis, Honey in infants\n" },
    { text: "C. difficile ", options: { bold: true } }, { text: "— Toxin A+B, Pseudomembranous colitis" },
  ], { x: 3.65, y: 5.55, w: 2.7, h: 1.45, fontSize: 8.5, color: C.offWhite, fontFace: "Calibri" });

  // Non-spore forming - NO
  addHLine(s, 7.9, 9.5, 2.32);
  labelText(s, "NO", 8.5, 2.12, 1.0, C.negRed, 9, true);
  addNode(s, "NON-SPORE\nFORMING", 8.8, 2.75, 2.2, 0.65, C.gpbPurp, C.white, 11);
  addVLine(s, 9.9, 2.62, 2.75, C.gpbPurp);
  addVLine(s, 9.9, 3.4, 3.7, C.gpbPurp);

  addDiamond(s, "MOTILITY &\nHEMOLYSIS", 8.8, 3.7, 2.2, 0.8, C.teal);

  // Listeria branch
  addHLine(s, 7.5, 8.8, 4.1);
  labelText(s, "β-hemolytic\nMotile (tumbling)", 6.6, 3.8, 2.2, C.posGreen, 8.5, true);
  addNode(s, "Listeria\nmonocytogenes", 6.5, 4.65, 2.0, 0.65, C.gpbPurp, C.white, 10);
  addVLine(s, 7.5, 4.55, 4.65, C.gpbPurp);
  addVLine(s, 7.5, 5.3, 5.5, C.gpbPurp);
  s.addShape(pres.ShapeType.roundRect, { x: 6.2, y: 5.5, w: 2.5, h: 1.55, fill: { color: C.navy }, line: { color: C.gpbPurp, width: 1 }, rectRadius: 0.08 });
  s.addText("• Tumbling motility at 4°C\n• CAMP test (+)\n• Cold enrichment\n• Meningitis: neonates/elderly\n• Unpasteurized dairy", { x: 6.25, y: 5.55, w: 2.4, h: 1.45, fontSize: 8.5, color: C.offWhite, fontFace: "Calibri" });

  // Corynebacterium branch
  addHLine(s, 11.0, 11.5, 4.1);
  labelText(s, "Non-hemolytic\nNon-motile", 10.8, 3.8, 1.8, C.negRed, 8.5, true);
  addNode(s, "Corynebacterium\ndiphtheriae", 10.5, 4.65, 2.2, 0.65, C.gpbPurp, C.white, 10);
  addVLine(s, 11.6, 4.55, 4.65, C.gpbPurp);
  addVLine(s, 11.6, 5.3, 5.5, C.gpbPurp);
  s.addShape(pres.ShapeType.roundRect, { x: 10.2, y: 5.5, w: 2.7, h: 1.55, fill: { color: C.navy }, line: { color: C.gpbPurp, width: 1 }, rectRadius: 0.08 });
  s.addText("• Metachromatic granules\n• Chinese-letter pattern\n• Elek test (toxin)\n• Tellurite agar (black)\n• Diphtheria — pseudomembrane", { x: 10.25, y: 5.55, w: 2.6, h: 1.45, fontSize: 8.5, color: C.offWhite, fontFace: "Calibri" });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — BIOCHEMICAL TESTS REFERENCE TABLE
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.accent } });
  s.addText("KEY BIOCHEMICAL TESTS — Quick Reference", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 18, color: C.navy, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  const rows = [
    ["TEST", "PRINCIPLE", "(+) RESULT", "KEY ORGANISMS", "GROUP"],
    ["Catalase", "H₂O₂ → H₂O + O₂", "Bubbles", "Staphylococcus (+) vs Streptococcus (−)", "GPC"],
    ["Coagulase", "Clots plasma fibrinogen", "Clot forms", "S. aureus (+) vs CoNS (−)", "GPC"],
    ["Oxidase", "Cytochrome c oxidase", "Blue-purple colour", "Pseudomonas, Neisseria (+)", "GNC/GNB"],
    ["Optochin", "Inhibits S. pneumoniae", "Zone of inhibition", "S. pneumoniae (S) vs Viridans (R)", "GPC"],
    ["Bacitracin", "Inhibits Group A Strep", "Zone ≥ 10 mm", "S. pyogenes (S) vs others (R)", "GPC"],
    ["CAMP Test", "Enhanced hemolysis", "Arrowhead β-hemolysis", "S. agalactiae Group B (+)", "GPC"],
    ["PYR Test", "Pyrrolidonyl peptidase", "Red colour", "S. pyogenes, E. faecalis (+)", "GPC"],
    ["Novobiocin", "Inhibits CoNS", "Zone of inhibition", "S. epidermidis (S) vs S. saprophyticus (R)", "GPC"],
    ["Indole (I)", "Tryptophanase + Kovac's", "Red ring", "E. coli (+), Klebsiella (−)", "GNB"],
    ["Methyl Red (M)", "Mixed acid fermentation", "Red colour", "E. coli, Salmonella (+)", "GNB"],
    ["Voges-Proskauer (V)", "2,3-butanediol prod.", "Red colour (VP reagent)", "Klebsiella, Enterobacter (+)", "GNB"],
    ["Citrate (C)", "Citrate as C-source", "Blue (Simmon's agar)", "Klebsiella, Enterobacter (+)", "GNB"],
    ["Urease", "Urea → NH₃ + CO₂", "Pink (Christensen's)", "Proteus, Klebsiella, H. pylori (+)", "GNB"],
    ["H₂S Production", "Sulfur reduction → FeS", "Black precipitate", "Salmonella, Proteus (+)", "GNB"],
    ["Elek Test", "Immunodiffusion toxin", "Precipitin line", "C. diphtheriae toxin (+)", "GPB"],
    ["Nagler's Reaction", "Lecithinase activity", "Turbidity halved", "C. perfringens (+)", "GPB"],
  ];

  const groupColors = { GPC: C.gpcBlue, GNC: C.gncOrange, GNB: C.gnbGreen, GPB: C.gpbPurp };
  const colW  = [1.6, 2.4, 2.1, 4.2, 0.85];
  const colX  = [0.15, 1.8, 4.25, 6.4, 10.65];
  const rowH  = 0.36;
  const startY = 0.75;

  rows.forEach((row, ri) => {
    row.forEach((cell, ci) => {
      const y = startY + ri * rowH;
      const isHeader = ri === 0;
      const grp = row[4];
      let bg = isHeader ? C.teal : (ri % 2 === 0 ? "#1A3050" : C.midBlue);
      if (!isHeader && ci === 4) bg = groupColors[grp] || C.midBlue;
      s.addShape(pres.ShapeType.rect, {
        x: colX[ci], y, w: colW[ci], h: rowH,
        fill: { color: bg }, line: { color: C.navy, width: 0.3 },
      });
      s.addText(cell, {
        x: colX[ci] + 0.05, y, w: colW[ci] - 0.1, h: rowH,
        fontSize: isHeader ? 9 : 7.8,
        color: C.white, bold: isHeader, fontFace: "Calibri",
        align: ci === 0 ? "left" : "left", valign: "middle", margin: 1,
      });
    });
  });

  // Footer
  s.addShape(pres.ShapeType.rect, { x: 0, y: 7.15, w: 13.3, h: 0.35, fill: { color: C.accent } });
  s.addText("I = Indole  •  M = Methyl Red  •  V = Voges-Proskauer  •  C = Citrate  →  IMViC pattern distinguishes E. coli (++-−) from Klebsiella (−−++) from Enterobacter (−−++)", {
    x: 0.3, y: 7.17, w: 12.7, h: 0.3, fontSize: 9, color: C.navy, bold: true, align: "center", fontFace: "Calibri",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — IMViC PATTERN TABLE
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.offWhite } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.gnbGreen } });
  s.addText("IMViC TESTS — Differentiating Gram-Negative Bacilli", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 17, color: C.white, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  // IMViC explanation boxes
  const tests = [
    { letter: "I", name: "INDOLE", principle: "Tryptophanase breaks down tryptophan\n→ Indole detected by Kovac's reagent", pos: "Red ring at surface", neg: "No colour change", color: "#1565C0" },
    { letter: "M", name: "METHYL RED", principle: "Mixed acid fermentation\n→ Lowers pH below 4.4", pos: "RED colour", neg: "Yellow/orange (VP+)", color: "#2E7D32" },
    { letter: "V", name: "VOGES-PROSKAUER", principle: "2,3-butanediol production\nBarritt's reagent A+B", pos: "RED colour", neg: "No colour change", color: "#6A1B9A" },
    { letter: "C", name: "CITRATE", principle: "Citrate as sole carbon source\nAlkaline shift (Simmon's agar)", pos: "BLUE (Prussian blue)", neg: "Green (no change)", color: "#E65100" },
  ];

  tests.forEach((t, i) => {
    const x = 0.3 + i * 3.2;
    s.addShape(pres.ShapeType.roundRect, { x, y: 0.8, w: 3.0, h: 2.6, fill: { color: t.color }, line: { color: C.white, width: 0.5 }, rectRadius: 0.1 });
    s.addText(t.letter, { x, y: 0.85, w: 3.0, h: 0.8, fontSize: 32, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
    s.addText(t.name, { x, y: 1.6, w: 3.0, h: 0.4, fontSize: 10, color: C.accent, bold: true, align: "center", fontFace: "Calibri" });
    s.addText(t.principle, { x: x+0.1, y: 2.0, w: 2.8, h: 0.8, fontSize: 8.5, color: C.offWhite, align: "center", fontFace: "Calibri" });
    s.addShape(pres.ShapeType.roundRect, { x: x+0.15, y: 2.85, w: 1.25, h: 0.4, fill: { color: C.posGreen }, line: { color: C.posGreen }, rectRadius: 0.05 });
    s.addText("(+) " + t.pos, { x: x+0.15, y: 2.85, w: 1.25, h: 0.4, fontSize: 7.5, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
    s.addShape(pres.ShapeType.roundRect, { x: x+1.5, y: 2.85, w: 1.25, h: 0.4, fill: { color: C.negRed }, line: { color: C.negRed }, rectRadius: 0.05 });
    s.addText("(−) " + t.neg, { x: x+1.5, y: 2.85, w: 1.25, h: 0.4, fontSize: 7.5, color: C.white, bold: true, align: "center", fontFace: "Calibri" });
  });

  // IMViC result table
  s.addText("IMViC PATTERN COMPARISON TABLE", {
    x: 0.3, y: 3.5, w: 12.7, h: 0.4, fontSize: 13, color: C.navy, bold: true, fontFace: "Calibri",
  });

  const imvicData = [
    ["Organism", "Indole (I)", "Methyl Red (M)", "VP (V)", "Citrate (C)", "Lactose", "H₂S", "Urease"],
    ["E. coli", "+", "+", "−", "−", "+", "−", "−"],
    ["Klebsiella pneumoniae", "−", "−", "+", "+", "+", "−", "+"],
    ["Enterobacter cloacae", "−", "−", "+", "+", "+", "−", "−"],
    ["Salmonella typhi", "−", "+", "−", "−", "−", "+", "−"],
    ["Salmonella (non-typhi)", "−", "+", "−", "+", "−", "+", "−"],
    ["Shigella spp.", "−/+", "+", "−", "−", "−", "−", "−"],
    ["Proteus mirabilis", "−", "+", "−", "+", "−", "+", "+"],
    ["Yersinia enterocolitica", "+", "+", "−", "−", "−", "−", "+"],
    ["Vibrio cholerae", "+", "−", "+", "+", "−", "−", "−"],
  ];

  const imCols = [2.8, 1.0, 1.3, 1.0, 1.0, 0.9, 0.8, 0.9];
  const imX = [0.15, 3.0, 4.05, 5.4, 6.45, 7.5, 8.45, 9.3];
  const imRowH = 0.38;
  const imStartY = 3.95;

  imvicData.forEach((row, ri) => {
    row.forEach((cell, ci) => {
      const y = imStartY + ri * imRowH;
      let bg = ri === 0 ? C.navy : (ri % 2 === 0 ? "#E8F4E8" : C.white);
      if (ri > 0 && ci > 0) {
        if (cell === "+") bg = "#C8E6C9";
        else if (cell === "−") bg = "#FFCDD2";
        else bg = "#FFF9C4";
      }
      s.addShape(pres.ShapeType.rect, {
        x: imX[ci], y, w: imCols[ci], h: imRowH,
        fill: { color: bg }, line: { color: "#CCCCCC", width: 0.3 },
      });
      s.addText(cell, {
        x: imX[ci]+0.05, y, w: imCols[ci]-0.1, h: imRowH,
        fontSize: ri === 0 ? 8.5 : 9, color: ri === 0 ? C.white : C.navy,
        bold: ri === 0 || ci === 0, fontFace: "Calibri",
        align: ci === 0 ? "left" : "center", valign: "middle", margin: 1,
      });
    });
  });

  s.addShape(pres.ShapeType.rect, { x: 0, y: 7.15, w: 13.3, h: 0.35, fill: { color: C.gnbGreen } });
  s.addText("GREEN = Positive  |  RED = Negative  |  YELLOW = Variable  •  Mnemonic: IMViC = I is Indole, M is Methyl Red, V is Voges-Proskauer, C is Citrate", {
    x: 0.3, y: 7.18, w: 12.7, h: 0.28, fontSize: 8.5, color: C.white, bold: true, align: "center", fontFace: "Calibri",
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — CLINICAL EXAMPLES SUMMARY
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.65, fill: { color: C.accent } });
  s.addText("CLINICAL CORRELATES — Organism → Disease", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.45, fontSize: 18, color: C.navy, bold: true, fontFace: "Calibri", charSpacing: 2,
  });

  const groups = [
    {
      title: "GPC — Gram-Positive Cocci", color: C.gpcBlue, x: 0.15, y: 0.75, w: 3.1,
      items: [
        "S. aureus → MRSA, Boils, Food poisoning, TSS",
        "S. pyogenes → Strep throat, Rheumatic fever",
        "S. pneumoniae → Pneumonia, Meningitis, Otitis",
        "S. agalactiae → Neonatal meningitis/sepsis",
        "S. epidermidis → Catheter biofilm, Prosthetic valve",
        "S. saprophyticus → UTI (young women)",
        "E. faecalis → Endocarditis, UTI",
      ],
    },
    {
      title: "GNC — Gram-Negative Cocci", color: C.gncOrange, x: 3.4, y: 0.75, w: 3.1,
      items: [
        "N. meningitidis → Bacterial meningitis, Septicaemia",
        "N. gonorrhoeae → Gonorrhea, PID, Ophthalmia neon.",
        "M. catarrhalis → Otitis media, Sinusitis, LRTI",
        "",
        "BOTH: Oxidase (+), diplococcal morphology",
        "DIFF: Maltose (+) → Meningitidis",
        "DIFF: Maltose (−) → Gonorrhoeae",
      ],
    },
    {
      title: "GNB — Gram-Negative Bacilli", color: C.gnbGreen, x: 6.65, y: 0.75, w: 3.1,
      items: [
        "E. coli → UTI, Neonatal meningitis, Traveller's diarrhea",
        "Klebsiella → Lobar pneumonia, UTI, Liver abscess",
        "Salmonella typhi → Typhoid, Rose spots, Widal+",
        "Shigella → Bloody dysentery (non-motile, H₂S−)",
        "Pseudomonas → Burns, CF, Nosocomial (pyocyanin)",
        "Vibrio cholerae → Rice-water stool, dehydration",
        "Proteus → UTI, swarming on agar, urease+",
      ],
    },
    {
      title: "GPB — Gram-Positive Bacilli", color: C.gpbPurp, x: 9.9, y: 0.75, w: 3.25,
      items: [
        "B. anthracis → Anthrax (no spore in vivo, antiphagocytic)",
        "C. perfringens → Gas gangrene, Food poisoning",
        "C. tetani → Tetanus (spastic, drumstick spore)",
        "C. botulinum → Flaccid paralysis, Honey→infants",
        "C. difficile → Pseudomembranous colitis, Toxin A+B",
        "L. monocytogenes → Neonatal/elderly meningitis",
        "C. diphtheriae → Diphtheria, Pseudomembrane, Elek+",
      ],
    },
  ];

  groups.forEach(g => {
    s.addShape(pres.ShapeType.roundRect, { x: g.x, y: g.y, w: g.w, h: 6.45, fill: { color: "#0F2740" }, line: { color: g.color, width: 1.5 }, rectRadius: 0.1 });
    s.addShape(pres.ShapeType.roundRect, { x: g.x, y: g.y, w: g.w, h: 0.5, fill: { color: g.color }, line: { color: g.color }, rectRadius: 0.1 });
    s.addText(g.title, { x: g.x+0.05, y: g.y, w: g.w-0.1, h: 0.5, fontSize: 9.5, color: C.white, bold: true, align: "center", valign: "middle", fontFace: "Calibri" });
    g.items.forEach((item, ii) => {
      if (!item) return;
      const iy = g.y + 0.6 + ii * 0.83;
      const parts = item.split("→");
      s.addText([
        { text: parts[0] + "→", options: { bold: true, color: g.color } },
        { text: parts[1] || "", options: { color: C.offWhite } },
      ], { x: g.x+0.12, y: iy, w: g.w-0.24, h: 0.78, fontSize: 8.8, fontFace: "Calibri", valign: "top" });
    });
  });
}

// ═══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — END / SUMMARY
// ═══════════════════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 7.5, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 13.3, h: 0.06, fill: { color: C.accent } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 7.44, w: 13.3, h: 0.06, fill: { color: C.accent } });

  s.addText("DIAGNOSTIC ALGORITHM SUMMARY", {
    x: 1, y: 0.5, w: 11.3, h: 0.8, fontSize: 28, color: C.white, bold: true, align: "center", fontFace: "Calibri", charSpacing: 3,
  });

  const steps = [
    { n: "1", title: "GRAM STAIN", body: "Purple (Gram+) or Pink (Gram−)\nCell shape: Cocci vs Bacilli", color: C.teal },
    { n: "2", title: "CATALASE / OXIDASE", body: "GPC: Catalase → Staphylococcus vs Streptococcus\nGNC/GNB: Oxidase → Neisseria / Pseudomonas", color: C.gpcBlue },
    { n: "3", title: "PRIMARY TESTS", body: "Coagulase / Hemolysis / Lactose (MacConkey)\nSugar fermentation / Motility / Spore stain", color: C.gnbGreen },
    { n: "4", title: "CONFIRMATORY TESTS", body: "IMViC / Novobiocin / Optochin / CAMP / Elek\nMass spec (MALDI-TOF) / Molecular probes", color: C.gpbPurp },
    { n: "5", title: "FINAL ID + SENSITIVITIES", body: "Species identification + Antibiogram (MIC)\nReport to clinician — guide targeted therapy", color: C.gncOrange },
  ];

  steps.forEach((st, i) => {
    const y = 1.5 + i * 1.05;
    s.addShape(pres.ShapeType.roundRect, { x: 1.0, y, w: 11.3, h: 0.9, fill: { color: "#132235" }, line: { color: st.color, width: 1.5 }, rectRadius: 0.08 });
    s.addShape(pres.ShapeType.roundRect, { x: 1.0, y, w: 0.7, h: 0.9, fill: { color: st.color }, line: { color: st.color }, rectRadius: 0.08 });
    s.addText(st.n, { x: 1.0, y, w: 0.7, h: 0.9, fontSize: 22, color: C.white, bold: true, align: "center", valign: "middle", fontFace: "Calibri" });
    s.addText(st.title, { x: 1.8, y: y+0.05, w: 3.0, h: 0.4, fontSize: 11, color: st.color, bold: true, fontFace: "Calibri" });
    s.addText(st.body, { x: 1.8, y: y+0.44, w: 10.3, h: 0.42, fontSize: 8.8, color: C.offWhite, fontFace: "Calibri" });
    if (i < steps.length - 1) {
      s.addShape(pres.ShapeType.line, { x: 6.4, y: y+0.9, w: 0, h: 0.15, line: { color: C.accent, width: 1.5, endArrowType: "arrow" } });
    }
  });

  s.addText("Source: Medical Microbiology 9e (Murray) • Jawetz Medical Microbiology 28e • Sherris & Ryan's Medical Microbiology 8e", {
    x: 1, y: 7.1, w: 11.3, h: 0.3, fontSize: 8.5, color: "#5A7A9A", align: "center", fontFace: "Calibri",
  });
}

// ── Write file ────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/bacteriology-pptx/Bacteriology_Diagnostic_Flowcharts.pptx" })
  .then(() => console.log("SUCCESS: File written."))
  .catch(e => { console.error("ERROR:", e); process.exit(1); });
Running Command

cd /home/daytona/workspace/bacteriology-pptx && node build.js 2>&1

Running Command

ls -lh /home/daytona/workspace/bacteriology-pptx/Bacteriology_Diagnostic_Flowcharts.pptx

Your presentation is ready:

Bacteriology Diagnostic Flowcharts

Presentation · PPTX


Here's what's inside the 10-slide deck (587 KB):
SlideContent
1 - TitleBold dark-navy opener with 4 color-coded group badges (GPC/GNC/GNB/GPB)
2 - Master AlgorithmSingle-page overview: Gram Stain → Shape → 4 branches with navigation arrows
3 - GPC FlowchartCatalase → Coagulase → Hemolysis → Optochin/Bacitracin → specific species
4 - GNB FlowchartOxidase → Lactose (MacConkey) → H₂S → Enterobacteriaceae vs Non-Enterobact.
5 - GNC FlowchartOxidase (+) → Sugar fermentation → N. meningitidis vs N. gonorrhoeae + Moraxella
6 - GPB FlowchartSpore-forming → Aerobic/Anaerobic → Bacillus/Clostridium/Listeria/Corynebacterium
7 - Biochemical Tests16-row reference table: test, principle, (+) result, key organisms, group
8 - IMViC TableExplanation boxes + color-coded comparison table (green=+, red=−) for 10 organisms
9 - Clinical Correlates4-column layout: every group → organism → disease clue
10 - Summary Algorithm5-step diagnostic workflow for presenting to students
Design choices: Navy dominant background, amber accent, and distinct colors per group (blue=GPC, orange=GNC, green=GNB, purple=GPB) so students can instantly orient themselves on any slide.
This is a shared conversation. Sign in to Orris to start your own chat.