A settings file configures the behavior of Cardinal’sDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/open-contracting/cardinal-rs/llms.txt
Use this file to discover all available pages before exploring further.
prepare and indicators commands. Use the --settings option to provide the path to your configuration file.
Quick Start
Generate a default settings file with all options documented:File Format
Settings files use INI format, a simple text-based configuration format.Basic Structure
Sections
A section starts with a name in square brackets:Properties
Properties are key-value pairs separated by=:
Comments
Document your configuration using; or #:
All settings are optional. Cardinal provides sensible defaults for all configurations.
Global Settings
These settings apply to theindicators command and affect all indicators.
Main Currency
Specify the currency used in your dataset:Price Comparison Controls
Some procurement methods shouldn’t have their bid prices compared (e.g., random selection, predetermined prices).Exclude Specific Methods
Exclude methods from price comparisons:|) of values from /tender/procurementMethodDetails
Include Only Specific Methods
Alternatively, specify an allow-list:If both are set,
price_comparison_procurement_methods takes precedence and no_price_comparison_procurement_methods is ignored.Output Settings
Control what information Cardinal includes in its output.| Property | Type | Description |
|---|---|---|
info_currency_mismatches | boolean | Log warnings when currency mismatches are detected |
Prepare Command Settings
These settings configure theprepare command’s data quality corrections.
Defaults
Fill in missing values when fields aren’t set:| Property | Fills | Description |
|---|---|---|
currency | /bids/details[]/value/currency | Default currency for bid values |
item_classification_scheme | /bids/details[]/items[]/classification/scheme/awards[]/items[]/classification/scheme | Default classification scheme (e.g., UNSPSC, CPV) |
bid_status | /bids/details[]/status | Default bid status when not set |
award_status | /awards[]/status | Default award status when not set |
party_roles | /parties[]/roles[] | Auto-populate party roles from organization references |
Redactions
Remove incorrect or placeholder values from the data:| Property | Redacts from | Description |
|---|---|---|
amount | /bids/details[]/value/amount | Pipe-separated list of monetary amounts to remove (e.g., placeholder values) |
organization_id | /parties[]/id/buyer/id/tender/procuringEntity/id/bids/details[]/tenderers[]/id/awards[]/suppliers[]/id | Pipe-separated list of organization IDs to remove (e.g., placeholder values) |
Corrections
Apply logical corrections to improve data accuracy:| Property | Type | Description |
|---|---|---|
award_status_by_contract_status | boolean | Change award status to “cancelled” if all related contracts are cancelled |
Modifications
Transform data to improve consistency and usability:| Property | Type | Description |
|---|---|---|
move_auctions | boolean | Move auction bids from /auctions[]/stages[]/bids[] to /bids/details[] |
prefix_buyer_or_procuring_entity_id | string | Prefix to add to /buyer/id and /tender/procuringEntity/id |
prefix_tenderer_or_supplier_id | string | Prefix to add to /bids/details[]/tenderers[]/id and /awards[]/suppliers[]/id |
split_procurement_method_details | string | Separator to split /tender/procurementMethodDetails on, keeping only the prefix |
/parties[]/id includes a scheme prefix but organization references don’t:
{category} - {detail}:
Codelists
Remap non-standard codes to standard OCDS codes:[codelists.bid_status]: Remap/bids/details[]/statusvalues[codelists.award_status]: Remap/awards[]/statusvalues
| Field | Valid Codes |
|---|---|
| bid_status | invited, pending, valid, disqualified, withdrawn |
| award_status | pending, active, cancelled, unsuccessful |
Indicators Command Settings
These settings configure individual indicators and global exclusions.Global Exclusions
Exclude contracting processes from all indicators based on procurement method:| Property | Description |
|---|---|
procurement_method_details | Pipe-separated list of /tender/procurementMethodDetails values to exclude |
When to use exclusions
When to use exclusions
Use global exclusions for:
- Methodologically inappropriate procedures: e.g., random selection where competition isn’t expected
- Quality issues: e.g., procurement methods with known data problems
- Out-of-scope procedures: e.g., framework agreements or direct awards
Enabling/Disabling Indicators
To enable an indicator, add its section:By default, no indicators are enabled unless you include their section in the settings file.
Indicator-Specific Settings
Each indicator has its own configuration section. Below are all available indicators and their settings.R003: Short Submission Period
Flags contracting processes where the submission period is too short.| Property | Type | Default | Description |
|---|---|---|---|
threshold | integer | 15 | Minimum acceptable days between tender publication and submission deadline |
procurement_methods | string | (none) | Pipe-separated list of procurement methods to analyze |
R018: Single Bid Received
Flags contracting processes where only one tenderer submitted a bid.| Property | Type | Description |
|---|---|---|
procurement_methods | string | Pipe-separated list of procurement methods to analyze (empty = all methods) |
R024: Price Close to Winning Bid
Flags contracting processes where the second-lowest valid bid is suspiciously close to the winning bid.| Property | Type | Default | Description |
|---|---|---|---|
threshold | float | 0.05 | Minimum percentage difference threshold (5% = 0.05) |
This is an outlier-based indicator. The threshold defines what percentage difference is considered suspiciously low relative to the dataset distribution.
R025: Excessive Unsuccessful Bids
Flags tenderers with an unusually low win rate.| Property | Type | Default | Description |
|---|---|---|---|
percentile | integer | 75 | Percentile for identifying “top tenderers” (75 = 75th percentile by bid count) |
threshold | float | 0.05 | Minimum win ratio threshold (5% = 0.05) |
- Identifies top tenderers (by bid count, at specified percentile)
- Calculates win ratio:
winning bids / submitted bids - Flags tenderers with win ratios that are low outliers
R028: Identical Bid Prices
Flags contracting processes where different tenderers submitted bids with identical prices.R030: Late Bid Won
Flags contracting processes where the winning bid was received after the submission deadline./bids/details[]/date is after /tender/tenderPeriod/endDate for a winning bid.
R035: All Except Winning Bid Disqualified
Flags contracting processes where all non-winning bids are disqualified.| Property | Type | Default | Description |
|---|---|---|---|
threshold | integer | 1 | Minimum number of disqualified non-winning bids to trigger the flag |
threshold = 1: Flag if at least 1 non-winning bid is disqualified (and all others are too)threshold = 3: Flag only if at least 3 non-winning bids are disqualified
Adjusting for your jurisdiction
Adjusting for your jurisdiction
If it’s common in your jurisdiction to have a few disqualified bids in competitive processes, increase the threshold:
R036: Lowest Bid Disqualified
Flags contracting processes where the lowest submitted bid is disqualified while the award criterion is price only.R038: Excessive Disqualified Bids
Flags buyers, procuring entities, or tenderers with unusually high disqualification rates.| Property | Type | Default | Description |
|---|---|---|---|
threshold | float | 0.5 | Minimum disqualification ratio threshold (50% = 0.5) |
minimum_submitted_bids | integer | 2 | Minimum submitted bids required per entity to be analyzed |
minimum_contracting_processes | integer | 2 | Minimum contracting processes required per entity to be analyzed |
disqualified bids / submitted bids
Flags entities (buyers, procuring entities, or tenderers) where this ratio is a high outlier.
Results are grouped by:
- Buyer: Disqualification rate per
/buyer/id - ProcuringEntity: Disqualification rate per
/tender/procuringEntity/id - Tenderer: Disqualification rate per
/bids/details[]/tenderers[]/id
R048: Heterogeneous Supplier
Flags tenderers that supply an unusually diverse variety of product/service categories.| Property | Type | Default | Description |
|---|---|---|---|
digits | integer | 2 | Number of leading digits from classification ID to compare (2 = segment level) |
threshold | integer | 10 | Minimum number of distinct categories to trigger flag |
minimum_contracting_processes | integer | 20 | Minimum contracting processes required per tenderer to be analyzed |
- Extracts classification codes from
/awards[]/items[]/classification/id - Truncates to specified number of digits (e.g., “42131804” → “42”)
- Counts distinct codes per tenderer
- Flags tenderers with counts that are high outliers
R058: Heavily Discounted Bid
Flags contracting processes where the winning bid is much lower than the second-lowest valid bid.| Property | Type | Default | Description |
|---|---|---|---|
threshold | float | 0.5 | Minimum percentage difference threshold (50% = 0.5) |
While R024 detects bids that are suspiciously close, R058 detects winning bids that are suspiciously low compared to competitors.
Complete Example
Here’s a comprehensive settings file combining multiple configurations:Best Practices
Troubleshooting
My indicators aren't producing any results
My indicators aren't producing any results
Possible causes:
- Indicators not enabled: Ensure you have sections for the indicators you want to run
- Currency mismatch: Check that
currencymatches your data - Global exclusions too broad: Your
exclusionsmight be filtering out all data - Data quality issues: Run
preparefirst to ensure data meets requirements
Too many false positives
Too many false positives
Solutions:
- Adjust thresholds: Increase thresholds for outlier-based indicators (R024, R025, R038, R048, R058)
- Add exclusions: Filter out inappropriate procurement methods
- Review data quality: Some “false positives” might indicate data quality issues
Settings file syntax errors
Settings file syntax errors
Common mistakes:Incorrect:
- Missing
=between property name and value - Forgetting
[brackets]around section names - Using
:instead of=(YAML syntax)
