Skip to content
NeerSetu

Methodology v1.0.0

How NeerSetu ranks, and where it stops

NeerSetu is a historical screening and prioritisation aid. It is not a current live water report, not a safety certificate, not a legal compliance finding, and not evidence that idol immersion caused any reading. All numbers below are computed from the bundled source files at build time.

Data inventory

  • bhopal_ghats_2023_2025.csv — 1,524 rows, one parameter reading each, 7 sites, 2023–2025, Ganesh and Durga, pre / during / one week after. The only input to rankings.
  • sample_bhopal_2025.csv — 453 rows; verified identical to the primary file's 2025 rows and never added to totals.
  • mp_immersion_sites_2023_2025.csv — 21,600 statewide rows; background only, excluded (no site standardisation; 879 rows flagged needs_check; some tables duplicated across pages).
  • cpcb_water_quality_criteria.csv — 19 criteria rows, classes A–E.

Source: organiser pack Vishal4742/bhopal-impact-lab-2026-problem-statements at commit 6b96823f27. Reports: 2023; 2024; 2025. Full hashes and anomaly checks are in docs/DATA_AUDIT.md.

Why Class B, and what it is not

Immersion ghats are places where people enter the water, so CPCB Class B (outdoor bathing, organised) is a reasonable comparison. It is an explicit choice made by this tool — the ghats have not been officially designated Class B here, and a reading “outside Class B screening” is not a legal violation.

Class B has four criteria. The ghat data contains three of them (DO, BOD, pH). Total coliform was not measured, so no site can be described as meeting Class B in full.

Criteria used (from the supplied CSV)

Criterion IDClassParameterRuleUsed for
CPCB-A-total-coliformATotal coliformmax 50 MPN/100 mlShown for reference only
CPCB-A-phApHrange 6.5-8.5 Shown for reference only
CPCB-A-dissolved-oxygenADissolved oxygenmin 6 mg/lShown for reference only
CPCB-A-bod-5-days-20cABOD (5 days 20C)max 2 mg/lShown for reference only
CPCB-B-total-coliformBTotal coliformmax 500 MPN/100 mlNot measured in ghat data
CPCB-B-phBpHrange 6.5-8.5 Screening of “pH”
CPCB-B-dissolved-oxygenBDissolved oxygenmin 5 mg/lScreening of “Dissolved oxygen”
CPCB-B-bod-5-days-20cBBOD (5 days 20C)max 3 mg/lScreening of “BOD”
CPCB-C-total-coliformCTotal coliformmax 5000 MPN/100 mlShown for reference only
CPCB-C-phCpHrange 6-9 Shown for reference only
CPCB-C-dissolved-oxygenCDissolved oxygenmin 4 mg/lShown for reference only
CPCB-C-bod-5-days-20cCBOD (5 days 20C)max 3 mg/lShown for reference only
CPCB-D-phDpHrange 6.5-8.5 Shown for reference only
CPCB-D-dissolved-oxygenDDissolved oxygenmin 4 mg/lShown for reference only
CPCB-D-free-ammonia-as-nDFree ammonia (as N)max 1.2 mg/lShown for reference only
CPCB-E-phEpHrange 6.0-8.5 Shown for reference only
CPCB-E-electrical-conductivity-at-25cEElectrical conductivity at 25Cmax 2250 micromhos/cmShown for reference only
CPCB-E-sodium-absorption-ratioESodium absorption ratiomax 26 Shown for reference only
CPCB-E-boronEBoronmax 2 mg/lShown for reference only

Comparisons are inclusive: DO 5.0 is within, 4.9 outside; BOD 3.0 within, 3.1 outside; pH 6.5 and 8.5 within, 6.49 and 8.51 outside. The immersion parameter BOD is mapped explicitly to BOD (5 days 20C); nothing is matched loosely. COD, solids, turbidity, conductivity and the four metals have no Class B limit in this file and are shown as contextual readings — the Class E conductivity limit is not applied.

Missing, censored and zero values

  • A printed 0 is a real numeric zero (DO = 0 appears 4 times, all at Bairagarh).
  • Blank, _, -, *, ** → not sampled. Never 0, never clean.
  • BDL (below detection limit) and ND → censored: not zero, not missing, and not compared because no detection limit is published.
  • A site/festival/year with no table in the pack → not in source. Shown as a gap; no rows are invented.
  • None of these contribute a severity of zero. They contribute nothing to the score and are counted in coverage.

Status counts: numeric 1289 · below_detection_limit 174 · not_sampled 61; not-in-source windows: 2.

Historical concern index (non-official heuristic)

For each numeric DO, BOD or pH reading, a bounded magnitude outside the screening level:

DO severity  = clamp((5 − DO) / 5, 0, 1)
BOD severity = clamp((BOD − 3) / 3, 0, 1)
pH severity  = clamp(max(6.5 − pH, pH − 8.5, 0) / 2, 0, 1)

These are not probabilities, toxicity or health risk. Readings are grouped into windows = site × year × festival (Ganesh and Durga are never merged). Per window: mean severity, fraction outside, and whether any reading is outside. Windows are averaged with recency weights 2023 = 1, 2024 = 1.25, 2025 = 1.5:

concernIndex = 100 × ( 0.45 × weighted mean severity
                     + 0.35 × weighted fraction outside
                     + 0.2 × windows with ≥1 outside / sampled windows )

A site is scored only with ≥3 numeric readings across ≥2 of the three parameters in the selected scope; otherwise it is insufficient evidence, unranked, and never shown as low. Display bands: ≥50 elevated, ≥20 moderate, below that “lower observed” (never “safe”). Ties: more numeric readings first, then name. Filters recompute everything from matching rows; the parameter view never changes the score.

Worked example, all years — Bairagarh (Sant Hirdaram) kund: mean severity 0.475, fraction outside 0.625, recurrence 5/5 ⇒ index 63.3.

Data note: BOD exceeds 3 mg/l in 100 of 112 numeric readings across all sites, so every scored site has a high fraction-outside component. DO severity and recurrence are what separate them. The index is for ordering attention, not for comparing to any official scale.

Evidence coverage (kept separate from concern)

Two transparent ratios instead of one confidence percentage:

  • Numeric DO/BOD/pH = numeric readings ÷ DO/BOD/pH rows that exist in the source (including not sampled and BDL).
  • Festival tables = site × year × festival windows present ÷ nominal windows in scope (3 years × 2 festivals = 6 for the full range). The nominal frame is an analytical reference, not an official sampling mandate.

A phase grid shows each pre / during / after slot as full, partial, not sampled, or no table. Site identity confidence is a separate label.

Sampling / verification priority

  1. Urgent re-test — any numeric DO ≤ 2.5 mg/l (including 0) or BOD ≥ 9 mg/l in scope. Heuristic triggers, not official remediation thresholds.
  2. Priority re-test — any screening exceedance, or the latest year in scope is missing a festival table, has only during-immersion readings, or has no numeric reading.
  3. Routine verification — otherwise. Still not a safety or approval determination.

A separate identity flag is raised for medium/low name confidence and coexists with any priority — an ambiguous name never lowers urgency. No action is dispatched automatically.

Source pages and how they were verified

source_page was tested against the bundled PDFs: it is the 1-based PDF viewer page (the reports print no separate page numbers). An automated text check found the printed parameter line on the cited page for 508 of 508 parameter lines (1524 rows). Only those rows get a #page=N link; anything else is labelled “not independently verified”. 11 tables covering every year × festival were additionally checked by eye against rendered pages (see the data audit).

A text match proves the values occur on that page; site attribution relies on the organiser's table parsing plus the visual checks.

Site names

The pack maps varied printed names to seven standard names. Rani Kamlapati ghat / Kamla Park kund is medium confidence: Ganesh tables print a Kamla Park kund, Durga tables print a Rani Kamlapati ghat on the Lower Lake. They may be two places. NeerSetu keeps the pack's single record but flags it everywhere, and on the map shows both candidate places joined by a dashed line.

How the map places ghats

The MPPCB reports and the CSV contain no coordinates. The map uses OpenStreetMap features found by name and the lake printed in the CSV, and labels every marker with how it was placed:

  • OSM feature with the ghat's name — OSM feature whose name matches the ghat (centroid). Closest available, still unverified on the ground.
  • Locality named on the report — OSM locality named in the printed site label. The kund is somewhere in this locality.
  • Lake only — ghat point unknown — Centroid of the water body named in the CSV. Only the lake is known, not the ghat.
  • Name match only — weak — OSM place with a similar name. Weak: may not be the right place.
  • Bairagarh (Sant Hirdaram) kund: Bairagarh (OSM suburb) (OSM node/3748732480)
  • Prempura ghat: “prempura ghat” (OSM park) (OSM way/922790998)
  • Khatlapura ghat: Lower Lake (water body only) (OSM way/28672430)
  • Rani Kamlapati ghat / Kamla Park kund: Ganesh tables: Kamla Park kund — near OSM “Rani Kamlapati Mahal” (OSM way/1002690457); Durga tables: Rani Kamlapati ghat — Lower Lake (water body only) (OSM way/28672430)
  • Hathaikheda dam / kund: “Hataikheda Dam” (OSM water body) (OSM way/28826931)
  • Malikhedi kund: “Mali Khedi” (OSM village) — name match only (OSM node/11358718540)
  • Shahpura lake ghat: Shahpura Lake (water body only) (OSM way/28672561)

Markers sharing one lake centre are fanned out slightly so both can be clicked; that offset is cosmetic. India outline: Natural Earth, India point-of-view edition, simplified for display — not an authoritative boundary. Lakes and anchors © OpenStreetMap contributors (ODbL), queried 11 Oct 2026; raw responses are in source-data/geo/. Confirm the physical point before dispatching a team.

How “today” changes the plan

The home page reads today's date in IST (or ?asOf=YYYY-MM-DD for rehearsal) and finds the visarjan being prepared for in src/lib/calendar.ts — currently only dates with a citable source (Durga visarjan 20 Oct 2026, from the organiser guide). The ranking is then recomputed on that festival's past seasons only, and the action list is dated around MPPCB's own design: pre-immersion baseline before the day, during-immersion on the day, and one week after. Steps whose window has passed are shown as closed. Nothing is forecast: the plan says where history argues for testing first, not what the water is like now.

How briefs are built and checked

Every measurement, comparison and citation in a brief is assembled deterministically from the selected rows. If an AI provider is configured on the server, it may only rewrite the purpose sentence and the action wording. Its output must be strict JSON; every number must already be in the facts; evidence and site IDs must be on the allow-list; words implying safety, causation, legal status or health effects are rejected. Any failure, timeout or missing key falls back to the template, which is always complete. Briefs carry an unticked “Reviewed by officer” marker.

Hindi text is a team translation and should be reviewed by a native-speaking officer before circulation.

Assistant and planning guidance

The Khatlapura past-readings starter is labelled “Source answer”: its measurements and citations are assembled directly from historical rows, without AI. Follow-up questions can use the configured AI provider. Both paths use the same evidence checks.

The assistant explains selected historical observations and the general procedures below in English or Hinglish. These procedures are team-authored planning guidance, not MPPCB findings, official orders or engineered treatment plans. Each substantive reply links its observations or guidance. Numeric claims must be present in the cited source. Current conditions and permissions still require local confirmation. Replies do not replace an officer or technical review.

Recent messages are sent to the configured AI provider only when a question is submitted. The conversation stays in browser memory, is not saved by NeerSetu, and is cleared by starting a new conversation or reloading. Do not share personal details or secrets. Provider retention follows the provider's own policy. If AI is unavailable or a reply fails checks, an explicit error is shown rather than a canned answer presented as AI.

Shoreline and floating-waste cleanup

Separate flowers and other organic offerings from plastic, cloth and packaging at collection points. Collect reachable litter from the bank with litter pickers, gloves and closed footwear. Arrange municipal collection and approved disposal; do not leave filled bags at the bank. Trained municipal crews should retrieve floating debris with nets or skimmers from designated access points. Volunteers should not enter the water, lean over unstable edges, handle sharps, or operate boats. Mark sharps for trained handlers. General planning guidance, not a site-specific instruction or official order.

Preventing waste at immersion

Coordinate designated collection points for flowers, plastic and packaging before immersion. Keep bins away from edges and arrange collection before they overflow. Ask the local authority about designated immersion facilities and current rules; historical site names do not confirm current permission. Encourage organisers to separate removable decorations and use locally permitted materials. Brief volunteers on bank-only litter collection, queue routes and escalation contacts. Do not promise that any idol material or facility makes the lake pollution-free.

Low oxygen and oxygen demand

Dissolved oxygen means oxygen available in the water. BOD means oxygen used while organic material breaks down; a high reading warrants investigation, not a claim about the cause. For a current concern, request fresh dissolved oxygen and oxygen-demand testing at documented locations and times. Ask the technical team to inspect possible wastewater inflows and accumulated organic waste. Removal of visible waste does not prove dissolved pollution is resolved. Aeration may be considered by qualified lake-management staff after checking measurements, lake conditions, equipment placement and power arrangements. Do not prescribe aerator size, duration, chemical dose or guaranteed recovery.

Fresh testing and evidence

Coordinate fresh samples through the authorised monitoring team or laboratory. Record the exact sampling point, date, time, recent weather, visible inflows and photos. Compare documented samples before, during and after the activity where appropriate. Let the laboratory specify containers, preservation, transport and test methods. Include dissolved oxygen, BOD and pH screening and ask for microbial testing where water-contact decisions are being considered. Historical results cannot tell us today's quality.

Field and crowd precautions

Keep public queues and volunteers away from unstable banks, slippery steps and vehicle routes. Coordinate barriers, lighting, designated access and rescue arrangements with the responsible authority. Use bank-based collection rather than entering water. Gloves and closed footwear help during litter handling but do not establish water-contact suitability. Keep children away from cleanup and restrict electrical equipment near wet areas to qualified crews. If an immediate incident or injury occurs, contact local emergency services rather than waiting for chat advice. No health diagnosis or water-safety certification.

Sewage, smell, foam and visible incidents

Smell, foam or discolouration alone cannot identify a pollutant or prove sewage. Document the exact location, time, photos, visible outfall and whether flow is ongoing, from a stable bank. Send the record to the municipal water/environment team for inspection and fresh testing. Keep people away from the affected access point while the responsible team reviews it. Source interception and sewer repairs are engineering work; do not block drains yourself or add bleach, disinfectant, acid or other chemicals to the lake. If fish distress or an active spill is reported, escalate promptly; do not assign a cause from appearance.

Choosing cleanup versus treatment

Nets, skimmers and shoreline collection remove visible litter; they do not remove every dissolved pollutant. Booms can gather floating debris only where trained teams assess flow, navigation, anchoring and retrieval. Sewage diversion, treatment systems, constructed wetlands, dredging and aeration require engineering assessment, permissions and maintenance; they are not interchangeable instant fixes. Start by identifying the inflow and fresh test results. Do not recommend chemical dosing, unverified microbial products, DIY lake treatment, dredging volumes, costs, timelines or performance guarantees. Ask the technical team to compare options against the measured problem.

What the evidence can and cannot establish

CPCB Class B screening levels from the supplied criteria: dissolved oxygen ≥ 5 mg/l; BOD ≤ 3 mg/l; pH 6.5–8.5. These are screening comparisons, not a water-contact suitability decision. Coliform is unmeasured, units in the supplied tables are assumed, and current water quality and current site authorisation are unverified. Numeric zero is an actual reading. Blank, underscore, single or double asterisk mean not sampled. BDL and ND are censored readings, not zero. Missing tables do not mean clean water. Past concern, sampling priority, data coverage and current status are separate. Do not label water safe, unsafe, compliant, certified, approved or banned. Do not claim immersion caused a reading. Ranking uses historical concern and coverage, not a live forecast.

Confirming a physical site

Rani Kamlapati and Kamla Park may refer to different physical points; the organiser pack combines them with medium identity confidence. Confirm the location with the local authority before fieldwork. Map anchors are approximate and based on saved OpenStreetMap features, not surveyed sampling coordinates.

What this tool cannot tell you

  • Current (2026) water quality — the latest reading is from 2025.
  • Whether a site is authorised, open or banned for immersion in 2026 — status is “unverified” everywhere.
  • Whether immersion caused a change — before/after differences have many possible causes, and many readings were already high before immersion.
  • Health effects, fish kills or toxicity — not measured.
  • Units — the reports print none; standard units are assumed.
  • Coliform — not measured, so Class B compliance cannot be established.

Back to the ranking