Open Tender Watch
Automated cross-referencing of Portuguese public databases to detect irregularities
Entity Exposure By Flag
Aggregate exposure by contracting entity and active flag
Entity linking via NIF / NIPC
Unique identifier as the cross-reference key between databases
Connected Data Sources
Portuguese and European public databases
Methodology
How risk scores are determined and what each flag means
Risk indicators follow the OECD framework for detecting corruption and collusion in public procurement. Each flag is independently scored and assigned a confidence level — the score degrades when key fields (NIF, CPV, price, dates) are missing.
The system surfaces cases for audit and journalistic review. It does not produce conclusions. All outputs should be treated as leads, not findings.
Trigger: ≥2 direct awards to the same supplier within the current 3-year economic window (1 Jan, year−2 → 31 Dec, current year) where the cumulative awarded value exceeds €20,000 for services/goods, or €30,000 for works (CPV beginning with 45). Score: 50 · Severity: High.
CCP Art. 113 §2 sets statutory aggregate caps beyond which direct award to a single supplier is prohibited — not merely inadvisable. OECD (2023, LEGAL/0396) identifies repeat direct awarding to the same vendor as the principal mechanism used to circumvent competitive tendering in sub-threshold contracting, particularly prevalent in smaller public bodies.
Trigger: publication date in BASE is more than 10 days after the celebration (signing) date. Score: 40 · Severity: Medium.
CCP Art. 127 requires publication within 2 months of signing; the 10-day threshold marks the outer bound of ordinary administrative processing. Systematic late publication reduces public auditability and correlates with opacity in other procurement indicators (OECD, 2025).
Trigger: base_price falls in the window [threshold × 0.95, threshold) for any of five CCP procedural thresholds — €5 000, €20 000, €75 000, €150 000, €5 350 000. All five are checked independently; a contract within 5% below any threshold is flagged. Score: 35 · Severity: Medium.
Each threshold marks a legal boundary above which a higher-scrutiny procedure (open tender or restricted procedure) becomes mandatory. Pricing a contract just below a boundary to remain within the simpler direct-award regime — bid splitting — is a standard circumvention technique specifically targeted by OECD anti-collusion guidelines (LEGAL/0396). A 5% window captures cases where the price was visibly engineered to avoid triggering the threshold.
Trigger: procedure_type LIKE '%ajuste%' (case-insensitive). Authorities are grouped by CPV division (first 2 digits of cpv_code); only groups with ≥10 contracts are considered. The per-division peer median rate is computed using a two-row window function: AVG(rate) WHERE row_number IN ((N+1)/2, (N+2)/2). A flag is raised when the authority's direct-award rate is ≥80% AND exceeds the peer median by ≥25 percentage points. All direct-award contracts from flagged (authority, CPV division) pairs are flagged. Score: 35 · Severity: Medium.
The dual threshold — absolute ≥80% and relative ≥25 pp above peers — prevents false positives in sectors where direct awards are legitimately frequent. CPV-division grouping ensures authorities are compared only against peers procuring similar goods or services. Systematic over-use of direct award is one of the primary mechanisms used to circumvent competitive tendering obligations under CCP Art. 19 (OECD, 2023).
Trigger: ratio = total_effective_price ÷ base_price. Requires base_price ≠ 0 and total_effective_price present. Three scoring tiers — ratio > 1.5: A9_PRICE_ANOMALY, medium, score 30; ratio ≥ 2.0: A9_PRICE_ANOMALY, high, score 55; ratio < 0.5: A9_PRICE_REDUCTION, low, score 10.
Price overruns are a classic post-award manipulation vector: the base price is kept low to win the award, then inflated via scope changes or amendments that would have invalidated the bid competitively. A ratio ≥ 2.0 (more than double the estimate) is treated as high severity. A ratio below 0.5 suggests either a predatory below-cost bid designed to win and recoup via amendments, or a systematic data entry error — both warrant review.
Benford's Law states that in naturally-occurring datasets the digit '1' leads about 30% of values, '2' about 18%, and so on — a logarithmic distribution. Contract values that have been fabricated, rounded to circumvent thresholds, or systematically split tend to produce a flat or irregular digit distribution instead.
Applied at entity level: all base prices attributed to an entity are pooled. A chi-square goodness-of-fit test against the Benford distribution is run on leading digits. χ² > 15.507 (p<0.05) scores 35; χ² > 20.090 (p<0.01) scores 55. Entities with fewer than 20 contracts are excluded to avoid spurious results on small populations.
Trigger: for each (authority, winner) pair, winner_contracts ÷ authority_total_contracts ≥ 0.70, where authority_total_contracts ≥ 5 and winner_contracts ≥ 3. Contracts are linked via the contract_winners join table. All contracts from flagged (authority, winner) pairs are flagged. Score: 45 · Severity: High.
A concentration ratio of 70% or above indicates that competitive award is de facto absent — a single supplier dominates the authority's procurement budget. The minimum-count guards (≥5 total, ≥3 to winner) prevent small-N artefacts from triggering false positives. Supplier lock-in at this level correlates with reduced price competition, reciprocal arrangements, and capture dynamics identified in OECD procurement risk frameworks (2023).
Trigger: peer group = contracts sharing the same CPV division (first 2 digits of cpv_code) and same publication year (STRFTIME('%Y', publication_date)). Groups with fewer than 10 peers are excluded. Population standard deviation is computed as √(E[X²] − E[X]²) — equivalent to the standard formula and computable without a native STDDEV function. z-score = (base_price − peer_mean) ÷ peer_stddev. |z| ≥ 2.5 → medium (score 25); |z| ≥ 3.5 → high (score 45). Two sub-flags record direction: B3_PRICE_HIGH (z > 0) and B3_PRICE_LOW (z < 0).
High positive z-scores may indicate price manipulation, over-scoping, or inflated estimates designed to allow budget diversion or kickbacks. High negative z-scores may indicate a below-cost bid intended to win and recoup value through post-award amendments. Both directions carry independent risk. Peer grouping by CPV division × publication year controls for sector-specific price levels and inter-year inflation.
B5 (Benford's Law) active — entity-level analysis. B1–B4 in development — require minimum 2 years of data volume.
Flag scores accumulate per contract. Entity and company totals (all contracts procured or won) determine their aggregate risk tier:
Scores are reduced proportionally when mandatory data fields (NIF, CPV, price, dates) are absent or invalid in the contract record.
Risk scores reflect structural anomalies in procurement data. Missing or inconsistent data is itself a risk signal — it can indicate evasion. Absence of a flag does not mean a contract is clean.