ccs-digitalmarketplace-frameworks 1.9.0 → 1.9.2

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 (18) hide show
  1. package/frameworks/digital-outcomes-and-specialists-7/manifests/edit_evaluations.yml +17 -0
  2. package/frameworks/digital-outcomes-and-specialists-7/manifests/evaluations.yml +20 -0
  3. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapability.yml +15 -0
  4. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapabilityComment.yml +15 -0
  5. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapabilityScore.yml +22 -0
  6. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartner.yml +15 -0
  7. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartnerComment.yml +15 -0
  8. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartnerScore.yml +20 -0
  9. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapability.yml +15 -0
  10. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapabilityComment.yml +15 -0
  11. package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapabilityScore.yml +22 -0
  12. package/frameworks/digital-outcomes-and-specialists-7/questions/services/lot.yml +10 -0
  13. package/frameworks/digital-outcomes-and-specialists-7/questions/services/serviceName.yml +2 -0
  14. package/package.json +1 -1
  15. package/schema_generator/validation.py +20 -8
  16. package/tests/test_content.py +22 -1
  17. package/tests/test_messages.py +3 -0
  18. package/tests/test_schema.py +6 -1
@@ -0,0 +1,17 @@
1
+ -
2
+ name: Provide capability
3
+ editable: True
4
+ questions:
5
+ - provideCapability
6
+
7
+ -
8
+ name: Deliver capability
9
+ editable: True
10
+ questions:
11
+ - deliverCapability
12
+
13
+ -
14
+ name: Describe capability partner
15
+ editable: True
16
+ questions:
17
+ - describeCapabilityPartner
@@ -0,0 +1,20 @@
1
+ -
2
+ name: Provide capability
3
+ editable: True
4
+ questions:
5
+ - provideCapabilityComment
6
+ - provideCapabilityScore
7
+
8
+ -
9
+ name: Deliver capability
10
+ editable: True
11
+ questions:
12
+ - deliverCapabilityComment
13
+ - deliverCapabilityScore
14
+
15
+ -
16
+ name: Describe capability partner
17
+ editable: True
18
+ questions:
19
+ - describeCapabilityPartnerComment
20
+ - describeCapabilityPartnerScore
@@ -0,0 +1,15 @@
1
+ question: How will you deliver the capability?
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,15 @@
1
+ question: Comments for "How will you deliver the capability?"
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,22 @@
1
+ question: Score for "How will you deliver the capability?"
2
+ depends:
3
+ - "on": "lot"
4
+ being:
5
+ - digital-capability-and-delivery-partner
6
+
7
+ type: radios
8
+ options:
9
+ - label: "0"
10
+ value: "0"
11
+ - label: "25"
12
+ value: "25"
13
+ - label: "50"
14
+ value: "50"
15
+ - label: "75"
16
+ value: "75"
17
+ - label: "100"
18
+ value: "100"
19
+
20
+ validations:
21
+ - name: answer_required
22
+ message: You must select an option
@@ -0,0 +1,15 @@
1
+ question: Describe the partner who will deliver the capability?
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,15 @@
1
+ question: Comment for "Describe the partner who will deliver the capability?"
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,20 @@
1
+ question: Score for "Describe the partner who will deliver the capability?""
2
+ depends:
3
+ - "on": "lot"
4
+ being:
5
+ - digital-capability-and-delivery-partner
6
+
7
+ type: radios
8
+ options:
9
+ - label: "0"
10
+ value: "0"
11
+ - label: "33"
12
+ value: "33"
13
+ - label: "66"
14
+ value: "66"
15
+ - label: "100"
16
+ value: "100"
17
+
18
+ validations:
19
+ - name: answer_required
20
+ message: You must select an option
@@ -0,0 +1,15 @@
1
+ question: How will you provide the capability?
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,15 @@
1
+ question: Comment for "How will you provide the capability?"
2
+ type: textbox_large
3
+ max_length_in_words: 500
4
+ depends:
5
+ - "on": "lot"
6
+ being:
7
+ - digital-capability-and-delivery-partner
8
+
9
+ validations:
10
+ -
11
+ name: answer_required
12
+ message: 'You need to answer this question'
13
+ -
14
+ name: under_word_limit
15
+ message: Your answer must be no more than 500 words
@@ -0,0 +1,22 @@
1
+ question: Score for "How will you provide the capability?"
2
+ depends:
3
+ - "on": "lot"
4
+ being:
5
+ - digital-capability-and-delivery-partner
6
+
7
+ type: radios
8
+ options:
9
+ - label: "0"
10
+ value: "0"
11
+ - label: "25"
12
+ value: "25"
13
+ - label: "50"
14
+ value: "50"
15
+ - label: "75"
16
+ value: "75"
17
+ - label: "100"
18
+ value: "100"
19
+
20
+ validations:
21
+ - name: answer_required
22
+ message: You must select an option
@@ -6,6 +6,16 @@ options:
6
6
  value: digital-outcomes
7
7
  description: >
8
8
  Such as a digital service, strategic delivery programme or an accessibility audit.
9
+ -
10
+ label: Provide digital capability and delivery partner
11
+ value: digital-capability-and-delivery-partner
12
+ description: >
13
+ Such as a team of developers from a consultant.
14
+ -
15
+ label: Provide digital specialists
16
+ value: digital-specialists
17
+ description: >
18
+ Such as a software engineer or content designer.
9
19
  -
10
20
  label: Provide user research studios
11
21
  value: user-research-studios
@@ -7,6 +7,8 @@ depends:
7
7
  -
8
8
  "on": lot
9
9
  being:
10
+ - digital-capability-and-delivery-partner
11
+ - digital-specialists
10
12
  - user-research-studios
11
13
 
12
14
  validations:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccs-digitalmarketplace-frameworks",
3
- "version": "1.9.0",
3
+ "version": "1.9.2",
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"
@@ -21,6 +21,10 @@ MANIFESTS = {
21
21
  'question_set': 'briefs',
22
22
  'manifest': 'award_brief'
23
23
  },
24
+ 'evaluations': {
25
+ 'question_set': 'evaluations',
26
+ 'manifest': 'edit_evaluations'
27
+ }
24
28
  }
25
29
 
26
30
  LEGACY_GCLOUD_LOTS = [
@@ -111,7 +115,7 @@ BRIEF_EXCLUDED_FRAMEWORKS = [
111
115
  ]
112
116
 
113
117
 
114
- def _get_schema_title_and_slugs(schema_type, framework_family=None, exclude_lot=None, exclude_frameworks=[]):
118
+ def _get_schema_title_and_slugs(schema_type, framework_family=None, exclude_lots=[], exclude_frameworks=[]):
115
119
  titles_and_slugs = []
116
120
  for family, framework_list in FRAMEWORKS_AND_LOTS.items():
117
121
  if framework_family:
@@ -123,10 +127,8 @@ def _get_schema_title_and_slugs(schema_type, framework_family=None, exclude_lot=
123
127
  if framework['framework_slug'] in exclude_frameworks:
124
128
  continue
125
129
  for lot_slug, lot_name in framework['lots']:
126
- if exclude_lot:
127
- # Some lots don't have briefs/brief response/brief award schemas
128
- if exclude_lot == lot_slug:
129
- continue
130
+ if lot_slug in exclude_lots:
131
+ continue
130
132
 
131
133
  titles_and_slugs.append(
132
134
  (
@@ -143,20 +145,30 @@ SCHEMAS = {
143
145
  'briefs': _get_schema_title_and_slugs(
144
146
  "Brief",
145
147
  "digital-outcomes-and-specialists",
146
- exclude_lot="user-research-studios",
148
+ exclude_lots=["user-research-studios"],
147
149
  exclude_frameworks=BRIEF_EXCLUDED_FRAMEWORKS
148
150
  ),
149
151
  'brief-responses': _get_schema_title_and_slugs(
150
152
  "Brief Response",
151
153
  "digital-outcomes-and-specialists",
152
- exclude_lot="user-research-studios",
154
+ exclude_lots=["user-research-studios"],
153
155
  exclude_frameworks=BRIEF_EXCLUDED_FRAMEWORKS
154
156
  ),
155
157
  'brief-awards': _get_schema_title_and_slugs(
156
158
  "Brief Award",
157
159
  "digital-outcomes-and-specialists",
158
- exclude_lot="user-research-studios",
160
+ exclude_lots=["user-research-studios"],
159
161
  exclude_frameworks=BRIEF_EXCLUDED_FRAMEWORKS
162
+ ),
163
+ 'evaluations': _get_schema_title_and_slugs(
164
+ "Evaluation",
165
+ "digital-outcomes-and-specialists",
166
+ exclude_lots=[
167
+ "digital-outcomes",
168
+ "digital-specialists",
169
+ "user-research-studios",
170
+ "user-research-participants",
171
+ ],
160
172
  )
161
173
  }
162
174
 
@@ -32,6 +32,9 @@ MANIFEST_QUESTION_SET = {
32
32
  "edit_submission": "services",
33
33
  "services_search_filters": "services",
34
34
  "download_results": "services",
35
+
36
+ "evaluations": "evaluations",
37
+ "edit_evaluations": "evaluations"
35
38
  }
36
39
 
37
40
  # `item` property wouldn't usually be part of a brief response but is included here as the dynamic list child question
@@ -44,14 +47,32 @@ QUESTION_SET_CONTEXT = {
44
47
  'max_day_rate': "max day rate",
45
48
  'item': 'essential requirement'
46
49
  },
47
- 'services': {'lot': 'context-lot'}
50
+ 'services': {'lot': 'context-lot'},
51
+ 'evaluation': {'lot': 'context-lot'}
48
52
  }
49
53
 
54
+ EXCLUDED_FRAMEWORKS = [
55
+ 'digital-outcomes-and-specialists',
56
+ 'digital-outcomes-and-specialists-2',
57
+ 'digital-outcomes-and-specialists-3',
58
+ 'digital-outcomes-and-specialists-4',
59
+ 'digital-outcomes-and-specialists-5',
60
+ 'g-cloud-6',
61
+ 'g-cloud-7',
62
+ 'g-cloud-8',
63
+ 'g-cloud-9',
64
+ 'g-cloud-10',
65
+ 'g-cloud-11',
66
+ 'g-cloud-12',
67
+ ]
68
+
50
69
 
51
70
  def get_manifests():
52
71
  paths = glob.glob('frameworks/*/manifests/*.yml')
53
72
  for path in paths:
54
73
  _, framework, _, manifest = path.split('/')
74
+ if framework in EXCLUDED_FRAMEWORKS:
75
+ continue
55
76
  manifest = manifest.replace('.yml', '')
56
77
 
57
78
  yield (framework, MANIFEST_QUESTION_SET[manifest], manifest)
@@ -4,6 +4,7 @@ import pytest
4
4
 
5
5
  from dmcontent import ContentLoader
6
6
  from dmcontent.utils import TemplateField
7
+ from .test_content import EXCLUDED_FRAMEWORKS
7
8
 
8
9
  content = ContentLoader('./')
9
10
 
@@ -17,6 +18,8 @@ def get_messages():
17
18
  paths = glob.glob('frameworks/*/messages/*.yml')
18
19
  for path in paths:
19
20
  _, framework, _, message = path.split('/')
21
+ if framework in EXCLUDED_FRAMEWORKS:
22
+ continue
20
23
  message = message.replace('.yml', '')
21
24
 
22
25
  yield (framework, message)
@@ -5,6 +5,8 @@ import pytest
5
5
  from jsonschema.validators import validator_for
6
6
  from jsonschema import ValidationError
7
7
 
8
+ from .test_content import EXCLUDED_FRAMEWORKS
9
+
8
10
 
9
11
  def get_all_files():
10
12
  root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../frameworks'))
@@ -12,7 +14,10 @@ def get_all_files():
12
14
  for filename in files:
13
15
  if filename.endswith('.yml'):
14
16
  file_path = os.path.join(root, filename)
15
- schema_name = file_path.replace(root_dir, '').split('/')[2:][0]
17
+ file_path_info = file_path.replace(root_dir, '').split('/')
18
+ if file_path_info[1] in EXCLUDED_FRAMEWORKS:
19
+ continue
20
+ schema_name = file_path_info[2:][0]
16
21
  yield (file_path, schema_name)
17
22
 
18
23