ccs-digitalmarketplace-frameworks 4.4.8 → 4.4.10

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 (56) hide show
  1. package/frameworks/digital-outcomes-and-specialists-7/questions/additional-lot-questions/demonstrateCapacity.yml +1 -1
  2. package/frameworks/digital-outcomes-and-specialists-7/questions/additional-lot-questions/demonstrateContinuousImprovement.yml +1 -1
  3. package/frameworks/digital-outcomes-and-specialists-7/questions/additional-lot-questions/demonstrateQuality.yml +7 -6
  4. package/frameworks/digital-outcomes-and-specialists-7/questions/additional-lot-questions/multiqContinuousImprovementAndKnowledgeTransfer.yml +1 -1
  5. package/frameworks/digital-outcomes-and-specialists-7/questions/declaration/averageNumberOfDaysTakenToPay.yml +1 -1
  6. package/frameworks/digital-outcomes-and-specialists-7/questions/declaration/averageNumberOfDaysTakenToPayInvoicesPrior6Months.yml +1 -1
  7. package/package.json +9 -3
  8. package/.flake8 +0 -12
  9. package/.github/dependabot.yml +0 -13
  10. package/.github/workflows/publish_package.yml +0 -22
  11. package/.github/workflows/release.yml +0 -32
  12. package/.github/workflows/test.yml +0 -66
  13. package/.nvmrc +0 -1
  14. package/.pre-commit-config.yaml +0 -16
  15. package/.python-version +0 -1
  16. package/.secrets.baseline +0 -66
  17. package/CHANGELOG.md +0 -27
  18. package/Makefile +0 -21
  19. package/SECURITY.md +0 -7
  20. package/SECURITY.txt +0 -7
  21. package/default.nix +0 -48
  22. package/images/frameworks-content-triangle.png +0 -0
  23. package/images/frameworks-manifest-file-tree-structure.png +0 -0
  24. package/local.example.nix +0 -22
  25. package/pyproject.toml +0 -45
  26. package/requirements-dev.txt +0 -274
  27. package/requirements.txt +0 -134
  28. package/schema_generator/__init__.py +0 -0
  29. package/schema_generator/assessment.py +0 -82
  30. package/schema_generator/filter.py +0 -151
  31. package/schema_generator/search.py +0 -134
  32. package/schema_generator/validation.py +0 -1096
  33. package/schemas/manifests.json +0 -47
  34. package/schemas/messages.json +0 -153
  35. package/schemas/metadata.json +0 -66
  36. package/schemas/questions.json +0 -472
  37. package/script_helpers/__init__.py +0 -0
  38. package/script_helpers/clone_helpers.py +0 -196
  39. package/scripts/clone-latest-framework.py +0 -38
  40. package/scripts/extract_validation_messages.py +0 -76
  41. package/scripts/generate-assessment-schema.py +0 -20
  42. package/scripts/generate-filter-schemas.py +0 -47
  43. package/scripts/generate-search-config.py +0 -58
  44. package/scripts/generate-validation-schemas.py +0 -52
  45. package/scripts/import_categories.py +0 -79
  46. package/tasks.py +0 -1
  47. package/tests/__init__.py +0 -0
  48. package/tests/test_clone_latest_framework.py +0 -131
  49. package/tests/test_content.py +0 -222
  50. package/tests/test_generate_assessment_schema.py +0 -184
  51. package/tests/test_generate_search_config.py +0 -82
  52. package/tests/test_generate_validation_schema.py +0 -1100
  53. package/tests/test_manifest.py +0 -75
  54. package/tests/test_messages.py +0 -51
  55. package/tests/test_metadata.py +0 -105
  56. package/tests/test_schema.py +0 -51
@@ -1,4 +1,4 @@
1
- name: Demonstrate capacity
1
+ name: Capability and capacity
2
2
  question: Assessment methodology
3
3
  question_advice: >
4
4
  <p>In order to satisfy the award criteria, you must fully address each of the sub-criteria a) to b):</p>
@@ -1,4 +1,4 @@
1
- name: Demonstrate continuous improvement
1
+ name: Collaboration and knowledge transfer
2
2
  question: Assessment methodology
3
3
  question_advice: >
4
4
  <p>In order to satisfy the award criteria, you must fully address each of the sub-criteria a) to b): </p>
@@ -1,9 +1,10 @@
1
- name: Demonstrate quality
2
- question: >
3
- <p>In order to satisfy the award criteria, you must fully address each of the sub-criteria (a) and (b) in your response:</p>
4
- <P>(a) Demonstrate how you will ensure quality in delivery and maintain quality through the life of call off contracts to meet buyers' requirements (in accordance with the requirements set out under part 3.2.3 of the Specification).</p>
5
- <p>(b) Demonstrate how you will ensure your staff deployed on assignments under this framework are at the forefront of current thinking and practises to address public sector buyer requirements and how you transfer this knowledge throughout your organisation (in accordance with the requirements set out under part 5.4 of the Specification).</p>
6
-
1
+ name: Quality and Innovation
2
+ question: Assessment methodology
3
+ question_advice: >
4
+ <p>In order to satisfy the award criteria, you must fully address each of the sub-criteria a) to b):</p>
5
+ <p>You must clearly demonstrate:</p>
6
+ <p>a) How you will ensure that the deliverables meet the quality standards agreed with the buyer. Your response must clearly describe what measures are in place to effectively identify, address and resolve any deviations from the expected quality during the lifetime of the call off contract (in accordance with the requirements set out under part 3.2.3.1 of the Specification).</p>
7
+ <p>b) How you will ensure your staff deployed under this framework are satisfactorily trained to ensure that they remain able to adapt and deliver the services in line with emerging best practice and government standards. Your response must clearly describe how you will transfer this knowledge throughout your organisation to deliver innovative solutions for buyers (in accordance with the requirements set out under part 5.4.1 to 5.4 4 of the Specification).</p>
7
8
  type: textbox_large
8
9
  max_length_in_words: 700
9
10
  hint: You must read Attachment 2d Quality Questionnaire for the details of this question's requirement, assessment methodology, response guidance and marking scheme.
@@ -1,4 +1,4 @@
1
- name: Demonstrate continuous improvement and knowledge transfer
1
+ name: Collaboration and knowledge transfer
2
2
  question: CCS requires you to demonstrate how your organisation will effectively collaborate with the buyer and transfer knowledge to ensure continued service delivery and appropriate handover throughout each stage of the contract lifecycle.
3
3
  depends:
4
4
  - "on": "lot"
@@ -1,5 +1,5 @@
1
1
  name: Average number of days taken to pay
2
- question: Please provide the average number of days taken by you to pay an invoice to those in your immediate supply chain on all contracts for the most recent six month reporting period. This should include the percentage of invoices paid within each of the following categories (this should include all situations where payments are due; not all payments involve an invoice).
2
+ question: Please provide the average number of days taken by you to pay an invoice to those in your immediate supply chain on all contracts for the most recent six month reporting period.
3
3
 
4
4
  hidden: true
5
5
  type: number
@@ -1,5 +1,5 @@
1
1
  name: Percentage of invoices paid prior 6 months
2
- question: Please provide the average number of days taken by you to pay an invoice to those in your immediate supply chain on all contracts for the prior six month reporting period. This should include the percentage of invoices paid within each of the following categories (this should include all situations where payments are due; not all payments involve an invoice).
2
+ question: Please provide the average number of days taken by you to pay an invoice to those in your immediate supply chain on all contracts for the prior six month reporting period.
3
3
 
4
4
  hidden: true
5
5
  type: number
package/package.json CHANGED
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "name": "ccs-digitalmarketplace-frameworks",
3
- "version": "4.4.8",
3
+ "version": "4.4.10",
4
4
  "description": "Data files for Digital Marketplace’s procurement frameworks",
5
- "repository": "git@github.com:Crown-Commercial-Service/ccs-digitalmarketplace-frameworks",
6
- "author": "enquiries@digitalmarketplace.service.gov.uk"
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+ssh://git@github.com/Crown-Commercial-Service/ccs-digitalmarketplace-frameworks.git"
8
+ },
9
+ "author": "enquiries@digitalmarketplace.service.gov.uk",
10
+ "files": [
11
+ "frameworks/**"
12
+ ]
7
13
  }
package/.flake8 DELETED
@@ -1,12 +0,0 @@
1
- [flake8]
2
- # Rule definitions: http://flake8.pycqa.org/en/latest/user/error-codes.html
3
- # D203: 1 blank line required before class docstring
4
- # E402: module level import not at top of file
5
- # W503: line break before binary operator
6
- exclude = venv*,__pycache__,node_modules,bower_components
7
- ignore = D203,W503
8
- max-complexity = 12
9
- max-line-length = 120
10
- per-file-ignores =
11
- scripts/* : E402
12
- tasks.py: F401
@@ -1,13 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: pip
4
- directory: "/"
5
- schedule:
6
- interval: weekly
7
- time: "03:00"
8
- open-pull-requests-limit: 10
9
- - package-ecosystem: "github-actions"
10
- directory: "/"
11
- schedule:
12
- interval: weekly
13
- time: "03:00"
@@ -1,22 +0,0 @@
1
- name: Node.js Package
2
- on:
3
- release:
4
- types: [published]
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - name: Read .nvmrc
10
- run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT
11
- id: nvm
12
-
13
- - uses: actions/checkout@v4
14
- # Setup .npmrc file to publish to npm
15
- - uses: actions/setup-node@v4
16
- with:
17
- node-version: '${{ steps.nvm.outputs.NVMRC }}'
18
- registry-url: 'https://registry.npmjs.org'
19
- - run: npm install
20
- - run: npm publish
21
- env:
22
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -1,32 +0,0 @@
1
- name: Tag release
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
-
8
- jobs:
9
- release:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
-
14
- - name: Get package version
15
- id: package_version
16
- run: echo "package-version=v$(jq -r ".version" package.json)" >> $GITHUB_OUTPUT
17
-
18
- - name: Check if version tag already exists
19
- id: version_tag
20
- uses: mukunku/tag-exists-action@bdad1eaa119ce71b150b952c97351c75025c06a9
21
- env:
22
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23
- with:
24
- tag: ${{ steps.package_version.outputs.package-version }}
25
-
26
- - name: Create GitHub release
27
- if: ${{ steps.version_tag.outputs.exists == 'false' }}
28
- uses: ncipollo/release-action@v1
29
- with:
30
- token: ${{ secrets.DM_GITHUB_TOKEN }}
31
- tag: ${{ steps.package_version.outputs.package-version }}
32
- name: Release ${{ steps.package_version.outputs.package-version }}
@@ -1,66 +0,0 @@
1
- name: Run tests
2
- on: [pull_request]
3
- jobs:
4
- unit_test:
5
- runs-on: ubuntu-latest
6
- strategy:
7
- fail-fast: false
8
- matrix:
9
- python-version: [ '3.11' ]
10
-
11
- steps:
12
- - uses: actions/checkout@v4
13
-
14
- - name: Set up Python ${{ matrix.python-version }}
15
- uses: actions/setup-python@v5
16
- with:
17
- python-version: ${{ matrix.python-version }}
18
-
19
- - name: Setup Python cache
20
- uses: actions/cache@v4
21
- with:
22
- path: venv
23
- key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt') }}
24
-
25
- - name: Install developer tools
26
- run: make bootstrap
27
-
28
- - name: Install dependencies
29
- run: invoke requirements-dev
30
-
31
- - name: Run tests
32
- run: invoke test
33
-
34
- functional_test:
35
- runs-on: ubuntu-latest
36
- strategy:
37
- matrix:
38
- python-version: [ '3.11' ]
39
- script:
40
- - scripts/generate-assessment-schema.py g-cloud-14
41
- - scripts/generate-search-config.py g-cloud-14 services --output-path=/tmp
42
- - scripts/generate-validation-schemas.py --output-path=/tmp
43
- - scripts/generate-filter-schemas.py --output-path=/tmp
44
-
45
- steps:
46
- - uses: actions/checkout@v4
47
-
48
- - name: Set up Python ${{ matrix.python-version }}
49
- uses: actions/setup-python@v5
50
- with:
51
- python-version: ${{ matrix.python-version }}
52
-
53
- - name: Setup Python cache
54
- uses: actions/cache@v4
55
- with:
56
- path: venv
57
- key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt') }}
58
-
59
- - name: Install developer tools
60
- run: make bootstrap
61
-
62
- - name: Install dependencies
63
- run: invoke requirements-dev
64
-
65
- - name: Test script
66
- run: venv/bin/python ${{ matrix.script }}
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- lts/jod
@@ -1,16 +0,0 @@
1
- ---
2
- repos:
3
- - repo: https://github.com/pre-commit/pre-commit-hooks
4
- rev: v5.0.0
5
- hooks:
6
- - id: trailing-whitespace
7
- - id: end-of-file-fixer
8
- - id: check-yaml
9
- - id: check-added-large-files
10
- - id: detect-private-key
11
-
12
- - repo: https://github.com/PyCQA/flake8
13
- rev: 7.0.0
14
- hooks:
15
- - id: flake8
16
- pass_filenames: false
package/.python-version DELETED
@@ -1 +0,0 @@
1
- 3.11
package/.secrets.baseline DELETED
@@ -1,66 +0,0 @@
1
- {
2
- "exclude": {
3
- "files": null,
4
- "lines": null
5
- },
6
- "generated_at": "2020-09-01T07:42:41Z",
7
- "plugins_used": [
8
- {
9
- "name": "AWSKeyDetector"
10
- },
11
- {
12
- "name": "ArtifactoryDetector"
13
- },
14
- {
15
- "base64_limit": 4.5,
16
- "name": "Base64HighEntropyString"
17
- },
18
- {
19
- "name": "BasicAuthDetector"
20
- },
21
- {
22
- "name": "CloudantDetector"
23
- },
24
- {
25
- "hex_limit": 3,
26
- "name": "HexHighEntropyString"
27
- },
28
- {
29
- "name": "IbmCloudIamDetector"
30
- },
31
- {
32
- "name": "IbmCosHmacDetector"
33
- },
34
- {
35
- "name": "JwtTokenDetector"
36
- },
37
- {
38
- "keyword_exclude": null,
39
- "name": "KeywordDetector"
40
- },
41
- {
42
- "name": "MailchimpDetector"
43
- },
44
- {
45
- "name": "PrivateKeyDetector"
46
- },
47
- {
48
- "name": "SlackDetector"
49
- },
50
- {
51
- "name": "SoftlayerDetector"
52
- },
53
- {
54
- "name": "StripeDetector"
55
- },
56
- {
57
- "name": "TwilioKeyDetector"
58
- }
59
- ],
60
- "results": {},
61
- "version": "0.13.1",
62
- "word_list": {
63
- "file": null,
64
- "hash": null
65
- }
66
- }
package/CHANGELOG.md DELETED
@@ -1,27 +0,0 @@
1
- # Digital Marketplace frameworks changelog
2
-
3
- Records breaking changes from major version bumps
4
-
5
- ## 4.3.0
6
-
7
- Add the G-Cloud 15 framework
8
-
9
- ## 4.0.0
10
-
11
- Add the FVRA questions section
12
-
13
- ## 3.0.0
14
-
15
- Add the agreements questions for the framework award form
16
-
17
- ## 2.0.0
18
-
19
- Rename evaluations to additional lot questions
20
-
21
- ## 1.9.0
22
-
23
- Add the Digital Outcomes and Specialists 7 framework
24
-
25
- ## 1.8.0
26
-
27
- Add the G-Cloud 14 framework
package/Makefile DELETED
@@ -1,21 +0,0 @@
1
-
2
- .DEFAULT_GOAL := bootstrap
3
-
4
- %:
5
- -@[ -z "$$TERM" ] || tput setaf 1 # red
6
- @>&2 echo warning: calling '`make`' is being deprecated in this repo, you should use '`invoke` (https://pyinvoke.org)' instead.
7
- -@[ -z "$$TERM" ] || tput setaf 9 # default
8
- @# pass goals to '`invoke`'
9
- invoke $(or $(MAKECMDGOALS), $@)
10
- @exit
11
-
12
- help:
13
- invoke --list
14
-
15
- .PHONY: bootstrap
16
- bootstrap:
17
- pip install digitalmarketplace-developer-tools
18
- @echo done
19
- -@[ -z "$$TERM" ] || tput setaf 2 # green
20
- @>&2 echo dmdevtools has been installed globally, run developer tasks with '`invoke`'
21
- -@[ -z "$$TERM" ] || tput setaf 9 # default
package/SECURITY.md DELETED
@@ -1,7 +0,0 @@
1
- Contact: cybersecurity@crowncommercial.gov.uk
2
-
3
- Policy: https://www.crowncommercial.gov.uk/vulnerability-disclosure-policy
4
-
5
- Acknowledgements: https://www.crowncommercial.gov.uk/vulnerability-disclosure-policy/acknowledgements
6
-
7
- Encryption: https://github.com/Crown-Commercial-Service/ccs-vulnerability-disclosure-policy/blob/main/vulnerability-disclosure-public-encryption.pub
package/SECURITY.txt DELETED
@@ -1,7 +0,0 @@
1
- Contact: cybersecurity@crowncommercial.gov.uk
2
-
3
- Policy: https://www.crowncommercial.gov.uk/about-ccs/vulnerability-disclosure-policy/
4
-
5
- Acknowledgements: https://github.com/Crown-Commercial-Service/ccs-vulnerability-disclosure-policy/blob/main/acknowledgements.txt
6
-
7
- Encryption: https://github.com/Crown-Commercial-Service/ccs-vulnerability-disclosure-policy/blob/main/vulnerability-disclosure-public-encryption.pub
package/default.nix DELETED
@@ -1,48 +0,0 @@
1
- argsOuter@{...}:
2
- let
3
- # specifying args defaults in this slightly non-standard way to allow us to include the default values in `args`
4
- args = rec {
5
- pkgs = import <nixpkgs> {};
6
- pythonPackages = pkgs.python36Packages;
7
- forDev = true;
8
- localOverridesPath = ./local.nix;
9
- } // argsOuter;
10
- in (with args; {
11
- digitalMarketplaceFrameworksEnv = (pkgs.stdenv.mkDerivation rec {
12
- name = "digitalmarketplace-frameworks-env";
13
- shortName = "dm-fwks";
14
- buildInputs = [
15
- pythonPackages.python
16
- pkgs.glibcLocales
17
- pkgs.libffi
18
- pkgs.libyaml
19
- # pip requires git to fetch some of its dependencies
20
- pkgs.git
21
- # for `cryptography`
22
- pkgs.openssl
23
- ] ++ pkgs.stdenv.lib.optionals forDev ([
24
- ] ++ pkgs.stdenv.lib.optionals pkgs.stdenv.isDarwin [
25
- ]
26
- );
27
-
28
- hardeningDisable = pkgs.stdenv.lib.optionals pkgs.stdenv.isDarwin [ "format" ];
29
-
30
- GIT_SSL_CAINFO="${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
31
- VIRTUALENV_ROOT = "venv${pythonPackages.python.pythonVersion}";
32
- VIRTUAL_ENV_DISABLE_PROMPT = "1";
33
- SOURCE_DATE_EPOCH = "315532800";
34
-
35
- # if we don't have this, we get unicode troubles in a --pure nix-shell
36
- LANG="en_GB.UTF-8";
37
-
38
- shellHook = ''
39
- export PS1="\[\e[0;36m\](nix-shell\[\e[0m\]:\[\e[0;36m\]${shortName})\[\e[0;32m\]\u@\h\[\e[0m\]:\[\e[0m\]\[\e[0;36m\]\w\[\e[0m\]\$ "
40
-
41
- if [ ! -e $VIRTUALENV_ROOT ]; then
42
- ${pythonPackages.python}/bin/python -m venv $VIRTUALENV_ROOT
43
- fi
44
- source $VIRTUALENV_ROOT/bin/activate
45
- make requirements${pkgs.stdenv.lib.optionalString forDev "-dev"}
46
- '';
47
- }).overrideAttrs (if builtins.pathExists localOverridesPath then (import localOverridesPath args) else (x: x));
48
- })
package/local.example.nix DELETED
@@ -1,22 +0,0 @@
1
- # default.nix calls out to the file local.nix if it exists, expecting a function which it will call, applying first
2
- # the args passed to the original default.nix and then `oldAttrs`, the attrset originally applied to mkDerivation.
3
- #
4
- # the function should return an attrset altered to the local user's desires, as they would wish to be applied to
5
- # mkDerivation to produce the env
6
-
7
- args: oldAttrs: oldAttrs // {
8
- # here we add some of our favourite packages to the environment which aren't necessarily to everyone's tastes
9
- buildInputs = oldAttrs.buildInputs ++ [
10
- args.pkgs.vim
11
- args.pythonPackages.ipython
12
- ];
13
-
14
- shellHook = oldAttrs.shellHook + ''
15
- # PS1 can't be set as a normal derivation attr as it gets clobbered early on in the upstream shellHook script
16
- export PS1="⚡$PS1⚡"
17
-
18
- # inject some whimsy into our session - note here we access a package which we don't actually end up
19
- # explicitly exposing to the final environment
20
- ${args.pkgs.fortune}/bin/fortune
21
- '';
22
- }
package/pyproject.toml DELETED
@@ -1,45 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "ccs-digitalmarketplace-frameworks"
7
- version = "0.0.0"
8
- dependencies = [
9
- 'docopt==0.6.2',
10
- 'deepmerge==2.0',
11
- 'python-json-logger==2.0.7',
12
- 'ccs-digitalmarketplace-content-loader==13.6.0',
13
- 'ccs-digitalmarketplace-utils==69.0.0',
14
- ]
15
- requires-python = ">=3.11,<3.12"
16
- authors = [
17
- {name = "CCS Developers"},
18
- ]
19
- description = "Digital Marketplace Frameworks"
20
- readme = "README.md"
21
- license-files = ["LICEN[CS]E*"]
22
-
23
- [project.urls]
24
- Homepage = "https://github.com/Crown-Commercial-Service/ccs-digitalmarketplace-frameworks"
25
- Repository = "https://github.com/Crown-Commercial-Service/ccs-digitalmarketplace-frameworks.git"
26
- Issues = "https://github.com/Crown-Commercial-Service/ccs-digitalmarketplace-frameworks/issues"
27
- Changelog = "https://github.com/Crown-Commercial-Service/ccs-digitalmarketplace-frameworks/CHANGELOG.md"
28
-
29
- [project.optional-dependencies]
30
- dev = [
31
- 'flake8',
32
- 'hypothesis',
33
- 'jsonschema',
34
- 'deepmerge',
35
- 'pytest',
36
- 'PyYAML',
37
- 'pre-commit',
38
- ]
39
-
40
- [tool.setuptools]
41
- py-modules = []
42
-
43
- [tool.pytest.ini_options]
44
- testpaths = "tests"
45
- norecursedirs = "venv*"