From 9d35ec722fec0a1e7fa915c27f46d30ce8287f84 Mon Sep 17 00:00:00 2001 From: odscjen Date: Tue, 14 Nov 2023 11:32:24 +0000 Subject: [PATCH] add social.consultationMeetings and update sustainability.yaml --- docs/_static/i18n.csv | 23 ++++ docs/cost/ids/sustainability.md | 109 ++++++++++-------- docs/examples/blank.json | 2 +- docs/examples/example.json | 2 +- docs/reference/changelog.md | 2 +- docs/reference/schema.md | 56 +++++++++ mapping/sustainability.yaml | 54 +++++---- .../project-level/codelists/documentType.csv | 2 + schema/project-level/project-schema.json | 21 ++++ 9 files changed, 196 insertions(+), 75 deletions(-) diff --git a/docs/_static/i18n.csv b/docs/_static/i18n.csv index f4a76053..c2c0ca20 100644 --- a/docs/_static/i18n.csv +++ b/docs/_static/i18n.csv @@ -387,3 +387,26 @@ lobbyingMeetings/publicOfficial/organization,Organization reference,False, lobbyingMeetings/publicOfficial/organization/name,Organization name,True, lobbyingMeetings/publicOfficial/organization/id,Organization ID,True, lobbyingMeetings/publicOfficial/jobTitle,Job title,True, +social,Social,False, +social,Social,False, +social/consultationMeetings,Public consultation meetings,False, +social/consultationMeetings,Meeting,False, +social/consultationMeetings/id,ID,True, +social/consultationMeetings/date,Date,False, +social/consultationMeetings/address,Address,False, +social/consultationMeetings/address,Address,False, +social/consultationMeetings/address/streetAddress,Street address,True, +social/consultationMeetings/address/locality,Locality,True, +social/consultationMeetings/address/region,Region,True, +social/consultationMeetings/address/postalCode,Postal code,True, +social/consultationMeetings/address/countryName,Country name,True, +social/consultationMeetings/numberOfParticipants,Participant count,False, +social/consultationMeetings/publicOfficial,Public official,False, +social/consultationMeetings/publicOfficial,Public official,False, +social/consultationMeetings/publicOfficial/person,Person.,False, +social/consultationMeetings/publicOfficial/person/name,Name,True, +social/consultationMeetings/publicOfficial/organization,Organization,False, +social/consultationMeetings/publicOfficial/organization,Organization reference,False, +social/consultationMeetings/publicOfficial/organization/name,Organization name,True, +social/consultationMeetings/publicOfficial/organization/id,Organization ID,True, +social/consultationMeetings/publicOfficial/jobTitle,Job title,True, diff --git a/docs/cost/ids/sustainability.md b/docs/cost/ids/sustainability.md index d89df18e..0a8c9a8c 100644 --- a/docs/cost/ids/sustainability.md +++ b/docs/cost/ids/sustainability.md @@ -1440,7 +1440,7 @@ Disclose the occurrence of public meetings with communities and impacted groups :columns: 8 OC4IDS mapping ^^^ -See mapping for data point "Public consultation meetings" in the Social extension +See mapping for the Public consultation meetings data point in the Social module. ```json ``` @@ -1466,38 +1466,45 @@ OC4IDS mapping ^^^ For each planned disbursement: -* If the disbursement relates to a contracting processes, for example a payment from a funder to a supplier or subcontractor of a supplier, get the `ContractingProcess` in the `.contractingProcesses` array to which the disbursement relates and add a `Milestone` object to its `.summary.milestones` array. Otherwise, if the disbursement relates to the project, for example a payment from a funder to the public authority, add a `Milestone` object to the project-level `.milestones` array. -* Set the milestone's: - * `.id` incrementally - * `.status` to 'scheduled' - * `.dueDate` to the date on which the disbursement is planned to occur - * `.type` to 'payment' - * `.value` to the amount and currency of the planned disbursement +- If the disbursement relates to a contracting processes, for example a payment from a funder to a supplier or subcontractor of a supplier, get the `ContractingProcess` in the `.contractingProcesses` array to which the disbursement relates and add a `Milestone` object to its `.summary.milestones` array. Otherwise, if the disbursement relates to the project, for example a payment from a funder to the public authority, add a `Milestone` object to the project-level `.milestones` array. +- Set the milestone's: + - `.id` incrementally + - `.status` to 'scheduled' + - `.dueDate` to the date on which the disbursement is planned to occur + - `.type` to 'payment' + - `.value` to the amount and currency of the planned disbursement For each actual disbursement: -* If the disbursement relates to a contracting processes, for example a payment from a funder to a supplier or subcontractor of a supplier, get the `ContractingProcess` in the `.contractingProcesses` array to which the disbursement relates and add a `Transaction` object to its `.summary.transactions` array. Otherwise, if the disbursement relates to the project, for example a payment from a funder to the public authority, add a `Transaction` object to the project-level `.transactions` array. -* Set the transaction's: - * `.id` incrementally - * `.date` to the date of the disbursement - * `.value` to the amount and currency of the disbursement - -* Get the `Organization` in `.parties` that represents the payer. If none exists yet, [add an organization](../common.md#add-an-organization) for the payer: - * Add 'payer' to the organization's `.roles` array - * Set the transaction's `.payer` to the `.id` and `.name` of the organization -* Get the `Organization` in `.parties` that represents the payee. If none exists yet, [add an organization](../common.md#add-an-organization) for the payee: - * Add 'payee' to the organization's `.roles` array. - * Set the transaction's `.payee` to the `.id` and `.name` of the organization -* Get the `Milestone` in `.milestones` that represents that planned disbursement: - * Set its `.status` to 'met' - * Set its `.dateMet` to the date of the disbursement - * Set the transaction's `.relatedImplementationMilestone` to the `.id` and `.title` of the milestone +- If the disbursement relates to a contracting processes, for example a payment from a funder to a supplier or subcontractor of a supplier, get the `ContractingProcess` in the `.contractingProcesses` array to which the disbursement relates and add a `Transaction` object to its `.summary.transactions` array. Otherwise, if the disbursement relates to the project, for example a payment from a funder to the public authority, add a `Transaction` object to the project-level `.transactions` array. + +- Set the transaction's: + + - `.id` incrementally + - `.date` to the date of the disbursement + - `.value` to the amount and currency of the disbursement + +- Get the `Organization` in `.parties` that represents the payer. If none exists yet, [add an organization](../common.md#add-an-organization) for the payer: + + - Add 'payer' to the organization's `.roles` array + - Set the transaction's `.payer` to the `.id` and `.name` of the organization + +- Get the `Organization` in `.parties` that represents the payee. If none exists yet, [add an organization](../common.md#add-an-organization) for the payee: + + - Add 'payee' to the organization's `.roles` array. + - Set the transaction's `.payee` to the `.id` and `.name` of the organization + +- Get the `Milestone` in `.milestones` that represents that planned disbursement: + + - Set its `.status` to 'met' + - Set its `.dateMet` to the date of the disbursement + - Set the transaction's `.relatedImplementationMilestone` to the `.id` and `.title` of the milestone ```json { "milestones": [ { "id": "1", - "title": "Grant disbursement" + "title": "Grant disbursement", "status": "met", "dueDate": "2023-07-01T00:00:00Z", "dateMet": "2023-08-01T00:00:00Z", @@ -2128,16 +2135,16 @@ Project Level: For each meeting: -1. Publish the meeting invite. Add a document, set its `.documentType` to 'consultationMeetingInvite' and its `.url` to the URL at which the meeting invite is available. +1. Publish the meeting invite. Add a document, set its `.documentType` to 'consultationMeetingInvitation' and its `.url` to the URL at which the meeting invite is available. 2. Publish the meeting details. Add a `Meeting` object to the `.social.consultationMeetings` array and set: - `.id` incrementally - `.date` to the date of the meeting - `.address` to the address of the meeting -- `.participantCount` to the number of people that participated in the meeting +- `.numberOfparticipants` to the number of people that participated in the meeting -3. Publish the meeting minutes. Add a document, set its `.documentType` to 'consultationMeetingMinutes' and its `.url` to the URL at which the meeting minutes are available. +3. Publish the meeting minutes. Add a document, set its `.documentType` to 'minutes.consultationMeeting' and its `.url` to the URL at which the meeting minutes are available. ```json { "social": { @@ -2152,19 +2159,19 @@ For each meeting: "postalCode": "94043", "countryName": "United States" }, - "participantCount": 12 + "numberOfParticipants": 12 } ] }, "documents": [ { "id": "1", - "documentType": "consultationMeetingInvite", - "url": "http://example.com/consultationMeetingInvite.pdf" + "documentType": "consultationMeetingInvitation", + "url": "http://example.com/consultationMeetingInvitation.pdf" }, { "id": "2", - "documentType": "consultationMeetingMinutes", + "documentType": "minutes.consultationMeeting", "url": "http://example.com/consultationMeetingMinutes.pdf" } ] @@ -2816,16 +2823,17 @@ Project Level: For each meeting: -1. Publish the meeting agenda. Add a document, set its `.documentType` to 'lobbyingMeetingAgenda' and its `.url` to the URL at which the agenda is available. - -2. Publish the meeting details. Add a `Meeting` object to the `.lobbyingMeetings` array and set: +1. Publish the meeting details. Add a `Meeting` object to the `.lobbyingMeetings` array and set: - `.id` incrementally - `.date` to the date of the meeting - `.address` to the address of the meeting -- `.beneficiary` to the name of the organisation or interest group that ultimately benefits from the lobbying activity +- `.numberOfParticipants` to the number of people present at the meeting +- `.publicOfficial.name` to the name of the person who was representing the organization at the meeting. +- `.publicOfficial.organization` to the `.name` and `.id` of the organization the public official represents. These should match the organization's entry in the `parties` array + ` `.publicOfficial.jobTitle`to the job title of the person named in`.name\` -3. Publish the meeting minutes. Add a document, set its `.documentType` to 'lobbyingMeetingMinutes' and its `.url` to the URL at which the meeting minutes are available. +2. Publish the meeting minutes. Add a document, set its `.documentType` to 'minutes.lobbyingMeeting' and its `.url` to the URL at which the meeting minutes are available. ```json { "lobbyingMeetings": [ @@ -2834,23 +2842,28 @@ For each meeting: "date": "2024-01-01T00:00:00Z", "address": { "streetAddress": "1600 Amphitheatre Pkwy", - "locality": "Mountain View", - "region": "CA", - "postalCode": "94043", - "countryName": "United States" + "locality": "London", + "region": "London", + "postalCode": "WC1 8HG", + "countryName": "United Kingdom" }, - "beneficiary": "Arup Group" + "numberOfParticipants": 4, + "publicOfficial": { + "person": { + "name": "Brett Gliddon" + }, + "organization": { + "name": "Motorways UK", + "id": "GB-GOR-XX1234" + }, + "jobTitle": "Group General Manager Transport Services" + } } ], "documents": [ - { - "id": "1", - "documentType": "lobbyingMeetingAgenda", - "url": "http://example.com/lobbyingMeetingAgenda.pdf" - }, { "id": "2", - "documentType": "lobbyingMeetingMinutes", + "documentType": "minutes.lobbyingMeeting", "url": "http://example.com/lobbyingMeetingMinutes.pdf" } ] diff --git a/docs/examples/blank.json b/docs/examples/blank.json index 659e1772..ca3c419e 100644 --- a/docs/examples/blank.json +++ b/docs/examples/blank.json @@ -420,7 +420,7 @@ "lobbyingMeetings": [ { "id": "string", - "location": { + "address": { "streetAddress": "string", "locality": "string", "region": "string", diff --git a/docs/examples/example.json b/docs/examples/example.json index b8dd76cc..ea20694e 100644 --- a/docs/examples/example.json +++ b/docs/examples/example.json @@ -964,7 +964,7 @@ { "id": "1", "date": "2024-01-01T00:00:00Z", - "location": { + "address": { "streetAddress": "1600 Amphitheatre Pkwy", "locality": "London", "region": "London", diff --git a/docs/reference/changelog.md b/docs/reference/changelog.md index a96852fc..83c4d1d5 100644 --- a/docs/reference/changelog.md +++ b/docs/reference/changelog.md @@ -28,7 +28,7 @@ * `.transactions` * `.milestones` * `ContractingProcesses.milestones` -* [#428](https://github.com/open-contracting/infrastructure/pull/428) - add `lobbyingMeetings` field. +* [#428](https://github.com/open-contracting/infrastructure/pull/428) - add `lobbyingMeetings` and `social.consultationMeetings` fields. ### Codelists diff --git a/docs/reference/schema.md b/docs/reference/schema.md index 54a9045a..095f46b3 100644 --- a/docs/reference/schema.md +++ b/docs/reference/schema.md @@ -562,6 +562,11 @@ Each `OrganizationReference` has the following fields: :title: lobbyingMeetings/0/publicOfficial/organization ``` +```{jsoninclude} ../../docs/examples/example.json +:jsonpointer: /projects/0/social/consultationMeetings/0/publicOfficial/organization +:title: social/consultationMeetings/0/publicOfficial/organization +``` + ```` ````` @@ -613,6 +618,11 @@ Each `Address` has the following fields: :title: lobbyingMeetings/0/address ``` +```{jsoninclude} ../../docs/examples/example.json +:jsonpointer: /projects/0/social/consultationMeetings/0/address +:title: social/consultationMeetings/0/address +``` + ```` ````` @@ -1098,6 +1108,7 @@ Each `MilestoneReference` has the following fields: This sub-schema is referenced by the following properties: * [`lobbyingMeetings`](project-schema.json,,lobbyingMeetings) +* [`Social/consultationMeetings`](project-schema.json,/definitions/Social,consultationMeetings) Each `Meeting` has the following fields: @@ -1120,6 +1131,11 @@ Each `Meeting` has the following fields: :title: lobbyingMeetings ``` +```{jsoninclude} ../../docs/examples/example.json +:jsonpointer: /projects/0/social/consultationMeetings +:title: social/consultationMeetings +``` + ```` ````` @@ -1155,6 +1171,46 @@ Each `PublicOfficial` has the following fields: :title: lobbyingMeetings/0/publicOfficial ``` +```{jsoninclude} ../../docs/examples/example.json +:jsonpointer: /projects/0/social/consultationMeetings/0/publicOfficial +:title: social/consultationMeetings/0/publicOfficial +``` + +```` + +````` + +### Social + +`Social` is defined as: + +```{field-description} ../../build/current_lang/project-schema.json /definitions/Social +``` + +This sub-schema is referenced by the following properties: +* [`social`](project-schema.json,,social) + +Each `Social` has the following fields: + +`````{tab-set} + +````{tab-item} Schema + +```{jsonschema} ../../build/current_lang/project-schema.json +:pointer: /definitions/Social +:collapse: consultationMeetings +:addtargets: +``` + +```` + +````{tab-item} Examples + +```{jsoninclude} ../../docs/examples/example.json +:jsonpointer: /projects/0/social +:title: social +``` + ```` ````` diff --git a/mapping/sustainability.yaml b/mapping/sustainability.yaml index f11e6f83..ddb22929 100644 --- a/mapping/sustainability.yaml +++ b/mapping/sustainability.yaml @@ -801,7 +801,7 @@ module: Climate finance indicator: Public participation disclosure format: Disclose the occurrence of public meetings with communities and impacted groups including the minutes, number of the participants, dates and location of these meetings (E.g. Meeting 1 \[date\] \[location\] \[number of participants\] \[Document\], Meeting 2 \[date\] \[location\] \[number of participants\], \[Document\]). - mapping: See mapping for data point "Public consultation meetings" in the Social extension + mapping: See mapping for the Public consultation meetings data point in the Social module. example: '' - id: '3.20' title: Disbursement records @@ -1209,16 +1209,16 @@ For each meeting: - 1. Publish the meeting invite. Add a document, set its `.documentType` to 'consultationMeetingInvite' and its `.url` to the URL at which the meeting invite is available. + 1. Publish the meeting invite. Add a document, set its `.documentType` to 'consultationMeetingInvitation' and its `.url` to the URL at which the meeting invite is available. 2. Publish the meeting details. Add a `Meeting` object to the `.social.consultationMeetings` array and set: - `.id` incrementally - `.date` to the date of the meeting - `.address` to the address of the meeting - - `.participantCount` to the number of people that participated in the meeting + - `.numberOfparticipants` to the number of people that participated in the meeting - 3. Publish the meeting minutes. Add a document, set its `.documentType` to 'consultationMeetingMinutes' and its `.url` to the URL at which the meeting minutes are available. + 3. Publish the meeting minutes. Add a document, set its `.documentType` to 'minutes.consultationMeeting' and its `.url` to the URL at which the meeting minutes are available. example: |- { "social": { @@ -1233,19 +1233,19 @@ "postalCode": "94043", "countryName": "United States" }, - "participantCount": 12 + "numberOfParticipants": 12 } ] }, "documents": [ { "id": "1", - "documentType": "consultationMeetingInvite", - "url": "http://example.com/consultationMeetingInvite.pdf" + "documentType": "consultationMeetingInvitation", + "url": "http://example.com/consultationMeetingInvitation.pdf" }, { "id": "2", - "documentType": "consultationMeetingMinutes", + "documentType": "minutes.consultationMeeting", "url": "http://example.com/consultationMeetingMinutes.pdf" } ] @@ -1714,16 +1714,17 @@ For each meeting: - 1. Publish the meeting agenda. Add a document, set its `.documentType` to 'lobbyingMeetingAgenda' and its `.url` to the URL at which the agenda is available. - - 2. Publish the meeting details. Add a `Meeting` object to the `.lobbyingMeetings` array and set: + 1. Publish the meeting details. Add a `Meeting` object to the `.lobbyingMeetings` array and set: - `.id` incrementally - `.date` to the date of the meeting - `.address` to the address of the meeting - - `.beneficiary` to the name of the organisation or interest group that ultimately benefits from the lobbying activity + - `.numberOfParticipants` to the number of people present at the meeting + - `.publicOfficial.name` to the name of the person who was representing the organization at the meeting. + - `.publicOfficial.organization` to the `.name` and `.id` of the organization the public official represents. These should match the organization's entry in the `parties` array + ` `.publicOfficial.jobTitle`to the job title of the person named in`.name\` - 3. Publish the meeting minutes. Add a document, set its `.documentType` to 'lobbyingMeetingMinutes' and its `.url` to the URL at which the meeting minutes are available. + 2. Publish the meeting minutes. Add a document, set its `.documentType` to 'minutes.lobbyingMeeting' and its `.url` to the URL at which the meeting minutes are available. example: |- { "lobbyingMeetings": [ @@ -1732,23 +1733,28 @@ "date": "2024-01-01T00:00:00Z", "address": { "streetAddress": "1600 Amphitheatre Pkwy", - "locality": "Mountain View", - "region": "CA", - "postalCode": "94043", - "countryName": "United States" + "locality": "London", + "region": "London", + "postalCode": "WC1 8HG", + "countryName": "United Kingdom" }, - "beneficiary": "Arup Group" + "numberOfParticipants": 4, + "publicOfficial": { + "person": { + "name": "Brett Gliddon" + }, + "organization": { + "name": "Motorways UK", + "id": "GB-GOR-XX1234" + }, + "jobTitle": "Group General Manager Transport Services" + } } ], "documents": [ - { - "id": "1", - "documentType": "lobbyingMeetingAgenda", - "url": "http://example.com/lobbyingMeetingAgenda.pdf" - }, { "id": "2", - "documentType": "lobbyingMeetingMinutes", + "documentType": "minutes.lobbyingMeeting", "url": "http://example.com/lobbyingMeetingMinutes.pdf" } ] diff --git a/schema/project-level/codelists/documentType.csv b/schema/project-level/codelists/documentType.csv index e103f0fa..7a425c89 100644 --- a/schema/project-level/codelists/documentType.csv +++ b/schema/project-level/codelists/documentType.csv @@ -65,3 +65,5 @@ designReport,Project design report,"A record of the justification for the design paymentCertificate,Payment certificate,A document certifying that the work specified on a supplier's estimate or invoice is complete and that payment to the supplier is approved.,OC4IDS escalationApproval,Escalation approval,Documentation of one or more approved escalations of the contract price during the project life-cycle.,OC4IDS minutes.lobbyingMeeting,Lobbying meeting minutes,"A record of the issues discussed, agreements reached and decisions taken at a lobbying meeting.",OC4IDS +minutes.consultationMeeting,Consultation meeting minutes,"A record of the issues discussed, agreements reached and decisions taken at a public consultation meeting.",OC4IDS +consultationMeetingInvitation,Consultation meeting inviation,A document detailing the occurrence of a public consultation meeting relating to the project.,OC4IDS diff --git a/schema/project-level/project-schema.json b/schema/project-level/project-schema.json index 233d2a99..7bc9015a 100644 --- a/schema/project-level/project-schema.json +++ b/schema/project-level/project-schema.json @@ -306,6 +306,11 @@ }, "uniqueItems": true, "minItems": 1 + }, + "social": { + "title": "Social", + "description": "Information about the social impact of the project and actions the project will take to mitigate potentially negative impacts on adjacent populations and project workers.", + "$ref": "#/definitions/Social" } }, "definitions": { @@ -2078,6 +2083,22 @@ "type": "string" } } + }, + "Social": { + "title": "Social", + "description": "Information about the social impact of the project and actions the project will take to mitigate potentially negative impacts on adjacent populations and project workers.", + "type": "object", + "properties": { + "consultationMeetings": { + "title": "Public consultation meetings", + "description": "Information about public consultation meetings held during the project preparation stage.", + "type": "array", + "items": { + "$ref": "#/definitions/Meeting" + } + } + }, + "minProperties": 1 } }, "minProperties": 1