Methodology
How 432 projects were reconstructed from public records, and how every claim stays traceable to its source.
1. Public sources
- BBMP IFMS works-bill service (accounts.bbmp.gov.in/vssWB): public, no login. Bill details, deductions, approval steps and the attachment lists of each work bill, plus the city-wide payment grid. Attachments (work orders, agreements, Schedule B, bill forms, work slips, completion certificates, extension-of-time orders) are fetched from their public URLs.
- Karnataka Public Procurement Portal (KPPP): tenders that mention Koramangala, award values, bidders, comparative statements and tender documents.
- OpenCity mirrors of BBMP bill registers and 2013–18 tender lists; archived BBMP documents on the Wayback Machine.
Collection was rate-limited (about one request per second) and cached. Contractor phone numbers and e-mail addresses were removed before anything was stored. No login, CAPTCHA or access control was bypassed: where a view required a session, collection stopped. See every source file.
2. Discovery
BBMP's public payment grid lists every RTGS-paid work bill in the city since mid-2015 (90,525 bills). Each row is tested with the same scope rules: the work description names Koramangala (including common misspellings and sub-localities), or the job number carries Koramangala's ward prefix for the ward map in force when the job was created, unless the description names another locality. Job numbers repeat across ward maps, so bills whose description belongs to another area are set aside.
3. Entity resolution
Bills are grouped into a project by BBMP job number. Tenders are linked to jobs by scored matching (description, place, ward, work type, dates, contractor), never by a shared number, because none exists. Every link records its supporting and conflicting evidence and its confidence. Contractor name variants are merged only on strong evidence (registration codes, identical names after normalisation, shared contact details used in memory only).
A tender is scored against each job on: description similarity (content words only), same kind of work, same places (block, main/cross, locality), ward numbers across the three ward maps, the awarded bidder appearing among the payees, bills starting after the tender, the amount paid against the tender value, and the engineering division. Each tender links to at most one job; weaker candidates are shown as "possible" and never merged.
4. Truth and provenance
Every fact is confirmed (read directly from a source record), inferred (derived, matched or read by OCR; the reasoning is shown) or unknown (no public source publishes it). Facts never overwrite stronger sources: an IFMS value outranks a typed attachment, which outranks a scanned one read by OCR.
5. Quantity extraction
Schedule B, estimates, bill forms and work slips are read with the native PDF text layer where present, otherwise by OCR, with orientation detection and table-ruling removal. A line item is accepted only if quantity × rate = amount on the printed row. Work-slip rows carry two more checks: executed quantity × rate = actual amount, and tender − actual = savings or excess. Handwritten measurement books are never read as numbers.
6. Signals
Rules flag patterns worth a second look: payments far above a contract, work past its completion date with no final bill, quantities above or below the tendered quantity, identical documents on different jobs, placeholder files, fines. Each signal states its threshold, its evidence and benign explanations. A signal is an observation, not a finding.
7. Investigation case review
Before a signal becomes a case, the system tries to resolve it from the public documents: it fetches variation documents, work slips, final bill forms, work orders and extension-of-time orders, and reconciles them item by item. Each issue ends up explained, an artefact, partially explained, insufficient evidence, or unexplained in the public records examined. Only high- and medium-confidence open questions become cases (5 of 23 reviewed).
8. A signal can disappear when better evidence is found
This is the most important rule. In the case review, most of the strongest earlier signals did not survive. Examples:
- Gym equipment "billed at twice the tendered quantity, with no variation document": an approved work slip was attached under the name "WS" and records the increase.
- A park "paid 220% of its contract": two contracts under one job; the first work order was scanned upside down.
- The "same agreement on two jobs": one package contract of 13 works, booked under two job codes; combined payments are 99.8% of it.
- Quantities "identical to Schedule B": running-bill snapshots; the final comparative statement records different quantities.
- "Final bill without a measurement book": for bills from mid-2024, IFMS does not show bill-level attachments without a login, so absence proves nothing.
See the cases page for the full list of set-aside signals and why.