From 1c9833f7bc7ee904158072704979d8f1a3de79d3 Mon Sep 17 00:00:00 2001 From: odscjen Date: Fri, 29 Mar 2024 09:43:52 +0000 Subject: [PATCH 01/51] conformance_and_extensions.md: add normative guidance about extension paths --- docs/schema/conformance_and_extensions.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/schema/conformance_and_extensions.md b/docs/schema/conformance_and_extensions.md index 36c434e84..102cf8fe7 100644 --- a/docs/schema/conformance_and_extensions.md +++ b/docs/schema/conformance_and_extensions.md @@ -27,4 +27,6 @@ Extensions ought to be documented and shared so that other publishers and users The [Extension Explorer](../guidance/map/extensions) publishes details of known extensions. -The schema for the standard by default allows for new fields, and does not fail validation of a file which contains unknown fields. +The schema for the standard by default allows for new fields, and does not fail validation of a file which contains unknown fields. + +It must be possible to access an extension's schema and codelist files by replacing `extension.json` in the extension's URL with a file's path, e.g. `release-schema.json` or `codelists/codelist.csv`. For more information, refer to the Extension Explorer's [guidance on documenting extensions](https://extensions.open-contracting.org/en/publishers/#document). From aa094bd9b98de410c3c71384b8d67eb280ece0c7 Mon Sep 17 00:00:00 2001 From: odscjen Date: Wed, 3 Apr 2024 12:36:58 +0100 Subject: [PATCH 02/51] schema/: merge Project and Location extensions --- schema/codelists/classificationScheme.csv | 1 + schema/codelists/geometryType.csv | 7 + schema/codelists/locationGazetteers.csv | 7 + schema/release-schema.json | 223 ++++++++++++++++++++++ 4 files changed, 238 insertions(+) create mode 100644 schema/codelists/geometryType.csv create mode 100644 schema/codelists/locationGazetteers.csv diff --git a/schema/codelists/classificationScheme.csv b/schema/codelists/classificationScheme.csv index 2aca73f40..0f54f906b 100644 --- a/schema/codelists/classificationScheme.csv +++ b/schema/codelists/classificationScheme.csv @@ -20,3 +20,4 @@ TED_CA_TYPE,EU Type of contracting authority (TED schema),The types of contracti TED_CE_ACTIVITY,EU Main activity of contracting entity (TED schema),The main activity of the contracting entity within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in TED schema.,https://simap.ted.europa.eu/documents/10184/99173/EN_F04.pdf,organization eu-buyer-contracting-type,EU Buyer contracting entity type,Whether or not the buyer is a contracting entity within the domain of public procurement according to the legislation of the European Parliament.,https://docs.ted.europa.eu/eforms/latest/reference/code-lists/buyer-contracting-type.html,organization eu-main-activity,EU Main activity authority list (eForms),The main activity of the contracting entity within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in eForms.,https://op.europa.eu/en/web/eu-vocabularies/concept-scheme/-/resource?uri=http://publications.europa.eu/resource/authority/main-activity,organization +oc4idsProjectSector,OC4IDS Project Sector,Open Contracting for Infrastructure Data Standards Toolkit projectSector codelist,https://standard.open-contracting.org/infrastructure/latest/en/reference/codelists/#projectsector,project diff --git a/schema/codelists/geometryType.csv b/schema/codelists/geometryType.csv new file mode 100644 index 000000000..f053feb6a --- /dev/null +++ b/schema/codelists/geometryType.csv @@ -0,0 +1,7 @@ +Code,Title,Description,Source +Point,Point,"For type 'Point', the 'coordinates' member is a single position.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPoint,MultiPoint,"For type 'MultiPoint', the 'coordinates' member is an array of positions.",https://tools.ietf.org/html/rfc7946#section-3.1 +LineString,LineString,"For type 'LineString', the 'coordinates' member is an array of two or more positions.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiLineString,MultiLineString,"For type 'MultiLineString', the 'coordinates' member is an array of LineString coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +Polygon,Polygon,"For type 'Polygon', the 'coordinates' member must be an array of linear ring coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPolygon,MultiPolygon,"For type 'MultiPolygon', the 'coordinates' member is an array of Polygon coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 diff --git a/schema/codelists/locationGazetteers.csv b/schema/codelists/locationGazetteers.csv new file mode 100644 index 000000000..fa5e62d4b --- /dev/null +++ b/schema/codelists/locationGazetteers.csv @@ -0,0 +1,7 @@ +Category,Code,Title,Description,Source,URI Pattern +Sub-National,NUTS,EU Nomenclature of Territorial Units for Statistics,The Nomenclature of Territorial Units for Statistics (NUTS) was established by Eurostat in order to provide a single uniform breakdown of territorial units for the production of regional statistics for the European Union.,https://ec.europa.eu/eurostat/web/nuts/linked-open-data,http://data.europa.eu/nuts/code/ +National,ISO2,ISO Country Codes (3166-1 alpha-2),ISO 2-Digit Country Codes,https://www.iso.org/iso-3166-country-codes.html, +Universal,GEONAMES,GeoNames,"GeoNames provides numerical identifiers for many points of interest around the world, including administrative divisions, populated centres and other locations, embedded within a structured tree of geographic relations.",https://www.geonames.org/,https://www.geonames.org/ +Universal,OSMN,OpenStreetMap Node,"OpenStreetMap Nodes consist of a single point in space defined by a latitude, longitude and node ID. Nodes might have tags to indicate the particular geographic feature they represent.",,https://www.openstreetmap.org/node/ +Universal,OSMR,OpenStreetMap Relation,"Relations are used to model logical (and usually local) or geographic relationships between objects. In practice, boundaries of geographic areas are available as Relations in OpenStreetMap.",https://wiki.openstreetmap.org/wiki/Relation,https://www.openstreetmap.org/relation/ +Universal,OSMW,OpenStreetMap Way,An OpenStreetMap Way is an ordered list of OpenStreetMap nodes. It can be used to describe fragments of roads or local boundaries and bounding boxes.,https://wiki.openstreetmap.org/wiki/Way,https://www.openstreetmap.org/way/ diff --git a/schema/release-schema.json b/schema/release-schema.json index f7346ffb2..bdff98fee 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -163,6 +163,11 @@ "description": "Details of the budget that will fund the future contract(s)", "$ref": "#/definitions/Budget" }, + "project": { + "title": "Project information", + "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", + "$ref": "#/definitions/Project" + }, "documents": { "title": "Documents", "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", @@ -301,6 +306,26 @@ "description": "The estimated maximum value of the framework agreement, as estimated when publishing the tender information.", "$ref": "#/definitions/Value" }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to this tender will take place.", + "type": "array", + "items": { + "$ref": "#/definitions/Location" + }, + "wholeListMerge": true, + "uniqueItems": true + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to this tender will be delivered.", + "type": "array", + "items": { + "$ref": "#/definitions/Address" + }, + "wholeListMerge": true, + "uniqueItems": true + }, "procurementMethod": { "title": "Procurement method", "description": "The method describing which organizations can submit a bid, using the closed [method](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#method) codelist. In releases concerning second stages (e.g. in framework agreements) or other subsequent stages, the procurement method always refers to the first stage of the contracting process.", @@ -1546,6 +1571,28 @@ "title": "Unit", "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", "$ref": "#/definitions/Unit" + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to this tender, contract or license will be delivered.", + "type": "array", + "items": { + "$ref": "#/definitions/Location" + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to this tender, contract or license will be delivered.", + "type": "array", + "items": { + "$ref": "#/definitions/Address" + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -1720,6 +1767,98 @@ } } }, + "Location": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of this location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, "Address": { "title": "Address", "description": "An address.", @@ -2031,6 +2170,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } } }, @@ -2677,6 +2824,82 @@ } }, "minProperties": 1 + }, + "Project": { + "title": "Project information", + "description": "Information about the infrastructure or public-private partnership project to which a planning process is related.", + "type": "object", + "properties": { + "id": { + "title": "Identifier", + "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register, or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "description": { + "title": "Description", + "description": "A short description of the project.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "totalValue": { + "title": "Total value", + "description": "The total anticipated value of the project over its lifetime.", + "$ref": "#/definitions/Value" + }, + "uri": { + "title": "URI", + "description": "The URI of a resource with additional information about the project.", + "type": [ + "string", + "null" + ], + "format": "uri" + }, + "sector": { + "title": "Sector", + "description": "The primary sector to which the project relates. It is recommended to use the scheme 'oc4idsProjectSector' and codes from the [OC4IDS projectSector codelist](https://standard.open-contracting.org/infrastructure/latest/en/reference/codelists/#projectsector).", + "$ref": "#/definitions/Classification" + }, + "additionalClassifications": { + "title": "Additional classifications", + "description": "Additional classifications for the project. For example, a sector or strategic framework classification.", + "type": "array", + "items": { + "$ref": "#/definitions/Classification" + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "locations": { + "title": "Locations", + "description": "Information about the locations where the project is taking place.", + "type": "array", + "items": { + "$ref": "#/definitions/Location" + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + } + }, + "minProperties": 1 } } } From 4b967f52633f29931a2be66187f2055d26aba123 Mon Sep 17 00:00:00 2001 From: odscjen Date: Wed, 3 Apr 2024 12:48:20 +0100 Subject: [PATCH 03/51] update changelog.md --- docs/history/changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index 89235d8a4..1d352e8b8 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -74,6 +74,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1316](https://github.com/open-contracting/standard/pull/1316) `language` * [#1308](https://github.com/open-contracting/standard/pull/1308) `mediaType` * [#1459](https://github.com/open-contracting/standard/pull/1459) `partyScale` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `geometryType` and `locationGazetteers` * `classificationScheme.csv`: * [#1319](https://github.com/open-contracting/standard/pull/1319) Rename from `itemClassificationScheme.csv`. @@ -88,6 +89,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * 'eu-main-activity' * [#1452](https://github.com/open-contracting/standard/pull/1452) Add 'proClass'. * [#1637](https://github.com/open-contracting/standard/pull/1637) Add 'sdg' and 'sdgTarget'. + * [#1684](https://github.com/open-contracting/standard/pull/1684) Add 'oc4idsProjectSector' from project extension. * `documentType.csv`: * Add codes: @@ -215,6 +217,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1519](https://github.com/open-contracting/standard/pull/1519) `Value.amountNet` and `Value.amountGross` * [#1490](https://github.com/open-contracting/standard/pull/1490) `contracts.identifiers` * [#1679](https://github.com/open-contracting/standard/pull/1679) `Organization.details.classifications` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `planning.project`, `deliveryLocations` and `deliveryAddresses` to `Tender` and `Item` * Deprecate some fields: * [#1200](https://github.com/open-contracting/standard/pull/1200) `tender.submissionMethod`, because all codes from the `submissionMethod` codelist are deprecated. From 1bf6a0c3d6367e9fb8604f3d532946e4194962ed Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 4 Apr 2024 14:00:18 -0400 Subject: [PATCH 04/51] build: Update to latest profile template --- .github/workflows/shell.yml | 6 ++---- common-requirements.txt | 2 +- docs/conf.py | 1 + docs/guidance/index.md | 2 +- docs/locale/es/LC_MESSAGES/guidance/index.po | 4 ++-- docs/locale/fr/LC_MESSAGES/guidance/index.po | 2 +- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/shell.yml b/.github/workflows/shell.yml index ad37d1558..e87989085 100644 --- a/.github/workflows/shell.yml +++ b/.github/workflows/shell.yml @@ -6,10 +6,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Install shellcheck - run: | + - run: | sudo apt update - sudo apt install shellcheck - - run: sudo snap install shfmt + sudo apt install shellcheck shfmt - run: shellcheck $(shfmt -f .) - run: shfmt -d -i 4 -sr $(shfmt -f .) diff --git a/common-requirements.txt b/common-requirements.txt index 1fab18073..089b9bfb1 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -133,7 +133,7 @@ requests-cache==1.1.0 # via ocdsextensionregistry selenium==4.11.2 # via -r common-requirements.in -six==1.15.0 +six==1.16.0 # via # livereload # url-normalize diff --git a/docs/conf.py b/docs/conf.py index cf06c327a..46f6ddbd4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -111,6 +111,7 @@ 'license_url': f'{repository_url}/blob/HEAD/LICENSE', 'repository_url': repository_url, } +html_short_title = f'{html_theme_options["short_project"]} v{release}' # List the extension identifiers and versions that should be part of this specification. The extensions must be in # the extension registry: https://github.com/open-contracting/extension_registry/blob/main/extension_versions.csv diff --git a/docs/guidance/index.md b/docs/guidance/index.md index 10bfe575a..d2692297b 100644 --- a/docs/guidance/index.md +++ b/docs/guidance/index.md @@ -6,7 +6,7 @@ The four phases of implementation described in this guide have helped implemente Read the guidance to understand the main steps to implement OCDS and to find supporting resources. Detailed guidance on specific topics and tasks is provided in sub-pages. -Use the [OCDS Implementation Checklist](https://www.open-contracting.org/resources/ocds-implementation-checklist) to keep track of your progress. +Use the [OCDS Implementation Checklist](https://www.open-contracting.org/resources/ocds-implementation-checklist/) to keep track of your progress. ```{toctree} :maxdepth: 2 diff --git a/docs/locale/es/LC_MESSAGES/guidance/index.po b/docs/locale/es/LC_MESSAGES/guidance/index.po index 457625b13..06d357115 100644 --- a/docs/locale/es/LC_MESSAGES/guidance/index.po +++ b/docs/locale/es/LC_MESSAGES/guidance/index.po @@ -55,11 +55,11 @@ msgstr "" #: ../../docs/guidance/index.md:9 msgid "" "Use the [OCDS Implementation Checklist](https://www.open-" -"contracting.org/resources/ocds-implementation-checklist) to keep track of " +"contracting.org/resources/ocds-implementation-checklist/) to keep track of " "your progress." msgstr "" "Utilice la [Lista de Verificación de Implementación](https://www.open-" -"contracting.org/resources/ocds-implementation-checklist) para hacer un " +"contracting.org/resources/ocds-implementation-checklist/) para hacer un " "seguimiento de su progreso." #: ../../docs/guidance/index.md:20 diff --git a/docs/locale/fr/LC_MESSAGES/guidance/index.po b/docs/locale/fr/LC_MESSAGES/guidance/index.po index 736c5359a..21f566677 100644 --- a/docs/locale/fr/LC_MESSAGES/guidance/index.po +++ b/docs/locale/fr/LC_MESSAGES/guidance/index.po @@ -46,7 +46,7 @@ msgstr "" #: ../../docs/guidance/index.md:9 msgid "" "Use the [OCDS Implementation Checklist](https://www.open-" -"contracting.org/resources/ocds-implementation-checklist) to keep track of " +"contracting.org/resources/ocds-implementation-checklist/) to keep track of " "your progress." msgstr "" From a2cec86190ef012789d33df3c84d26ae3bdd4989 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 4 Apr 2024 14:09:54 -0400 Subject: [PATCH 05/51] guidance/map/extensions: Merge paragraphs about developing new extensions --- docs/guidance/map/extensions.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/guidance/map/extensions.md b/docs/guidance/map/extensions.md index 176f078b8..f31aa4573 100644 --- a/docs/guidance/map/extensions.md +++ b/docs/guidance/map/extensions.md @@ -23,11 +23,7 @@ This version of OCDS uses these specific versions of the following extensions: ## Developing new extensions -If you have additional fields which cannot be mapped to the OCDS schema or an existing extension, you ought to include these in your OCDS data and create a new extension to document their structure and meaning. - -### Extension template - -You can find the [extension template](https://github.com/open-contracting/standard_extension_template) on GitHub. It contains guidance on creating an extension. +If you have additional fields which cannot be mapped to the OCDS schema or an existing extension, you ought to include these in your OCDS data and create a new extension to document their structure and meaning. Use the [extension template](https://github.com/open-contracting/standard_extension_template) to create an extension. ## Profiles From a157d3305672a3152e6f75408e26f1bf804a26dd Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 4 Apr 2024 14:10:10 -0400 Subject: [PATCH 06/51] guidance/map/extensions: Add OCDS for eForms, closes #1686 --- docs/guidance/map/extensions.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/guidance/map/extensions.md b/docs/guidance/map/extensions.md index f31aa4573..50c86beec 100644 --- a/docs/guidance/map/extensions.md +++ b/docs/guidance/map/extensions.md @@ -33,9 +33,13 @@ Groups of extensions can be combined into **profiles**. OCDS provides a common c [OCDS for Public-Private Partnerships](https://standard.open-contracting.org/profiles/ppp/latest/en/) (PPPs) describes how to use OCDS to publish information about PPPs. The profile extends OCDS to offer a data format that follows the World Bank Group's [Framework for Disclosure in Public-Private Partnership Projects](https://www.worldbank.org/en/topic/publicprivatepartnerships/brief/ppp-tools#T1). -### OCDS for the European Union +### OCDS for eForms -[OCDS for the European Union](https://standard.open-contracting.org/profiles/eu/latest/en/) describes how to express, in OCDS, the information in Tenders Electronic Daily (TED) notices as obliged by law within the EU. +[OCDS for eForms](https://standard.open-contracting.org/profiles/eforms/latest/en/) describes how to express, in OCDS, European public procurement information collected through [eForms](https://single-market-economy.ec.europa.eu/single-market/public-procurement/digital-procurement/eforms_en). + +```{note} +eForms is established by the [Commission Implementing Regulation (EU) 2019/1780](https://eur-lex.europa.eu/eli/reg_impl/2019/1780/oj), which repeals the [Commission Implementing Regulation (EU) 2015/1986](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32015R1986). [OCDS for the European Union](https://standard.open-contracting.org/profiles/eu/latest/en/) is relevant to the repealed regulation. +``` ### OCDS for the Agreement on Government Procurement From 2800dbc65a936eed086eedad8ad57b315f5ab27b Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 4 Apr 2024 14:17:50 -0400 Subject: [PATCH 07/51] schema/conformance_and_extensions: Merge paragraphs about: why to publish an extension, rules about extensions, impact on validation --- docs/schema/conformance_and_extensions.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/schema/conformance_and_extensions.md b/docs/schema/conformance_and_extensions.md index 102cf8fe7..f414f2a54 100644 --- a/docs/schema/conformance_and_extensions.md +++ b/docs/schema/conformance_and_extensions.md @@ -19,14 +19,8 @@ Whenever using terms from outside the OCDS standard, we encourage the publisher ## Extensions -If you have additional fields which cannot be mapped to the OCDS schema or an existing extension, you should include these in your OCDS data and [create a new extension](../guidance/map/extensions) to document their structure and meaning. +If you have additional fields which cannot be mapped to the OCDS schema or an existing extension, you should include these in your OCDS data and [create a new extension](../guidance/map/extensions) to document their structure and meaning. Extensions ought to be documented and shared so that other publishers and users can draw upon them, and so that extensions can be considered for inclusion in a future version of the standard. The [Extension Explorer](../guidance/map/extensions) publishes details of known extensions. -Extensions to the standard can add new objects and fields to accommodate specific local requirements. An extension must not be created if it is possible to use existing terms from the standard. - -Extensions ought to be documented and shared so that other publishers and users can draw upon them, and so that extensions can be considered for inclusion in a future version of the standard. - -The [Extension Explorer](../guidance/map/extensions) publishes details of known extensions. +Extensions to the standard can add new objects and fields to accommodate specific local requirements. An extension must not be created if it is possible to use existing terms from the standard. It must be possible to access an extension's schema and codelist files by replacing `extension.json` in the extension's URL with a file's path, e.g. `release-schema.json` or `codelists/codelist.csv`. For more information, refer to the Extension Explorer's [guidance on documenting extensions](https://extensions.open-contracting.org/en/publishers/#document). The schema for the standard by default allows for new fields, and does not fail validation of a file which contains unknown fields. - -It must be possible to access an extension's schema and codelist files by replacing `extension.json` in the extension's URL with a file's path, e.g. `release-schema.json` or `codelists/codelist.csv`. For more information, refer to the Extension Explorer's [guidance on documenting extensions](https://extensions.open-contracting.org/en/publishers/#document). From 2675f20d664dfe0858e7163de2f91b42e5829a43 Mon Sep 17 00:00:00 2001 From: odscjen Date: Thu, 11 Apr 2024 11:57:08 +0100 Subject: [PATCH 08/51] add Location and Project to examples release_package.json and schema/reference --- .../release_package.json | 41 +++++++++++++++++++ docs/schema/reference.md | 41 +++++++++++++++++-- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/docs/examples/release_schema_reference/release_package.json b/docs/examples/release_schema_reference/release_package.json index a428e8272..aa6c4427c 100644 --- a/docs/examples/release_schema_reference/release_package.json +++ b/docs/examples/release_schema_reference/release_package.json @@ -94,6 +94,47 @@ "projectID": "SP001", "uri": "https://openspending.org/uk-barnet-budget/entries/6801ad388f3a38b7740dde20108c58b35984ee91" }, + "project": { + "id": "oc4ids-bu3kcz-0000", + "title": "Central Junction Cycle Lane Construction", + "description": "Design, construction and supervision of a new cycle lane for the Central Junction.", + "totalValue": { + "amount": 1100000, + "currency": "GBP" + }, + "uri": "http://example.com/projects/oc4ids-bu3kcz-0000.json", + "sector": { + "id": "transport.road", + "description": "Road transport, including roads, highways, streets, tunnels and bridges.", + "scheme": "oc4idsProjectSector" + }, + "additionalClassifications": [ + { + "id": "03.04.05", + "description": "Cycle lanes for road transport.", + "scheme": "My local scheme" + } + ], + "locations": [ + { + "description": "Barnet, London, UK", + "geometry": { + "type": "Point", + "coordinates": [ + 51.605, + 0.2076 + ] + }, + "gazetteer": { + "scheme": "GEONAMES", + "identifier": [ + "2656295" + ] + }, + "uri": "https://www.geonames.org/2656295/barnet.html" + } + ] + }, "documents": [ { "datePublished": "2009-01-05T00:00:00Z", diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 22cfafe62..68f2d1b34 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -122,7 +122,7 @@ Each organization has a `details` object. Through extensions, this can be used t ### Planning -The planning section is used in a planning process. This includes information about, for example, needs identification, budget planning and market research. Background documents such as feasibility studies and project plans can also be included in this section. +The planning section is used in a planning process. This includes information about, for example, needs identification, budget planning, the parent project and market research. Background documents such as feasibility studies and project plans can also be included in this section. ````{admonition} Example :class: hint @@ -135,7 +135,7 @@ The planning section is used in a planning process. This includes information ab ```{jsonschema} ../../build/current_lang/release-schema.json :pointer: /definitions/Planning -:collapse: budget,documents,milestones +:collapse: budget,project,documents,milestones ``` ```{extensionlist} The following extensions are available for planning @@ -168,6 +168,28 @@ Apart from documents, the majority of planning information is held within the bu :list: budget ``` +#### Project + +The `planning` object includes details of the infrastructure or public-private partnership (PPP) project to which a planning process is related. The identifier of the project ought to be disclosed in `planning.project.id`. This object is designed to allow both machine-readable linkable data about the parent project, cross-referencing to data held in other standards such as the [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/projects/#what-is-a-project) and the [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/) profile, and human readable description of the parent project, supporting users to understand the relationship of the contracting (or planning) process to their parent project even where linked data is not available. + +````{admonition} Example +:class: hint + +```{jsoninclude} ../examples/release_schema_reference/release_package.json +:jsonpointer: /releases/0/planning/project +:title: project +``` +```` + +```{jsonschema} ../../build/current_lang/release-schema.json +:pointer: /definitions/Project +:collapse: totalValue,additionalClassifications,locations +``` + +```{extensionlist} The following extensions are available for project +:list: +``` + ### Tender The tender section includes details of the announcement that an organization intends to source some particular goods, services or works and to establish one or more contract(s) for these. @@ -671,7 +693,20 @@ As well as providing this machine-readable link between processes, publishers ma ### Location -The [Location](https://extensions.open-contracting.org/en/extensions/location/v1.1.4/) extension can be used to provide location information. +The `Location` subschema can be used to provide the geographic coordinates or standardized location identifiers of the proposed or executed contract delivery in the `Project`, `tender` and `Item` objects. + +````{admonition} Example +:class: hint + +```{jsoninclude} ../examples/release_schema_reference/release_package.json +:jsonpointer: /releases/0/planning/project/locations/0 +:title: location +``` +```` + +```{jsonschema} ../../build/current_lang/release-schema.json +:pointer: /definitions/Location +``` ### Link From 08c3627859504c0756b62829a868a590e5026f19 Mon Sep 17 00:00:00 2001 From: odscjen Date: Fri, 12 Apr 2024 09:12:51 +0100 Subject: [PATCH 09/51] update guidance linked_standards and add link to OC4IDS identifiers guidance --- docs/guidance/map/linked_standards.md | 2 +- docs/schema/reference.md | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/guidance/map/linked_standards.md b/docs/guidance/map/linked_standards.md index 654e927f0..afc5fe78c 100644 --- a/docs/guidance/map/linked_standards.md +++ b/docs/guidance/map/linked_standards.md @@ -8,7 +8,7 @@ The [Open Contracting for Infrastructure Data Standards](https://standard.open-c A joint effort by the [Infrastructure Transparency Initiative](https://infrastructuretransparency.org) (CoST) and the Open Contracting Partnership, it builds on best practice in open data and openness of public infrastructure procurement globally. -The [Project](https://extensions.open-contracting.org/en/extensions/project/master/) extension describes how to connect OCDS and OC4IDS datasets. +OCDS and OC4IDS data sets ought to be linked using the `planning.project` field, referencing the OC4IDS project identifier in `planning.project.id`. ## Open Fiscal Data Package diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 68f2d1b34..15bac851f 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -150,6 +150,8 @@ The planning section is used in a planning process. This includes information ab Apart from documents, the majority of planning information is held within the budget block. This is designed to allow both machine-readable linkable data about budgets, cross-referencing to data held in other standards such as the [Fiscal Data Package](https://specs.frictionlessdata.io/fiscal-data-package/) or [International Aid Transparency Initiative Standard](https://iatistandard.org/en/), and human readable description of the related budgets and projects, supporting users to understand the relationship of the contracting (or planning) process to existing projects and budgets even where linked data is not available. +The `planning.budget.projectID` field should not be used to disclose the identifier of an infrastructure or PPP project. Rather, this field is used to disclose the identifier of a programme of work as it appears in a budget, like a national or state budget. Since such programmes of work can include many infrastructure projects, it is necessary to disclose their identifiers separately. Use the the `planning.project.id` field to disclose the identifier of an infrastructure or PPP project. + ````{admonition} Example :class: hint @@ -170,7 +172,9 @@ Apart from documents, the majority of planning information is held within the bu #### Project -The `planning` object includes details of the infrastructure or public-private partnership (PPP) project to which a planning process is related. The identifier of the project ought to be disclosed in `planning.project.id`. This object is designed to allow both machine-readable linkable data about the parent project, cross-referencing to data held in other standards such as the [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/projects/#what-is-a-project) and the [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/) profile, and human readable description of the parent project, supporting users to understand the relationship of the contracting (or planning) process to their parent project even where linked data is not available. +The `project` object includes details of the infrastructure or public-private partnership (PPP) project to which a planning process is related. This object is designed to allow both machine-readable linkable data about the parent project, cross-referencing to data held in other standards such as the [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/projects/#what-is-a-project) and the [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/) profile, and human readable description of the parent project, supporting users to understand the relationship of the contracting (or planning) process to their parent project even where linked data is not available. + +Where there is a separate OC4IDS dataset that describes the project the identifier from this dataset should be referenced in `project.id`. Where there is not a separate project dataset an appropriate project identifier will need to be generated. For more information on project identifiers see [OC4IDS Project Identifiers](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/). ````{admonition} Example :class: hint From 86bf1fa3db00716a2dae6b42430969dd1450a2b3 Mon Sep 17 00:00:00 2001 From: odscjen Date: Fri, 12 Apr 2024 09:26:25 +0100 Subject: [PATCH 10/51] release-schema: Project and Location changes in line with style guide --- schema/release-schema.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/schema/release-schema.json b/schema/release-schema.json index bdff98fee..41fb21a54 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -144,7 +144,7 @@ "properties": { "id": { "title": "Planning ID", - "description": "An identifier for this planning process.", + "description": "An identifier for the planning process.", "type": [ "string", "null" @@ -308,7 +308,7 @@ }, "deliveryLocations": { "title": "Delivery Locations", - "description": "The locations where activity related to this tender will take place.", + "description": "The locations where activity related to the opportunity will take place.", "type": "array", "items": { "$ref": "#/definitions/Location" @@ -318,7 +318,7 @@ }, "deliveryAddresses": { "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to this tender will be delivered.", + "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", "type": "array", "items": { "$ref": "#/definitions/Address" @@ -1574,7 +1574,7 @@ }, "deliveryLocations": { "title": "Delivery Locations", - "description": "The locations where activity related to this tender, contract or license will be delivered.", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "$ref": "#/definitions/Location" @@ -1585,7 +1585,7 @@ }, "deliveryAddresses": { "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to this tender, contract or license will be delivered.", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "$ref": "#/definitions/Address" @@ -1774,7 +1774,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of this location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", "type": [ "string", "null" @@ -2832,7 +2832,7 @@ "properties": { "id": { "title": "Identifier", - "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register, or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" From 30be8445155c9616c539300b0f2ab973cdad3173 Mon Sep 17 00:00:00 2001 From: Jen Harris <95221058+odscjen@users.noreply.github.com> Date: Sat, 4 May 2024 03:58:46 +0100 Subject: [PATCH 11/51] schema: add finalStatusDate to tender, award, contract (#1683) * schema: add finalStatusDate to tender, award, contract --- docs/history/changelog.md | 2 +- schema/dereferenced-release-schema.json | 54 +++++++++++++++++++ schema/release-schema.json | 27 ++++++++++ .../versioned-release-validation-schema.json | 9 ++++ 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index 89235d8a4..611c193a6 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -196,7 +196,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1654](https://github.com/open-contracting/standard/pull/1654) `tender.submissionTerms.electronicSubmissionPolicy` * [#1421](https://github.com/open-contracting/standard/pull/1421) `tender.standstillPeriod` * [#1492](https://github.com/open-contracting/standard/pull/1492) `awards.datePublished` - * [#1648](https://github.com/open-contracting/standard/pull/1648) `finalStatus` and `finalStatusDetails` to `Tender`, `Award` and `Contract` + * [#1648](https://github.com/open-contracting/standard/pull/1648) [#1683](https://github.com/open-contracting/standard/pull/1683) `finalStatus`, `finalStatusDetails` and `finalStatusDate` to `Tender`, `Award` and `Contract` * [#1208](https://github.com/open-contracting/standard/pull/1326) The estimated and maximum values of framework agreeemnts: * `tender.maximumValue`. Previously, `tender.value` was used for the maximum value. However, this led to double-counting. * `awards.maximumValue`. Previously, `awards.value` was used for the maximum value. However, this led to double-counting. diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index c258b6cdb..51cb8a4c1 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -2414,6 +2414,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the tender reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "procuringEntity": { "properties": { "name": { @@ -6363,6 +6372,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the award reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "date": { "title": "Award date", "description": "The date of the contract award. This is usually the date on which a decision to award was made.", @@ -8920,6 +8938,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the contract reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "dateSigned": { "title": "Date concluded", "description": "The date the contract was concluded. Typically, this is the date when the last buyer or supplier signed the contract. However, if no contract is signed, then the date of contract conclusion may correspond to other dates (e.g. the date when the buyer notified the supplier, which had the legal effect of concluding the contract).", @@ -15427,6 +15454,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the tender reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "procuringEntity": { "properties": { "name": { @@ -19372,6 +19408,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the award reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "date": { "title": "Award date", "description": "The date of the contract award. This is usually the date on which a decision to award was made.", @@ -21923,6 +21968,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the contract reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "dateSigned": { "title": "Date concluded", "description": "The date the contract was concluded. Typically, this is the date when the last buyer or supplier signed the contract. However, if no contract is signed, then the date of contract conclusion may correspond to other dates (e.g. the date when the buyer notified the supplier, which had the legal effect of concluding the contract).", diff --git a/schema/release-schema.json b/schema/release-schema.json index f7346ffb2..94501b4d1 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -272,6 +272,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the tender reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "procuringEntity": { "title": "Procuring entity", "description": "The organization managing the contracting (or planning) process. If an organization is both a buyer and a procuring entity (as can be the case in simple contracting processes), it should be disclosed using the buyer field, but not this field.", @@ -614,6 +623,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the award reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "date": { "title": "Award date", "description": "The date of the contract award. This is usually the date on which a decision to award was made.", @@ -798,6 +816,15 @@ "null" ] }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the contract reached its final status.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, "dateSigned": { "title": "Date concluded", "description": "The date the contract was concluded. Typically, this is the date when the last buyer or supplier signed the contract. However, if no contract is signed, then the date of contract conclusion may correspond to other dates (e.g. the date when the buyer notified the supplier, which had the legal effect of concluding the contract).", diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json index 091dd83cc..cdbca5de5 100644 --- a/schema/versioned-release-validation-schema.json +++ b/schema/versioned-release-validation-schema.json @@ -289,6 +289,9 @@ "finalStatusDetails": { "$ref": "#/definitions/StringNullVersioned" }, + "finalStatusDate": { + "$ref": "#/definitions/StringNullDateTimeVersioned" + }, "procuringEntity": { "$ref": "#/definitions/OrganizationReferenceVersionedId" }, @@ -734,6 +737,9 @@ "finalStatusDetails": { "$ref": "#/definitions/StringNullVersioned" }, + "finalStatusDate": { + "$ref": "#/definitions/StringNullDateTimeVersioned" + }, "date": { "$ref": "#/definitions/StringNullDateTimeVersioned" }, @@ -944,6 +950,9 @@ "finalStatusDetails": { "$ref": "#/definitions/StringNullVersioned" }, + "finalStatusDate": { + "$ref": "#/definitions/StringNullDateTimeVersioned" + }, "dateSigned": { "$ref": "#/definitions/StringNullDateTimeVersioned" }, From 62491894377835e27cc928387f7e871183c2fb33 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Wed, 8 May 2024 01:46:19 +1200 Subject: [PATCH 12/51] Add planning final status fields and codelist (#1642) * release-schema: Add planning final status * schema/codelists/planningFinalStatus.csv: Add examples to descriptions * Update changelog * Apply suggestions from code review Co-authored-by: odscjen <95221058+odscjen@users.noreply.github.com> * build: Run manage.py pre-commit * changelog: Fill in missing new codelists. Remove unnecessary commas. * schema: Reword planningFinalStatus descriptions. Add planning.finalStatusDetails. Remove object name from field names. Order array fields last. --------- Co-authored-by: odscjen <95221058+odscjen@users.noreply.github.com> Co-authored-by: James McKinney <26463+jpmckinney@users.noreply.github.com> --- docs/history/changelog.md | 16 +++-- schema/codelists/planningFinalStatus.csv | 3 + schema/dereferenced-release-schema.json | 64 +++++++++++++++++++ schema/release-schema.json | 32 ++++++++++ .../versioned-release-validation-schema.json | 40 ++++++++++++ 5 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 schema/codelists/planningFinalStatus.csv diff --git a/docs/history/changelog.md b/docs/history/changelog.md index 611c193a6..d5bb96265 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -71,9 +71,16 @@ Per the [normative and non-normative content and changes policy](../governance/n ### Codelists * Add new codelists: + * [#1372](https://github.com/open-contracting/standard/pull/1372) `country` * [#1316](https://github.com/open-contracting/standard/pull/1316) `language` + * [#1326](https://github.com/open-contracting/standard/pull/1326) `linkRelationType` * [#1308](https://github.com/open-contracting/standard/pull/1308) `mediaType` * [#1459](https://github.com/open-contracting/standard/pull/1459) `partyScale` + * [#1654](https://github.com/open-contracting/standard/pull/1654) `permission` + * [#1642](https://github.com/open-contracting/standard/pull/1642) `planningFinalStatus` + * [#1648](https://github.com/open-contracting/standard/pull/1648) `tenderFinalStatus` + * [#1648](https://github.com/open-contracting/standard/pull/1648) `awardFinalStatus` + * [#1648](https://github.com/open-contracting/standard/pull/1648) `contractFinalStatus` * `classificationScheme.csv`: * [#1319](https://github.com/open-contracting/standard/pull/1319) Rename from `itemClassificationScheme.csv`. @@ -155,7 +162,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * `releaseTag.csv`: * [#1238](https://github.com/open-contracting/standard/pull/1238) Open the `releaseTag` codelist. - * [#1415](https://github.com/open-contracting/standard/pull/1415), [#1509](https://github.com/open-contracting/standard/pull/1509) Align descriptions of 'planning', 'tender', 'award' and 'contract' with the corresponding schema fields. + * [#1415](https://github.com/open-contracting/standard/pull/1415) [#1509](https://github.com/open-contracting/standard/pull/1509) Align descriptions of 'planning', 'tender', 'award' and 'contract' with the corresponding schema fields. * `tenderStatus`, `awardStatus` and `contractStatus`: * [#1509](https://github.com/open-contracting/standard/pull/1509) [#1658](https://github.com/open-contracting/standard/pull/1658) Clarify semantics and deprecate codes. @@ -188,6 +195,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * Add new fields: * [#1335](https://github.com/open-contracting/standard/pull/1335) `planning.id` + * [#1642](https://github.com/open-contracting/standard/pull/1642) `planning.finalStatus`, `planning.finalStatusDetails` and `planning.finalStatusDate` * [#1324](https://github.com/open-contracting/standard/pull/1324) `tender.datePublished` * [#1296](https://github.com/open-contracting/standard/pull/1296) [#1674](https://github.com/open-contracting/standard/pull/1674) `tender.exclusionGrounds` * [#1669](https://github.com/open-contracting/standard/pull/1669) `tender.expressionOfInterestDeadline` @@ -205,7 +213,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * `contracts.estimatedValue` * [#1459](https://github.com/open-contracting/standard/pull/1459) `Organization.details.scale` * [#1326](https://github.com/open-contracting/standard/pull/1326) [#1431](https://github.com/open-contracting/standard/pull/1431) `links` - * [#1376](https://github.com/open-contracting/standard/pull/1376), [#1489](https://github.com/open-contracting/standard/pull/1489) `publisher` + * [#1376](https://github.com/open-contracting/standard/pull/1376) [#1489](https://github.com/open-contracting/standard/pull/1489) `publisher` * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.country` * [#1380](https://github.com/open-contracting/standard/pull/1380) [#1440](https://github.com/open-contracting/standard/pull/1440) `Document.languages` * [#1439](https://github.com/open-contracting/standard/pull/1439) `Document.relatedItems` @@ -478,7 +486,7 @@ See the changelogs for: ### Schema -* [#603](https://github.com/open-contracting/standard/issues/603), [#645](https://github.com/open-contracting/standard/issues/645) Add definitions to `Release`, `planning.budget`, `Milestone`, `Organization.address`, `Organization.contactPoint`, `Classification`, `Identifier`, `Value` and `Period`. +* [#603](https://github.com/open-contracting/standard/issues/603) [#645](https://github.com/open-contracting/standard/issues/645) Add definitions to `Release`, `planning.budget`, `Milestone`, `Organization.address`, `Organization.contactPoint`, `Classification`, `Identifier`, `Value` and `Period`. * [#578](https://github.com/open-contracting/standard/issues/578) Update the definition of the `buyer` field to cover goods, works and services, and multiple buyers. ### Documentation @@ -489,7 +497,7 @@ See the changelogs for: ### Extensions -* [#40](https://github.com/open-contracting/ocds-extensions/issues/40), [#43](https://github.com/open-contracting/ocds-extensions/issues/43), [#47](https://github.com/open-contracting/ocds-extensions/issues/47) Add missing definitions, codelists and enums to core extensions, correct typos in codelist filenames, disallow use of `null` as an item in arrays, disallow required fields from being set to `null`, allow optional fields to be `null`, use `OrganizationReference` instead of `Organization`. +* [#40](https://github.com/open-contracting/ocds-extensions/issues/40) [#43](https://github.com/open-contracting/ocds-extensions/issues/43) [#47](https://github.com/open-contracting/ocds-extensions/issues/47) Add missing definitions, codelists and enums to core extensions, correct typos in codelist filenames, disallow use of `null` as an item in arrays, disallow required fields from being set to `null`, allow optional fields to be `null`, use `OrganizationReference` instead of `Organization`. ## [1.1.2] - 2017-11-10 diff --git a/schema/codelists/planningFinalStatus.csv b/schema/codelists/planningFinalStatus.csv new file mode 100644 index 000000000..abdeb88bd --- /dev/null +++ b/schema/codelists/planningFinalStatus.csv @@ -0,0 +1,3 @@ +Code,Title,Description +cancelled,Cancelled,"The planning process was cancelled by the buyer or the procuring entity (for example, because of a change in needs, insufficient funds, or technical or procedural errors) before any contracting process was planned successfully." +unsuccessful,Unsuccessful,"The planning process failed (for example, because stakeholders rejected the proposed purchase) before any contracting process was planned successfully." diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 51cb8a4c1..8ea5d2834 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -1584,6 +1584,38 @@ } } }, + "finalStatus": { + "title": "Final status", + "description": "The final status of the planning process, using the closed [planningFinalStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#planning-final-status) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "planningFinalStatus.csv", + "openCodelist": false, + "enum": [ + "cancelled", + "unsuccessful", + null + ] + }, + "finalStatusDetails": { + "title": "Final status details", + "description": "Additional details on the final status of the planning process. This field can be used to provide the local name of the final status.", + "type": [ + "string", + "null" + ] + }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the planning process reached its final status.", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, "documents": { "title": "Documents", "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", @@ -14624,6 +14656,38 @@ } } }, + "finalStatus": { + "title": "Final status", + "description": "The final status of the planning process, using the closed [planningFinalStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#planning-final-status) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "planningFinalStatus.csv", + "openCodelist": false, + "enum": [ + "cancelled", + "unsuccessful", + null + ] + }, + "finalStatusDetails": { + "title": "Final status details", + "description": "Additional details on the final status of the planning process. This field can be used to provide the local name of the final status.", + "type": [ + "string", + "null" + ] + }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the planning process reached its final status.", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, "documents": { "title": "Documents", "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", diff --git a/schema/release-schema.json b/schema/release-schema.json index 94501b4d1..9a87855bc 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -163,6 +163,38 @@ "description": "Details of the budget that will fund the future contract(s)", "$ref": "#/definitions/Budget" }, + "finalStatus": { + "title": "Final status", + "description": "The final status of the planning process, using the closed [planningFinalStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#planning-final-status) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "planningFinalStatus.csv", + "openCodelist": false, + "enum": [ + "cancelled", + "unsuccessful", + null + ] + }, + "finalStatusDetails": { + "title": "Final status details", + "description": "Additional details on the final status of the planning process. This field can be used to provide the local name of the final status.", + "type": [ + "string", + "null" + ] + }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the planning process reached its final status.", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, "documents": { "title": "Documents", "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json index cdbca5de5..3f0c16627 100644 --- a/schema/versioned-release-validation-schema.json +++ b/schema/versioned-release-validation-schema.json @@ -126,6 +126,46 @@ "budget": { "$ref": "#/definitions/Budget" }, + "finalStatus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "codelist": "planningFinalStatus.csv", + "openCodelist": false, + "enum": [ + "cancelled", + "unsuccessful", + null + ] + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "finalStatusDetails": { + "$ref": "#/definitions/StringNullVersioned" + }, + "finalStatusDate": { + "$ref": "#/definitions/StringNullDateTimeVersioned" + }, "documents": { "type": "array", "items": { From 31f6acf002c8facd9aeae6ac14fcd2b0d701a468 Mon Sep 17 00:00:00 2001 From: odscjen Date: Wed, 15 May 2024 12:28:39 +0100 Subject: [PATCH 13/51] add ImmediateContainer, Quantity and SimplyUnit, clarify Unit use --- .../release_package.json | 20 + docs/schema/reference.md | 25 +- schema/dereferenced-release-schema.json | 636 +++++++++++++++++- schema/release-schema.json | 87 ++- .../versioned-release-validation-schema.json | 143 ++++ 5 files changed, 880 insertions(+), 31 deletions(-) diff --git a/docs/examples/release_schema_reference/release_package.json b/docs/examples/release_schema_reference/release_package.json index a428e8272..31d3154f4 100644 --- a/docs/examples/release_schema_reference/release_package.json +++ b/docs/examples/release_schema_reference/release_package.json @@ -155,6 +155,26 @@ "currency": "GBP" } } + }, + { + "id": "0002", + "description": "Paint for road markings", + "classification": { + "scheme": "CPV", + "id": "44811000", + "description": "Road paint", + "uri": "http://cpv.data.ac.uk/code-44811000" + }, + "immediateContainer": { + "name": "Can/Tin", + "capacity": { + "unit": { + "scheme": "UNCEFACT", + "id": "GLI" + }, + "value": "[100,100]" + } + } } ], "value": { diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 22cfafe62..cc9b07dcd 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -537,11 +537,11 @@ The items block is used to list the line-items associated with a tender, award o #### Unit -The `unit` block allows detailed specification of the parameters and price of units that make up a line-item. +The `unit` block allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` subschema. -If the [Quantities, Units, Dimensions and Data Types Ontologies](https://www.qudt.org) unit classification scheme is used, then publishers can use its CamelCase unit names, such as "SquareMile", in the `unit.name` field. +If the [Quantities, Units, Dimensions and Data Types Ontologies](https://www.qudt.org) unit classification scheme is used, then publishers may use its CamelCase unit names, such as "SquareMile", in the `unit.name` field. -Other unit classification schemes can be used, including those in the [unitClassificationScheme codelist](codelists.md#unit-classification-scheme). +Other unit classification schemes may be used, including those in the [unitClassificationScheme codelist](codelists.md#unit-classification-scheme). ````{admonition} Example :class: hint @@ -558,6 +558,25 @@ Other unit classification schemes can be used, including those in the [unitClass :collapse: value ``` +#### ImmediateContainer + +The `ImmediateContainer` subschema allows detailed specification of the immediate container of an item. This is also known as the presentation, the presentation form, the package. For units of measurement it is recommended to use the `Unit` subschema. + +````{admonition} Example +:class: hint + +```{jsoninclude} ../examples/release_schema_reference/release_package.json +:jsonpointer: /releases/0/tender/items/1 +:expand: immediateContainer +:title: immediateContainer +``` +```` + +```{jsonschema} ../../build/current_lang/release-schema.json +:pointer: /definitions/Item/properties/immediateContainer +:collapse: capacity +``` + ### Classification ````{admonition} Example diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 8ea5d2834..3afe0cb86 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -3078,7 +3078,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -3101,7 +3101,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -3455,7 +3455,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -3463,6 +3463,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -8099,7 +8163,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -8122,7 +8186,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -8476,7 +8540,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -8484,6 +8548,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -10159,7 +10287,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -10182,7 +10310,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -10536,7 +10664,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -10544,6 +10672,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -16150,7 +16342,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -16173,7 +16365,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -16527,7 +16719,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -16535,6 +16727,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -21167,7 +21423,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -21190,7 +21446,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -21544,7 +21800,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -21552,6 +21808,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -23221,7 +23541,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -23244,7 +23564,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -23598,7 +23918,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -23606,6 +23926,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -33839,7 +34223,7 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "type": "object", "properties": { "scheme": { @@ -33862,7 +34246,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -34216,7 +34600,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -34224,6 +34608,70 @@ ] } } + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 } } }, @@ -35210,7 +35658,7 @@ }, "Unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This object should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` object.", "type": "object", "properties": { "scheme": { @@ -35233,7 +35681,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -35587,7 +36035,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -35596,6 +36044,146 @@ } } }, + "ImmediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + } + }, + "minProperties": 1 + }, + "Quantity": { + "title": "Quantity", + "description": "The quantity of a thing.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + }, + "SimpleUnit": { + "title": "Simple unit", + "description": "A unit of measurement.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, "Link": { "title": "Link", "description": "A reference to a related resource.", diff --git a/schema/release-schema.json b/schema/release-schema.json index 9a87855bc..bf059b2e2 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -1603,8 +1603,13 @@ }, "unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", "$ref": "#/definitions/Unit" + }, + "immediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "$ref": "#/definitions/ImmediateContainer" } } }, @@ -2591,7 +2596,7 @@ }, "Unit": { "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This object should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` object.", "type": "object", "properties": { "scheme": { @@ -2614,7 +2619,7 @@ }, "name": { "title": "Name", - "description": "Name of the unit.", + "description": "The name of the unit.", "type": [ "string", "null" @@ -2627,7 +2632,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", "format": "uri", "type": [ "string", @@ -2636,6 +2641,80 @@ } } }, + "ImmediateContainer": { + "title": "Immediate container", + "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "capacity": { + "title": "Capacity", + "description": "The storage capacity of the container.", + "$ref": "#/definitions/Quantity" + } + }, + "minProperties": 1 + }, + "Quantity": { + "title": "Quantity", + "description": "The quantity of a thing.", + "type": "object", + "properties": { + "unit": { + "title": "Unit", + "description": "The unit of measurement for the quantity.", + "$ref": "#/definitions/SimpleUnit" + }, + "value": { + "title": "Value", + "description": "The quantity, as a multiple of the unit of measurement. The quantity is expressed in interval notation, for example: \"[10,10]\" for 10 units, \"[1,10]\" for 1 to 10 units, or \"[10,INF[\" for 10 or more units.", + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + } + }, + "minProperties": 1 + }, + "SimpleUnit": { + "title": "Simple unit", + "description": "A unit of measurement.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "id": { + "title": "ID", + "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + } + }, + "minProperties": 1 + }, "Link": { "title": "Link", "description": "A reference to a related resource.", diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json index 3f0c16627..260a92b29 100644 --- a/schema/versioned-release-validation-schema.json +++ b/schema/versioned-release-validation-schema.json @@ -1874,6 +1874,9 @@ }, "unit": { "$ref": "#/definitions/Unit" + }, + "immediateContainer": { + "$ref": "#/definitions/ImmediateContainer" } } }, @@ -2973,6 +2976,146 @@ } } }, + "ImmediateContainer": { + "type": "object", + "properties": { + "name": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "capacity": { + "$ref": "#/definitions/Quantity" + } + }, + "minProperties": 1 + }, + "Quantity": { + "type": "object", + "properties": { + "unit": { + "$ref": "#/definitions/SimpleUnit" + }, + "value": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number", + "null" + ], + "pattern": "^[([\\]][0-9]+,([0-9]+|INF)[)[\\]]$" + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "minProperties": 1 + }, + "SimpleUnit": { + "type": "object", + "properties": { + "scheme": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true, + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "versionId": true, + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "minProperties": 1 + }, "Link": { "type": "object", "properties": { From 71c1b3fdcfea46de1bb93bac133e104d0584c9f1 Mon Sep 17 00:00:00 2001 From: Jen Harris <95221058+odscjen@users.noreply.github.com> Date: Wed, 15 May 2024 15:07:07 +0100 Subject: [PATCH 14/51] Apply suggestions from code review Co-authored-by: James McKinney <26463+jpmckinney@users.noreply.github.com> --- docs/schema/reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/schema/reference.md b/docs/schema/reference.md index cc9b07dcd..808fc99f4 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -537,7 +537,7 @@ The items block is used to list the line-items associated with a tender, award o #### Unit -The `unit` block allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` subschema. +The `unit` subschema allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. For units of presentation, use the [`ImmediateContainer` subschema](#immediatecontainer), which is used by the [`Item.immediateContainer` field](#item). If the [Quantities, Units, Dimensions and Data Types Ontologies](https://www.qudt.org) unit classification scheme is used, then publishers may use its CamelCase unit names, such as "SquareMile", in the `unit.name` field. @@ -560,7 +560,7 @@ Other unit classification schemes may be used, including those in the [unitClass #### ImmediateContainer -The `ImmediateContainer` subschema allows detailed specification of the immediate container of an item. This is also known as the presentation, the presentation form, the package. For units of measurement it is recommended to use the `Unit` subschema. +The `ImmediateContainer` subschema allows detailed specification of the immediate container of an item. This is also called the presentation, presentation form, or package. For units of measurement, use the [`Unit` subschema](#unit). ````{admonition} Example :class: hint From d093624cbcacd7b3ad9427bc8a5b4e7a5f5d9fb4 Mon Sep 17 00:00:00 2001 From: odscjen Date: Wed, 15 May 2024 15:21:53 +0100 Subject: [PATCH 15/51] add definition of unit of measurement to reference.md --- docs/schema/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 808fc99f4..370b1d754 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -537,7 +537,7 @@ The items block is used to list the line-items associated with a tender, award o #### Unit -The `unit` subschema allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. For units of presentation, use the [`ImmediateContainer` subschema](#immediatecontainer), which is used by the [`Item.immediateContainer` field](#item). +The `unit` subschema allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention, that is used as a standard of measurement for the same kind of quantity. For example weight is a physical quantity, and the kilogram can be used as a unit of measurement for weight. For units of presentation, use the [`ImmediateContainer` subschema](#immediatecontainer), which is used by the [`Item.immediateContainer` field](#item). If the [Quantities, Units, Dimensions and Data Types Ontologies](https://www.qudt.org) unit classification scheme is used, then publishers may use its CamelCase unit names, such as "SquareMile", in the `unit.name` field. From dfeaa30839688701262856c741cdf99e4acb0c24 Mon Sep 17 00:00:00 2001 From: odscjen Date: Thu, 23 May 2024 09:51:51 +0100 Subject: [PATCH 16/51] classificationScheme.csv: add eu-buyer-legal-type --- schema/codelists/classificationScheme.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schema/codelists/classificationScheme.csv b/schema/codelists/classificationScheme.csv index 2aca73f40..359e7efb5 100644 --- a/schema/codelists/classificationScheme.csv +++ b/schema/codelists/classificationScheme.csv @@ -18,5 +18,6 @@ sdg,Sustainable Development Goals,"The Sustainable Development Goals are a colle sdgTarget,Sustainable Development Goal Targets,The Sustainable Development Goal Targets are specific targets for each Sustainable Development Goal.,https://unstats.un.org/sdgs/indicators/indicators-list/,tender TED_CA_TYPE,EU Type of contracting authority (TED schema),The types of contracting authority within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in TED schema.,https://simap.ted.europa.eu/documents/10184/99173/EN_F01.pdf,organization TED_CE_ACTIVITY,EU Main activity of contracting entity (TED schema),The main activity of the contracting entity within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in TED schema.,https://simap.ted.europa.eu/documents/10184/99173/EN_F04.pdf,organization -eu-buyer-contracting-type,EU Buyer contracting entity type,Whether or not the buyer is a contracting entity within the domain of public procurement according to the legislation of the European Parliament.,https://docs.ted.europa.eu/eforms/latest/reference/code-lists/buyer-contracting-type.html,organization +eu-buyer-contracting-type,EU Buyer contracting entity type (eForms),Whether or not the buyer is a contracting entity within the domain of public procurement according to the legislation of the European Parliament.,https://docs.ted.europa.eu/eforms/latest/reference/code-lists/buyer-contracting-type.html,organization eu-main-activity,EU Main activity authority list (eForms),The main activity of the contracting entity within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in eForms.,https://op.europa.eu/en/web/eu-vocabularies/concept-scheme/-/resource?uri=http://publications.europa.eu/resource/authority/main-activity,organization +eu-buyer-legal-type,EU Buyer legal type (eForms),The type of the procuring authority within the domain of public procurement according to the legislation of the European Parliament. This scheme's codes match those in eForms.,https://op.europa.eu/en/web/eu-vocabularies/concept-scheme/-/resource?uri=http://publications.europa.eu/resource/authority/buyer-legal-type,organization From 13b8b067d029b67be08aa599a164a7142b7dad7a Mon Sep 17 00:00:00 2001 From: odscjen Date: Thu, 23 May 2024 09:53:58 +0100 Subject: [PATCH 17/51] update changelog.md --- docs/history/changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index d5bb96265..d40286dac 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -87,12 +87,13 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1210](https://github.com/open-contracting/standard/pull/1210) Add codes from the legal basis extension: * 'CELEX' * 'LEXML' - * [#1218](https://github.com/open-contracting/standard/pull/1218) [#1679](https://github.com/open-contracting/standard/pull/1679) Add codes from the organization classification extension: + * [#1218](https://github.com/open-contracting/standard/pull/1218) [#1679](https://github.com/open-contracting/standard/pull/1679) [#1692](https://github.com/open-contracting/standard/pull/1692) Add codes from the organization classification extension: * 'COFOG' * 'TED_CA_TYPE' * 'TED_CE_ACTIVITY' * 'eu-buyer-contracting-type' * 'eu-main-activity' + * 'eu-buyer-legal-type' * [#1452](https://github.com/open-contracting/standard/pull/1452) Add 'proClass'. * [#1637](https://github.com/open-contracting/standard/pull/1637) Add 'sdg' and 'sdgTarget'. From c0f177d8ce19bf5b9fa70e27dcbafec20965e4ef Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:48:53 -0400 Subject: [PATCH 18/51] release-schema: Unit of presentation is allowed, but discouraged. Link to immediateContainer codelist. Align SimpleUnit, Unit, Classification. --- manage.py | 6 +- schema/dereferenced-release-schema.json | 136 ++++++++++++------------ schema/release-schema.json | 20 ++-- 3 files changed, 83 insertions(+), 79 deletions(-) diff --git a/manage.py b/manage.py index 6b018148f..3bce47b69 100755 --- a/manage.py +++ b/manage.py @@ -228,7 +228,11 @@ def _add_versioned(schema, unversioned_pointers, pointer, key, value): types = coerce_to_list(value, 'type') # If a type is unrecognized, we might need to update this script. - if '$ref' not in value and types not in recognized_types: + if ( + '$ref' not in value + and types not in recognized_types + and not (pointer == '/definitions/Quantity/properties/value' and types == ['string', 'number', 'null']) + ): warnings.warn(f'{pointer} has unrecognized type {types}') # For example, if $ref is used. diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 3afe0cb86..cf02311f6 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -3077,13 +3077,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -3093,7 +3093,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -3455,7 +3455,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -3471,7 +3471,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -3490,7 +3490,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -3501,7 +3501,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -8162,13 +8162,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -8178,7 +8178,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -8540,7 +8540,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -8556,7 +8556,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -8575,7 +8575,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -8586,7 +8586,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -10286,13 +10286,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -10302,7 +10302,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -10664,7 +10664,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -10680,7 +10680,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -10699,7 +10699,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -10710,7 +10710,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -16341,13 +16341,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -16357,7 +16357,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -16719,7 +16719,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -16735,7 +16735,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -16754,7 +16754,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -16765,7 +16765,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -21422,13 +21422,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -21438,7 +21438,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -21800,7 +21800,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -21816,7 +21816,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -21835,7 +21835,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -21846,7 +21846,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -23540,13 +23540,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -23556,7 +23556,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -23918,7 +23918,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -23934,7 +23934,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -23953,7 +23953,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -23964,7 +23964,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -34222,13 +34222,13 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -34238,7 +34238,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -34600,7 +34600,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -34616,7 +34616,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -34635,7 +34635,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -34646,7 +34646,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -35657,13 +35657,13 @@ } }, "Unit": { - "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This object should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` object.", + "title": "Pricing unit", + "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -35673,7 +35673,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -36035,7 +36035,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -36051,7 +36051,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -36070,7 +36070,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -36081,7 +36081,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -36120,7 +36120,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -36131,7 +36131,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -36162,7 +36162,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -36173,7 +36173,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" diff --git a/schema/release-schema.json b/schema/release-schema.json index bf059b2e2..1d418bf21 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -1602,8 +1602,8 @@ ] }, "unit": { - "title": "Unit", - "description": "A description of the unit of in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This field should be used for units of measurement only. For units of presentation it is recommended to use the `immediateContainer` field.", + "title": "Pricing unit", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "$ref": "#/definitions/Unit" }, "immediateContainer": { @@ -2595,13 +2595,13 @@ } }, "Unit": { - "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price. This object should be used for units of measurement only. For units of presentation it is recommended to use the `ImmediateContainer` object.", + "title": "Pricing unit", + "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", "type": "object", "properties": { "scheme": { "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended for a unit of measurement.", "type": [ "string", "null" @@ -2611,7 +2611,7 @@ }, "id": { "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "description": "The identifier for the unit, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" @@ -2632,7 +2632,7 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the `scheme`.", + "description": "A URI to uniquely identify the unit.", "format": "uri", "type": [ "string", @@ -2648,7 +2648,7 @@ "properties": { "name": { "title": "Name", - "description": "The common name of the container. It is recommended to use titles from the immediateContainer codelist in the [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension for medicine items, or titles from the [GS1 GDSN PackageTypeCodelist](https://www.gs1.org/standards/gdsn) for other items.", + "description": "The common name of the container. For medicine items, it is recommended to use a title from the [immediateContainer](https://extensions.open-contracting.org/en/extensions/medicine/master/codelists/#immediateContainer.csv) codelist in the OCDS [Medicine](https://extensions.open-contracting.org/en/extensions/medicine/master/) extension. For other items, it is recommended to use a title from PackageTypeCodelist in the GS1 [Global Data Synchronisation Network (GDSN)](https://www.gs1.org/standards/gdsn) standard.", "type": [ "string", "null" @@ -2693,7 +2693,7 @@ "properties": { "scheme": { "title": "Scheme", - "description": "The codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "description": "The scheme or codelist from which the identifier for the unit of measurement is taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", "type": [ "string", "null" @@ -2704,7 +2704,7 @@ }, "id": { "title": "ID", - "description": "The identifier for the unit of measurement, taken from the codelist referenced by the `scheme` field. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", + "description": "The identifier for the unit of measurement, taken from the scheme. Refer to the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find identifiers within schemes.", "type": [ "string", "null" From f049f111d13611bbf6cc32b269cb5202755b1c70 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:15:10 -0400 Subject: [PATCH 19/51] chore: Update JS style to latest profile template --- .github/workflows/js.yml | 7 +- docs/_static/script.js | 138 ++++++++++++++++++++------------------- 2 files changed, 74 insertions(+), 71 deletions(-) diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index b23aea2d5..4c8147e26 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -6,8 +6,5 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 18 - - run: npm install standard eslint-plugin-import@2.26.0 - - run: npx standard docs/_static/script.js + - uses: biomejs/setup-biome@v2 + - run: biome ci --indent-style=space --line-width=119 docs/_static/script.js diff --git a/docs/_static/script.js b/docs/_static/script.js index e46cd638a..ffd653486 100644 --- a/docs/_static/script.js +++ b/docs/_static/script.js @@ -1,35 +1,40 @@ /* global XMLHttpRequest, location, renderjson */ -const pathComponents = window.location.pathname.split('/') -if (pathComponents[pathComponents.length - 2] === 'codelists') { - document.querySelector('.wy-nav-content').style.maxWidth = 'none' +const pathComponents = window.location.pathname.split("/"); +if (pathComponents[pathComponents.length - 2] === "codelists") { + document.querySelector(".wy-nav-content").style.maxWidth = "none"; } // FYI: extensionlist appears many times on /schema/reference/ -if (document.querySelector('.extension_list')) { - const language = location.pathname.split('/')[2] +if (document.querySelector(".extension_list")) { + const language = location.pathname.split("/")[2]; // Append an empty list for community extensions. - document.querySelectorAll('.extension_list .hide').forEach(element => { - const dl = document.createElement('dl') - dl.className = 'simple community-list hide' - element.insertAdjacentElement('afterend', dl) - element.innerHTML = `${element.innerHTML}` - }) + for (const element of document.querySelectorAll(".extension_list .hide")) { + const dl = document.createElement("dl"); + dl.className = "simple community-list hide"; + element.insertAdjacentElement("afterend", dl); + element.innerHTML = `${element.innerHTML}`; + } // Get the community extensions to add to the documentation. - const request = new XMLHttpRequest() - request.open('GET', 'https://raw.githubusercontent.com/open-contracting/extension_registry/main/build/extensions.json') - request.responseType = 'json' + const request = new XMLHttpRequest(); + request.open( + "GET", + "https://raw.githubusercontent.com/open-contracting/extension_registry/main/build/extensions.json", + ); + request.responseType = "json"; request.onload = () => { if (request.status >= 200 && request.status < 400) { // Add community extensions. - request.response.extensions.forEach(extension => { + for (const extension of request.response.extensions) { if (!extension.core) { - const div = document.getElementById(`extensionlist-${extension.category}`) + const div = document.getElementById(`extensionlist-${extension.category}`); if (div) { - div.querySelector('.community-list').insertAdjacentHTML('beforeend', ` + div.querySelector(".community-list").insertAdjacentHTML( + "beforeend", + `
${extension.name[language] || extension.name.en} @@ -38,79 +43,80 @@ if (document.querySelector('.extension_list')) {
${extension.description[language] || extension.description.en}
- `) - div.querySelectorAll('.hide').forEach(element => { - element.classList.remove('hide') - }) + `, + ); + for (const element of div.querySelectorAll(".hide")) { + element.classList.remove("hide"); + } } } - }) + } // Remove empty extension lists. - document.querySelectorAll('.extension_list').forEach(element => { - if (!element.querySelector('a')) { - element.remove() + for (const element of document.querySelectorAll(".extension_list")) { + if (!element.querySelector("a")) { + element.remove(); } - }) + } } - } + }; - request.send() + request.send(); } -document.querySelectorAll('.expandjson').forEach(element => { - const defaultOpen = [] - let fileClassName - element.classList.forEach(className => { - if (className.substring(0, 7) === 'expand-' && className.length > 7) { - defaultOpen.push(className.substring(7)) +for (const element of document.querySelectorAll(".expandjson")) { + const defaultOpen = []; + let fileClassName; + for (const className of element.classList) { + if (className.substring(0, 7) === "expand-" && className.length > 7) { + defaultOpen.push(className.substring(7)); } - if (className.substring(0, 5) === 'file-') { - fileClassName = className + if (className.substring(0, 5) === "file-") { + fileClassName = className; } - }) + } - let data = JSON.parse(element.textContent) + let data = JSON.parse(element.textContent); // If the jsoninclude directive indexed to a JSON array (a common mistake), only display the first entry. if (data.length) { - data = data[0] + data = data[0]; } - const replacement = renderjson.set_show_to_level(1).set_max_string_length(100).set_default_open(defaultOpen)(data) + const replacement = renderjson.set_show_to_level(1).set_max_string_length(100).set_default_open(defaultOpen)(data); // element.firstElementChild.replaceWith(replacement) // https://caniuse.com/mdn-api_parentnode_firstelementchild - element.replaceChild(replacement, element.querySelector('.highlight-json')) + element.replaceChild(replacement, element.querySelector(".highlight-json")); - const container = element.previousElementSibling - let select - if (container && container.classList.contains('selection-container')) { + const container = element.previousElementSibling; + let select; + if (container?.classList.contains("selection-container")) { // Hide additional examples. - element.style.display = 'none' - container.appendChild(element) + element.style.display = "none"; + container.appendChild(element); // Display the select element if there are multiple options. - select = container.querySelector('select') - select.style.display = '' + select = container.querySelector("select"); + select.style.display = ""; } else { - const div = document.createElement('div') - element.insertAdjacentElement('beforebegin', div) - div.className = 'selection-container' - div.appendChild(element) + const div = document.createElement("div"); + element.insertAdjacentElement("beforebegin", div); + div.className = "selection-container"; + div.appendChild(element); - select = document.createElement('select') - div.insertAdjacentElement('afterbegin', select) + select = document.createElement("select"); + div.insertAdjacentElement("afterbegin", select); // Hide the select element if there is one option. - select.style.display = 'none' - select.addEventListener('change', () => { - div.querySelectorAll('.expandjson').forEach(child => { - child.style.display = 'none' - }) - div.querySelector(`.${select.value}`).style.display = '' - }) + select.style.display = "none"; + select.addEventListener("change", () => { + for (const child of div.querySelectorAll(".expandjson")) { + child.style.display = "none"; + } + div.querySelector(`.${select.value}`).style.display = ""; + }); } - const option = document.createElement('option') - option.value = fileClassName - option.textContent = fileClassName.replace('file-', '') - select.appendChild(option) -}) + const option = document.createElement("option"); + option.value = fileClassName; + option.textContent = fileClassName.replace("file-", ""); + select.appendChild(option); +} From 796405a8fa335ba37f018e9e9703962b15b19be7 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:15:51 -0400 Subject: [PATCH 20/51] chore: Update to latest profile template --- .github/workflows/shell.yml | 3 ++- common-requirements.txt | 10 +++++----- script/diff | 7 ++++--- script/update | 7 ++++--- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.github/workflows/shell.yml b/.github/workflows/shell.yml index e87989085..fe96765b8 100644 --- a/.github/workflows/shell.yml +++ b/.github/workflows/shell.yml @@ -8,6 +8,7 @@ jobs: - uses: actions/checkout@v4 - run: | sudo apt update - sudo apt install shellcheck shfmt + sudo apt install devscripts shellcheck shfmt + - run: checkbashisms $(shfmt -f .) - run: shellcheck $(shfmt -f .) - run: shfmt -d -i 4 -sr $(shfmt -f .) diff --git a/common-requirements.txt b/common-requirements.txt index 089b9bfb1..ff4de52f3 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -56,7 +56,7 @@ exceptiongroup==1.0.0 # pytest h11==0.13.0 # via wsproto -idna==2.10 +idna==3.7 # via # requests # trio @@ -64,7 +64,7 @@ imagesize==1.4.1 # via sphinx iniconfig==1.1.1 # via pytest -jinja2==3.1.3 +jinja2==3.1.4 # via # myst-parser # sphinx @@ -123,7 +123,7 @@ pytz==2021.1 # via babel pyyaml==6.0.1 # via myst-parser -requests==2.31.0 +requests==2.32.2 # via # elasticsearch # ocdsextensionregistry @@ -151,7 +151,7 @@ sphinx==5.3.0 # sphinx-intl sphinx-autobuild==2021.3.14 # via -r common-requirements.in -sphinx-intl==2.1.0 +sphinx-intl==2.2.0 # via -r common-requirements.in sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -171,7 +171,7 @@ tomli==2.0.1 # pip-tools # pyproject-hooks # pytest -tornado==6.3.3 +tornado==6.4.1 # via livereload trio==0.20.0 # via diff --git a/script/diff b/script/diff index 988c0fff9..cf7e85060 100755 --- a/script/diff +++ b/script/diff @@ -1,6 +1,7 @@ -#!/usr/bin/env bash -# No -e, because diff fails. -set -uo pipefail +#!/bin/sh + +# No -e, because diff uses exit status 1 when differences are found. +set -u curl -sS https://raw.githubusercontent.com/open-contracting/standard_profile_template/latest/docs/conf.py | diff -u - docs/conf.py diff --git a/script/update b/script/update index ada17caa4..cba8c6fc2 100755 --- a/script/update +++ b/script/update @@ -1,7 +1,8 @@ -#!/usr/bin/env bash -set -euo pipefail +#!/bin/sh -function main { +set -eu + +main() { mkdir -p script include tests for f in Makefile common-requirements.in common-requirements.txt .github/dependabot.yml .github/workflows/lint.yml .github/workflows/shell.yml docs/_static/favicon-16x16.ico include/common.mk include/prologue.mk include/header.html script/diff script/update tests/conftest.py tests/test_common.py; do From d518130b9fd8f465333f29a81dcd94a72b1564d3 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:19:21 -0400 Subject: [PATCH 21/51] chore: Fix typo in changelog --- docs/history/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index d5bb96265..f52ced19b 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -205,7 +205,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1421](https://github.com/open-contracting/standard/pull/1421) `tender.standstillPeriod` * [#1492](https://github.com/open-contracting/standard/pull/1492) `awards.datePublished` * [#1648](https://github.com/open-contracting/standard/pull/1648) [#1683](https://github.com/open-contracting/standard/pull/1683) `finalStatus`, `finalStatusDetails` and `finalStatusDate` to `Tender`, `Award` and `Contract` - * [#1208](https://github.com/open-contracting/standard/pull/1326) The estimated and maximum values of framework agreeemnts: + * [#1208](https://github.com/open-contracting/standard/pull/1326) The estimated and maximum values of framework agreements: * `tender.maximumValue`. Previously, `tender.value` was used for the maximum value. However, this led to double-counting. * `awards.maximumValue`. Previously, `awards.value` was used for the maximum value. However, this led to double-counting. * `awards.estimatedValue` From b95e9ccbc5ec552ff182f9e7349a9a9fd94a9b1a Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:22:45 -0400 Subject: [PATCH 22/51] ci: Add sme exception --- .github/workflows/spellcheck.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 300eefc34..b60b28a2b 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -10,4 +10,4 @@ jobs: with: python-version: '3.10' - run: pip install codespell - - run: codespell -S .git,docson,locale,examples,country.csv,currency.csv,language.csv,mediaType.csv -L fo,zar . + - run: codespell -S .git,docson,locale,examples,country.csv,currency.csv,language.csv,mediaType.csv -L fo,sme,zar,SME . From 0538f7f010bf90c839c7fcf53e0032544765e17e Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:45:52 -0400 Subject: [PATCH 23/51] changelog: Re-order according to: ocid, id, date, parties, buyer, planning, tender, award, contracts, then alphabetical. Use field paths instead of subschema names if possible. --- docs/history/changelog.md | 77 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index f52ced19b..ef15aacf4 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -160,6 +160,11 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1352](https://github.com/open-contracting/standard/pull/1352) Replace "party", "entity", etc. with "organization". * [#1353](https://github.com/open-contracting/standard/pull/1353) Replace "submit a tender" with "submit a bid". +* `relatedProcess.csv`: + * [#1645](https://github.com/open-contracting/standard/pull/1645) Deprecate "parent-to-child" codes: 'subContract', 'replacementProcess' and 'renewalProcess' + * [#1670](https://github.com/open-contracting/standard/pull/1670) Deprecate 'parent' code, because a subcontract needs to be described within its main contract, not within a separate contracting process + * [#1645](https://github.com/open-contracting/standard/pull/1645) Update descriptions: 'prior', 'framework', 'unsuccessfulProcess' + * `releaseTag.csv`: * [#1238](https://github.com/open-contracting/standard/pull/1238) Open the `releaseTag` codelist. * [#1415](https://github.com/open-contracting/standard/pull/1415) [#1509](https://github.com/open-contracting/standard/pull/1509) Align descriptions of 'planning', 'tender', 'award' and 'contract' with the corresponding schema fields. @@ -172,16 +177,12 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1209](https://github.com/open-contracting/standard/pull/1209) Replace "electronic goods" with "digital goods" in the description of 'goods' from the `procurementCategory` codelist, to align with the description in the World Trade Organization's Agreement on Government Procurement, and to avoid confusion between electronic goods like computers and digital goods like software. * [#1530](https://github.com/open-contracting/standard/pull/1530) Use consistent wording for "goods, services and/or works" in the `classificationScheme`, `extendedProcurementCategory`, `partyRole` and `procurementCategory` codelists. * [#1550](https://github.com/open-contracting/standard/pull/1550) Align and improve code descriptions in `extendedProcurementCategory` and `procurementCategory`. -* `relatedProcess.csv`: - * [#1645](https://github.com/open-contracting/standard/pull/1645) Deprecate "parent-to-child" codes: 'subContract', 'replacementProcess' and 'renewalProcess' - * [#1670](https://github.com/open-contracting/standard/pull/1670) Deprecate 'parent' code, because a subcontract needs to be described within its main contract, not within a separate contracting process - * [#1645](https://github.com/open-contracting/standard/pull/1645) Update descriptions: 'prior', 'framework', 'unsuccessfulProcess' ### Schema * Clarify core concepts: * [#1216](https://github.com/open-contracting/standard/pull/1216) Define contracting process and planning process in the schema description. Update definition of release, record and ocid. Update references to contracting process so that it takes take the planning process into account. - * [#1513](https://github.com/open-contracting/standard/pull/1513) Update fields' use of "contracting process" and "contracting (or planning) process" to reflect the new definition. Align `budget.project` and `budget.projectID`. + * [#1513](https://github.com/open-contracting/standard/pull/1513) Update fields' use of "contracting process" and "contracting (or planning) process" to reflect the new definition. Align `planning.budget.project` and `planning.budget.projectID`. * [#1443](https://github.com/open-contracting/standard/pull/1443) `date` * [#1182](https://github.com/open-contracting/standard/pull/1182) `buyer` * [#1163](https://github.com/open-contracting/standard/pull/1163) `tender.procuringEntity` @@ -192,8 +193,9 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1208](https://github.com/open-contracting/standard/pull/1208) `contracts` and its fields * [#1415](https://github.com/open-contracting/standard/pull/1415) `planning`, `Planning`, `tender`, `Tender`, `awards`, `contracts` and minor alignment of "planning process" (part of the description of the schema) with `planning`. - * Add new fields: + * [#1679](https://github.com/open-contracting/standard/pull/1679) `parties.details.classifications` + * [#1459](https://github.com/open-contracting/standard/pull/1459) `parties.details.scale` * [#1335](https://github.com/open-contracting/standard/pull/1335) `planning.id` * [#1642](https://github.com/open-contracting/standard/pull/1642) `planning.finalStatus`, `planning.finalStatusDetails` and `planning.finalStatusDate` * [#1324](https://github.com/open-contracting/standard/pull/1324) `tender.datePublished` @@ -204,6 +206,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1654](https://github.com/open-contracting/standard/pull/1654) `tender.submissionTerms.electronicSubmissionPolicy` * [#1421](https://github.com/open-contracting/standard/pull/1421) `tender.standstillPeriod` * [#1492](https://github.com/open-contracting/standard/pull/1492) `awards.datePublished` + * [#1490](https://github.com/open-contracting/standard/pull/1490) `contracts.identifiers` * [#1648](https://github.com/open-contracting/standard/pull/1648) [#1683](https://github.com/open-contracting/standard/pull/1683) `finalStatus`, `finalStatusDetails` and `finalStatusDate` to `Tender`, `Award` and `Contract` * [#1208](https://github.com/open-contracting/standard/pull/1326) The estimated and maximum values of framework agreements: * `tender.maximumValue`. Previously, `tender.value` was used for the maximum value. However, this led to double-counting. @@ -211,7 +214,6 @@ Per the [normative and non-normative content and changes policy](../governance/n * `awards.estimatedValue` * `contracts.maximumValue` * `contracts.estimatedValue` - * [#1459](https://github.com/open-contracting/standard/pull/1459) `Organization.details.scale` * [#1326](https://github.com/open-contracting/standard/pull/1326) [#1431](https://github.com/open-contracting/standard/pull/1431) `links` * [#1376](https://github.com/open-contracting/standard/pull/1376) [#1489](https://github.com/open-contracting/standard/pull/1489) `publisher` * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.country` @@ -221,38 +223,36 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1434](https://github.com/open-contracting/standard/pull/1434) `Milestone.value` * [#1490](https://github.com/open-contracting/standard/pull/1490) `SimpleIdentifier` * [#1519](https://github.com/open-contracting/standard/pull/1519) `Value.amountNet` and `Value.amountGross` - * [#1490](https://github.com/open-contracting/standard/pull/1490) `contracts.identifiers` - * [#1679](https://github.com/open-contracting/standard/pull/1679) `Organization.details.classifications` * Deprecate some fields: - * [#1200](https://github.com/open-contracting/standard/pull/1200) `tender.submissionMethod`, because all codes from the `submissionMethod` codelist are deprecated. * [#1296](https://github.com/open-contracting/standard/pull/1296) `tender.eligibilityCriteria` in favor of the new `tender.exclusionGrounds` field, in order to use more common terminology and improve semantics. - * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.countryName` in favor of the new `Address.country` field, to promote standardized country codes instead of non-standardized country names. + * [#1200](https://github.com/open-contracting/standard/pull/1200) `tender.submissionMethod`, because all codes from the `submissionMethod` codelist are deprecated. + * [#1670](https://github.com/open-contracting/standard/pull/1670) `contracts.relatedProcesses`, because all relevant codes from the `relatedProcess` codelist are deprecated. + * [#1509](https://github.com/open-contracting/standard/pull/1509) `tender.status`, `awards.status`, `contracts.status`, because the same information can be provided by filling in the relevant date fields. * [#1389](https://github.com/open-contracting/standard/pull/1389) `initiationType`, because the approach to data modelling that it supports was not pursued. + * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.countryName` in favor of the new `Address.country` field, to promote standardized country codes instead of non-standardized country names. * [#1380](https://github.com/open-contracting/standard/pull/1380) `Document.language` in favor of the new `Document.languages` field, to support documents in which multiple languages are used. - * [#1509](https://github.com/open-contracting/standard/pull/1509) `tender.status`, `Award.status`, `Contract.status`, because the same information can be provided by filling in the relevant date fields. * [#1662](https://github.com/open-contracting/standard/pull/1662) `Transaction.source`, because its value would be potentially identical across every transaction. - * [#1670](https://github.com/open-contracting/standard/pull/1670) `Contract.relatedProcesses`, because all relevant codes from the relatedProcess codelist are deprecated. * Update and clarify field descriptions: * [#1113](https://github.com/open-contracting/standard/pull/1113) `ocid`, to recommend a hyphen after the ocid prefix. * [#1527](https://github.com/open-contracting/standard/pull/1527) `id`, to clarify use in releases and compiled releases. - * [#1094](https://github.com/open-contracting/standard/pull/1094) `Organization.id`, to clarify its uniqueness. - * [#1510](https://github.com/open-contracting/standard/pull/1510) `Organization.additionalIdentifiers`, to clarify its potential use for organizational units. - * [#1167](https://github.com/open-contracting/standard/pull/1167) `Budget`, `Budget.id`, `Budget.description`, `Budget.amount`, to reduce ambiguity and use consistent wording. - * [#1529](https://github.com/open-contracting/standard/pull/1529) `Budget`, `Budget.id`, `Budget.description`, `Budget.amount`, `Budget.project`, `Budget.uri`, `Budget.source`, `tender.value`, `tender.minValue`, `awards.value`, `Transaction`, to replace "contracting process" with "contract(s)". - * [#1189](https://github.com/open-contracting/standard/pull/1189) `Document.url`, to use precise wording and to describe how to indicate a part of a document. - * [#1229](https://github.com/open-contracting/standard/pull/1229) Standardize the descriptions of `planning.documents`, `tender.documents`, `awards.documents`, `contracts.documents`, and `contracts.implementation.documents`. + * [#1094](https://github.com/open-contracting/standard/pull/1094) `parties.id`, to clarify its uniqueness. + * [#1510](https://github.com/open-contracting/standard/pull/1510) `parties.additionalIdentifiers`, to clarify its potential use for organizational units. + * [#1167](https://github.com/open-contracting/standard/pull/1167) `Budget`, `planning.budget.id`, `planning.budget.description`, `planning.budget.amount`, to reduce ambiguity and use consistent wording. + * [#1529](https://github.com/open-contracting/standard/pull/1529) `Budget`, `planning.budget.id`, `planning.budget.description`, `planning.budget.amount`, `planning.budget.project`, `planning.budget.uri`, `planning.budget.source`, `tender.value`, `tender.minValue`, `awards.value`, `Transaction`, to replace "contracting process" with "contract(s)". + * [#1509](https://github.com/open-contracting/standard/pull/1509) `planning`, `Planning`, `tender` and `Tender` to clarify relationships with the availability of documents. * [#1335](https://github.com/open-contracting/standard/pull/1335) Standardize the descriptions of `planning`, `planning.rationale`, `planning.budget`, `planning.documents`, and `planning.milestones`. - * [#1530](https://github.com/open-contracting/standard/pull/1530) `Buyer`, `tender.items`, `awards.items`, `contracts.items`, `Item`, `Item.description`, `Item.unit`, `Unit`, `transaction.providerOrganization`, `transaction.receiverOrganization` to use consistent wording for "goods, services and/or works". + * [#1229](https://github.com/open-contracting/standard/pull/1229) Standardize the descriptions of `planning.documents`, `tender.documents`, `awards.documents`, `contracts.documents`, and `contracts.implementation.documents`. + * [#1530](https://github.com/open-contracting/standard/pull/1530) `buyer`, `tender.items`, `awards.items`, `contracts.items`, `Item`, `Item.description`, `Item.unit`, `Unit`, `Transaction.providerOrganization`, `Transaction.receiverOrganization` to use consistent wording for "goods, services and/or works". + * [#1663](https://github.com/open-contracting/standard/pull/1663) `tender.amendments`, `awards.amendments`, `contracts.amendments` to avoid restating field titles. * [#1528](https://github.com/open-contracting/standard/pull/1528) `tender.id`, `tender.hasEnquiries`, to reduce ambiguity and use consistent wording in the description of procurement stages. - * [#1519](https://github.com/open-contracting/standard/pull/1519) `value.amount`, to clarify amount taken from system or document. * [#1618](https://github.com/open-contracting/standard/pull/1618) `tender.enquiryPeriod`, to remove the suggestion to use `tender.submissionMethodDetails` for information about how to submit enquiries. + * [#1656](https://github.com/open-contracting/standard/pull/1656) `awards.value` and `contracts.value`, to clarify with respect to changes in contract values. * [#1645](https://github.com/open-contracting/standard/pull/1645) `relatedProcesses`, to use consistent wording in the description of multi-stage procedures. + * [#1189](https://github.com/open-contracting/standard/pull/1189) `Document.url`, to use precise wording and to describe how to indicate a part of a document. + * [#1519](https://github.com/open-contracting/standard/pull/1519) `Value.amount`, to clarify amount taken from system or document. * [#1618](https://github.com/open-contracting/standard/pull/1618) Normalize field descriptions according to a style guide. - * [#1656](https://github.com/open-contracting/standard/pull/1656) `Award.value` and `Contract.value`, to clarify with respect to changes in contract values. - * [#1509](https://github.com/open-contracting/standard/pull/1509) `planning`, `Planning`, `tender` and `Tender` to clarify relationships with the availability of documents. - * [#1663](https://github.com/open-contracting/standard/pull/1663) `tender.amendments`, `awards.amendments`, `contracts.amendments` to avoid restating field titles. * Remove confusing terminology: * [#1487](https://github.com/open-contracting/standard/pull/1487) `planning.budget.project`, to remove sentence about translation options. @@ -264,9 +264,9 @@ Per the [normative and non-normative content and changes policy](../governance/n * Add or strengthen normative statements in field descriptions: * [#1086](https://github.com/open-contracting/standard/pull/1086) Recommend the use of strings rather than integers for identifiers. - * [#1112](https://github.com/open-contracting/standard/pull/1112) `Organization.id`: "This field need only be unique within the scope of the contracting process, but **should** be built with the following structure {identifier.scheme}-{identifier.id}(-{department-identifier}) if the primary identifier for this organization is available" ("may" replaced with "should") - * [#1112](https://github.com/open-contracting/standard/pull/1112) `Period.durationInDays`: "If a startDate and endDate are set, this field, if used, **must** be equal to the difference between startDate and endDate. Otherwise, if a startDate and maxExtentDate are set, this field, if used, **must** be equal to the difference between startDate and maxExtentDate." ("should" replaced with "must") + * [#1112](https://github.com/open-contracting/standard/pull/1112) `parties.id`: "This field need only be unique within the scope of the contracting process, but **should** be built with the following structure {identifier.scheme}-{identifier.id}(-{department-identifier}) if the primary identifier for this organization is available" ("may" replaced with "should") * [#1112](https://github.com/open-contracting/standard/pull/1112) [#1540](https://github.com/open-contracting/standard/pull/1540) `contracts.items`: "If the items contracted are identical to the items awarded and/or the items tendered, this field **should** be omitted." (rephrased) + * [#1112](https://github.com/open-contracting/standard/pull/1112) `Period.durationInDays`: "If a startDate and endDate are set, this field, if used, **must** be equal to the difference between startDate and endDate. Otherwise, if a startDate and maxExtentDate are set, this field, if used, **must** be equal to the difference between startDate and maxExtentDate." ("should" replaced with "must") * Clarify merging behavior: * [#1242](https://github.com/open-contracting/standard/pull/1242) Clarify that the releases to merge must use the same version of OCDS. @@ -274,8 +274,8 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1315](https://github.com/open-contracting/standard/pull/1315) Update the descriptions of `id` and `date`, to add rules for compiled releases. * Make minor changes to the schema's organization: - * [#1240](https://github.com/open-contracting/standard/pull/1240) Move `Unit` from `Item.unit` to the schema definitions. * [#1354](https://github.com/open-contracting/standard/pull/1354) Switch the positions of `contracts.dateSigned` and `contracts.period` to correspond with the order in `Award`. + * [#1240](https://github.com/open-contracting/standard/pull/1240) Move `Unit` from `Item.unit` to the schema definitions. * Make minor changes to the JSON Schema properties: * [#1257](https://github.com/open-contracting/standard/pull/1257) Remove the default value (was `"en"`) for the `language` field. @@ -315,7 +315,6 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1067](https://github.com/open-contracting/standard/pull/1067) `Publisher.name`, to indicate that it is the organization or department responsible for publishing the OCDS version of the data. * [#1450](https://github.com/open-contracting/standard/pull/1450) Replace a repeated example in schema/merging/ with a link to guidance/build/merging/. - * [#1665](https://github.com/open-contracting/standard/pull/1665) Abandon in-file translations. ### Documentation @@ -332,7 +331,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1315](https://github.com/open-contracting/standard/pull/1315) Add rules on setting `id` and `date` for compiled releases to the merging specification. * [#1375](https://github.com/open-contracting/standard/pull/1375) Update guidance for empty fields in the merging documentation. * Identifiers - * [#1094](https://github.com/open-contracting/standard/pull/1094) Add guidance on populating `Organization.id` for parties without an organization identifier. + * [#1094](https://github.com/open-contracting/standard/pull/1094) Add guidance on populating `parties.id` for parties without an organization identifier. * [#1643](https://github.com/open-contracting/standard/pull/1643) Update identifier section in release reference. * [#1655](https://github.com/open-contracting/standard/pull/1655) Rewrite identifiers reference and examples for clarity. * Documents @@ -396,13 +395,13 @@ See the changelogs for: ### Advisories -* OCDS 1.0 uses the [whole-list merge](../schema/merging.md#whole-list-merge) strategy for `Award.suppliers`, whereas OCDS 1.1 uses the [identifier merge](../schema/merging.md#identifier-merge) strategy. As a consequence, the OCDS 1.1 versioned release schema is not backward compatible with OCDS 1.0. - * **Action:** Versioned releases respecting the OCDS 1.0 schema that set `Award.suppliers` will need to be re-created to validate against the OCDS 1.1 schema. +* OCDS 1.0 uses the [whole-list merge](../schema/merging.md#whole-list-merge) strategy for `awards.suppliers`, whereas OCDS 1.1 uses the [identifier merge](../schema/merging.md#identifier-merge) strategy. As a consequence, the OCDS 1.1 versioned release schema is not backward compatible with OCDS 1.0. + * **Action:** Versioned releases respecting the OCDS 1.0 schema that set `awards.suppliers` will need to be re-created to validate against the OCDS 1.1 schema. * [#780](https://github.com/open-contracting/standard/pull/780) All extensions authored by the Open Contracting Partnership have been moved to the [open-contracting-extensions](https://github.com/open-contracting-extensions) organization. * **Action:** No change is required, but we recommend that publishers update the URLs of these extensions in their release packages and record packages. * [#738](https://github.com/open-contracting/standard/pull/738) 1.1.3 changed the merging and versioning behaviors of `Item.unit`, such that it could be removed by setting it to `null`, and such that it was versioned as a whole. 1.1.4 restores the behaviors from 1.1.2, such that only its sub-fields can be removed by setting them to `null`, and such that its sub-fields are versioned individually. * **Action:** If you had upgraded to OCDS 1.1.3, then compiled releases and versioned releases that set `Item.unit` will likely need to be re-created to validate against the OCDS 1.1.4 schema. -* [#810](https://github.com/open-contracting/standard/pull/810) `buyer.id`, `Tender.procuringEntity.id`, `Contract.implementation.payer.id` `Contract.implementation.payee.id`, `Budget.id`, `Identifier.id`, and `Classification.id` are now versioned, consistent with the documentation. +* [#810](https://github.com/open-contracting/standard/pull/810) `buyer.id`, `planning.budget.id`, `tender.procuringEntity.id`, `contracts.implementation.payer.id` `contracts.implementation.payee.id`, `Identifier.id`, and `Classification.id` are now versioned, consistent with the documentation. * **Action:** Versioned releases that set these fields will likely need to be re-created to validate against the OCDS 1.1.4 schema. * [#831](https://github.com/open-contracting/standard/pull/831) OCDS now has a [Normative and non-normative content and changes policy](../governance/normative). * [#744](https://github.com/open-contracting/standard/pull/744) OCDS now has a [Translation and localization policy](../governance/translation). @@ -423,7 +422,7 @@ See the changelogs for: ### Schema * [#712](https://github.com/open-contracting/standard/pull/712) [#715](https://github.com/open-contracting/standard/pull/715) Add missing titles for `publisher` and `url` and description for `record` in the record package schema, and missing description for `releases` in release package schema. -* [#769](https://github.com/open-contracting/standard/pull/769) The versioned release schema now matches the release schema in: having a `minLength` validation property for `OrganizationReference.name`; having `codelist` and `openCodelist` properties for `Tender.awardCriteria`, `Tender.awardCriteriaDetails`, `Document.documentType`, `Item.unit.scheme`, `Classification.scheme`, and `RelatedProcess.scheme`; and having a `deprecated` property for `Budget.source`. All `title` and `description` metadata properties are removed from the versioned release schema. +* [#769](https://github.com/open-contracting/standard/pull/769) The versioned release schema now matches the release schema in: having a `minLength` validation property for `OrganizationReference.name`; having `codelist` and `openCodelist` properties for `tender.awardCriteria`, `tender.awardCriteriaDetails`, `Document.documentType`, `Item.unit.scheme`, `Classification.scheme`, and `RelatedProcess.scheme`; and having a `deprecated` property for `planning.budget.source`. All `title` and `description` metadata properties are removed from the versioned release schema. * [#838](https://github.com/open-contracting/standard/pull/838) Eliminate the conflicting rule that release identifiers must be unique within release packages. Uniqueness within the scope of a release package either implies that release identifiers must be globally unique, or imposes an arbitrary restriction on the contents of release packages, as there is no rule preventing release packages from containing releases from different contracting processes. Release identifiers are only required to be locally unique within the scope of a contracting process. The `ocid` and `id` values of a release can be used together to disambiguate releases within a release package. * Clarify the uniqueness of release identifiers in the release schema [#838](https://github.com/open-contracting/standard/pull/838) and release package schema [#831](https://github.com/open-contracting/standard/pull/831). * [#810](https://github.com/open-contracting/standard/pull/810) `tag` is now `omitWhenMerged`, consistent with the reference implementation in OCDS Merge. @@ -474,7 +473,7 @@ See the changelogs for: ### Schema -* [#646](https://github.com/open-contracting/standard/pull/646) Disallow use of `null` as an entry in the array for `Tender.additionalProcurementCategories`. +* [#646](https://github.com/open-contracting/standard/pull/646) Disallow use of `null` as an entry in the array for `tender.additionalProcurementCategories`. * [#639](https://github.com/open-contracting/standard/issues/639) Make `name` field optional for `OrganizationReference`. * [#630](https://github.com/open-contracting/standard/issues/630) Allow optional field `Item.unit` to be `null`. **(Reverted in 1.1.4)** * [#663](https://github.com/open-contracting/standard/pull/663) Add `"type": "object"` to objects in the versioned release schema. @@ -486,12 +485,12 @@ See the changelogs for: ### Schema -* [#603](https://github.com/open-contracting/standard/issues/603) [#645](https://github.com/open-contracting/standard/issues/645) Add definitions to `Release`, `planning.budget`, `Milestone`, `Organization.address`, `Organization.contactPoint`, `Classification`, `Identifier`, `Value` and `Period`. +* [#603](https://github.com/open-contracting/standard/issues/603) [#645](https://github.com/open-contracting/standard/issues/645) Add definitions to `Release`, `parties.address`, `parties.contactPoint`, `planning.budget`, `Classification`, `Identifier`, `Milestone`, `Period` and `Value`. * [#578](https://github.com/open-contracting/standard/issues/578) Update the definition of the `buyer` field to cover goods, works and services, and multiple buyers. ### Documentation -* [#633](https://github.com/open-contracting/standard/issues/633) Update schema reference page to display `Release.relatedProcesses`, `Planning.documents` and `Contract.relatedProcesses`. +* [#633](https://github.com/open-contracting/standard/issues/633) Update schema reference page to display `Release.relatedProcesses`, `planning.documents` and `contracts.relatedProcesses`. * [#634](https://github.com/open-contracting/standard/issues/634) Clarify definitions of core, community and local extensions. * Old and unused scripts have been removed from the documentation repository, and a number of script dependencies have been updated. @@ -642,7 +641,7 @@ See the changelogs for: ### Schema * [#283](https://github.com/open-contracting/standard/issues/283) Remove `"mergeStrategy": "ocdsVersion"` from the `planning.budget` field. -* [#295](https://github.com/open-contracting/standard/issues/295) Allow the optional fields `Award.status` and `Contract.status` to be `null`. +* [#295](https://github.com/open-contracting/standard/issues/295) Allow the optional fields `awards.status` and `contracts.status` to be `null`. * [#300](https://github.com/open-contracting/standard/issues/300) Remove `"format": "uri"` from the `publisher.scheme` field. * [#304](https://github.com/open-contracting/standard/pull/304) Fix the versioning of arrays in the versioned release schema. * [#305](https://github.com/open-contracting/standard/pull/305) Add `title` and `description` properties and fix typos. @@ -660,8 +659,8 @@ See the changelogs for: ### Schema * [#188](https://github.com/open-contracting/standard/pull/188) Add the `tender.numberOfTenderers` and `tender.tenderers` fields. -* [#199](https://github.com/open-contracting/standard/issues/199) Add the `Award.contractPeriod` field, to disclose the anticipated contract period without creating a `Contract` object. -* Update the `description` property of the `Award.date` field. +* [#199](https://github.com/open-contracting/standard/issues/199) Add the `awards.contractPeriod` field, to disclose the anticipated contract period without creating a `Contract` object. +* Update the `description` property of the `awards.date` field. ### Documentation From 84de56f3c389b06aee40149e8eac940751305632 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:48:46 -0400 Subject: [PATCH 24/51] changelog: Add changelog entries for Item.immediateContainer new field, and Item.unit normative change --- docs/history/changelog.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index ef15aacf4..e6ebe3f8b 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -219,6 +219,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.country` * [#1380](https://github.com/open-contracting/standard/pull/1380) [#1440](https://github.com/open-contracting/standard/pull/1440) `Document.languages` * [#1439](https://github.com/open-contracting/standard/pull/1439) `Document.relatedItems` + * [#1689](https://github.com/open-contracting/standard/pull/1689) `Item.immediateContainer` * [#1455](https://github.com/open-contracting/standard/pull/1455) `Milestone.dueAfterDate` * [#1434](https://github.com/open-contracting/standard/pull/1434) `Milestone.value` * [#1490](https://github.com/open-contracting/standard/pull/1490) `SimpleIdentifier` @@ -264,9 +265,10 @@ Per the [normative and non-normative content and changes policy](../governance/n * Add or strengthen normative statements in field descriptions: * [#1086](https://github.com/open-contracting/standard/pull/1086) Recommend the use of strings rather than integers for identifiers. - * [#1112](https://github.com/open-contracting/standard/pull/1112) `parties.id`: "This field need only be unique within the scope of the contracting process, but **should** be built with the following structure {identifier.scheme}-{identifier.id}(-{department-identifier}) if the primary identifier for this organization is available" ("may" replaced with "should") + * [#1112](https://github.com/open-contracting/standard/pull/1112) `parties.id`: "This field need only be unique within the scope of the contracting process, but **should** be built with the following structure {identifier.scheme}-{identifier.id}(-{department-identifier}) if the primary identifier for this organization is available." ("may" replaced with "should") * [#1112](https://github.com/open-contracting/standard/pull/1112) [#1540](https://github.com/open-contracting/standard/pull/1540) `contracts.items`: "If the items contracted are identical to the items awarded and/or the items tendered, this field **should** be omitted." (rephrased) * [#1112](https://github.com/open-contracting/standard/pull/1112) `Period.durationInDays`: "If a startDate and endDate are set, this field, if used, **must** be equal to the difference between startDate and endDate. Otherwise, if a startDate and maxExtentDate are set, this field, if used, **must** be equal to the difference between startDate and maxExtentDate." ("should" replaced with "must") + * [#1689](https://github.com/open-contracting/standard/pull/1689) `Item.unit` and `Unit`: "It is **recommended** to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation." * Clarify merging behavior: * [#1242](https://github.com/open-contracting/standard/pull/1242) Clarify that the releases to merge must use the same version of OCDS. From ffeb52ac64c24705bea9b1385f22c3fcac2e3b00 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 12 Jun 2024 18:54:09 -0400 Subject: [PATCH 25/51] schema/reference: Add SimpleUnit, Quantity. Remove sentences that duplicates schema and that define unit of measurement. Remove instruction about QUDT that is difficult to follow due to QUDT's documentation structure. Don't collapse field that is defined by subschema. --- docs/schema/reference.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 370b1d754..670bc74fe 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -537,12 +537,6 @@ The items block is used to list the line-items associated with a tender, award o #### Unit -The `unit` subschema allows detailed specification of the parameters and price of units that make up a line-item. It should be used for units of measurement only. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention, that is used as a standard of measurement for the same kind of quantity. For example weight is a physical quantity, and the kilogram can be used as a unit of measurement for weight. For units of presentation, use the [`ImmediateContainer` subschema](#immediatecontainer), which is used by the [`Item.immediateContainer` field](#item). - -If the [Quantities, Units, Dimensions and Data Types Ontologies](https://www.qudt.org) unit classification scheme is used, then publishers may use its CamelCase unit names, such as "SquareMile", in the `unit.name` field. - -Other unit classification schemes may be used, including those in the [unitClassificationScheme codelist](codelists.md#unit-classification-scheme). - ````{admonition} Example :class: hint @@ -560,8 +554,6 @@ Other unit classification schemes may be used, including those in the [unitClass #### ImmediateContainer -The `ImmediateContainer` subschema allows detailed specification of the immediate container of an item. This is also called the presentation, presentation form, or package. For units of measurement, use the [`Unit` subschema](#unit). - ````{admonition} Example :class: hint @@ -574,7 +566,6 @@ The `ImmediateContainer` subschema allows detailed specification of the immediat ```{jsonschema} ../../build/current_lang/release-schema.json :pointer: /definitions/Item/properties/immediateContainer -:collapse: capacity ``` ### Classification @@ -703,6 +694,15 @@ The entries of the top-level `links` array are `Link` objects: :pointer: /definitions/Link ``` +### Quantity + +```{field-description} ../../build/current_lang/release-schema.json /definitions/Quantity +``` + +```{jsonschema} ../../build/current_lang/release-schema.json +:pointer: /definitions/Quantity +``` + ### SimpleIdentifier ```{field-description} ../../build/current_lang/release-schema.json /definitions/SimpleIdentifier @@ -711,3 +711,12 @@ The entries of the top-level `links` array are `Link` objects: ```{jsonschema} ../../build/current_lang/release-schema.json :pointer: /definitions/SimpleIdentifier ``` + +### SimpleUnit + +```{field-description} ../../build/current_lang/release-schema.json /definitions/SimpleUnit +``` + +```{jsonschema} ../../build/current_lang/release-schema.json +:pointer: /definitions/SimpleUnit +``` From 2c46cec6ae4167f5737a09bd01b449c16f81085e Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 13 Jun 2024 00:51:37 -0400 Subject: [PATCH 26/51] unitClassificationScheme: Update the instructions on how to find identifiers within the QUDT scheme --- docs/history/changelog.md | 3 +++ schema/codelists/unitClassificationScheme.csv | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index e6ebe3f8b..167035f81 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -169,6 +169,9 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1238](https://github.com/open-contracting/standard/pull/1238) Open the `releaseTag` codelist. * [#1415](https://github.com/open-contracting/standard/pull/1415) [#1509](https://github.com/open-contracting/standard/pull/1509) Align descriptions of 'planning', 'tender', 'award' and 'contract' with the corresponding schema fields. +* `unitClassificationScheme.csv`: + * [#1689](https://github.com/open-contracting/standard/pull/1689) Update the instructions on how to find identifiers within the QUDT scheme. + * `tenderStatus`, `awardStatus` and `contractStatus`: * [#1509](https://github.com/open-contracting/standard/pull/1509) [#1658](https://github.com/open-contracting/standard/pull/1658) Clarify semantics and deprecate codes. diff --git a/schema/codelists/unitClassificationScheme.csv b/schema/codelists/unitClassificationScheme.csv index 73229582b..fcd797df2 100644 --- a/schema/codelists/unitClassificationScheme.csv +++ b/schema/codelists/unitClassificationScheme.csv @@ -1,3 +1,3 @@ Code,Title,Description -UNCEFACT,UN/CEFACT Recommendation 20,Use the common code from the latest version of the UN/CEFACT Recommendation 20 list of 'Codes for Units of Measure Used in International Trade'. -QUDT,"Quantities, Units, Dimensions and Data Types Ontologies",Use the [QUDT Code](https://www.qudt.org) value. +UNCEFACT,UN/CEFACT Recommendation 20,"Use the common code from the latest version of the UN/CEFACT Recommendation 20 list of ""Codes for Units of Measure Used in International Trade.""" +QUDT,"Quantities, Units, Dimensions and Data Types Ontologies","Use the unqualified name from the QUDT Units Vocabulary: for example, 'KiloGM'." From f49015bf95b9d0feacb306d26e27e94749abdf04 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:04:00 -0400 Subject: [PATCH 27/51] release-schema: Restore definition of unit of measurement, originally in Markdown --- schema/release-schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schema/release-schema.json b/schema/release-schema.json index 1d418bf21..53ed21692 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -1603,7 +1603,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "$ref": "#/definitions/Unit" }, "immediateContainer": { @@ -2596,7 +2596,7 @@ }, "Unit": { "title": "Pricing unit", - "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { From 0466f650ec6fc0ddec5fbfd442f4cb93b3523fe1 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:14:02 -0400 Subject: [PATCH 28/51] build: Update manage.py for planning.project being an object --- manage.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manage.py b/manage.py index 6b018148f..606eff65b 100755 --- a/manage.py +++ b/manage.py @@ -519,7 +519,7 @@ def pre_commit(): """ nonmultilingual = { # Identifiers. - 'amendsReleaseID', 'id', 'identifier', 'ocid', 'relatedItems', 'releaseID', + 'amendsReleaseID', 'id', 'identifier', 'identifiers', 'ocid', 'relatedItems', 'releaseID', # Missing format properties. https://github.com/open-contracting/standard/issues/881 'email', # Published-defined formats. @@ -549,7 +549,9 @@ def pre_commit(): ) field.sep = '/' if name in counts and bool(counts[name]) ^ multilingual: - if multilingual: + if not multilingual and field.schema['type'] == 'object': + click.secho(f'{field.path} is an object. {" & ".join(counts[name])} is/are multilingual.', fg='yellow') + elif multilingual: raise Exception(f'{name} is multilingual at {field.path}, but not elsewhere') else: raise Exception(f'{name} is multilingual at {" & ".join(counts[name])}, but not at {field.path}') From ee99109aca0ad6e24f5aa012394713ba77786c34 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:14:23 -0400 Subject: [PATCH 29/51] build: Run ./manage.py pre-commit --- docs/guidance/map/translations.md | 8 +- schema/dereferenced-release-schema.json | 7542 +++++++++++++++-- .../versioned-release-validation-schema.json | 808 ++ 3 files changed, 7514 insertions(+), 844 deletions(-) diff --git a/docs/guidance/map/translations.md b/docs/guidance/map/translations.md index 2923ebc57..38571b8aa 100644 --- a/docs/guidance/map/translations.md +++ b/docs/guidance/map/translations.md @@ -11,16 +11,16 @@ Two texts have the same content if they describe the same thing: for example, "U You can publish the values of these fields in any language: % STARTLIST +- `coordinates`, in any location - `description`, in any location - `finalStatusDetails`, in any location - `legalName`, in any location +- `locality`, in any location - `name`, in any location - `rationale`, in any location +- `region`, in any location +- `streetAddress`, in any location - `title`, in any location -- `parties/address/locality` -- `parties/address/region` -- `parties/address/streetAddress` -- `planning/budget/project` - `tender/awardCriteriaDetails` - `tender/procurementMethodDetails` - `tender/procurementMethodRationale` diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 8ea5d2834..f78ce0cde 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -515,6 +515,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } } }, @@ -1038,6 +1046,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -1161,7 +1177,7 @@ "properties": { "id": { "title": "Planning ID", - "description": "An identifier for this planning process.", + "description": "An identifier for the planning process.", "type": [ "string", "null" @@ -1584,463 +1600,1047 @@ } } }, - "finalStatus": { - "title": "Final status", - "description": "The final status of the planning process, using the closed [planningFinalStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#planning-final-status) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "planningFinalStatus.csv", - "openCodelist": false, - "enum": [ - "cancelled", - "unsuccessful", - null - ] - }, - "finalStatusDetails": { - "title": "Final status details", - "description": "Additional details on the final status of the planning process. This field can be used to provide the local name of the final status.", - "type": [ - "string", - "null" - ] - }, - "finalStatusDate": { - "title": "Final status date", - "description": "The date on which the planning process reached its final status.", - "format": "date-time", - "type": [ - "string", - "null" - ] - }, - "documents": { - "title": "Documents", - "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", - "type": "array", - "items": { - "type": "object", - "title": "Document", - "description": "Links to, or descriptions of, external documents can be attached at various locations within the standard. Documents can be supporting information, formal notices, downloadable forms, or any other kind of resource that ought to be made public as part of full open contracting.", - "required": [ - "id" - ], - "properties": { - "id": { - "title": "ID", - "description": "A local, unique identifier for this document. This field is used to keep track of multiple revisions of a document through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", - "type": [ - "string", - "integer" - ], - "minLength": 1 - }, - "documentType": { - "title": "Document type", - "description": "A classification of the document described, using the open [documentType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#document-type) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "documentType.csv", - "openCodelist": true - }, - "title": { - "title": "Title", - "description": "The document title.", - "type": [ - "string", - "null" - ] - }, - "description": { - "title": "Description", - "description": "A short description of the document. Descriptions are recommended to not exceed 250 words. In the event the document is not accessible online, the description field can be used to describe arrangements for obtaining a copy of the document.", - "type": [ - "string", - "null" - ] - }, - "url": { - "title": "URL", - "description": "A web address for accessing the document. The server providing access to this document ought to be configured to report the correct IANA media type. If the relevant information is within a larger document, the first page should be indicated by adding a fragment identifier to the end of the URL, such as #page=32.", - "type": [ - "string", - "null" - ], - "format": "uri" - }, - "datePublished": { - "title": "Date published", - "description": "The date on which the document was first published. This is particularly important for legally important documents such as notices of a tender.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "dateModified": { - "title": "Date modified", - "description": "Date that the document was last modified", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "format": { - "title": "Format", - "description": "The format of the document, using the open [media type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#media-type) codelist. For example, a web page has a format of 'text/html'. The 'offline/print' code is reserved for printed documents not available in other formats.", - "type": [ - "string", - "null" - ], - "codelist": "mediaType.csv", - "openCodelist": true - }, - "languages": { - "title": "Languages", - "description": "The languages used in the document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", - "type": [ - "array", - "null" - ], - "items": { - "type": "string" + "project": { + "title": "Project information", + "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", + "type": "object", + "properties": { + "id": { + "title": "Identifier", + "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "description": { + "title": "Description", + "description": "A short description of the project.", + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "totalValue": { + "title": "Total value", + "description": "The total anticipated value of the project over its lifetime.", + "type": "object", + "properties": { + "amount": { + "title": "Amount", + "description": "The amount as entered into a system or published in a document.", + "type": [ + "number", + "null" + ] }, - "codelist": "language.csv", - "openCodelist": true - }, - "language": { - "title": "Language", - "description": "The language of the linked document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", - "type": [ - "string", - "null" - ], - "codelist": "language.csv", - "openCodelist": true, - "deprecated": { - "description": "This field is deprecated in favor of `languages`, to support documents in which multiple languages are used.", - "deprecatedVersion": "1.2" - } - }, - "relatedItems": { - "title": "Related items", - "description": "The subset of items to which this document relates, expressed as the `id` values of the related entries in the parent object's `items` array. For example, an entry in the `tender.documents` array may be related only to entries in the `tender.items` array.", - "type": [ - "array", - "null" - ], - "items": { + "amountNet": { + "title": "Net amount", + "description": "The amount excluding all taxes.", "type": [ - "string" + "number", + "null" ] - } - } - } - } - }, - "milestones": { - "title": "Planning milestones", - "description": "Milestones associated with the planning process.", - "type": "array", - "items": { - "title": "Milestone", - "description": "The milestone block can be used to represent a wide variety of events in the lifetime of a contracting (or planning) process.", - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "title": "ID", - "description": "A local identifier for this milestone, unique within this block. This field is used to keep track of multiple revisions of a milestone through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", - "type": [ - "string", - "integer" - ], - "minLength": 1 - }, - "title": { - "title": "Title", - "description": "Milestone title", - "type": [ - "string", - "null" - ] - }, - "type": { - "title": "Milestone type", - "description": "The nature of the milestone, using the open [milestoneType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#milestone-type) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "milestoneType.csv", - "openCodelist": true - }, - "description": { - "title": "Description", - "description": "A description of the milestone.", - "type": [ - "string", - "null" - ] - }, - "code": { - "title": "Milestone code", - "description": "Milestone codes can be used to track specific events that take place for a particular kind of contracting (or planning) process. For example, a code of 'approvalLetter' can be used to allow applications to understand this milestone represents the date an approvalLetter is due or signed.", - "type": [ - "string", - "null" - ] - }, - "dueAfterDate": { - "title": "Due after date", - "description": "The date after which the milestone is due.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "dueDate": { - "title": "Due date", - "description": "The date the milestone is due.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "dateMet": { - "format": "date-time", - "title": "Date met", - "description": "The date on which the milestone was met.", - "type": [ - "string", - "null" - ] - }, - "dateModified": { - "title": "Date modified", - "description": "The date the milestone was last reviewed or modified and the status was altered or confirmed to still be correct.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "status": { - "title": "Status", - "description": "The status that was realized on the date provided in `dateModified`, from the closed [milestoneStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#milestone-status) codelist.", - "type": [ - "string", - "null" - ], - "enum": [ - "scheduled", - "met", - "notMet", - "partiallyMet", - null - ], - "codelist": "milestoneStatus.csv", - "openCodelist": false - }, - "documents": { - "title": "Documents", - "description": "List of documents associated with this milestone (Deprecated in 1.1).", - "type": "array", - "deprecated": { - "deprecatedVersion": "1.1", - "description": "Inclusion of documents at the milestone level is now deprecated. Documentation should be attached in the tender, award, contract or implementation sections, and titles and descriptions used to highlight the related milestone. Publishers who wish to continue to provide documents at the milestone level should explicitly declare this by using the milestone documents extension." }, - "items": { - "type": "object", - "title": "Document", - "description": "Links to, or descriptions of, external documents can be attached at various locations within the standard. Documents can be supporting information, formal notices, downloadable forms, or any other kind of resource that ought to be made public as part of full open contracting.", - "required": [ - "id" - ], - "properties": { - "id": { - "title": "ID", - "description": "A local, unique identifier for this document. This field is used to keep track of multiple revisions of a document through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", - "type": [ - "string", - "integer" - ], - "minLength": 1 - }, - "documentType": { - "title": "Document type", - "description": "A classification of the document described, using the open [documentType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#document-type) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "documentType.csv", - "openCodelist": true - }, - "title": { - "title": "Title", - "description": "The document title.", - "type": [ - "string", - "null" - ] - }, - "description": { - "title": "Description", - "description": "A short description of the document. Descriptions are recommended to not exceed 250 words. In the event the document is not accessible online, the description field can be used to describe arrangements for obtaining a copy of the document.", - "type": [ - "string", - "null" - ] - }, - "url": { - "title": "URL", - "description": "A web address for accessing the document. The server providing access to this document ought to be configured to report the correct IANA media type. If the relevant information is within a larger document, the first page should be indicated by adding a fragment identifier to the end of the URL, such as #page=32.", - "type": [ - "string", - "null" - ], - "format": "uri" - }, - "datePublished": { - "title": "Date published", - "description": "The date on which the document was first published. This is particularly important for legally important documents such as notices of a tender.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "dateModified": { - "title": "Date modified", - "description": "Date that the document was last modified", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "format": { - "title": "Format", - "description": "The format of the document, using the open [media type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#media-type) codelist. For example, a web page has a format of 'text/html'. The 'offline/print' code is reserved for printed documents not available in other formats.", - "type": [ - "string", - "null" - ], - "codelist": "mediaType.csv", - "openCodelist": true - }, - "languages": { - "title": "Languages", - "description": "The languages used in the document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", - "type": [ - "array", - "null" - ], - "items": { - "type": "string" - }, - "codelist": "language.csv", - "openCodelist": true - }, - "language": { - "title": "Language", - "description": "The language of the linked document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", - "type": [ - "string", - "null" - ], - "codelist": "language.csv", - "openCodelist": true, - "deprecated": { - "description": "This field is deprecated in favor of `languages`, to support documents in which multiple languages are used.", - "deprecatedVersion": "1.2" - } - }, - "relatedItems": { - "title": "Related items", - "description": "The subset of items to which this document relates, expressed as the `id` values of the related entries in the parent object's `items` array. For example, an entry in the `tender.documents` array may be related only to entries in the `tender.items` array.", - "type": [ - "array", - "null" - ], - "items": { - "type": [ - "string" - ] - } - } - } + "amountGross": { + "title": "Gross amount", + "description": "The amount including all taxes.", + "type": [ + "number", + "null" + ] }, - "uniqueItems": true - }, - "value": { - "title": "Value", - "description": "The payment's value, if the milestone represents a planned payment.", - "type": "object", - "properties": { - "amount": { - "title": "Amount", - "description": "The amount as entered into a system or published in a document.", - "type": [ - "number", - "null" - ] - }, - "amountNet": { - "title": "Net amount", - "description": "The amount excluding all taxes.", - "type": [ - "number", - "null" - ] - }, - "amountGross": { - "title": "Gross amount", - "description": "The amount including all taxes.", - "type": [ - "number", - "null" - ] - }, - "currency": { - "title": "Currency", - "description": "The currency of the amount, from the closed [currency](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#currency) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "currency.csv", - "openCodelist": false, - "enum": [ - "ADP", - "AED", - "AFA", - "AFN", - "ALK", - "ALL", - "AMD", - "ANG", - "AOA", - "AOK", - "AON", - "AOR", - "ARA", - "ARP", - "ARS", - "ARY", - "ATS", - "AUD", - "AWG", + "currency": { + "title": "Currency", + "description": "The currency of the amount, from the closed [currency](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#currency) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "currency.csv", + "openCodelist": false, + "enum": [ + "ADP", + "AED", + "AFA", + "AFN", + "ALK", + "ALL", + "AMD", + "ANG", + "AOA", + "AOK", + "AON", + "AOR", + "ARA", + "ARP", + "ARS", + "ARY", + "ATS", + "AUD", + "AWG", + "AYM", + "AZM", + "AZN", + "BAD", + "BAM", + "BBD", + "BDT", + "BEC", + "BEF", + "BEL", + "BGJ", + "BGK", + "BGL", + "BGN", + "BHD", + "BIF", + "BMD", + "BND", + "BOB", + "BOP", + "BOV", + "BRB", + "BRC", + "BRE", + "BRL", + "BRN", + "BRR", + "BSD", + "BTN", + "BUK", + "BWP", + "BYB", + "BYN", + "BYR", + "BZD", + "CAD", + "CDF", + "CHC", + "CHE", + "CHF", + "CHW", + "CLF", + "CLP", + "CNY", + "COP", + "COU", + "CRC", + "CSD", + "CSJ", + "CSK", + "CUC", + "CUP", + "CVE", + "CYP", + "CZK", + "DDM", + "DEM", + "DJF", + "DKK", + "DOP", + "DZD", + "ECS", + "ECV", + "EEK", + "EGP", + "ERN", + "ESA", + "ESB", + "ESP", + "ETB", + "EUR", + "FIM", + "FJD", + "FKP", + "FRF", + "GBP", + "GEK", + "GEL", + "GHC", + "GHP", + "GHS", + "GIP", + "GMD", + "GNE", + "GNF", + "GNS", + "GQE", + "GRD", + "GTQ", + "GWE", + "GWP", + "GYD", + "HKD", + "HNL", + "HRD", + "HRK", + "HTG", + "HUF", + "IDR", + "IEP", + "ILP", + "ILR", + "ILS", + "INR", + "IQD", + "IRR", + "ISJ", + "ISK", + "ITL", + "JMD", + "JOD", + "JPY", + "KES", + "KGS", + "KHR", + "KMF", + "KPW", + "KRW", + "KWD", + "KYD", + "KZT", + "LAJ", + "LAK", + "LBP", + "LKR", + "LRD", + "LSL", + "LSM", + "LTL", + "LTT", + "LUC", + "LUF", + "LUL", + "LVL", + "LVR", + "LYD", + "MAD", + "MDL", + "MGA", + "MGF", + "MKD", + "MLF", + "MMK", + "MNT", + "MOP", + "MRO", + "MRU", + "MTL", + "MTP", + "MUR", + "MVQ", + "MVR", + "MWK", + "MXN", + "MXP", + "MXV", + "MYR", + "MZE", + "MZM", + "MZN", + "NAD", + "NGN", + "NIC", + "NIO", + "NLG", + "NOK", + "NPR", + "NZD", + "OMR", + "PAB", + "PEH", + "PEI", + "PEN", + "PES", + "PGK", + "PHP", + "PKR", + "PLN", + "PLZ", + "PTE", + "PYG", + "QAR", + "RHD", + "ROK", + "ROL", + "RON", + "RSD", + "RUB", + "RUR", + "RWF", + "SAR", + "SBD", + "SCR", + "SDD", + "SDG", + "SDP", + "SEK", + "SGD", + "SHP", + "SIT", + "SKK", + "SLL", + "SOS", + "SRD", + "SRG", + "SSP", + "STD", + "STN", + "SUR", + "SVC", + "SYP", + "SZL", + "THB", + "TJR", + "TJS", + "TMM", + "TMT", + "TND", + "TOP", + "TPE", + "TRL", + "TRY", + "TTD", + "TWD", + "TZS", + "UAH", + "UAK", + "UGS", + "UGW", + "UGX", + "USD", + "USN", + "USS", + "UYI", + "UYN", + "UYP", + "UYU", + "UYW", + "UZS", + "VEB", + "VEF", + "VES", + "VNC", + "VND", + "VUV", + "WST", + "XAF", + "XAG", + "XAU", + "XBA", + "XBB", + "XBC", + "XBD", + "XCD", + "XDR", + "XEU", + "XFO", + "XFU", + "XOF", + "XPD", + "XPF", + "XPT", + "XRE", + "XSU", + "XTS", + "XUA", + "XXX", + "YDD", + "YER", + "YUD", + "YUM", + "YUN", + "ZAL", + "ZAR", + "ZMK", + "ZMW", + "ZRN", + "ZRZ", + "ZWC", + "ZWD", + "ZWL", + "ZWN", + "ZWR", + null + ] + } + } + }, + "uri": { + "title": "URI", + "description": "The URI of a resource with additional information about the project.", + "type": [ + "string", + "null" + ], + "format": "uri" + }, + "sector": { + "title": "Sector", + "description": "The primary sector to which the project relates. It is recommended to use the scheme 'oc4idsProjectSector' and codes from the [OC4IDS projectSector codelist](https://standard.open-contracting.org/infrastructure/latest/en/reference/codelists/#projectsector).", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "additionalClassifications": { + "title": "Additional classifications", + "description": "Additional classifications for the project. For example, a sector or strategic framework classification.", + "type": "array", + "items": { + "title": "Classification", + "description": "A classification consists of at least two parts: an identifier for the list (scheme) from which the classification is taken, and an identifier for the category from that list being applied. It is useful to also publish a text label and/or URI that users can draw on to interpret the classification.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "locations": { + "title": "Locations", + "description": "Information about the locations where the project is taking place.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + } + }, + "minProperties": 1 + }, + "finalStatus": { + "title": "Final status", + "description": "The final status of the planning process, using the closed [planningFinalStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#planning-final-status) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "planningFinalStatus.csv", + "openCodelist": false, + "enum": [ + "cancelled", + "unsuccessful", + null + ] + }, + "finalStatusDetails": { + "title": "Final status details", + "description": "Additional details on the final status of the planning process. This field can be used to provide the local name of the final status.", + "type": [ + "string", + "null" + ] + }, + "finalStatusDate": { + "title": "Final status date", + "description": "The date on which the planning process reached its final status.", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "documents": { + "title": "Documents", + "description": "Documents related to the planning process (for example, notices, needs assessments and market studies).", + "type": "array", + "items": { + "type": "object", + "title": "Document", + "description": "Links to, or descriptions of, external documents can be attached at various locations within the standard. Documents can be supporting information, formal notices, downloadable forms, or any other kind of resource that ought to be made public as part of full open contracting.", + "required": [ + "id" + ], + "properties": { + "id": { + "title": "ID", + "description": "A local, unique identifier for this document. This field is used to keep track of multiple revisions of a document through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer" + ], + "minLength": 1 + }, + "documentType": { + "title": "Document type", + "description": "A classification of the document described, using the open [documentType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#document-type) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "documentType.csv", + "openCodelist": true + }, + "title": { + "title": "Title", + "description": "The document title.", + "type": [ + "string", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A short description of the document. Descriptions are recommended to not exceed 250 words. In the event the document is not accessible online, the description field can be used to describe arrangements for obtaining a copy of the document.", + "type": [ + "string", + "null" + ] + }, + "url": { + "title": "URL", + "description": "A web address for accessing the document. The server providing access to this document ought to be configured to report the correct IANA media type. If the relevant information is within a larger document, the first page should be indicated by adding a fragment identifier to the end of the URL, such as #page=32.", + "type": [ + "string", + "null" + ], + "format": "uri" + }, + "datePublished": { + "title": "Date published", + "description": "The date on which the document was first published. This is particularly important for legally important documents such as notices of a tender.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dateModified": { + "title": "Date modified", + "description": "Date that the document was last modified", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "format": { + "title": "Format", + "description": "The format of the document, using the open [media type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#media-type) codelist. For example, a web page has a format of 'text/html'. The 'offline/print' code is reserved for printed documents not available in other formats.", + "type": [ + "string", + "null" + ], + "codelist": "mediaType.csv", + "openCodelist": true + }, + "languages": { + "title": "Languages", + "description": "The languages used in the document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "codelist": "language.csv", + "openCodelist": true + }, + "language": { + "title": "Language", + "description": "The language of the linked document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", + "type": [ + "string", + "null" + ], + "codelist": "language.csv", + "openCodelist": true, + "deprecated": { + "description": "This field is deprecated in favor of `languages`, to support documents in which multiple languages are used.", + "deprecatedVersion": "1.2" + } + }, + "relatedItems": { + "title": "Related items", + "description": "The subset of items to which this document relates, expressed as the `id` values of the related entries in the parent object's `items` array. For example, an entry in the `tender.documents` array may be related only to entries in the `tender.items` array.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string" + ] + } + } + } + } + }, + "milestones": { + "title": "Planning milestones", + "description": "Milestones associated with the planning process.", + "type": "array", + "items": { + "title": "Milestone", + "description": "The milestone block can be used to represent a wide variety of events in the lifetime of a contracting (or planning) process.", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "title": "ID", + "description": "A local identifier for this milestone, unique within this block. This field is used to keep track of multiple revisions of a milestone through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer" + ], + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "Milestone title", + "type": [ + "string", + "null" + ] + }, + "type": { + "title": "Milestone type", + "description": "The nature of the milestone, using the open [milestoneType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#milestone-type) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "milestoneType.csv", + "openCodelist": true + }, + "description": { + "title": "Description", + "description": "A description of the milestone.", + "type": [ + "string", + "null" + ] + }, + "code": { + "title": "Milestone code", + "description": "Milestone codes can be used to track specific events that take place for a particular kind of contracting (or planning) process. For example, a code of 'approvalLetter' can be used to allow applications to understand this milestone represents the date an approvalLetter is due or signed.", + "type": [ + "string", + "null" + ] + }, + "dueAfterDate": { + "title": "Due after date", + "description": "The date after which the milestone is due.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dueDate": { + "title": "Due date", + "description": "The date the milestone is due.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dateMet": { + "format": "date-time", + "title": "Date met", + "description": "The date on which the milestone was met.", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "title": "Date modified", + "description": "The date the milestone was last reviewed or modified and the status was altered or confirmed to still be correct.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "status": { + "title": "Status", + "description": "The status that was realized on the date provided in `dateModified`, from the closed [milestoneStatus](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#milestone-status) codelist.", + "type": [ + "string", + "null" + ], + "enum": [ + "scheduled", + "met", + "notMet", + "partiallyMet", + null + ], + "codelist": "milestoneStatus.csv", + "openCodelist": false + }, + "documents": { + "title": "Documents", + "description": "List of documents associated with this milestone (Deprecated in 1.1).", + "type": "array", + "deprecated": { + "deprecatedVersion": "1.1", + "description": "Inclusion of documents at the milestone level is now deprecated. Documentation should be attached in the tender, award, contract or implementation sections, and titles and descriptions used to highlight the related milestone. Publishers who wish to continue to provide documents at the milestone level should explicitly declare this by using the milestone documents extension." + }, + "items": { + "type": "object", + "title": "Document", + "description": "Links to, or descriptions of, external documents can be attached at various locations within the standard. Documents can be supporting information, formal notices, downloadable forms, or any other kind of resource that ought to be made public as part of full open contracting.", + "required": [ + "id" + ], + "properties": { + "id": { + "title": "ID", + "description": "A local, unique identifier for this document. This field is used to keep track of multiple revisions of a document through the compilation from release to record mechanism. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer" + ], + "minLength": 1 + }, + "documentType": { + "title": "Document type", + "description": "A classification of the document described, using the open [documentType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#document-type) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "documentType.csv", + "openCodelist": true + }, + "title": { + "title": "Title", + "description": "The document title.", + "type": [ + "string", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A short description of the document. Descriptions are recommended to not exceed 250 words. In the event the document is not accessible online, the description field can be used to describe arrangements for obtaining a copy of the document.", + "type": [ + "string", + "null" + ] + }, + "url": { + "title": "URL", + "description": "A web address for accessing the document. The server providing access to this document ought to be configured to report the correct IANA media type. If the relevant information is within a larger document, the first page should be indicated by adding a fragment identifier to the end of the URL, such as #page=32.", + "type": [ + "string", + "null" + ], + "format": "uri" + }, + "datePublished": { + "title": "Date published", + "description": "The date on which the document was first published. This is particularly important for legally important documents such as notices of a tender.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "dateModified": { + "title": "Date modified", + "description": "Date that the document was last modified", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "format": { + "title": "Format", + "description": "The format of the document, using the open [media type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#media-type) codelist. For example, a web page has a format of 'text/html'. The 'offline/print' code is reserved for printed documents not available in other formats.", + "type": [ + "string", + "null" + ], + "codelist": "mediaType.csv", + "openCodelist": true + }, + "languages": { + "title": "Languages", + "description": "The languages used in the document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "codelist": "language.csv", + "openCodelist": true + }, + "language": { + "title": "Language", + "description": "The language of the linked document, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", + "type": [ + "string", + "null" + ], + "codelist": "language.csv", + "openCodelist": true, + "deprecated": { + "description": "This field is deprecated in favor of `languages`, to support documents in which multiple languages are used.", + "deprecatedVersion": "1.2" + } + }, + "relatedItems": { + "title": "Related items", + "description": "The subset of items to which this document relates, expressed as the `id` values of the related entries in the parent object's `items` array. For example, an entry in the `tender.documents` array may be related only to entries in the `tender.items` array.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string" + ] + } + } + } + }, + "uniqueItems": true + }, + "value": { + "title": "Value", + "description": "The payment's value, if the milestone represents a planned payment.", + "type": "object", + "properties": { + "amount": { + "title": "Amount", + "description": "The amount as entered into a system or published in a document.", + "type": [ + "number", + "null" + ] + }, + "amountNet": { + "title": "Net amount", + "description": "The amount excluding all taxes.", + "type": [ + "number", + "null" + ] + }, + "amountGross": { + "title": "Gross amount", + "description": "The amount including all taxes.", + "type": [ + "number", + "null" + ] + }, + "currency": { + "title": "Currency", + "description": "The currency of the amount, from the closed [currency](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#currency) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "currency.csv", + "openCodelist": false, + "enum": [ + "ADP", + "AED", + "AFA", + "AFN", + "ALK", + "ALL", + "AMD", + "ANG", + "AOA", + "AOK", + "AON", + "AOR", + "ARA", + "ARP", + "ARS", + "ARY", + "ATS", + "AUD", + "AWG", "AYM", "AZM", "AZN", @@ -2830,6 +3430,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -3463,6 +4071,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -4506,6 +5544,434 @@ } } }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity will take place.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true + }, "procurementMethod": { "title": "Procurement method", "description": "The method describing which organizations can submit a bid, using the closed [method](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#method) codelist. In releases concerning second stages (e.g. in framework agreements) or other subsequent stages, the procurement method always refers to the first stage of the contracting process.", @@ -5303,6 +6769,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -7848,6 +9322,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -8484,6 +9966,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -10544,6 +12456,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -11488,6 +13830,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -11979,6 +14329,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -14105,173 +16463,592 @@ } } }, - "deprecated": { - "description": "The single amendment object has been deprecated in favor of including amendments in an amendments (plural) array.", - "deprecatedVersion": "1.1" - } - } - } - }, - "uniqueItems": true - }, - "language": { - "title": "Release language", - "description": "The default language of the data, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", - "type": [ - "string", - "null" - ], - "codelist": "language.csv", - "openCodelist": true - }, - "relatedProcesses": { - "uniqueItems": true, - "items": { - "description": "A reference to a related, preceding contracting (or planning) process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", - "type": "object", - "title": "Related Process", - "properties": { - "id": { - "title": "Relationship ID", - "description": "A local identifier for this relationship, unique within this array.", - "type": "string" - }, - "relationship": { - "items": { - "type": "string" + "deprecated": { + "description": "The single amendment object has been deprecated in favor of including amendments in an amendments (plural) array.", + "deprecatedVersion": "1.1" + } + } + } + }, + "uniqueItems": true + }, + "language": { + "title": "Release language", + "description": "The default language of the data, from the open [language](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#language) codelist. A [BCP47 language tag](https://www.w3.org/International/articles/language-tags/) is allowed, if there is a user need for the additional information.", + "type": [ + "string", + "null" + ], + "codelist": "language.csv", + "openCodelist": true + }, + "relatedProcesses": { + "uniqueItems": true, + "items": { + "description": "A reference to a related, preceding contracting (or planning) process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", + "type": "object", + "title": "Related Process", + "properties": { + "id": { + "title": "Relationship ID", + "description": "A local identifier for this relationship, unique within this array.", + "type": "string" + }, + "relationship": { + "items": { + "type": "string" + }, + "description": "The type of relationship, using the open [relatedProcess](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process) codelist.", + "title": "Relationship", + "type": [ + "array", + "null" + ], + "codelist": "relatedProcess.csv", + "openCodelist": true + }, + "title": { + "description": "The title of the related process, where referencing a contracting (or planning) process, this field should match the tender/title field in the related process.", + "title": "Related process title", + "type": [ + "string", + "null" + ] + }, + "scheme": { + "title": "Scheme", + "description": "The identification scheme used by this cross-reference, using the open [relatedProcessScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "relatedProcessScheme.csv", + "openCodelist": true + }, + "identifier": { + "description": "The identifier of the related process. If the scheme is 'ocid', this must be an open contracting process identifier (ocid).", + "title": "Identifier", + "type": [ + "string", + "null" + ] + }, + "uri": { + "format": "uri", + "description": "A URI pointing to a machine-readable document, release or record package containing the identified related process.", + "title": "Related process URI", + "type": [ + "string", + "null" + ] + } + } + }, + "description": "References to related, preceding contracting (or planning) processes. This information concerns the contracting process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", + "title": "Related processes", + "type": "array" + }, + "links": { + "title": "Links", + "description": "Links to related resources. In a release, links relate to the individual release: for example, a link to a canonical version of the release in another OCDS publication. In a compiled release, links relate to the entire contracting (or planning) process: for example, a link to a resource in a non-OCDS publication that represents the entire contracting process. For references to related processes, see the `relatedProcesses` array.", + "type": "array", + "items": { + "title": "Link", + "description": "A reference to a related resource.", + "type": "object", + "properties": { + "rel": { + "title": "Link relation type", + "description": "The relationship with the related resource, using the open [link relation type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#link-relation-type) codelist.", + "type": "string", + "codelist": "linkRelationType.csv", + "openCodelist": true + }, + "href": { + "title": "Link target", + "description": "The URL of the related resource.", + "type": "string", + "format": "uri" + } + } + }, + "uniqueItems": true, + "omitWhenMerged": true + } + }, + "required": [ + "ocid", + "id", + "date", + "tag", + "initiationType" + ], + "definitions": { + "Planning": { + "title": "Planning", + "description": "Information about, for example, needs identification, budget planning and market research. This information concerns the planning process. This information typically concerns the period before contracting documents (for example, procurement documents) are available to potential suppliers.", + "type": "object", + "properties": { + "id": { + "title": "Planning ID", + "description": "An identifier for the planning process.", + "type": [ + "string", + "null" + ] + }, + "rationale": { + "title": "Rationale", + "description": "The rationale for the planned procurement provided in free text. More detail can be provided in an attached document.", + "type": [ + "string", + "null" + ] + }, + "budget": { + "type": "object", + "title": "Budget", + "description": "Details of the budget that will fund the future contract(s)", + "properties": { + "id": { + "title": "ID", + "description": "An identifier of the budget that will fund the future contract(s). This identifier should be possible to cross-reference against formal budget documents.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Budget Source", + "description": "A short free-text description of the budget that will fund the future contract(s). This may be used to provide human-readable information on: the budget category for the future contract(s) and/or the nature and source of the budget allocation (e.g. conditional, confirmed, or any official authorizations given to the budget allocation).", + "type": [ + "string", + "null" + ] + }, + "amount": { + "title": "Amount", + "description": "The value reserved for the future contract(s), within the budget. A negative value indicates income to the budget as a result of the future contract(s), rather than expenditure. This field should not be used to report the total value of the budget line that will fund the future contract(s).", + "type": "object", + "properties": { + "amount": { + "title": "Amount", + "description": "The amount as entered into a system or published in a document.", + "type": [ + "number", + "null" + ] + }, + "amountNet": { + "title": "Net amount", + "description": "The amount excluding all taxes.", + "type": [ + "number", + "null" + ] + }, + "amountGross": { + "title": "Gross amount", + "description": "The amount including all taxes.", + "type": [ + "number", + "null" + ] + }, + "currency": { + "title": "Currency", + "description": "The currency of the amount, from the closed [currency](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#currency) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "currency.csv", + "openCodelist": false, + "enum": [ + "ADP", + "AED", + "AFA", + "AFN", + "ALK", + "ALL", + "AMD", + "ANG", + "AOA", + "AOK", + "AON", + "AOR", + "ARA", + "ARP", + "ARS", + "ARY", + "ATS", + "AUD", + "AWG", + "AYM", + "AZM", + "AZN", + "BAD", + "BAM", + "BBD", + "BDT", + "BEC", + "BEF", + "BEL", + "BGJ", + "BGK", + "BGL", + "BGN", + "BHD", + "BIF", + "BMD", + "BND", + "BOB", + "BOP", + "BOV", + "BRB", + "BRC", + "BRE", + "BRL", + "BRN", + "BRR", + "BSD", + "BTN", + "BUK", + "BWP", + "BYB", + "BYN", + "BYR", + "BZD", + "CAD", + "CDF", + "CHC", + "CHE", + "CHF", + "CHW", + "CLF", + "CLP", + "CNY", + "COP", + "COU", + "CRC", + "CSD", + "CSJ", + "CSK", + "CUC", + "CUP", + "CVE", + "CYP", + "CZK", + "DDM", + "DEM", + "DJF", + "DKK", + "DOP", + "DZD", + "ECS", + "ECV", + "EEK", + "EGP", + "ERN", + "ESA", + "ESB", + "ESP", + "ETB", + "EUR", + "FIM", + "FJD", + "FKP", + "FRF", + "GBP", + "GEK", + "GEL", + "GHC", + "GHP", + "GHS", + "GIP", + "GMD", + "GNE", + "GNF", + "GNS", + "GQE", + "GRD", + "GTQ", + "GWE", + "GWP", + "GYD", + "HKD", + "HNL", + "HRD", + "HRK", + "HTG", + "HUF", + "IDR", + "IEP", + "ILP", + "ILR", + "ILS", + "INR", + "IQD", + "IRR", + "ISJ", + "ISK", + "ITL", + "JMD", + "JOD", + "JPY", + "KES", + "KGS", + "KHR", + "KMF", + "KPW", + "KRW", + "KWD", + "KYD", + "KZT", + "LAJ", + "LAK", + "LBP", + "LKR", + "LRD", + "LSL", + "LSM", + "LTL", + "LTT", + "LUC", + "LUF", + "LUL", + "LVL", + "LVR", + "LYD", + "MAD", + "MDL", + "MGA", + "MGF", + "MKD", + "MLF", + "MMK", + "MNT", + "MOP", + "MRO", + "MRU", + "MTL", + "MTP", + "MUR", + "MVQ", + "MVR", + "MWK", + "MXN", + "MXP", + "MXV", + "MYR", + "MZE", + "MZM", + "MZN", + "NAD", + "NGN", + "NIC", + "NIO", + "NLG", + "NOK", + "NPR", + "NZD", + "OMR", + "PAB", + "PEH", + "PEI", + "PEN", + "PES", + "PGK", + "PHP", + "PKR", + "PLN", + "PLZ", + "PTE", + "PYG", + "QAR", + "RHD", + "ROK", + "ROL", + "RON", + "RSD", + "RUB", + "RUR", + "RWF", + "SAR", + "SBD", + "SCR", + "SDD", + "SDG", + "SDP", + "SEK", + "SGD", + "SHP", + "SIT", + "SKK", + "SLL", + "SOS", + "SRD", + "SRG", + "SSP", + "STD", + "STN", + "SUR", + "SVC", + "SYP", + "SZL", + "THB", + "TJR", + "TJS", + "TMM", + "TMT", + "TND", + "TOP", + "TPE", + "TRL", + "TRY", + "TTD", + "TWD", + "TZS", + "UAH", + "UAK", + "UGS", + "UGW", + "UGX", + "USD", + "USN", + "USS", + "UYI", + "UYN", + "UYP", + "UYU", + "UYW", + "UZS", + "VEB", + "VEF", + "VES", + "VNC", + "VND", + "VUV", + "WST", + "XAF", + "XAG", + "XAU", + "XBA", + "XBB", + "XBC", + "XBD", + "XCD", + "XDR", + "XEU", + "XFO", + "XFU", + "XOF", + "XPD", + "XPF", + "XPT", + "XRE", + "XSU", + "XTS", + "XUA", + "XXX", + "YDD", + "YER", + "YUD", + "YUM", + "YUN", + "ZAL", + "ZAR", + "ZMK", + "ZMW", + "ZRN", + "ZRZ", + "ZWC", + "ZWD", + "ZWL", + "ZWN", + "ZWR", + null + ] + } + } + }, + "project": { + "title": "Project title", + "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", + "type": [ + "string", + "null" + ] }, - "description": "The type of relationship, using the open [relatedProcess](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process) codelist.", - "title": "Relationship", - "type": [ - "array", - "null" - ], - "codelist": "relatedProcess.csv", - "openCodelist": true - }, - "title": { - "description": "The title of the related process, where referencing a contracting (or planning) process, this field should match the tender/title field in the related process.", - "title": "Related process title", - "type": [ - "string", - "null" - ] - }, - "scheme": { - "title": "Scheme", - "description": "The identification scheme used by this cross-reference, using the open [relatedProcessScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process-scheme) codelist.", - "type": [ - "string", - "null" - ], - "codelist": "relatedProcessScheme.csv", - "openCodelist": true - }, - "identifier": { - "description": "The identifier of the related process. If the scheme is 'ocid', this must be an open contracting process identifier (ocid).", - "title": "Identifier", - "type": [ - "string", - "null" - ] - }, - "uri": { - "format": "uri", - "description": "A URI pointing to a machine-readable document, release or record package containing the identified related process.", - "title": "Related process URI", - "type": [ - "string", - "null" - ] - } - } - }, - "description": "References to related, preceding contracting (or planning) processes. This information concerns the contracting process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", - "title": "Related processes", - "type": "array" - }, - "links": { - "title": "Links", - "description": "Links to related resources. In a release, links relate to the individual release: for example, a link to a canonical version of the release in another OCDS publication. In a compiled release, links relate to the entire contracting (or planning) process: for example, a link to a resource in a non-OCDS publication that represents the entire contracting process. For references to related processes, see the `relatedProcesses` array.", - "type": "array", - "items": { - "title": "Link", - "description": "A reference to a related resource.", - "type": "object", - "properties": { - "rel": { - "title": "Link relation type", - "description": "The relationship with the related resource, using the open [link relation type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#link-relation-type) codelist.", - "type": "string", - "codelist": "linkRelationType.csv", - "openCodelist": true - }, - "href": { - "title": "Link target", - "description": "The URL of the related resource.", - "type": "string", - "format": "uri" + "projectID": { + "title": "Project identifier", + "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "uri": { + "title": "Linked budget information", + "description": "The URL of a machine-readable resource about the budget that will fund the future contract(s). For human-readable documents, see the `planning.documents` array.", + "type": [ + "string", + "null" + ], + "format": "uri" + }, + "source": { + "title": "Data Source", + "description": "(Deprecated in 1.1) Used to point either to a corresponding Budget Data Package, or to a machine or human-readable source where users can find further information on the budget line item identifiers, or project identifiers, provided here.", + "type": [ + "string", + "null" + ], + "deprecated": { + "deprecatedVersion": "1.1", + "description": "The budget data source field was intended to link to machine-readable data about the budget for a contracting process, but has been widely mis-used to provide free-text descriptions of budget providers. As a result, it has been removed from version 1.1. budget/uri can be used to provide a link to machine-readable budget information, and budget/description can be used to provide human-readable information on the budget source." + }, + "format": "uri" + } } - } - }, - "uniqueItems": true, - "omitWhenMerged": true - } - }, - "required": [ - "ocid", - "id", - "date", - "tag", - "initiationType" - ], - "definitions": { - "Planning": { - "title": "Planning", - "description": "Information about, for example, needs identification, budget planning and market research. This information concerns the planning process. This information typically concerns the period before contracting documents (for example, procurement documents) are available to potential suppliers.", - "type": "object", - "properties": { - "id": { - "title": "Planning ID", - "description": "An identifier for this planning process.", - "type": [ - "string", - "null" - ] - }, - "rationale": { - "title": "Rationale", - "description": "The rationale for the planned procurement provided in free text. More detail can be provided in an attached document.", - "type": [ - "string", - "null" - ] }, - "budget": { + "project": { + "title": "Project information", + "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", "type": "object", - "title": "Budget", - "description": "Details of the budget that will fund the future contract(s)", "properties": { "id": { - "title": "ID", - "description": "An identifier of the budget that will fund the future contract(s). This identifier should be possible to cross-reference against formal budget documents.", + "title": "Identifier", + "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", - "integer", "null" - ] + ], + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "type": [ + "string", + "null" + ], + "minLength": 1 }, "description": { - "title": "Budget Source", - "description": "A short free-text description of the budget that will fund the future contract(s). This may be used to provide human-readable information on: the budget category for the future contract(s) and/or the nature and source of the budget allocation (e.g. conditional, confirmed, or any official authorizations given to the budget allocation).", + "title": "Description", + "description": "A short description of the project.", "type": [ "string", "null" - ] + ], + "minLength": 1 }, - "amount": { - "title": "Amount", - "description": "The value reserved for the future contract(s), within the budget. A negative value indicates income to the budget as a result of the future contract(s), rather than expenditure. This field should not be used to report the total value of the budget line that will fund the future contract(s).", + "totalValue": { + "title": "Total value", + "description": "The total anticipated value of the project over its lifetime.", "type": "object", "properties": { "amount": { @@ -14615,46 +17392,211 @@ } } }, - "project": { - "title": "Project title", - "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", - "type": [ - "string", - "null" - ] - }, - "projectID": { - "title": "Project identifier", - "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", - "type": [ - "string", - "integer", - "null" - ] - }, "uri": { - "title": "Linked budget information", - "description": "The URL of a machine-readable resource about the budget that will fund the future contract(s). For human-readable documents, see the `planning.documents` array.", + "title": "URI", + "description": "The URI of a resource with additional information about the project.", "type": [ "string", "null" ], "format": "uri" }, - "source": { - "title": "Data Source", - "description": "(Deprecated in 1.1) Used to point either to a corresponding Budget Data Package, or to a machine or human-readable source where users can find further information on the budget line item identifiers, or project identifiers, provided here.", - "type": [ - "string", - "null" - ], - "deprecated": { - "deprecatedVersion": "1.1", - "description": "The budget data source field was intended to link to machine-readable data about the budget for a contracting process, but has been widely mis-used to provide free-text descriptions of budget providers. As a result, it has been removed from version 1.1. budget/uri can be used to provide a link to machine-readable budget information, and budget/description can be used to provide human-readable information on the budget source." + "sector": { + "title": "Sector", + "description": "The primary sector to which the project relates. It is recommended to use the scheme 'oc4idsProjectSector' and codes from the [OC4IDS projectSector codelist](https://standard.open-contracting.org/infrastructure/latest/en/reference/codelists/#projectsector).", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "additionalClassifications": { + "title": "Additional classifications", + "description": "Additional classifications for the project. For example, a sector or strategic framework classification.", + "type": "array", + "items": { + "title": "Classification", + "description": "A classification consists of at least two parts: an identifier for the list (scheme) from which the classification is taken, and an identifier for the category from that list being applied. It is useful to also publish a text label and/or URI that users can draw on to interpret the classification.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } }, - "format": "uri" + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "locations": { + "title": "Locations", + "description": "Information about the locations where the project is taking place.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } - } + }, + "minProperties": 1 }, "finalStatus": { "title": "Final status", @@ -15902,6 +18844,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -16535,6 +19485,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -17578,6 +20958,434 @@ } } }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity will take place.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true + }, "procurementMethod": { "title": "Procurement method", "description": "The method describing which organizations can submit a bid, using the closed [method](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#method) codelist. In releases concerning second stages (e.g. in framework agreements) or other subsequent stages, the procurement method always refers to the first stage of the contracting process.", @@ -18375,6 +22183,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -20916,6 +24732,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -21552,6 +25376,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -23606,6 +27860,436 @@ ] } } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -24550,6 +29234,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -25041,6 +29733,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -27943,6 +32643,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -28434,6 +33142,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -31598,6 +36314,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -32089,6 +36813,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -33031,6 +37763,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } }, "deprecated": { @@ -33565,6 +38305,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } } }, @@ -34213,17 +38961,447 @@ ] } } - }, - "uri": { - "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", - "format": "uri", - "type": [ - "string", - "null" - ] + }, + "uri": { + "title": "URI", + "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "format": "uri", + "type": [ + "string", + "null" + ] + } + } + }, + "deliveryLocations": { + "title": "Delivery Locations", + "description": "The locations where activity related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "deliveryAddresses": { + "title": "Delivery Addresses", + "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "type": "array", + "items": { + "title": "Address", + "description": "An address.", + "type": "object", + "properties": { + "streetAddress": { + "title": "Street address", + "type": [ + "string", + "null" + ], + "description": "The street address. For example, 1600 Amphitheatre Pkwy." + }, + "locality": { + "title": "Locality", + "type": [ + "string", + "null" + ], + "description": "The locality. For example, Mountain View." + }, + "region": { + "title": "Region", + "type": [ + "string", + "null" + ], + "description": "The region. For example, CA." + }, + "postalCode": { + "title": "Postal code", + "type": [ + "string", + "null" + ], + "description": "The postal code. For example, 94043." + }, + "country": { + "title": "Country code", + "description": "The country, from the closed [country](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#country) codelist. If a country is missing, [create an issue](https://github.com/open-contracting/standard/issues) to discuss the addition of a user-assigned code to the country codelist.", + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "title": "Country name", + "type": [ + "string", + "null" + ], + "description": "The country name. For example, United States.", + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] + } } - } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } } }, @@ -34398,6 +39576,98 @@ } } }, + "Location": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, "Address": { "title": "Address", "description": "An address.", @@ -34709,6 +39979,14 @@ "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", "deprecatedVersion": "1.2" } + }, + "description": { + "title": "Description", + "description": "The description of the address.", + "type": [ + "string", + "null" + ] } } }, @@ -35106,142 +40384,632 @@ } } }, - "Period": { - "title": "Period", - "description": "Key events during a contracting (or planning) process may have a known start date, end date, duration, or maximum extent (the latest date the period can extend to). In some cases, not all of these fields will have known or relevant values.", + "Period": { + "title": "Period", + "description": "Key events during a contracting (or planning) process may have a known start date, end date, duration, or maximum extent (the latest date the period can extend to). In some cases, not all of these fields will have known or relevant values.", + "type": "object", + "properties": { + "startDate": { + "title": "Start date", + "description": "The start date for the period. When known, a precise start date must be provided.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "endDate": { + "title": "End date", + "description": "The end date for the period. When known, a precise end date must be provided.", + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "maxExtentDate": { + "description": "The period cannot be extended beyond this date. This field can be used to express the maximum available date for extension or renewal of this period.", + "format": "date-time", + "title": "Maximum extent", + "type": [ + "string", + "null" + ] + }, + "durationInDays": { + "description": "The maximum duration of this period in days. A user interface can collect or display this data in months or years as appropriate, and then convert it into days when storing this field. This field can be used when exact dates are not known. If a startDate and endDate are set, this field, if used, must be equal to the difference between startDate and endDate. Otherwise, if a startDate and maxExtentDate are set, this field, if used, must be equal to the difference between startDate and maxExtentDate.", + "title": "Duration (days)", + "type": [ + "integer", + "null" + ] + } + } + }, + "RelatedProcess": { + "description": "A reference to a related, preceding contracting (or planning) process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", + "type": "object", + "title": "Related Process", + "properties": { + "id": { + "title": "Relationship ID", + "description": "A local identifier for this relationship, unique within this array.", + "type": "string" + }, + "relationship": { + "items": { + "type": "string" + }, + "description": "The type of relationship, using the open [relatedProcess](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process) codelist.", + "title": "Relationship", + "type": [ + "array", + "null" + ], + "codelist": "relatedProcess.csv", + "openCodelist": true + }, + "title": { + "description": "The title of the related process, where referencing a contracting (or planning) process, this field should match the tender/title field in the related process.", + "title": "Related process title", + "type": [ + "string", + "null" + ] + }, + "scheme": { + "title": "Scheme", + "description": "The identification scheme used by this cross-reference, using the open [relatedProcessScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "relatedProcessScheme.csv", + "openCodelist": true + }, + "identifier": { + "description": "The identifier of the related process. If the scheme is 'ocid', this must be an open contracting process identifier (ocid).", + "title": "Identifier", + "type": [ + "string", + "null" + ] + }, + "uri": { + "format": "uri", + "description": "A URI pointing to a machine-readable document, release or record package containing the identified related process.", + "title": "Related process URI", + "type": [ + "string", + "null" + ] + } + } + }, + "Unit": { + "title": "Unit", + "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "type": [ + "string", + "null" + ], + "codelist": "unitClassificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "type": [ + "string", + "null" + ] + }, + "name": { + "title": "Name", + "description": "Name of the unit.", + "type": [ + "string", + "null" + ] + }, + "value": { + "title": "Value", + "description": "The monetary value of a single unit.", + "type": "object", + "properties": { + "amount": { + "title": "Amount", + "description": "The amount as entered into a system or published in a document.", + "type": [ + "number", + "null" + ] + }, + "amountNet": { + "title": "Net amount", + "description": "The amount excluding all taxes.", + "type": [ + "number", + "null" + ] + }, + "amountGross": { + "title": "Gross amount", + "description": "The amount including all taxes.", + "type": [ + "number", + "null" + ] + }, + "currency": { + "title": "Currency", + "description": "The currency of the amount, from the closed [currency](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#currency) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "currency.csv", + "openCodelist": false, + "enum": [ + "ADP", + "AED", + "AFA", + "AFN", + "ALK", + "ALL", + "AMD", + "ANG", + "AOA", + "AOK", + "AON", + "AOR", + "ARA", + "ARP", + "ARS", + "ARY", + "ATS", + "AUD", + "AWG", + "AYM", + "AZM", + "AZN", + "BAD", + "BAM", + "BBD", + "BDT", + "BEC", + "BEF", + "BEL", + "BGJ", + "BGK", + "BGL", + "BGN", + "BHD", + "BIF", + "BMD", + "BND", + "BOB", + "BOP", + "BOV", + "BRB", + "BRC", + "BRE", + "BRL", + "BRN", + "BRR", + "BSD", + "BTN", + "BUK", + "BWP", + "BYB", + "BYN", + "BYR", + "BZD", + "CAD", + "CDF", + "CHC", + "CHE", + "CHF", + "CHW", + "CLF", + "CLP", + "CNY", + "COP", + "COU", + "CRC", + "CSD", + "CSJ", + "CSK", + "CUC", + "CUP", + "CVE", + "CYP", + "CZK", + "DDM", + "DEM", + "DJF", + "DKK", + "DOP", + "DZD", + "ECS", + "ECV", + "EEK", + "EGP", + "ERN", + "ESA", + "ESB", + "ESP", + "ETB", + "EUR", + "FIM", + "FJD", + "FKP", + "FRF", + "GBP", + "GEK", + "GEL", + "GHC", + "GHP", + "GHS", + "GIP", + "GMD", + "GNE", + "GNF", + "GNS", + "GQE", + "GRD", + "GTQ", + "GWE", + "GWP", + "GYD", + "HKD", + "HNL", + "HRD", + "HRK", + "HTG", + "HUF", + "IDR", + "IEP", + "ILP", + "ILR", + "ILS", + "INR", + "IQD", + "IRR", + "ISJ", + "ISK", + "ITL", + "JMD", + "JOD", + "JPY", + "KES", + "KGS", + "KHR", + "KMF", + "KPW", + "KRW", + "KWD", + "KYD", + "KZT", + "LAJ", + "LAK", + "LBP", + "LKR", + "LRD", + "LSL", + "LSM", + "LTL", + "LTT", + "LUC", + "LUF", + "LUL", + "LVL", + "LVR", + "LYD", + "MAD", + "MDL", + "MGA", + "MGF", + "MKD", + "MLF", + "MMK", + "MNT", + "MOP", + "MRO", + "MRU", + "MTL", + "MTP", + "MUR", + "MVQ", + "MVR", + "MWK", + "MXN", + "MXP", + "MXV", + "MYR", + "MZE", + "MZM", + "MZN", + "NAD", + "NGN", + "NIC", + "NIO", + "NLG", + "NOK", + "NPR", + "NZD", + "OMR", + "PAB", + "PEH", + "PEI", + "PEN", + "PES", + "PGK", + "PHP", + "PKR", + "PLN", + "PLZ", + "PTE", + "PYG", + "QAR", + "RHD", + "ROK", + "ROL", + "RON", + "RSD", + "RUB", + "RUR", + "RWF", + "SAR", + "SBD", + "SCR", + "SDD", + "SDG", + "SDP", + "SEK", + "SGD", + "SHP", + "SIT", + "SKK", + "SLL", + "SOS", + "SRD", + "SRG", + "SSP", + "STD", + "STN", + "SUR", + "SVC", + "SYP", + "SZL", + "THB", + "TJR", + "TJS", + "TMM", + "TMT", + "TND", + "TOP", + "TPE", + "TRL", + "TRY", + "TTD", + "TWD", + "TZS", + "UAH", + "UAK", + "UGS", + "UGW", + "UGX", + "USD", + "USN", + "USS", + "UYI", + "UYN", + "UYP", + "UYU", + "UYW", + "UZS", + "VEB", + "VEF", + "VES", + "VNC", + "VND", + "VUV", + "WST", + "XAF", + "XAG", + "XAU", + "XBA", + "XBB", + "XBC", + "XBD", + "XCD", + "XDR", + "XEU", + "XFO", + "XFU", + "XOF", + "XPD", + "XPF", + "XPT", + "XRE", + "XSU", + "XTS", + "XUA", + "XXX", + "YDD", + "YER", + "YUD", + "YUM", + "YUN", + "ZAL", + "ZAR", + "ZMK", + "ZMW", + "ZRN", + "ZRZ", + "ZWC", + "ZWD", + "ZWL", + "ZWN", + "ZWR", + null + ] + } + } + }, + "uri": { + "title": "URI", + "description": "The machine-readable URI for the unit of measure, provided by the scheme.", + "format": "uri", + "type": [ + "string", + "null" + ] + } + } + }, + "Link": { + "title": "Link", + "description": "A reference to a related resource.", "type": "object", "properties": { - "startDate": { - "title": "Start date", - "description": "The start date for the period. When known, a precise start date must be provided.", - "type": [ - "string", - "null" - ], - "format": "date-time" - }, - "endDate": { - "title": "End date", - "description": "The end date for the period. When known, a precise end date must be provided.", - "type": [ - "string", - "null" - ], - "format": "date-time" + "rel": { + "title": "Link relation type", + "description": "The relationship with the related resource, using the open [link relation type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#link-relation-type) codelist.", + "type": "string", + "codelist": "linkRelationType.csv", + "openCodelist": true }, - "maxExtentDate": { - "description": "The period cannot be extended beyond this date. This field can be used to express the maximum available date for extension or renewal of this period.", - "format": "date-time", - "title": "Maximum extent", + "href": { + "title": "Link target", + "description": "The URL of the related resource.", + "type": "string", + "format": "uri" + } + } + }, + "SimpleIdentifier": { + "title": "Simple identifier", + "description": "An unambiguous reference to a resource within a given context.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The list, register or system from which the identifier is taken. If the scope of the list, register or system from which the identifier is drawn is national, it is suggested to follow the pattern {ISO 3166-1 alpha-2}-{system}. If it is subnational, it is suggested to follow the pattern {ISO 3166-2}-{system}.", "type": [ "string", "null" ] }, - "durationInDays": { - "description": "The maximum duration of this period in days. A user interface can collect or display this data in months or years as appropriate, and then convert it into days when storing this field. This field can be used when exact dates are not known. If a startDate and endDate are set, this field, if used, must be equal to the difference between startDate and endDate. Otherwise, if a startDate and maxExtentDate are set, this field, if used, must be equal to the difference between startDate and maxExtentDate.", - "title": "Duration (days)", + "id": { + "title": "ID", + "description": "The identifier taken from the scheme.", "type": [ - "integer", + "string", "null" - ] + ], + "versionId": true } } }, - "RelatedProcess": { - "description": "A reference to a related, preceding contracting (or planning) process. For example, the contracting process may refer to its planning process(es). In multi-stage procedures (e.g. framework agreements with reopening of competition), the contracting process for a later stage may refer to the contracting process for the first stage.", + "SubmissionTerms": { + "title": "Submission terms", + "description": "Information about how, when and where tenderers need to submit their bids.", "type": "object", - "title": "Related Process", "properties": { - "id": { - "title": "Relationship ID", - "description": "A local identifier for this relationship, unique within this array.", - "type": "string" - }, - "relationship": { - "items": { - "type": "string" - }, - "description": "The type of relationship, using the open [relatedProcess](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process) codelist.", - "title": "Relationship", - "type": [ - "array", - "null" - ], - "codelist": "relatedProcess.csv", - "openCodelist": true - }, - "title": { - "description": "The title of the related process, where referencing a contracting (or planning) process, this field should match the tender/title field in the related process.", - "title": "Related process title", + "electronicSubmissionPolicy": { + "title": "Electronic submission policy", + "description": "Whether tenderers are required, allowed or not allowed to submit bids electronically.", "type": [ "string", "null" + ], + "codelist": "permission.csv", + "openCodelist": false, + "enum": [ + "required", + "allowed", + "notAllowed", + null ] - }, - "scheme": { - "title": "Scheme", - "description": "The identification scheme used by this cross-reference, using the open [relatedProcessScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#related-process-scheme) codelist.", + } + } + }, + "ExclusionGrounds": { + "title": "Exclusion grounds", + "description": "The criteria regarding the situation of a tenderer that can lead to its exclusion from the contracting process. For example: criminal convictions, bankruptcy, presence on a blacklist or failure to pay taxes.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "The description of the criteria.", "type": [ "string", "null" ], - "codelist": "relatedProcessScheme.csv", - "openCodelist": true - }, - "identifier": { - "description": "The identifier of the related process. If the scheme is 'ocid', this must be an open contracting process identifier (ocid).", - "title": "Identifier", - "type": [ - "string", - "null" - ] - }, - "uri": { - "format": "uri", - "description": "A URI pointing to a machine-readable document, release or record package containing the identified related process.", - "title": "Related process URI", + "minLength": 1 + } + }, + "minProperties": 1 + }, + "SelectionCriteria": { + "title": "Selection criteria", + "description": "The minimum requirements for potential suppliers to participate in the contracting process. Selection criteria ensure that a potential supplier has the legal and financial capacities and the technical and professional abilities to perform the contract.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "The description of the criteria.", "type": [ "string", "null" - ] + ], + "minLength": 1 } - } + }, + "minProperties": 1 }, - "Unit": { - "title": "Unit", - "description": "A description of the unit in which the goods, services or works are provided (e.g. hours, kilograms) and the unit-price.", + "Project": { + "title": "Project information", + "description": "Information about the infrastructure or public-private partnership project to which a planning process is related.", "type": "object", "properties": { - "scheme": { - "title": "Scheme", - "description": "The list from which identifiers for units of measure are taken, using the open [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist. 'UNCEFACT' is recommended.", + "id": { + "title": "Identifier", + "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" ], - "codelist": "unitClassificationScheme.csv", - "openCodelist": true + "minLength": 1 }, - "id": { - "title": "ID", - "description": "The identifier from the codelist referenced in the `scheme` field. Check the [unitClassificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#unit-classification-scheme) codelist for details of how to find and use identifiers from the scheme in use.", + "title": { + "title": "Title", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" - ] + ], + "minLength": 1 }, - "name": { - "title": "Name", - "description": "Name of the unit.", + "description": { + "title": "Description", + "description": "A short description of the project.", "type": [ "string", "null" - ] + ], + "minLength": 1 }, - "value": { - "title": "Value", - "description": "The monetary value of a single unit.", + "totalValue": { + "title": "Total value", + "description": "The total anticipated value of the project over its lifetime.", "type": "object", "properties": { "amount": { @@ -35587,112 +41355,206 @@ }, "uri": { "title": "URI", - "description": "The machine-readable URI for the unit of measure, provided by the scheme.", - "format": "uri", + "description": "The URI of a resource with additional information about the project.", "type": [ "string", "null" - ] - } - } - }, - "Link": { - "title": "Link", - "description": "A reference to a related resource.", - "type": "object", - "properties": { - "rel": { - "title": "Link relation type", - "description": "The relationship with the related resource, using the open [link relation type](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#link-relation-type) codelist.", - "type": "string", - "codelist": "linkRelationType.csv", - "openCodelist": true - }, - "href": { - "title": "Link target", - "description": "The URL of the related resource.", - "type": "string", + ], "format": "uri" - } - } - }, - "SimpleIdentifier": { - "title": "Simple identifier", - "description": "An unambiguous reference to a resource within a given context.", - "type": "object", - "properties": { - "scheme": { - "title": "Scheme", - "description": "The list, register or system from which the identifier is taken. If the scope of the list, register or system from which the identifier is drawn is national, it is suggested to follow the pattern {ISO 3166-1 alpha-2}-{system}. If it is subnational, it is suggested to follow the pattern {ISO 3166-2}-{system}.", - "type": [ - "string", - "null" - ] }, - "id": { - "title": "ID", - "description": "The identifier taken from the scheme.", - "type": [ - "string", - "null" - ], - "versionId": true - } - } - }, - "SubmissionTerms": { - "title": "Submission terms", - "description": "Information about how, when and where tenderers need to submit their bids.", - "type": "object", - "properties": { - "electronicSubmissionPolicy": { - "title": "Electronic submission policy", - "description": "Whether tenderers are required, allowed or not allowed to submit bids electronically.", - "type": [ - "string", - "null" - ], - "codelist": "permission.csv", - "openCodelist": false, - "enum": [ - "required", - "allowed", - "notAllowed", - null - ] - } - } - }, - "ExclusionGrounds": { - "title": "Exclusion grounds", - "description": "The criteria regarding the situation of a tenderer that can lead to its exclusion from the contracting process. For example: criminal convictions, bankruptcy, presence on a blacklist or failure to pay taxes.", - "type": "object", - "properties": { - "description": { - "title": "Description", - "description": "The description of the criteria.", - "type": [ - "string", - "null" - ], - "minLength": 1 - } - }, - "minProperties": 1 - }, - "SelectionCriteria": { - "title": "Selection criteria", - "description": "The minimum requirements for potential suppliers to participate in the contracting process. Selection criteria ensure that a potential supplier has the legal and financial capacities and the technical and professional abilities to perform the contract.", - "type": "object", - "properties": { - "description": { - "title": "Description", - "description": "The description of the criteria.", - "type": [ - "string", - "null" - ], - "minLength": 1 + "sector": { + "title": "Sector", + "description": "The primary sector to which the project relates. It is recommended to use the scheme 'oc4idsProjectSector' and codes from the [OC4IDS projectSector codelist](https://standard.open-contracting.org/infrastructure/latest/en/reference/codelists/#projectsector).", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "additionalClassifications": { + "title": "Additional classifications", + "description": "Additional classifications for the project. For example, a sector or strategic framework classification.", + "type": "array", + "items": { + "title": "Classification", + "description": "A classification consists of at least two parts: an identifier for the list (scheme) from which the classification is taken, and an identifier for the category from that list being applied. It is useful to also publish a text label and/or URI that users can draw on to interpret the classification.", + "type": "object", + "properties": { + "scheme": { + "title": "Scheme", + "description": "The scheme or codelist from which the classification code is taken, using the open [classificationScheme](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#classification-scheme) codelist.", + "type": [ + "string", + "null" + ], + "codelist": "classificationScheme.csv", + "openCodelist": true + }, + "id": { + "title": "ID", + "description": "The classification code taken from the scheme. Although an integer is allowed, it is recommended to use a string.", + "type": [ + "string", + "integer", + "null" + ] + }, + "description": { + "title": "Description", + "description": "A textual description or title for the classification code.", + "type": [ + "string", + "null" + ] + }, + "uri": { + "title": "URI", + "description": "A URI to uniquely identify the classification code.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 + }, + "locations": { + "title": "Locations", + "description": "Information about the locations where the project is taking place.", + "type": "array", + "items": { + "title": "Location", + "description": "A physical or virtual location.", + "type": "object", + "properties": { + "description": { + "title": "Description", + "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "type": [ + "string", + "null" + ] + }, + "geometry": { + "title": "Geometry", + "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "title": "Coordinates", + "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "title": "Gazetteer", + "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "type": "object", + "properties": { + "scheme": { + "title": "Gazetteer scheme", + "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "title": "Identifiers", + "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "title": "URI", + "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "wholeListMerge": true, + "uniqueItems": true, + "minItems": 1 } }, "minProperties": 1 diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json index 3f0c16627..486227fd4 100644 --- a/schema/versioned-release-validation-schema.json +++ b/schema/versioned-release-validation-schema.json @@ -126,6 +126,9 @@ "budget": { "$ref": "#/definitions/Budget" }, + "project": { + "$ref": "#/definitions/Project" + }, "finalStatus": { "type": "array", "items": { @@ -351,6 +354,62 @@ "maximumValue": { "$ref": "#/definitions/Value" }, + "deliveryLocations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/LocationUnversioned" + }, + "uniqueItems": true + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "deliveryAddresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressUnversioned" + }, + "uniqueItems": true + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, "procurementMethod": { "type": "array", "items": { @@ -1874,6 +1933,64 @@ }, "unit": { "$ref": "#/definitions/Unit" + }, + "deliveryLocations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/LocationUnversioned" + }, + "uniqueItems": true, + "minItems": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "deliveryAddresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressUnversioned" + }, + "uniqueItems": true, + "minItems": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } } } }, @@ -2038,6 +2155,157 @@ } } }, + "Location": { + "type": "object", + "properties": { + "description": { + "$ref": "#/definitions/StringNullVersioned" + }, + "geometry": { + "type": "object", + "properties": { + "type": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "coordinates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "gazetteer": { + "type": "object", + "properties": { + "scheme": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "identifiers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "uri": { + "$ref": "#/definitions/StringNullUriVersioned" + } + } + }, "Address": { "type": "object", "properties": { @@ -2365,6 +2633,9 @@ } } } + }, + "description": { + "$ref": "#/definitions/StringNullVersioned" } } }, @@ -3173,6 +3444,163 @@ }, "minProperties": 1 }, + "Project": { + "type": "object", + "properties": { + "id": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "title": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "description": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ], + "minLength": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "totalValue": { + "$ref": "#/definitions/Value" + }, + "uri": { + "$ref": "#/definitions/StringNullUriVersioned" + }, + "sector": { + "$ref": "#/definitions/Classification" + }, + "additionalClassifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ClassificationUnversioned" + }, + "uniqueItems": true, + "minItems": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "locations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "releaseID": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/LocationUnversioned" + }, + "uniqueItems": true, + "minItems": 1 + }, + "releaseTag": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "minProperties": 1 + }, "StringNullUriVersioned": { "type": "array", "items": { @@ -3387,6 +3815,386 @@ } } }, + "LocationUnversioned": { + "type": "object", + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "geometry": { + "type": "object", + "properties": { + "type": { + "type": [ + "string", + "null" + ], + "codelist": "geometryType.csv", + "openCodelist": false, + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + null + ] + }, + "coordinates": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "array" + ] + } + } + } + }, + "gazetteer": { + "type": "object", + "properties": { + "scheme": { + "type": [ + "string", + "null" + ], + "codelist": "locationGazetteers.csv", + "openCodelist": true + }, + "identifiers": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + } + } + } + }, + "uri": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + } + }, + "AddressUnversioned": { + "type": "object", + "properties": { + "streetAddress": { + "type": [ + "string", + "null" + ] + }, + "locality": { + "type": [ + "string", + "null" + ] + }, + "region": { + "type": [ + "string", + "null" + ] + }, + "postalCode": { + "type": [ + "string", + "null" + ] + }, + "country": { + "type": [ + "string", + "null" + ], + "codelist": "country.csv", + "openCodelist": false, + "enum": [ + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AO", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CW", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "SS", + "ST", + "SV", + "SX", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "XK", + "YE", + "YT", + "ZA", + "ZM", + "ZW", + null + ] + }, + "countryName": { + "type": [ + "string", + "null" + ], + "deprecated": { + "description": "This field is deprecated in favor of `country`, to promote standardized country codes instead of non-standardized country names.", + "deprecatedVersion": "1.2" + } + }, + "description": { + "type": [ + "string", + "null" + ] + } + } + }, "IdentifierUnversioned": { "type": "object", "properties": { From a03a772c172fe14ef708354e3e737c78abf2cd9e Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 13 Jun 2024 12:16:50 +0100 Subject: [PATCH 30/51] Update dereferenced release schema --- schema/dereferenced-release-schema.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index cf02311f6..4be286c08 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -3078,7 +3078,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -8163,7 +8163,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -10287,7 +10287,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -16342,7 +16342,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -21423,7 +21423,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -23541,7 +23541,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -34223,7 +34223,7 @@ }, "unit": { "title": "Pricing unit", - "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "The pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { @@ -35658,7 +35658,7 @@ }, "Unit": { "title": "Pricing unit", - "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation.", + "description": "A pricing unit. It is recommended to use the unit of measurement in which the goods, services or works are provided (e.g. kilogram, hour), rather than the unit of presentation (e.g. box), because units of measurement are easier to compare and convert than units of presentation. A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or law, that is used as a standard of measurement for the same kind of quantity. For example, mass, a quantity, can be measured in kilograms, a unit of measurement.", "type": "object", "properties": { "scheme": { From ffed6a914f83d65864314da5482f09381bcee2d2 Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 27 Jun 2024 12:25:09 +0100 Subject: [PATCH 31/51] docs/guidance/map/framework_agreements.md: Update diagram --- docs/_static/png/framework_agreement/model.png | Bin 71025 -> 0 bytes .../_static/svg/framework_agreement_diagram.svg | 1 + docs/guidance/map/framework_agreements.md | 4 ++-- 3 files changed, 3 insertions(+), 2 deletions(-) delete mode 100644 docs/_static/png/framework_agreement/model.png create mode 100644 docs/_static/svg/framework_agreement_diagram.svg diff --git a/docs/_static/png/framework_agreement/model.png b/docs/_static/png/framework_agreement/model.png deleted file mode 100644 index 27de4bbd6a205cc4558e92063fb264bc5005bdd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71025 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 Ux(LZ;dI@-`+`6MsEN2$*e*^k2(EtDd diff --git a/docs/_static/svg/framework_agreement_diagram.svg b/docs/_static/svg/framework_agreement_diagram.svg new file mode 100644 index 000000000..77eb6fad4 --- /dev/null +++ b/docs/_static/svg/framework_agreement_diagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/guidance/map/framework_agreements.md b/docs/guidance/map/framework_agreements.md index 9ef31c646..bb0c256fb 100644 --- a/docs/guidance/map/framework_agreements.md +++ b/docs/guidance/map/framework_agreements.md @@ -70,9 +70,9 @@ OCDS models the first and second stages of framework agreement procedures as sep The 'framework' code is only used to relate second-stage contracting processes to their first-stage contracting process, never to other second-stage contracting processes. ``` -The following diagram shows how OCDS models a framework agreement procedure with two second stages: one with competition and one without competition. Grey blocks represent unused sections of the OCDS schema. +The following diagram shows how OCDS models a framework agreement procedure with two second stages: one with competition and one without competition. -![OCDS framework agreement model](../../_static/png/framework_agreement/model.png) +![OCDS framework agreement model](../../_static/svg/framework_agreement_diagram.svg) ### Extensions From d581983e7a43aa56e566a6b0dd4704a8842d9bbd Mon Sep 17 00:00:00 2001 From: Duncan Dewhurst Date: Thu, 27 Jun 2024 12:29:45 +0100 Subject: [PATCH 32/51] Update changelog --- docs/history/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index d40286dac..a943cf6fa 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -26,7 +26,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * Pre-qualification and pre-selection [#999](https://github.com/open-contracting/standard/pull/999) [#1345](https://github.com/open-contracting/standard/pull/1345) * Unsuccessful processes [#1007](https://github.com/open-contracting/standard/pull/1007) * Milestones [#1048](https://github.com/open-contracting/standard/pull/1048) - * Framework agreements [#1123](https://github.com/open-contracting/standard/pull/1123) [#1269](https://github.com/open-contracting/standard/pull/1269) [#1332](https://github.com/open-contracting/standard/pull/1332) [#1461](https://github.com/open-contracting/standard/pull/1461) [#1549](https://github.com/open-contracting/standard/pull/1549) [#1671](https://github.com/open-contracting/standard/pull/1671) + * Framework agreements [#1123](https://github.com/open-contracting/standard/pull/1123) [#1269](https://github.com/open-contracting/standard/pull/1269) [#1332](https://github.com/open-contracting/standard/pull/1332) [#1461](https://github.com/open-contracting/standard/pull/1461) [#1549](https://github.com/open-contracting/standard/pull/1549) [#1671](https://github.com/open-contracting/standard/pull/1671), [#1701](https://github.com/open-contracting/standard/pull/1701) * Electronic catalogs [#1223](https://github.com/open-contracting/standard/pull/1223) * Beneficial ownership information [#1305](https://github.com/open-contracting/standard/pull/1305) * [#1414](https://github.com/open-contracting/standard/pull/1414) Rephrase planning stage to planning process in worked examples. From 3546b52198803a8b0bda380e9b8c67ed573a8492 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 18:01:56 -0400 Subject: [PATCH 33/51] build: Update script to keep planning/budget/project as multilingual, but not coordinates. ci: Allow SME acronyms. --- .github/workflows/spellcheck.yml | 2 +- docs/guidance/map/translations.md | 2 +- docs/history/changelog.md | 3 ++- manage.py | 6 ++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 300eefc34..b60b28a2b 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -10,4 +10,4 @@ jobs: with: python-version: '3.10' - run: pip install codespell - - run: codespell -S .git,docson,locale,examples,country.csv,currency.csv,language.csv,mediaType.csv -L fo,zar . + - run: codespell -S .git,docson,locale,examples,country.csv,currency.csv,language.csv,mediaType.csv -L fo,sme,zar,SME . diff --git a/docs/guidance/map/translations.md b/docs/guidance/map/translations.md index 38571b8aa..d3d9f97a4 100644 --- a/docs/guidance/map/translations.md +++ b/docs/guidance/map/translations.md @@ -11,7 +11,6 @@ Two texts have the same content if they describe the same thing: for example, "U You can publish the values of these fields in any language: % STARTLIST -- `coordinates`, in any location - `description`, in any location - `finalStatusDetails`, in any location - `legalName`, in any location @@ -21,6 +20,7 @@ You can publish the values of these fields in any language: - `region`, in any location - `streetAddress`, in any location - `title`, in any location +- `planning/budget/project` - `tender/awardCriteriaDetails` - `tender/procurementMethodDetails` - `tender/procurementMethodRationale` diff --git a/docs/history/changelog.md b/docs/history/changelog.md index b2b06cf68..c921d1fbf 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -72,11 +72,12 @@ Per the [normative and non-normative content and changes policy](../governance/n * Add new codelists: * [#1372](https://github.com/open-contracting/standard/pull/1372) `country` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `geometryType` * [#1316](https://github.com/open-contracting/standard/pull/1316) `language` * [#1326](https://github.com/open-contracting/standard/pull/1326) `linkRelationType` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `locationGazetteers` * [#1308](https://github.com/open-contracting/standard/pull/1308) `mediaType` * [#1459](https://github.com/open-contracting/standard/pull/1459) `partyScale` - * [#1684](https://github.com/open-contracting/standard/pull/1684) `geometryType` and `locationGazetteers` * [#1654](https://github.com/open-contracting/standard/pull/1654) `permission` * [#1642](https://github.com/open-contracting/standard/pull/1642) `planningFinalStatus` * [#1648](https://github.com/open-contracting/standard/pull/1648) `tenderFinalStatus` diff --git a/manage.py b/manage.py index 606eff65b..a5c17f94e 100755 --- a/manage.py +++ b/manage.py @@ -532,6 +532,7 @@ def pre_commit(): jsonref_release_schema = json_load('release-schema.json', jsonref, merge_props=True) counts = defaultdict(list) + nonstring = ('boolean', 'integer', 'number', 'object') for field in get_schema_fields(jsonref_release_schema): name = field.path_components[-1] # Skip definitions (output dereferenced properties only). Skip deprecated fields. @@ -539,7 +540,8 @@ def pre_commit(): continue multilingual = ( # If a field can be a non-string, it is not multilingual. - not any(t in field.schema['type'] for t in ('boolean', 'integer', 'number', 'object')) + not any(t in field.schema['type'] for t in nonstring) + and ('array' not in field.schema['type'] or not any(t in field.schema['items']['type'] for t in nonstring)) # If a field's value is constrained to a codelist or format, it is not multilingual. and not any(prop in field.schema for prop in ('codelist', 'format')) # If an array can contain non-strings, it is not multilingual. @@ -558,7 +560,7 @@ def pre_commit(): if multilingual: counts[name].append(field.path) else: - counts[name] = [] + counts[name] = counts[name] bulletlist = [ '% STARTLIST', From dd97d4bcbd433fc16efcbcb9d246f1c986614498 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:39:57 -0400 Subject: [PATCH 34/51] Review merger of Project and Location extensions - Merge reference.md content into schema. - Copy-edit Project and Location subschema. - Copy-edit Location codelists. Remove normative word imported from RFC 7946. - Use classification scheme example that conforms to guidance. - Use "datasets" not "data sets" per style guide. --- .../release_package.json | 2 +- docs/guidance/map/linked_standards.md | 2 +- docs/history/changelog.md | 6 ++- docs/schema/reference.md | 10 +---- schema/codelists/geometryType.csv | 12 +++--- schema/codelists/locationGazetteer.csv | 7 ++++ schema/codelists/locationGazetteers.csv | 7 ---- schema/release-schema.json | 40 +++++++++---------- 8 files changed, 40 insertions(+), 46 deletions(-) create mode 100644 schema/codelists/locationGazetteer.csv delete mode 100644 schema/codelists/locationGazetteers.csv diff --git a/docs/examples/release_schema_reference/release_package.json b/docs/examples/release_schema_reference/release_package.json index aa6c4427c..2d401a453 100644 --- a/docs/examples/release_schema_reference/release_package.json +++ b/docs/examples/release_schema_reference/release_package.json @@ -112,7 +112,7 @@ { "id": "03.04.05", "description": "Cycle lanes for road transport.", - "scheme": "My local scheme" + "scheme": "GB-EXAMPLE" } ], "locations": [ diff --git a/docs/guidance/map/linked_standards.md b/docs/guidance/map/linked_standards.md index afc5fe78c..0d64d6d19 100644 --- a/docs/guidance/map/linked_standards.md +++ b/docs/guidance/map/linked_standards.md @@ -8,7 +8,7 @@ The [Open Contracting for Infrastructure Data Standards](https://standard.open-c A joint effort by the [Infrastructure Transparency Initiative](https://infrastructuretransparency.org) (CoST) and the Open Contracting Partnership, it builds on best practice in open data and openness of public infrastructure procurement globally. -OCDS and OC4IDS data sets ought to be linked using the `planning.project` field, referencing the OC4IDS project identifier in `planning.project.id`. +OCDS and OC4IDS datasets ought to be linked using the `planning.project` object, by referencing the OC4IDS project identifier in the `planning.project.id` field. ## Open Fiscal Data Package diff --git a/docs/history/changelog.md b/docs/history/changelog.md index c921d1fbf..2cfb2aa75 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -75,7 +75,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1684](https://github.com/open-contracting/standard/pull/1684) `geometryType` * [#1316](https://github.com/open-contracting/standard/pull/1316) `language` * [#1326](https://github.com/open-contracting/standard/pull/1326) `linkRelationType` - * [#1684](https://github.com/open-contracting/standard/pull/1684) `locationGazetteers` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `locationGazetteer` * [#1308](https://github.com/open-contracting/standard/pull/1308) `mediaType` * [#1459](https://github.com/open-contracting/standard/pull/1459) `partyScale` * [#1654](https://github.com/open-contracting/standard/pull/1654) `permission` @@ -200,7 +200,9 @@ Per the [normative and non-normative content and changes policy](../governance/n * Add new fields: * [#1335](https://github.com/open-contracting/standard/pull/1335) `planning.id` * [#1642](https://github.com/open-contracting/standard/pull/1642) `planning.finalStatus`, `planning.finalStatusDetails` and `planning.finalStatusDate` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `planning.project` * [#1324](https://github.com/open-contracting/standard/pull/1324) `tender.datePublished` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `tender.deliveryLocations` and `tender.deliveryAddresses` * [#1296](https://github.com/open-contracting/standard/pull/1296) [#1674](https://github.com/open-contracting/standard/pull/1674) `tender.exclusionGrounds` * [#1669](https://github.com/open-contracting/standard/pull/1669) `tender.expressionOfInterestDeadline` * [#1490](https://github.com/open-contracting/standard/pull/1490) `tender.identifiers` @@ -221,13 +223,13 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1372](https://github.com/open-contracting/standard/pull/1372) `Address.country` * [#1380](https://github.com/open-contracting/standard/pull/1380) [#1440](https://github.com/open-contracting/standard/pull/1440) `Document.languages` * [#1439](https://github.com/open-contracting/standard/pull/1439) `Document.relatedItems` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `Item.deliveryLocations` and `Item.deliveryAddresses` * [#1455](https://github.com/open-contracting/standard/pull/1455) `Milestone.dueAfterDate` * [#1434](https://github.com/open-contracting/standard/pull/1434) `Milestone.value` * [#1490](https://github.com/open-contracting/standard/pull/1490) `SimpleIdentifier` * [#1519](https://github.com/open-contracting/standard/pull/1519) `Value.amountNet` and `Value.amountGross` * [#1490](https://github.com/open-contracting/standard/pull/1490) `contracts.identifiers` * [#1679](https://github.com/open-contracting/standard/pull/1679) `Organization.details.classifications` - * [#1684](https://github.com/open-contracting/standard/pull/1684) `planning.project`, `deliveryLocations` and `deliveryAddresses` to `Tender` and `Item` * Deprecate some fields: * [#1200](https://github.com/open-contracting/standard/pull/1200) `tender.submissionMethod`, because all codes from the `submissionMethod` codelist are deprecated. diff --git a/docs/schema/reference.md b/docs/schema/reference.md index 15bac851f..df3da00e2 100644 --- a/docs/schema/reference.md +++ b/docs/schema/reference.md @@ -122,7 +122,7 @@ Each organization has a `details` object. Through extensions, this can be used t ### Planning -The planning section is used in a planning process. This includes information about, for example, needs identification, budget planning, the parent project and market research. Background documents such as feasibility studies and project plans can also be included in this section. +The planning section is used in a planning process. This includes information about, for example, needs identification, budget planning and market research. Background documents such as feasibility studies and project plans can also be included in this section. ````{admonition} Example :class: hint @@ -150,8 +150,6 @@ The planning section is used in a planning process. This includes information ab Apart from documents, the majority of planning information is held within the budget block. This is designed to allow both machine-readable linkable data about budgets, cross-referencing to data held in other standards such as the [Fiscal Data Package](https://specs.frictionlessdata.io/fiscal-data-package/) or [International Aid Transparency Initiative Standard](https://iatistandard.org/en/), and human readable description of the related budgets and projects, supporting users to understand the relationship of the contracting (or planning) process to existing projects and budgets even where linked data is not available. -The `planning.budget.projectID` field should not be used to disclose the identifier of an infrastructure or PPP project. Rather, this field is used to disclose the identifier of a programme of work as it appears in a budget, like a national or state budget. Since such programmes of work can include many infrastructure projects, it is necessary to disclose their identifiers separately. Use the the `planning.project.id` field to disclose the identifier of an infrastructure or PPP project. - ````{admonition} Example :class: hint @@ -172,10 +170,6 @@ The `planning.budget.projectID` field should not be used to disclose the identif #### Project -The `project` object includes details of the infrastructure or public-private partnership (PPP) project to which a planning process is related. This object is designed to allow both machine-readable linkable data about the parent project, cross-referencing to data held in other standards such as the [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/projects/#what-is-a-project) and the [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/) profile, and human readable description of the parent project, supporting users to understand the relationship of the contracting (or planning) process to their parent project even where linked data is not available. - -Where there is a separate OC4IDS dataset that describes the project the identifier from this dataset should be referenced in `project.id`. Where there is not a separate project dataset an appropriate project identifier will need to be generated. For more information on project identifiers see [OC4IDS Project Identifiers](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/). - ````{admonition} Example :class: hint @@ -697,8 +691,6 @@ As well as providing this machine-readable link between processes, publishers ma ### Location -The `Location` subschema can be used to provide the geographic coordinates or standardized location identifiers of the proposed or executed contract delivery in the `Project`, `tender` and `Item` objects. - ````{admonition} Example :class: hint diff --git a/schema/codelists/geometryType.csv b/schema/codelists/geometryType.csv index f053feb6a..204a8ee85 100644 --- a/schema/codelists/geometryType.csv +++ b/schema/codelists/geometryType.csv @@ -1,7 +1,7 @@ Code,Title,Description,Source -Point,Point,"For type 'Point', the 'coordinates' member is a single position.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiPoint,MultiPoint,"For type 'MultiPoint', the 'coordinates' member is an array of positions.",https://tools.ietf.org/html/rfc7946#section-3.1 -LineString,LineString,"For type 'LineString', the 'coordinates' member is an array of two or more positions.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiLineString,MultiLineString,"For type 'MultiLineString', the 'coordinates' member is an array of LineString coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 -Polygon,Polygon,"For type 'Polygon', the 'coordinates' member must be an array of linear ring coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiPolygon,MultiPolygon,"For type 'MultiPolygon', the 'coordinates' member is an array of Polygon coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +Point,Point,"For type 'Point', the `coordinates` field is a single position.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPoint,MultiPoint,"For type 'MultiPoint', the `coordinates` field is an array of positions.",https://tools.ietf.org/html/rfc7946#section-3.1 +LineString,LineString,"For type 'LineString', the `coordinates` field is an array of two or more positions.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiLineString,MultiLineString,"For type 'MultiLineString', the `coordinates` field is an array of LineString coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +Polygon,Polygon,"For type 'Polygon', the `coordinates` field is an array of linear ring coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPolygon,MultiPolygon,"For type 'MultiPolygon', the `coordinates` field is an array of Polygon coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 diff --git a/schema/codelists/locationGazetteer.csv b/schema/codelists/locationGazetteer.csv new file mode 100644 index 000000000..fbcc3869c --- /dev/null +++ b/schema/codelists/locationGazetteer.csv @@ -0,0 +1,7 @@ +Category,Code,Title,Description,Source,URI Pattern +Sub-National,NUTS,EU Nomenclature of Territorial Units for Statistics,The Nomenclature of Territorial Units for Statistics (NUTS) was established by Eurostat in order to provide a single uniform breakdown of territorial units for the production of regional statistics for the European Union.,https://ec.europa.eu/eurostat/web/nuts/linked-open-data,http://data.europa.eu/nuts/code/ +National,ISO2,ISO 3166-1 alpha-2,ISO 3166-1 alpha-2 assigns two-letter codes to countries.,https://www.iso.org/iso-3166-country-codes.html, +Universal,GEONAMES,GeoNames,GeoNames assigns numerical identifiers to geographical names.,https://www.geonames.org/,https://www.geonames.org/ +Universal,OSMN,OpenStreetMap node,An OpenStreetMap node defines a point in space.,,https://www.openstreetmap.org/node/ +Universal,OSMW,OpenStreetMap way,"An OpenStreetMap way defines linear features and area boundaries, as an ordered list of nodes.",https://wiki.openstreetmap.org/wiki/Way,https://www.openstreetmap.org/way/ +Universal,OSMR,OpenStreetMap relation,"An OpenStreetMap relation combines nodes, ways, and/or other relations.",https://wiki.openstreetmap.org/wiki/Relation,https://www.openstreetmap.org/relation/ diff --git a/schema/codelists/locationGazetteers.csv b/schema/codelists/locationGazetteers.csv deleted file mode 100644 index fa5e62d4b..000000000 --- a/schema/codelists/locationGazetteers.csv +++ /dev/null @@ -1,7 +0,0 @@ -Category,Code,Title,Description,Source,URI Pattern -Sub-National,NUTS,EU Nomenclature of Territorial Units for Statistics,The Nomenclature of Territorial Units for Statistics (NUTS) was established by Eurostat in order to provide a single uniform breakdown of territorial units for the production of regional statistics for the European Union.,https://ec.europa.eu/eurostat/web/nuts/linked-open-data,http://data.europa.eu/nuts/code/ -National,ISO2,ISO Country Codes (3166-1 alpha-2),ISO 2-Digit Country Codes,https://www.iso.org/iso-3166-country-codes.html, -Universal,GEONAMES,GeoNames,"GeoNames provides numerical identifiers for many points of interest around the world, including administrative divisions, populated centres and other locations, embedded within a structured tree of geographic relations.",https://www.geonames.org/,https://www.geonames.org/ -Universal,OSMN,OpenStreetMap Node,"OpenStreetMap Nodes consist of a single point in space defined by a latitude, longitude and node ID. Nodes might have tags to indicate the particular geographic feature they represent.",,https://www.openstreetmap.org/node/ -Universal,OSMR,OpenStreetMap Relation,"Relations are used to model logical (and usually local) or geographic relationships between objects. In practice, boundaries of geographic areas are available as Relations in OpenStreetMap.",https://wiki.openstreetmap.org/wiki/Relation,https://www.openstreetmap.org/relation/ -Universal,OSMW,OpenStreetMap Way,An OpenStreetMap Way is an ordered list of OpenStreetMap nodes. It can be used to describe fragments of roads or local boundaries and bounding boxes.,https://wiki.openstreetmap.org/wiki/Way,https://www.openstreetmap.org/way/ diff --git a/schema/release-schema.json b/schema/release-schema.json index 702c8bbe1..b3b2dd6e0 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -164,7 +164,7 @@ "$ref": "#/definitions/Budget" }, "project": { - "title": "Project information", + "title": "Project", "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", "$ref": "#/definitions/Project" }, @@ -348,7 +348,7 @@ "$ref": "#/definitions/Value" }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity will take place.", "type": "array", "items": { @@ -358,8 +358,8 @@ "uniqueItems": true }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity will be delivered.", "type": "array", "items": { "$ref": "#/definitions/Address" @@ -1292,7 +1292,7 @@ }, "projectID": { "title": "Project identifier", - "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", + "description": "The identifier of the programme of work in a budget, of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", "type": [ "string", "integer", @@ -1632,7 +1632,7 @@ "$ref": "#/definitions/Unit" }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -1643,8 +1643,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "$ref": "#/definitions/Address" @@ -1833,7 +1833,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -1841,12 +1841,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -1865,7 +1865,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -1881,22 +1881,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -1909,7 +1909,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "A URI for the location.", "type": [ "string", "null" @@ -2886,12 +2886,12 @@ }, "Project": { "title": "Project information", - "description": "Information about the infrastructure or public-private partnership project to which a planning process is related.", + "description": "Information about the infrastructure or public-private partnership (PPP) project to which a planning process is related.", "type": "object", "properties": { "id": { "title": "Identifier", - "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "description": "An externally provided identifier for the project. This can be a URI, an [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/) project identifier, [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/framework/#i-basic-project-information) project identifier, an identifier from a projects register, or an identifier based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" From 4780b123c8dc5de75eda89ad6831d9b1c5f454d1 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:42:33 -0400 Subject: [PATCH 35/51] geometryType.csv: Reduce repetition --- schema/codelists/geometryType.csv | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/schema/codelists/geometryType.csv b/schema/codelists/geometryType.csv index 204a8ee85..6706bafdd 100644 --- a/schema/codelists/geometryType.csv +++ b/schema/codelists/geometryType.csv @@ -1,7 +1,7 @@ Code,Title,Description,Source -Point,Point,"For type 'Point', the `coordinates` field is a single position.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiPoint,MultiPoint,"For type 'MultiPoint', the `coordinates` field is an array of positions.",https://tools.ietf.org/html/rfc7946#section-3.1 -LineString,LineString,"For type 'LineString', the `coordinates` field is an array of two or more positions.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiLineString,MultiLineString,"For type 'MultiLineString', the `coordinates` field is an array of LineString coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 -Polygon,Polygon,"For type 'Polygon', the `coordinates` field is an array of linear ring coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 -MultiPolygon,MultiPolygon,"For type 'MultiPolygon', the `coordinates` field is an array of Polygon coordinate arrays.",https://tools.ietf.org/html/rfc7946#section-3.1 +Point,Point,The `coordinates` field is a single position.,https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPoint,MultiPoint,The `coordinates` field is an array of positions.,https://tools.ietf.org/html/rfc7946#section-3.1 +LineString,LineString,The `coordinates` field is an array of two or more positions.,https://tools.ietf.org/html/rfc7946#section-3.1 +MultiLineString,MultiLineString,The `coordinates` field is an array of LineString coordinate arrays.,https://tools.ietf.org/html/rfc7946#section-3.1 +Polygon,Polygon,The `coordinates` field is an array of linear ring coordinate arrays.,https://tools.ietf.org/html/rfc7946#section-3.1 +MultiPolygon,MultiPolygon,The `coordinates` field is an array of Polygon coordinate arrays.,https://tools.ietf.org/html/rfc7946#section-3.1 From fc4d4d8332a09f3f78a8b4c817cf6a517ef7c7a3 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:50:59 -0400 Subject: [PATCH 36/51] release-schema: Restore some clarity to budget.projectID --- schema/release-schema.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/schema/release-schema.json b/schema/release-schema.json index b3b2dd6e0..2627c5b13 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -165,7 +165,7 @@ }, "project": { "title": "Project", - "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", + "description": "Information about the infrastructure or public-private partnership (PPP) project to which the planning process is related.", "$ref": "#/definitions/Project" }, "finalStatus": { @@ -1292,7 +1292,7 @@ }, "projectID": { "title": "Project identifier", - "description": "The identifier of the programme of work in a budget, of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", + "description": "The identifier of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", "type": [ "string", "integer", @@ -1909,7 +1909,7 @@ }, "uri": { "title": "URI", - "description": "A URI for the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -2885,7 +2885,7 @@ "minProperties": 1 }, "Project": { - "title": "Project information", + "title": "Project", "description": "Information about the infrastructure or public-private partnership (PPP) project to which a planning process is related.", "type": "object", "properties": { @@ -2923,7 +2923,7 @@ }, "uri": { "title": "URI", - "description": "The URI of a resource with additional information about the project.", + "description": "The URI of a resource about the project.", "type": [ "string", "null" @@ -2948,7 +2948,7 @@ }, "locations": { "title": "Locations", - "description": "Information about the locations where the project is taking place.", + "description": "Information about the locations where the project takes place.", "type": "array", "items": { "$ref": "#/definitions/Location" From c2d16d3a5fd5b38bdd979fd9321dcef53a5fab22 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:51:33 -0400 Subject: [PATCH 37/51] build: Run manage.py pre-commit --- schema/dereferenced-release-schema.json | 350 +++++++++--------- .../versioned-release-validation-schema.json | 4 +- 2 files changed, 177 insertions(+), 177 deletions(-) diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index f78ce0cde..1371d9e2a 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -1569,7 +1569,7 @@ }, "projectID": { "title": "Project identifier", - "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", + "description": "The identifier of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", "type": [ "string", "integer", @@ -1601,13 +1601,13 @@ } }, "project": { - "title": "Project information", - "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", + "title": "Project", + "description": "Information about the infrastructure or public-private partnership (PPP) project to which the planning process is related.", "type": "object", "properties": { "id": { "title": "Identifier", - "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "description": "An externally provided identifier for the project. This can be a URI, an [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/) project identifier, [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/framework/#i-basic-project-information) project identifier, an identifier from a projects register, or an identifier based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" @@ -1980,7 +1980,7 @@ }, "uri": { "title": "URI", - "description": "The URI of a resource with additional information about the project.", + "description": "The URI of a resource about the project.", "type": [ "string", "null" @@ -2083,7 +2083,7 @@ }, "locations": { "title": "Locations", - "description": "Information about the locations where the project is taking place.", + "description": "Information about the locations where the project takes place.", "type": "array", "items": { "title": "Location", @@ -2092,7 +2092,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -2100,12 +2100,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -2124,7 +2124,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -2140,22 +2140,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -2168,7 +2168,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -4073,7 +4073,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -4083,7 +4083,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -4091,12 +4091,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -4115,7 +4115,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -4131,22 +4131,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -4159,7 +4159,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -4173,8 +4173,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -5545,7 +5545,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity will take place.", "type": "array", "items": { @@ -5555,7 +5555,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -5563,12 +5563,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -5587,7 +5587,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -5603,22 +5603,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -5631,7 +5631,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -5644,8 +5644,8 @@ "uniqueItems": true }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity will be delivered.", "type": "array", "items": { "title": "Address", @@ -9968,7 +9968,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -9978,7 +9978,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -9986,12 +9986,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -10010,7 +10010,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -10026,22 +10026,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -10054,7 +10054,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -10068,8 +10068,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -12458,7 +12458,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -12468,7 +12468,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -12476,12 +12476,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -12500,7 +12500,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -12516,22 +12516,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -12544,7 +12544,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -12558,8 +12558,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -16983,7 +16983,7 @@ }, "projectID": { "title": "Project identifier", - "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", + "description": "The identifier of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", "type": [ "string", "integer", @@ -17015,13 +17015,13 @@ } }, "project": { - "title": "Project information", - "description": "Information about the infrastructure or public-private partnership project to which the planning process is related.", + "title": "Project", + "description": "Information about the infrastructure or public-private partnership (PPP) project to which the planning process is related.", "type": "object", "properties": { "id": { "title": "Identifier", - "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "description": "An externally provided identifier for the project. This can be a URI, an [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/) project identifier, [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/framework/#i-basic-project-information) project identifier, an identifier from a projects register, or an identifier based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" @@ -17394,7 +17394,7 @@ }, "uri": { "title": "URI", - "description": "The URI of a resource with additional information about the project.", + "description": "The URI of a resource about the project.", "type": [ "string", "null" @@ -17497,7 +17497,7 @@ }, "locations": { "title": "Locations", - "description": "Information about the locations where the project is taking place.", + "description": "Information about the locations where the project takes place.", "type": "array", "items": { "title": "Location", @@ -17506,7 +17506,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -17514,12 +17514,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -17538,7 +17538,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -17554,22 +17554,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -17582,7 +17582,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -19487,7 +19487,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -19497,7 +19497,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -19505,12 +19505,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -19529,7 +19529,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -19545,22 +19545,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -19573,7 +19573,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -19587,8 +19587,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -20959,7 +20959,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity will take place.", "type": "array", "items": { @@ -20969,7 +20969,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -20977,12 +20977,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -21001,7 +21001,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -21017,22 +21017,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -21045,7 +21045,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -21058,8 +21058,8 @@ "uniqueItems": true }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity will be delivered.", "type": "array", "items": { "title": "Address", @@ -25378,7 +25378,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -25388,7 +25388,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -25396,12 +25396,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -25420,7 +25420,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -25436,22 +25436,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -25464,7 +25464,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -25478,8 +25478,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -27862,7 +27862,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -27872,7 +27872,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -27880,12 +27880,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -27904,7 +27904,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -27920,22 +27920,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -27948,7 +27948,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -27962,8 +27962,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -35523,7 +35523,7 @@ }, "projectID": { "title": "Project identifier", - "description": "The identifier of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the identifier from the relevant registry of projects. Although an integer is allowed, it is recommended to use a string.", + "description": "The identifier of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded. Although an integer is allowed, it is recommended to use a string.", "type": [ "string", "integer", @@ -38974,7 +38974,7 @@ } }, "deliveryLocations": { - "title": "Delivery Locations", + "title": "Delivery locations", "description": "The locations where activity related to the opportunity, contract or license will be delivered.", "type": "array", "items": { @@ -38984,7 +38984,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -38992,12 +38992,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -39016,7 +39016,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -39032,22 +39032,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -39060,7 +39060,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -39074,8 +39074,8 @@ "minItems": 1 }, "deliveryAddresses": { - "title": "Delivery Addresses", - "description": "The addresses to which, or where, goods or services related to the opportunity, contract or license will be delivered.", + "title": "Delivery addresses", + "description": "The addresses to which goods or services related to the opportunity, contract or license will be delivered.", "type": "array", "items": { "title": "Address", @@ -39583,7 +39583,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -39591,12 +39591,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -39615,7 +39615,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -39631,22 +39631,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -39659,7 +39659,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" @@ -40976,13 +40976,13 @@ "minProperties": 1 }, "Project": { - "title": "Project information", - "description": "Information about the infrastructure or public-private partnership project to which a planning process is related.", + "title": "Project", + "description": "Information about the infrastructure or public-private partnership (PPP) project to which a planning process is related.", "type": "object", "properties": { "id": { "title": "Identifier", - "description": "An externally provided identifier for the project. This can be a URI, an identifier from a projects register or based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", + "description": "An externally provided identifier for the project. This can be a URI, an [Open Contracting for Infrastructure Data Standards Toolkit (OC4IDS)](https://standard.open-contracting.org/infrastructure/latest/en/guidance/identifiers/) project identifier, [OCDS for PPPs](https://standard.open-contracting.org/profiles/ppp/latest/en/framework/#i-basic-project-information) project identifier, an identifier from a projects register, or an identifier based on the canonical version of the project's name. Project identifiers should be unique within the scope of the publication.", "type": [ "string", "null" @@ -41355,7 +41355,7 @@ }, "uri": { "title": "URI", - "description": "The URI of a resource with additional information about the project.", + "description": "The URI of a resource about the project.", "type": [ "string", "null" @@ -41458,7 +41458,7 @@ }, "locations": { "title": "Locations", - "description": "Information about the locations where the project is taking place.", + "description": "Information about the locations where the project takes place.", "type": "array", "items": { "title": "Location", @@ -41467,7 +41467,7 @@ "properties": { "description": { "title": "Description", - "description": "A name or description of the location. This might include the name(s) of the location(s), or might provide a human-readable description of the location to be covered.", + "description": "The name or description of the location.", "type": [ "string", "null" @@ -41475,12 +41475,12 @@ }, "geometry": { "title": "Geometry", - "description": "We follow the [GeoJSON standard](https://www.rfc-editor.org/rfc/rfc7946) to express basic location information, using longitude, latitude, and optional elevation values in the [WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System) (EPSG:4326) projection. A point location can be identified by geocoding an address. For concession licenses, or other scenarios covering a polygon location that is not contained in a known gazetteer, polygon and multi-polygon can be used.", + "description": "The spatial extent of the location, as a [GeoJSON Geometry object](https://www.rfc-editor.org/rfc/rfc7946).", "type": "object", "properties": { "type": { "title": "Type", - "description": "The type of [GeoJSON Geometry Objects](https://www.rfc-editor.org/rfc/rfc7946#section-3.1) being provided. To provide longitude, latitude, and optional elevation, use 'Point', and enter an array of [longitude, latitude] or [longitude, latitude, elevation] as the value of the coordinates field: e.g. [-122.085, 37.42].", + "description": "The type of the GeoJSON Geometry object, from the closed [geometryType](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#geometryType) codelist.", "type": [ "string", "null" @@ -41499,7 +41499,7 @@ }, "coordinates": { "title": "Coordinates", - "description": "The relevant array of points, e.g. [longitude, latitude] or [longitude, latitude, elevation], or a nested array of points, for the GeoJSON geometry being described. The longitude and latitude must be expressed in decimal degrees in the WGS84 (EPSG:4326) projection.", + "description": "The coordinates of the GeoJSON Geometry object. For example, [longitude, latitude] or [longitude, latitude, elevation] for a Point geometry, using the World Geodetic System 1984 (WGS84, EPSG:4326) with longitude and latitude units of decimal degrees.", "type": [ "array", "null" @@ -41515,22 +41515,22 @@ }, "gazetteer": { "title": "Gazetteer", - "description": "Identifiers from a gazetteer (a geographical index or directory) for the location.", + "description": "Identifiers for the location from a gazetteer (a geographical index or directory).", "type": "object", "properties": { "scheme": { - "title": "Gazetteer scheme", - "description": "The identifier of the gazetteer. The `locationGazetteers.csv` codelist provides details of services, where available, that can resolve a gazetteer entry to provide location names.", + "title": "Scheme", + "description": "The identifier of the gazetteer, from the open [locationGazetter](https://standard.open-contracting.org/{{version}}/{{lang}}/schema/codelists/#locationGazetter) codelist.", "type": [ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { "title": "Identifiers", - "description": "An array of one or more codes drawn from the gazetteer indicated by the `scheme` field.", + "description": "One or more location codes taken from the scheme.", "type": [ "array", "null" @@ -41543,7 +41543,7 @@ }, "uri": { "title": "URI", - "description": "A URI to a further description of the location. This might be a human-readable document with information on the location, or a machine-readable description of the location.", + "description": "The URI of a resource about the location.", "type": [ "string", "null" diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json index 486227fd4..eb952f77b 100644 --- a/schema/versioned-release-validation-schema.json +++ b/schema/versioned-release-validation-schema.json @@ -2257,7 +2257,7 @@ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "releaseTag": { @@ -3866,7 +3866,7 @@ "string", "null" ], - "codelist": "locationGazetteers.csv", + "codelist": "locationGazetteer.csv", "openCodelist": true }, "identifiers": { From 344e1cde3064b228edc172de053ac434b0c78997 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 27 Jun 2024 23:57:22 -0400 Subject: [PATCH 38/51] release-schema: Align budget.project with projectID. If we're saying "as it appears in a budget", then we don't need to furthermore refer to a registry. --- docs/history/changelog.md | 3 ++- schema/release-schema.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index 2cfb2aa75..a1b430a78 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -185,9 +185,10 @@ Per the [normative and non-normative content and changes policy](../governance/n * Clarify core concepts: * [#1216](https://github.com/open-contracting/standard/pull/1216) Define contracting process and planning process in the schema description. Update definition of release, record and ocid. Update references to contracting process so that it takes take the planning process into account. - * [#1513](https://github.com/open-contracting/standard/pull/1513) Update fields' use of "contracting process" and "contracting (or planning) process" to reflect the new definition. Align `budget.project` and `budget.projectID`. + * [#1513](https://github.com/open-contracting/standard/pull/1513) Update fields' use of "contracting process" and "contracting (or planning) process" to reflect the new definition. * [#1443](https://github.com/open-contracting/standard/pull/1443) `date` * [#1182](https://github.com/open-contracting/standard/pull/1182) `buyer` + - [#1684](https://github.com/open-contracting/standard/pull/1684) `budget.project` and `budget.projectID` * [#1163](https://github.com/open-contracting/standard/pull/1163) `tender.procuringEntity` * [#1395](https://github.com/open-contracting/standard/pull/1417) `tender.procurementMethod` * [#1442](https://github.com/open-contracting/standard/pull/1442) `tender.submissionMethodDetails` diff --git a/schema/release-schema.json b/schema/release-schema.json index 2627c5b13..6b98eb88a 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -1284,7 +1284,7 @@ }, "project": { "title": "Project title", - "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", + "description": "The name of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded.", "type": [ "string", "null" From a246115cae98b217dcf1ee290c324222897b04ae Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 28 Jun 2024 00:01:14 -0400 Subject: [PATCH 39/51] build: Run manage.py pre-commit --- schema/dereferenced-release-schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 1371d9e2a..8305bcbc1 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -1561,7 +1561,7 @@ }, "project": { "title": "Project title", - "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", + "description": "The name of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded.", "type": [ "string", "null" @@ -16975,7 +16975,7 @@ }, "project": { "title": "Project title", - "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", + "description": "The name of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded.", "type": [ "string", "null" @@ -35515,7 +35515,7 @@ }, "project": { "title": "Project title", - "description": "The name of the project of which the future contract(s) will be part or through which it/they will be funded. Some organizations maintain a registry of projects, and the data should use the name by which the project is known in that registry.", + "description": "The name of the programme of work as it appears in a budget (for example, a national or state budget), of which the future contract(s) will be part or through which it/they will be funded.", "type": [ "string", "null" From a74d21139821cc9d583605b8d52d2d9a2338da34 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 28 Jun 2024 00:10:19 -0400 Subject: [PATCH 40/51] guidance/map/linked_standards: Clarify direction of OC4IDS link --- docs/guidance/map/linked_standards.md | 2 +- docs/history/changelog.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guidance/map/linked_standards.md b/docs/guidance/map/linked_standards.md index 0d64d6d19..c946cdec1 100644 --- a/docs/guidance/map/linked_standards.md +++ b/docs/guidance/map/linked_standards.md @@ -8,7 +8,7 @@ The [Open Contracting for Infrastructure Data Standards](https://standard.open-c A joint effort by the [Infrastructure Transparency Initiative](https://infrastructuretransparency.org) (CoST) and the Open Contracting Partnership, it builds on best practice in open data and openness of public infrastructure procurement globally. -OCDS and OC4IDS datasets ought to be linked using the `planning.project` object, by referencing the OC4IDS project identifier in the `planning.project.id` field. +OC4IDS datasets ought to be linked from OCDS datasets using the `planning.project` object, by referencing the OC4IDS project identifier in the `planning.project.id` field. ## Open Fiscal Data Package diff --git a/docs/history/changelog.md b/docs/history/changelog.md index a1b430a78..aeac48a1f 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -188,7 +188,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1513](https://github.com/open-contracting/standard/pull/1513) Update fields' use of "contracting process" and "contracting (or planning) process" to reflect the new definition. * [#1443](https://github.com/open-contracting/standard/pull/1443) `date` * [#1182](https://github.com/open-contracting/standard/pull/1182) `buyer` - - [#1684](https://github.com/open-contracting/standard/pull/1684) `budget.project` and `budget.projectID` + * [#1684](https://github.com/open-contracting/standard/pull/1684) `budget.project` and `budget.projectID` * [#1163](https://github.com/open-contracting/standard/pull/1163) `tender.procuringEntity` * [#1395](https://github.com/open-contracting/standard/pull/1417) `tender.procurementMethod` * [#1442](https://github.com/open-contracting/standard/pull/1442) `tender.submissionMethodDetails` From d1dc0b70c966c5e22587b2b44cc0d3d32a61eacf Mon Sep 17 00:00:00 2001 From: Jen Harris <95221058+odscjen@users.noreply.github.com> Date: Fri, 28 Jun 2024 09:39:39 +0100 Subject: [PATCH 41/51] Update schema/release-schema.json --- schema/release-schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/release-schema.json b/schema/release-schema.json index 6b98eb88a..d16a6bba1 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -2900,7 +2900,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" From 4b8c49fae93d71a17c1c1fb1b90c09165ad09a69 Mon Sep 17 00:00:00 2001 From: odscjen Date: Fri, 28 Jun 2024 09:43:43 +0100 Subject: [PATCH 42/51] build: run manage.py precommit --- schema/dereferenced-release-schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index 8305bcbc1..d5b98a4e6 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -1616,7 +1616,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" @@ -17030,7 +17030,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" @@ -40991,7 +40991,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" From e7bd89d54715dd61f2463e5226196b360aea92e8 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 28 Jun 2024 16:00:14 -0400 Subject: [PATCH 43/51] release-schema: Avoid repeating the title in the description for immediateContainer and unit --- schema/dereferenced-release-schema.json | 22 +++++++++++----------- schema/release-schema.json | 6 +++--- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json index fb181d345..f71c5592f 100644 --- a/schema/dereferenced-release-schema.json +++ b/schema/dereferenced-release-schema.json @@ -1616,7 +1616,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" @@ -4074,7 +4074,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -10033,7 +10033,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -12587,7 +12587,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -17222,7 +17222,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" @@ -19680,7 +19680,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -25635,7 +25635,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -28183,7 +28183,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -39359,7 +39359,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -41324,7 +41324,7 @@ }, "ImmediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which an item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -41579,7 +41579,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" diff --git a/schema/release-schema.json b/schema/release-schema.json index 4f7bdaf8d..46f3ea6d8 100644 --- a/schema/release-schema.json +++ b/schema/release-schema.json @@ -1633,7 +1633,7 @@ }, "immediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.", "$ref": "#/definitions/ImmediateContainer" }, "deliveryLocations": { @@ -2790,7 +2790,7 @@ }, "ImmediateContainer": { "title": "Immediate container", - "description": "The immediate container for the item. Also known as: presentation, presentation form, package.", + "description": "The innermost packaging with which an item is in direct contact. Also known as: presentation, presentation form, package.", "type": "object", "properties": { "name": { @@ -2979,7 +2979,7 @@ }, "title": { "title": "Title", - "description": "The name of the project. If a project's register is available, this should be the same as the project's name in that register.", + "description": "The name of the project. If a projects register is available, this should be the same as the project's name in that register.", "type": [ "string", "null" From 4472d2cafe8cdfad2b6dbd3c426dd27d1b1dbc2e Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 21 Feb 2024 10:13:35 -0500 Subject: [PATCH 44/51] build/hosting: Clarify subject --- docs/guidance/build/hosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guidance/build/hosting.md b/docs/guidance/build/hosting.md index 8849d9512..5b6175c2e 100644 --- a/docs/guidance/build/hosting.md +++ b/docs/guidance/build/hosting.md @@ -138,7 +138,7 @@ In either case: * Use `limit=NUMBER`, to limit the number of results returned on each page. * Include the total number of results across all pages. -In addition to performance reasons, the seek method is preferred to the offset method when results are ordered in reverse chronology, because: +In addition to performance reasons, the seek method is preferred to the offset method when results are ordered in reverse chronology, because, with the offset method: * A given page won't return the same results over time. `page=1` will return different results today, next week, and next year. * Users can receive duplicate results while paginating. For example, if a new release is published to page 1 while users are paginating, then the result at the bottom of each page will be moved to the top of the following page. From f12021a66a48a1a4b75aa6c845a82973fc8c50c8 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 3 Jul 2024 18:54:11 -0400 Subject: [PATCH 45/51] changelog: Remove comma --- docs/history/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index a943cf6fa..e2b2f3fbc 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -26,7 +26,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * Pre-qualification and pre-selection [#999](https://github.com/open-contracting/standard/pull/999) [#1345](https://github.com/open-contracting/standard/pull/1345) * Unsuccessful processes [#1007](https://github.com/open-contracting/standard/pull/1007) * Milestones [#1048](https://github.com/open-contracting/standard/pull/1048) - * Framework agreements [#1123](https://github.com/open-contracting/standard/pull/1123) [#1269](https://github.com/open-contracting/standard/pull/1269) [#1332](https://github.com/open-contracting/standard/pull/1332) [#1461](https://github.com/open-contracting/standard/pull/1461) [#1549](https://github.com/open-contracting/standard/pull/1549) [#1671](https://github.com/open-contracting/standard/pull/1671), [#1701](https://github.com/open-contracting/standard/pull/1701) + * Framework agreements [#1123](https://github.com/open-contracting/standard/pull/1123) [#1269](https://github.com/open-contracting/standard/pull/1269) [#1332](https://github.com/open-contracting/standard/pull/1332) [#1461](https://github.com/open-contracting/standard/pull/1461) [#1549](https://github.com/open-contracting/standard/pull/1549) [#1671](https://github.com/open-contracting/standard/pull/1671) [#1701](https://github.com/open-contracting/standard/pull/1701) * Electronic catalogs [#1223](https://github.com/open-contracting/standard/pull/1223) * Beneficial ownership information [#1305](https://github.com/open-contracting/standard/pull/1305) * [#1414](https://github.com/open-contracting/standard/pull/1414) Rephrase planning stage to planning process in worked examples. From f9a55306be240c32222dc2e0caee957c9fc6bcfd Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Tue, 6 Jun 2023 22:31:48 -0400 Subject: [PATCH 46/51] chore(typo): Change "contracting authorities" to "buyers", closes #1601 --- docs/guidance/map/framework_agreements.md | 2 +- docs/guidance/publish/quality.md | 4 +- .../guidance/map/framework_agreements.po | 2 +- .../guidance/map/related_processes.po | 1157 ----------------- .../LC_MESSAGES/guidance/publish/quality.po | 6 +- .../guidance/map/framework_agreements.po | 2 +- .../guidance/map/related_processes.po | 868 ------------- .../LC_MESSAGES/guidance/publish/quality.po | 6 +- 8 files changed, 11 insertions(+), 2036 deletions(-) delete mode 100644 docs/locale/es/LC_MESSAGES/guidance/map/related_processes.po delete mode 100644 docs/locale/fr/LC_MESSAGES/guidance/map/related_processes.po diff --git a/docs/guidance/map/framework_agreements.md b/docs/guidance/map/framework_agreements.md index 9ef31c646..707334f4d 100644 --- a/docs/guidance/map/framework_agreements.md +++ b/docs/guidance/map/framework_agreements.md @@ -225,7 +225,7 @@ The National Procurement Agency in Chile (Chile Compra) wants to establish a fra #### Invitation to participate in the first stage of a framework agreement procedure -Chile Compra publishes a tender notice inviting suppliers to participate in the framework agreement. The tender notice specifies that multiple suppliers can join the framework agreement. The framework agreement is open, since all the framework agreements in Chile involve the setting up of a dynamic purchasing system. The framework agreement is for multiple buyers, since the tender notice specifies two contracting authorities. The tender notice describes two lots. +Chile Compra publishes a tender notice inviting suppliers to participate in the framework agreement. The tender notice specifies that multiple suppliers can join the framework agreement. The framework agreement is open, since all the framework agreements in Chile involve the setting up of a dynamic purchasing system. The framework agreement is for multiple buyers, since the tender notice specifies two buyers. The tender notice describes two lots. The notice is modelled as an OCDS release with a `tag` of 'tender' and the following properties: diff --git a/docs/guidance/publish/quality.md b/docs/guidance/publish/quality.md index 53a70111a..382a457a1 100644 --- a/docs/guidance/publish/quality.md +++ b/docs/guidance/publish/quality.md @@ -36,7 +36,7 @@ All OCDS publications ought to meet the following criteria: 1. **Reviewable**: The [OCDS Data Review Tool](https://review.standard.open-contracting.org/) is able to report results on the data. 1. **Appropriate**: Concepts are published in semantic accordance with the rules of the OCDS (or registered extensions) rather than using a non-OCDS field or code. 1. **Active**: For each publisher, there is an OCDS release with a top-level `date` field value within the last 12 months. -1. **Parity**: For each publisher, for the _time period_ and _contracting authorities_ covered by the data, there isn't another dataset by the same publisher that covers more than 25% more contracting (or planning) processes. +1. **Parity**: For each publisher, for the _time period_ and _buyers_ covered by the data, there isn't another dataset by the same publisher that covers more than 25% more contracting (or planning) processes. The Data Support Team is happy to review draft and newly published OCDS data and can work with publishers with advice to meet the above criteria. A publication that does not meet this minimum threshold will not be listed as a publisher by OCP as part of [OCP's regular reporting](https://www.open-contracting.org/why-open-contracting/learning/). @@ -51,7 +51,7 @@ Improvement on the below indicators demonstrate that the published information i 1. Publish subsequent releases per OCID to show how the contracting (or planning) process is progressing over time 1. Increase the publication of historical information (based on a minimal set of date fields that appear across all sources, e.g. `tender.tenderPeriod`, `awards.date`, and `contracts.dateSigned`) 1. Increase the average coverage of fields per compiled release, for example either new fields not previously published in any release, or an increase in the use of a field across releases (e.g. very little data was published about direct awards and now more is being published about direct awards) -1. Increase the number of contracting authorities covered in the publication +1. Increase the number of buyers covered in the publication 1. Increase the number of concepts covered relative to non-OCDS data ### Correctness diff --git a/docs/locale/es/LC_MESSAGES/guidance/map/framework_agreements.po b/docs/locale/es/LC_MESSAGES/guidance/map/framework_agreements.po index ef7d4df87..333865115 100644 --- a/docs/locale/es/LC_MESSAGES/guidance/map/framework_agreements.po +++ b/docs/locale/es/LC_MESSAGES/guidance/map/framework_agreements.po @@ -943,7 +943,7 @@ msgid "" "The framework agreement is open, since all the framework agreements in Chile" " involve the setting up of a dynamic purchasing system. The framework " "agreement is for multiple buyers, since the tender notice specifies two " -"contracting authorities." +"buyers." msgstr "" "Chile Compra publica un [aviso de " "licitación](https://www.mercadopublico.cl/Procurement/Modules/RFB/DetailsAcquisition.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" diff --git a/docs/locale/es/LC_MESSAGES/guidance/map/related_processes.po b/docs/locale/es/LC_MESSAGES/guidance/map/related_processes.po deleted file mode 100644 index c233d3b79..000000000 --- a/docs/locale/es/LC_MESSAGES/guidance/map/related_processes.po +++ /dev/null @@ -1,1157 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) Open Contracting Partnership -# This file is distributed under the same license as the Open Contracting Data Standard package. -# FIRST AUTHOR , YEAR. -# -# Translators: -# Oscar Montiel , 2020 -# Yohanna Lisnichuk , 2021 -# James McKinney, 2021 -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Open Contracting Data Standard 1.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-31 14:33-0400\n" -"PO-Revision-Date: 2020-06-29 22:59+0000\n" -"Last-Translator: James McKinney, 2021\n" -"Language-Team: Spanish (https://www.transifex.com/open-contracting-partnership-1/teams/112300/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: ../../docs/guidance/map/related_processes.md:1 -msgid "Framework agreements and related processes" -msgstr "Acuerdos marco y procesos relacionados" - -#: ../../docs/guidance/map/related_processes.md:1 -msgid "" -"In this guidance we defer to the definitions given in the [UNCITRAL Model " -"Law on Public Procurement " -"(2011)](https://uncitral.un.org/en/texts/procurement/modellaw/public_procurement)." -" The model law was developed through extensive consultation and reflects the" -" procurement practices and concepts used in many different jurisdictions." -msgstr "" -"En esta guía nos remitimos a las definiciones dadas en la [Ley Modelo de " -"UNCITRAL sobre Contrataciones Públicas UNCITRAL " -"(2011)](https://uncitral.un.org/en/texts/procurement/modellaw/public_procurement)." -" La ley modelo fue desarrollada a través de entrevistas extensivas y por lo " -"tanto refleja las prácticas y conceptos de adquisiciones usados en muchas " -"jurisdicciones diferentes." - -#: ../../docs/guidance/map/related_processes.md:7 -msgid "The UNCITRAL model law defines a framework agreement procedure as:" -msgstr "La ley modelo UNCITRAL define un procedimiento de acuerdo marco como:" - -#: ../../docs/guidance/map/related_processes.md:9 -msgid "" -"Procedure conducted in two stages: a first stage to select a supplier (or " -"suppliers) or a contractor (or contractors) to be a party (or parties) to a " -"framework agreement with a procuring entity, and a second stage to award a " -"procurement contract under the framework agreement to a supplier or " -"contractor party to the framework agreement." -msgstr "" -"Todo proceso que se programe en dos etapas: la primera para seleccionar a " -"uno o más proveedores o contratistas que vayan a ser partes en un acuerdo " -"marco concertado con una entidad contratante, y la segunda para adjudicar " -"algún contrato, con arreglo a ese acuerdo marco, a un proveedor o " -"contratista que sea parte en el acuerdo." - -#: ../../docs/guidance/map/related_processes.md:11 -msgid "" -"In OCDS terms, a framework agreement procedure is a procedure involving at " -"least one framework agreement. A framework agreement is defined in UNCITRAL " -"as:" -msgstr "" -"En términos de OCDS, un procedimiento de acuerdo marco es un procedimiento " -"que involucra al menos un acuerdo marco. Un acuerdo marco se define en la " -"UNCITRAL como:" - -#: ../../docs/guidance/map/related_processes.md:13 -msgid "" -"Agreement between the procuring entity and the selected supplier (or " -"suppliers) or contractor (or contractors) concluded upon completion of the " -"first stage of the framework agreement procedure." -msgstr "" -"Todo acuerdo que se concierte, al concluirse con éxito la primera etapa del " -"método de contratación con arreglo a un acuerdo marco, entre la entidad " -"adjudicadora y uno o más proveedores o contratistas seleccionados. " - -#: ../../docs/guidance/map/related_processes.md:15 -msgid "" -"In OCDS we treat “contractors” and “suppliers” as synonyms. One or more " -"buyers and one or more suppliers can participate in a framework agreement." -msgstr "" -"En OCDS usamos \"contratistas\" y \"proveedores\" como sinónimos. Uno o más " -"compradores y uno o más proveedores pueden participar en un acuerdo marco." - -#: ../../docs/guidance/map/related_processes.md:17 -msgid "A procurement contract is defined in UNCITRAL as:" -msgstr "Un contrato de adquisición se define en UNCITRAL como:" - -#: ../../docs/guidance/map/related_processes.md:19 -msgid "" -"Contract concluded between the procuring entity and a supplier (or " -"suppliers) or a contractor (or contractors) at the end of the procurement " -"proceedings." -msgstr "" -"Contrato celebrado entre la entidad contratante y uno o más proveedores o " -"contratistas a raíz de un proceso de contratación." - -#: ../../docs/guidance/map/related_processes.md:21 -msgid "Framework agreements can be **open** or **closed**:" -msgstr "Los acuerdos marco pueden ser **abiertos** o **cerrados**:" - -#: ../../docs/guidance/map/related_processes.md:23 -msgid "**Closed framework agreement**" -msgstr "**Acuerdos marco cerrados**" - -#: ../../docs/guidance/map/related_processes.md:25 -msgid "" -"Framework agreement to which no supplier or contractor that is not initially" -" a party to the framework agreement may subsequently become a party." -msgstr "" -"Acuerdo marco del que ningún proveedor o contratista que no sea inicialmente" -" parte del acuerdo marco podrá convertirse posteriormente en parte." - -#: ../../docs/guidance/map/related_processes.md:27 -msgid "**Open framework agreement**" -msgstr "**Acuerdos marco abiertos**" - -#: ../../docs/guidance/map/related_processes.md:29 -msgid "" -"Framework agreement to which a supplier (or suppliers) or a contractor (or " -"contractors) in addition to the initial parties may subsequently become a " -"party or parties." -msgstr "" -"Acuerdo marco en el cual un proveedor (o proveedores) o un contratista (o " -"contratistas) además de las partes iniciales pueden posteriormente " -"convertirse en parte o partes." - -#: ../../docs/guidance/map/related_processes.md:31 -msgid "" -"Procurement systems which provide for closed framework agreements include " -"the EU (Framework Agreements, per Directive 2014/24/EU, Article 33) and the " -"US federal system (Indefinite-delivery contracts, per Federal Acquisition " -"Regulation, Subpart 16.5). An example of a procurement system which provides" -" for open framework agreements is the EU (Dynamic Purchasing Systems, per " -"Directive 2014/24/EU, Article 33)." -msgstr "" -"Los sistemas de contratación que prevén acuerdos marco cerrados incluyen a " -"la UE (Acuerdos Marco, según la Directiva 2014/24 / UE, artículo 33) y el " -"sistema federal de los EE.UU. (Contratos de entrega indefinida, según el " -"Reglamento Federal de Adquisiciones, Subparte 16.5). Un ejemplo de un " -"sistema de contratación que prevé acuerdos marco abiertos es la UE (Sistemas" -" de compra dinámica, según la Directiva 2014/24 / UE, artículo 33)." - -#: ../../docs/guidance/map/related_processes.md:33 -msgid "" -"Framework agreement procedures can involve second-stage competition, or not:" -msgstr "" -"Los procedimientos de acuerdo marco pueden o no incluir una segunda etapa " -"competitiva:" - -#: ../../docs/guidance/map/related_processes.md:35 -msgid "**Framework agreement procedure with second-stage competition**" -msgstr "" -"**Procedimiento por el método del acuerdo marco con segunda etapa " -"competitiva**" - -#: ../../docs/guidance/map/related_processes.md:37 -msgid "" -"Procedure under an open framework agreement or a closed framework agreement " -"with more than one supplier or contractor in which certain terms and " -"conditions of the procurement that cannot be established with sufficient " -"precision when the framework agreement is concluded are to be established or" -" refined through a second-stage competition." -msgstr "" -"Todo proceso de adjudicación con arreglo al método del acuerdo marco, ya sea" -" abierto o cerrado, entablado con más de un proveedor o contratista, en el " -"que al no haber sido posible determinar, al concluirse el acuerdo marco, " -"algunas de las condiciones de los contratos que se tenga previsto adjudicar," -" será preciso determinar o precisar esas condiciones en una segunda etapa " -"competitiva." - -#: ../../docs/guidance/map/related_processes.md:39 -msgid "**Framework agreement procedure without second-stage competition**" -msgstr "" -"**Procedimiento por el método del acuerdo marco sin segunda etapa " -"competitiva**" - -#: ../../docs/guidance/map/related_processes.md:41 -msgid "" -"Procedure under a closed framework agreement in which all terms and " -"conditions of the procurement are established when the framework agreement " -"is concluded." -msgstr "" -"Proceso de adjudicación, con arreglo a un acuerdo marco cerrado, en el que " -"se hayan de concretar, al concertarse el acuerdo marco, todas las " -"condiciones de los contratos que se vayan a adjudicar" - -#: ../../docs/guidance/map/related_processes.md:43 -msgid "" -"Competition at the second stage is limited to suppliers that are party to " -"the framework agreement. Framework agreement procedures can include a mix of" -" competitive and non-competitive second stages." -msgstr "" -"La competencia en la segunda etapa está limitada a los proveedores que son " -"parte del acuerdo marco. Los procedimientos de acuerdo marco pueden incluir " -"una mezcla de segundas etapas competitivas y no competitivas." - -#: ../../docs/guidance/map/related_processes.md:45 -msgid "" -"The second stage of a framework agreement procedure is also known as a " -"“call-off.” Non-competitive second stages are also known as “direct call-" -"offs.” Competitive second stages are also known as “mini-competitions.”" -msgstr "" -"La segunda etapa de un procedimiento de acuerdo marco también se conoce " -"también como \"solicitud de orden de compra\". Las segundas etapas no " -"competitivas también se conocen como \"orden de compra directa\". Las " -"segundas etapas competitivas también son conocidas como \"mini-" -"competencias\"" - -#: ../../docs/guidance/map/related_processes.md:47 -msgid "" -"![Types of framework " -"agreement](../../_static/png/framework_agreement/types.png)" -msgstr "" -"![Tipos de acuerdos marco](../../_static/png/framework_agreement/types.png)" - -#: ../../docs/guidance/map/related_processes.md:49 -msgid "Modelling framework agreements in OCDS" -msgstr "Modelado de acuerdos marco en OCDS" - -#: ../../docs/guidance/map/related_processes.md:51 -msgid "" -"In OCDS, a contracting process brings together, under a single identifier, " -"the information that users need to answer questions such as:" -msgstr "" -"En OCDS, un proceso de contratación reúne, bajo un único identificador, la " -"información que los usuarios necesitan para responder preguntas tales como:" - -#: ../../docs/guidance/map/related_processes.md:53 -msgid "Was a contract signed as a result of this tender?" -msgstr "¿Se firmó un contrato como resultado de esta licitación?" - -#: ../../docs/guidance/map/related_processes.md:54 -msgid "What was the total value of spending that resulted from this award?" -msgstr "¿Cuál fue el valor total del gasto que resultó de esta adjudicación?" - -#: ../../docs/guidance/map/related_processes.md:55 -msgid "Was a renewal of this contract signed?" -msgstr "¿Se firmó una renovación de este contrato?" - -#: ../../docs/guidance/map/related_processes.md:57 -msgid "" -"In some cases, complex contracting processes cannot be represented under a " -"single identifier under OCDS' model, because:" -msgstr "" -"En algunos casos, procesos de contratación complejos no pueden ser " -"representados bajo un solo identificador bajo el modelo de OCDS porque:" - -#: ../../docs/guidance/map/related_processes.md:59 -msgid "" -"There are multiple competitive stages: for example, when a framework " -"agreement involves second-stage competitions." -msgstr "" -"Hay múltiples etapas competitivas: por ejemplo cuando un acuerdo marco " -"implica segundas etapas competitivas." - -#: ../../docs/guidance/map/related_processes.md:60 -msgid "" -"The procurement systems used at different stages of the process are managed " -"by different bodies, and cannot be integrated." -msgstr "" -"Los sistemas de contratación a través de los cuales se gestionan las " -"diferentes etapas del proceso son coordinados por diferentes organismos y no" -" pueden ser integrados." - -#: ../../docs/guidance/map/related_processes.md:62 -msgid "" -"OCDS models the first and second stages of framework agreement procedures as" -" separate contracting processes, linked together using the " -"`relatedProcesses` array. The `tender.techniques.hasFrameworkAgreement` " -"field, from the [Techniques](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/) extension, is used to " -"identify contracting processes that represent the first stage of a framework" -" agreement procedure. The presence of a related process with a " -"`.relationship` set to 'framework' is used to identify contracting processes" -" that represent the second stage of a framework agreement procedure." -msgstr "" -"OCDS modela la primera y segundas etapas de los procedimientos por acuerdo " -"marco como procesos de contratación separados, enlazándolos usando el array " -"`relatedProcesses`. El campo `tender.techniques.hasFrameworkAgreement` de " -"la extensión [Técnicas](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/), es usado para identificar" -" los procesos de contratación que representan la primera etapa de un " -"procedimiento por acuerdo marco. La presencia de un proceso relacionado con " -"el valor 'framework' en el campo `.relationship` es usado para identificar " -"los procesos de contratación que representan la segunda etapa de un " -"procedimiento por acuerdo marco. " - -#: ../../docs/guidance/map/related_processes.md:64 -msgid "" -"The following diagram shows how OCDS models a framework agreement procedure " -"with two second stages: one with competition and one without competition. " -"Grey blocks represent unused sections of the OCDS schema." -msgstr "" -"El siguiente diagrama muestra cómo OCDS modela los procedimientos por " -"acuerdo marco con dos segundas etapas: una con competencia y una sin " -"competencia. Los bloques en gris representan las secciones no utilizadas del" -" esquema OCDS." - -#: ../../docs/guidance/map/related_processes.md:66 -msgid "" -"![OCDS framework agreement " -"model](../../_static/png/framework_agreement/model.png)" -msgstr "" -"![Modelo OCDS de acuerdos " -"marco](../../_static/png/framework_agreement/model.png)" - -#: ../../docs/guidance/map/related_processes.md:68 -#: ../../docs/guidance/map/related_processes.md:150 -msgid "" -"The `tender.competitive` field, from the [Competitive](https://extensions" -".open-contracting.org/en/extensions/competitive/master/) extension, is used " -"to indicate whether the second stage involves competition." -msgstr "" -"El campo `tender.competitive`, de la extensión " -"[Competitive](https://extensions.open-" -"contracting.org/en/extensions/competitive/master/), es usado para indicar si" -" la segunda etapa es competitiva." - -#: ../../docs/guidance/map/related_processes.md:70 -msgid "" -"The following guidance describes how to model the different stages of a " -"framework agreement procedure in OCDS." -msgstr "" -"La siguiente guía describe cómo modelar las diferentes etapas de un " -"procedimiento por acuerdo marco en OCDS." - -#: ../../docs/guidance/map/related_processes.md:72 -msgid "" -"Invitation to participate in the first stage of a framework agreement " -"procedure" -msgstr "" -"Invitación a participar en la primera etapa del procedimiento por acuerdo " -"marco." - -#: ../../docs/guidance/map/related_processes.md:74 -msgid "Create a release and add 'tender' to the `tag` array" -msgstr "Crear un release y agregar 'tender' al array de 'tag'" - -#: ../../docs/guidance/map/related_processes.md:75 -msgid "" -"For each buyer that will participate in the framework agreement, add an " -"`Organization` object to the `parties` array, add 'buyer' to its `.roles`, " -"and populate its other fields." -msgstr "" -"Por cada comprador que participará en el acuerdo marco, agregar un objeto " -"`Organization` al array de `parties`, agregar 'buyer' a sus `.roles`, y " -"completar sus otros campos." - -#: ../../docs/guidance/map/related_processes.md:76 -msgid "" -"If all potential buyers can participate, don't add them to the `parties` " -"array. Instead, add a note in the [publication policy](../publish) to " -"explain how users should interpret a contracting process with no buyers." -msgstr "" -"Si todos los potenciales compradores pueden participar, no agregarlos al " -"array de `parties`. En su lugar, agregar una nota en la [política de " -"publicación](../publish) para explicar cómo los usuarios deben interpretar " -"un proceso de contratación sin compradores." - -#: ../../docs/guidance/map/related_processes.md:77 -msgid "" -"If a single buyer will participate in the framework agreement, set the " -"`buyer.id` and `buyer.name` to match the buyer's object in the `parties` " -"array. Otherwise, don't populate `buyer`." -msgstr "" -"Si solo un comprador participará en el acuerdo marco, establecer `buyer.id` " -"y `buyer.name` con los mismos valores del objeto 'buyer' en el array de " -"`parties`. De lo contrario, no incluir el campo `buyer`." - -#: ../../docs/guidance/map/related_processes.md:78 -msgid "In the `tender` section, set:" -msgstr "En la sección `tender`, establecer:" - -#: ../../docs/guidance/map/related_processes.md:79 -msgid "`tender.techniques.hasFrameworkAgreement` to `true`." -msgstr "`tender.techniques.hasFrameworkAgreement` a `true`." - -#: ../../docs/guidance/map/related_processes.md:80 -msgid "`tender.contractPeriod` to the duration of the framework agreement." -msgstr "`tender.contractPeriod` a la duración del acuerdo marco." - -#: ../../docs/guidance/map/related_processes.md:81 -msgid "" -"If the framework agreement is closed, set `tender.tenderPeriod.endDate` to " -"the deadline for responses to the invitation." -msgstr "" -"Si el acuerdo marco es cerrado, establecer `tender.tenderPeriod.endDate` a " -"la fecha máxima de respuestas a la invitación." - -#: ../../docs/guidance/map/related_processes.md:82 -msgid "" -"If the framework agreement is open, set `tender.tenderPeriod.endDate` to the" -" last date that new suppliers can be added." -msgstr "" -"Si el acuerdo marco es abierto, establecer `tender.tenderPeriod.endDate` a " -"la última fecha en la que nuevos proveedores pueden ser añadidos." - -#: ../../docs/guidance/map/related_processes.md:84 -msgid "Setting procurement method" -msgstr "Estableciendo el método de contratación" - -#: ../../docs/guidance/map/related_processes.md:86 -msgid "" -"The `tender.procurementMethod` field uses the [method " -"codelist](../../schema/codelists.md#method) to describe the competitive " -"conditions of the framework agreement procedure as a whole, not only the " -"first stage." -msgstr "" -"El campo `tender.procurementMethod` usa la [lista de códigos de " -"métodos](../../schema/codelists.md#method) para describir las condiciones " -"competitivas del procedimiento por acuerdo marco como un todo, no solo de la" -" primera etapa." - -#: ../../docs/guidance/map/related_processes.md:88 -msgid "Use the following criteria to determine the procurement method:" -msgstr "Use el siguiente criterio para determinar el método de contratación:" - -#: ../../docs/guidance/map/related_processes.md:90 -msgid "" -"If the contracting process will establish a framework agreement with a " -"single supplier and if there are no conditions to participate in the " -"contracting process, set `tender.procurementMethod` to 'open'." -msgstr "" -"Si el proceso de contratación establecerá un acuerdo marco con un solo " -"proveedor y si no hay condiciones para participar en el proceso de " -"contratación, establecer `tender.procurementMethod` a 'open'." - -#: ../../docs/guidance/map/related_processes.md:91 -msgid "" -"If the contracting process limits the suppliers that can submit a request to" -" participate in the framework agreement, set `tender.procurementMethod` to " -"'limited'." -msgstr "" -"Si el proceso de contratación limita los proveedores que pueden enviar una " -"solicitud para participar en el acuerdo marco, establecer " -"`tender.procurementMethod` a 'limited'." - -#: ../../docs/guidance/map/related_processes.md:92 -msgid "Otherwise, set `tender.procurementMethod` to 'selective'." -msgstr "De lo contrario, establecer `tender.procurementMethod` a 'selective'." - -#: ../../docs/guidance/map/related_processes.md:94 -msgid "Addition of a supplier to a framework agreement" -msgstr "Adición de un proveedor a un acuerdo marco" - -#: ../../docs/guidance/map/related_processes.md:96 -msgid "" -"Create a release with the **same** `ocid` as the tender release and add " -"'award' to the `tag` array" -msgstr "" -"Crear un release con el **mismo** `ocid` que el release de tender y agregar " -"'award' al array `tag`" - -#: ../../docs/guidance/map/related_processes.md:97 -msgid "Add an `Award` object to the `awards` array." -msgstr "Agragar un objeto `Award` al array de `awards`." - -#: ../../docs/guidance/map/related_processes.md:98 -msgid "For each supplier:" -msgstr "Por cada proveedor:" - -#: ../../docs/guidance/map/related_processes.md:99 -#: ../../docs/guidance/map/related_processes.md:142 -msgid "" -"Add an `Organization` object to the `parties` array, add 'supplier' to its " -"`.roles` and populate its other fields." -msgstr "" -"Agregar un objeto `Organization` al array de `parties`, agregar 'supplier' a" -" sus `.roles` y completar sus otros campos." - -#: ../../docs/guidance/map/related_processes.md:100 -msgid "" -"Add an `OrganizationReference` object to the award's `.suppliers` array, and" -" set its `.id` and `.name` to match the supplier's object in the `parties` " -"array." -msgstr "" -"Agregar un objeto `OrganizationReference` al array `.suppliers` de awards, y" -" establecer su `.id` y `.name` para que coincida con el objeto de supplier " -"del array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:101 -msgid "" -"If no further suppliers will be added to the framework agreement, set " -"`tender.status` to 'complete'." -msgstr "" -"Si no se agregarán más proveedores al acuerdo marco, establecer " -"`tender.status` a 'complete'." - -#: ../../docs/guidance/map/related_processes.md:103 -#: ../../docs/guidance/map/related_processes.md:206 -msgid "Award of a procurement contract without second-stage competition" -msgstr "Adjudicación de un contrato sin una segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:105 -msgid "" -"Create a release with a **new** `ocid` and add 'award' and 'contract' to the" -" `tag`" -msgstr "" -"Crear un release con un **nuevo** `ocid` y agregar 'award' y 'contract' a " -"`tag`" - -#: ../../docs/guidance/map/related_processes.md:106 -#: ../../docs/guidance/map/related_processes.md:114 -msgid "" -"[Relate the second stage to the first stage](#relate-the-second-stage-to-" -"the-first-stage)" -msgstr "" -"[Relacionar la segunda etapa con la primera etapa](#relate-the-second-stage-" -"to-the-first-stage)" - -#: ../../docs/guidance/map/related_processes.md:107 -#: ../../docs/guidance/map/related_processes.md:115 -msgid "[Add a buyer](#add-a-buyer)" -msgstr "[Agregar un comprador](#add-a-buyer)" - -#: ../../docs/guidance/map/related_processes.md:108 -msgid "" -"Set `tender.id` to the `award.id`, set `tender.competitive` to `false`, and " -"set `tender.procuringEntity` if appropriate" -msgstr "" -"Establecer `tender.id` al valor de `award.id`, establecer " -"`tender.competitive` a `false`, y completar `tender.procuringEntity` si " -"corresponde" - -#: ../../docs/guidance/map/related_processes.md:109 -#: ../../docs/guidance/map/related_processes.md:121 -msgid "" -"[Add an award, contract and supplier](#add-an-award-contract-and-supplier)" -msgstr "" -"[Agregar una adjudicación, contrato y proveedor](#add-an-award-contract-and-" -"supplier)" - -#: ../../docs/guidance/map/related_processes.md:111 -#: ../../docs/guidance/map/related_processes.md:271 -msgid "Invitation to participate in a second-stage competition" -msgstr "Invitación a participar en una segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:113 -msgid "" -"Create a release with a **new** `ocid` and add 'tender' to the `.tag` array" -msgstr "" -"Crear un release con un **nuevo** `ocid` y agregar 'tender' al array de " -"`.tag`" - -#: ../../docs/guidance/map/related_processes.md:116 -msgid "" -"Populate the `tender` section, setting `tender.procurementMethod` to the " -"same value as in the first stage" -msgstr "" -"Completar la sección de `tender`, estableciendo `tender.procurementMethod` " -"al mismo valor que la primera etapa" - -#: ../../docs/guidance/map/related_processes.md:118 -#: ../../docs/guidance/map/related_processes.md:289 -msgid "" -"Award of a procurement contract resulting from a second-stage competition" -msgstr "" -"Adjudicación de un contrato resultante de una segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:120 -msgid "" -"Create a release with the **same** `ocid` as the tender release *for the " -"second stage*, and add 'award' and 'contract' to the `tag`" -msgstr "" -"Crear un release con el **mismo** `ocid` que el release de tender *para la " -"segunda etapa*, y agregar 'award' and 'contract' a `tag`" - -#: ../../docs/guidance/map/related_processes.md:123 -msgid "Updating the contract value, period or items" -msgstr "Actualizando el valor, periodo o ítems del contrato" - -#: ../../docs/guidance/map/related_processes.md:125 -msgid "" -"If the initial contract value, period or items are subsequently updated, " -"populate the contract's `.value`, `.period` and `.items` with the updated " -"values." -msgstr "" -"Si el valor, periodo o ítems iniciales del contrato son actualizados " -"subsecuentemente, completar los campos `.value`, `.period` e `.items` del " -"contrato con los valores actualizados." - -#: ../../docs/guidance/map/related_processes.md:127 -msgid "Common operations" -msgstr "Operaciones comunes" - -#: ../../docs/guidance/map/related_processes.md:129 -msgid "Relate the second stage to the first stage" -msgstr "Relacionar la segunda etapa con la primera etapa" - -#: ../../docs/guidance/map/related_processes.md:131 -msgid "" -"Add a `RelatedProcess` object to the `relatedProcesses` array, set its `.id`" -" (to '1', for example), add 'framework' to its `.relationship` array, set " -"its `.scheme` to 'ocid' and set its `.identifier` to the `ocid` of the " -"invitation to participate in the framework agreement." -msgstr "" -"Agregar un objeto `RelatedProcess` al array de `relatedProcesses`, " -"establecer su `.id` (a '1', por ejemplo), agregar 'framework' a su array de " -"`.relationship`, establecer su `.scheme` a 'ocid' y establecer su " -"`.identifier` al `ocid` de la invitación a participar en el acuerdo marco." - -#: ../../docs/guidance/map/related_processes.md:133 -msgid "Add a buyer" -msgstr "Agregar un comprador" - -#: ../../docs/guidance/map/related_processes.md:135 -msgid "" -"Add an `Organization` object to the `parties` array, add 'buyer' to its " -"`.roles` and populate its other fields with the details of the buyer for " -"this specific contract." -msgstr "" -"Agregar un objeto `Organization` al array de `parties`, agregar 'buyer' a " -"sus `.roles` y completar sus otros campos con los detalles del comprador " -"para este contrato específico." - -#: ../../docs/guidance/map/related_processes.md:136 -msgid "" -"Set `buyer.id` and `buyer.name` to match the buyer's object in the `parties`" -" array." -msgstr "" -"Establecer los campos `buyer.id` y `buyer.name` para que coincidan con el " -"objeto de buyer en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:138 -msgid "Add an award, contract and supplier" -msgstr "Agregar una adjudicación, contrato y proveedor" - -#: ../../docs/guidance/map/related_processes.md:140 -msgid "" -"Add an `Award` object to the `awards` array and a `Contract` object to the " -"`contracts` array." -msgstr "" -"Agregar un objeto `Award` al array de `awards` y un objeto `Contract` al " -"array de `contracts`." - -#: ../../docs/guidance/map/related_processes.md:141 -msgid "Set the award's `.id` and the contract's `.id` to the same value." -msgstr "" -"Establecer el `.id` de la adjudicación `.id` del contrato al mismo valor." - -#: ../../docs/guidance/map/related_processes.md:143 -msgid "" -"Add an `OrganizationReference` object to the award's `.suppliers` array and " -"set `.id` and `.name` to match the supplier's object in the `parties` array." -msgstr "" -"Agregar un objeto `OrganizationReference` al array `.suppliers` del array " -"de award, y establecer los campos `.id` y `.name` para que coincidan con el " -"objeto de supplier en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:144 -msgid "" -"Populate the award's `.value`, `.contractPeriod` and `.items` with the " -"initial contract value, period and items." -msgstr "" -"Completar los campos `.value`, `.contractPeriod` e `.items` de la " -"adjudicación con los valores, periodo e ítems iniciales del contrato." - -#: ../../docs/guidance/map/related_processes.md:146 -msgid "Extensions" -msgstr "Extensiones" - -#: ../../docs/guidance/map/related_processes.md:148 -msgid "" -"The `tender.techniques.hasFrameworkAgreement` field, from the " -"[Techniques](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/) extension, is used to " -"identify contracting processes that represent the first stage of a framework" -" agreement procedure. More information on the nature of the framework " -"agreement can be provided via the `tender.techniques.frameworkAgreement` " -"object." -msgstr "" -"El campo `tender.techniques.hasFrameworkAgreement` , de la extensión " -"[Técnicas](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/), es usado para identificar" -" los procesos de contratación que representan la primera etapa de un " -"procedimiento por acuerdo marco. Más información sobre la naturaleza del " -"acuerdo marco puede ser proveída via el objeto " -"`tender.techniques.frameworkAgreement`." - -#: ../../docs/guidance/map/related_processes.md:152 -msgid "The two extensions should be declared in the package metadata:" -msgstr "" -"Las dos extensiones deberían ser declaradas en los metadatos del paquete:" - -#: ../../docs/guidance/map/related_processes.md:158 -msgid "Worked examples" -msgstr "Ejemplos prácticos" - -#: ../../docs/guidance/map/related_processes.md:160 -msgid "" -"The following examples show how to model two framework agreements, covering " -"a range of characteristics:" -msgstr "" -"Los siguientes ejemplos muestran cómo modelar dos acuerdos marco, cubriendo " -"una serie de características:" - -#: ../../docs/guidance/map/related_processes.md:162 -msgid "" -"A closed framework agreement established for a single buyer, with a single " -"supplier and **without** second-stage competition" -msgstr "" -"Un acuerdo marco cerrado establecido para un único comprador, con un único " -"proveedor y **sin** segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:163 -msgid "" -"A open framework agreement established for multiple buyers, with multiple " -"suppliers and **with** second-stage competition" -msgstr "" -"Un acuerdo marco abierto establecido para múltiples compradores, con " -"múltiples proveedores y **con** segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:165 -msgid "" -"Closed framework agreement with single buyer, single supplier and without " -"second-stage competition" -msgstr "" -"Un acuerdo marco cerrado con un solo comprador, un solo proveedor y sin " -"segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:167 -msgid "" -"NHS National Services Scotland (NSS) wants to establish a framework " -"agreement for the receipt, storage and distribution of seasonal influenza " -"vaccines to general practitioner practices, social care premises, vaccine " -"holding centres and community pharmacies across NHS Scotland." -msgstr "" -"NHS National Services Scotland (NSS) quiere establecer un acuerdo marco para" -" la recepción, almacenamiento y distribución de vacunas contra la influenza " -"estacional a médicos generales, instalaciones de atención social, centros de" -" almacenamiento de vacunas y farmacias comunitarias en todo el NHS Escocia." - -#: ../../docs/guidance/map/related_processes.md:169 -#: ../../docs/guidance/map/related_processes.md:233 -msgid "Invitation to participate in the first stage" -msgstr "Invitación a participar en la primera etapa" - -#: ../../docs/guidance/map/related_processes.md:171 -msgid "" -"NSS issues a [contract " -"notice](https://ted.europa.eu/udl?uri=TED:NOTICE:478648-2019:TEXT:EN:HTML) " -"(tender notice), inviting suppliers to participate in the framework " -"agreement. The tender notice specifies that the framework agreement is with " -"a single operator. The framework agreement is not open, since the tender " -"notice does not specify that the procurement involves the setting up of a " -"dynamic purchasing system. The framework agreement is for a single buyer, " -"since the tender notice specifies only one contracting authority." -msgstr "" -"NSS emite un [aviso de " -"contrato](https://ted.europa.eu/udl?uri=TED:NOTICE:478648-2019:TEXT:EN:HTML)" -" (aviso de licitación), invitando a los proveedores a participar en el " -"acuerdo marco. El aviso de licitación especifica que el acuerdo marco es con" -" un solo operador. El acuerdo marco no es abierto, dado que el aviso de " -"licitación no especifica que la adquisición involucra el establecimiento de " -"un sistema de compra dinámico. El acuerdo marco es para un único comprador, " -"dado que el aviso de licitación especifica solo una autoridad de " -"contratación." - -#: ../../docs/guidance/map/related_processes.md:173 -#: ../../docs/guidance/map/related_processes.md:237 -msgid "" -"The notice is modelled as an OCDS release with a `tag` of 'tender' and the " -"following properties:" -msgstr "" -"El aviso es modelado como un release OCDS con el `tag` establecido a " -"'tender' y las siguientes propiedades:" - -#: ../../docs/guidance/map/related_processes.md:175 -#: ../../docs/guidance/map/related_processes.md:239 -msgid "The techniques extension is declared in the package metadata." -msgstr "La extensión de técnicas es declarada en los metadatos del paquete." - -#: ../../docs/guidance/map/related_processes.md:176 -#: ../../docs/guidance/map/related_processes.md:240 -msgid "" -"Since this contracting process is for the set-up of a framework agreement, " -"`tender.techniques.hasFrameworkAgreement` is set to `true`." -msgstr "" -"Dado que este proceso de contratación es para el establecimiento de un " -"acuerdo marco, `tender.techniques.hasFrameworkAgreement` es establecido a " -"`true`." - -#: ../../docs/guidance/map/related_processes.md:177 -msgid "" -"Since the framework agreement will be concluded with a single supplier and " -"since any supplier is able to submit a response to the invitation to " -"participate, `tender.procurementMethod` is set to 'open'." -msgstr "" -"Dado que el acuerdo marco será concluido con un único proveedor y dado que " -"cualquier proveedor puede enviar una respuesta a la invitación a participar," -" `tender.procurementMethod` es establecido a 'open'." - -#: ../../docs/guidance/map/related_processes.md:178 -msgid "" -"Since the framework agreement is closed, `tender.tenderPeriod` is set to the" -" deadline for responses to the invitation to participate." -msgstr "" -"Dado que el acuerdo marco es cerrado, `tender.tenderPeriod` es establecido a" -" la fecha límite para enviar respuestas a la invitación a participar." - -#: ../../docs/guidance/map/related_processes.md:179 -msgid "" -"Since there is only one buyer, `buyer` is set to reference the buyer's " -"object in the `parties` array." -msgstr "" -"Dado que hay un solo comprador, `buyer` se establece a la referencia del " -"objeto buyer en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:187 -#: ../../docs/guidance/map/related_processes.md:252 -msgid "Adding a supplier to the framework agreement" -msgstr "Agregando un proveedor al acuerdo marco" - -#: ../../docs/guidance/map/related_processes.md:189 -msgid "" -"NSS issues a [contract award " -"notice](https://ted.europa.eu/udl?uri=TED:NOTICE:268595-2020:TEXT:EN:HTML&src=0)" -" to announce that the framework agreement has been concluded with a single " -"supplier, Movianto UK." -msgstr "" -"NSS emite un [aviso de adjudicación de " -"contato](https://ted.europa.eu/udl?uri=TED:NOTICE:268595-2020:TEXT:EN:HTML&src=0)" -" para anunciar que el acuerdo marco ha sido concluido con un solo proveedor," -" Movianto UK." - -#: ../../docs/guidance/map/related_processes.md:191 -#: ../../docs/guidance/map/related_processes.md:256 -msgid "" -"The notice is modelled as an OCDS release with the same `ocid` as the " -"previous release, a `tag` of 'award', and the following properties:" -msgstr "" -"El aviso el modelado con un release OCDS con el mismo `ocid` como el release" -" previo, el `tag` 'award', y las siguientes características:" - -#: ../../docs/guidance/map/related_processes.md:193 -msgid "" -"Since no further suppliers will be added to the framework agreement, " -"`tender.status` is set to 'complete'." -msgstr "" -"Dado que no se añadirán más proveedores al acuerdo marco, `tender.status` se" -" establece a 'complete'." - -#: ../../docs/guidance/map/related_processes.md:194 -#: ../../docs/guidance/map/related_processes.md:259 -msgid "An `Award` object is added to the `awards` array." -msgstr "Un objeto `Award` es agregado al array de `awards`." - -#: ../../docs/guidance/map/related_processes.md:195 -msgid "" -"An `Organization` object is added to the `parties` array with the supplier's" -" details." -msgstr "" -"Un objeto `Organization` es agregado al aray de `parties` con los detalles " -"de los proveedores." - -#: ../../docs/guidance/map/related_processes.md:196 -msgid "" -"An `OrganizationReference` object is added to award's `.suppliers` array to " -"reference the supplier's object in the `parties` array." -msgstr "" -"Un objeto `OrganizationReference` es agregado al array `.suppliers` de " -"awards para referenciar el objeto supplier en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:204 -msgid "" -"The first stage of the framework agreement procedure is complete and NSS can" -" now purchase services from the supplier." -msgstr "" -"La primera etapa del acuerdo marco está completa y NSS puede ahora contratar" -" servicios del proveedor." - -#: ../../docs/guidance/map/related_processes.md:208 -msgid "" -"NSS uses the framework agreement to place an order for the supplier to " -"receive and store ten pallets of seasonal flu vaccine. Under the terms of " -"the agreement the cost for this service is £10,000." -msgstr "" -"NSS utiliza el acuerdo marco para realizar un pedido para que el proveedor " -"reciba y almacene diez tarimas de vacuna contra la influenza estacional. " -"Según los términos del acuerdo, el costo de este servicio es de £ 10,000." - -#: ../../docs/guidance/map/related_processes.md:210 -msgid "" -"The order represents the award of a procurement contract at the second stage" -" of the framework agreement procedure." -msgstr "" -"El pedido representa la adjudicación de un contrato de adquisición en la " -"segunda etapa del procedimiento del acuerdo marco." - -#: ../../docs/guidance/map/related_processes.md:212 -msgid "" -"Because there was no competition at the second stage, the new contracting " -"process has only one release, with a `tag` of 'award' and 'contract'. The " -"release has the following properties:" -msgstr "" -"Debido a que no hubo competencia en la segunda etapa, el nuevo proceso de " -"contratación tiene un solo release, con una `tag` de 'award' y 'contract'. " -"El release tiene las siguientes propiedades:" - -#: ../../docs/guidance/map/related_processes.md:214 -#: ../../docs/guidance/map/related_processes.md:277 -msgid "A new `ocid` is used." -msgstr "Un nuevo `ocid` es usado." - -#: ../../docs/guidance/map/related_processes.md:215 -#: ../../docs/guidance/map/related_processes.md:278 -#: ../../docs/guidance/map/related_processes.md:296 -msgid "" -"The `relatedProcesses` section is populated with a reference to the " -"contracting process for the first stage." -msgstr "" -"La sección `relatedProcesses` se completa con una referencia al proceso de " -"contratación para la primera etapa." - -#: ../../docs/guidance/map/related_processes.md:216 -msgid "" -"A minimal `tender` section sets `tender.id` and sets `tender.competitive` to" -" `false`." -msgstr "" -"Una sección mínima de `tender` establece` tender.id` y establece " -"`tender.competitive` a` false`." - -#: ../../docs/guidance/map/related_processes.md:217 -#: ../../docs/guidance/map/related_processes.md:299 -msgid "" -"The `awards` section is populated with the initial contract value, period " -"and items." -msgstr "" -"La sección de `awards` se completa con el valor inicial del contrato, " -"periodo e ítems." - -#: ../../docs/guidance/map/related_processes.md:218 -#: ../../docs/guidance/map/related_processes.md:300 -msgid "The `contracts` section is populated and linked to the award." -msgstr "La sección `contracts` se completa y se vincula con la adjudicación." - -#: ../../docs/guidance/map/related_processes.md:219 -msgid "" -"The `buyer`, `tender.procuringEntity`, `awards.suppliers` and `parties` " -"fields are populated with the details of the buyer, procuring entity and " -"supplier." -msgstr "" -"Los campos `buyer`, `tender.procuringEntity`, `awards.suppliers` y `parties`" -" son completados con los detalles del comprador, la entidad contratante y " -"proveedor." - -#: ../../docs/guidance/map/related_processes.md:227 -msgid "" -"Each additional purchase made under the framework agreement is represented " -"by a new contracting process with a new `ocid`." -msgstr "" -"Cada compra adicional realizada bajo el acuerdo marco está representada por " -"un nuevo proceso de contratación con un nuevo `ocid`." - -#: ../../docs/guidance/map/related_processes.md:229 -msgid "" -"Open framework agreement with multiple buyers, with multiple suppliers and " -"with second-stage competition" -msgstr "" -"Acuerdo marco abierto con múltiples compradores, con múltiples proveedores y" -" con segunda etapa competitiva" - -#: ../../docs/guidance/map/related_processes.md:231 -msgid "" -"The National Procurement Agency in Chile (Chile Compra) wants to establish a" -" framework agreement for the purchase of office supplies, including paper " -"and stationery items for the different public entities across Chile." -msgstr "" -"La Agencia Nacional de Adquisiciones en Chile (Chile Compra) quiere " -"establecer un acuerdo marco para las compras de insumos de oficina, " -"incluyendo papel y artículos de papelería para las distintas entidades " -"públicas de Chile." - -#: ../../docs/guidance/map/related_processes.md:235 -msgid "" -"Chile Compra publishes a [tender " -"notice](https://www.mercadopublico.cl/Procurement/Modules/RFB/DetailsAcquisition.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" inviting suppliers to participate in the framework agreement. The tender " -"notice specifies that multiple suppliers can join the framework agreement. " -"The framework agreement is open, since all the framework agreements in Chile" -" involve the setting up of a dynamic purchasing system. The framework " -"agreement is for multiple buyers, since the tender notice specifies two " -"contracting authorities." -msgstr "" -"Chile Compra publica un [aviso de licitación] " -"(https://www.mercadopublico.cl/Procurement/Modules/RFB/DetailsAcquisition.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" invitando a los proveedores a participar en el acuerdo marco. El aviso de " -"licitación especifica que varios proveedores pueden unirse al acuerdo marco." -" El convenio marco es abierto, ya que todos los acuerdos marco en Chile " -"implican el establecimiento de un sistema dinámico de compras. El acuerdo " -"marco es para varios compradores, ya que el anuncio de licitación especifica" -" dos autoridades de contratación." - -#: ../../docs/guidance/map/related_processes.md:241 -msgid "" -"Since the framework agreement will be concluded with multiple suppliers and " -"will involve second-stage competition, `tender.procurementMethod` is set to " -"'selective'." -msgstr "" -"Dado que el acuerdo marco se celebrará con varios proveedores e implicará " -"una segunda fase competitiva, `tender.procurementMethod` se establece en " -"'selective'." - -#: ../../docs/guidance/map/related_processes.md:242 -msgid "" -"Since the framework agreement is open, `tender.tenderPeriod` is set to the " -"end of the framework agreement." -msgstr "" -"Dado que el acuerdo marco es abierto, `tender.tenderPeriod` se establece a " -"la fecha de fin del acuerdo marco." - -#: ../../docs/guidance/map/related_processes.md:243 -msgid "" -"Since there are two buyers, the 'buyer' object is not set, and the buyers " -"are declared in the `parties` array." -msgstr "" -"Dado que hay dos compradores, el objeto 'buyer' no se establece y los " -"compradores se declaran en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:244 -msgid "" -"Since Chile Compra is the entity that manages the contracting process, " -"`tender.procuringEntity` is set to reference Chile Compra's object in the " -"`parties` array." -msgstr "" -"Dado que Chile Compra es la entidad que administra el proceso de " -"contratación, `tender.procuringEntity` se establece para hacer referencia al" -" objeto de Chile Compra en el array de `parties`." - -#: ../../docs/guidance/map/related_processes.md:254 -msgid "" -"Chile Compra issues an [award " -"notice](https://www.mercadopublico.cl/Procurement/Modules/RFB/StepsProcessAward/PreviewAwardAct.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" to announce that the framework agreement has been awarded to two suppliers:" -" Rodrigo Alejandro Vidal Campos and Comercializadora e Importadora Grupo " -"RAVC SPA." -msgstr "" -"Chile Compra emite un [aviso de adjudicación] " -"(https://www.mercadopublico.cl/Procurement/Modules/RFB/StepsProcessAward/PreviewAwardAct.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" para anunciar que el acuerdo marco ha sido adjudicado a dos proveedores: " -"Rodrigo Alejandro Vidal Campos y Comercializadora e Importadora Grupo RAVC " -"SPA." - -#: ../../docs/guidance/map/related_processes.md:258 -msgid "" -"Since other suppliers are still able to submit a request to participate in " -"the framework agreement, no change is made to `tender.status`." -msgstr "" -"Dado que otros proveedores aún pueden presentar una solicitud para " -"participar en el acuerdo marco, no se realiza ningún cambio en " -"`tender.status`." - -#: ../../docs/guidance/map/related_processes.md:260 -msgid "" -"An `Organization` object is added to the `parties` array for each supplier " -"with its details." -msgstr "" -"Se agrega un objeto `Organization` al array de `parties` para cada proveedor" -" con sus detalles." - -#: ../../docs/guidance/map/related_processes.md:261 -msgid "" -"An `OrganizationReference` object is added to the award's `.suppliers` array" -" for each supplier to reference its object in the `parties` array." -msgstr "" -"Se agrega un objeto `OrganizationReference` al array de ` .suppliers` de " -"awards para que cada proveedor haga referencia a su objeto en el array de " -"`parties`." - -#: ../../docs/guidance/map/related_processes.md:269 -msgid "" -"The framework is now established, and both buyers can now purchase items " -"from the suppliers." -msgstr "" -"El acuerdo está establecido y ambos compradores ahora pueden comprar " -"artículos de los proveedores." - -#: ../../docs/guidance/map/related_processes.md:273 -msgid "" -"Servicio Local de Educación Pública Puerto Cordillera publishes a [tender " -"notice](https://www.mercadopublico.cl/CMII/Tienda/frm_GCV2_Ficha.aspx?IURL=uPteMZpbYBeM$07gdm9g$08EFecMSuZM0euS4Z$07cbeFMX_05ohEOMPbeteMZpbYBeM)," -" inviting suppliers on the framework agreement to bid to supply 200 pencils." -" This represents an invitation to participate in a second-stage competition." -msgstr "" -"El Servicio Local de Educación Pública Puerto Cordillera publica un [aviso " -"de " -"licitación](https://www.mercadopublico.cl/CMII/Tienda/frm_GCV2_Ficha.aspx?IURL=uPteMZpbYBeM$07gdm9g$08EFecMSuZM0euS4Z$07cbeFMX_05ohEOMPbeteMZpbYBeM)," -" invitando a los proveedores del acuerdo marco a presentar ofertas para el " -"suministro de 200 lápices. Esto representa una invitación a participar en " -"una segunda etapa competitiva." - -#: ../../docs/guidance/map/related_processes.md:275 -#: ../../docs/guidance/map/related_processes.md:293 -msgid "The release has the following properties:" -msgstr "El release tiene las siguientes propiedades:" - -#: ../../docs/guidance/map/related_processes.md:279 -msgid "The `tag` is set to 'tender'." -msgstr "El `tag` es establecido a 'tender'." - -#: ../../docs/guidance/map/related_processes.md:280 -msgid "" -"The tender section includes details about the competition, and " -"`tender.competitive` is set to `true`." -msgstr "" -"La sección de licitación incluye detalles sobre la competencia, y " -"`tender.competitive` es establecido a `true`." - -#: ../../docs/guidance/map/related_processes.md:281 -msgid "" -"Since this new contracting process has a single buyer, the `buyer` is set to" -" Servicio Local de Educación Pública Puerto Cordillera." -msgstr "" -"Dado que este nuevo proceso de contratación tiene un solo comprador, el " -"`buyer` se establece en el Servicio Local de Educación Pública Puerto " -"Cordillera." - -#: ../../docs/guidance/map/related_processes.md:291 -msgid "" -"Following the invitation to participate in the second-stage competition, " -"Servicio Local de Educación Pública Puerto Cordillera awards a contract to " -"Comercializadora e Importadora Grupo RAVC SPA." -msgstr "" -"Tras la invitación para participar en la segunda etapa competitiva, el " -"Servicio Local de Educación Pública Puerto Cordillera adjudica un contrato a" -" Comercializadora e Importadora Grupo RAVC SPA." - -#: ../../docs/guidance/map/related_processes.md:295 -msgid "" -"The same `ocid` as the invitation to participate in the second-stage " -"competition is used." -msgstr "" -"El mismo `ocid` que la invitación a participar en la segunda etapa " -"competitiva es usado." - -#: ../../docs/guidance/map/related_processes.md:297 -msgid "The `tag` is set to 'award' and 'contract'." -msgstr "El `tag` es establecido a 'award' y 'contract'." - -#: ../../docs/guidance/map/related_processes.md:298 -msgid "The `tender.status` is updated to 'complete'." -msgstr "El `tender.status` es actualizado a 'complete'." - -#: ../../docs/guidance/map/related_processes.md:301 -msgid "" -"The `awards.suppliers` and `parties` fields are populated with the details " -"of the supplier." -msgstr "" -"Los campos `awards.suppliers` y `parties` son completados con los detalles " -"del proveedor adjudicado." diff --git a/docs/locale/es/LC_MESSAGES/guidance/publish/quality.po b/docs/locale/es/LC_MESSAGES/guidance/publish/quality.po index 6edc64af1..a4d78a412 100644 --- a/docs/locale/es/LC_MESSAGES/guidance/publish/quality.po +++ b/docs/locale/es/LC_MESSAGES/guidance/publish/quality.po @@ -234,8 +234,8 @@ msgstr "" #: ../../docs/guidance/publish/quality.md:39 msgid "" -"**Parity**: For each publisher, for the _time period_ and _contracting " -"authorities_ covered by the data, there isn’t another dataset by the same " +"**Parity**: For each publisher, for the _time period_ and _buyers_ " +"covered by the data, there isn’t another dataset by the same " "publisher that covers more than 25% more contracting processes." msgstr "" "**Paridad**: Por cada publicador, para el _período de tiempo_ y _autoridades" @@ -319,7 +319,7 @@ msgstr "" #: ../../docs/guidance/publish/quality.md:54 msgid "" -"Increase the number of contracting authorities covered in the publication" +"Increase the number of buyers covered in the publication" msgstr "" "Incrementar el número de autoridades de contratación cubiertas en la " "publicación" diff --git a/docs/locale/fr/LC_MESSAGES/guidance/map/framework_agreements.po b/docs/locale/fr/LC_MESSAGES/guidance/map/framework_agreements.po index f99dde78a..b23300c02 100644 --- a/docs/locale/fr/LC_MESSAGES/guidance/map/framework_agreements.po +++ b/docs/locale/fr/LC_MESSAGES/guidance/map/framework_agreements.po @@ -719,7 +719,7 @@ msgid "" "The framework agreement is open, since all the framework agreements in Chile" " involve the setting up of a dynamic purchasing system. The framework " "agreement is for multiple buyers, since the tender notice specifies two " -"contracting authorities." +"buyers." msgstr "" #: ../../docs/guidance/map/framework_agreements.md:233 diff --git a/docs/locale/fr/LC_MESSAGES/guidance/map/related_processes.po b/docs/locale/fr/LC_MESSAGES/guidance/map/related_processes.po deleted file mode 100644 index 151be3dd8..000000000 --- a/docs/locale/fr/LC_MESSAGES/guidance/map/related_processes.po +++ /dev/null @@ -1,868 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) Open Contracting Partnership -# This file is distributed under the same license as the Open Contracting Data Standard package. -# FIRST AUTHOR , YEAR. -# -# Translators: -# Colin Maudry , 2020 -# James McKinney, 2020 -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Open Contracting Data Standard 1.1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-30 00:08-0400\n" -"PO-Revision-Date: 2020-06-29 22:59+0000\n" -"Last-Translator: James McKinney, 2020\n" -"Language-Team: French (https://www.transifex.com/open-contracting-partnership-1/teams/112300/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: ../../docs/guidance/map/related_processes.md:1 -msgid "Framework agreements and related processes" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:1 -msgid "" -"In this guidance we defer to the definitions given in the [UNCITRAL Model " -"Law on Public Procurement " -"(2011)](https://uncitral.un.org/en/texts/procurement/modellaw/public_procurement)." -" The model law was developed through extensive consultation and reflects the" -" procurement practices and concepts used in many different jurisdictions." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:7 -msgid "The UNCITRAL model law defines a framework agreement procedure as:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:9 -msgid "" -"Procedure conducted in two stages: a first stage to select a supplier (or " -"suppliers) or a contractor (or contractors) to be a party (or parties) to a " -"framework agreement with a procuring entity, and a second stage to award a " -"procurement contract under the framework agreement to a supplier or " -"contractor party to the framework agreement." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:11 -msgid "" -"In OCDS terms, a framework agreement procedure is a procedure involving at " -"least one framework agreement. A framework agreement is defined in UNCITRAL " -"as:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:13 -msgid "" -"Agreement between the procuring entity and the selected supplier (or " -"suppliers) or contractor (or contractors) concluded upon completion of the " -"first stage of the framework agreement procedure." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:15 -msgid "" -"In OCDS we treat “contractors” and “suppliers” as synonyms. One or more " -"buyers and one or more suppliers can participate in a framework agreement." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:17 -msgid "A procurement contract is defined in UNCITRAL as:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:19 -msgid "" -"Contract concluded between the procuring entity and a supplier (or " -"suppliers) or a contractor (or contractors) at the end of the procurement " -"proceedings." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:21 -msgid "Framework agreements can be **open** or **closed**:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:23 -msgid "**Closed framework agreement**" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:25 -msgid "" -"Framework agreement to which no supplier or contractor that is not initially" -" a party to the framework agreement may subsequently become a party." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:27 -msgid "**Open framework agreement**" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:29 -msgid "" -"Framework agreement to which a supplier (or suppliers) or a contractor (or " -"contractors) in addition to the initial parties may subsequently become a " -"party or parties." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:31 -msgid "" -"Procurement systems which provide for closed framework agreements include " -"the EU (Framework Agreements, per Directive 2014/24/EU, Article 33) and the " -"US federal system (Indefinite-delivery contracts, per Federal Acquisition " -"Regulation, Subpart 16.5). An example of a procurement system which provides" -" for open framework agreements is the EU (Dynamic Purchasing Systems, per " -"Directive 2014/24/EU, Article 33)." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:33 -msgid "" -"Framework agreement procedures can involve second-stage competition, or not:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:35 -msgid "**Framework agreement procedure with second-stage competition**" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:37 -msgid "" -"Procedure under an open framework agreement or a closed framework agreement " -"with more than one supplier or contractor in which certain terms and " -"conditions of the procurement that cannot be established with sufficient " -"precision when the framework agreement is concluded are to be established or" -" refined through a second-stage competition." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:39 -msgid "**Framework agreement procedure without second-stage competition**" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:41 -msgid "" -"Procedure under a closed framework agreement in which all terms and " -"conditions of the procurement are established when the framework agreement " -"is concluded." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:43 -msgid "" -"Competition at the second stage is limited to suppliers that are party to " -"the framework agreement. Framework agreement procedures can include a mix of" -" competitive and non-competitive second stages." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:45 -msgid "" -"The second stage of a framework agreement procedure is also known as a " -"“call-off.” Non-competitive second stages are also known as “direct call-" -"offs.” Competitive second stages are also known as “mini-competitions.”" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:47 -msgid "" -"![Types of framework " -"agreement](../../_static/png/framework_agreement/types.png)" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:49 -msgid "Modelling framework agreements in OCDS" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:51 -msgid "" -"In OCDS, a contracting process brings together, under a single identifier, " -"the information that users need to answer questions such as:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:53 -msgid "Was a contract signed as a result of this tender?" -msgstr "Un contrat a-t-il été signé à la suite de cette appel d'offres ?" - -#: ../../docs/guidance/map/related_processes.md:54 -msgid "What was the total value of spending that resulted from this award?" -msgstr "" -"Quelle a été la valeur totale des dépenses découlant de cette attribution ?" - -#: ../../docs/guidance/map/related_processes.md:55 -msgid "Was a renewal of this contract signed?" -msgstr "Le renouvellement de ce contrat a-t-il été signé ?" - -#: ../../docs/guidance/map/related_processes.md:57 -msgid "" -"In some cases, complex contracting processes cannot be represented under a " -"single identifier under OCDS' model, because:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:59 -msgid "" -"There are multiple competitive stages: for example, when a framework " -"agreement involves second-stage competitions." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:60 -msgid "" -"The procurement systems used at different stages of the process are managed " -"by different bodies, and cannot be integrated." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:62 -msgid "" -"OCDS models the first and second stages of framework agreement procedures as" -" separate contracting processes, linked together using the " -"`relatedProcesses` array. The `tender.techniques.hasFrameworkAgreement` " -"field, from the [Techniques](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/) extension, is used to " -"identify contracting processes that represent the first stage of a framework" -" agreement procedure. The presence of a related process with a " -"`.relationship` set to 'framework' is used to identify contracting processes" -" that represent the second stage of a framework agreement procedure." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:64 -msgid "" -"The following diagram shows how OCDS models a framework agreement procedure " -"with two second stages: one with competition and one without competition. " -"Grey blocks represent unused sections of the OCDS schema." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:66 -msgid "" -"![OCDS framework agreement " -"model](../../_static/png/framework_agreement/model.png)" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:68 -#: ../../docs/guidance/map/related_processes.md:150 -msgid "" -"The `tender.competitive` field, from the [Competitive](https://extensions" -".open-contracting.org/en/extensions/competitive/master/) extension, is used " -"to indicate whether the second stage involves competition." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:70 -msgid "" -"The following guidance describes how to model the different stages of a " -"framework agreement procedure in OCDS." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:72 -msgid "" -"Invitation to participate in the first stage of a framework agreement " -"procedure" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:74 -msgid "Create a release and add 'tender' to the `tag` array" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:75 -msgid "" -"For each buyer that will participate in the framework agreement, add an " -"`Organization` object to the `parties` array, add 'buyer' to its `.roles`, " -"and populate its other fields." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:76 -msgid "" -"If all potential buyers can participate, don't add them to the `parties` " -"array. Instead, add a note in the [publication policy](../publish) to " -"explain how users should interpret a contracting process with no buyers." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:77 -msgid "" -"If a single buyer will participate in the framework agreement, set the " -"`buyer.id` and `buyer.name` to match the buyer's object in the `parties` " -"array. Otherwise, don't populate `buyer`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:78 -msgid "In the `tender` section, set:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:79 -msgid "`tender.techniques.hasFrameworkAgreement` to `true`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:80 -msgid "`tender.contractPeriod` to the duration of the framework agreement." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:81 -msgid "" -"If the framework agreement is closed, set `tender.tenderPeriod.endDate` to " -"the deadline for responses to the invitation." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:82 -msgid "" -"If the framework agreement is open, set `tender.tenderPeriod.endDate` to the" -" last date that new suppliers can be added." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:84 -msgid "Setting procurement method" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:86 -msgid "" -"The `tender.procurementMethod` field uses the [method " -"codelist](../../schema/codelists.md#method) to describe the competitive " -"conditions of the framework agreement procedure as a whole, not only the " -"first stage." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:88 -msgid "Use the following criteria to determine the procurement method:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:90 -msgid "" -"If the contracting process will establish a framework agreement with a " -"single supplier and if there are no conditions to participate in the " -"contracting process, set `tender.procurementMethod` to 'open'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:91 -msgid "" -"If the contracting process limits the suppliers that can submit a request to" -" participate in the framework agreement, set `tender.procurementMethod` to " -"'limited'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:92 -msgid "Otherwise, set `tender.procurementMethod` to 'selective'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:94 -msgid "Addition of a supplier to a framework agreement" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:96 -msgid "" -"Create a release with the **same** `ocid` as the tender release and add " -"'award' to the `tag` array" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:97 -msgid "Add an `Award` object to the `awards` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:98 -msgid "For each supplier:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:99 -#: ../../docs/guidance/map/related_processes.md:142 -msgid "" -"Add an `Organization` object to the `parties` array, add 'supplier' to its " -"`.roles` and populate its other fields." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:100 -msgid "" -"Add an `OrganizationReference` object to the award's `.suppliers` array, and" -" set its `.id` and `.name` to match the supplier's object in the `parties` " -"array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:101 -msgid "" -"If no further suppliers will be added to the framework agreement, set " -"`tender.status` to 'complete'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:103 -#: ../../docs/guidance/map/related_processes.md:206 -msgid "Award of a procurement contract without second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:105 -msgid "" -"Create a release with a **new** `ocid` and add 'award' and 'contract' to the" -" `tag`" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:106 -#: ../../docs/guidance/map/related_processes.md:114 -msgid "" -"[Relate the second stage to the first stage](#relate-the-second-stage-to-" -"the-first-stage)" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:107 -#: ../../docs/guidance/map/related_processes.md:115 -msgid "[Add a buyer](#add-a-buyer)" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:108 -msgid "" -"Set `tender.id` to the `award.id`, set `tender.competitive` to `false`, and " -"set `tender.procuringEntity` if appropriate" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:109 -#: ../../docs/guidance/map/related_processes.md:121 -msgid "" -"[Add an award, contract and supplier](#add-an-award-contract-and-supplier)" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:111 -#: ../../docs/guidance/map/related_processes.md:271 -msgid "Invitation to participate in a second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:113 -msgid "" -"Create a release with a **new** `ocid` and add 'tender' to the `.tag` array" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:116 -msgid "" -"Populate the `tender` section, setting `tender.procurementMethod` to the " -"same value as in the first stage" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:118 -#: ../../docs/guidance/map/related_processes.md:289 -msgid "" -"Award of a procurement contract resulting from a second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:120 -msgid "" -"Create a release with the **same** `ocid` as the tender release *for the " -"second stage*, and add 'award' and 'contract' to the `tag`" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:123 -msgid "Updating the contract value, period or items" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:125 -msgid "" -"If the initial contract value, period or items are subsequently updated, " -"populate the contract's `.value`, `.period` and `.items` with the updated " -"values." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:127 -msgid "Common operations" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:129 -msgid "Relate the second stage to the first stage" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:131 -msgid "" -"Add a `RelatedProcess` object to the `relatedProcesses` array, set its `.id`" -" (to '1', for example), add 'framework' to its `.relationship` array, set " -"its `.scheme` to 'ocid' and set its `.identifier` to the `ocid` of the " -"invitation to participate in the framework agreement." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:133 -msgid "Add a buyer" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:135 -msgid "" -"Add an `Organization` object to the `parties` array, add 'buyer' to its " -"`.roles` and populate its other fields with the details of the buyer for " -"this specific contract." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:136 -msgid "" -"Set `buyer.id` and `buyer.name` to match the buyer's object in the `parties`" -" array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:138 -msgid "Add an award, contract and supplier" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:140 -msgid "" -"Add an `Award` object to the `awards` array and a `Contract` object to the " -"`contracts` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:141 -msgid "Set the award's `.id` and the contract's `.id` to the same value." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:143 -msgid "" -"Add an `OrganizationReference` object to the award's `.suppliers` array and " -"set `.id` and `.name` to match the supplier's object in the `parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:144 -msgid "" -"Populate the award's `.value`, `.contractPeriod` and `.items` with the " -"initial contract value, period and items." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:146 -msgid "Extensions" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:148 -msgid "" -"The `tender.techniques.hasFrameworkAgreement` field, from the " -"[Techniques](https://extensions.open-" -"contracting.org/en/extensions/techniques/master/) extension, is used to " -"identify contracting processes that represent the first stage of a framework" -" agreement procedure. More information on the nature of the framework " -"agreement can be provided via the `tender.techniques.frameworkAgreement` " -"object." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:152 -msgid "The two extensions should be declared in the package metadata:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:158 -msgid "Worked examples" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:160 -msgid "" -"The following examples show how to model two framework agreements, covering " -"a range of characteristics:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:162 -msgid "" -"A closed framework agreement established for a single buyer, with a single " -"supplier and **without** second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:163 -msgid "" -"A open framework agreement established for multiple buyers, with multiple " -"suppliers and **with** second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:165 -msgid "" -"Closed framework agreement with single buyer, single supplier and without " -"second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:167 -msgid "" -"NHS National Services Scotland (NSS) wants to establish a framework " -"agreement for the receipt, storage and distribution of seasonal influenza " -"vaccines to general practitioner practices, social care premises, vaccine " -"holding centres and community pharmacies across NHS Scotland." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:169 -#: ../../docs/guidance/map/related_processes.md:233 -msgid "Invitation to participate in the first stage" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:171 -msgid "" -"NSS issues a [contract " -"notice](https://ted.europa.eu/udl?uri=TED:NOTICE:478648-2019:TEXT:EN:HTML) " -"(tender notice), inviting suppliers to participate in the framework " -"agreement. The tender notice specifies that the framework agreement is with " -"a single operator. The framework agreement is not open, since the tender " -"notice does not specify that the procurement involves the setting up of a " -"dynamic purchasing system. The framework agreement is for a single buyer, " -"since the tender notice specifies only one contracting authority." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:173 -#: ../../docs/guidance/map/related_processes.md:237 -msgid "" -"The notice is modelled as an OCDS release with a `tag` of 'tender' and the " -"following properties:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:175 -#: ../../docs/guidance/map/related_processes.md:239 -msgid "The techniques extension is declared in the package metadata." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:176 -#: ../../docs/guidance/map/related_processes.md:240 -msgid "" -"Since this contracting process is for the set-up of a framework agreement, " -"`tender.techniques.hasFrameworkAgreement` is set to `true`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:177 -msgid "" -"Since the framework agreement will be concluded with a single supplier and " -"since any supplier is able to submit a response to the invitation to " -"participate, `tender.procurementMethod` is set to 'open'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:178 -msgid "" -"Since the framework agreement is closed, `tender.tenderPeriod` is set to the" -" deadline for responses to the invitation to participate." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:179 -msgid "" -"Since there is only one buyer, `buyer` is set to reference the buyer's " -"object in the `parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:187 -#: ../../docs/guidance/map/related_processes.md:252 -msgid "Adding a supplier to the framework agreement" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:189 -msgid "" -"NSS issues a [contract award " -"notice](https://ted.europa.eu/udl?uri=TED:NOTICE:268595-2020:TEXT:EN:HTML&src=0)" -" to announce that the framework agreement has been concluded with a single " -"supplier, Movianto UK." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:191 -#: ../../docs/guidance/map/related_processes.md:256 -msgid "" -"The notice is modelled as an OCDS release with the same `ocid` as the " -"previous release, a `tag` of 'award', and the following properties:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:193 -msgid "" -"Since no further suppliers will be added to the framework agreement, " -"`tender.status` is set to 'complete'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:194 -#: ../../docs/guidance/map/related_processes.md:259 -msgid "An `Award` object is added to the `awards` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:195 -msgid "" -"An `Organization` object is added to the `parties` array with the supplier's" -" details." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:196 -msgid "" -"An `OrganizationReference` object is added to award's `.suppliers` array to " -"reference the supplier's object in the `parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:204 -msgid "" -"The first stage of the framework agreement procedure is complete and NSS can" -" now purchase services from the supplier." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:208 -msgid "" -"NSS uses the framework agreement to place an order for the supplier to " -"receive and store ten pallets of seasonal flu vaccine. Under the terms of " -"the agreement the cost for this service is £10,000." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:210 -msgid "" -"The order represents the award of a procurement contract at the second stage" -" of the framework agreement procedure." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:212 -msgid "" -"Because there was no competition at the second stage, the new contracting " -"process has only one release, with a `tag` of 'award' and 'contract'. The " -"release has the following properties:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:214 -#: ../../docs/guidance/map/related_processes.md:277 -msgid "A new `ocid` is used." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:215 -#: ../../docs/guidance/map/related_processes.md:278 -#: ../../docs/guidance/map/related_processes.md:296 -msgid "" -"The `relatedProcesses` section is populated with a reference to the " -"contracting process for the first stage." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:216 -msgid "" -"A minimal `tender` section sets `tender.id` and sets `tender.competitive` to" -" `false`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:217 -#: ../../docs/guidance/map/related_processes.md:299 -msgid "" -"The `awards` section is populated with the initial contract value, period " -"and items." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:218 -#: ../../docs/guidance/map/related_processes.md:300 -msgid "The `contracts` section is populated and linked to the award." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:219 -msgid "" -"The `buyer`, `tender.procuringEntity`, `awards.suppliers` and `parties` " -"fields are populated with the details of the buyer, procuring entity and " -"supplier." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:227 -msgid "" -"Each additional purchase made under the framework agreement is represented " -"by a new contracting process with a new `ocid`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:229 -msgid "" -"Open framework agreement with multiple buyers, with multiple suppliers and " -"with second-stage competition" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:231 -msgid "" -"The National Procurement Agency in Chile (Chile Compra) wants to establish a" -" framework agreement for the purchase of office supplies, including paper " -"and stationery items for the different public entities across Chile." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:235 -msgid "" -"Chile Compra publishes a [tender " -"notice](https://www.mercadopublico.cl/Procurement/Modules/RFB/DetailsAcquisition.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" inviting suppliers to participate in the framework agreement. The tender " -"notice specifies that multiple suppliers can join the framework agreement. " -"The framework agreement is open, since all the framework agreements in Chile" -" involve the setting up of a dynamic purchasing system. The framework " -"agreement is for multiple buyers, since the tender notice specifies two " -"contracting authorities." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:241 -msgid "" -"Since the framework agreement will be concluded with multiple suppliers and " -"will involve second-stage competition, `tender.procurementMethod` is set to " -"'selective'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:242 -msgid "" -"Since the framework agreement is open, `tender.tenderPeriod` is set to the " -"end of the framework agreement." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:243 -msgid "" -"Since there are two buyers, the 'buyer' object is not set, and the buyers " -"are declared in the `parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:244 -msgid "" -"Since Chile Compra is the entity that manages the contracting process, " -"`tender.procuringEntity` is set to reference Chile Compra's object in the " -"`parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:254 -msgid "" -"Chile Compra issues an [award " -"notice](https://www.mercadopublico.cl/Procurement/Modules/RFB/StepsProcessAward/PreviewAwardAct.aspx?qs=TLr0Si6+0YXBLbyobaRgPQ==)" -" to announce that the framework agreement has been awarded to two suppliers:" -" Rodrigo Alejandro Vidal Campos and Comercializadora e Importadora Grupo " -"RAVC SPA." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:258 -msgid "" -"Since other suppliers are still able to submit a request to participate in " -"the framework agreement, no change is made to `tender.status`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:260 -msgid "" -"An `Organization` object is added to the `parties` array for each supplier " -"with its details." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:261 -msgid "" -"An `OrganizationReference` object is added to the award's `.suppliers` array" -" for each supplier to reference its object in the `parties` array." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:269 -msgid "" -"The framework is now established, and both buyers can now purchase items " -"from the suppliers." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:273 -msgid "" -"Servicio Local de Educación Pública Puerto Cordillera publishes a [tender " -"notice](https://www.mercadopublico.cl/CMII/Tienda/frm_GCV2_Ficha.aspx?IURL=uPteMZpbYBeM$07gdm9g$08EFecMSuZM0euS4Z$07cbeFMX_05ohEOMPbeteMZpbYBeM)," -" inviting suppliers on the framework agreement to bid to supply 200 pencils." -" This represents an invitation to participate in a second-stage competition." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:275 -#: ../../docs/guidance/map/related_processes.md:293 -msgid "The release has the following properties:" -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:279 -msgid "The `tag` is set to 'tender'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:280 -msgid "" -"The tender section includes details about the competition, and " -"`tender.competitive` is set to `true`." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:281 -msgid "" -"Since this new contracting process has a single buyer, the `buyer` is set to" -" Servicio Local de Educación Pública Puerto Cordillera." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:291 -msgid "" -"Following the invitation to participate in the second-stage competition, " -"Servicio Local de Educación Pública Puerto Cordillera awards a contract to " -"Comercializadora e Importadora Grupo RAVC SPA." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:295 -msgid "" -"The same `ocid` as the invitation to participate in the second-stage " -"competition is used." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:297 -msgid "The `tag` is set to 'award' and 'contract'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:298 -msgid "The `tender.status` is updated to 'complete'." -msgstr "" - -#: ../../docs/guidance/map/related_processes.md:301 -msgid "" -"The `awards.suppliers` and `parties` fields are populated with the details " -"of the supplier." -msgstr "" diff --git a/docs/locale/fr/LC_MESSAGES/guidance/publish/quality.po b/docs/locale/fr/LC_MESSAGES/guidance/publish/quality.po index 246597117..161e8b05d 100644 --- a/docs/locale/fr/LC_MESSAGES/guidance/publish/quality.po +++ b/docs/locale/fr/LC_MESSAGES/guidance/publish/quality.po @@ -175,8 +175,8 @@ msgstr "" #: ../../docs/guidance/publish/quality.md:39 msgid "" -"**Parity**: For each publisher, for the _time period_ and _contracting " -"authorities_ covered by the data, there isn’t another dataset by the same " +"**Parity**: For each publisher, for the _time period_ and _buyers_ " +"covered by the data, there isn’t another dataset by the same " "publisher that covers more than 25% more contracting processes." msgstr "" @@ -234,7 +234,7 @@ msgstr "" #: ../../docs/guidance/publish/quality.md:54 msgid "" -"Increase the number of contracting authorities covered in the publication" +"Increase the number of buyers covered in the publication" msgstr "" #: ../../docs/guidance/publish/quality.md:55 From 62d2a58123f64ddf2f4d98059fc54b6d2bbcad00 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Tue, 6 Jun 2023 22:47:14 -0400 Subject: [PATCH 47/51] build: Use csv-table-no-translate for examples consistently. Switch csv-table to grid for non-tabular content. --- .../pre-qualification/multi-stage.csv | 14 -------------- docs/guidance/map/localization.md | 2 +- docs/guidance/map/pre-qualification.md | 19 ++++++++++++++++--- 3 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 docs/examples/pre-qualification/multi-stage.csv diff --git a/docs/examples/pre-qualification/multi-stage.csv b/docs/examples/pre-qualification/multi-stage.csv deleted file mode 100644 index 5dbfd866a..000000000 --- a/docs/examples/pre-qualification/multi-stage.csv +++ /dev/null @@ -1,14 +0,0 @@ -First stage,Second stage -"* The buyer or procuring entity issues an invitation to participate in the process - -* Potential suppliers submit expressions of interest - -* The buyer or procuring entity assesses the expressions of interest - -* The buyer or procuring entity establishes a list of qualified or selected potential suppliers","* The buyer or procuring entity issues an invitation to bid to the potential suppliers on the list - -* Potential suppliers submit bids - -* The buyer or procuring entity evaluates the bids - -* The buyer or procuring entity awards a contract to the supplier(s)" diff --git a/docs/guidance/map/localization.md b/docs/guidance/map/localization.md index 0f219d328..d3106dea0 100644 --- a/docs/guidance/map/localization.md +++ b/docs/guidance/map/localization.md @@ -20,7 +20,7 @@ You can use the [field-level mapping template](https://www.open-contracting.org/ To localize a field title or description, edit the values columns C or D. We recommend that you keep the original title or description in brackets after your localized version. For example: -```{csv-table} +```{csv-table-no-translate} :header-rows: 1 :file: ../../examples/language_localization/localization.csv ``` diff --git a/docs/guidance/map/pre-qualification.md b/docs/guidance/map/pre-qualification.md index b79d23984..079f6dcd8 100644 --- a/docs/guidance/map/pre-qualification.md +++ b/docs/guidance/map/pre-qualification.md @@ -8,10 +8,23 @@ In single-stage procedures, buyers or procuring entities invite potential suppli But, many jurisdictions also use multi-stage procedures. Such procedures follow a process like: -```{csv-table} -:header-rows: 1 -:file: ../../examples/pre-qualification/multi-stage.csv +````{grid} 1 2 2 2 +:gutter: 2 + +```{grid-item-card} First stage +* The buyer or procuring entity issues an invitation to participate in the process +* Potential suppliers submit expressions of interest +* The buyer or procuring entity assesses the expressions of interest +* The buyer or procuring entity establishes a list of qualified or selected potential suppliers +``` + +```{grid-item-card} Second stage +* The buyer or procuring entity issues an invitation to bid to the potential suppliers on the list +* Potential suppliers submit bids +* The buyer or procuring entity evaluates the bids +* The buyer or procuring entity awards a contract to the supplier(s) ``` +```` This worked example describes 3 types of multi-stage procedure and explains how to model them in OCDS. From f08fb59919881d913e5c0a6e4872506aa149bfc6 Mon Sep 17 00:00:00 2001 From: Yohanna Lisnichuk Date: Mon, 17 Jun 2024 15:42:28 -0400 Subject: [PATCH 48/51] guidance/publish/quality: update basic and contunuous improvement criteria To match the new OCP MEL definitions --- docs/guidance/publish/quality.md | 46 ++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/docs/guidance/publish/quality.md b/docs/guidance/publish/quality.md index 382a457a1..c2e947465 100644 --- a/docs/guidance/publish/quality.md +++ b/docs/guidance/publish/quality.md @@ -36,7 +36,8 @@ All OCDS publications ought to meet the following criteria: 1. **Reviewable**: The [OCDS Data Review Tool](https://review.standard.open-contracting.org/) is able to report results on the data. 1. **Appropriate**: Concepts are published in semantic accordance with the rules of the OCDS (or registered extensions) rather than using a non-OCDS field or code. 1. **Active**: For each publisher, there is an OCDS release with a top-level `date` field value within the last 12 months. -1. **Parity**: For each publisher, for the _time period_ and _buyers_ covered by the data, there isn't another dataset by the same publisher that covers more than 25% more contracting (or planning) processes. +1. **Representative**: It describes all contracting (or planning) processes within a relevant population. For example: all contracts for a public-private partnership; all above-threshold contracts since 2020 excluding those by state-owned enterprises, etc. +1. **Relevant**: Whether at least 1 contracting process answers "who bought what from whom, for how much, when, and how". The Data Support Team is happy to review draft and newly published OCDS data and can work with publishers with advice to meet the above criteria. A publication that does not meet this minimum threshold will not be listed as a publisher by OCP as part of [OCP's regular reporting](https://www.open-contracting.org/why-open-contracting/learning/). @@ -48,31 +49,42 @@ From the minimum threshold above, we want to support publishers to continue to i Improvement on the below indicators demonstrate that the published information is becoming more complete about the contracting (or planning) processes within the publisher's jurisdiction. -1. Publish subsequent releases per OCID to show how the contracting (or planning) process is progressing over time -1. Increase the publication of historical information (based on a minimal set of date fields that appear across all sources, e.g. `tender.tenderPeriod`, `awards.date`, and `contracts.dateSigned`) -1. Increase the average coverage of fields per compiled release, for example either new fields not previously published in any release, or an increase in the use of a field across releases (e.g. very little data was published about direct awards and now more is being published about direct awards) -1. Increase the number of buyers covered in the publication -1. Increase the number of concepts covered relative to non-OCDS data +1. Increase the number of indicators covered (volume) +1. Increase the average coverage of fields per compiled release, for example either new fields not previously published in any release, or an increase in the use of a field across releases (e.g. very little data was published about direct awards and now more is being published about direct awards) (density) +1. Increase the number of buyers covered in the publication ("who") +1. Increase the number of methods covered in the publication ("how") +1. Increase the temporal coverage into the past (based on a minimal set of date fields that appear across all sources, e.g. `tender.tenderPeriod`, `awards.date`, and `contracts.dateSigned`) ("when") + +### Timeliness + +1. Publish multiple updates per contracting process +1. Decrease the delay between the information’s creation and publication + +### Accessibility + +Improvements on the below indicators demonstrate that it is becoming easier for users to access the published information. + +1. Publish a user guide or publication policy that describes the scope, at minimum +1. Publish API documentation that describes the endpoints and parameters, at minimum +1. Increase the number of access methods (API endpoints, bulk downloads) +1. Increase the number of data formats (JSON, Excel, CSV) +1. Facilitate indirect data use (e.g. search, dashboards, etc.) + +### Retrievability and legal + +1. Decrease the number of HTTP errors +1. Use a data license that conforms to the [Open Definition](https://opendefinition.org) ### Correctness Improvement on the below indicators demonstrates that the concepts are being published more correctly, improving usability. 1. Decrease the types and number of structural errors reported by the OCDS Data Review Tool, e.g. moving from 20 types of errors, each occurring more than 100,000 times, to 10 types of errors, each occurring less than 100 times -1. Decrease the average number of structural errors per release -1. Decrease the number of instances in which a concept is not published in conformance with OCDS semantics +1. Decrease the average number of structural errors per contracting (or planning) process +1. Decrease the number of conformance issues 1. Decrease the number of types of quality warnings using OCDS Pelican 1. Decrease the average number of quality warnings per release using OCDS Pelican -### Access - -Improvements on the below indicators demonstrate that it is becoming easier for users to access the published information. - -1. Publish record packages containing compiled releases -1. Decrease the number of HTTP errors -1. Increase the number of access methods (API endpoints, bulk downloads) -1. Decrease the number of license restrictions - As publishers improve, the Data Support Team can work with them to identify how they can improve on the above criteria. OCP will note whether a publisher has improved in [OCP's regular reporting](https://www.open-contracting.org/why-open-contracting/learning/). ## Advanced criteria From b341e0de69ea8034fbf164032e81e78322b5d03e Mon Sep 17 00:00:00 2001 From: Yohanna Lisnichuk Date: Mon, 17 Jun 2024 15:51:27 -0400 Subject: [PATCH 49/51] changelog: record #1697 --- docs/history/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/history/changelog.md b/docs/history/changelog.md index d69d0305d..4f43683ed 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -49,6 +49,7 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1414](https://github.com/open-contracting/standard/pull/1414) Remove the planning section from Easy releases and Change history. * [#1494](https://github.com/open-contracting/standard/pull/1497) Add guidance on preparing test data to Check your data section. * Publish: + * [#1697](https://github.com/open-contracting/standard/pull/1697) Update the Basic Criteria and Continuous improvement to match the OCP's new MEL definitions. * Merge Publication policy and Licensing pages into Publish page [#986](https://github.com/open-contracting/standard/pull/986) [#1012](https://github.com/open-contracting/standard/pull/1012). * Replace guidance on publication levels [#980](https://github.com/open-contracting/standard/pull/980) [#1013](https://github.com/open-contracting/standard/pull/1013) [#1045](https://github.com/open-contracting/standard/pull/1045). * [#1427](https://github.com/open-contracting/standard/pull/1427) Add guidance about recommended extensions. From f65bca542cfd5dd8025033719ba382d27bdf9e02 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:18:00 -0400 Subject: [PATCH 50/51] guidance/publish/quality: Better align wording with MEL --- docs/guidance/publish/quality.md | 30 +++++++++++++++--------------- docs/history/changelog.md | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/guidance/publish/quality.md b/docs/guidance/publish/quality.md index c2e947465..bdaa08c65 100644 --- a/docs/guidance/publish/quality.md +++ b/docs/guidance/publish/quality.md @@ -31,13 +31,13 @@ Understanding all of the challenges above, we understand that increasing the tra All OCDS publications ought to meet the following criteria: 1. **Registered**: The data uses a [registered OCID prefix](../../schema/identifiers.md#open-contracting-process-identifier-ocid). +1. **Reviewable**: The [OCDS Data Review Tool](https://review.standard.open-contracting.org/) can report results for the data. +1. **Appropriate**: The data is in semantic accordance with OCDS. Additional fields and codes do not overlap semantically with standardized fields and codes. +1. **Relevant**: The data answers "who bought what from whom, for how much, when, and how" for at least one contracting process. 1. **Discoverable**: It is possible to discover the data by navigating a website whose homepage is indexed by popular web search engines. -1. **Retrievable**: It is possible to automate the download of all the data, either using an HTML page listing bulk download URLs, or using only machine-readable data as input. -1. **Reviewable**: The [OCDS Data Review Tool](https://review.standard.open-contracting.org/) is able to report results on the data. -1. **Appropriate**: Concepts are published in semantic accordance with the rules of the OCDS (or registered extensions) rather than using a non-OCDS field or code. -1. **Active**: For each publisher, there is an OCDS release with a top-level `date` field value within the last 12 months. -1. **Representative**: It describes all contracting (or planning) processes within a relevant population. For example: all contracts for a public-private partnership; all above-threshold contracts since 2020 excluding those by state-owned enterprises, etc. -1. **Relevant**: Whether at least 1 contracting process answers "who bought what from whom, for how much, when, and how". +1. **Representative**: The data describes all contracting (or planning) processes within a relevant population. For example: all contracts for a public-private partnership; all above-threshold contracts since 2020 excluding those by state-owned enterprises, etc. +1. **Active**: The data contains a contracting (or planning) process release with a top-level `date` value within the previous four calendar quarters. +1. **Retrievable**: It is possible for software to download the data in full, either by using an HTML page listing bulk download URLs, or by using machine-readable data as the only input. The Data Support Team is happy to review draft and newly published OCDS data and can work with publishers with advice to meet the above criteria. A publication that does not meet this minimum threshold will not be listed as a publisher by OCP as part of [OCP's regular reporting](https://www.open-contracting.org/why-open-contracting/learning/). @@ -50,15 +50,15 @@ From the minimum threshold above, we want to support publishers to continue to i Improvement on the below indicators demonstrate that the published information is becoming more complete about the contracting (or planning) processes within the publisher's jurisdiction. 1. Increase the number of indicators covered (volume) -1. Increase the average coverage of fields per compiled release, for example either new fields not previously published in any release, or an increase in the use of a field across releases (e.g. very little data was published about direct awards and now more is being published about direct awards) (density) -1. Increase the number of buyers covered in the publication ("who") -1. Increase the number of methods covered in the publication ("how") -1. Increase the temporal coverage into the past (based on a minimal set of date fields that appear across all sources, e.g. `tender.tenderPeriod`, `awards.date`, and `contracts.dateSigned`) ("when") +1. Increase the average number of fields covered per contracting (or planning) process (density) +1. Increase the number of buyers covered ("who") +1. Increase the number of methods covered ("how") +1. Increase the temporal coverage into the past ("when") ### Timeliness 1. Publish multiple updates per contracting process -1. Decrease the delay between the information’s creation and publication +1. Decrease the delay between the information's creation and publication ### Accessibility @@ -79,11 +79,11 @@ Improvements on the below indicators demonstrate that it is becoming easier for Improvement on the below indicators demonstrates that the concepts are being published more correctly, improving usability. -1. Decrease the types and number of structural errors reported by the OCDS Data Review Tool, e.g. moving from 20 types of errors, each occurring more than 100,000 times, to 10 types of errors, each occurring less than 100 times +1. Decrease the number of types of structural errors 1. Decrease the average number of structural errors per contracting (or planning) process -1. Decrease the number of conformance issues -1. Decrease the number of types of quality warnings using OCDS Pelican -1. Decrease the average number of quality warnings per release using OCDS Pelican +1. Decrease the number of [conformance](../../schema/conformance_and_extensions) issues +1. Decrease the number of types of quality warnings +1. Decrease the average number of quality warnings per contracting (or planning) process As publishers improve, the Data Support Team can work with them to identify how they can improve on the above criteria. OCP will note whether a publisher has improved in [OCP's regular reporting](https://www.open-contracting.org/why-open-contracting/learning/). diff --git a/docs/history/changelog.md b/docs/history/changelog.md index 4f43683ed..979612d0e 100644 --- a/docs/history/changelog.md +++ b/docs/history/changelog.md @@ -49,9 +49,9 @@ Per the [normative and non-normative content and changes policy](../governance/n * [#1414](https://github.com/open-contracting/standard/pull/1414) Remove the planning section from Easy releases and Change history. * [#1494](https://github.com/open-contracting/standard/pull/1497) Add guidance on preparing test data to Check your data section. * Publish: - * [#1697](https://github.com/open-contracting/standard/pull/1697) Update the Basic Criteria and Continuous improvement to match the OCP's new MEL definitions. * Merge Publication policy and Licensing pages into Publish page [#986](https://github.com/open-contracting/standard/pull/986) [#1012](https://github.com/open-contracting/standard/pull/1012). - * Replace guidance on publication levels [#980](https://github.com/open-contracting/standard/pull/980) [#1013](https://github.com/open-contracting/standard/pull/1013) [#1045](https://github.com/open-contracting/standard/pull/1045). + * Replace publication levels guidance with data quality guidance [#980](https://github.com/open-contracting/standard/pull/980) [#1013](https://github.com/open-contracting/standard/pull/1013). + * Update data quality guidance to match [OCP Strategy 2024-2030](https://www.open-contracting.org/strategy-2024-2030/) [#1045](https://github.com/open-contracting/standard/pull/1045) [#1697](https://github.com/open-contracting/standard/pull/1697). * [#1427](https://github.com/open-contracting/standard/pull/1427) Add guidance about recommended extensions. * Various minor improvements [#1051](https://github.com/open-contracting/standard/pull/1051) [#1080](https://github.com/open-contracting/standard/pull/1080) [#1083](https://github.com/open-contracting/standard/pull/1083) [#1085](https://github.com/open-contracting/standard/pull/1085) [#1091](https://github.com/open-contracting/standard/pull/1091) [#1130](https://github.com/open-contracting/standard/pull/1130) [#1227](https://github.com/open-contracting/standard/pull/1227) [#1299](https://github.com/open-contracting/standard/pull/1299) [#1337](https://github.com/open-contracting/standard/pull/1337) [#1384](https://github.com/open-contracting/standard/pull/1384). From ea35f9a9c532d54d3f5ee64e7499a3a1e9cc6b42 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 5 Jul 2024 01:04:46 -0400 Subject: [PATCH 51/51] Build