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.
- package/frameworks/digital-outcomes-and-specialists-7/manifests/edit_evaluations.yml +17 -0
- package/frameworks/digital-outcomes-and-specialists-7/manifests/evaluations.yml +20 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapability.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapabilityComment.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapabilityScore.yml +22 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartner.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartnerComment.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/describeCapabilityPartnerScore.yml +20 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapability.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapabilityComment.yml +15 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapabilityScore.yml +22 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/services/lot.yml +10 -0
- package/frameworks/digital-outcomes-and-specialists-7/questions/services/serviceName.yml +2 -0
- package/package.json +1 -1
- package/schema_generator/validation.py +20 -8
- package/tests/test_content.py +22 -1
- package/tests/test_messages.py +3 -0
- 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
|
package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/deliverCapability.yml
ADDED
|
@@ -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
|
package/frameworks/digital-outcomes-and-specialists-7/questions/evaluations/provideCapability.yml
ADDED
|
@@ -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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccs-digitalmarketplace-frameworks",
|
|
3
|
-
"version": "1.9.
|
|
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,
|
|
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
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
package/tests/test_content.py
CHANGED
|
@@ -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)
|
package/tests/test_messages.py
CHANGED
|
@@ -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)
|
package/tests/test_schema.py
CHANGED
|
@@ -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
|
-
|
|
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
|
|