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.

exclusionCriteria.json
"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

espd-responce.xml
<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 (&quot;Self-Cleaning&quot;)?</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 (&quot;Self-Cleaning&quot;)?</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:

espd-request.xml
<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:

selectionCriteria.js
      "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-response.xml
<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-response.xml
<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:

selectionCriteria.js
"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.

selectionCriteria.js
"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:

exclusionCriteria.js
{
  "id": "c3ccfa31-0c5e-4e3a-a3fd-db9fb83d78d4",
  "description": "Issuer",
  "responseType": "DESCRIPTION"
}

And for the selection criteria, the requirement will include the following definition:

selectionCriteria.js
{
  "id": "5cbf74d9-a1e2-4233-921d-8b298842ee7d",
  "description": "Issuer",
  "responseType": "DESCRIPTION"
}

The economic operator (other) criteria will contain the requirement below:

otherCriteria.js
{
  "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.

exclusionCriteria.js
"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:

exclusionCriteria.js
{
  "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 id 15335c12-ad77-4728-b5ad-3c06a60d65a4

  • Please provide the requested data below with id 3a6fefd4-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:

selectionCriteria.json
"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.

selectionCriteria.json
{
  "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.

selectionCriteria.js
"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-response.xml
<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:

espd-response.xml
<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-response.xml
<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.

  1. Update country codes for version 1.0.2 of the data model, the new values are below.

EspdRequestMarshallingTest.groovy
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"
  1. Update criterion and jurisdiction codes for version 1.0.2 of the data model, the new values are below.

AbstractCriteriaFixture.groovy
assert request.Criterion[idx].TypeCode.@listVersionID.text() == "1.0.2"
assert ref.JurisdictionLevelCode.@listVersionID.text() == "1.0.2"
  1. Update Study and research facilities and Educational and professional qualifications criterion type codes to match version 1.0.2 of the data model, the new values are below.

EducationalProfessionalQualificationsRequestTest.groovy
checkCriterionTypeCode(request, idx,
  "CRITERION.SELECTION.TECHNICAL_PROFESSIONAL_ABILITY.TECHNICAL.PROFESSIONAL_QUALIFICATIONS")
StudyResearchFacilitiesRequestTest.groovy
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.

SubcontractingProportionResponseTest.groovy
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-response.xml
<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

Version 2016.06

  1. The Name and Description of the Other criteria have been swapped.

EconomicOperatorParticipatingProcurementProcedureResponseTest.groovy
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
EconomicOperatorRegisteredResponseTest.groovy
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")
  1. 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.

EspdRequestMarshallingTest.groovy
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.

request_temporary_ojs_number_import.xml
</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
EspdRequestOtherInformationImportTest.groovy
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.

espd-response.xml
<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.

espd-response.xml
<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.

espd-request.xml
...
<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>
...