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/.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/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);
+}
diff --git a/docs/examples/release_schema_reference/release_package.json b/docs/examples/release_schema_reference/release_package.json
index 2d401a453..0ed33e3e6 100644
--- a/docs/examples/release_schema_reference/release_package.json
+++ b/docs/examples/release_schema_reference/release_package.json
@@ -196,6 +196,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/history/changelog.md b/docs/history/changelog.md
index aeac48a1f..d69d0305d 100644
--- a/docs/history/changelog.md
+++ b/docs/history/changelog.md
@@ -164,10 +164,18 @@ 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.
+* `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.
@@ -176,10 +184,6 @@ 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
@@ -188,7 +192,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) `planning.budget.project` and `planning.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`
@@ -197,8 +201,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`
* [#1684](https://github.com/open-contracting/standard/pull/1684) `planning.project`
@@ -211,56 +216,55 @@ 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 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`
* `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`
* [#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`
+ * [#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`
* [#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.
@@ -272,9 +276,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) `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")
+ * [#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.
@@ -282,8 +287,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.
@@ -323,7 +328,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
@@ -340,7 +344,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
@@ -404,13 +408,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).
@@ -431,7 +435,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.
@@ -482,7 +486,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.
@@ -494,12 +498,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.
@@ -650,7 +654,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.
@@ -668,8 +672,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
diff --git a/docs/schema/reference.md b/docs/schema/reference.md
index df3da00e2..698b4754c 100644
--- a/docs/schema/reference.md
+++ b/docs/schema/reference.md
@@ -557,12 +557,6 @@ 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.
-
-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.
-
-Other unit classification schemes can be used, including those in the [unitClassificationScheme codelist](codelists.md#unit-classification-scheme).
-
````{admonition} Example
:class: hint
@@ -578,6 +572,22 @@ Other unit classification schemes can be used, including those in the [unitClass
:collapse: value
```
+#### ImmediateContainer
+
+````{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
+```
+
### Classification
````{admonition} Example
@@ -715,6 +725,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
@@ -723,3 +742,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
+```
diff --git a/manage.py b/manage.py
index a5c17f94e..117fa426d 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/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'."
diff --git a/schema/dereferenced-release-schema.json b/schema/dereferenced-release-schema.json
index d5b98a4e6..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"
@@ -3685,13 +3685,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.",
+ "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. 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": {
"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"
@@ -3701,7 +3701,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"
@@ -3709,7 +3709,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -4063,7 +4063,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",
@@ -4072,6 +4072,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -9580,13 +9644,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.",
+ "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. 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": {
"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"
@@ -9596,7 +9660,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"
@@ -9604,7 +9668,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -9958,7 +10022,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",
@@ -9967,6 +10031,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -12070,13 +12198,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.",
+ "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. 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": {
"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"
@@ -12086,7 +12214,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"
@@ -12094,7 +12222,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -12448,7 +12576,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",
@@ -12457,6 +12585,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -17030,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"
@@ -19099,13 +19291,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.",
+ "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. 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": {
"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"
@@ -19115,7 +19307,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"
@@ -19123,7 +19315,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -19477,7 +19669,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",
@@ -19486,6 +19678,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -24990,13 +25246,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.",
+ "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. 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": {
"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"
@@ -25006,7 +25262,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"
@@ -25014,7 +25270,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -25368,7 +25624,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",
@@ -25377,6 +25633,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -27474,13 +27794,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.",
+ "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. 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": {
"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"
@@ -27490,7 +27810,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"
@@ -27498,7 +27818,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -27852,7 +28172,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",
@@ -27861,6 +28181,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -38586,13 +38970,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.",
+ "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. 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": {
"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"
@@ -38602,7 +38986,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"
@@ -38610,7 +38994,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -38964,7 +39348,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",
@@ -38973,6 +39357,70 @@
}
}
},
+ "immediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -40487,13 +40935,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.",
+ "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. 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": {
"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"
@@ -40503,7 +40951,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"
@@ -40511,7 +40959,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -40865,7 +41313,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",
@@ -40874,6 +41322,146 @@
}
}
},
+ "ImmediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which an item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "versionId": true,
+ "minLength": 1
+ }
+ },
+ "minProperties": 1
+ },
"Link": {
"title": "Link",
"description": "A reference to a related resource.",
@@ -40991,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 d16a6bba1..46f3ea6d8 100644
--- a/schema/release-schema.json
+++ b/schema/release-schema.json
@@ -1627,10 +1627,15 @@
]
},
"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.",
+ "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. 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": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which the item is in direct contact. Also known as: presentation, presentation form, package.",
+ "$ref": "#/definitions/ImmediateContainer"
+ },
"deliveryLocations": {
"title": "Delivery locations",
"description": "The locations where activity related to the opportunity, contract or license will be delivered.",
@@ -2737,13 +2742,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.",
+ "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. 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": {
"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"
@@ -2753,7 +2758,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"
@@ -2761,7 +2766,7 @@
},
"name": {
"title": "Name",
- "description": "Name of the unit.",
+ "description": "The name of the unit.",
"type": [
"string",
"null"
@@ -2774,7 +2779,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",
@@ -2783,6 +2788,80 @@
}
}
},
+ "ImmediateContainer": {
+ "title": "Immediate container",
+ "description": "The innermost packaging with which an item is in direct contact. Also known as: presentation, presentation form, package.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "title": "Name",
+ "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"
+ ],
+ "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 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"
+ ],
+ "codelist": "unitClassificationScheme.csv",
+ "openCodelist": true,
+ "minLength": 1
+ },
+ "id": {
+ "title": "ID",
+ "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"
+ ],
+ "versionId": true,
+ "minLength": 1
+ }
+ },
+ "minProperties": 1
+ },
"Link": {
"title": "Link",
"description": "A reference to a related resource.",
@@ -2900,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"
diff --git a/schema/versioned-release-validation-schema.json b/schema/versioned-release-validation-schema.json
index eb952f77b..55b8de369 100644
--- a/schema/versioned-release-validation-schema.json
+++ b/schema/versioned-release-validation-schema.json
@@ -1934,6 +1934,9 @@
"unit": {
"$ref": "#/definitions/Unit"
},
+ "immediateContainer": {
+ "$ref": "#/definitions/ImmediateContainer"
+ },
"deliveryLocations": {
"type": "array",
"items": {
@@ -3244,6 +3247,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": {
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