ContractRadar test set

Field schema and reference rules

Every gold.json uses exactly these field names. Extractors return the same keys; the scorer normalises dates, money and organisation names before comparing.

Fields (schema 0.1.0)

FieldTypeMeaningReference
notice_typeenum
tender_notice, contract_award_notice, contract_details_notice, contract_change_notice, contract_document
What kind of document this is.PA 2023 ss.50, 53, 75
notice_referencestringPublished notice identifier as printed (e.g. 004213-2026). Null for a bare contract document.
contracting_authority criticalstringFull legal name of the buying authority as printed.
contracting_authority_typeenum
sub_central, central
Councils are sub-central authorities; this decides the threshold row.PA 2023 Sch 1
supplier_name criticalstringAwarded supplier's legal name. For a multi-lot award, the supplier of lot 1 (per-lot suppliers go in 'lots').
supplier_registration_numberstringCompanies House / registration number as printed, or null.
contract_title criticalstringTitle of the contract/procurement as printed.
contract_referencestringThe authority's own contract reference (e.g. WBC/2026/0071).
procurement_typeenum
goods, services, works
Main category. Decides the 10%/15% modification thresholds.PA 2023 s.74(4)
light_touchbooleanTrue if the contract is a light touch contract (health, social care, education and other Schedule-listed services). Decides which threshold row applies.PA 2023 s.9, Sch 1
procedureenum
open, competitive_flexible, direct_award, framework_call_off
Award procedure used.PA 2023 ss.19-20, 41
cpv_codeslist[string]All CPV codes printed, 8 digits each, no check digit suffix.
notice_published_datedateDate the notice was published.
award_datedateDate of the award decision.
contract_signed_datedateDate the contract was entered into (signed). Null if not stated.
contract_start_date criticaldateContract commencement date.
contract_end_date criticaldateInitial expiry date (before any options).
extension_options_monthsintegerTotal months of extension options available at award. 0 if none.
maximum_term_monthsintegerInitial term plus all extension options, in months.PA 2023 s.74(3)(a)
contract_value_gbp criticalmoneyTotal contract value as stated (for the full initial term; add options only if the document says the value includes them).
value_includes_vatbooleanTrue if the stated value is inclusive of VAT.
number_of_tenders_receivedintegerTenders received, as printed.
kpislist[string]Names of the key performance indicators set for the contract, in document order.PA 2023 s.52
payment_terms_daysintegerDays from receipt of a valid invoice to payment, as printed.PA 2023 s.68
standstill_end_datedateDate the standstill period ends (award notices).PA 2023 s.51
lotslist[object]One object per lot: {lot_number:int, lot_title:string, supplier_name:string|null, value_gbp:money|null, awarded:boolean}. Empty list if the contract has no lots.
modification_numberintegerSequential number of this modification to the contract.PA 2023 s.75
modification_datedateDate the modification takes effect (or was made).
modification_descriptionstringShort description of what is changing, as printed.
modification_ground criticalenum
sch8_para1_provided_for, sch8_para2_urgency, sch8_para3_unforeseeable, sch8_para4_known_risk, sch8_para5_additional, sch8_para6_restructuring, s74_non_substantial, s74_below_threshold
Legal ground relied on for the modification.PA 2023 s.74(1), Sch 8
original_contract_value_gbpmoneyContract value before this modification.
revised_contract_value_gbpmoneyContract value after this modification.
value_change_gbp criticalmoneySigned change in value caused by this modification (revised minus original).
value_change_percentnumbervalue_change_gbp as a percentage of original_contract_value_gbp, rounded to 1 dp.
original_end_datedateEnd date before this modification.
revised_end_date criticaldateEnd date after this modification.
term_change_monthsintegerSigned change in term, in months.
contract_change_notice_publishedbooleanWhether the document states that a contract change notice was published before the modification.PA 2023 s.75
voluntary_standstillbooleanWhether a voluntary standstill period is stated for the modification.PA 2023 s.76

Flags a rule engine is expected to raise

Computed by crtest/pa2023.py from the gold fields. Thresholds are inclusive of VAT and follow the Procurement Act 2023 (Threshold Amounts) (Amendment) Regulations 2025 for procurements commenced on or after 1 January 2026; earlier figures are kept for older procurements.

RuleSeverityDescription
PA23-threshold-in-scopeinfoEstimated value meets or exceeds the relevant threshold, so Part 2/3/4 of the Act apply.
PA23-s51-standstill-shorthighStandstill ends fewer than 8 working days after the award notice was published.
PA23-s52-kpi-min3highContract value above £5m but fewer than three KPIs are set.
PA23-s53-cdn-latemediumContract details notice published more than 30 days after the contract was entered into.
PA23-s68-payment-over-30dmediumStated payment terms exceed 30 days; the 30-day implied term applies regardless.
PA23-s74-exceeds-below-thresholdhighModification relies on the below-threshold ground but changes value by more than 10% (goods/services) or 15% (works).
PA23-s74-substantial-termhighModification changes the term by more than 10% of the maximum term at award and no Schedule 8 ground is given.
PA23-sch8-para3-cap-50pchighUnforeseeable-circumstances modification increases value by more than 50%.
PA23-s75-ccn-required-not-publishedhighA contract change notice was required (value change over 10%/15% or term change over 10%) but the document states none was published.
PA23-s77-publish-modified-contractinfoQualifying modification to a contract over £5m: a copy of the modified contract must be published within 90 days.
AUDIT-retrospective-extensionhighModification is dated after the contract's original end date (the contract had already expired).
AUDIT-direct-award-above-thresholdmediumDirect award of an above-threshold contract; check the s.41 justification.

Scoring rules