Price close to winning bid (R024)¶
The percentage difference between the winning bid and the second-lowest valid bid is a low outlier.
See also
Methodology¶
For each contracting process, the difference is calculated as \((secondLowestValidBidAmount - winningBidAmount) \over winningBidAmount\).
A contracting process is flagged if the difference is less than or equal to the lower fence of \(Q_1 - 1.5(IQR)\), where \(Q_1\) is the first quartile and \(IQR\) is the interquartile range for the set of differences.
The winner and second-lowest bidder are also flagged.
Example
In 25% (\(Q_1\)) of contracting processes in Atlantis, the second-lowest valid bid is at most 5% greater than the winning bid. In 75% (\(Q_3\)) of contracting processes, it is at most 7% greater. This yields a lower fence of 2% (0.02
).
In a contracting process, CollusionCorp won with a bid of $100,000, and ProcureManipulate lost with the second-lowest bid of $101,000. The difference is 1% (0.01
). This is less than the lower fence of 2%. Therefore, the process is flagged.
Why is this a red flag?
A colluding bidder can mimic competition by submitting a bid that is similar in price (but different in quality, for example) from its colluding partner.
Based on “Difference between first and second relative offer prices” in Toolkit for detecting collusive bidding in public procurement and “Winning tender just below the next lowest bid” in Fraud in Public Procurement: A collection of Red Flags and Best Practices.
Output¶
The indicator’s value for the contracting process is the difference, as a decimal.
The indicator’s value for the tenderer is always 0.0.
If the --map
command-line flag is set, the Maps
key contains:
- ocid_tenderer_r024
The flagged tenderers for each flagged
ocid
.
Configuration¶
All configuration is optional. To override the default lower fence, add to your settings file, as a decimal:
[R024]
threshold = 0.05
See also
no_price_comparison_procurement_methods
and price_comparison_procurement_methods
in Global configuration
Exclusions¶
A contracting process is excluded if:
An award’s status is pending or invalid.
The winning bid is not the lowest bid. (This indicator requires the award criteria to be price-only.)
There are multiple active awards (a.k.a. winning bids). #14
A bid is submitted by multiple tenderers. #17
An award is made to multiple suppliers. #17
Note
Do you want to eliminate an exclusion? Please contributed to the linked GitHub issue.
Assumptions¶
This indicator assumes that the tenderer of the winning bid didn’t submit another valid bid.
Demonstration¶
Input
{"ocid":"F","bids":{"details":[{"status":"valid","tenderers":[{"id":"W"}],"value":{"amount":1,"currency":"USD"}},{"status":"valid","tenderers":[{"id":"L"}],"value":{"amount":2,"currency":"USD"}}]},"awards":[{"status":"active","suppliers":[{"id":"W"}]}]}
{"ocid":"1","bids":{"details":[{"status":"valid","tenderers":[{"id":"W"}],"value":{"amount":1,"currency":"USD"}},{"status":"valid","tenderers":[{"id":"L"}],"value":{"amount":100,"currency":"USD"}}]},"awards":[{"status":"active","suppliers":[{"id":"W"}]}]}
{"ocid":"2","bids":{"details":[{"status":"valid","tenderers":[{"id":"W"}],"value":{"amount":1,"currency":"USD"}},{"status":"valid","tenderers":[{"id":"L"}],"value":{"amount":100,"currency":"USD"}}]},"awards":[{"status":"active","suppliers":[{"id":"W"}]}]}
{"ocid":"3","bids":{"details":[{"status":"valid","tenderers":[{"id":"W"}],"value":{"amount":1,"currency":"USD"}},{"status":"valid","tenderers":[{"id":"L"}],"value":{"amount":100,"currency":"USD"}}]},"awards":[{"status":"active","suppliers":[{"id":"W"}]}]}
{"ocid":"4","bids":{"details":[{"status":"valid","tenderers":[{"id":"W"}],"value":{"amount":1,"currency":"USD"}},{"status":"valid","tenderers":[{"id":"L"}],"value":{"amount":100,"currency":"USD"}}]},"awards":[{"status":"active","suppliers":[{"id":"W"}]}]}
Output
$ ocdscardinal indicators --settings docs/examples/R/024.ini --no-meta docs/examples/R/024.jsonl
{"OCID":{"F":{"R024":1.0}},"Tenderer":{"W":{"R024":0.0},"L":{"R024":0.0}}}