yoda.digital / open source
Back to CONTender

CONTender · Methodology

How the integrity score is computed

Updated: 6 June 2026

The integrity score (0–100) is deterministic and verifiable. Here is the exact formula from the server's code. A high score means a clean procedure; a low score flags risk.

What it measures

A composite score from 0 to 100 for a procedure. 100 means no risk factor detected in the available data; a low score means signals were detected (appeals, court suspensions or annulments, severe decisions).

The four factors and their weights

  • Appeals — weight 0.25.
  • Court suspensions — weight 0.30.
  • Court reversals (annulments) — weight 0.20.
  • Decision severity (decision_content) — weight 0.25.

Sub-scores (each clamped to 0–100)

  • Appeals = 100 − (appeal count × 20)
  • Court suspensions = 100 − (suspension count × 50)
  • Court reversals = 100 − (reversal count × 50)
  • Severe decisions = 100 − (severe-decision count × 25)
  • "Severe" decisions = ProcedureCanceled, ProcedurePartiallyCanceled, RemedialMeasures, ComplaintUpheld, ComplaintPartiallyUpheld.

Aggregation and thresholds

Final score = the rounded sum of (sub-score × weight) across the four factors.

  • ≥ 80 → clean (high)
  • 50–79 → medium
  • < 50 → risk (low)
  • 100 = no risk detected.

Source and determinism

All four factors come exclusively from ANSC (appeals, decisions, court suspensions/annulments). MTender data provides context but does not enter the score. The computation is pure arithmetic: the same input always yields the same result, with no AI and no randomness.

Limitations (stated plainly)

  • If the ANSC calls partially fail, the lists stay empty and the score tends toward 100 — with an error note in the result. Always read the notes.
  • The score reflects only what exists in the ANSC data, not the intrinsic quality of the procedure.
  • The app is in a testing phase; the methodology may evolve.