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"
},
...
]
}
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>
-
The national number
-
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>
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>
-
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")
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>
-
The
Date
information is saved here -
The
Place
information is saved inside theSignature
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
-
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
-
The name (which used to be empty) is present now and goes here
-
The old name is now stored in the
Description
element-
The
Not applicable
requirement for theEconomic operator registered
criterion should appear before the main indicator
-
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:
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"
}
-
The notice number in the OJS is missing (empty in this case)
-
This value should be saved in the
ESPD Request
-
The
schemeID
should beCOM-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>
-
The code used in this special case
-
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"
}
-
The notice number in the OJS should be ignored in this case
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>
...