Skip to content

Commit 2b5fbcc

Browse files
authored
Merge pull request #532 from NHSDigital/release/2025-03-10
Release/2025 03 10
2 parents 4c7afc6 + 1814cdf commit 2b5fbcc

File tree

21 files changed

+422
-91
lines changed

21 files changed

+422
-91
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 2025-03-10
4+
- [PI-387] Add Product Team Id to search results
5+
- [PI-843] Add Read Product to test UI
6+
- [PI-764] Refine Swagger
7+
38
## 2025-03-07
49
- [PI-383] External ID
510
- [PI-838] product_team includes product_team_id

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025.03.07
1+
2025.03.10

changelog/2025-03-10.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
- [PI-387] Add Product Team Id to search results
2+
- [PI-843] Add Read Product to test UI
3+
- [PI-764] Refine Swagger

infrastructure/swagger/02_info.yaml

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,32 @@ info:
1212
description: |
1313
## Overview
1414
15-
API to configure internal systems to allow a Connecting Party to connect. A source of information about Connecting Parties (systems that connect to NHSE) that helps provide system identity attributes that ensure NHSE services know what systems they are connecting to and the legal entities they are sharing data with. This service is driven by APIs that enable self-service for activities such as certificate management and environment access. It also is a store of end-to-end onboarding/integration data and a catalogue of endpoints.
15+
Use this API to access the Connecting Party Manager (CPM) service - an internal service for the creation and management of product IDs.
16+
17+
This API only has a single access mode, application-restricted - signed JWT authentication, through which you may:
18+
19+
* Create a product team
20+
* Create a product
21+
* Retrieve details about a product team
22+
* Retrieve details about a product
23+
* Retrieve a list of all products associated wit a team or all products associated with an organisation, grouped by product team
24+
* Delete a product team
25+
* Delete a product
1626
1727
## Who can use this API
1828
19-
This API can only be used where there is a legal basis to do so. Make sure you have a valid use case before you go too far with your development. You must demonstrate you have a valid use case as part of digital onboarding. Connecting Parties must have an appointed Clinical Safety Officer and undertake a Clinical Safety Assessment.
29+
Currently this API is for [internal use only](https://digital.nhs.uk/developer/guides-and-documentation/reference-guide#statuses).
2030
2131
## API status and roadmap
2232
23-
This API is in [development](https://digital.nhs.uk/developer/guides-and-documentation/reference-guide#statuses).
33+
This API is in development, meaning:
2434
25-
To see our roadmap, or to suggest, comment or vote on features for this API, see our interactive [product backlog](https://nhs-digital-api-management.featureupvote.com/).
26-
27-
If you have any other queries, [contact us](https://digital.nhs.uk/developer/help-and-support).
35+
* it is available for testing in the integration environment
36+
* we expect to make breaking changes based on developer feedback
2837
2938
## Service level
3039
31-
This API is a platinum service, meaning it is operational and supported 24 hours a day, 365 days a year.
40+
This API is a bronze service, meaning it is operational and supported only during business hours (8 am to 6 pm), Monday to Friday excluding bank holidays.
3241
3342
For more details, see [service levels](https://digital.nhs.uk/developer/guides-and-documentation/reference-guide#service-levels).
3443
@@ -96,28 +105,7 @@ info:
96105
97106
## Onboarding
98107
99-
You need to get your software approved by us before it can go live with this API. We call this onboarding. The onboarding process can sometimes be quite long, so it’s worth planning well ahead.
100-
101-
As part of this process, you need to demonstrate that you can manage risks and that your software conforms technically with the requirements for this API.
102-
103-
Information on this page might impact the design of your software. For details, see [Onboarding support information](https://digital.nhs.uk/developer/api-catalogue/national-record-locator-consumer-fhir/onboarding-support-information).
104-
105-
To understand how our online digital onboarding process works, see [digital onboarding](https://digital.nhs.uk/developer/guides-and-documentation/digital-onboarding#using-the-digital-onboarding-portal).
106-
107-
<div class="nhsd-m-emphasis-box nhsd-m-emphasis-box--emphasis nhsd-!t-margin-bottom-6" aria-label="Highlighted Information">
108-
<div class="nhsd-a-box nhsd-a-box--border-blue">
109-
<div class="nhsd-m-emphasis-box__image-box">
110-
<figure class="nhsd-a-image">
111-
<picture class="nhsd-a-image__picture">
112-
<img src="http://digital.nhs.uk/binaries/content/gallery/icons/play-circle.svg?colour=231f20" alt="" style="object-fit:fill">
113-
</picture>
114-
</figure>
115-
</div>
116-
<div class="nhsd-m-emphasis-box__content-box">
117-
<div data-uipath="website.contentblock.emphasis.content" class="nhsd-t-word-break"><p class="nhsd-t-body">To get started, sign in or create a <a href="http://onboarding.prod.api.platform.nhs.uk/">developer account</a>, then select 'product onboarding'.</p></div>
118-
</div>
119-
</div>
120-
</div>
108+
This API is not yet available for onboarding.
121109
122110
## Change log
123111

infrastructure/swagger/05_paths.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ paths:
3030
"200":
3131
$ref: "#/components/responses/StatusOK"
3232
"404":
33-
$ref: "#/components/responses/NotFound"
33+
description: _status not found
3434
parameters:
3535
- $ref: "#/components/parameters/HeaderVersion"
3636
- $ref: "#/components/parameters/HeaderRequestId"
@@ -128,7 +128,7 @@ paths:
128128
"200":
129129
$ref: "#/components/responses/CPMProductTeamRead"
130130
"404":
131-
$ref: "#/components/responses/NotFound"
131+
$ref: "#/components/responses/ProductTeamNotFound"
132132
x-amazon-apigateway-integration:
133133
<<: *ApiGatewayIntegration
134134
uri: ${method_readProductTeam}
@@ -151,7 +151,7 @@ paths:
151151
"200":
152152
$ref: "#/components/responses/CpmProductTeamDelete"
153153
"404":
154-
$ref: "#/components/responses/NotFound"
154+
$ref: "#/components/responses/ProductTeamNotFound"
155155
"409":
156156
$ref: "#/components/responses/Conflict"
157157
x-amazon-apigateway-integration:
@@ -225,9 +225,9 @@ paths:
225225
"201":
226226
$ref: "#/components/responses/ProductCreate"
227227
"400":
228-
$ref: "#/components/responses/BadRequest"
228+
$ref: "#/components/responses/CreateProductBadRequest"
229229
"404":
230-
$ref: "#/components/responses/NotFound"
230+
$ref: "#/components/responses/ProductTeamNotFound"
231231
x-amazon-apigateway-integration:
232232
<<: *ApiGatewayIntegration
233233
uri: ${method_createCpmProduct}
@@ -356,7 +356,7 @@ paths:
356356
"200":
357357
$ref: "#/components/responses/ProductRead"
358358
"404":
359-
$ref: "#/components/responses/NotFound"
359+
$ref: "#/components/responses/ProductNotFound"
360360
x-amazon-apigateway-integration:
361361
<<: *ApiGatewayIntegration
362362
uri: ${method_readCpmProduct}
@@ -424,7 +424,7 @@ paths:
424424
"200":
425425
$ref: "#/components/responses/ProductDelete"
426426
"404":
427-
$ref: "#/components/responses/NotFound"
427+
$ref: "#/components/responses/ProductDeleteNotFound"
428428
x-amazon-apigateway-integration:
429429
<<: *ApiGatewayIntegration
430430
uri: ${method_deleteCpmProduct}

infrastructure/swagger/07_components--schemas--domain.yaml

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ components:
8181
type: string
8282
name:
8383
type: string
84-
cpm_product_team_id:
85-
type: string
8684
product_team_id:
8785
type: string
86+
cpm_product_team_id:
87+
type: string
8888
ods_code:
8989
type: string
9090
status:
@@ -142,6 +142,8 @@ components:
142142
items:
143143
type: object
144144
properties:
145+
cpm_product_team_id:
146+
type: string
145147
product_team_id:
146148
type: string
147149
products:
@@ -178,23 +180,25 @@ components:
178180
nullable: true
179181
example:
180182
results:
181-
- org_code: "xyzzy"
183+
- org_code: "F5H1R"
182184
product_teams:
183-
- product_team_id: "1234"
185+
- product_team_id: "55e86121-3826-468c-a6f0-dd0f1fbc0259"
186+
cpm_product_team_id: "a9a9694d-001b-45ce-9f2a-6c9bf80ae0d0"
184187
products:
185-
- id: "P.123"
186-
product_team_id: "1234"
188+
- id: "P.1X3-XYZ"
189+
product_team_id: "55e86121-3826-468c-a6f0-dd0f1fbc0259"
187190
name: "My Great Product 1"
188191
ods_code: "F5H1R"
189192
status: "active"
190193
created_on: "2024-10-15T10:00:00Z"
191194
updated_on: "null"
192195
deleted_on: "null"
193196
keys: []
194-
- product_team_id: "5678"
197+
- product_team_id: "24ac1857-f718-4905-813f-52da930c3ea1"
198+
cpm_product_team_id: "152705aa-0342-487f-a654-64bba814a847"
195199
products:
196-
- id: "P.xyz"
197-
product_team_id: "5678"
200+
- id: "P.4Y6-ABC"
201+
product_team_id: "24ac1857-f718-4905-813f-52da930c3ea1"
198202
name: "My Great Product 3"
199203
ods_code: "F5H1R"
200204
status: "active"

infrastructure/swagger/10_components--parameters--path.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ components:
55
name: product_team_id
66
in: path
77
required: true
8-
description: product team identifier
8+
description: Product Team identifier. Either the "internally" generated id (cpm_product_team_id) or the provided team id (product_team_id)
99
schema:
1010
type: string
1111
ProductId:
1212
name: product_id
1313
in: path
1414
required: true
15-
description: product identifier
15+
description: The Product identifier generated at time of creation.
1616
schema:
1717
type: string

infrastructure/swagger/12_components--responses.yaml

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,43 @@ components:
2020
$ref: "#/components/schemas/StatusOK"
2121
headers:
2222
<<: *ResponseHeaders
23-
NotFound:
24-
description: Not found
23+
ProductTeamNotFound:
24+
description: Product Team has not been found
2525
content:
2626
application/json:
2727
schema:
2828
$ref: "#/components/schemas/ErrorResponse"
2929
example:
3030
errors:
3131
- code: "RESOURCE_NOT_FOUND"
32-
message: "Could not find <ENTITY> for key ('<ID>')"
32+
message: "Could not find ProductTeam for key ('f9518c12-6c83-4544-97db-d9dd1d64da97')"
33+
ProductNotFound:
34+
description: Product has not been found
35+
content:
36+
application/json:
37+
schema:
38+
$ref: "#/components/schemas/ErrorResponse"
39+
example:
40+
errors:
41+
- code: "RESOURCE_NOT_FOUND"
42+
message: "Could not find CpmProduct for key ('P.XXX-YYY')"
43+
ProductDeleteNotFound:
44+
description: Product has not been found
45+
content:
46+
application/json:
47+
schema:
48+
$ref: "#/components/schemas/ErrorResponse"
49+
examples:
50+
ProductTeamNotFound:
51+
value:
52+
errors:
53+
- code: "RESOURCE_NOT_FOUND"
54+
message: "Could not find ProductTeam for key ('f9518c12-6c83-4544-97db-d9dd1d64da97')"
55+
ProductNotFound:
56+
value:
57+
errors:
58+
- code: "RESOURCE_NOT_FOUND"
59+
message: "Could not find CpmProduct for key ('f9518c12-6c83-4544-97db-d9dd1d64da97', 'P.XXX-YYY')"
3360
Conflict:
3461
description: Conflict
3562
content:
@@ -39,7 +66,7 @@ components:
3966
example:
4067
errors:
4168
- code: "CONFLICT"
42-
message: "Product Team cannot be deleted as it still has associated Product Ids ['P.123-XYZ', 'P.456-ABC']"
69+
message: "Product Team cannot be deleted as it still has associated Product Ids ['P.1X3-XYZ', 'P.4Y6-ABC']"
4370
BadRequest:
4471
description: Bad request (multiple error types)
4572
content:
@@ -103,6 +130,33 @@ components:
103130
errors:
104131
- code: "MISSING_VALUE"
105132
message: "CreateProductTeamIncomingParams.ods_code: field required"
133+
CreateProductBadRequest:
134+
description: createProduct Bad request
135+
content:
136+
application/json:
137+
schema:
138+
$ref: "#/components/schemas/ErrorResponse"
139+
examples:
140+
MissingValue:
141+
value:
142+
errors:
143+
- code: "MISSING_VALUE"
144+
message: "CreateCpmProductIncomingParams.name: field required"
145+
ExtraFieldsValidationError:
146+
value:
147+
errors:
148+
- code: "VALIDATION_ERROR"
149+
message: "CreateCpmProductIncomingParams.extra_name: extra fields not permitted"
150+
EmptyValueValidationError:
151+
value:
152+
errors:
153+
- code: "VALIDATION_ERROR"
154+
message: "CreateCpmProductIncomingParams.name: ensure this value has at least 1 characters"
155+
InvalidJSONValidationError:
156+
value:
157+
errors:
158+
- code: "VALIDATION_ERROR"
159+
message: "Invalid JSON body was provided: line 1 column 20 (char 19)"
106160
headers:
107161
Access-Control-Allow-Origin:
108162
schema:

infrastructure/swagger/13_components--parameters--query.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ components:
55
name: product_team_id
66
in: query
77
required: false
8-
description: The ID of the product team to filter results by.
8+
description: Product Team identifier to filter results by. Either the "internally" generated id (cpm_product_team_id) or the provided team id (product_team_id)
99
schema:
1010
type: string
1111
OrganisationCodeQuery:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "connecting-party-manager"
3-
version = "2025.03.07"
3+
version = "2025.03.10"
44
description = "Repository for the Connecting Party Manager API and related services"
55
authors = ["NHS England"]
66
license = "LICENSE.md"

0 commit comments

Comments
 (0)