Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Write guidance for common operations #54

Closed
ColinMaudry opened this issue Aug 17, 2021 · 68 comments
Closed

Write guidance for common operations #54

ColinMaudry opened this issue Aug 17, 2021 · 68 comments
Labels
documentation tidy-up Issues that we need to check mappings against

Comments

@ColinMaudry
Copy link
Member

ColinMaudry commented Aug 17, 2021

Throughout this issue, comments for which the relevant updates to guidance.yaml are done are marked with a ✔️


The same way we did for standard forms, in order to avoid repetitions, we need to document the guidance that applies to any eForms document.

@ColinMaudry ColinMaudry self-assigned this Aug 17, 2021
@ColinMaudry
Copy link
Member Author

ColinMaudry commented Aug 18, 2021

I think the common operations for eForms and Standard forms should be a differente documents (= different URL). We'll need to think of how we publish eForms next to the standard forms:

  • they share the 'eu' profile: we add an 'eForms' link in the nav menu, and we move 'Common operations' at the same level as the form guidance, under 'eForms' and 'Standard forms' respectively (at the top).
  • or they have their own profile

I think the first option works well. Any opinion on this @jpmckinney?

@jpmckinney
Copy link
Member

I prefer the first option as well.

@ColinMaudry
Copy link
Member Author

ColinMaudry commented Dec 15, 2021

Related to #77, we must update the part about referencing a previous publication to cover the case where the referenced publication is a release or procedure that lead to a direct award (current procedure).

@jpmckinney jpmckinney removed the eforms label Jul 7, 2022
@jpmckinney
Copy link
Member

Copying draft from a file that had been committed to this repo (ultimately it must be committed to https://github.com/open-contracting-extensions/european-union instead):

# Common operations

To avoid repetition in the guidance, we refer and link to the following common operations.

## Create a release

1. Set [`id`](https://standard.open-contracting.org/latest/en/schema/identifiers/#release-id) to the notice number (`/*/cbc:ID`).
1. Set `initiationType` to 'tender'.
1. Set `ocid` as described below.

The notice's `ocid` will either be a new `ocid`, or the same `ocid` as the previous publication concerning this procedure. The notice's `ocid` will be a new `ocid` if one of the following is true:

* The notice is the first publication concerning the procedure.
* The previous publication is a prior information notice or a periodic indicative notice  (PIN) that has multiple `/*/cac:ProcurementProjectLot` elements, it potentially lead to the launch of several procedures, each with its own `ocid`.
* The notice is a contract award notice (CAN) for an award within a framework agreement or dynamic purchasing system.

If none is true, then set the notice's `ocid` to be the same as the previous publication's `ocid`. Otherwise, set the notice's [`ocid`](https://standard.open-contracting.org/latest/en/schema/identifiers/#contracting-process-identifier-ocid) by prepending your [OCID prefix](https://standard.open-contracting.org/latest/en/guidance/build/#register-an-ocid-prefix) to a unique identifier of your choice (e.g. a [version 4 UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) or a suitable system-internal identifier).

If the notice is a contract award notice for an award within a framework agreement or dynamic purchasing system, you must also add a `RelatedProcess` object to the `relatedProcesses` array, set its `.id` to '1', add 'framework' to its `.relationship` array, set its `.scheme` to 'ocid', and set its `.identifier` to the `ocid` of the procedure that set up the framework agreement or dynamic purchasing system.

## Reference a previous publication

If the *Previous publication concerning this procedure* is neither a prior information notice nor a periodic indicative notice (PIN), or if the PIN has a single `/*/cac:ProcurementProjectLot` (*Object*) element, then discard `/*/cbc:ID`. In this case, the *previous publication concerning this procedure* is the OCDS release with the same `ocid` as this release and with the nearest earlier `date` to this release.

Otherwise, if the *Previous publication concerning this procedure* is a prior information notice or periodic indicative notice that has multiple `/*/cac:ProcurementProjectLot` (*Object*) elements, add a `RelatedProcess` object to the `relatedProcesses` array, set its `.id` to '1', add 'planning' to its `.relationship` array, set its `.scheme` to 'eu-oj' (or to a scheme of your choice if outside the EU), and map `/*/cbc:ID` to `.identifier`.

## Add a party

Add an `Organization` object to the `parties` array, and set its `.id` (string). **A party's `.id` needs to be consistent across all notices.** It is recommended to implement a register of organization identifiers to assign consistent identifiers. For more information, [see the OCDS documentation](https://standard.open-contracting.org/latest/en/schema/identifiers/#organization-ids).

## Add a bids statistic

Add a `BidsStatistic` object to the `bids.statistics` array, and set its `.id` (string) sequentially across all notices for this procedure. For example, if a first F03 notice for a given procedure has nine bids statistics, it uses `id`'s '1' through '9'. A second F03 notice for the same procedure then uses `id`'s '10' and up, etc.

## Convert a date to ISO format

[OCDS dates](https://standard.open-contracting.org/latest/en/schema/reference/#date) must be formatted according to ISO 8601 and include a time component.

If a time component is missing from a date, use 'T23:59:59Z' for end dates and 'T00:00:00Z' for other dates.

If a timezone component is present in the date (e.g. '+02:00'), preserve it. Otherwise, use the UTC timezone indicate 'Z'.

The final value would be '2020-10-21T23:59:59Z' or '2020-10-21T00:00:00Z'.

## Lot identifiers

eForms relies in the structure of the XML document to imply the related lot. For a given XML element, retrieving the corresponding lot identifier (if any) can done with the following Xpath:

```text
ancestor::cac:ProcurementProjectLot/cac:ID
```

## Groups of lots

 ## Procedure type

The possible values for BT-105 Procedure type ([official code list](https://op.europa.eu/en/web/eu-vocabularies/concept-scheme/-/resource?uri=http://publications.europa.eu/resource/authority/procurement-procedure-type#)) and the corresponding guidance in OCDS:

| Procedure type code | OCDS guidance `|
|---------------|-------------------|
| Competitive dialog (`comp-dial`)              | Set `tender.procurementMethod` to 'selective', and set `tender.procurementMethodDetails` to 'Competitive dialogue' |
| Competitive tendering (`comp-tend`)           |                   |
| Innovation partnership (`innovation`)         | Set `tender.procurementMethod` to 'selective', and set `tender.procurementMethodDetails` to 'Innovation partnership' |
| Negotiated with prior publication of a call for competition / competitive with negotiation (`neg-w-call`)    | Set `tender.procurementMethod` to 'selective', and set `tender.procurementMethodDetails` to 'Negotiated with prior publication of a call for competition / competitive with negotiation'                   |
| Negotiated without prior call for competition (`neg-wo-call`)   |                   |
| Open (`open`)          |  Set `tender.procurementMethod` to 'open', and set `tender.procurementMethodDetails` to 'Open procedure' | 
| Other multiple stage procedure (`oth-mult`)   |                   |
| Other single stage procedure (`oth-single`)   |  |
| Restricted (`restricted`)                     | Set `tender.procurementMethod` to 'selective', and set `tender.procurementMethodDetails` to 'Restricted procedure' |

## Get a translation

No guidance yet.

@jpmckinney
Copy link
Member

jpmckinney commented Jul 7, 2022

Noting that parts of PINs are separate OCIDs, like in the old forms. See also open-contracting-extensions/european-union#94 about how bundled award notices might yield multiple OCIDs.

@duncandewhurst
Copy link
Contributor

The guidance on referencing a previous publication is referenced from the following business terms in guidance.yaml so we should check that the guidance covers the cases in those mappings:

  • BT-125(i)-Lot
  • BT-125(i)-Part
  • BT-1251-Lot
  • BT-1251-Part
  • BT-1252-Procedure

@jpmckinney
Copy link
Member

I think the guidance for fields ending in -Lot can be written as usual, but for those ending in -Part we might need to refer to some shared guidance for parts on how to apply the -Lot guidance.

@duncandewhurst
Copy link
Contributor

Sounds good.

There's a suggestion in #71 (comment) to add similar guidance for groups of lots.

@duncandewhurst
Copy link
Contributor

From @jpmckinney via Slack:

In eForms, I’m not sure how they build the part/lot hierarchy, but I assume it needs to support the same options as TED, so we should continue to split parts into different OCIDs. This can be covered in a general guidance page.

@odscjen
Copy link
Contributor

odscjen commented Aug 10, 2022

✔️

The following business terms all refer to identifiers so will also need covered by the common guidance:

  • BT-137
  • BT-137-LotsGroup
  • BT-137-Part
  • BT-13713-LotResult
  • BT-13714-Tender
  • BT-13716-notice
  • BT-1375

@duncandewhurst
Copy link
Contributor

We'll also need guidance on setting award and contract identifiers and linking awards and contracts. eForms and OCDS have different approaches: in eForms, a LotResult refers 'forwards' to one or more SettledContracts; in OCDS, a Contract refers 'backwards' to an Award.

There might also be issues with clashing identifiers since the eForms SDK states that both regular identifiers (e.g. BT-150-Contract) and 'technical' identifiers (e.g. OPT-316) should, rather than must, be unique (see Identifiers).

This is relevant to BT-150-Contract and likely to some of the other business terms that appear as part of SettledContract.

@jpmckinney
Copy link
Member

jpmckinney commented Aug 18, 2022

Just noting here (as I don't know where else to make a note of it) that SDK 1.0.0 now has a machine-readable file for all 40 notice types, in case we ever need it: https://github.com/OP-TED/eForms-SDK/blob/1.0.0/notice-types/notice-types.json

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Aug 28, 2022

✔️

BT-5011 references the common operations guidance for adding a party. For now, I've left the link as common_operations.md#add-a-party.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Aug 29, 2022

✔️

In eForms, data on beneficial owners is not nested within the organization they relate to so, similar to the guidance for linking awards and contracts, we'll need guidance on identifying which organization in the parties array to add beneficial ownership information to. This is relevant to the following BTs:

  • id: BT-500-UBO
  • id: BT-503-UBO
  • id: BT-506-UBO
  • id: BT-507-UBO
  • id: BT-510(a)-UBO
  • id: BT-510(b)-UBO
  • id: BT-510(c)-UBO
  • id: BT-512-UBO
  • id: BT-513-UBO
  • id: BT-514-UBO
  • id: BT-706-UBO
  • id: BT-739-UBO
  • id: OPT-160-UBO
  • id: OPT-202-UBO

Proposed guidance

Get the person for an ultimate beneficial owner
Get the Organization in parties whose id is equal to the value of ancestor::efac:Organization/efac:Company/cac:PartyIdentification/cbc:ID. If none exists yet:

  1. Add an Organization to parties
  2. Set its .id to the value of ancestor::efac:Organization/efac:Company/cac:PartyIdentification/cbc:ID.

Get the Person in the organization's .beneficialOwners array whose id is equal to the value of ancestor::efac:UltimateBeneficialOwner/cbc:ID. If none exists yet

  1. Add a Person to .beneficialOwners
  2. Set its .id to the value of ancestor::efac:UltimateBeneficialOwner/cbc:ID.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Aug 29, 2022

✔️

Edit: I realised that ordering is important for the BTs listed below so I instead repeated the following guidance for each BT:

...combine the values of cbc:StreetName, cbc:AdditionalStreetName and each cac:AddressLine/cbc:Line in that order, separating each string with ', ' (comma and space) and map to the address's .streetAddress.


To avoid repeating instructions about concatenating strings, we might also want to add some general guidance along the lines of:

If more than one business term maps to a string field, concatenate the values using an appropriate separator.

This is relevant to:

* BT-510(a), (b) and (c)
* BT-5101(a), (b) and (c)

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Sep 5, 2022

✔️

Several BTs map to properties of organizations so we'll need guidance on how to identify the correct organization in OCDS. The guidance for touchpoints includes setting .identifier because there is no business term for a touchpoint's legal identifier.

Proposed guidance

Get the organization for a company
Get the Organization in parties whose id is equal to the value of ancestor::efac:Organization/efac:Company​/cac:PartyIdentification​/cbc:ID. If none exists yet:

  1. Add an Organization to parties
  2. Set its .id to the value of the ancestor::efac:Organization/efac:Company​/cac:PartyIdentification​/cbc:ID.

Get the organization for a touchpoint
Get the Organization in parties whose id is equal to the value of ancestor::efac:TouchPoint​/cac:PartyIdentification​/cbc:ID. If none exists yet:

  1. Add an Organization to parties
  2. Set its .id to the value of ancestor::efac:TouchPoint/cac:PartyIdentification​/cbc:ID
  3. Set its .identifier.id to the value of ancestor::efac:Organization/efac:Company/cac:PartyLegalEntity/cbc:CompanyID
  4. Set its .identifier.scheme.

@jpmckinney
Copy link
Member

jpmckinney commented Sep 6, 2022

Looks good! Maybe style as a numbered list after "If none exists yet:", as the paragraph contains a lot of long XML, which makes it a bit harder to scan.

@duncandewhurst
Copy link
Contributor

Looks good! Maybe style as a numbered list after "If none exists yet:", as the paragraph contains a lot of long XML, which makes it a bit harder to scan.

I've updated the proposed guidance.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Sep 22, 2022

✔️

The draft guidance for BT-10-Procedure-Buyer, BT-11-Procedure-Buyer, BT-610-Procedure-Buyer and BT-740-Procedure-Buyer begins with:

Get the Organization object for the buyer...

However, how to actually do that isn't explained, nor is what to do if the Organization object doesn't exist yet. In keeping with the proposed guidance in #54 (comment), I think that this sentence should link to the following common operations guidance:

Get the organization for the buyer
Get the Organization in parties whose .id is equal to the value of ancestor::cac:ContractingParty/cac:Party/cac:PartyIdentification​/cbc:ID. If none exists yet:

  • Add an Organization to parties
  • Set its .id to the value of ancestor::cac:ContractingParty/cac:Party/cac:PartyIdentification​/cbc:ID
  • Add 'buyer' to it's .roles

Does that sound good?

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Sep 22, 2022

✔️

We'll also need guidance on setting award and contract identifiers and linking awards and contracts.

For terms in BG-137: Procedure Lot Result (efac:LotResult) that map to awards, I think we should preface the guidance with a link to the following common operations guidance:

Get the award for a LotResult
Get the Award in awards whose id is equal to the value of ancestor::efac:LotResult/cbc:ID. If none exists yet:

  • Add an Award to awards
  • Set its .id to the value of ancestor::efac:LotResult/cbc:ID
  • Add the value of ancestor::efac:LotResult/efac:TenderLot​/cbc:ID to its .relatedLots

Edit: For BT-142-LotResult at least, we also need the following:

Get the lot for a LotResult
Get the Lot in tender.lots whose id is equal to the value of ancestor::efac:LotResult/efac:TenderLot​/cbc:ID. If none exists yet, add a Lot to tender.lots and set its id to the value of ancestor::efac:LotResult/efac:TenderLot​/cbc:ID.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Sep 22, 2022

✔️

## Add a bids statistic

Add a `BidsStatistic` object to the `bids.statistics` array, and set its `.id` (string) sequentially across all notices for this procedure. For example, if a first F03 notice for a given procedure has nine bids statistics, it uses `id`'s '1' through '9'. A second F03 notice for the same procedure then uses `id`'s '10' and up, etc.

This guidance should also include setting BidsStatistic.relatedLot.

The guidance is referenced in:

  • BT-710-LotResult
  • BT-711-LotResult
  • BT-759-LotResult
  • BT-760-LotResult

Edit: Proposed guidance

Add a bids statistic

Add a BidsStatistic object to the bids.statistics array, set its .relatedLot to the value of ancestor::efac:LotResult/efac:TenderLot​/cbc:ID and set its .id (string) sequentially across all notices for this procedure. For example, if a first notice for a given procedure has nine bids statistics, it uses id's '1' through '9'. A second notice for the same procedure then uses id's '10' and up, etc.

@duncandewhurst
Copy link
Contributor

I've added myself to the assignees for this issue to work on adding the content to output/content/eforms/operations.md.

@odscjen are you done with the task mentioned in #54 (comment)?

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Jan 24, 2023

I've added the content from this issue and the related issues to output/content/eforms/operations.md.

I removed some sections from the original draft in #54 (comment):

  • Lot identifiers - because guidance is provided for each individual case
  • Groups of lots - because the heading was empty
  • Procedure type - because guidance is provided in the mapping for BT-105-Procedure
  • Get a translation - because the heading was empty

Since the page is not intended to be read from start to finish, I decided not to group the common operations under any sub-headings, but I did try and order the operations logically: generally applicable first, then organization related, then by stage of the contracting process.

To do:

@odscjen
Copy link
Contributor

odscjen commented Jan 25, 2023

I've added myself to the assignees for this issue to work on adding the content to output/content/eforms/operations.md.

@odscjen are you done with the task mentioned in #54 (comment)?

Still working slowly through it!

@jpmckinney
Copy link
Member

jpmckinney commented Feb 3, 2023

Get a translation - because the heading was empty

  • A couple places refer to operations.md#get-a-translation

@jpmckinney
Copy link
Member

Since the page is not intended to be read from start to finish, I decided not to group the common operations under any sub-headings

After seeing how it renders, I've added some subheadings, just to make the menu easier to scan.

@odscjen
Copy link
Contributor

odscjen commented Feb 8, 2023

Re. operations.md#get-a-translation, the only terms that refer to it are BT-160-Tender and BT-162-Tender. In both cases the pre-existing TED guidance also refers to this translation guidance so I'm guessing that when the eForms guidance was authored it just took it from that.

The guidance is:

.Set its .title to the translation of 'Revenue from the payment of prizes and payments by the buyer'.

And

Set its .title to the translation of 'Revenue from the payment of fees and fines by the users'.

The guidance in the current TED based OCDS EU profile for Get a translation is:

Download "Form labels R2.0.9 (zip)" from TED schemas
To translate a label from English to another language:

  1. Find the row with the label in the "EN" column
  2. Take the value in the desired column of the same row

To translate a label from another language to English:

  1. Find the row with the label in the appropriate column
  2. Take the value in the "EN" column of the same row

Which still mostly works for eForms (although it's not strictly speaking a label we're asking the user to translate, just a sentence we've given them) but as it's only applicable for these 2 terms and these 2 sentences is it worth having in common guidance or should we just add a summarized version of the above to guidance.yaml for BT-160 and BT-162, or just change the line that references get-a-translation to:

set it's .title to 'Revenue from the payment of prizes and payments by the buyer' or equivalent translation in the EU language of the notice.

@odscjen
Copy link
Contributor

odscjen commented Feb 8, 2023

✔️

Do we need common guidance for "Get the item for the ProcurementProjectLot (schemeName='Part') or ProcurementProject"?

In going through checking that "Get the item for the ProcurementProjectLot" was correctly referenced I realised there's quite a few pieces of guidance that go something like:

BT-26(a)-Part
This field maps to the same objects as created for BT-263-Part.
For each cac:AdditionalCommodityClassification/cbc:ItemClassificationCode, add or update a corresponding Classification object in the item's .additionalClassifications, capitalize and map to the classification's .scheme.

Where the associated mapping guidance for BT-263-Part reads very similarly. So both refer to "the item" without ever stating how the item should be created in the first place and where to find it.

Related there are pieces of guidance like:

BT-262-Procedure
Map to the item's .classification.id.

Where this is the sole piece of guidance and so there is nothing that could tell a user how to set the item's .id which is a required field.

It looks like BT-26(a), BT-262 and BT-263 are the only terms that would need this as they're the only ones with an item specified at the tender level rather than the lot level.

EDIT:
something similar came up with BT-723 etc where an item needs adding to an award and we solved it as:

This field maps to the same Item objects as created for OPT-155-LotResult, OPT-156-LotResult and BT-735-LotResult. If no Item objects were created for ancestor::efac:ProcurementDetails:
- Get the award for the LotResult.
- Add an Item object to its items array.
- Set the item's .id incrementally.

So rather than common guidance we could just change BT-26(a)-Part to:

This field maps to the same Item objects as created for BT-263-Part. If no Item objects were created for ancestor::AdditionalCommodityClassification:

  • Add an Item object to the tender.items array.
  • Set the item's id incrementally
    For each cac:AdditionalCommodityClassification/cbc:ItemClassificationCode, add or update a corresponding Classification object in the item's .additionalClassifications, capitalize and map to the classification's .scheme.

With similar changes to BT-263, and actually BT-262 is also the same item so should be linked to with both these terms. EDIT actually BT-262 is the same item as BT-26(m), and BT-26(a) and BT-263 are the same Classification object. All are updated now.

@odscjen
Copy link
Contributor

odscjen commented Feb 8, 2023

I''ve assigned this to myself just while I go through guidance.yaml to check the references to the common guidance are all present and consistent.

I've now gone through all of the guidance and I think all the common references are being correctly referred to (with the exception of my most recent comments on translation and tender.items)

@jpmckinney
Copy link
Member

as it's only applicable for these 2 terms and these 2 sentences is it worth having in common guidance or should we just add a summarized version of the above to guidance.yaml for BT-160 and BT-162, or just change the line that references get-a-translation

eForms has business-term_##.xml translation files here: https://github.com/OP-TED/eForms-SDK/tree/develop/translations

The translation is in a key like business-term|description|BT-160, which for 160 is:

The estimated revenue coming from the buyer who granted the concession (e.g. prizes and payments).

and 162:

The estimated revenue coming from the users of the concession (e.g. fees and fines).

Since the steps might be a bit long, I guess it's worth having common guidance, even if only used twice.

@jpmckinney
Copy link
Member

Good catch on BT-26(a), BT-262 and BT-263 - seems fine to take the same approach as BT-723, etc. (unless you think it's better or less repetitive to change both sets of mappings to refer to new common operations).

@jpmckinney
Copy link
Member

Just checking - do you mean only the -Procedure forms of those BT-26xxx?

@odscjen
Copy link
Contributor

odscjen commented Feb 9, 2023

Just checking - do you mean only the -Procedure forms of those BT-26xxx?

the -Procedure and the -Part forms of those BT's

@odscjen
Copy link
Contributor

odscjen commented Feb 9, 2023

✔️

Since the steps might be a bit long, I guess it's worth having common guidance, even if only used twice.

sounds good. Looking at that page it looks as though they're now providing translations for more than just labels. So theoretically the guidance for "Get a translation" could be used in many more places, e.g. anywhere that the guidance says to map a code to a field. But I'm assuming we don't want to go down that route? In which case how does the following sound?

Get a translation

Download "business-term_XX.xml" from eForms SDK translations for the language required, where XX is the 2 letter language code. Find the row with the key "business-term | description | BT-##" for the business term required (for example "business-term | description | BT-160") and take the value from the entry.

@jpmckinney

@odscjen
Copy link
Contributor

odscjen commented Feb 9, 2023

✔️

Good catch on BT-26(a), BT-262 and BT-263 - seems fine to take the same approach as BT-723, etc. (unless you think it's better or less repetitive to change both sets of mappings to refer to new common operations).

I think the same approach as BT-723 is the best way to go. Because -Part and -Procedure have different XPATH absolute head terms there would need to be two new common guidance pieces which wouldn't actually cut down that much on the repetition.

And now I'm noticing that the 3 pieces of common guidance that reference "... for a ProcurementProjectLot" should probably be changed to "...for a ProcurementProjectLot[cbc:ID/@schemeName='Lot']" as otherwise it could also be read as applying to -Part terms which we decided to treat the same as -Procurement and not map to lots.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Feb 13, 2023

* [ ]  Review the guidance for referencing a previous publication, noting [Write guidance for common operations #54 (comment)](https://github.com/open-contracting/european-union-support/issues/54#issuecomment-994592239)

The linked comment is:

Related to #77, we must update the part about referencing a previous publication to cover the case where the referenced publication is a release or procedure that lead to a direct award (current procedure).

#77 has since been resolved and, if I understood correctly, referencing the previous publication is covered by the mapping of BT-1252 so there's no need to update the common operations guidance.

@duncandewhurst duncandewhurst removed their assignment Feb 13, 2023
@odscjen
Copy link
Contributor

odscjen commented Feb 15, 2023

regarding #54 (comment)

We'll also need to author common operations guidance for documents (BT-708, BT-737, BT-15) and participation fees (BT-14, BT-615, BT-707).

common operations for referencing documents has been created and is referenced in those 3 BTs but there's no common guidance for participation fees and each of the 3 referenced BT's just have some repetition in their guidance. Are we happy to leave them like that or should we pull out the common guidance and put it into operations?

@duncandewhurst
Copy link
Contributor

I think it would be good to author a common operation: Get the participation fee for a document. The guidance will need to address both the -Lot and -Part fields.

@odscjen
Copy link
Contributor

odscjen commented Feb 24, 2023

@jpmckinney have you had a chance to look at #54 (comment) and the proposed "Get a translation" in the common guidance?

@odscjen
Copy link
Contributor

odscjen commented Feb 24, 2023

@duncandewhurst how does this sound:

Get the participation fee for a document
Get the ParticipationFee object in either tender or tender.lots whose .id is equal to cac:CallForTendersDocumentReference\cbc:ID. If none exists yet,
- If ancestor::cac:ProcurementProjectLot[cbc:ID/@schemeName='Part'] add a ParticipationFee object to tender and set its .id to the value of ancestor::cac:CallForTendersDocumentReference\cbc:ID.
- If ancestor::cac:ProcurementProjectLot[cbc:ID/@schemeName='Lot'], Get the lot for the ProcurementProjectLot, add a ParticipationFee object to the lot and set its .id to the value of ancestor::cac:CallForTendersDocumentReference\cbc:ID.

@jpmckinney
Copy link
Member

jpmckinney commented Feb 24, 2023

theoretically the guidance for "Get a translation" could be used in many more places, e.g. anywhere that the guidance says to map a code to a field. But I'm assuming we don't want to go down that route?

Correct - we only want to get translations where absolutely necessary. In the old forms, we translated only four strings, in cases where we needed a prefix to rationale (now covered by BT-200 codelist) or a title (equivalent of BT-160 and 162).

Guidance looks fine - I think they key doesn't have any spaces, though.

@duncandewhurst
Copy link
Contributor

duncandewhurst commented Feb 27, 2023

✔️

@duncandewhurst how does this sound:

Looks good, but the XPath syntax isn't quite right, the paths are missing the .participationFees part and I would move the 'If' clause to the beginning so that it's clear when to look in tender and when to look in tender.lots:

Get the participation fee for a document
If the value of ancestor::cac:ProcurementProjectLot[cbc:ID/@schemeName] is 'Part', get the ParticipationFee object in tender.participationFees whose .id is equal to cac:CallForTendersDocumentReference/cbc:ID. If none exists yet, add a ParticipationFee object to tender.participationFees and set its .id to the value of ancestor::cac:CallForTendersDocumentReference/cbc:ID.

If the value of ancestor::cac:ProcurementProjectLot[cbc:ID/@schemeName] is 'Lot', get the lot for the ProcurementProjectLot and get the ParticipationFee object in the lot's .participationFees whose .id is equal to cac:CallForTendersDocumentReference/cbc:ID. If none exists yet, add a ParticipationFee object to the lot's .participationFees and set its .id to the value of ancestor::cac:CallForTendersDocumentReference/cbc:ID.

@odscjen odscjen removed their assignment Feb 28, 2023
@odscjen
Copy link
Contributor

odscjen commented Feb 28, 2023

I think there are no outstanding things to be dealt with in this issue now so I'm closing it, reopen if necessary

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation tidy-up Issues that we need to check mappings against
Projects
None yet
Development

No branches or pull requests

4 participants