From 2cb6c2cdad32eddbdfa55bdd6cbb95f9032e2804 Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:30:14 +0100 Subject: [PATCH 1/7] NPA-5086 Add GET /Consent/{id} endpoint --- .../validated-relationships-service-api.yaml | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index fb436711..954d059b 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -734,6 +734,80 @@ paths: $ref: "./examples/responses/errors/downstream-service-error.yaml#/DownstreamServiceError" /Consent/{id}: + get: + summary: Get proxy roles + description: | + ## Overview + Use this endpoint to get the details of a proxy role, including current status, based on a provided id. + + You can (optionally) include the `_include=Consent:performer` request parameter to include the proxy's details in the response. + + You can (optionally) include the `_include=Consent:patient` request parameter to include the patient's details in the response. + + operationId: get-consent-by-id + parameters: + - $ref: "#/components/parameters/BearerAuthorization" + - $ref: "#/components/parameters/ConsentID" + - $ref: "#/components/parameters/ConsentBundleIncludes" + - $ref: "#/components/parameters/RequestID" + - $ref: "#/components/parameters/CorrelationID" + responses: + "200": + description: Information successfully returned. + content: + application/fhir+json: + schema: + $ref: "#/components/schemas/ConsentBundle" + examples: + ConsentMultipleRelationshipsStatusActiveBundle: + $ref: "./examples/responses/GET_Consent/filtered-relationships-status-active-include-details.yaml#/ConsentMultipleRelationshipsStatusActiveIncludeDetailsBundle" + + "4XX": + description: | + Errors will be returned for the first error encountered in the request. An error occurred as follows: + + | HTTP status | Error code | Description | + | ----------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | + | 400 | `MISSING_VALUE` | Missing header or parameter. For details, see the `diagnostics` field. | + | 400 | `INVALID_VALUE` | Invalid header. For details, see the `diagnostics` field. | + | 400 | `MISSING_ID_VALUE` | Missing id. | + | 400 | `NOT_SUPPORTED` | The request is not currently supported. | + | 401 | `ACCESS_DENIED` | Missing or invalid OAuth 2.0 bearer token in request. | + | 403 | `FORBIDDEN` | Access denied to resource. | + | 404 | `INVALIDATED_RESOURCE` | Resource that has been marked as invalid was requested - invalid resources cannot be retrieved | + | 405 | `METHOD_NOT_ALLOWED` | The method is not allowed. | + | 408 | `TIMEOUT` | Request timed out. | + | 422 | `INVALID_ID_SYSTEM` | Invalid id. | + | 429 | `THROTTLED` | You have exceeded your application's [rate limit](https://digital.nhs.uk/developer/guides-and-documentation/reference-guide#rate-limits). | + + content: + application/fhir+json: + schema: + $ref: "#/components/schemas/OperationOutcome" + examples: + AccessDeniedError: + $ref: "./examples/responses/errors/access-denied.yaml#/AccessDeniedError" + InvalidatedResourceError: + $ref: "./examples/responses/errors/invalidated-resource.yaml#/InvalidatedResourceError" + "5XX": + description: | + Errors will be returned for the first error encountered in the request. An error occurred as follows: + + | HTTP status | Error code | Description | + | ----------- | -------------------------- | ------------------------------------------------------------ | + | 500 | `SERVER_ERROR` | An unexpected internal server error has occurred. | + | 502 | `GATEWAY_ERROR` | Connection to the backend service failed. | + | 503 | `DOWNSTREAM_SERVICE_ERROR` | A downsteam service has failed, request cannot be completed. | + + content: + application/fhir+json: + schema: + $ref: "#/components/schemas/OperationOutcome" + examples: + InternalServerError: + $ref: "./examples/responses/errors/internal-server-error.yaml#/InternalServerError" + DownstreamServiceError: + $ref: "./examples/responses/errors/downstream-service-error.yaml#/DownstreamServiceError" patch: summary: Update a proxy role description: | @@ -769,6 +843,7 @@ paths: | Resource not found | Patch for non-existent Consent, request with an id not listed here | HTTP Status 404 and RESOURCE_NOT_FOUND error response | | Invalid state transition | Patch attempting invalid status change, request with id '6fb4361b' | HTTP Status 422 and INVALID_STATE_TRANSITION error response | parameters: + # Change id parameter to Component ConsentID when NPA-5088 is complete - name: id in: path required: true @@ -890,6 +965,7 @@ paths: $ref: "./examples/responses/errors/internal-server-error.yaml#/InternalServerError" DownstreamServiceError: $ref: "./examples/responses/errors/downstream-service-error.yaml#/DownstreamServiceError" + components: schemas: QuestionnaireResponse: @@ -2560,3 +2636,14 @@ components: type: string pattern: "^[^;]+;[^;]+$" example: NiV3CyMJH3xYV26ghlVpbbjT7pDVEA8HpFczAjRLTs1VezC4CYzupZ3XxXAWM7ELuseqrV8r0Ill7EL7G2tXUaVHCPWgg4q10+MxFjnRPrjDvckBRSZazqZcp0K2VBdUV0rZ7RUYJNJsjVAeefWhiK/Y4R+GFO86QDpt41JS9xA=;G123456 + + ConsentID: + in: query + name: id + required: true + description: The logical id of the Consent resource to update + schema: + type: string + format: uuid + pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" + example: 11C46F5F-CDEF-4865-94B2-0EE0EDCC26DA From 4aaea1f0b32b600001939a86f573afd11be3d25e Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:39:37 +0100 Subject: [PATCH 2/7] NPA-5086 Add 4XX Errors --- .../GET_CONSENT_ID/errors/invalid-id.yaml | 15 +++++++++++++++ .../GET_CONSENT_ID/errors/missing-id.yaml | 15 +++++++++++++++ .../validated-relationships-service-api.yaml | 4 ++++ 3 files changed, 34 insertions(+) create mode 100644 specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml create mode 100644 specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml b/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml new file mode 100644 index 00000000..d1d05570 --- /dev/null +++ b/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml @@ -0,0 +1,15 @@ +ConsentInvalidIDError: + summary: Invalid ID + description: Error raised due to an invalid ID request path being specified. + value: + issue: + - code: invalid + diagnostics: 'Invalid request with error - ID must be a valid UUID.' + details: + coding: + - code: "INVALID_ID_VALUE" + display: "Required parameter(s) are invalid." + system: "https://fhir.nhs.uk/R4/CodeSystem/ValidatedRelationships-ErrorOrWarningCode" + version: '1' + severity: error + resourceType: "OperationOutcome" diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml b/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml new file mode 100644 index 00000000..ffb30f93 --- /dev/null +++ b/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml @@ -0,0 +1,15 @@ +ConsentMissingIDError: + summary: Missing ID + description: Error raised due to an missing ID in the request path. + value: + issue: + - code: invalid + diagnostics: "Invalid request with error - ID must be specified in the request path." + details: + coding: + - code: "MISSING_ID_VALUE" + display: "Required parameter(s) are missing." + system: "https://fhir.nhs.uk/R4/CodeSystem/ValidatedRelationships-ErrorOrWarningCode" + version: '1' + severity: error + resourceType: "OperationOutcome" diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index 954d059b..9ff2b2f8 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -789,6 +789,10 @@ paths: $ref: "./examples/responses/errors/access-denied.yaml#/AccessDeniedError" InvalidatedResourceError: $ref: "./examples/responses/errors/invalidated-resource.yaml#/InvalidatedResourceError" + MissingIdError: + $ref: "./examples/responses/GET_Consent_ID/errors/missing-id.yaml#/ConsentMissingIDError" + InvalidIdError: + $ref: "./examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml#/ConsentInvalidIDError" "5XX": description: | Errors will be returned for the first error encountered in the request. An error occurred as follows: From c5cad9986bc7bdf69dc745319ec96e36d60b0905 Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:42:59 +0100 Subject: [PATCH 3/7] NPA-5086 Link 200 Responses --- specification/validated-relationships-service-api.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index 9ff2b2f8..21a97816 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -759,8 +759,14 @@ paths: schema: $ref: "#/components/schemas/ConsentBundle" examples: - ConsentMultipleRelationshipsStatusActiveBundle: - $ref: "./examples/responses/GET_Consent/filtered-relationships-status-active-include-details.yaml#/ConsentMultipleRelationshipsStatusActiveIncludeDetailsBundle" + ConsentSingleConsentingAdultRelationshipBundle: + $ref: "./examples/responses/GET_Consent/single-consenting-adult-relationship.yaml#/ConsentSingleConsentingAdultRelationshipBundle" + ConsentSingleConsentingAdultRelationshipIncludePerformerPatientBundle: + $ref: "./examples/responses/GET_Consent/single-consenting-adult-relationship-include-performer-patient.yaml#/ConsentSingleConsentingAdultRelationshipIncludePerformerPatientBundle" + ConsentSingleAdultChildRelationshipBundle: + $ref: "./examples/responses/GET_Consent/single-mother-child-relationship.yaml#/ConsentSingleAdultChildRelationshipBundle" + ConsentSingleAdultChildRelationshipIncludePerformerPatientBundle: + $ref: "./examples/responses/GET_Consent/single-mother-child-relationship-include-performer-patient.yaml#/ConsentSingleAdultChildRelationshipIncludePerformerPatientBundle" "4XX": description: | From 3859b82cb542b7a45f72d5e7ddf6e1b394ad450d Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:59:13 +0100 Subject: [PATCH 4/7] NPA-5086 Fix Example Links --- .../examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml | 4 ++-- .../examples/responses/GET_CONSENT_ID/errors/missing-id.yaml | 2 +- specification/validated-relationships-service-api.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml b/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml index d1d05570..cd0195e2 100644 --- a/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml +++ b/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml @@ -4,12 +4,12 @@ ConsentInvalidIDError: value: issue: - code: invalid - diagnostics: 'Invalid request with error - ID must be a valid UUID.' + diagnostics: "Invalid request with error - ID must be a valid UUID." details: coding: - code: "INVALID_ID_VALUE" display: "Required parameter(s) are invalid." system: "https://fhir.nhs.uk/R4/CodeSystem/ValidatedRelationships-ErrorOrWarningCode" - version: '1' + version: "1" severity: error resourceType: "OperationOutcome" diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml b/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml index ffb30f93..fc526fc8 100644 --- a/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml +++ b/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml @@ -10,6 +10,6 @@ ConsentMissingIDError: - code: "MISSING_ID_VALUE" display: "Required parameter(s) are missing." system: "https://fhir.nhs.uk/R4/CodeSystem/ValidatedRelationships-ErrorOrWarningCode" - version: '1' + version: "1" severity: error resourceType: "OperationOutcome" diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index 21a97816..9c027768 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -796,7 +796,7 @@ paths: InvalidatedResourceError: $ref: "./examples/responses/errors/invalidated-resource.yaml#/InvalidatedResourceError" MissingIdError: - $ref: "./examples/responses/GET_Consent_ID/errors/missing-id.yaml#/ConsentMissingIDError" + $ref: "./examples/responses/GET_CONSENT_ID/errors/missing-id.yaml#/ConsentMissingIDError" InvalidIdError: $ref: "./examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml#/ConsentInvalidIDError" "5XX": From 5c0bfb756ea98434f40fcf0864a58d97772bd9d0 Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:00:35 +0100 Subject: [PATCH 5/7] NPA-5086 Fix component description --- specification/validated-relationships-service-api.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index 9c027768..d935bd42 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -2651,7 +2651,7 @@ components: in: query name: id required: true - description: The logical id of the Consent resource to update + description: The logical id of the Consent resource schema: type: string format: uuid From 4957235df3e17b485801aa77eb5a7421e7dbaae5 Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:05:29 +0100 Subject: [PATCH 6/7] NPA-5086 Move Files --- .github/workflows/openapi-validate.yml | 2 +- Makefile | 2 +- .../{GET_CONSENT_ID => GET_Consent/ID}/errors/invalid-id.yaml | 0 .../{GET_CONSENT_ID => GET_Consent/ID}/errors/missing-id.yaml | 0 specification/validated-relationships-service-api.yaml | 4 ++-- 5 files changed, 4 insertions(+), 4 deletions(-) rename specification/examples/responses/{GET_CONSENT_ID => GET_Consent/ID}/errors/invalid-id.yaml (100%) rename specification/examples/responses/{GET_CONSENT_ID => GET_Consent/ID}/errors/missing-id.yaml (100%) diff --git a/.github/workflows/openapi-validate.yml b/.github/workflows/openapi-validate.yml index 56b350ef..cdb5f121 100644 --- a/.github/workflows/openapi-validate.yml +++ b/.github/workflows/openapi-validate.yml @@ -40,7 +40,7 @@ jobs: name: "GET /Questionnaire", make_target: "schema-get-questionnaire", }, - { name: "Errors", make_target: "schema-errors" }, + { name: "Errors", make_target: "schema-errors" } ] steps: - name: Checkout repository diff --git a/Makefile b/Makefile index abfc5809..ba9d25fa 100644 --- a/Makefile +++ b/Makefile @@ -148,4 +148,4 @@ schema-get-questionnaire: echo "Processing $$file"; \ poetry run python scripts/validate_schema.py questionnaireresponse "$$(realpath $$file)"; \ echo -e "$(GREEN)Success!$(RESET)"; \ - done \ No newline at end of file + done diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml b/specification/examples/responses/GET_Consent/ID/errors/invalid-id.yaml similarity index 100% rename from specification/examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml rename to specification/examples/responses/GET_Consent/ID/errors/invalid-id.yaml diff --git a/specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml b/specification/examples/responses/GET_Consent/ID/errors/missing-id.yaml similarity index 100% rename from specification/examples/responses/GET_CONSENT_ID/errors/missing-id.yaml rename to specification/examples/responses/GET_Consent/ID/errors/missing-id.yaml diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index d935bd42..a030159c 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -796,9 +796,9 @@ paths: InvalidatedResourceError: $ref: "./examples/responses/errors/invalidated-resource.yaml#/InvalidatedResourceError" MissingIdError: - $ref: "./examples/responses/GET_CONSENT_ID/errors/missing-id.yaml#/ConsentMissingIDError" + $ref: "./examples/responses/GET_Consent/ID/errors/missing-id.yaml#/ConsentMissingIDError" InvalidIdError: - $ref: "./examples/responses/GET_CONSENT_ID/errors/invalid-id.yaml#/ConsentInvalidIDError" + $ref: "./examples/responses/GET_Consent/ID/errors/invalid-id.yaml#/ConsentInvalidIDError" "5XX": description: | Errors will be returned for the first error encountered in the request. An error occurred as follows: From 6d975df5f56928a19ebb746f611c248583a5a09a Mon Sep 17 00:00:00 2001 From: github-actions <62281988+JackPlowman@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:19:12 +0100 Subject: [PATCH 7/7] NPA-5086 Fix Id Type --- specification/validated-relationships-service-api.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/validated-relationships-service-api.yaml b/specification/validated-relationships-service-api.yaml index a030159c..a6cde4be 100644 --- a/specification/validated-relationships-service-api.yaml +++ b/specification/validated-relationships-service-api.yaml @@ -2648,7 +2648,7 @@ components: example: NiV3CyMJH3xYV26ghlVpbbjT7pDVEA8HpFczAjRLTs1VezC4CYzupZ3XxXAWM7ELuseqrV8r0Ill7EL7G2tXUaVHCPWgg4q10+MxFjnRPrjDvckBRSZazqZcp0K2VBdUV0rZ7RUYJNJsjVAeefWhiK/Y4R+GFO86QDpt41JS9xA=;G123456 ConsentID: - in: query + in: path name: id required: true description: The logical id of the Consent resource