Calculating CDC Fecal and Vomit Incident Response for Pools

Contamination Response is a single-file, offline calculator that walks an operator through the CDC fecal/vomit incident protocol [1]: the hyperchlorination dose for the affected body of water, the CT-derived hold time, and a reopening countdown that survives a page reload. It is not a substitute for the CDC recommendations or the county health code — it is the arithmetic done correctly under stress [2].

The problem

A fecal incident closes a pool immediately, and everything that happens next is math performed by someone who would rather be doing anything else: how much chlorine raises this specific body of water to the target concentration, how long the hold lasts, and what clock time the pool can reopen. The diarrheal case adds a trap — cyanuric acid slows Cryptosporidium inactivation several-fold, so the standard 12.75-hour timetable is only valid at CYA ≈ 0, a condition that is easy to forget while the deck is being cleared. The tool hard-codes the protocol so the operator supplies readings, not recall.

How it works

Pick the incident type (formed stool / vomit, or diarrheal), the body of water, and enter the current FC, pH, and CYA readings plus the unstabilized chlorine on hand. The tool renders a numbered protocol — clear the water and close shared-filtration pools, remove the material (with a do not vacuum warning for diarrheal incidents), raise FC to target with a computed dose, re-balance pH to 7.2–7.5, hold — followed by a countdown timer. The timer starts only when the operator confirms FC is verified at target, and it persists through a reload or a dead tablet battery via localStorage. Copy incident log formats the whole event — readings at observation, dose, hold, reopen time — as a text block for DigiQuatics.

Contamination Response showing incident type selection, the numbered protocol with computed dose, and the hold countdown
Incident type, computed hyperchlorination dose, and the disinfection hold countdown. Placeholder pending a real screenshot.

The math

Targets and hold times

The two incident classes implement the CDC response values [1]:

The hold is computed as:

hold_minutes = max(minHold, CT / targetFC)

For diarrheal, 15,300 ÷ 20 = 765 minutes = 12.75 h exactly. For formed stool, CT 45 ÷ 2 = 22.5 minutes, floored to the CDC field-guidance 30-minute minimum — the minHold term exists precisely so the CT arithmetic can't undercut published guidance.

Dose

The hyperchlorination dose reuses the same per-10,000-gallon constants as the Pump Room calculator [3], restricted to unstabilized chlorines (liquid 12.5%, cal-hypo 65/73%) — stabilized products would add CYA at the worst possible moment. Verified worked example: raising the Competition Pool (315,643 gal) from 3 to 20 ppm requires 44.9 gal of liquid chlorine 12.5%, or 68.8 lb of cal-hypo 65%.

The CYA interlock

For diarrheal incidents only, the CYA field is an interlock, not a note:

Formed-stool incidents ignore CYA, matching the CDC guidance where stabilizer sensitivity applies to Crypto hyperchlorination.

Editing the config

Three tables at the top of the <script> block hold everything: POOLS (the four bodies and volumes, shared with Pump Room), INCIDENTS (target FC, CT, and minHold per incident class), and CHLOR (the unstabilized products and strengths). Some counties specify a 25-minute formed-stool hold rather than 30 — that is a one-line edit to minHold in the INCIDENTS table.

Limitations

References

  1. CDC — Fecal Incident Response Recommendations for Aquatic Staff
  2. Contamination Response Calculator
  3. Pump Room Chemistry Calculator — source of the shared dosing constants and pool volumes.