> **Disclaimer:** Hobbyist decision-tree sketch for a future app — not veterinary diagnosis. Verify doses on current labels. Weigh salt. See [about.html](about.html).

# Symptom decision tree (compact — for future app)

Input: one primary symptom + water-test flags. Output: ordered checks → likely cards → stop/escalate rules.

**Always run first:** ammonia, nitrite, nitrate, pH, temp, aeration. If ammonia/nitrite elevated or gasping → water/oxygen path before meds.

## Decision nodes

### A. White spots
1. Only on gill covers / pec leading rays / around eyes of males? → **breeding stars** (not ich). No treatment.
2. Salt-grain spots body-wide? → **Ich** card. Check temp swing.
3. Dusty yellow sheen? → **Oodinium**.
4. Fuzzy white on wounds/mouth? → **Columnaris**, not ich.

### B. Flashing
1. Occasional single flash? → observe + water quality.
2. Persistent + red dots under chin/back? → **Costia**.
3. Persistent + frayed fins / thick slime? → **Skin flukes** / mixed protozoa.
4. Persistent + gasping / gloppy gills? → **Gill flukes** first.

### C. Gasping / piping
1. Morning pond, big fish first? → **oxygen crash** / algae respiration.
2. Dark red-brown gills? → **toxins / fried gills** — water changes, no harsh baths.
3. Gloppy / hamburger gills? → **parasites (dacs/costia/etc.)**.
4. Mottled bluish gill streaks + heat/organics? → **branchiomycosis**.

### D. Clamped + lethargy + thick slime
1. pH &lt; ~5.5 or crash? → **acidosis**.
2. Cool water / overwinter? → **Chilodonella**.
3. Else → scrape if possible; supportive salt at **0.1% = 1 ppt** (grams, not ppm).

### E. Ulcers / red sores
1. Red edge, white center → **Columnaris** lean.
2. White edge, red center → **Aeromonas** lean.
3. Always: **parasites first**, then wound protocol.
4. Open wounds + heat only after parasite step.

### F. Pinecone / bilateral pop-eye / ascites
1. Single eye only after trauma/spawn? → mechanical; clean water + light salt.
2. Parasites likely? → treat parasites **before** heat.
3. Dropsy path: hospital, **no NaCl**, small Epsom, aeration, consider heat protocol + medicated food.
4. Chronic non-response → **mycobacteria / kidney** escalate.

### G. Floating / inverted
1. Right after floating food? → soak/sink food; short fast; peas.
2. After gravel vacuum? → suspect **H₂S**; aerate; consider bare bottom.
3. Mushy belly / dumpy peduncle / white thin poop? → internal infection path.
4. Else → floating card (Epsom/shallow recovery) with ammonia watch.

### H. Visible macro parasite
1. Y-fork worm in flesh → **anchor worm** (pull + wound + environment).
2. Shield with eyes → **Argulus**.
3. Segmented → **leech**.

### I. Chronic thin / not eating for weeks, scrapes clean
→ **Mycobacteria** differential; isolate; gloves; escalate to aquatic vet; stop endless OTC stacking.

### J. Sudden death
Mouth rock → **rockitis**. Else: chlorine, pH shock, temp shock, ammonia/nitrite, oxygen, bad food, pesticide.

## Stop rules (encode in app)
- Fried gills → block formalin/malachite/PP baths.
- Active likely parasites → block heat-only bacterial protocol.
- Pinecone dropsy → block high NaCl recommendations.
- Course day == planned end & asymptomatic → prompt **STOP**.
- PP selected + formalin selected → hard block combination.
- ppt/ppm fields → validate `ppt * 1000 == ppm` within tolerance; reject 0.1 ppm when user meant 0.1%.

## Salinity helper defaults
- Supportive: 0.1% = 1 ppt = 1000 ppm ≈ 3.79 g/US gal.
- Never accept “0.1% = 0.1 ppm”.
- Prefer grams; tsp optional with 5 g/tsp assumption disclaimer.

## Source tags for UI footnotes
`library-index` · `parasite-chart` · `myco-generic` · `salinity-table-2026` · `salt-tsp-contradiction`
