XML changes
Version 2017.05
Part V should not be shown in an open procedure #67
In case Part I: Information concerning the procurement procedure and the contracting authority or contracting entity
,
section Information about the procurement procedure
receives an additional member called Type of procedure
.
List of values and its impact on Part V specified below: * Not specified (because it may not be selected) * Open procedure * Restricted procedure (Part V will be shown) * Competitive procedure with negotiation (Part V will be shown) * Competitive dialogue (Part V will be shown) * Innovation partnership (Part V will be shown)
Code list for these values are taken from version 1.0.2 and specified below:
Values of Procedure Type:
Title | Value |
---|---|
Not specified |
null |
Open procedure |
1 |
Restricted procedure |
2 |
Competitive procedure with negotiation |
10 |
Competitive dialogue |
C |
Innovation partnership |
11 |
Procedure Type is not stored in XML.
In case "Part III: Exclusion Grounds", section "A: Grounds relating to criminal convictions", applying for all grounds regarding criminal convictions, there is no option to add (conviction) information for multiple representatives, in case of a conviction.
Requirement subgroups with id "f5276600-a2b6-4ff6-a90e-b31fe19dae41" became "unbounded" using functionality implemented for unbounded groups Able to add multiple references in selection criteria.
"subgroups": [
{
"name": "G1.1",
"id": "f5276600-a2b6-4ff6-a90e-b31fe19dae41",
"fulfillmentIndicator": "true",
"unbounded": "true"
}
]
This change provides possibility to implement multiple fields group: - Date of conviction - Reason - Who has been convicted - Length of the period of exclusion - Have you taken measures to demonstrate your reliability ("Self-Cleaning") - Description
<ccv:RequirementGroup>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">7c637c0c-7703-4389-ba52-02997a055bd7</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">974c8196-9d1c-419c-9ca9-45bb9f5fd59a</cbc:ID>
<cbc:Description>Your answer?</cbc:Description>
<ccv:Response>
<ccv-cbc:Indicator>true</ccv-cbc:Indicator>
</ccv:Response>
</ccv:Requirement>
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">f5276600-a2b6-4ff6-a90e-b31fe19dae41</cbc:ID>
<ccv:Requirement responseDataType="DATE">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">ecf40999-7b64-4e10-b960-7f8ff8674cf6</cbc:ID>
<cbc:Description>Date of conviction</cbc:Description>
<ccv:Response>
<cbc:Date>2017-05-04</cbc:Date>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">7d35fb7c-da5b-4830-b598-4f347a04dceb</cbc:ID>
<cbc:Description>Reason</cbc:Description>
<ccv:Response>
<cbc:Description>ert</cbc:Description>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">c5012430-14da-454c-9d01-34cedc6a7ded</cbc:ID>
<cbc:Description>Who has been convicted</cbc:Description>
<ccv:Response>
<cbc:Description>rt</cbc:Description>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="PERIOD">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">9ca9096f-edd2-4f19-b6b1-b55c83a2d5c8</cbc:ID>
<cbc:Description>Length of the period of exclusion</cbc:Description>
<ccv:Response>
<cac:Period>
<cbc:Description>ert</cbc:Description>
</cac:Period>
</ccv:Response>
</ccv:Requirement>
<ccv:RequirementGroup>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">5f9f09f7-f701-432c-9fdc-c22c124a74c9</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">20c5361b-7599-4ee6-b030-7f8323174d1e</cbc:ID>
<cbc:Description>Have you taken measures to demonstrate your reliability ("Self-Cleaning")?</cbc:Description>
<ccv:Response>
<ccv-cbc:Indicator>false</ccv-cbc:Indicator>
</ccv:Response>
</ccv:Requirement>
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">74e6c7b4-757b-4b40-ada6-fad6a997c310</cbc:ID>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">7b07904f-e080-401a-a3a1-9a3efeeda54b</cbc:ID>
<cbc:Description>Please describe them</cbc:Description>
<ccv:Response/>
</ccv:Requirement>
</ccv:RequirementGroup>
</ccv:RequirementGroup>
</ccv:RequirementGroup>
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">f5276600-a2b6-4ff6-a90e-b31fe19dae41</cbc:ID>
<ccv:Requirement responseDataType="DATE">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">ecf40999-7b64-4e10-b960-7f8ff8674cf6</cbc:ID>
<cbc:Description>Date of conviction</cbc:Description>
<ccv:Response>
<cbc:Date>2017-05-04</cbc:Date>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">7d35fb7c-da5b-4830-b598-4f347a04dceb</cbc:ID>
<cbc:Description>Reason</cbc:Description>
<ccv:Response>
<cbc:Description>ert</cbc:Description>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">c5012430-14da-454c-9d01-34cedc6a7ded</cbc:ID>
<cbc:Description>Who has been convicted</cbc:Description>
<ccv:Response>
<cbc:Description>rt</cbc:Description>
</ccv:Response>
</ccv:Requirement>
<ccv:Requirement responseDataType="PERIOD">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">9ca9096f-edd2-4f19-b6b1-b55c83a2d5c8</cbc:ID>
<cbc:Description>Length of the period of exclusion</cbc:Description>
<ccv:Response>
<cac:Period>
<cbc:Description>ert</cbc:Description>
</cac:Period>
</ccv:Response>
</ccv:Requirement>
<ccv:RequirementGroup>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">5f9f09f7-f701-432c-9fdc-c22c124a74c9</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">20c5361b-7599-4ee6-b030-7f8323174d1e</cbc:ID>
<cbc:Description>Have you taken measures to demonstrate your reliability ("Self-Cleaning")?</cbc:Description>
<ccv:Response>
<ccv-cbc:Indicator>false</ccv-cbc:Indicator>
</ccv:Response>
</ccv:Requirement>
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">74e6c7b4-757b-4b40-ada6-fad6a997c310</cbc:ID>
<ccv:Requirement responseDataType="DESCRIPTION">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">7b07904f-e080-401a-a3a1-9a3efeeda54b</cbc:ID>
<cbc:Description>Please describe them</cbc:Description>
<ccv:Response/>
</ccv:Requirement>
</ccv:RequirementGroup>
</ccv:RequirementGroup>
</ccv:RequirementGroup>
</ccv:RequirementGroup>
In Part I (Information About Publication section) we need to provide the possibility to add a national reference number to help economic operators in a country to identify it on a national portal.
To fulfill this requirement we need to add a new XML element as in the following example:
<cac:AdditionalDocumentReference>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeAgencyName="DG GROW (European Commission)" schemeVersionID="1.1">The national number here</cbc:ID>
<cbc:DocumentTypeCode listID="ReferencesTypeCodes" listAgencyID="EU-COM-GROW" listVersionID="1.0">NATIONAL_NUMBER</cbc:DocumentTypeCode>
<cac:Attachment>
<cac:ExternalReference>
<cbc:Description>-</cbc:Description>
</cac:ExternalReference>
</cac:Attachment>
</cac:AdditionalDocumentReference>
In Part IV (Selection Criteria) Section B (Economic and Financial Standing), currently the economic operator can only specify a Year for the following requirements:
1 | General Yearly Turnover and |
2 | Specific Yearly Turnover |
This change is about allowing the EO to specify instead the fiscal year by selecting a Start Date and an End Date. In the new definition the QUANTITY_YEAR field will be replaced by a START_DATE and END_DATE fields as follows:
"groups": [
{
"name": "G1",
"id": "c0cd9c1c-e90a-4ff9-bce3-ac0fe31abf16",
"unbounded": "true",
"requirements": [
{
"id": "42ec8116-31a7-4118-8612-5b04f5c8bde7",
"description": "Start Date",
"responseType": "DATE",
"espdCriterionFields": [
"startDate"
]
},
{
"id": "3641b897-f9f0-4d90-909a-b6d4c4b1d645",
"description": "End Date",
"responseType": "DATE",
"espdCriterionFields": [
"endDate"
]
},
{
"id": "42db0eaa-d2dd-48cb-83ac-38d73cab9b50",
"description": "Amount",
"responseType": "AMOUNT",
"espdCriterionFields": [
"amount",
"currency"
]
}
]
},
For both the EO and the representatives of the EO a postcode can be specified. In case of the EO, this information is represented by the XML element espd-cac:ContractingParty.Party.PostalAddress.Postbox, in case of the EO representative the element espd-cac:EconomicOperatorParty.Party.Person.ResidenceAddress.Postbox is used.
As usage of the Postbox element in semantically wrong in both cases (i.e. a postbox number refers to a post office box registered for postal delivery by a postal service provider). The element […].PostalZone will be used instead.
Example:
<espd:ESPDResponse>
.....
<espd-cac:EconomicOperatorParty>
<espd-cbc:SMEIndicator>false</espd-cbc:SMEIndicator>
<espd-cac:RepresentativeNaturalPerson>
<cac:PowerOfAttorney>
<cac:AgentParty>
<cac:Person>
<cac:Contact/>
<cac:ResidenceAddress/>
</cac:Person>
</cac:AgentParty>
</cac:PowerOfAttorney>
</espd-cac:RepresentativeNaturalPerson>
<cac:Party>
<cac:PartyName>
<cbc:Name></cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:PostalZone>1050</cbc:PostalZone>(1)
<cac:Country>
<cbc:IdentificationCode listID="CountryCodeIdentifier" listAgencyID="EU-COM-GROW" listName="CountryCodeIdentifier" listVersionID="1.0.2">GR</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:Contact/>
</cac:Party>
</espd-cac:EconomicOperatorParty>
...
</espd:ESPDResponse>
1 | XML element Postbox has been replaced by PostalZone |
The xml element cbc:VersionID until now contains ESPD Service version. This will be modified so that xml element cbc:VersionID will contain ESPD Data Exchange Model version.
Example:
<espd:ESPDResponse>
.....
<cbc:VersionID schemeAgencyID="EU-COM-GROW">1.0.2</cbc:VersionID> (1)
.....
</espd:ESPDResponse>
1 | XML element cbc:VersionID contains the ESPD Data Exchange Model version. |
Version 2016.12
The possibility of adding an unlimited number of criterion references for certain criteria introduces a new way of
defining them. Each requirement group that can be repeated as many times as desired (called henceforth unbounded
requirement group
) will be defined only once in the criterion definition and its definition will be cloned as many
times as necessary. This means that the requirement group definition will appear only once in the ESPD Request
while
on the ESPD Response
it can be present multiple times.
The new definition of the selection criteria from part C (For works contracts: performance of works of the specified
type
, For supply contracts: performance of deliveries of the specified type
, For service contracts: performance of
services of the specified type
will contain only two groups, as follows:
"groups": [
{
"name": "G1",
"id": "96f00020-0a25-402e-b850-2378e83b5695",
"unbounded": "true",
"requirements": [
{
"id": "ab05ff3b-f3e1-4441-9b43-ee9912e29e92",
"description": "Description",
"responseType": "DESCRIPTION"
},
{
"id": "42db0eaa-d2dd-48cb-83ac-38d73cab9b50",
"description": "Amount",
"responseType": "AMOUNT"
},
{
"id": "42ec8116-31a7-4118-8612-5b04f5c8bde7",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "3641b897-f9f0-4d90-909a-b6d4c4b1d645",
"description": "End Date",
"responseType": "DATE
},
{
"id": "a92536ab-6783-40bb-a037-5d31f421fd85",
"description": "Recipients",
"responseType": "DESCRIPTION"
}
]
},
{
"name": "G2",
"id": "9026e403-3eb6-4705-a9e9-e21a1efc867d",
"requirements": [
{
"id": "9dae5670-cb75-4c97-901b-96ddac5a633a",
"description": "Is this information available electronically?",
"responseType": "INDICATOR"
}
],
"subgroups": [
{
"name": "G2.1",
"id": "0a166f0a-0c5f-42b0-81e9-0fc9fa598a48",
"fulfillmentIndicator": "true",
"requirements": [
{
"id": "03bb1954-13ae-47d8-8ef8-b7fe0f22d700",
"description": "URL",
"responseType": "EVIDENCE_URL"
},
{
"id": "e2d863a0-60cb-4e58-8c14-4c1595af48b7",
"description": "Code",
"responseType": "CODE"
},
{
"id": "5cbf74d9-a1e2-4233-921d-8b298842ee7d",
"description": "Issuer",
"responseType": "DESCRIPTION"
}
]
}
]
}
}
Please notice that we don’t have 5 groups with the same structure but different ids anymore, but only one, G1
, and
this group has a new property, unbounded
set to true
. This property will not be saved in the XML files but is used
internally by the ESPD application
to handle this scenario.
In order to support the ESPD Responses
generated by versions prior to 2016.12
we need to define some mappings so
that the old requirement group and requirement ids point only to one primary group or requirement. Whenever we encounter
one of the ids from idsToBeReplaced
we will use the entity referenced by the replacementId
.
"requirementGroupMappings": [
{
"replacementId": "96f00020-0a25-402e-b850-2378e83b5695", // use only this requirement group from now on
"idsToBeReplaced": [ // whenever we see these requirement groups we will use the new one above
"c48572f9-47bf-423a-9885-2c78ae9ca718",
"2c7a3581-2954-4142-8c1b-5c52d7c7e9b7",
"d67a6126-dd6d-4ed2-bda7-214a19e13a63",
"159fc086-cf34-48a4-a41b-afed62661383"
]
}
],
"requirementMappings": [
{ // mapping for 'Description'
"replacementId": "ab05ff3b-f3e1-4441-9b43-ee9912e29e92", // use only this requirement from now on
"idsToBeReplaced": [ // whenever we see these requirements we will use the new one above
"927def36-1fa3-4018-8b45-7ee2c5b1e0af",
"e6ca4034-cfee-499a-9a47-c4f2862ef4d0",
"b1640c24-b405-443e-bf5e-d7771f66aab6",
"587129bc-a5e1-43be-94ac-6e5366d30c67"
]
},
{ // mapping for 'Amount'
"replacementId": "42db0eaa-d2dd-48cb-83ac-38d73cab9b50",
"idsToBeReplaced": [
"4acd0a02-c267-4d05-b456-c0565c2ffd46",
"28fb4b41-5178-4b79-ba24-d9a62fa4a658",
"9f278e42-aa1d-4b2e-97cd-832248aa5393",
"cc1a0b1e-dbfd-4313-a4fb-2e543b05549b"
]
},
{ // mapping for 'Start date'
"replacementId": "42ec8116-31a7-4118-8612-5b04f5c8bde7",
"idsToBeReplaced": [
"8d0e5e16-85ed-4730-a784-d4db8f439c0c",
"c953e635-580b-4d7c-a30c-2edbde3b8fdf",
"9b263b45-fc63-4b01-a3dc-cb9c95dda449",
"056cba1d-986b-4164-92b6-26a1cbdf0690"
]
},
{ // mapping for 'End date'
"replacementId": "3641b897-f9f0-4d90-909a-b6d4c4b1d645",
"idsToBeReplaced": [
"4c842551-fb07-4a13-91e6-5653820f7e80",
"822934ff-da94-40d2-a799-f29ba7bba2b0",
"7a95ddbd-05e8-4af4-973f-1b8d05f71e0f",
"dd71df86-3ad5-42dd-add5-9bd51dc88f05"
]
},
{ // mapping for 'Recipients'
"replacementId": "a92536ab-6783-40bb-a037-5d31f421fd85",
"idsToBeReplaced": [
"c8babafa-b6fa-4e14-8749-d913d8f1d33b",
"5157e1ff-d272-4382-98a9-6953f5a15300",
"a84ea948-cf03-47b5-b4cf-a35f49910d10",
"38a4802f-0b93-4e78-ad4e-2a057e1aa578"
]
}
]
This update will affect the Economic Operator criterion EO registered
with id 9b19e869-6c89-4cc4-bd6c-ac9ca8602165
.
The requirement Not applicable
with id 67fd1dde-2a0a-486e-9469-79c78796fc22
will be removed from the parent
criterion and will not be displayed and understood anymore by the ESPD service.
All the Information is available electronically
requirement groups will contain one extra requirement, called Issuer
.
Please keep in mind that this modification will affect a lot of criteria.
For the exclusion criteria, the requirement will have this definition:
{
"id": "c3ccfa31-0c5e-4e3a-a3fd-db9fb83d78d4",
"description": "Issuer",
"responseType": "DESCRIPTION"
}
And for the selection criteria, the requirement will include the following definition:
{
"id": "5cbf74d9-a1e2-4233-921d-8b298842ee7d",
"description": "Issuer",
"responseType": "DESCRIPTION"
}
The economic operator (other) criteria will contain the requirement below:
{
"id": "d8e1e818-d67b-4bb9-9aeb-4c10943a8342",
"description": "Issuer",
"responseType": "DESCRIPTION"
}
A requirement for Description
has to be added to the Conflict of interest due to its participation in the procurement
procedure
exclusion criterion, inside a requirement group G1.1.
"subgroups": [
{
"name": "G1.1",
"id": "73f0fe4c-4ed9-4343-8096-d898cf200146",
"fulfillmentIndicator": "true",
"requirements": [
{
"id": "e098da8e-4717-4500-965f-f882d5b4e1ad",
"description": "Please describe them",
"responseType": "DESCRIPTION",
}
]
}
]
We need to add the self-cleaning
subgroup to the section D exclusion criterion Purely national grounds
.
Consequently, the G1.1 criterion group will contain the following subgroup structure:
{
"name": "G1.1.1",
"id": "5f9f09f7-f701-432c-9fdc-c22c124a74c9",
"requirements": [
{
"id": "20c5361b-7599-4ee6-b030-7f8323174d1e",
"description": "Have you taken measures to demonstrate your reliability (\"Self-Cleaning\")?",
"responseType": "INDICATOR"
}
],
"subgroups": [
{
"name": "G1.1.1.1",
"id": "74e6c7b4-757b-4b40-ada6-fad6a997c310",
"fulfillmentIndicator": "true",
"requirements": [
{
"id": "7b07904f-e080-401a-a3a1-9a3efeeda54b",
"description": "Please describe them",
"responseType": "DESCRIPTION"
}
]
}
]
}
The structure of the General yearly turnover
and Specific yearly turnover
selection criteria has been simplified.
They don’t need the following requirements:
-
Your answer?
with id15335c12-ad77-4728-b5ad-3c06a60d65a4
-
Please provide the requested data below
with id3a6fefd4-f458-4d43-97fb-0725fce5dce2
Subsequently, the G1 group e1886054-ada4-473c-9afc-2fde82c24cf4
and its internal structure have disappeared.
The new structure looks like this:
"groups": [
{
"name": "G1",
"id": "c0cd9c1c-e90a-4ff9-bce3-ac0fe31abf16",
"requirements": [
{
"id": "5aacceb3-280e-42f1-b2da-3d8ac7877fe9",
"description": "Year",
"responseType": "QUANTITY_YEAR"
},
{
"id": "42db0eaa-d2dd-48cb-83ac-38d73cab9b50",
"description": "Amount",
"responseType": "AMOUNT"
}
]
},
{
"name": "G2",
"id": "99c9d014-d0e1-473d-b6d4-a8549f2b19fa",
"requirements": [
{
"id": "49a57870-7fb8-451f-a7af-fa0e7f8b97e7",
"description": "Year",
"responseType": "QUANTITY_YEAR"
},
{
"id": "4acd0a02-c267-4d05-b456-c0565c2ffd46",
"description": "Amount",
"responseType": "AMOUNT"
}
]
},
{
"name": "G3",
"id": "9f0e291f-05c9-4cb6-bc50-4c2d3b2049b2",
"requirements": [
{
"id": "9d0cf1cb-27bc-4747-8579-47dce4d8d490",
"description": "Year",
"responseType": "QUANTITY_YEAR"
},
{
"id": "28fb4b41-5178-4b79-ba24-d9a62fa4a658",
"description": "Amount",
"responseType": "AMOUNT"
}
]
},
{
"name": "G4",
"id": "67b8d7fa-a0aa-43d6-a30b-e15b95326df2",
"requirements": [
{
"id": "17a7353d-a7a4-43ee-9cc8-b9db83eeafb3",
"description": "Year",
"responseType": "QUANTITY_YEAR"
},
{
"id": "9f278e42-aa1d-4b2e-97cd-832248aa5393",
"description": "Amount",
"responseType": "AMOUNT"
}
]
},
{
"name": "G5",
"id": "c8c09a0c-b7a7-4271-bb6a-80f1c0e988f7",
"requirements": [
{
"id": "34825634-5151-4e31-af1b-7eafadcf15be",
"description": "Year",
"responseType": "QUANTITY_YEAR"
},
{
"id": "cc1a0b1e-dbfd-4313-a4fb-2e543b05549b",
"description": "Amount",
"responseType": "AMOUNT"
}
]
},
{
"name": "G6",
"id": "9026e403-3eb6-4705-a9e9-e21a1efc867d",
"requirements": [
{
"id": "9dae5670-cb75-4c97-901b-96ddac5a633a",
"description": "Is this information available electronically?",
"responseType": "INDICATOR"
}
],
"subgroups": [
{
"name": "G2.1",
"id": "0a166f0a-0c5f-42b0-81e9-0fc9fa598a48",
"fulfillmentIndicator": "true",
"requirements": [
{
"id": "03bb1954-13ae-47d8-8ef8-b7fe0f22d700",
"description": "URL",
"responseType": "EVIDENCE_URL"
},
{
"id": "e2d863a0-60cb-4e58-8c14-4c1595af48b7",
"description": "Code",
"responseType": "CODE"
}
]
}
]
}
]
}
The Average yearly turnover
and Specific average turnover
criteria should match the paper version.
Therefore, the structure of their G1 group with id e1886054-ada4-473c-9afc-2fde82c24cf4
changes completely.
They will contain only two requirements on the first group, Number of years
and Average turnover
.
{
"name": "G1",
"id": "e1886054-ada4-473c-9afc-2fde82c24cf4",
"requirements": [
{
"id": "b98ffd05-6572-4b07-a521-693a1754ed46",
"description": "Number of years",
"responseType": "QUANTITY_INTEGER"
},
{
"id": "217637ba-6bdb-4c73-a38f-27fe0e71d9be",
"description": "Average turnover",
"responseType": "AMOUNT"
}
]
}
The following criteria will need to contain two date requirements instead of one: Start date
and End date
.
-
For works contracts: performance of works of the specified type
; -
For supply contracts: performance of deliveries of the specified type
; -
For service contracts: performance of services of the specified type
.
Please keep in mind that the other requirements will remain, only the Date
requirement will be split into two new ones.
"groups": [
{
"name": "G1",
"id": "96f00020-0a25-402e-b850-2378e83b5695",
"requirements": [
...,
{
"id": "42ec8116-31a7-4118-8612-5b04f5c8bde7",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "3641b897-f9f0-4d90-909a-b6d4c4b1d645",
"description": "End Date",
"responseType": "DATE"
},
...
]
},
{
"name": "G2",
"id": "c48572f9-47bf-423a-9885-2c78ae9ca718",
"requirements": [
...,
{
"id": "8d0e5e16-85ed-4730-a784-d4db8f439c0c",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "4c842551-fb07-4a13-91e6-5653820f7e80",
"description": "End Date",
"responseType": "DATE"
},
...
]
},
{
"name": "G3",
"id": "2c7a3581-2954-4142-8c1b-5c52d7c7e9b7",
"requirements": [
...,
{
"id": "c953e635-580b-4d7c-a30c-2edbde3b8fdf",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "822934ff-da94-40d2-a799-f29ba7bba2b0",
"description": "End Date",
"responseType": "DATE"
},
...
]
},
{
"name": "G4",
"id": "d67a6126-dd6d-4ed2-bda7-214a19e13a63",
"requirements": [
...,
{
"id": "9b263b45-fc63-4b01-a3dc-cb9c95dda449",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "7a95ddbd-05e8-4af4-973f-1b8d05f71e0f",
"description": "End Date",
"responseType": "DATE"
},
...
]
},
{
"name": "G5",
"id": "159fc086-cf34-48a4-a41b-afed62661383",
"requirements": [
...,
{
"id": "056cba1d-986b-4164-92b6-26a1cbdf0690",
"description": "Start Date",
"responseType": "DATE"
},
{
"id": "dd71df86-3ad5-42dd-add5-9bd51dc88f05",
"description": "End Date",
"responseType": "DATE"
},
...
]
}
Version 2016.08
Part II - Information concerning the economic operator
, section A - Information about the economic operator
contains the VAT number if applicable
and If no VAT number is applicable, please indicate another national
identification number, if required and applicable
fields.
In order to be able to distinguish between the VAT Number
and National Number
in the XML we are now using the
schemeID
attribute of the cac:EconomicOperatorParty.cac:Party.cac:PartyIdentification
element. The two possible
values which should be used are:
-
VAT_Number
-
National_Number
Example:
<espd-cac:EconomicOperatorParty>
<espd-cbc:SMEIndicator>false</espd-cbc:SMEIndicator>
<espd-cac:RepresentativeNaturalPerson>
<cac:PowerOfAttorney>
<cac:AgentParty>
<cac:Person>
<cac:Contact/>
<cac:ResidenceAddress/>
</cac:Person>
</cac:AgentParty>
</cac:PowerOfAttorney>
</espd-cac:RepresentativeNaturalPerson>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeID="National_Number">123456</cbc:ID> (1)
</cac:PartyIdentification>
<cac:PartyIdentification>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeID="VAT_Number">BE0999999999</cbc:ID> (2)
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Dell</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cac:Country>
<cbc:IdentificationCode listID="CountryCodeIdentifier" listAgencyID="EU-COM-GROW" listName="CountryCodeIdentifier" listVersionID="1.0.2">AT</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:Contact/>
</cac:Party>
</espd-cac:EconomicOperatorParty>
1 | The national number |
2 | The VAT number |
The id of the G1.1
group belonging to the Part III - Exclusion grounds
, section A - Grounds relating to
criminal convictions
has been changed to f5276600-a2b6-4ff6-a90e-b31fe19dae41
due to a conflict with the
G2.1(URL/Code)
group of the Information available electronically
parent group.
Example:
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">f5276600-a2b6-4ff6-a90e-b31fe19dae41</cbc:ID>
<ccv:Requirement responseDataType="DATE">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">ecf40999-7b64-4e10-b960-7f8ff8674cf6</cbc:ID>
<cbc:Description>Date of conviction</cbc:Description>
<ccv:Response>
<cbc:Date>2015-12-09</cbc:Date>
</ccv:Response>
</ccv:Requirement>
...
</ccv:RequirementGroup>
Version 2016.07
A new field called Consortium name
was added in Part II - Information concerning the economic operator
,
Section C - Information about reliance on the capacities of other entities
.
The information is saved inside the <espd-cbc:EconomicOperatorGroupName/>
element on an ESPD Response
.
Example:
<espd:ESPDResponse>
<cbc:UBLVersionID schemeAgencyID="OASIS-UBL-TC">2.1</cbc:UBLVersionID>
<cbc:CustomizationID schemeName="CustomizationID" schemeAgencyID="BII" schemeVersionID="3.0">urn:www.cenbii.eu:transaction:biitrns092:ver3.0</cbc:CustomizationID>
<cbc:ID schemeID="ISO/IEC 9834-8:2008 - 4UUID" schemeAgencyID="EU-COM-GROW" schemeAgencyName="DG GROW (European Commission)" schemeVersionID="1.1">3679123f-de23-4703-8161-cf6c8d9b8ad9</cbc:ID>
<cbc:CopyIndicator>false</cbc:CopyIndicator>
<cbc:VersionID schemeAgencyID="EU-COM-GROW">2016.08.01</cbc:VersionID>
<cbc:IssueDate>2016-05-30</cbc:IssueDate>
<cbc:IssueTime>00:00:00</cbc:IssueTime>
<cbc:ContractFolderID schemeAgencyID="TeD">SMART 2015/0065</cbc:ContractFolderID>
<espd-cbc:EconomicOperatorGroupName>Hodor consortium</espd-cbc:EconomicOperatorGroupName> (1)
...
</espd:ESPDResponse>
1 | The name of the consortium is saved here |
These are some changes affecting only the ESPD
application which fixed some correctness issues regarding the XMLs
generated by the application.
-
Update country codes for version 1.0.2 of the data model, the new values are below.
then: "check address information"
result.ContractingParty.Party.PostalAddress.Country.IdentificationCode.@listAgencyID.text() == "EU-COM-GROW"
result.ContractingParty.Party.PostalAddress.Country.IdentificationCode.@listName.text() == "CountryCodeIdentifier"
result.ContractingParty.Party.PostalAddress.Country.IdentificationCode.@listVersionID.text() == "1.0.2"
-
Update criterion and jurisdiction codes for version 1.0.2 of the data model, the new values are below.
assert request.Criterion[idx].TypeCode.@listVersionID.text() == "1.0.2"
assert ref.JurisdictionLevelCode.@listVersionID.text() == "1.0.2"
-
Update
Study and research facilities
andEducational and professional qualifications
criterion type codes to match version 1.0.2 of the data model, the new values are below.
checkCriterionTypeCode(request, idx,
"CRITERION.SELECTION.TECHNICAL_PROFESSIONAL_ABILITY.TECHNICAL.PROFESSIONAL_QUALIFICATIONS")
checkCriterionTypeCode(request, idx,
"CRITERION.SELECTION.TECHNICAL_PROFESSIONAL_ABILITY.TECHNICAL.FACILITIES_FOR_STUDY_RESEARCH")
Version 2016.06.1
The id of the Please specify
requirement belonging to the G1
group of the Subcontracting proportion
criterion was
changed due to a conflict with other existing ids. The new id is 15778db8-0d84-42ba-931b-774c1b3d3f9f
.
then: "main sub group"
def g1 = response.Criterion[idx].RequirementGroup[0]
g1.ID.text() == "575f7550-8a2d-4bad-b9d8-be07ab570076"
g1.@pi.text() == ""
g1.RequirementGroup.size() == 0
g1.Requirement.size() == 1
checkRequirement(g1.Requirement[0], "15778db8-0d84-42ba-931b-774c1b3d3f9f", "Please specify", "DESCRIPTION")
On Part VI - Concluding statements
we added two new fields, Date
and Place
.
<espd:ESPDResponse>
...
<cbc:IssueDate>2015-11-25</cbc:IssueDate> (1)
<cbc:IssueTime>13:19:20</cbc:IssueTime>
...
<cac:Signature>
<cbc:ID>a47fe139-f2b1-4886-9c01-70033ad82fcb</cbc:ID>
<cac:SignatoryParty>
<cac:PhysicalLocation>
<cbc:Name>Eastwatch by the Sea</cbc:Name> (2)
</cac:PhysicalLocation>
</cac:SignatoryParty>
</cac:Signature>
...
</espd:ESPDResponse>
1 | The Date information is saved here |
2 | The Place information is saved inside the Signature element |
The list of countries used by the ESPD application can be found here: https://github.com/ESPD/ESPD-Service/blob/master/espd-web/src/main/java/eu/europa/ec/grow/espd/domain/enums/other/Country.java
The list of currencies used by the ESPD application can be found here: https://github.com/ESPD/ESPD-Service/blob/master/espd-web/src/main/java/eu/europa/ec/grow/espd/domain/enums/other/Currency.java
Version 2016.06
-
The
Name
andDescription
of theOther criteria
have been swapped.
def response = parseResponseXml(espd)
def idx = getEoCriterionIndex(AwardCriterion.EO_PARTICIPATING_PROCUREMENT_PROCEDURE)
then: "CriterionID element"
checkCriterionId(response, idx, "ee51100f-8e3e-40c9-8f8b-57d5a15be1f2")
then: "CriterionTypeCode element"
checkCriterionTypeCode(response, idx, "DATA_ON_ECONOMIC_OPERATOR")
then: "CriterionName element"
response.Criterion[idx].Name.text() == "EO participating in procurement procedure" (1)
then: "CriterionDescription element"
response.Criterion[idx].Description.text() ==
"Is the economic operator participating in the procurement procedure together with others?" (2)
then: "check all the sub groups"
response.Criterion[idx].RequirementGroup.size() == 1
1 | The name (which used to be empty) is present now and goes here |
2 | The old name is now stored in the Description element |
then: "CriterionID element"
checkCriterionId(response, idx, "9b19e869-6c89-4cc4-bd6c-ac9ca8602165")
then: "CriterionTypeCode element"
checkCriterionTypeCode(response, idx, "DATA_ON_ECONOMIC_OPERATOR")
then: "CriterionName element"
response.Criterion[idx].Name.text() == "EO registered"
then: "first sub group requirements"
def r1_0 = response.Criterion[idx].RequirementGroup[0].Requirement[0]
checkRequirement(r1_0, "67fd1dde-2a0a-486e-9469-79c78796fc22", "Not applicable", "INDICATOR")
def r1_1 = response.Criterion[idx].RequirementGroup[0].Requirement[1]
checkRequirement(r1_1, "7f18c64e-ae09-4646-9400-f3666d50af51", "", "INDICATOR")
-
Restructure the requirement groups according to the VCD proposed solution
All the criteria were restructured into new requirement groups and the <ccv:RequirementGroup pi="GROUP_FULFILLED.ON_TRUE">
logic has been introduced. More information about the criteria and requirement groups instantiation can be found here:
The results of all the changes performed on this issue are reflected in the criterion configuration files below:
Version 2016.05
In case Part I - Information concerning the procurement procedure and the contracting authority or contracting entity
,
section Information about publication
is missing the Notice number in the OJS
field, when we want to save the
ESPD Request/Response
we need to provide an ID
to the parent AdditionalDocumentReference
element because the ID
is mandatory. We will use the value 0000/S 000-000000 to represent the lack of the notice number in the OJS.
The generation of the TED information inside the ESPD Request
in this case should look like the test below.
def "should contain AdditionalDocumentReference with default ID if the TED OJS number is missing"() {
given:
def espd = new EspdDocument(ojsNumber: " ", tedReceptionId: " ", (1)
procedureTitle: "Belgium-Brussels: SMART 2015/0065 — Benchmarking deployment of eHealth among general practitioners 2015",
procedureShortDesc: "Service category No 11: Management consulting services [6] and related services.",
tedUrl: "http://ted.europa.eu/udl?uri=TED:NOTICE:002226-2016:TEXT:ES:HTML")
when:
def result = parseRequestXml(espd)
then:
result.AdditionalDocumentReference.size() == 1
then:
result.AdditionalDocumentReference[0].ID.text() == "0000/S 000-000000" (2)
result.AdditionalDocumentReference[0].ID.@schemeID.text() == "COM-GROW-TEMPORARY-ID" (3)
result.AdditionalDocumentReference[0].ID.@schemeAgencyID.text() == "EU-COM-GROW"
result.AdditionalDocumentReference[0].ID.@schemeAgencyName.text() == "DG GROW (European Commission)"
result.AdditionalDocumentReference[0].ID.@schemeVersionID.text() == "1.1"
then:
result.AdditionalDocumentReference[0].DocumentTypeCode.@listAgencyID.text() == "EU-COM-GROW"
result.AdditionalDocumentReference[0].DocumentTypeCode.@listID.text() == "ReferencesTypeCodes"
result.AdditionalDocumentReference[0].DocumentTypeCode.@listVersionID.text() == "1.0"
result.AdditionalDocumentReference[0].DocumentTypeCode.text() == "TED_CN"
then:
result.AdditionalDocumentReference[0].Attachment.ExternalReference.FileName.text() == "Belgium-Brussels: SMART 2015/0065 — Benchmarking deployment of eHealth among general practitioners 2015"
result.AdditionalDocumentReference[0].Attachment.ExternalReference.Description[0].text() == "Service category No 11: Management consulting services [6] and related services."
result.AdditionalDocumentReference[0].Attachment.ExternalReference.URI.text() == "http://ted.europa.eu/udl?uri=TED:NOTICE:002226-2016:TEXT:ES:HTML"
}
1 | The notice number in the OJS is missing (empty in this case) |
2 | This value should be saved in the ESPD Request |
3 | The schemeID should be COM-GROW-TEMPORARY-ID |
The test below imports an ESPD Request
with such a temporary notice number and checks that the information
is ignored in this case.
</espd-req:ESPDRequest>
...
<cbc:ContractFolderID schemeAgencyID="TeD">SMART 2016/0069</cbc:ContractFolderID>
...
<!-- For procurement projects above the threshold it is compulsory to specify the following data, by means of an AdditionalDocumentReference element, about the Contract Notice published in TeD: the OJEU S number[], date[], page[], Notice number in OJS: YYYY/S [][][]-[][][][][][], Title and Description of the Procurement Project -->
<cac:AdditionalDocumentReference>
<cbc:ID schemeID="COM-GROW-TEMPORARY-ID" schemeAgencyID="EU-COM-GROW" (1)
schemeAgencyName="DG GROW (European Commission)" schemeVersionID="1.1">0000/S 000-000000</cbc:ID> (2)
<cbc:DocumentTypeCode listAgencyID="EU-COM-GROW" listID="ReferencesTypeCodes" listVersionID="1.0">TED_CN</cbc:DocumentTypeCode>
<cac:Attachment>
<cac:ExternalReference>
<cbc:URI>http://ted.europa.eu/udl?uri=TED:NOTICE:373035-2015:TEXT:EN:HTML</cbc:URI>
<!-- Title of the Contract Notice -->
<cbc:FileName>Belgium-Brussels: SMART 2015/0065 — Benchmarking deployment of eHealth among general practitioners 2015</cbc:FileName>
<!-- Short description of the Procurement Project -->
<cbc:Description>Service category No 11: Management consulting services [6] and related services.</cbc:Description>
<cbc:Description>16-000136-001</cbc:Description>
</cac:ExternalReference>
</cac:Attachment>
</cac:AdditionalDocumentReference>
...
</espd-req:ESPDRequest>
1 | The code used in this special case |
2 | The value used to represent a missing notice number |
def "we should not load the ojs number if it is marked as a temporary one"() {
given:
def espdXml = importXmlRequestFile("request_temporary_ojs_number_import.xml")
EspdDocument espd = marshaller.importEspdRequest(IOUtils.toInputStream(espdXml)).get()
expect:
espd.fileRefByCA == "SMART 2016/0069"
espd.ojsNumber == null (1)
espd.procedureTitle == "Belgium-Brussels: SMART 2015/0065 — Benchmarking deployment of eHealth among general practitioners 2015"
espd.procedureShortDesc == "Service category No 11: Management consulting services [6] and related services."
espd.tedUrl == "http://ted.europa.eu/udl?uri=TED:NOTICE:373035-2015:TEXT:EN:HTML"
espd.tedReceptionId == "16-000136-001"
}
1 | The notice number in the OJS should be ignored in this case |
Version 2016.04.01
The exclusion criterion Conflict of interest due to its participation in the procurement procedure
needs only the
Yes/No
requirement and not the rest.
<ccv:Criterion>
<cbc:ID schemeID="CriteriaID" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">b1b5ac18-f393-4280-9659-1367943c1a2e</cbc:ID>
<cbc:TypeCode listID="CriteriaTypeCode" listAgencyID="EU-COM-GROW" listVersionID="1.0.2">CRITERION.EXCLUSION.CONFLICT_OF_INTEREST.PROCEDURE_PARTICIPATION</cbc:TypeCode>
<cbc:Name>Conflict of interest due to its participation in the procurement procedure</cbc:Name>
...
<ccv:RequirementGroup>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">30450436-f559-4dfa-98ba-f0842ed9d2a0</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">974c8196-9d1c-419c-9ca9-45bb9f5fd59a</cbc:ID>
<cbc:Description>Your answer?</cbc:Description>
<ccv:Response>
<ccv-cbc:Indicator>false</ccv-cbc:Indicator>
</ccv:Response>
</ccv:Requirement>
</ccv:RequirementGroup>
</ccv:Criterion>
The Guilty of misinterpretation
exclusion criterion only needs the Yes/No
requirement.
<ccv:Criterion>
<cbc:ID schemeID="CriteriaID" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">696a75b2-6107-428f-8b74-82affb67e184</cbc:ID>
<cbc:TypeCode listID="CriteriaTypeCode" listAgencyID="EU-COM-GROW" listVersionID="1.0.2">CRITERION.EXCLUSION.CONFLICT_OF_INTEREST.MISINTERPRETATION</cbc:TypeCode>
<cbc:Name>Guilty of misinterpretation, withheld information, unable to provide required documents and obtained confidential information of this procedure</cbc:Name>
...
<ccv:RequirementGroup>
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">30450436-f559-4dfa-98ba-f0842ed9d2a0</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">974c8196-9d1c-419c-9ca9-45bb9f5fd59a</cbc:ID>
<cbc:Description>Your answer?</cbc:Description>
<ccv:Response>
<ccv-cbc:Indicator>false</ccv-cbc:Indicator>
</ccv:Response>
</ccv:Requirement>
</ccv:RequirementGroup>
</ccv:Criterion>
For the economic operator criterion EO registered
found in Part II - Information concerning the economic operator
,
section A - Information about the economic operator
, the requirement with id 0e71abd3-198e-49c5-8128-5708617bb191
is transformed from a DESCRIPTION
to an INDICATOR
type of requirement.
...
<ccv:RequirementGroup pi="GROUP_FULFILLED.ON_FALSE">
<cbc:ID schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">59e6f3ef-15cd-4e21-82ac-ea497ccd44e2</cbc:ID>
<ccv:Requirement responseDataType="INDICATOR">
<cbc:ID schemeID="CriterionRelatedIDs" schemeAgencyID="EU-COM-GROW" schemeVersionID="1.0">0e71abd3-198e-49c5-8128-5708617bb191</cbc:ID>
<cbc:Description>e) Will the economic operator be able to provide a certificate with regard to the payment of social security contributions and taxes or provide information enabling the contracting authority or contracting entity to obtaining it directly by accessing a national database in any Member State that is available free of charge?</cbc:Description>
<ccv:Response/>
</ccv:Requirement>
...
</ccv:RequirementGroup>
...