How a report finds a responder: the case engine and dispatch
Every emergency, rescue, cruelty report, wildlife call, surrender, civic complaint and lost or found pet is one Case, with one state machine and one timeline. It gets a code such as EP-2806 and a public link the reporter can follow without signing in.
Who gets asked
Responders publish their coverage: the area, the case types, situations and species groups they take, and whether they are on duty. Candidates come from one MongoDB $geoNear query with every eligibility filter inside the pipeline, so the nearest eligible responders come back first. A volunteer is asked only while on duty and in good standing with an NGO; a free agent only about low-risk cases, such as an injured or trapped animal.
The defaults
| Step | Default |
|---|---|
| Offers per round | 3, each open for 60 seconds |
| Search rings | 3 km, then 8 km, then 15 km |
| Widen when nobody accepts | after 5 minutes |
| Alert the country's fallback responders | after 15 minutes |
| Mark unanswered and send the reporter the helpline | after 30 minutes |
| Nudge an accepted responder who has gone quiet | after 20 minutes |
| Flag custody nobody confirmed | after 2 hours |
An owner's SOS skips the rounds and alerts every clinic, ambulance and NGO within 25 km at once. Lost and found reports never dispatch: they alert nearby guardians and NGOs and run the matching instead.
Getting the details right
Accepting is compare-and-set, so when two responders tap Accept together one wins and the other gets a 409. The timers run in one place only, the phone backend, every 10 seconds, behind a superadmin switch that pauses them. The probe that drove the clock found a 24-hour clinic 17 km away that was never alerted at the fallback step, because the query still filtered it by its own 12 km radius. Fallbacks now answer country-wide.


















