ccs-digitalmarketplace-frameworks 2.4.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/frameworks/digital-outcomes-6/manifests/agreement.yml +10 -0
  3. package/frameworks/digital-outcomes-6/questions/agreements/legalText.yml +52 -0
  4. package/frameworks/digital-outcomes-6/questions/agreements/signerName.yml +15 -0
  5. package/frameworks/digital-outcomes-6/questions/agreements/signerRole.yml +15 -0
  6. package/frameworks/digital-outcomes-6/questions/agreements/signerTermsAndConditions.yml +15 -0
  7. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystBasicDayRate.yml +1 -1
  8. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystBasicDayRateSpecialist.yml +1 -1
  9. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystBasicLocations.yml +2 -2
  10. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystBasicUkDayRate.yml +1 -1
  11. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystLeadDayRate.yml +1 -1
  12. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystLeadDayRateSpecialist.yml +1 -1
  13. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystLeadLocations.yml +2 -2
  14. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystLeadUkDayRate.yml +1 -1
  15. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystRoles.yml +1 -1
  16. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorDayRate.yml +1 -1
  17. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorDayRateSpecialist.yml +1 -1
  18. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorLocations.yml +2 -2
  19. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorUkDayRate.yml +1 -1
  20. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystTesterDayRate.yml +1 -1
  21. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystTesterDayRateSpecialist.yml +1 -1
  22. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystTesterLocations.yml +2 -2
  23. package/frameworks/digital-outcomes-and-specialists-7/questions/services/qualityAssuranceTestingQualityAssuranceTestingAnalystTesterUkDayRate.yml +1 -1
  24. package/frameworks/g-cloud-13/manifests/agreement.yml +10 -0
  25. package/frameworks/g-cloud-13/questions/agreements/legalText.yml +142 -0
  26. package/frameworks/g-cloud-13/questions/agreements/signerName.yml +15 -0
  27. package/frameworks/g-cloud-13/questions/agreements/signerRole.yml +15 -0
  28. package/frameworks/g-cloud-13/questions/agreements/signerTermsAndConditions.yml +15 -0
  29. package/package.json +1 -1
  30. package/requirements-dev.txt +2 -2
  31. package/requirements.in +1 -1
  32. package/requirements.txt +1 -1
  33. package/schema_generator/validation.py +99 -22
  34. package/scripts/generate-validation-schemas.py +9 -1
  35. package/tests/test_content.py +3 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  Records breaking changes from major version bumps
4
4
 
5
+ ## 3.0.0
6
+
7
+ Add the agreements questions for the framework award form
8
+
5
9
  ## 2.0.0
6
10
 
7
11
  Rename evaluations to additional lot questions
@@ -0,0 +1,10 @@
1
+ - name: Legal text
2
+ questions:
3
+ - legalText
4
+
5
+
6
+ - name: Framework agreement
7
+ questions:
8
+ - signerName
9
+ - signerRole
10
+ - signerTermsAndConditions
@@ -0,0 +1,52 @@
1
+ type: text
2
+ optional: true
3
+ question: |
4
+ <ol class="govuk-list govuk-list--number">
5
+ <li>
6
+ <strong>CCS</strong>:
7
+ The Minister for the Cabinet Office represented by its executive agency the Crown Commercial Service (CCS). Its offices are on: 9th Floor, The Capital, Old Hall Street, Liverpool L3 9PP.
8
+ </li>
9
+ <li>
10
+ <strong>Supplier</strong>: [[registered_name]]<br>
11
+ address: [[registered_address]]<br>
12
+ registration number: [[registration_number]]<br>
13
+ SID4GOV ID: [[sid4_goc_id]]<br>
14
+ </li>
15
+ <li>
16
+ <strong>Framework Contract</strong>: This framework contract between CCS and the Supplier allows the Supplier to be considered for Call-Off Contracts to supply the Deliverables in [[completed_lots_sentence]].
17
+ You cannot deliver in any other Lot under this Contract. Any references made to other Lots in this Contract do not apply. This opportunity is advertised in the Contract Notice in the Find a Tender Service reference (2022/S 000-001105).
18
+ </li>
19
+ <li>
20
+ <strong>Deliverables</strong>: See Framework Schedule 1 (Specification) for further details.
21
+ </li>
22
+ <li>
23
+ <strong>Framework Start Date</strong>: 28 June 2022
24
+ </li>
25
+ <li>
26
+ <strong>Framework Expiry Date</strong>: 23:59 on 27 June 2024
27
+ </li>
28
+ <li>
29
+ <strong>Framework Initial Period</strong>: From Framework Start Date to Framework Expiry Date, inclusive.
30
+ </li>
31
+ <li>
32
+ <strong>Framework Optional Extension Period</strong>: Up to twelve (12) months, by CCS giving written notice to Suppliers.
33
+ </li>
34
+ <li value="18">
35
+ <strong>Supplier Authorised Representative</strong>: [[primary_contact]], [[contacts_role]], [[contact_email_contract_notice]]
36
+ </li>
37
+ </ol>
38
+
39
+ <p>
40
+ The finalised Framework Award Form includes an electronically signed Framework Award Form. It is electronically signed by the Supplier when they make the legal declaration confirming their agreement to the Digital Outcomes 6 Framework Contract, and countersigned by the Crown Commercial Service.
41
+ </p>
42
+
43
+ <p class="govuk-body">
44
+ <a href="[[framework_govuk_url]]">
45
+ Read the [[framework_name]] contract terms and conditions
46
+ </a>
47
+ </p>
48
+
49
+ depends:
50
+ - "on": agreementVersion
51
+ being:
52
+ - standard
@@ -0,0 +1,15 @@
1
+ question: Your full name
2
+ type: text
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ max_length_in_characters: 256
10
+
11
+ validations:
12
+ - name: answer_required
13
+ message: Enter your full name.
14
+ - name: under_character_limit
15
+ message: Name must be under 256 characters.
@@ -0,0 +1,15 @@
1
+ question: Your role in the company
2
+ type: text
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ max_length_in_characters: 256
10
+
11
+ validations:
12
+ - name: answer_required
13
+ message: Enter your role in the company.
14
+ - name: under_character_limit
15
+ message: Name must be under 256 characters.
@@ -0,0 +1,15 @@
1
+ question: <span class="govuk-visually-hidden">Do you accept the terms and conditions of the [[contract_title]]?</span>
2
+ type: checkboxes
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ options:
10
+ - label: I accept the terms and conditions of the [[contract_title]]
11
+ value: "yes"
12
+
13
+ validations:
14
+ - name: answer_required
15
+ message: Accept the terms and conditions of the [[contract_title]].
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicPriceMax
23
- message: Enter the amount you will charge for a qat analyst
23
+ message: Enter the amount you will charge for a QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicPriceMax
23
- message: Enter the amount you will charge for a qat analyst
23
+ message: Enter the amount you will charge for a QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -1,6 +1,6 @@
1
- name: Where will your qat analyst work?
1
+ name: Where will your QAT analyst work?
2
2
  question: |
3
- <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your qat analyst work?</span></p>
3
+ <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your QAT analyst work?</span></p>
4
4
  <p class="govuk-!-margin-bottom-0"><span class="govuk-fieldset__legend--s">Choose all the locations where the specialist can work at buyer’s sites, and whether they can work offsite.</span></p>
5
5
  hint: |
6
6
  ‘Offsite’ means the supplier will not be working at the buyer’s own sites.
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicUkPriceMax
23
- message: Enter the amount you will charge for a qat analyst
23
+ message: Enter the amount you will charge for a QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystBasicUkPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadPriceMax
23
- message: Enter the amount you will charge for a lead qat analyst
23
+ message: Enter the amount you will charge for a lead QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadPriceMax
23
- message: Enter the amount you will charge for a lead qat analyst
23
+ message: Enter the amount you will charge for a lead QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -1,6 +1,6 @@
1
- name: Where will your lead qat analyst work?
1
+ name: Where will your lead QAT analyst work?
2
2
  question: |
3
- <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your lead qat analyst work?</span></p>
3
+ <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your lead QAT analyst work?</span></p>
4
4
  <p class="govuk-!-margin-bottom-0"><span class="govuk-fieldset__legend--s">Choose all the locations where the specialist can work at buyer’s sites, and whether they can work offsite.</span></p>
5
5
  hint: |
6
6
  ‘Offsite’ means the supplier will not be working at the buyer’s own sites.
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadUkPriceMax
23
- message: Enter the amount you will charge for a lead qat analyst
23
+ message: Enter the amount you will charge for a lead QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystLeadUkPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -1,5 +1,5 @@
1
1
  name: Quality assurance testing (QAT) analyst roles
2
- question: What role levels can you provide for a quality assurance testing (qat) analyst?
2
+ question: What role levels can you provide for a quality assurance testing (QAT) analyst?
3
3
 
4
4
  depends:
5
5
  - "on": lot
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorPriceMax
23
- message: Enter the amount you will charge for a senior qat analyst
23
+ message: Enter the amount you will charge for a senior QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorPriceMax
23
- message: Enter the amount you will charge for a senior qat analyst
23
+ message: Enter the amount you will charge for a senior QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -1,6 +1,6 @@
1
- name: Where will your senior qat analyst work?
1
+ name: Where will your senior QAT analyst work?
2
2
  question: |
3
- <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your senior qat analyst work?</span></p>
3
+ <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your senior QAT analyst work?</span></p>
4
4
  <p class="govuk-!-margin-bottom-0"><span class="govuk-fieldset__legend--s">Choose all the locations where the specialist can work at buyer’s sites, and whether they can work offsite.</span></p>
5
5
  hint: |
6
6
  ‘Offsite’ means the supplier will not be working at the buyer’s own sites.
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorUkPriceMax
23
- message: Enter the amount you will charge for a senior qat analyst
23
+ message: Enter the amount you will charge for a senior QAT analyst
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystSeniorUkPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterPriceMax
23
- message: Enter the amount you will charge for a tester (qat)
23
+ message: Enter the amount you will charge for a tester (QAT)
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterPriceMax
23
- message: Enter the amount you will charge for a tester (qat)
23
+ message: Enter the amount you will charge for a tester (QAT)
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -1,6 +1,6 @@
1
- name: Where will your tester (qat) work?
1
+ name: Where will your tester (QAT) work?
2
2
  question: |
3
- <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your tester (qat) work?</span></p>
3
+ <p class="govuk-!-margin-bottom-2"><span class="govuk-fieldset__legend--s">Where will your tester (QAT) work?</span></p>
4
4
  <p class="govuk-!-margin-bottom-0"><span class="govuk-fieldset__legend--s">Choose all the locations where the specialist can work at buyer’s sites, and whether they can work offsite.</span></p>
5
5
  hint: |
6
6
  ‘Offsite’ means the supplier will not be working at the buyer’s own sites.
@@ -20,7 +20,7 @@ digit_limits:
20
20
  validations:
21
21
  - name: answer_required
22
22
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterUkPriceMax
23
- message: Enter the amount you will charge for a tester (qat)
23
+ message: Enter the amount you will charge for a tester (QAT)
24
24
  - name: not_money_format
25
25
  field: qualityAssuranceTestingQualityAssuranceTestingAnalystTesterUkPriceMax
26
26
  message: Maximum price must be a number less than 10,000, without units, like 99.95
@@ -0,0 +1,10 @@
1
+ - name: Legal text
2
+ questions:
3
+ - legalText
4
+
5
+
6
+ - name: Framework agreement
7
+ questions:
8
+ - signerName
9
+ - signerRole
10
+ - signerTermsAndConditions
@@ -0,0 +1,142 @@
1
+ type: text
2
+ optional: true
3
+ question: |
4
+ <h2 class="govuk-heading-m">
5
+ 1. The Appointment
6
+ </h2>
7
+ <p>
8
+ This section includes terms about the Supplier appointment.
9
+ </p>
10
+
11
+ <p>
12
+ 1.1 <strong>Appointment</strong>
13
+ <p>
14
+ <p>
15
+ Under the terms of this Framework Agreement (RM1557.13) and the Supplier’s Application, the Minister for the Cabinet Office, represented by the Crown Commercial Service (CCS), 9th Floor, The Capital, Old Hall Street, Liverpool, L3 9PP, appoints:
16
+ </p>
17
+
18
+ <p>
19
+ <strong>Company:</strong>
20
+ [[registered_name]]
21
+ </p>
22
+
23
+ <p>
24
+ <strong>Registered address:</strong>
25
+ [[registered_address]]
26
+ </p>
27
+
28
+ <p>
29
+ <strong>Company number:</strong>
30
+ [[registration_number]]
31
+ </p>
32
+
33
+ <p>
34
+ (the ‘Supplier’), as a Framework Agreement Supplier of G-Cloud Services who can be considered for Call-Off Contracts as outlined in the Contract Notice in the Find a Tender Service reference (2022/S 000-006385).
35
+ </p>
36
+
37
+ <p>
38
+ <span>
39
+ 1.2
40
+ </span>
41
+ <span>
42
+ <strong>Appointment is to:</strong>
43
+ [[completed_lots]]
44
+ </span>
45
+ </p>
46
+
47
+ <p>
48
+ <span>
49
+ 1.3
50
+ </span>
51
+ <span>
52
+ <strong>Appointment starts at:</strong>
53
+ 9 November 2022
54
+ </span>
55
+ </p>
56
+
57
+ <p>
58
+ <span>
59
+ 1.4
60
+ </span>
61
+ <span>
62
+ <strong>Appointment ends at:</strong>
63
+ 23:59 on 8 November 2023 (unless this Framework Agreement is extended by CCS or Ends early).
64
+ </span>
65
+ </p>
66
+
67
+ <p>
68
+ <span>
69
+ 1.5
70
+ </span>
71
+ <span>
72
+ <strong>Framework Agreement extension:</strong>
73
+ Up to 12 months, by CCS giving written notice to Suppliers.
74
+ </span>
75
+ </p>
76
+
77
+ <p>
78
+ <span>
79
+ 1.6
80
+ </span>
81
+ <span>
82
+ <strong>Framework Agreement term:</strong>
83
+ From and including the date at 1.3 above (Appointment starts at) to and including the date at 1.4 above (Appointment ends at).
84
+ </span>
85
+ </p>
86
+
87
+ <p>
88
+ <span>
89
+ 1.7
90
+ </span>
91
+ <span>
92
+ <strong>Call-Off Contract length:</strong>
93
+ Up to 36 months plus an optional extension period of up to 12 months.
94
+ </span>
95
+ </p>
96
+
97
+ <p>
98
+ <span>
99
+ 1.8
100
+ </span>
101
+ <span>
102
+ The Parties agree that they have read this Framework Agreement and by signing below agree to be bound by its terms.
103
+ </span>
104
+ </p>
105
+
106
+ <p>
107
+ <span>
108
+ 1.9
109
+ </span>
110
+ <span>
111
+ All sections, including the Invitation to Tender and Schedules to this Framework Agreement are expressly part of this Framework Agreement.
112
+ </span>
113
+ </p>
114
+
115
+ <p>
116
+ <span>
117
+ 1.10
118
+ </span>
119
+ <span>
120
+ CCS will pay £1 to the Supplier to perform its obligations under this Framework Agreement, receipt of which is acknowledged by the Supplier signing this Framework Agreement.
121
+ </span>
122
+ </p>
123
+
124
+ <p>
125
+ <span>
126
+ 1.11
127
+ </span>
128
+ <span>
129
+ The finalised Framework Agreement includes an electronically signed Framework Agreement. It is electronically signed by the Supplier when they make the legal declaration confirming their agreement to the G-Cloud 13 Framework Agreement, and countersigned by the Crown Commercial Service.
130
+ </span>
131
+ </p>
132
+
133
+ <p class="govuk-body">
134
+ <a href="[[framework_govuk_url]]">
135
+ Read the [[framework_name]] contract terms and conditions
136
+ </a>
137
+ </p>
138
+
139
+ depends:
140
+ - "on": agreementVersion
141
+ being:
142
+ - standard
@@ -0,0 +1,15 @@
1
+ question: Your full name
2
+ type: text
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ max_length_in_characters: 256
10
+
11
+ validations:
12
+ - name: answer_required
13
+ message: Enter your full name.
14
+ - name: under_character_limit
15
+ message: Name must be under 256 characters.
@@ -0,0 +1,15 @@
1
+ question: Your role in the company
2
+ type: text
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ max_length_in_characters: 256
10
+
11
+ validations:
12
+ - name: answer_required
13
+ message: Enter your role in the company.
14
+ - name: under_character_limit
15
+ message: Name must be under 256 characters.
@@ -0,0 +1,15 @@
1
+ question: <span class="govuk-visually-hidden">Do you accept the terms and conditions of the [[contract_title]]?</span>
2
+ type: checkboxes
3
+
4
+ depends:
5
+ - "on": agreementVersion
6
+ being:
7
+ - standard
8
+
9
+ options:
10
+ - label: I accept the terms and conditions of the [[contract_title]]
11
+ value: "yes"
12
+
13
+ validations:
14
+ - name: answer_required
15
+ message: Accept the terms and conditions of the [[contract_title]].
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccs-digitalmarketplace-frameworks",
3
- "version": "2.4.0",
3
+ "version": "3.0.1",
4
4
  "description": "Data files for Digital Marketplace’s procurement frameworks",
5
5
  "repository": "git@github.com:Crown-Commercial-Service/ccs-digitalmarketplace-frameworks",
6
6
  "author": "enquiries@digitalmarketplace.service.gov.uk"
@@ -34,7 +34,7 @@ ccs-digitalmarketplace-apiclient==25.11.0
34
34
  # via
35
35
  # -r requirements.txt
36
36
  # ccs-digitalmarketplace-utils
37
- ccs-digitalmarketplace-content-loader==11.5.0
37
+ ccs-digitalmarketplace-content-loader==11.6.0
38
38
  # via -r requirements.txt
39
39
  ccs-digitalmarketplace-utils==68.0.0
40
40
  # via
@@ -115,7 +115,7 @@ govuk-country-register==0.5.0
115
115
  # via
116
116
  # -r requirements.txt
117
117
  # ccs-digitalmarketplace-utils
118
- hypothesis==6.112.1
118
+ hypothesis==6.112.2
119
119
  # via -r requirements-dev.in
120
120
  idna==3.7
121
121
  # via
package/requirements.in CHANGED
@@ -1,5 +1,5 @@
1
1
  docopt==0.6.2
2
2
  deepmerge==2.0
3
3
  python-json-logger==2.0.7
4
- ccs-digitalmarketplace-content-loader==11.5.0
4
+ ccs-digitalmarketplace-content-loader==11.6.0
5
5
  ccs-digitalmarketplace-utils==68.0.0
package/requirements.txt CHANGED
@@ -18,7 +18,7 @@ cachelib==0.13.0
18
18
  # via flask-session
19
19
  ccs-digitalmarketplace-apiclient==25.11.0
20
20
  # via ccs-digitalmarketplace-utils
21
- ccs-digitalmarketplace-content-loader==11.5.0
21
+ ccs-digitalmarketplace-content-loader==11.6.0
22
22
  # via -r requirements.in
23
23
  ccs-digitalmarketplace-utils==68.0.0
24
24
  # via
@@ -28,6 +28,10 @@ MANIFESTS = {
28
28
  'evaluations': {
29
29
  'question_set': 'additional-lot-questions',
30
30
  'manifest': 'evaluations'
31
+ },
32
+ 'agreements': {
33
+ 'question_set': 'agreements',
34
+ 'manifest': 'agreement'
31
35
  }
32
36
  }
33
37
 
@@ -61,17 +65,53 @@ DOS7_LOTS = [
61
65
  ('digital-specialists', 'Digital specialists'),
62
66
  ('user-research-studios-and-participants', 'User research studios and participants'),
63
67
  ]
68
+ STANDARD_AGREEMENT_VERSIONS = [
69
+ ('standard', 'Standard agreement')
70
+ ]
64
71
 
65
72
  FRAMEWORKS_AND_LOTS = {
66
73
  "g-cloud": [
67
- {'framework_slug': 'g-cloud-7', 'framework_name': "G-Cloud 7", 'lots': LEGACY_GCLOUD_LOTS},
68
- {'framework_slug': 'g-cloud-8', 'framework_name': "G-Cloud 8", 'lots': LEGACY_GCLOUD_LOTS},
69
- {'framework_slug': 'g-cloud-9', 'framework_name': "G-Cloud 9", 'lots': G_CLOUD_LOTS},
70
- {'framework_slug': 'g-cloud-10', 'framework_name': "G-Cloud 10", 'lots': G_CLOUD_LOTS},
71
- {'framework_slug': 'g-cloud-11', 'framework_name': "G-Cloud 11", 'lots': G_CLOUD_LOTS},
72
- {'framework_slug': 'g-cloud-12', 'framework_name': "G-Cloud 12", 'lots': G_CLOUD_LOTS},
73
- {'framework_slug': 'g-cloud-13', 'framework_name': "G-Cloud 13", 'lots': G_CLOUD13_LOTS},
74
- {'framework_slug': 'g-cloud-14', 'framework_name': "G-Cloud 14", 'lots': G_CLOUD13_LOTS},
74
+ {
75
+ 'framework_slug': 'g-cloud-7',
76
+ 'framework_name': "G-Cloud 7",
77
+ 'lots': LEGACY_GCLOUD_LOTS
78
+ },
79
+ {
80
+ 'framework_slug': 'g-cloud-8',
81
+ 'framework_name': "G-Cloud 8",
82
+ 'lots': LEGACY_GCLOUD_LOTS
83
+ },
84
+ {
85
+ 'framework_slug': 'g-cloud-9',
86
+ 'framework_name': "G-Cloud 9",
87
+ 'lots': G_CLOUD_LOTS
88
+ },
89
+ {
90
+ 'framework_slug': 'g-cloud-10',
91
+ 'framework_name': "G-Cloud 10",
92
+ 'lots': G_CLOUD_LOTS
93
+ },
94
+ {
95
+ 'framework_slug': 'g-cloud-11',
96
+ 'framework_name': "G-Cloud 11",
97
+ 'lots': G_CLOUD_LOTS
98
+ },
99
+ {
100
+ 'framework_slug': 'g-cloud-12',
101
+ 'framework_name': "G-Cloud 12",
102
+ 'lots': G_CLOUD_LOTS
103
+ },
104
+ {
105
+ 'framework_slug': 'g-cloud-13',
106
+ 'framework_name': "G-Cloud 13",
107
+ 'lots': G_CLOUD13_LOTS,
108
+ 'agreement_versions': STANDARD_AGREEMENT_VERSIONS
109
+ },
110
+ {
111
+ 'framework_slug': 'g-cloud-14',
112
+ 'framework_name': "G-Cloud 14",
113
+ 'lots': G_CLOUD13_LOTS
114
+ },
75
115
  ],
76
116
  "digital-outcomes-and-specialists": [
77
117
  {
@@ -102,7 +142,8 @@ FRAMEWORKS_AND_LOTS = {
102
142
  {
103
143
  'framework_slug': 'digital-outcomes-6',
104
144
  'framework_name': "Digital Outcomes 6",
105
- 'lots': DOS6_LOTS
145
+ 'lots': DOS6_LOTS,
146
+ 'agreement_versions': STANDARD_AGREEMENT_VERSIONS
106
147
  },
107
148
  {
108
149
  'framework_slug': 'digital-outcomes-and-specialists-7',
@@ -129,17 +170,29 @@ def _get_schema_title_and_slugs(schema_type, framework_family=None, exclude_lots
129
170
  for framework in framework_list:
130
171
  if framework['framework_slug'] in exclude_frameworks:
131
172
  continue
132
- for lot_slug, lot_name in framework['lots']:
133
- if lot_slug in exclude_lots:
134
- continue
135
-
136
- titles_and_slugs.append(
137
- (
138
- "{} {} {}".format(framework['framework_name'], lot_name, schema_type),
139
- framework['framework_slug'],
140
- lot_slug
173
+
174
+ if schema_type == 'Agreement questions':
175
+ if 'agreement_versions' in framework:
176
+ for agreement_version, agreement_version_name in framework['agreement_versions']:
177
+ titles_and_slugs.append(
178
+ (
179
+ "{} {} {}".format(framework['framework_name'], agreement_version_name, schema_type),
180
+ framework['framework_slug'],
181
+ agreement_version
182
+ )
183
+ )
184
+ else:
185
+ for lot_slug, lot_name in framework['lots']:
186
+ if lot_slug in exclude_lots:
187
+ continue
188
+
189
+ titles_and_slugs.append(
190
+ (
191
+ "{} {} {}".format(framework['framework_name'], lot_name, schema_type),
192
+ framework['framework_slug'],
193
+ lot_slug
194
+ )
141
195
  )
142
- )
143
196
  return titles_and_slugs
144
197
 
145
198
 
@@ -184,14 +237,32 @@ SCHEMAS = {
184
237
  "user-research-participants",
185
238
  "user-research-studios-and-participants",
186
239
  ],
240
+ ),
241
+ 'agreements': _get_schema_title_and_slugs(
242
+ "Agreement questions",
243
+ exclude_frameworks=[
244
+ 'g-cloud-7',
245
+ 'g-cloud-8',
246
+ 'g-cloud-9',
247
+ 'g-cloud-10',
248
+ 'g-cloud-11',
249
+ 'g-cloud-12',
250
+ 'g-cloud-14',
251
+ 'digital-outcomes-and-specialists',
252
+ 'digital-outcomes-and-specialist-2',
253
+ 'digital-outcomes-and-specialist-3',
254
+ 'digital-outcomes-and-specialist-4',
255
+ 'digital-outcomes-and-specialist-5',
256
+ 'digital-outcomes-and-specialist-7',
257
+ ],
187
258
  )
188
259
  }
189
260
 
190
261
 
191
- def load_questions(schema_type, framework_slug, lot_slug):
262
+ def load_questions(schema_type, framework_slug, lot_slug_or_agreement_version):
192
263
  loader = ContentLoader('./')
193
264
  print(
194
- f'{framework_slug}/{lot_slug} '
265
+ f'{framework_slug}/{lot_slug_or_agreement_version} '
195
266
  f'question_set: {MANIFESTS[schema_type]["question_set"]}, '
196
267
  f'schema_type: {MANIFESTS[schema_type]["manifest"]}'
197
268
  )
@@ -202,10 +273,16 @@ def load_questions(schema_type, framework_slug, lot_slug):
202
273
  MANIFESTS[schema_type]['manifest']
203
274
  )
204
275
 
276
+ if schema_type == 'agreements':
277
+ filter_key = 'agreementVersion'
278
+ else:
279
+ filter_key = 'lot'
280
+
205
281
  manifest = loader.get_manifest(framework_slug, MANIFESTS[schema_type]['manifest']).filter(
206
- {'lot': lot_slug},
282
+ {filter_key: lot_slug_or_agreement_version},
207
283
  dynamic=False
208
284
  )
285
+
209
286
  return {q['id']: q for q in sum((s.questions for s in manifest.sections), [])}
210
287
 
211
288
 
@@ -2,7 +2,7 @@
2
2
  """Generate validation JSON schemas from the frameworks questions content.
3
3
 
4
4
  Usage:
5
- generate-validation-schemas.py --output-path=<output_path>
5
+ generate-validation-schemas.py --output-path=<output_path> [--framework=<framework_slug>] [--lot=<lot_slug>]
6
6
 
7
7
  """
8
8
  import os
@@ -20,12 +20,20 @@ from schema_generator.validation import generate_schema_todir, SCHEMAS
20
20
  if __name__ == '__main__':
21
21
  arguments = docopt(__doc__)
22
22
  OUTPUT_DIR = arguments['--output-path']
23
+ FRAMEWORK_SLUG = arguments.get('--framework')
24
+ LOT_SLUG = arguments.get('--lot')
23
25
  if not os.path.exists(OUTPUT_DIR):
24
26
  print("Creating {} directory".format(OUTPUT_DIR))
25
27
  os.makedirs(OUTPUT_DIR)
26
28
 
27
29
  schemas = [(schema_type, *schema) for schema_type in SCHEMAS for schema in SCHEMAS[schema_type]]
28
30
 
31
+ if FRAMEWORK_SLUG:
32
+ schemas = [schema for schema in schemas if schema[2] == FRAMEWORK_SLUG]
33
+
34
+ if LOT_SLUG:
35
+ schemas = [schema for schema in schemas if schema[3] == LOT_SLUG]
36
+
29
37
  with Pool(processes=5) as pool:
30
38
  results = pool.starmap(
31
39
  partial(
@@ -34,7 +34,9 @@ MANIFEST_QUESTION_SET = {
34
34
  "download_results": "services",
35
35
 
36
36
  "evaluations": "additional-lot-questions",
37
- "edit_additional_lot_questions": "additional-lot-questions"
37
+ "edit_additional_lot_questions": "additional-lot-questions",
38
+
39
+ "agreement": "agreements",
38
40
  }
39
41
 
40
42
  # `item` property wouldn't usually be part of a brief response but is included here as the dynamic list child question