diff --git a/CHANGELOG.md b/CHANGELOG.md index 1488fb3a1..c6268e805 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 2024-12-11 +- [PI-650] Modify the Read Device endpoint for AS Devices +- [PI-666] Create an ASID for AS Device and add as a DeviceKey +- [PI-603] Update the spine_mhs questionnaire +- [PI-645] Update the spine_mhs_message_sets questionnaire + ## 2024-12-05 - [PI-631] Generate Product Ids - [PI-691] Allow devs to clear terminal after each Feature Test diff --git a/README.md b/README.md index b9b83fbe0..38bceb453 100644 --- a/README.md +++ b/README.md @@ -247,13 +247,13 @@ Executing feature tests in integration mode will then give you confidence that t To execute the feature tests entirely locally (executing lambdas directly, and otherwise mocking databases and responses to a high standard) you can do: ```shell -make test--feature-local +make test--feature--local ``` If you would like to pass `behave` flags, e.g. to \[stop after the first failure\]: ```shell -make test--feature-local BEHAVE_FLAGS="--stop" +make test--feature--local BEHAVE_FLAGS="--stop" ``` #### Integration @@ -261,7 +261,7 @@ make test--feature-local BEHAVE_FLAGS="--stop" To execute the feature tests across the entire stack (including Apigee and AWS) you can do ```shell -make test--feature-integration +make test--feature--integration ``` ### Generate the Feature Test Postman collection diff --git a/VERSION b/VERSION index c74a5222b..83311943e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2024.12.05 +2024.12.11 diff --git a/changelog/2024-12-11.md b/changelog/2024-12-11.md new file mode 100644 index 000000000..721e6ae9a --- /dev/null +++ b/changelog/2024-12-11.md @@ -0,0 +1,4 @@ +- [PI-650] Modify the Read Device endpoint for AS Devices +- [PI-666] Create an ASID for AS Device and add as a DeviceKey +- [PI-603] Update the spine_mhs questionnaire +- [PI-645] Update the spine_mhs_message_sets questionnaire diff --git a/pyproject.toml b/pyproject.toml index eeadc2ec6..b7825c738 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "connecting-party-manager" -version = "2024.12.05" +version = "2024.12.11" description = "Repository for the Connecting Party Manager API and related services" authors = ["NHS England"] license = "LICENSE.md" diff --git a/src/api/createDeviceAccreditedSystem/src/v1/steps.py b/src/api/createDeviceAccreditedSystem/src/v1/steps.py index 8160a78e3..0fe6205b2 100644 --- a/src/api/createDeviceAccreditedSystem/src/v1/steps.py +++ b/src/api/createDeviceAccreditedSystem/src/v1/steps.py @@ -7,11 +7,13 @@ read_product_team, ) from domain.core.cpm_product import CpmProduct +from domain.core.cpm_system_id import AsidId from domain.core.device import ( Device, DeviceTagAddedEvent, QuestionnaireResponseUpdatedEvent, ) +from domain.core.device_key.v1 import DeviceKeyType from domain.core.device_reference_data import DeviceReferenceData from domain.core.error import ( AccreditedSystemFatalError, @@ -20,6 +22,7 @@ ) from domain.core.product_key import ProductKeyType from domain.core.questionnaire import Questionnaire, QuestionnaireResponse +from domain.repository.cpm_system_id_repository import CpmSystemIdRepository from domain.repository.device_reference_data_repository import ( DeviceReferenceDataRepository, ) @@ -85,28 +88,41 @@ def validate_spine_as_questionnaire_response(data, cache) -> QuestionnaireRespon ) +def create_party_key_tag(data, cache) -> DeviceTagAddedEvent: + as_device: Device = data[create_as_device] + return as_device.add_tag(party_key=data[get_party_key]) + + +def create_asid(data, cache) -> AsidId: + repository = CpmSystemIdRepository[AsidId]( + table_name=cache["DYNAMODB_TABLE"], + dynamodb_client=cache["DYNAMODB_CLIENT"], + model=AsidId, + ) + asid = repository.read() + new_asid = AsidId.create(current_number=asid.latest_number) + return new_asid + + def create_as_device(data, cache) -> Device: product: CpmProduct = data[read_product] + asid: AsidId = data[create_asid] payload: CreateAsDeviceIncomingParams = data[parse_as_device_payload] party_key: str = data[get_party_key] - # Create a new Device dictionary excluding 'questionnaire_responses' - # Ticket PI-666 adds ASID generation. This will need to be sent across in the arguments instead of an empty string. device_payload = payload.dict(exclude={"questionnaire_responses"}) return product.create_device( - name=EprNameTemplate.AS_DEVICE.format(party_key=party_key, asid=""), + name=EprNameTemplate.AS_DEVICE.format(party_key=party_key, asid=asid.__root__), **device_payload ) -def create_party_key_tag(data, cache) -> DeviceTagAddedEvent: - as_device: Device = data[create_as_device] - return as_device.add_tag(party_key=data[get_party_key]) - - def create_device_keys(data, cache) -> Device: - # We will need to add some keys in the future, ASID? as_device: Device = data[create_as_device] + asid: AsidId = data[create_asid] + as_device.add_key( + key_type=DeviceKeyType.ACCREDITED_SYSTEM_ID, key_value=asid.__root__ + ) return as_device @@ -139,6 +155,16 @@ def write_device(data: dict[str, Device], cache) -> Device: return repo.write(as_device) +def write_asid(data: dict[str, AsidId], cache) -> str: + repository = CpmSystemIdRepository[AsidId]( + table_name=cache["DYNAMODB_TABLE"], + dynamodb_client=cache["DYNAMODB_CLIENT"], + model=AsidId, + ) + asid: AsidId = data[create_asid] + return repository.create_or_update(asid) + + def set_http_status(data, cache) -> tuple[HTTPStatus, dict]: as_device: Device = data[create_as_device] return HTTPStatus.CREATED, as_device.state_exclude_tags() @@ -170,11 +196,13 @@ def get_party_key(data, cache) -> str: read_device_reference_data, read_spine_as_questionnaire, validate_spine_as_questionnaire_response, + create_asid, create_as_device, create_party_key_tag, create_device_keys, add_device_reference_data_id, add_spine_as_questionnaire_response, write_device, + write_asid, set_http_status, ] diff --git a/src/api/createDeviceAccreditedSystem/tests/test_index.py b/src/api/createDeviceAccreditedSystem/tests/test_index.py index 5bdd3564b..25dab564e 100644 --- a/src/api/createDeviceAccreditedSystem/tests/test_index.py +++ b/src/api/createDeviceAccreditedSystem/tests/test_index.py @@ -10,6 +10,7 @@ from domain.core.cpm_product import CpmProduct from domain.core.cpm_system_id import ProductId from domain.core.device import Device +from domain.core.device_key.v1 import DeviceKey, DeviceKeyType from domain.core.product_key import ProductKeyType from domain.core.root import Root from domain.repository.cpm_product_repository import CpmProductRepository @@ -34,6 +35,7 @@ PRODUCT_TEAM_NAME = "My Product Team" PRODUCT_NAME = "My Product" VERSION = 1 +PARTY_KEY = "ABC1234-987654" QUESTIONNAIRE_DATA = { "ODS Code": "FH15R", @@ -68,7 +70,7 @@ def mock_epr_product_with_one_message_set_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -78,10 +80,22 @@ def mock_epr_product_with_one_message_set_drd() -> ( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response_1 = mhs_message_set_questionnaire.validate( - data={"Interaction ID": "urn:foo1", "MHS SN": "bar", "MHS IN": "baz"} + data={ + "Interaction ID": "bar:baz", + "MHS SN": "bar", + "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } ) questionnaire_response_2 = mhs_message_set_questionnaire.validate( - data={"Interaction ID": "urn:foo2", "MHS SN": "bar2", "MHS IN": "baz2"} + data={ + "Interaction ID": "bar2:baz2", + "MHS SN": "bar2", + "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + } ) # Set up DeviceReferenceData in DB @@ -123,7 +137,7 @@ def mock_epr_product_with_message_sets_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -134,10 +148,22 @@ def mock_epr_product_with_message_sets_drd() -> ( ) questionnaire_response_1 = mhs_message_set_questionnaire.validate( - data={"Interaction ID": "urn:foo1", "MHS SN": "bar", "MHS IN": "baz"} + data={ + "Interaction ID": "bar:baz", + "MHS SN": "bar", + "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } ) questionnaire_response_2 = mhs_message_set_questionnaire.validate( - data={"Interaction ID": "urn:foo2", "MHS SN": "bar2", "MHS IN": "baz2"} + data={ + "Interaction ID": "bar2:baz2", + "MHS SN": "bar2", + "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + } ) # Set up DeviceReferenceData in DB device_reference_data_mhs = product.create_device_reference_data( @@ -196,7 +222,7 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -206,10 +232,22 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> ( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response_1 = mhs_message_set_questionnaire_1.validate( - data={"Interaction ID": "urn:foo1", "MHS SN": "bar", "MHS IN": "baz"} + data={ + "Interaction ID": "bar:baz", + "MHS SN": "bar", + "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } ) questionnaire_response_2 = mhs_message_set_questionnaire_1.validate( - data={"Interaction ID": "urn:foo2", "MHS SN": "bar2", "MHS IN": "baz2"} + data={ + "Interaction ID": "bar2:baz2", + "MHS SN": "bar2", + "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + } ) # Set up DeviceReferenceData in DB @@ -223,10 +261,22 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> ( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response_3 = mhs_message_set_questionnaire_2.validate( - data={"Interaction ID": "urn:foo3", "MHS SN": "bar3", "MHS IN": "baz3"} + data={ + "Interaction ID": "bar3:baz3", + "MHS SN": "bar3", + "MHS IN": "baz3", + "MHS CPA ID": f"{PARTY_KEY}:bar3:baz3", + "Unique Identifier": f"{PARTY_KEY}:bar3:baz3", + } ) questionnaire_response_4 = mhs_message_set_questionnaire_2.validate( - data={"Interaction ID": "urn:foo4", "MHS SN": "bar4", "MHS IN": "baz4"} + data={ + "Interaction ID": "bar4:baz4", + "MHS SN": "bar4", + "MHS IN": "baz4", + "MHS CPA ID": f"{PARTY_KEY}:bar4:baz4", + "Unique Identifier": f"{PARTY_KEY}:bar4:baz4", + } ) # Set up DeviceReferenceData in DB @@ -286,7 +336,7 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -296,10 +346,22 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> ( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response_1 = mhs_message_set_questionnaire_1.validate( - data={"Interaction ID": "urn:foo1", "MHS SN": "bar", "MHS IN": "baz"} + data={ + "Interaction ID": "bar:baz", + "MHS SN": "bar", + "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } ) questionnaire_response_2 = mhs_message_set_questionnaire_1.validate( - data={"Interaction ID": "urn:foo2", "MHS SN": "bar2", "MHS IN": "baz2"} + data={ + "Interaction ID": "bar2:baz2", + "MHS SN": "ba2r", + "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + } ) # Set up DeviceReferenceData in DB @@ -313,10 +375,22 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> ( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response_3 = mhs_message_set_questionnaire_2.validate( - data={"Interaction ID": "urn:foo3", "MHS SN": "bar3", "MHS IN": "baz3"} + data={ + "Interaction ID": "bar3:baz3", + "MHS SN": "bar3", + "MHS IN": "baz3", + "MHS CPA ID": f"{PARTY_KEY}:bar3:baz3", + "Unique Identifier": f"{PARTY_KEY}:bar3:baz3", + } ) questionnaire_response_4 = mhs_message_set_questionnaire_2.validate( - data={"Interaction ID": "urn:foo4", "MHS SN": "bar4", "MHS IN": "baz4"} + data={ + "Interaction ID": "bar4:baz4", + "MHS SN": "bar4", + "MHS IN": "baz4", + "MHS CPA ID": f"{PARTY_KEY}:bar4:baz4", + "Unique Identifier": f"{PARTY_KEY}:bar4:baz4", + } ) # Set up DeviceReferenceData in DB @@ -389,7 +463,7 @@ def mock_epr_product_without_message_set_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -425,7 +499,7 @@ def test_index() -> None: device = Device(**_device) assert device.product_team_id == product.product_team_id assert device.product_id == product.id - assert device.name == "ABC1234-987654/ - Accredited System" + assert device.name == "ABC1234-987654/200000100000 - Accredited System" assert device.ods_code == ODS_CODE assert device.created_on.date() == datetime.today().date() assert device.updated_on.date() == datetime.today().date() @@ -448,9 +522,16 @@ def test_index() -> None: ) # Check party_key is added to tags in the created device - expected_party_key = (str(ProductKeyType.PARTY_KEY), "abc1234-987654") + expected_party_key = (str(ProductKeyType.PARTY_KEY), PARTY_KEY.lower()) assert any(expected_party_key in tag.__root__ for tag in created_device.tags) + # Check an ASID is generated and added to the keys. + assert isinstance(created_device.keys[0], DeviceKey) + assert created_device.keys[0].__dict__ == { + "key_type": DeviceKeyType.ACCREDITED_SYSTEM_ID, + "key_value": "200000100000", + } + @pytest.mark.parametrize( ["body", "path_parameters", "error_code", "status_code"], diff --git a/src/api/createDeviceMessageHandlingSystem/src/v1/steps.py b/src/api/createDeviceMessageHandlingSystem/src/v1/steps.py index ab7ee75f6..dbdb62be4 100644 --- a/src/api/createDeviceMessageHandlingSystem/src/v1/steps.py +++ b/src/api/createDeviceMessageHandlingSystem/src/v1/steps.py @@ -1,6 +1,9 @@ from http import HTTPStatus from domain.api.common_steps.general import parse_event_body +from domain.api.common_steps.questionnaire_response_validation import ( + process_and_validate_questionnaire_response, +) from domain.api.common_steps.read_product import ( get_party_key, parse_path_params, @@ -77,7 +80,7 @@ def read_device_reference_data(data, cache) -> DeviceReferenceData: ) except ValueError: raise ConfigurationError( - "You must configure exactly one MessageSet Device Reference Data before creating an MHS Device" + "You must configure exactly one MessageSet Device Reference Data before creating an MHS Device." ) return device_reference_data @@ -87,16 +90,26 @@ def read_spine_mhs_questionnaire(data, cache) -> Questionnaire: def validate_spine_mhs_questionnaire_response(data, cache) -> QuestionnaireResponse: - spine_mhs_questionnaire: Questionnaire = data[read_spine_mhs_questionnaire] + questionnaire: Questionnaire = data[read_spine_mhs_questionnaire] payload: CreateMhsDeviceIncomingParams = data[parse_mhs_device_payload] - - spine_mhs_questionnaire_response = payload.questionnaire_responses[ + raw_questionnaire_responses = payload.questionnaire_responses[ QuestionnaireInstance.SPINE_MHS ] - return spine_mhs_questionnaire.validate( - data=spine_mhs_questionnaire_response.__root__[0] - ) + if len(raw_questionnaire_responses) != 1: + raise ConfigurationError( + "You must provide exactly one spine_mhs questionnaire response to create an MHS Device." + ) + party_key = data[get_party_key] + + validated_responses = [ + process_and_validate_questionnaire_response( + questionnaire, qr, party_key, instance=QuestionnaireInstance.SPINE_MHS + ) + for qr in raw_questionnaire_responses + ] + + return validated_responses def create_mhs_device(data, cache) -> Device: @@ -118,20 +131,18 @@ def create_party_key_tag(data, cache) -> DeviceTagAddedEvent: def create_cpa_id_keys(data, cache) -> DeviceKeyAddedEvent: mhs_device: Device = data[create_mhs_device] - party_key = data[get_party_key] drd: DeviceReferenceData = data[read_device_reference_data] questionnaire_responses = drd.questionnaire_responses.get( f"{QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS}/1", [] ) - interaction_ids = [ - response.data.get(SdsFieldName.INTERACTION_ID) - for response in questionnaire_responses + cpa_ids = [ + response.data.get(SdsFieldName.CPA_ID) for response in questionnaire_responses ] - for id in interaction_ids: - mhs_device.add_key(key_type=DeviceKeyType.CPA_ID, key_value=f"{party_key}:{id}") + for id in cpa_ids: + mhs_device.add_key(key_type=DeviceKeyType.CPA_ID, key_value=id) return mhs_device @@ -148,12 +159,13 @@ def add_device_reference_data_id(data, cache) -> DeviceReferenceDataIdAddedEvent def add_spine_mhs_questionnaire_response( data, cache ) -> QuestionnaireResponseUpdatedEvent: - spine_mhs_questionnaire_response: QuestionnaireResponse = data[ + spine_mhs_questionnaire_response: list[QuestionnaireResponse] = data[ validate_spine_mhs_questionnaire_response ] mhs_device: Device = data[create_mhs_device] - return mhs_device.add_questionnaire_response(spine_mhs_questionnaire_response) + for qr in spine_mhs_questionnaire_response: + mhs_device.add_questionnaire_response(qr) def write_device(data: dict[str, Device], cache) -> Device: @@ -177,8 +189,8 @@ def set_http_status(data, cache) -> tuple[HTTPStatus, dict]: read_product, get_party_key, check_for_existing_mhs, - read_device_reference_data, read_spine_mhs_questionnaire, + read_device_reference_data, validate_spine_mhs_questionnaire_response, create_mhs_device, create_party_key_tag, diff --git a/src/api/createDeviceMessageHandlingSystem/tests/test_index.py b/src/api/createDeviceMessageHandlingSystem/tests/test_index.py index 6fe166705..4e91703b1 100644 --- a/src/api/createDeviceMessageHandlingSystem/tests/test_index.py +++ b/src/api/createDeviceMessageHandlingSystem/tests/test_index.py @@ -35,25 +35,25 @@ PRODUCT_TEAM_NAME = "My Product Team" PRODUCT_NAME = "My Product" VERSION = 1 +PARTY_KEY = "ABC1234-987654" QUESTIONNAIRE_DATA = { - "Address": "http://example.com", - "Unique Identifier": "123456", - "Managing Organization": "Example Org", - "MHS Party key": "party-key-001", - "MHS CPA ID": "cpa-id-001", - "Approver URP": "approver-123", - "Contract Property Template Key": "contract-key-001", - "Date Approved": "2024-01-01", - "Date DNS Approved": "2024-01-02", - "Date Requested": "2024-01-03", - "DNS Approver": "dns-approver-456", - "Interaction Type": "FHIR", "MHS FQDN": "mhs.example.com", - "MHS Is Authenticated": "PERSISTENT", - "Product Key": "product-key-001", - "Requestor URP": "requestor-789", - "MHS Manufacturer Organisation": "AAA", + "MHS Service Description": "Example Description", + "MHS Manufacturer Organisation": "F5H1R", + "Product Name": "Product Name", + "Product Version": "1", + "Approver URP": "UI provided", + "DNS Approver": "UI provided", + "Requestor URP": "UI provided", +} +QUESTIONNAIRE_DATA_SYSTEM_GENERATED_FIELDS = { + "Address": "https://mhs.example.com", + "MHS Party key": PARTY_KEY, + "Date Approved": "datetime", + "Date DNS Approved": "None", + "Date Requested": "datetime", + "Managing Organization": "ABC1234", } @@ -77,34 +77,38 @@ def mock_epr_product_with_message_set_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) product_repo.write(entity=product) - # set up questionnaire responses + # set up mhs drd questionnaire responses mhs_message_set_questionnaire = QuestionnaireRepository().read( QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ) questionnaire_response = mhs_message_set_questionnaire.validate( data={ - "Interaction ID": "urn:foo", "MHS SN": "bar", "MHS IN": "baz", + "Interaction ID": "bar:baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", } ) questionnaire_response_2 = mhs_message_set_questionnaire.validate( data={ - "Interaction ID": "urn:foo2", "MHS SN": "bar2", "MHS IN": "baz2", + "Interaction ID": "bar2:baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", }, ) # Set up DeviceReferenceData in DB device_reference_data = product.create_device_reference_data( - name=EprNameTemplate.MESSAGE_SETS.format(party_key="ABC1234-987654") + name=EprNameTemplate.MESSAGE_SETS.format(party_key=PARTY_KEY) ) device_reference_data.add_questionnaire_response(questionnaire_response) device_reference_data.add_questionnaire_response(questionnaire_response_2) @@ -170,7 +174,7 @@ def mock_epr_product_without_message_set_drd() -> ( product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="ABC1234-987654") + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -215,7 +219,9 @@ def test_index() -> None: questionnaire_responses = device.questionnaire_responses["spine_mhs/1"] assert len(questionnaire_responses) == 1 questionnaire_response = questionnaire_responses[0] - assert questionnaire_response.data == QUESTIONNAIRE_DATA + assert len(questionnaire_response.data) == len(QUESTIONNAIRE_DATA) + len( + QUESTIONNAIRE_DATA_SYSTEM_GENERATED_FIELDS + ) # Retrieve the created resource repo = DeviceRepository( @@ -293,19 +299,29 @@ def test_incoming_errors(body, path_parameters, error_code, status_code): }, }, "VALIDATION_ERROR", - "CreateMhsDeviceIncomingParams.questionnaire_responses.spine_mhs.__root__: ensure this value has at most 1 items", + "You must provide exactly one spine_mhs questionnaire response to create an MHS Device.", 400, ), ( { "questionnaire_responses": { - "spine_mhs": [{"Address": "http://example.com"}] + "spine_mhs": [{"MHS FQDN": "mhs.example.com"}] } }, "MISSING_VALUE", "Failed to validate data against 'spine_mhs/1': 'MHS Manufacturer Organisation' is a required property", 400, ), + ( + { + "questionnaire_responses": { + "spine_mhs": [{"MHS Manufacturer Organisation": "F5H1R"}] + } + }, + "VALIDATION_ERROR", + "The following required fields are missing in the response to spine_mhs: MHS FQDN", + 400, + ), ], ) def test_questionnaire_response_validation_errors( diff --git a/src/api/createDeviceReferenceDataMessageSet/src/v1/steps.py b/src/api/createDeviceReferenceDataMessageSet/src/v1/steps.py index a9ebb6c10..890226892 100644 --- a/src/api/createDeviceReferenceDataMessageSet/src/v1/steps.py +++ b/src/api/createDeviceReferenceDataMessageSet/src/v1/steps.py @@ -1,6 +1,9 @@ from http import HTTPStatus from domain.api.common_steps.general import parse_event_body +from domain.api.common_steps.questionnaire_response_validation import ( + process_and_validate_questionnaire_response, +) from domain.api.common_steps.read_product import ( get_party_key, parse_path_params, @@ -51,19 +54,31 @@ def require_no_existing_message_sets_device_reference_data( ) -def read_questionnaire(data, cache) -> Questionnaire: +def read_spine_mhs_message_sets_questionnaire(data, cache) -> Questionnaire: return QuestionnaireRepository().read(QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS) def validate_questionnaire_responses(data, cache) -> list[QuestionnaireResponse]: - questionnaire: Questionnaire = data[read_questionnaire] + questionnaire: Questionnaire = data[read_spine_mhs_message_sets_questionnaire] payload: CreateDeviceReferenceMessageSetsDataParams = data[ parse_device_reference_data_for_epr_payload ] raw_questionnaire_responses = payload.questionnaire_responses[ QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS ] - return [questionnaire.validate(data=qr) for qr in raw_questionnaire_responses] + party_key = data[get_party_key] + + validated_responses = [ + process_and_validate_questionnaire_response( + questionnaire, + qr, + party_key, + instance=QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS, + ) + for qr in raw_questionnaire_responses + ] + + return validated_responses def create_message_set_device_reference_data(data, cache) -> DeviceReferenceData: @@ -110,7 +125,7 @@ def set_http_status(data, cache) -> tuple[HTTPStatus, str]: read_product, get_party_key, require_no_existing_message_sets_device_reference_data, - read_questionnaire, + read_spine_mhs_message_sets_questionnaire, validate_questionnaire_responses, create_message_set_device_reference_data, add_questionnaire_response, diff --git a/src/api/createDeviceReferenceDataMessageSet/tests/test_index.py b/src/api/createDeviceReferenceDataMessageSet/tests/test_index.py index 25d84b089..b71893808 100644 --- a/src/api/createDeviceReferenceDataMessageSet/tests/test_index.py +++ b/src/api/createDeviceReferenceDataMessageSet/tests/test_index.py @@ -7,7 +7,7 @@ from unittest import mock from domain.core.cpm_product import CpmProduct -from domain.core.cpm_system_id import PartyKeyId, ProductId +from domain.core.cpm_system_id import ProductId from domain.core.device_reference_data import DeviceReferenceData from domain.core.product_key import ProductKeyType from domain.core.root import Root @@ -26,6 +26,7 @@ PRODUCT_ID = ProductId.create() PRODUCT_NAME = "My Product" VERSION = 1 +PARTY_KEY = "AAA-100001" @contextmanager @@ -46,10 +47,8 @@ def mock_product() -> Generator[tuple[ModuleType, CpmProduct], Any, None]: product = product_team.create_cpm_product( name=PRODUCT_NAME, product_id=PRODUCT_ID ) - product.add_key( - key_type=ProductKeyType.PARTY_KEY, - key_value=str(PartyKeyId.create(current_number=100000, ods_code="AAA")), - ) + product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY), + product_repo = CpmProductRepository( table_name=TABLE_NAME, dynamodb_client=client ) @@ -105,10 +104,16 @@ def test_index_without_questionnaire() -> None: def test_index_with_questionnaire() -> None: questionnaire_data = { - "Interaction ID": "foo", "MHS SN": "bar", "MHS IN": "baz", } + questionnaire_data_with_generated_fields = { + "MHS SN": "bar", + "MHS IN": "baz", + "Interaction ID": "bar:baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } with mock_product() as (index, product): # Execute the lambda @@ -147,7 +152,7 @@ def test_index_with_questionnaire() -> None: ] assert len(questionnaire_responses) == 1 questionnaire_response = questionnaire_responses[0] - assert questionnaire_response.data == questionnaire_data + assert questionnaire_response.data == questionnaire_data_with_generated_fields # Retrieve the created resource repo = DeviceReferenceDataRepository( diff --git a/src/api/readDevice/src/v1/steps.py b/src/api/readDevice/src/v1/steps.py index 08c7ac441..93b148d2f 100644 --- a/src/api/readDevice/src/v1/steps.py +++ b/src/api/readDevice/src/v1/steps.py @@ -74,14 +74,37 @@ def read_device_reference_data(data, cache) -> list[DeviceReferenceData]: id=id, ) device_reference_datas.append(drd) - return device_reference_datas +def filter_by_jsonpath(data, filters: list) -> dict: + response = {} + if "*" not in filters: + response = { + filter_key.lstrip("*."): data[filter_key.lstrip("*.")] + for filter_key in filters + } + return response + return data + + +def filter_device_reference_data(data, cache) -> list[DeviceReferenceData]: + device: Device = data[read_device] + device_reference_data_list: list[DeviceReferenceData] = data[ + read_device_reference_data + ] + + for drd in device_reference_data_list: + filters = device.device_reference_data[str(drd.id)] + for questionnaire_response in drd.questionnaire_responses.values(): + for qr in questionnaire_response: + qr.data = filter_by_jsonpath(data=qr.data, filters=filters) + return device_reference_data_list + + def update_device_with_device_reference_data(data, cache) -> Device: device: Device = data[read_device] device_reference_datas = data[read_device_reference_data] - [ device.questionnaire_responses.setdefault(key, []).extend(responses) for drd in device_reference_datas @@ -102,6 +125,7 @@ def device_to_dict(data, cache) -> tuple[str, dict]: read_product, read_device, read_device_reference_data, + filter_device_reference_data, update_device_with_device_reference_data, device_to_dict, ] diff --git a/src/api/readDevice/tests/test_index.py b/src/api/readDevice/tests/test_index.py index 9675ef246..b2bbbe399 100644 --- a/src/api/readDevice/tests/test_index.py +++ b/src/api/readDevice/tests/test_index.py @@ -30,6 +30,7 @@ PRODUCT_NAME = "cpm-product-name" PRODUCT_TEAM_KEYS = [{"key_type": "product_team_id_alias", "key_value": "BAR"}] DEVICE_NAME = "device" +PARTY_KEY = "F5H1R-850000" @pytest.mark.parametrize( @@ -124,6 +125,161 @@ def test_index_mhs_device(version): name=PRODUCT_TEAM_NAME, keys=PRODUCT_TEAM_KEYS ) + with mock_table(TABLE_NAME) as client, mock.patch.dict( + os.environ, + { + "DYNAMODB_TABLE": TABLE_NAME, + "AWS_DEFAULT_REGION": "eu-west-2", + }, + clear=True, + ): + # Set up ProductTeam in DB + product_team_repo = ProductTeamRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + product_team_repo.write(entity=product_team) + + # Set up EPR Product in DB + cpm_product = product_team.create_cpm_product( + name=PRODUCT_NAME, product_id=PRODUCT_ID + ) + cpm_product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value=PARTY_KEY) + product_repo = CpmProductRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + product_repo.write(cpm_product) + + # set up mhs message set questionnaire responses + mhs_message_set_questionnaire = QuestionnaireRepository().read( + QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS + ) + questionnaire_response = mhs_message_set_questionnaire.validate( + data={ + "MHS SN": "bar", + "MHS IN": "baz", + "Interaction ID": "bar:baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } + ) + questionnaire_response_2 = mhs_message_set_questionnaire.validate( + data={ + "MHS SN": "bar2", + "MHS IN": "baz2", + "Interaction ID": "bar2:baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + }, + ) + + # Set up DeviceReferenceData in DB + device_reference_data = cpm_product.create_device_reference_data( + name="ABC1234-987654 - MHS Message Set" + ) + device_reference_data.add_questionnaire_response(questionnaire_response) + device_reference_data.add_questionnaire_response(questionnaire_response_2) + device_reference_data_repo = DeviceReferenceDataRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + device_reference_data_repo.write(device_reference_data) + + # Set up Device in DB + device: Device = cpm_product.create_device(name="Product-MHS") + device.add_key(key_type="cpa_id", key_value=f"{PARTY_KEY}:bar:baz") + device.add_key(key_type="cpa_id", key_value=f"{PARTY_KEY}:bar2:baz2") + device.add_tag(party_key=PARTY_KEY) + + # set up spine mhs questionnaire response + mhs_message_set_questionnaire = QuestionnaireRepository().read( + QuestionnaireInstance.SPINE_MHS + ) + spine_mhs_questionnaire_response = mhs_message_set_questionnaire.validate( + data={ + "Address": "https://example.com", + "Managing Organization": "Example Org", + "MHS Party key": "party-key-001", + "Approver URP": "approver-123", + "Date Approved": "2024-01-01", + "Date DNS Approved": "2024-01-02", + "Date Requested": "2024-01-03", + "DNS Approver": "dns-approver-456", + "MHS FQDN": "mhs.example.com", + "Requestor URP": "requestor-789", + "MHS Manufacturer Organisation": "AAA", + } + ) + device.add_questionnaire_response(spine_mhs_questionnaire_response) + + device.add_device_reference_data_id( + device_reference_data_id=str(device_reference_data.id), path_to_data=["*"] + ) + + device_repo = DeviceRepository(table_name=TABLE_NAME, dynamodb_client=client) + device_repo.write(device) + + from api.readDevice.index import handler + + result = handler( + event={ + "headers": {"version": version}, + "pathParameters": { + "product_team_id": str(product_team.id), + "product_id": str(cpm_product.id.id), + "device_id": str(device.id), + }, + } + ) + + response_body = json_loads(result["body"]) + + # Assertions for fields that must exactly match + assert response_body["id"] == str(device.id) + assert response_body["product_id"] == str(cpm_product.id) + assert response_body["product_team_id"] == str(product_team.id) + assert response_body["name"] == device.name + assert response_body["ods_code"] == device.ods_code + assert response_body["status"] == Status.ACTIVE + assert response_body["deleted_on"] is None + assert response_body["keys"] is not None + assert response_body["tags"] is not None + assert response_body["device_reference_data"] is not None + + # Assertions for fields that only need to be included + assert "created_on" in response_body + assert "spine_mhs/1" in response_body["questionnaire_responses"] + + # Assert drd questionnaire responses have been added + assert "spine_mhs_message_sets/1" in response_body["questionnaire_responses"] + + for resp in response_body["questionnaire_responses"]["spine_mhs_message_sets/1"]: + assert "MHS SN" in resp["data"] + assert "MHS IN" in resp["data"] + assert "Interaction ID" in resp["data"] + + expected_headers = { + "Content-Type": "application/json", + "Version": version, + } + + # Check response headers + assert result["statusCode"] == 200 + assert result["headers"]["Content-Length"] == str(len(result["body"])) + for key, value in expected_headers.items(): + assert result["headers"][key] == value + + +@pytest.mark.parametrize( + "version", + [ + "1", + ], +) +def test_index_mhs_device_adjusted_data(version): + org = Root.create_ods_organisation(ods_code=ODS_CODE) + product_team = org.create_product_team( + name=PRODUCT_TEAM_NAME, keys=PRODUCT_TEAM_KEYS + ) + with mock_table(TABLE_NAME) as client, mock.patch.dict( os.environ, { @@ -154,16 +310,20 @@ def test_index_mhs_device(version): ) questionnaire_response = mhs_message_set_questionnaire.validate( data={ - "Interaction ID": "urn:foo", + "Interaction ID": "bar:baz", "MHS SN": "bar", "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", } ) questionnaire_response_2 = mhs_message_set_questionnaire.validate( data={ - "Interaction ID": "urn:foo2", + "Interaction ID": "bar2:baz2", "MHS SN": "bar2", "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", }, ) @@ -185,34 +345,30 @@ def test_index_mhs_device(version): device.add_tag(party_key="f5h1r-850000") # set up spine mhs questionnaire response - mhs_message_set_questionnaire = QuestionnaireRepository().read( + spine_mhs_questionnaire = QuestionnaireRepository().read( QuestionnaireInstance.SPINE_MHS ) - spine_mhs_questionnaire_response = mhs_message_set_questionnaire.validate( + spine_mhs_questionnaire_response = spine_mhs_questionnaire.validate( data={ "Address": "http://example.com", - "Unique Identifier": "123456", "Managing Organization": "Example Org", "MHS Party key": "party-key-001", - "MHS CPA ID": "cpa-id-001", "Approver URP": "approver-123", - "Contract Property Template Key": "contract-key-001", "Date Approved": "2024-01-01", "Date DNS Approved": "2024-01-02", "Date Requested": "2024-01-03", "DNS Approver": "dns-approver-456", - "Interaction Type": "FHIR", "MHS FQDN": "mhs.example.com", - "MHS Is Authenticated": "PERSISTENT", - "Product Key": "product-key-001", "Requestor URP": "requestor-789", "MHS Manufacturer Organisation": "AAA", } ) + device.add_questionnaire_response(spine_mhs_questionnaire_response) device.add_device_reference_data_id( - device_reference_data_id=str(device_reference_data.id), path_to_data=["*"] + device_reference_data_id=str(device_reference_data.id), + path_to_data=["Interaction ID", "MHS IN"], ) device_repo = DeviceRepository(table_name=TABLE_NAME, dynamodb_client=client) @@ -252,6 +408,199 @@ def test_index_mhs_device(version): # Assert drd questionnaire responses have been added assert "spine_mhs_message_sets/1" in response_body["questionnaire_responses"] + for resp in response_body["questionnaire_responses"]["spine_mhs_message_sets/1"]: + assert "MHS SN" not in resp["data"] + assert "MHS IN" in resp["data"] + assert "Interaction ID" in resp["data"] + + expected_headers = { + "Content-Type": "application/json", + "Version": version, + } + + # Check response headers + assert result["statusCode"] == 200 + assert result["headers"]["Content-Length"] == str(len(result["body"])) + for key, value in expected_headers.items(): + assert result["headers"][key] == value + + +@pytest.mark.parametrize( + "version", + [ + "1", + ], +) +def test_index_as_device(version): + org = Root.create_ods_organisation(ods_code=ODS_CODE) + product_team = org.create_product_team( + name=PRODUCT_TEAM_NAME, keys=PRODUCT_TEAM_KEYS + ) + + with mock_table(TABLE_NAME) as client, mock.patch.dict( + os.environ, + { + "DYNAMODB_TABLE": TABLE_NAME, + "AWS_DEFAULT_REGION": "eu-west-2", + }, + clear=True, + ): + # Set up ProductTeam in DB + product_team_repo = ProductTeamRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + product_team_repo.write(entity=product_team) + + # Set up EPR Product in DB + cpm_product = product_team.create_cpm_product( + name=PRODUCT_NAME, product_id=PRODUCT_ID + ) + cpm_product.add_key(key_type=ProductKeyType.PARTY_KEY, key_value="F5H1R-850000") + product_repo = CpmProductRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + product_repo.write(cpm_product) + + # set up mhs message set questionnaire responses + mhs_message_set_questionnaire = QuestionnaireRepository().read( + QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS + ) + questionnaire_response = mhs_message_set_questionnaire.validate( + data={ + "Interaction ID": "bar:baz", + "MHS SN": "bar", + "MHS IN": "baz", + "MHS CPA ID": f"{PARTY_KEY}:bar:baz", + "Unique Identifier": f"{PARTY_KEY}:bar:baz", + } + ) + questionnaire_response_2 = mhs_message_set_questionnaire.validate( + data={ + "Interaction ID": "bar2:baz2", + "MHS SN": "bar2", + "MHS IN": "baz2", + "MHS CPA ID": f"{PARTY_KEY}:bar2:baz2", + "Unique Identifier": f"{PARTY_KEY}:bar2:baz2", + }, + ) + + # Set up DeviceReferenceData in DB + device_reference_data = cpm_product.create_device_reference_data( + name="ABC1234-987654 - MHS Message Set" + ) + device_reference_data.add_questionnaire_response(questionnaire_response) + device_reference_data.add_questionnaire_response(questionnaire_response_2) + + as_additional_interactions_questionnaire = QuestionnaireRepository().read( + QuestionnaireInstance.SPINE_AS_ADDITIONAL_INTERACTIONS + ) + questionnaire_response_3 = as_additional_interactions_questionnaire.validate( + data={ + "Interaction ID": "urn:foo3", + } + ) + questionnaire_response_4 = as_additional_interactions_questionnaire.validate( + data={ + "Interaction ID": "urn:foo4", + }, + ) + + # Set up DeviceReferenceData in DB + device_reference_data_as = cpm_product.create_device_reference_data( + name="ABC1234-987654 - AS Additional Interactions" + ) + device_reference_data_as.add_questionnaire_response(questionnaire_response_3) + device_reference_data_as.add_questionnaire_response(questionnaire_response_4) + + device_reference_data_repo = DeviceReferenceDataRepository( + table_name=TABLE_NAME, dynamodb_client=client + ) + device_reference_data_repo.write(device_reference_data) + device_reference_data_repo.write(device_reference_data_as) + + # Set up Device in DB + device: Device = cpm_product.create_device(name="Product-AS") + device.add_tag(party_key="f5h1r-850000") + + # set up spine as questionnaire response + spine_as_questionnaire = QuestionnaireRepository().read( + QuestionnaireInstance.SPINE_AS + ) + spine_as_questionnaire_response = spine_as_questionnaire.validate( + data={ + "ODS Code": "FH15R", + "Client ODS Codes": ["FH15R"], + "ASID": "foobar", + "Party Key": "P.123-XXX", + "Approver URP": "approver-123", + "Date Approved": "2024-01-01", + "Requestor URP": "requestor-789", + "Date Requested": "2024-01-03", + "Product Key": "product-key-001", + } + ) + device.add_questionnaire_response(spine_as_questionnaire_response) + + device.add_device_reference_data_id( + device_reference_data_id=str(device_reference_data.id), + path_to_data=["Interaction ID"], + ) + device.add_device_reference_data_id( + device_reference_data_id=str(device_reference_data_as.id), + path_to_data=["Interaction ID"], + ) + + device_repo = DeviceRepository(table_name=TABLE_NAME, dynamodb_client=client) + device_repo.write(device) + + from api.readDevice.index import handler + + result = handler( + event={ + "headers": {"version": version}, + "pathParameters": { + "product_team_id": str(product_team.id), + "product_id": str(cpm_product.id.id), + "device_id": str(device.id), + }, + } + ) + + response_body = json_loads(result["body"]) + # Assertions for fields that must exactly match + assert response_body["id"] == str(device.id) + assert response_body["product_id"] == str(cpm_product.id) + assert response_body["product_team_id"] == str(product_team.id) + assert response_body["name"] == device.name + assert response_body["ods_code"] == device.ods_code + assert response_body["status"] == Status.ACTIVE + assert response_body["deleted_on"] is None + assert response_body["keys"] is not None + assert response_body["tags"] is not None + assert response_body["device_reference_data"] is not None + + # Assertions for fields that only need to be included + assert "created_on" in response_body + assert "spine_as/1" in response_body["questionnaire_responses"] + + # Assert drd questionnaire responses have been added + assert "spine_mhs_message_sets/1" in response_body["questionnaire_responses"] + for resp in response_body["questionnaire_responses"]["spine_mhs_message_sets/1"]: + assert "MHS SN" not in resp["data"] + assert "MHS IN" not in resp["data"] + assert "Interaction ID" in resp["data"] + + assert ( + "spine_as_additional_interactions/1" in response_body["questionnaire_responses"] + ) + + for resp in response_body["questionnaire_responses"][ + "spine_as_additional_interactions/1" + ]: + assert "MHS SN" not in resp["data"] + assert "MHS IN" not in resp["data"] + assert "Interaction ID" in resp["data"] + expected_headers = { "Content-Type": "application/json", "Version": version, diff --git a/src/api/readQuestionnaire/tests/test_index.py b/src/api/readQuestionnaire/tests/test_index.py index e25448ca5..a69a7e9cc 100644 --- a/src/api/readQuestionnaire/tests/test_index.py +++ b/src/api/readQuestionnaire/tests/test_index.py @@ -26,7 +26,7 @@ def test_index(): "name": "spine_mhs", "version": "1", } - assert len(json_schema["properties"]) == 25 + assert len(json_schema["properties"]) == 14 def test_index_no_such_questionnaire(): diff --git a/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.failure.feature b/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.failure.feature index ec7fb6c16..9872dee32 100644 --- a/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.failure.feature +++ b/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.failure.feature @@ -148,10 +148,9 @@ Feature: Create AS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "mhs_message_set_drd_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: | path | value | @@ -241,10 +240,9 @@ Feature: Create AS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "mhs_message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/AccreditedSystemsAdditionalInteractions" with body: | path | value | @@ -290,10 +288,9 @@ Feature: Create AS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "mhs_message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/AccreditedSystemsAdditionalInteractions" with body: | path | value | diff --git a/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.success.feature b/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.success.feature index 72a2fbf95..6bfae17e8 100644 --- a/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.success.feature +++ b/src/api/tests/feature_tests/features/createDeviceAccreditedSystem.success.feature @@ -20,30 +20,20 @@ Feature: Create AS Device - success scenarios And I note the response field "$.keys.0.key_type" as "party_key_tag" And I note the response field "$.keys.0.key_value" as "party_key_tag_value" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "mhs_message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/AccreditedSystemsAdditionalInteractions" with body: | path | value | | questionnaire_responses.spine_as_additional_interactions.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002 | @@ -60,57 +50,59 @@ Feature: Create AS Device - success scenarios | questionnaire_responses.spine_as.0.Date Requested | 2024-01-03 | | questionnaire_responses.spine_as.0.Product Key | product-key-001 | Then I receive a status code "201" with body - | path | value | - | id | << ignore >> | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | keys | [] | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | questionnaire_responses.spine_as/1.0.id | << ignore >> | - | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | - | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_as/1.0.data.ODS Code | FH15R | - | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | FH15R | - | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | - | questionnaire_responses.spine_as/1.0.data.Party Key | P.123-XXX | - | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | - | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | - | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-001 | - | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | << ignore >> | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_as/1.0.id | << ignore >> | + | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | + | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_as/1.0.data.ODS Code | FH15R | + | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | FH15R | + | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | + | questionnaire_responses.spine_as/1.0.data.Party Key | P.123-XXX | + | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | + | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | + | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | + | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | + | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-001 | + | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 983 | + | Content-Length | 1060 | And I note the response field "$.id" as "device_id" When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1720 | + | Content-Length | 1713 | Scenario: Successfully create a AS Device with MHSMessageSet and ASAdditionalInteractions containing no questionnaire responses Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: @@ -140,57 +132,59 @@ Feature: Create AS Device - success scenarios | questionnaire_responses.spine_as.0.Date Requested | 2024-01-03 | | questionnaire_responses.spine_as.0.Product Key | product-key-001 | Then I receive a status code "201" with body - | path | value | - | id | << ignore >> | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | keys | [] | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | questionnaire_responses.spine_as/1.0.id | << ignore >> | - | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | - | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_as/1.0.data.ODS Code | FH15R | - | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | FH15R | - | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | - | questionnaire_responses.spine_as/1.0.data.Party Key | party-key-001 | - | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | - | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | - | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-001 | - | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | << ignore >> | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_as/1.0.id | << ignore >> | + | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | + | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_as/1.0.data.ODS Code | FH15R | + | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | FH15R | + | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | + | questionnaire_responses.spine_as/1.0.data.Party Key | party-key-001 | + | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | + | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | + | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | + | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | + | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-001 | + | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 987 | + | Content-Length | 1064 | And I note the response field "$.id" as "device_id" When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1030 | + | Content-Length | 1107 | Scenario: Successfully create multiple AS Devices Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: @@ -207,35 +201,25 @@ Feature: Create AS Device - success scenarios And I note the response field "$.keys.0.key_type" as "party_key_tag" And I note the response field "$.keys.0.key_value" as "party_key_tag_value" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "mhs_message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/AccreditedSystemsAdditionalInteractions" with body: | path | value | | questionnaire_responses.spine_as_additional_interactions.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002 | And I note the response field "$.id" as "as_message_set_drd_id" - And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: + When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: | path | value | | questionnaire_responses.spine_as.0.ODS Code | FH15R | | questionnaire_responses.spine_as.0.Client ODS Codes.0 | FH15R | @@ -247,57 +231,113 @@ Feature: Create AS Device - success scenarios | questionnaire_responses.spine_as.0.Date Requested | 2024-01-03 | | questionnaire_responses.spine_as.0.Product Key | product-key-001 | And I note the response field "$.id" as "device_id" - And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: + Then I receive a status code "201" with body + | path | value | + | id | << ignore >> | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_as/1.0.id | << ignore >> | + | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | + | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_as/1.0.data.ODS Code | FH15R | + | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | FH15R | + | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | + | questionnaire_responses.spine_as/1.0.data.Party Key | party-key-001 | + | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | + | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | + | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | + | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | + | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-001 | + | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | + | device_reference_data | << ignore >> | + When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: | path | value | | questionnaire_responses.spine_as.0.ODS Code | F5H1R | | questionnaire_responses.spine_as.0.Client ODS Codes.0 | F5H1R | | questionnaire_responses.spine_as.0.ASID | Foobar | - | questionnaire_responses.spine_as.0.Party Key | party-key-001 | + | questionnaire_responses.spine_as.0.Party Key | party-key-002 | | questionnaire_responses.spine_as.0.Approver URP | approver-123 | | questionnaire_responses.spine_as.0.Date Approved | 2024-01-01 | | questionnaire_responses.spine_as.0.Requestor URP | requestor-789 | | questionnaire_responses.spine_as.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_as.0.Product Key | product-key-001 | + | questionnaire_responses.spine_as.0.Product Key | product-key-002 | And I note the response field "$.id" as "device_id_2" + Then I receive a status code "201" with body + | path | value | + | id | << ignore >> | + | name | F5H1R-850000/200000100001 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100001 | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_as/1.0.id | << ignore >> | + | questionnaire_responses.spine_as/1.0.questionnaire_name | spine_as | + | questionnaire_responses.spine_as/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_as/1.0.data.ODS Code | F5H1R | + | questionnaire_responses.spine_as/1.0.data.Client ODS Codes.0 | F5H1R | + | questionnaire_responses.spine_as/1.0.data.ASID | Foobar | + | questionnaire_responses.spine_as/1.0.data.Party Key | party-key-002 | + | questionnaire_responses.spine_as/1.0.data.Approver URP | approver-123 | + | questionnaire_responses.spine_as/1.0.data.Date Approved | 2024-01-01 | + | questionnaire_responses.spine_as/1.0.data.Requestor URP | requestor-789 | + | questionnaire_responses.spine_as/1.0.data.Date Requested | 2024-01-03 | + | questionnaire_responses.spine_as/1.0.data.Product Key | product-key-002 | + | questionnaire_responses.spine_as/1.0.created_on | << ignore >> | + | device_reference_data | << ignore >> | When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100000 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1724 | + | Content-Length | 1717 | When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id_2) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id_2) } | - | name | F5H1R-850000/ - Accredited System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id_2) } | + | name | F5H1R-850000/200000100001 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | 200000100001 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses | << ignore >> | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1724 | + | Content-Length | 1717 | diff --git a/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.failure.feature b/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.failure.feature index 013a78a93..a2ccc39fe 100644 --- a/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.failure.feature +++ b/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.failure.feature @@ -56,8 +56,15 @@ Feature: Create MHS Device - failure scenarios Scenario: Cannot create a MHS Device with a Product Team that does not exist When I make a "POST" request with "default" headers to "ProductTeam/not-a-product-team/Product/not-a-product/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses | {} | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "404" with body | path | value | | errors.0.code | RESOURCE_NOT_FOUND | @@ -74,8 +81,15 @@ Feature: Create MHS Device - failure scenarios | ods_code | F5H1R | And I note the response field "$.id" as "product_team_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/not-a-product/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses | {} | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "404" with body | path | value | | errors.0.code | RESOURCE_NOT_FOUND | @@ -96,8 +110,15 @@ Feature: Create MHS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses | {} | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "400" with body | path | value | | errors.0.code | VALIDATION_ERROR | @@ -118,33 +139,25 @@ Feature: Create MHS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "400" with body - | path | value | - | errors.0.code | VALIDATION_ERROR | - | errors.0.message | You must configure exactly one MessageSet Device Reference Data before creating an MHS Device | + | path | value | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | You must configure exactly one MessageSet Device Reference Data before creating an MHS Device. | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 150 | + | Content-Length | 151 | - Scenario: Cannot create a MHS Device with a Device body that has no questionnaire responses for 'spine_mhs' + Scenario: Cannot create a MHS Device with a Device body that has answered a questionnaire that isn't 'spine_mhs' Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: | path | value | | name | My Great Product Team | @@ -167,6 +180,27 @@ Feature: Create MHS Device - failure scenarios | Content-Type | application/json | | Content-Length | 195 | + Scenario: Cannot create a MHS Device with a Device body that hasn't answered the questionnaire 'spine_mhs' + Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: + | path | value | + | name | My Great Product Team | + | ods_code | F5H1R | + And I note the response field "$.id" as "product_team_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/Epr" with body: + | path | value | + | name | My Great Product | + And I note the response field "$.id" as "product_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" + When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" + Then I receive a status code "400" with body + | path | value | + | errors.0.code | MISSING_VALUE | + | errors.0.message | CreateMhsDeviceIncomingParams.questionnaire_responses: field required | + And the response headers contain: + | name | value | + | Content-Type | application/json | + | Content-Length | 123 | + Scenario: Cannot create a MHS Device with a Device body that has multiple questionnaire responses for 'spine_mhs' Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: | path | value | @@ -179,47 +213,31 @@ Feature: Create MHS Device - failure scenarios And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | - | questionnaire_responses.spine_mhs.1.Address | http://example.com | - | questionnaire_responses.spine_mhs.1.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.1.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.1.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.1.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.1.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.1.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.1.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.1.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.1.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.1.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.1.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.1.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.1.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.1.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.1.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs.1.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.1.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.1.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.1.Product Name | Product Name | + | questionnaire_responses.spine_mhs.1.Product Version | 1 | + | questionnaire_responses.spine_mhs.1.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.1.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.1.Requestor URP | UI provided | Then I receive a status code "400" with body - | path | value | - | errors.0.code | VALIDATION_ERROR | - | errors.0.message | CreateMhsDeviceIncomingParams.questionnaire_responses.spine_mhs.__root__: ensure this value has at most 1 items | + | path | value | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | You must provide exactly one spine_mhs questionnaire response to create an MHS Device. | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 168 | + | Content-Length | 143 | Scenario: Cannot create a MHS Device with a Device body that has an invalid questionnaire responses for the questionnaire 'spine_mhs' Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: @@ -233,9 +251,8 @@ Feature: Create MHS Device - failure scenarios And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | 123456 | Then I receive a status code "400" with body | path | value | | errors.0.code | MISSING_VALUE | @@ -245,6 +262,60 @@ Feature: Create MHS Device - failure scenarios | Content-Type | application/json | | Content-Length | 155 | + Scenario: Cannot create a MHS Device with a Device body that has answered system generated questions for the questionnaire 'spine_mhs' + Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: + | path | value | + | name | My Great Product Team | + | ods_code | F5H1R | + And I note the response field "$.id" as "product_team_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/Epr" with body: + | path | value | + | name | My Great Product | + And I note the response field "$.id" as "product_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" + When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs.0.Address | http://example.com | + Then I receive a status code "400" with body + | path | value | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | Payload contains unexpected fields: {'Address'}. Expected fields are: ['Approver URP', 'DNS Approver', 'MHS FQDN', 'MHS Manufacturer Organisation', 'MHS Service Description', 'Product Name', 'Product Version', 'Requestor URP']. | + And the response headers contain: + | name | value | + | Content-Type | application/json | + | Content-Length | 284 | + + Scenario: Cannot create a MHS Device with a Device body that has not answered fields requried for the system generated fields + Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: + | path | value | + | name | My Great Product Team | + | ods_code | F5H1R | + And I note the response field "$.id" as "product_team_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/Epr" with body: + | path | value | + | name | My Great Product | + And I note the response field "$.id" as "product_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" + When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: + | path | value | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + Then I receive a status code "400" with body + | path | value | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | The following required fields are missing in the response to spine_mhs: MHS FQDN | + And the response headers contain: + | name | value | + | Content-Type | application/json | + | Content-Length | 137 | + Scenario: Cannot create a MHS Device with a Product that already has an MHS Device Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: | path | value | @@ -256,56 +327,36 @@ Feature: Create MHS Device - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.1.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets.1.MHS SN | urn:nhs:names:services:ebs | - | questionnaire_responses.spine_mhs_message_sets.1.MHS IN | PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retry Interval | PT1M | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retries | ${ integer(2) } | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Persist Duration | PT10M | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets.1.MHS SN | urn:nhs:names:services:ebs | + | questionnaire_responses.spine_mhs_message_sets.1.MHS IN | PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retry Interval | PT1M | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retries | ${ integer(2) } | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Persist Duration | PT10M | And I note the response field "$.id" as "message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | And I note the response field "$.id" as "device_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123457 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-003 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "400" with body | path | value | | errors.0.code | VALIDATION_ERROR | @@ -315,7 +366,7 @@ Feature: Create MHS Device - failure scenarios | Content-Type | application/json | | Content-Length | 113 | - Scenario: Cannot create a MHS Device with a Product that already has an MHS Device with no questionnaire responses + Scenario: Cannot create a MHS Device with a Product that already has an MHS Device with no Mhs Message Set questionnaire responses Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: | path | value | | name | My Great Product Team | @@ -328,44 +379,26 @@ Feature: Create MHS Device - failure scenarios And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" And I note the response field "$.id" as "message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | And I note the response field "$.id" as "device_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123457 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-003 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "400" with body | path | value | | errors.0.code | VALIDATION_ERROR | diff --git a/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.success.feature b/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.success.feature index d1eb3ba5c..ee4950346 100644 --- a/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.success.feature +++ b/src/api/tests/feature_tests/features/createDeviceMessageHandlingSystem.success.feature @@ -21,100 +21,107 @@ Feature: Create MHS Device - success scenarios And I note the response field "$.id" as "product_id" And I note the response field "$.keys.0.key_type" as "party_key_tag" And I note the response field "$.keys.0.key_value" as "party_key_tag_value" + And I note the response field "$.keys.0.key_value" as "party_key_value" And I have already made a "POST" request with "default" headers to "ProductTeam//Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "message_set_drd_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "201" with body - | path | value | - | id | << ignore >> | - | name | F5H1R-850000 - Message Handling System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys.0.key_type | cpa_id | - | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | << ignore >> | + | name | F5H1R-850000 - Message Handling System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | cpa_id | + | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | + | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs/1.0.data.Product Name | Product Name | + | questionnaire_responses.spine_mhs/1.0.data.Product Version | 1 | + | questionnaire_responses.spine_mhs/1.0.data.Approver URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Address | https://mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | ${ note(party_key_value) } | + | questionnaire_responses.spine_mhs/1.0.data.Date Approved | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | None | + | questionnaire_responses.spine_mhs/1.0.data.Date Requested | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | F5H1R | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1354 | + | Content-Length | 1277 | And I note the response field "$.id" as "device_id" When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000 - Message Handling System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys.0.key_type | cpa_id | - | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | - | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | - | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | - | questionnaire_responses.spine_mhs/1.0.data.Address | http://example.com | - | questionnaire_responses.spine_mhs/1.0.data.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs/1.0.data.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs/1.0.data.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs/1.0.data.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs/1.0.data.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs/1.0.data.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs/1.0.data.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | requestor-789 | - | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000 - Message Handling System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | cpa_id | + | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | + | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs/1.0.data.Address | https://mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | F5H1R | + | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | F5H1R-850000 | + | questionnaire_responses.spine_mhs/1.0.data.Product Name | Product Name | + | questionnaire_responses.spine_mhs/1.0.data.Product Version | 1 | + | questionnaire_responses.spine_mhs/1.0.data.Approver URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Date Approved | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | None | + | questionnaire_responses.spine_mhs/1.0.data.Date Requested | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS CPA ID | ${ note(party_key_value) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Unique Identifier | ${ note(party_key_value) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1776 | + | Content-Length | 1882 | Examples: | product_team_id | product_id | @@ -140,84 +147,89 @@ Feature: Create MHS Device - success scenarios When I make a "POST" request with "default" headers to "ProductTeam//Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" And I note the response field "$.id" as "device_reference_data_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | Then I receive a status code "201" with body - | path | value | - | id | << ignore >> | - | name | F5H1R-850000 - Message Handling System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | << ignore >> | + | name | F5H1R-850000 - Message Handling System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys | [] | + | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | + | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs/1.0.data.Product Name | Product Name | + | questionnaire_responses.spine_mhs/1.0.data.Product Version | 1 | + | questionnaire_responses.spine_mhs/1.0.data.Approver URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Address | https://mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | ${ note(party_key_value) } | + | questionnaire_responses.spine_mhs/1.0.data.Date Approved | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | None | + | questionnaire_responses.spine_mhs/1.0.data.Date Requested | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | F5H1R | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1245 | + | Content-Length | 1168 | And I note the response field "$.id" as "device_id" When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000 - Message Handling System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys | [] | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | - | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | - | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | - | questionnaire_responses.spine_mhs/1.0.data.Address | http://example.com | - | questionnaire_responses.spine_mhs/1.0.data.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs/1.0.data.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs/1.0.data.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs/1.0.data.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs/1.0.data.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs/1.0.data.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs/1.0.data.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | requestor-789 | - | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | AAA | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000 - Message Handling System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys | [] | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | + | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs/1.0.data.Product Name | Product Name | + | questionnaire_responses.spine_mhs/1.0.data.Product Version | 1 | + | questionnaire_responses.spine_mhs/1.0.data.Approver URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Address | https://mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | ${ note(party_key_value) } | + | questionnaire_responses.spine_mhs/1.0.data.Date Approved | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | None | + | questionnaire_responses.spine_mhs/1.0.data.Date Requested | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | F5H1R | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1288 | + | Content-Length | 1211 | Examples: | product_team_id | product_id | diff --git a/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.failure.feature b/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.failure.feature index a183f068b..6e4c80b4d 100644 --- a/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.failure.feature +++ b/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.failure.feature @@ -7,7 +7,7 @@ Feature: Create "Message Set" Device Reference Data - failure scenarios | version | 1 | | Authorization | letmein | - Scenario: Fail to create an "MHS Message Set" Device Reference Data, with incomplete questionnaire response + Scenario: Fail to create an "MHS Message Set" Device Reference Data, thbecuase it has not answered fields requried for the system generated fields Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: | path | value | | name | My Great Product Team | @@ -18,16 +18,16 @@ Feature: Create "Message Set" Device Reference Data - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | Then I receive a status code "400" with body | path | value | - | errors.0.code | MISSING_VALUE | - | errors.0.message | Failed to validate data against 'spine_mhs_message_sets/1': 'MHS IN' is a required property | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | The following required fields are missing in the response to spine_mhs_message_sets: MHS IN | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 145 | + | Content-Length | 148 | Scenario: Fail to create an "MHS Message Set" Device Reference Data, with invalid questionnaire response (bad value) Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: @@ -40,11 +40,10 @@ Feature: Create "Message Set" Device Reference Data - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.Reliability Configuration Retries | two | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets.0.Reliability Configuration Retries | two | Then I receive a status code "400" with body | path | value | | errors.0.code | VALIDATION_ERROR | @@ -65,19 +64,18 @@ Feature: Create "Message Set" Device Reference Data - failure scenarios | name | My Great Product | And I note the response field "$.id" as "product_id" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.unknown_field | 123 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets.0.unknown_field | 123 | Then I receive a status code "400" with body - | path | value | - | errors.0.code | VALIDATION_ERROR | - | errors.0.message | Failed to validate data against 'spine_mhs_message_sets/1': Additional properties are not allowed ('unknown_field' was unexpected) | + | path | value | + | errors.0.code | VALIDATION_ERROR | + | errors.0.message | Payload contains unexpected fields: {'unknown_field'}. Expected fields are: ['Contract Property Template Key', 'Interaction Type', 'MHS IN', 'MHS IP Address', 'MHS Is Authenticated', 'MHS SN', 'Product Key', 'Reliability Configuration Ack Requested', 'Reliability Configuration Actor', 'Reliability Configuration Duplication Elimination', 'Reliability Configuration Persist Duration', 'Reliability Configuration Reply Mode', 'Reliability Configuration Retries', 'Reliability Configuration Retry Interval']. | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 187 | + | Content-Length | 563 | Scenario: Fail to create an "MHS Message Set" Device Reference Data, with invalid questionnaire name Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: diff --git a/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.success.feature b/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.success.feature index e082866da..345f159f9 100644 --- a/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.success.feature +++ b/src/api/tests/feature_tests/features/createDeviceReferenceDataMessageSet.success.feature @@ -75,79 +75,85 @@ Feature: Create "Message Set" Device Reference Data - success scenarios And I note the response field "$.id" as "product_id" And I note the response field "$.keys.0.key_value" as "party_key" When I make a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.1.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets.1.MHS SN | urn:nhs:names:services:ebs | - | questionnaire_responses.spine_mhs_message_sets.1.MHS IN | PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retry Interval | PT1M | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retries | ${ integer(2) } | - | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Persist Duration | PT10M | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets.1.MHS SN | urn:nhs:names:services:ebs | + | questionnaire_responses.spine_mhs_message_sets.1.MHS IN | PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retry Interval | PT1M | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Retries | ${ integer(2) } | + | questionnaire_responses.spine_mhs_message_sets.1.Reliability Configuration Persist Duration | PT10M | Then I receive a status code "201" with body - | path | value | - | id | << ignore >> | - | name | F5H1R-850000 - MHS Message Sets | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets/1.1.id | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_name | spine_mhs_message_sets | - | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs_message_sets/1.1.created_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS SN | urn:nhs:names:services:ebs | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS IN | PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retry Interval | PT1M | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retries | ${ integer(2) } | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Persist Duration | PT10M | + | path | value | + | id | << ignore >> | + | name | F5H1R-850000 - MHS Message Sets | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS CPA ID | ${ note(party_key) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Unique Identifier | ${ note(party_key) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.1.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.1.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS IN | PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS SN | urn:nhs:names:services:ebs | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS CPA ID | ${ note(party_key) }:urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Unique Identifier | ${ note(party_key) }:urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retry Interval | PT1M | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retries | ${ integer(2) } | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Persist Duration | PT10M | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1220 | + | Content-Length | 1560 | And I note the response field "$.id" as "device_reference_data_id" When I make a "GET" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/${ note(device_reference_data_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_reference_data_id) } | - | name | F5H1R-850000 - MHS Message Sets | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | - | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets/1.1.id | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_name | spine_mhs_message_sets | - | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_version | 1 | - | questionnaire_responses.spine_mhs_message_sets/1.1.created_on | << ignore >> | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS SN | urn:nhs:names:services:ebs | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS IN | PRSC_IN080000UK07 | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retry Interval | PT1M | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retries | ${ integer(2) } | - | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Persist Duration | PT10M | + | path | value | + | id | ${ note(device_reference_data_id) } | + | name | F5H1R-850000 - MHS Message Sets | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS CPA ID | ${ note(party_key) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Unique Identifier | ${ note(party_key) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.1.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.1.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.1.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS IN | PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS SN | urn:nhs:names:services:ebs | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Interaction ID | urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.MHS CPA ID | ${ note(party_key) }:urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Unique Identifier | ${ note(party_key) }:urn:nhs:names:services:ebs:PRSC_IN080000UK07 | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retry Interval | PT1M | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Retries | ${ integer(2) } | + | questionnaire_responses.spine_mhs_message_sets/1.1.data.Reliability Configuration Persist Duration | PT10M | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1220 | + | Content-Length | 1560 | diff --git a/src/api/tests/feature_tests/features/readDevice.success.feature b/src/api/tests/feature_tests/features/readDevice.success.feature index 97754ff7c..f727064e1 100644 --- a/src/api/tests/feature_tests/features/readDevice.success.feature +++ b/src/api/tests/feature_tests/features/readDevice.success.feature @@ -61,7 +61,7 @@ Feature: Read Device - success scenarios | path | value | | name | My Great Product | And I note the response field "$.id" as "product_id" - And I note the response field "$.keys.0.key_value" as "party_key" + And I note the response field "$.keys.0.key_value" as "party_key_value" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device" with body: | path | value | | name | My Device | @@ -88,11 +88,11 @@ Feature: Read Device - success scenarios | Content-Length | 374 | Examples: - | product_team_id | product_id | - | ${ note(product_team_id) } | ${ note(product_id) } | - | ${ note(product_team_id) } | ${ note(party_key) } | - | FOOBAR | ${ note(product_id) } | - | FOOBAR | ${ note(party_key) } | + | product_team_id | product_id | + | ${ note(product_team_id) } | ${ note(product_id) } | + | ${ note(product_team_id) } | ${ note(party_key_value) } | + | FOOBAR | ${ note(product_id) } | + | FOOBAR | ${ note(party_key_value) } | Scenario Outline: Successfully read a MHS Device Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: @@ -106,57 +106,73 @@ Feature: Read Device - success scenarios | path | value | | name | My Great Product | And I note the response field "$.id" as "product_id" - And I note the response field "$.keys.0.key_value" as "party_key" + And I note the response field "$.keys.0.key_value" as "party_key_value" And I note the response field "$.keys.0.key_type" as "party_key_tag" And I note the response field "$.keys.0.key_value" as "party_key_tag_value" And I have already made a "POST" request with "default" headers to "ProductTeam//Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: - | path | value | - | questionnaire_responses.spine_mhs_message_sets.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | - | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | And I note the response field "$.id" as "message_set_drd_id" And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: - | path | value | - | questionnaire_responses.spine_mhs.0.Address | http://example.com | - | questionnaire_responses.spine_mhs.0.Unique Identifier | 123456 | - | questionnaire_responses.spine_mhs.0.Managing Organization | Example Org | - | questionnaire_responses.spine_mhs.0.MHS Party key | party-key-001 | - | questionnaire_responses.spine_mhs.0.MHS CPA ID | cpa-id-001 | - | questionnaire_responses.spine_mhs.0.Approver URP | approver-123 | - | questionnaire_responses.spine_mhs.0.Contract Property Template Key | contract-key-001 | - | questionnaire_responses.spine_mhs.0.Date Approved | 2024-01-01 | - | questionnaire_responses.spine_mhs.0.Date DNS Approved | 2024-01-02 | - | questionnaire_responses.spine_mhs.0.Date Requested | 2024-01-03 | - | questionnaire_responses.spine_mhs.0.DNS Approver | dns-approver-456 | - | questionnaire_responses.spine_mhs.0.Interaction Type | FHIR | - | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | - | questionnaire_responses.spine_mhs.0.MHS Is Authenticated | PERSISTENT | - | questionnaire_responses.spine_mhs.0.Product Key | product-key-001 | - | questionnaire_responses.spine_mhs.0.Requestor URP | requestor-789 | - | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | AAA | + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | And I note the response field "$.id" as "device_id" When I make a "GET" request with "default" headers to "ProductTeam//Product//Device/${ note(device_id) }" Then I receive a status code "200" with body - | path | value | - | id | ${ note(device_id) } | - | name | F5H1R-850000 - Message Handling System | - | status | active | - | product_id | ${ note(product_id) } | - | product_team_id | ${ note(product_team_id) } | - | ods_code | F5H1R | - | created_on | << ignore >> | - | updated_on | << ignore >> | - | deleted_on | << ignore >> | - | keys.0.key_type | cpa_id | - | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | - | tags.0.0.0 | ${ note(party_key_tag) } | - | tags.0.0.1 | ${ note(party_key_tag_value) } | - | questionnaire_responses | << ignore >> | - | device_reference_data | << ignore >> | + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000 - Message Handling System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | cpa_id | + | keys.0.key_value | F5H1R-850000:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses.spine_mhs/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.questionnaire_name | spine_mhs | + | questionnaire_responses.spine_mhs/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs/1.0.data.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs/1.0.data.Product Name | Product Name | + | questionnaire_responses.spine_mhs/1.0.data.Product Version | 1 | + | questionnaire_responses.spine_mhs/1.0.data.Approver URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Requestor URP | UI provided | + | questionnaire_responses.spine_mhs/1.0.data.Address | https://mhs.example.com | + | questionnaire_responses.spine_mhs/1.0.data.MHS Party key | ${ note(party_key_value) } | + | questionnaire_responses.spine_mhs/1.0.data.Date Approved | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Date DNS Approved | None | + | questionnaire_responses.spine_mhs/1.0.data.Date Requested | << ignore >> | + | questionnaire_responses.spine_mhs/1.0.data.Managing Organization | F5H1R | + | questionnaire_responses.spine_mhs_message_sets/1.0.id | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_name | spine_mhs_message_sets | + | questionnaire_responses.spine_mhs_message_sets/1.0.questionnaire_version | 1 | + | questionnaire_responses.spine_mhs_message_sets/1.0.created_on | << ignore >> | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.MHS CPA ID | ${ note(party_key_value) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | questionnaire_responses.spine_mhs_message_sets/1.0.data.Unique Identifier | ${ note(party_key_value) }:urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001 | + | device_reference_data | << ignore >> | And the response headers contain: | name | value | | Content-Type | application/json | - | Content-Length | 1776 | + | Content-Length | 1882 | Examples: | product_team_id | product_id | @@ -164,3 +180,77 @@ Feature: Read Device - success scenarios | ${ note(product_team_id) } | ${ note(party_key) } | | FOOBAR | ${ note(product_id) } | | FOOBAR | ${ note(party_key) } | + + Scenario Outline: Successfully read an AS Device + Given I have already made a "POST" request with "default" headers to "ProductTeam" with body: + | path | value | + | name | My Great Product Team | + | ods_code | F5H1R | + | keys.0.key_type | product_team_id_alias | + | keys.0.key_value | FOOBAR | + And I note the response field "$.id" as "product_team_id" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/Epr" with body: + | path | value | + | name | My Great Product | + And I note the response field "$.id" as "product_id" + And I note the response field "$.keys.0.key_value" as "party_key_value" + And I note the response field "$.keys.0.key_type" as "party_key_tag" + And I note the response field "$.keys.0.key_value" as "party_key_tag_value" + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/MhsMessageSet" with body: + | path | value | + | questionnaire_responses.spine_mhs_message_sets.0.MHS SN | urn:nhs:names:services:ers | + | questionnaire_responses.spine_mhs_message_sets.0.MHS IN | READ_PRACTITIONER_ROLE_R4_V001 | + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/MessageHandlingSystem" with body: + | path | value | + | questionnaire_responses.spine_mhs.0.MHS FQDN | mhs.example.com | + | questionnaire_responses.spine_mhs.0.MHS Service Description | Example Description | + | questionnaire_responses.spine_mhs.0.MHS Manufacturer Organisation | F5H1R | + | questionnaire_responses.spine_mhs.0.Product Name | Product Name | + | questionnaire_responses.spine_mhs.0.Product Version | 1 | + | questionnaire_responses.spine_mhs.0.Approver URP | UI provided | + | questionnaire_responses.spine_mhs.0.DNS Approver | UI provided | + | questionnaire_responses.spine_mhs.0.Requestor URP | UI provided | + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/DeviceReferenceData/AccreditedSystemsAdditionalInteractions" with body: + | path | value | + | questionnaire_responses.spine_as_additional_interactions.0.Interaction ID | urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002 | + And I have already made a "POST" request with "default" headers to "ProductTeam/${ note(product_team_id) }/Product/${ note(product_id) }/Device/AccreditedSystem" with body: + | path | value | + | questionnaire_responses.spine_as.0.ODS Code | FH15R | + | questionnaire_responses.spine_as.0.Client ODS Codes.0 | FH15R | + | questionnaire_responses.spine_as.0.ASID | Foobar | + | questionnaire_responses.spine_as.0.Party Key | P.123-XXX | + | questionnaire_responses.spine_as.0.Approver URP | approver-123 | + | questionnaire_responses.spine_as.0.Date Approved | 2024-01-01 | + | questionnaire_responses.spine_as.0.Requestor URP | requestor-789 | + | questionnaire_responses.spine_as.0.Date Requested | 2024-01-03 | + | questionnaire_responses.spine_as.0.Product Key | product-key-001 | + And I note the response field "$.id" as "device_id" + When I make a "GET" request with "default" headers to "ProductTeam//Product//Device/${ note(device_id) }" + Then I receive a status code "200" with body + | path | value | + | id | ${ note(device_id) } | + | name | F5H1R-850000/200000100000 - Accredited System | + | status | active | + | product_id | ${ note(product_id) } | + | product_team_id | ${ note(product_team_id) } | + | ods_code | F5H1R | + | created_on | << ignore >> | + | updated_on | << ignore >> | + | deleted_on | << ignore >> | + | keys.0.key_type | accredited_system_id | + | keys.0.key_value | << ignore >> | + | tags.0.0.0 | ${ note(party_key_tag) } | + | tags.0.0.1 | ${ note(party_key_tag_value) } | + | questionnaire_responses | << ignore >> | + | device_reference_data | << ignore >> | + And the response headers contain: + | name | value | + | Content-Type | application/json | + | Content-Length | 1713 | + + Examples: + | product_team_id | product_id | + | ${ note(product_team_id) } | ${ note(product_id) } | + | ${ note(product_team_id) } | ${ note(party_key_value) } | + | FOOBAR | ${ note(product_id) } | + | FOOBAR | ${ note(party_key_value) } | diff --git a/src/api/tests/feature_tests/steps/steps.py b/src/api/tests/feature_tests/steps/steps.py index 047d9b201..363831afc 100644 --- a/src/api/tests/feature_tests/steps/steps.py +++ b/src/api/tests/feature_tests/steps/steps.py @@ -278,7 +278,7 @@ def note_response_field(context: Context, jsonpath: str, alias: str): response=context.response.json(), jsonpath=jsonpath ) - # Lowercase if alias is "party_key_value" as tags are always lowercase + # Lowercase if alias is "party_key_tag_value" as tags are always lowercase if alias == "party_key_tag_value" and isinstance(context.notes[alias], str): context.notes[alias] = context.notes[alias].lower() diff --git a/src/etl/sds/worker/bulk/tests/stage_data/0.extract_input.ldif b/src/etl/sds/worker/bulk/tests/stage_data/0.extract_input.ldif index 6ee78efd6..52038203c 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/0.extract_input.ldif +++ b/src/etl/sds/worker/bulk/tests/stage_data/0.extract_input.ldif @@ -149,7 +149,7 @@ nhsMhsCPAId: 00000000000c nhsMHSDuplicateElimination: never nhsMHSEndPoint: https://test.C3O9X.nhs.uk/ nhsMhsFQDN: test.C3O9X.nhs.uk -nhsMHsIN: READ_PRACTITIONER_ROLE_R4_V002 +nhsMHsIN: READ_PRACTITIONER_ROLE_R4_V003 nhsMhsIPAddress: 0.0.0.0 nhsMhsManufacturerOrg: LSP04 nhsMHSPartyKey: BBB-111111 diff --git a/src/etl/sds/worker/bulk/tests/stage_data/1.extract_output.json b/src/etl/sds/worker/bulk/tests/stage_data/1.extract_output.json index e97a7ad78..b1c821fd3 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/1.extract_output.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/1.extract_output.json @@ -186,7 +186,7 @@ "nhs_mhs_duplicate_elimination": "never", "nhs_mhs_end_point": "https://test.C3O9X.nhs.uk/", "nhs_mhs_fqdn": "test.C3O9X.nhs.uk", - "nhs_mhs_in": "READ_PRACTITIONER_ROLE_R4_V002", + "nhs_mhs_in": "READ_PRACTITIONER_ROLE_R4_V003", "nhs_mhs_ip_address": "0.0.0.0", "nhs_mhs_is_authenticated": "none", "nhs_mhs_manufacturer_org": "LSP04", diff --git a/src/etl/sds/worker/bulk/tests/stage_data/2.transform_output.json b/src/etl/sds/worker/bulk/tests/stage_data/2.transform_output.json index a282c0529..694a84c33 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/2.transform_output.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/2.transform_output.json @@ -8,7 +8,12 @@ "created_on": "2024-11-20T10:54:19.001479+00:00", "updated_on": null, "deleted_on": null, - "keys": [{ "key_type": "epr_id", "key_value": "EPR-LSP04" }] + "keys": [ + { + "key_type": "epr_id", + "key_value": "EPR-LSP04" + } + ] } }, { @@ -21,7 +26,12 @@ "created_on": "2024-11-20T10:54:19.001733+00:00", "updated_on": "2024-11-20T10:54:19.002057+00:00", "deleted_on": null, - "keys": [{ "key_type": "party_key", "key_value": "AAA-111111" }] + "keys": [ + { + "key_type": "party_key", + "key_value": "AAA-111111" + } + ] } }, { @@ -41,7 +51,16 @@ "data": { "MHS IN": "READ_PRACTITIONER_ROLE_R4_V001", "MHS SN": "urn:nhs:names:services:ers", - "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001" + "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001", + "Contract Property Template Key": "14", + "Interaction Type": "fhir", + "Reliability Configuration Ack Requested": "never", + "MHS CPA ID": "00000000000a", + "Reliability Configuration Duplication Elimination": "never", + "MHS IP Address": "0.0.0.0", + "MHS Is Authenticated": "none", + "Product Key": "111", + "Unique Identifier": "00000000000a" }, "created_on": "2024-11-20T10:54:19.000224+00:00" } @@ -107,7 +126,12 @@ "created_on": "2024-11-20T10:54:19.002315+00:00", "updated_on": "2024-11-20T10:54:19.003736+00:00", "deleted_on": null, - "keys": [{ "key_type": "cpa_id", "key_value": "00000000000a" }], + "keys": [ + { + "key_type": "cpa_id", + "key_value": "00000000000a" + } + ], "tags": [ [["nhs_mhs_party_key", "aaa-111111"]], [ @@ -152,33 +176,26 @@ "questionnaire_version": "1", "data": { "Approver URP": "myApprover", - "Contract Property Template Key": "14", "Date Approved": "20010101010101", "Date DNS Approved": "20010101010101", "Date Requested": "20010101010101", "DNS Approver": "myApprover", - "Interaction Type": "fhir", "Managing Organization": "AAA", - "Reliability Configuration Ack Requested": "never", - "MHS CPA ID": "00000000000a", - "Reliability Configuration Duplication Elimination": "never", "Address": "https://test.C3O9X.nhs.uk/", "MHS FQDN": "test.C3O9X.nhs.uk", - "MHS IP Address": "0.0.0.0", - "MHS Is Authenticated": "none", "MHS Manufacturer Organisation": "LSP04", "MHS Party key": "AAA-111111", - "Product Key": "111", "Product Name": "My AAA Product", "Product Version": "2005.02", - "Requestor URP": "myRequestor", - "Unique Identifier": "00000000000a" + "Requestor URP": "myRequestor" }, "created_on": "2024-11-20T10:54:18.995983+00:00" } ] }, - "device_reference_data": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": ["*"] } + "device_reference_data": { + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": ["*"] + } } }, { @@ -193,7 +210,10 @@ "updated_on": "2024-11-20T10:54:19.005653+00:00", "deleted_on": null, "keys": [ - { "key_type": "accredited_system_id", "key_value": "000000000001" } + { + "key_type": "accredited_system_id", + "key_value": "000000000001" + } ], "tags": [ [ @@ -312,7 +332,10 @@ "updated_on": "2024-11-20T10:54:19.007286+00:00", "deleted_on": null, "keys": [ - { "key_type": "accredited_system_id", "key_value": "000000000004" } + { + "key_type": "accredited_system_id", + "key_value": "000000000004" + } ], "tags": [ [ @@ -429,7 +452,12 @@ "created_on": "2024-11-20T10:54:19.017417+00:00", "updated_on": "2024-11-20T10:54:19.017614+00:00", "deleted_on": null, - "keys": [{ "key_type": "party_key", "key_value": "BBB-111111" }] + "keys": [ + { + "key_type": "party_key", + "key_value": "BBB-111111" + } + ] } }, { @@ -449,7 +477,16 @@ "data": { "MHS IN": "READ_PRACTITIONER_ROLE_R4_V002", "MHS SN": "urn:nhs:names:services:ers", - "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002" + "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002", + "Contract Property Template Key": "14", + "Interaction Type": "fhir", + "Reliability Configuration Ack Requested": "never", + "MHS CPA ID": "00000000000b", + "Reliability Configuration Duplication Elimination": "never", + "MHS IP Address": "0.0.0.0", + "MHS Is Authenticated": "none", + "Product Key": "111", + "Unique Identifier": "00000000000b" }, "created_on": "2024-11-20T10:54:19.015021+00:00" }, @@ -458,9 +495,18 @@ "questionnaire_name": "spine_mhs_message_sets", "questionnaire_version": "1", "data": { - "MHS IN": "READ_PRACTITIONER_ROLE_R4_V002", + "MHS IN": "READ_PRACTITIONER_ROLE_R4_V003", "MHS SN": "urn:nhs:names:services:ers", - "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V003" + "Interaction ID": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V003", + "Contract Property Template Key": "14", + "Interaction Type": "fhir", + "Reliability Configuration Ack Requested": "never", + "MHS CPA ID": "00000000000c", + "Reliability Configuration Duplication Elimination": "never", + "MHS IP Address": "0.0.0.0", + "MHS Is Authenticated": "none", + "Product Key": "111", + "Unique Identifier": "00000000000c" }, "created_on": "2024-11-20T10:54:19.015692+00:00" } @@ -536,8 +582,14 @@ "updated_on": "2024-11-20T10:54:19.019737+00:00", "deleted_on": null, "keys": [ - { "key_type": "cpa_id", "key_value": "00000000000b" }, - { "key_type": "cpa_id", "key_value": "00000000000c" } + { + "key_type": "cpa_id", + "key_value": "00000000000b" + }, + { + "key_type": "cpa_id", + "key_value": "00000000000c" + } ], "tags": [ [ @@ -611,33 +663,26 @@ "questionnaire_version": "1", "data": { "Approver URP": "myApprover", - "Contract Property Template Key": "14", "Date Approved": "20020202020202", "Date DNS Approved": "20020202020202", "Date Requested": "20020202020202", "DNS Approver": "myApprover", - "Interaction Type": "fhir", "Managing Organization": "BBB", - "Reliability Configuration Ack Requested": "never", - "MHS CPA ID": "00000000000b", - "Reliability Configuration Duplication Elimination": "never", "Address": "https://test.C3O9X.nhs.uk/", "MHS FQDN": "test.C3O9X.nhs.uk", - "MHS IP Address": "0.0.0.0", - "MHS Is Authenticated": "none", "MHS Manufacturer Organisation": "LSP04", "MHS Party key": "BBB-111111", - "Product Key": "111", "Product Name": "My BBB Product", "Product Version": "2005.02", - "Requestor URP": "myRequestor", - "Unique Identifier": "00000000000b" + "Requestor URP": "myRequestor" }, "created_on": "2024-11-20T10:54:19.010898+00:00" } ] }, - "device_reference_data": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": ["*"] } + "device_reference_data": { + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": ["*"] + } } }, { @@ -652,7 +697,10 @@ "updated_on": "2024-11-20T10:54:19.021912+00:00", "deleted_on": null, "keys": [ - { "key_type": "accredited_system_id", "key_value": "000000000002" } + { + "key_type": "accredited_system_id", + "key_value": "000000000002" + } ], "tags": [ [ @@ -803,7 +851,10 @@ "updated_on": "2024-11-20T10:54:19.023792+00:00", "deleted_on": null, "keys": [ - { "key_type": "accredited_system_id", "key_value": "000000000003" } + { + "key_type": "accredited_system_id", + "key_value": "000000000003" + } ], "tags": [ [ diff --git a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.0.json b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.0.json index 5b67e1438..29ccb5542 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.0.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.0.json @@ -2,24 +2,52 @@ { "PutRequest": { "Item": { - "pk": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "sk": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "pk_read": { "S": "PT#" }, - "sk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "root": { "BOOL": true }, - "id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "LSP04 (EPR)" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.001479+00:00" }, - "updated_on": { "NULL": true }, - "deleted_on": { "NULL": true }, + "pk": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "sk": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "pk_read": { + "S": "PT#" + }, + "sk_read": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "name": { + "S": "LSP04 (EPR)" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.001479+00:00" + }, + "updated_on": { + "NULL": true + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "epr_id" }, - "key_value": { "S": "EPR-LSP04" } + "key_type": { + "S": "epr_id" + }, + "key_value": { + "S": "EPR-LSP04" + } } } ] @@ -30,24 +58,52 @@ { "PutRequest": { "Item": { - "pk": { "S": "PT#EPR-LSP04" }, - "sk": { "S": "PT#EPR-LSP04" }, - "pk_read": { "S": "PT#" }, - "sk_read": { "S": "PT#EPR-LSP04" }, - "root": { "BOOL": false }, - "id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "LSP04 (EPR)" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.001479+00:00" }, - "updated_on": { "NULL": true }, - "deleted_on": { "NULL": true }, + "pk": { + "S": "PT#EPR-LSP04" + }, + "sk": { + "S": "PT#EPR-LSP04" + }, + "pk_read": { + "S": "PT#" + }, + "sk_read": { + "S": "PT#EPR-LSP04" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "name": { + "S": "LSP04 (EPR)" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.001479+00:00" + }, + "updated_on": { + "NULL": true + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "epr_id" }, - "key_value": { "S": "EPR-LSP04" } + "key_type": { + "S": "epr_id" + }, + "key_value": { + "S": "EPR-LSP04" + } } } ] @@ -58,27 +114,55 @@ { "PutRequest": { "Item": { - "pk": { "S": "P#P.VNT-MLW" }, - "sk": { "S": "P#P.VNT-MLW" }, - "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "sk_read": { "S": "P#P.VNT-MLW" }, - "root": { "BOOL": true }, - "id": { "S": "P.VNT-MLW" }, + "pk": { + "S": "P#P.VNT-MLW" + }, + "sk": { + "S": "P#P.VNT-MLW" + }, + "pk_read": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "sk_read": { + "S": "P#P.VNT-MLW" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "My AAA Product" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.001733+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.002057+00:00" }, - "deleted_on": { "NULL": true }, + "name": { + "S": "My AAA Product" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.001733+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.002057+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "party_key" }, - "key_value": { "S": "AAA-111111" } + "key_type": { + "S": "party_key" + }, + "key_value": { + "S": "AAA-111111" + } } } ] @@ -89,27 +173,55 @@ { "PutRequest": { "Item": { - "pk": { "S": "P#AAA-111111" }, - "sk": { "S": "P#AAA-111111" }, - "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "sk_read": { "S": "P#AAA-111111" }, - "root": { "BOOL": false }, - "id": { "S": "P.VNT-MLW" }, + "pk": { + "S": "P#AAA-111111" + }, + "sk": { + "S": "P#AAA-111111" + }, + "pk_read": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "sk_read": { + "S": "P#AAA-111111" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "My AAA Product" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.001733+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.002057+00:00" }, - "deleted_on": { "NULL": true }, + "name": { + "S": "My AAA Product" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.001733+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.002057+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "party_key" }, - "key_value": { "S": "AAA-111111" } + "key_type": { + "S": "party_key" + }, + "key_value": { + "S": "AAA-111111" + } } } ] @@ -120,81 +232,166 @@ { "PutRequest": { "Item": { - "pk": { "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" }, - "sk": { "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" }, + "pk": { + "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" + }, + "sk": { + "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" }, - "root": { "BOOL": true }, - "id": { "S": "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" }, - "name": { "S": "AAA-111111 - MHS Message Sets" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "DRD#3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6" + }, + "name": { + "S": "AAA-111111 - MHS Message Sets" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, + "ods_code": { + "S": "LSP04" + }, "questionnaire_responses": { "M": { "spine_mhs_message_sets/1": { "L": [ { "M": { - "id": { "S": "5e4cab5e-bcbd-47f6-afa2-7a2b86853ca5" }, - "questionnaire_name": { "S": "spine_mhs_message_sets" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "5e4cab5e-bcbd-47f6-afa2-7a2b86853ca5" + }, + "questionnaire_name": { + "S": "spine_mhs_message_sets" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "MHS IN": { "S": "READ_PRACTITIONER_ROLE_R4_V001" }, - "MHS SN": { "S": "urn:nhs:names:services:ers" }, + "MHS IN": { + "S": "READ_PRACTITIONER_ROLE_R4_V001" + }, + "MHS SN": { + "S": "urn:nhs:names:services:ers" + }, "Interaction ID": { "S": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V001" + }, + "Contract Property Template Key": { + "S": "14" + }, + "Interaction Type": { + "S": "fhir" + }, + "Reliability Configuration Ack Requested": { + "S": "never" + }, + "MHS CPA ID": { + "S": "00000000000a" + }, + "Reliability Configuration Duplication Elimination": { + "S": "never" + }, + "MHS IP Address": { + "S": "0.0.0.0" + }, + "MHS Is Authenticated": { + "S": "none" + }, + "Product Key": { + "S": "111" + }, + "Unique Identifier": { + "S": "00000000000a" } } }, - "created_on": { "S": "2024-11-20T10:54:19.000224+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.000224+00:00" + } } } ] } } }, - "created_on": { "S": "2024-11-20T10:54:19.002130+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.002249+00:00" }, - "deleted_on": { "NULL": true } + "created_on": { + "S": "2024-11-20T10:54:19.002130+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.002249+00:00" + }, + "deleted_on": { + "NULL": true + } } } }, { "PutRequest": { "Item": { - "pk": { "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" }, - "sk": { "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" }, + "pk": { + "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" + }, + "sk": { + "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" }, - "root": { "BOOL": true }, - "id": { "S": "d3d0e6b8-8277-4849-8e8d-5cb035af5536" }, - "name": { "S": "AAA-111111 - AS Additional Interactions" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "DRD#d3d0e6b8-8277-4849-8e8d-5cb035af5536" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "d3d0e6b8-8277-4849-8e8d-5cb035af5536" + }, + "name": { + "S": "AAA-111111 - AS Additional Interactions" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, + "ods_code": { + "S": "LSP04" + }, "questionnaire_responses": { "M": { "spine_as_additional_interactions/1": { "L": [ { "M": { - "id": { "S": "170711a5-2e77-453b-a04f-4723cf8e9f87" }, + "id": { + "S": "170711a5-2e77-453b-a04f-4723cf8e9f87" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -202,16 +399,22 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.000557+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.000557+00:00" + } } }, { "M": { - "id": { "S": "cb431ce5-5de2-42cd-9430-2e0b0ad91639" }, + "id": { + "S": "cb431ce5-5de2-42cd-9430-2e0b0ad91639" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -219,16 +422,22 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.000872+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.000872+00:00" + } } }, { "M": { - "id": { "S": "36fa5061-f9b7-4980-8cf7-abafdb25f670" }, + "id": { + "S": "36fa5061-f9b7-4980-8cf7-abafdb25f670" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -236,46 +445,82 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.001186+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.001186+00:00" + } } } ] } } }, - "created_on": { "S": "2024-11-20T10:54:19.003795+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.004000+00:00" }, - "deleted_on": { "NULL": true } + "created_on": { + "S": "2024-11-20T10:54:19.003795+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.004000+00:00" + }, + "deleted_on": { + "NULL": true + } } } }, { "PutRequest": { "Item": { - "pk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, + "pk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": true }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -289,40 +534,61 @@ "L": [ { "M": { - "id": { "S": "277d020e-0389-4113-b44f-f659d2b0ee59" }, - "questionnaire_name": { "S": "spine_mhs" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "277d020e-0389-4113-b44f-f659d2b0ee59" + }, + "questionnaire_name": { + "S": "spine_mhs" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "Approver URP": { "S": "myApprover" }, - "Contract Property Template Key": { "S": "14" }, - "Date Approved": { "S": "20010101010101" }, - "Date DNS Approved": { "S": "20010101010101" }, - "Date Requested": { "S": "20010101010101" }, - "DNS Approver": { "S": "myApprover" }, - "Interaction Type": { "S": "fhir" }, - "Managing Organization": { "S": "AAA" }, - "Reliability Configuration Ack Requested": { - "S": "never" + "Approver URP": { + "S": "myApprover" }, - "MHS CPA ID": { "S": "00000000000a" }, - "Reliability Configuration Duplication Elimination": { - "S": "never" + "Date Approved": { + "S": "20010101010101" + }, + "Date DNS Approved": { + "S": "20010101010101" + }, + "Date Requested": { + "S": "20010101010101" + }, + "DNS Approver": { + "S": "myApprover" + }, + "Managing Organization": { + "S": "AAA" + }, + "Address": { + "S": "https://test.C3O9X.nhs.uk/" + }, + "MHS FQDN": { + "S": "test.C3O9X.nhs.uk" + }, + "MHS Manufacturer Organisation": { + "S": "LSP04" + }, + "MHS Party key": { + "S": "AAA-111111" + }, + "Product Name": { + "S": "My AAA Product" }, - "Address": { "S": "https://test.C3O9X.nhs.uk/" }, - "MHS FQDN": { "S": "test.C3O9X.nhs.uk" }, - "MHS IP Address": { "S": "0.0.0.0" }, - "MHS Is Authenticated": { "S": "none" }, - "MHS Manufacturer Organisation": { "S": "LSP04" }, - "MHS Party key": { "S": "AAA-111111" }, - "Product Key": { "S": "111" }, - "Product Name": { "S": "My AAA Product" }, - "Product Version": { "S": "2005.02" }, - "Requestor URP": { "S": "myRequestor" }, - "Unique Identifier": { "S": "00000000000a" } + "Product Version": { + "S": "2005.02" + }, + "Requestor URP": { + "S": "myRequestor" + } } }, - "created_on": { "S": "2024-11-20T10:54:18.995983+00:00" } + "created_on": { + "S": "2024-11-20T10:54:18.995983+00:00" + } } } ] @@ -331,7 +597,13 @@ }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -340,30 +612,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#00000000000a" }, - "sk": { "S": "D#00000000000a" }, + "pk": { + "S": "D#00000000000a" + }, + "sk": { + "S": "D#00000000000a" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "D#00000000000a" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#00000000000a" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -372,11 +672,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -385,28 +691,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_mhs_party_key=aaa-111111" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "pk_read": { "S": "DT#nhs_mhs_party_key=aaa-111111" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "pk": { + "S": "DT#nhs_mhs_party_key=aaa-111111" + }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "pk_read": { + "S": "DT#nhs_mhs_party_key=aaa-111111" + }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -415,11 +751,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -431,29 +773,55 @@ "pk": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, "pk_read": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -462,11 +830,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } diff --git a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.1.json b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.1.json index 7fb2febf9..c3773d358 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.1.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.1.json @@ -2,28 +2,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_id_code=aaa" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "pk_read": { "S": "DT#nhs_id_code=aaa" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "pk": { + "S": "DT#nhs_id_code=aaa" + }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "pk_read": { + "S": "DT#nhs_id_code=aaa" + }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -32,11 +62,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -45,28 +81,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "pk_read": { "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "pk": { + "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111" + }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "pk_read": { + "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111" + }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -75,11 +141,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -91,29 +163,55 @@ "pk": { "S": "DT#nhs_mhs_party_key=aaa-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, "pk_read": { "S": "DT#nhs_mhs_party_key=aaa-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -122,11 +220,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -138,29 +242,55 @@ "pk": { "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, "pk_read": { "S": "DT#nhs_id_code=aaa&nhs_mhs_party_key=aaa-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -169,11 +299,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -185,29 +321,55 @@ "pk": { "S": "DT#nhs_id_code=aaa&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, + "sk": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, "pk_read": { "S": "DT#nhs_id_code=aaa&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001" }, - "sk_read": { "S": "D#192133bc-7077-4163-9387-9856969dd412" }, - "root": { "BOOL": false }, - "id": { "S": "192133bc-7077-4163-9387-9856969dd412" }, - "name": { "S": "AAA-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#192133bc-7077-4163-9387-9856969dd412" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "192133bc-7077-4163-9387-9856969dd412" + }, + "name": { + "S": "AAA-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.002315+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.003736+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.002315+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.003736+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000a" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000a" + } } } ] @@ -216,11 +378,17 @@ "S": "H4sIAMVbSGcC/2WTS46rVhCGIyWLiWQpYJqHPbgDOLzhYDAcXlIGgDHGvB/2AY+ygB5k0NlDhllEVpAVxem+ytVV17j0/V+pqn776Y9/fvzhvX59+/nVU+lJ46GfukoGCGoummTUeV5ZEGW0ie1oTIPQsslAhuQSobo+q/HAxE4+Tp50lLci1Eu3GQqV19hRrmmSf9bb6++fsMfR+Ib1MBN8xYZynLVLQ/dOvu6N0ga3opP9PGqYYfL9JanlOL4aTuX3KJUD1PSFG24BauTVDWIjbplTIssb1DIwCSnHDam4iMSitnzJ5uFlbItL8aFkflJyR/Gb0hEz1FOJypsFnNuePR7YQD540ppV/dAJGIjGxPI6/g/25cvba/0Jl4/SO+7h8oOWcSYLafsKa/taEXroG+KLVUY3A/k6oDWp2Ml0YUrdbBi3wwOtt3av8kIcIgsHgpEMXc5b+ESC2fqw/+tTnD9a/8dJGX6Pu+QaWAzTLcfrtIVjTxyx7kYNexkAjo+oAtqmMcxyunn0Azq9HSf1MawDR1LGO/SyrWKM9OyW07RUGjhsB6scDBEtesoWhqgwugkr+Njdny0bQ9y1VsppuslBzAtdZDyV1XsLSUX5UP77O+VHALHTAegskuCRPbBZWaaQbBLxWdccKrKEueacYH+L1L2S7kIO3sRLFYVdzIwed1+SdeRuL4k+02vGgzPf1Kk2mO6iZh63I0X30l684UDNIWn3DNGQ9/i8zkjsuNRErPZggUnVMtkMOZ4rxWkvvKQ4/obOtK7SDrWgKXkXBrl4sjFIJIzpmH7f9Nvrn9+NsYbaxxhYQpJ8L2bi4vopju572WkKVTTLXlfu9rkCNnXebMsdhOJhzwVq+PJY7UNHUJ23Zn2tzMJeJB/CIyJSj7XzbKpU+2UDESlWhAafDzJWUy7kno679LSEjXscrmDdFGZ8PXVk6Bxogud32y2Jc+frTea//AvgmA8J3QMAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY/SQBTVBYOyiB9xX0w082CiiaFMC7iUtwY0EoWtwBpfDBnoFCbAtLZTE0w28QfM4/jir/XOQNldv6YvnXvv3HvOued78cfPwg1zLpQ8TmPG6XSzTOu2+qwu1At5xAIlnzmnpwF2MK3hRtutNW27UZs1m2EtfNVyA2eGKW25Sj78ktFUsIhzwhI65WRDlbxz6KnkyfWCrzRJ4aLkTVvJYkAEMSMrXhwnESTR+chXsrzZ5gEln3YjLhIyF8hPopgmYosmdBOviaDoHd0qeWQ3lbzb0/f9K8BfdTC2Lz8lH5iC3nD8v6KqKRpRA/qvFZUrHZLfkN7vc0E1UmCIJtsYpCiGSwaZkwHhZMH4Ap0lC8LZNyKMCgXP85R8PqJrRmZszYAbsA3ZIktMBfLmq6twbnG6Gzt4O0Zd30P9HkDCl4coaf+7Wy+L12y++3+9ZhvG9zjyviUvCBKawt4eL4WI0069LmC01W2cuZ8svkytbFVX8rYe/+ZDbwiy/pEH0XS676NDsxK2zKfkI5NKkZeJJeVCg9G8ijzioNYTnQWpshBEzBKww06uNIf5fuxjvWxd5xNthZV2QBlkrNnmgKPBJkEGdjHmKJhYJY8NjUGrgy2CJ2gfVfJenv+Y+7MEi29Z2IFhe/2jvTmPN9tDBPifcwYX1A80nZBpFa8vJJPleUI1z6lujBzsNAFszcETG3dazY7dtly35bYbLzHuYKwyklq/ALwUba+lAwAA" + "S": "H4sIAPXfWmcC/2VQTUvDQBDVqvhVWxS8CMIePAiSdJMmtuktWMSDrdWqeJGyNtsmlKR1dyNEEPwBcxz/r9uY+oGzp3nv7byZ97760Sgt5fWGsC1nUcIHcShrFj7iGx5DKQoQjuxGI6A25QatNz3Dsay68eQ4I2N06nqB/UQ5dz2EveeUSxVNk4RFgg8SFnOEze+ZCPt/BS9cSN0gLFsIqwFTLLcs+7OZmGqS3N30ELbibAEg7LSZ4qTo9WYVm1Lr5yHs5oJ2t/8jCqtQydEbnvt/QeVfGoHhDux3WMLGUTImV2LMkuiVqXy5Fd/3Edb9IBBc6iMOQqVmslWrKT3LPKtfeQ9mEkozndQQNjoXfXJ+3e7qTf7xCIdzWvukIzZUqdAnfnnJwmvtst+jjj5zrusxoTIy4ZnOQO9gWHkhlHtiGqRDRbp5wJVORjRNChShuuDvF/mu65Rck9p6cJHBtAh3O86+EUxhayi4TioYzH8Rm9qOdjVsemvRluu0rKbpea7XrJ9Q2qIUUybNT/cGzylCAgAA" }, "device_reference_data": { "M": { - "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { "L": [{ "S": "*" }] } + "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -229,30 +397,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, - "sk": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, + "pk": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, + "sk": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, - "root": { "BOOL": true }, - "id": { "S": "44d37e03-1bba-4300-970e-f083604917c0" }, - "name": { "S": "AAA-111111/000000000001 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "44d37e03-1bba-4300-970e-f083604917c0" + }, + "name": { + "S": "AAA-111111/000000000001 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.004056+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.005653+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.004056+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.005653+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000001" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000001" + } } } ] @@ -266,27 +462,65 @@ "L": [ { "M": { - "id": { "S": "8e3f6c89-8d86-4827-9168-1866b141d9f3" }, - "questionnaire_name": { "S": "spine_as" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "8e3f6c89-8d86-4827-9168-1866b141d9f3" + }, + "questionnaire_name": { + "S": "spine_as" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "Approver URP": { "S": "myApprover" }, - "Client ODS Codes": { "L": [{ "S": "AAA" }] }, - "Date Approved": { "S": "20010101010101" }, - "Date Requested": { "S": "20010101010101" }, - "ODS Code": { "S": "AAA" }, - "MHS Manufacturer Organisation": { "S": "LSP04" }, - "Party Key": { "S": "AAA-111111" }, - "Product Key": { "S": "111" }, - "Product Name": { "S": "My AAA Product" }, - "Product Version": { "S": "2005.02" }, - "Requestor URP": { "S": "myRequestor" }, - "Temp UID": { "S": "111" }, - "ASID": { "S": "000000000001" } + "Approver URP": { + "S": "myApprover" + }, + "Client ODS Codes": { + "L": [ + { + "S": "AAA" + } + ] + }, + "Date Approved": { + "S": "20010101010101" + }, + "Date Requested": { + "S": "20010101010101" + }, + "ODS Code": { + "S": "AAA" + }, + "MHS Manufacturer Organisation": { + "S": "LSP04" + }, + "Party Key": { + "S": "AAA-111111" + }, + "Product Key": { + "S": "111" + }, + "Product Name": { + "S": "My AAA Product" + }, + "Product Version": { + "S": "2005.02" + }, + "Requestor URP": { + "S": "myRequestor" + }, + "Temp UID": { + "S": "111" + }, + "ASID": { + "S": "000000000001" + } } }, - "created_on": { "S": "2024-11-20T10:54:18.997768+00:00" } + "created_on": { + "S": "2024-11-20T10:54:18.997768+00:00" + } } } ] @@ -296,10 +530,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -309,30 +551,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#000000000001" }, - "sk": { "S": "D#000000000001" }, + "pk": { + "S": "D#000000000001" + }, + "sk": { + "S": "D#000000000001" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.VNT-MLW" }, - "sk_read": { "S": "D#000000000001" }, - "root": { "BOOL": false }, - "id": { "S": "44d37e03-1bba-4300-970e-f083604917c0" }, - "name": { "S": "AAA-111111/000000000001 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#000000000001" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "44d37e03-1bba-4300-970e-f083604917c0" + }, + "name": { + "S": "AAA-111111/000000000001 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.004056+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.005653+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.004056+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.005653+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000001" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000001" + } } } ] @@ -346,10 +616,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -362,29 +640,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04&nhs_mhs_party_key=aaa-111111" }, - "sk": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, + "sk": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04&nhs_mhs_party_key=aaa-111111" }, - "sk_read": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, - "root": { "BOOL": false }, - "id": { "S": "44d37e03-1bba-4300-970e-f083604917c0" }, - "name": { "S": "AAA-111111/000000000001 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "44d37e03-1bba-4300-970e-f083604917c0" + }, + "name": { + "S": "AAA-111111/000000000001 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.004056+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.005653+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.004056+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.005653+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000001" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000001" + } } } ] @@ -398,10 +702,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -414,29 +726,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001&nhs_mhs_party_key=aaa-111111" }, - "sk": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, + "sk": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001&nhs_mhs_party_key=aaa-111111" }, - "sk_read": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, - "root": { "BOOL": false }, - "id": { "S": "44d37e03-1bba-4300-970e-f083604917c0" }, - "name": { "S": "AAA-111111/000000000001 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "44d37e03-1bba-4300-970e-f083604917c0" + }, + "name": { + "S": "AAA-111111/000000000001 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.004056+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.005653+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.004056+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.005653+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000001" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000001" + } } } ] @@ -450,10 +788,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -466,29 +812,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk01&nhs_mhs_manufacturer_org=lsp04" }, - "sk": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, + "sk": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk01&nhs_mhs_manufacturer_org=lsp04" }, - "sk_read": { "S": "D#44d37e03-1bba-4300-970e-f083604917c0" }, - "root": { "BOOL": false }, - "id": { "S": "44d37e03-1bba-4300-970e-f083604917c0" }, - "name": { "S": "AAA-111111/000000000001 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#44d37e03-1bba-4300-970e-f083604917c0" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "44d37e03-1bba-4300-970e-f083604917c0" + }, + "name": { + "S": "AAA-111111/000000000001 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.004056+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.005653+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.004056+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.005653+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000001" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000001" + } } } ] @@ -502,10 +874,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } diff --git a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.4.json b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.4.json index 96f420307..badc8b482 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.4.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.4.json @@ -5,29 +5,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04&nhs_mhs_manufacturer_org=lsp04" }, - "sk": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, + "sk": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04&nhs_mhs_manufacturer_org=lsp04" }, - "sk_read": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "root": { "BOOL": false }, - "id": { "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "name": { "S": "AAA-111111/000000000004 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "name": { + "S": "AAA-111111/000000000004 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.005712+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.007286+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.005712+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.007286+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000004" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000004" + } } } ] @@ -41,10 +67,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -57,29 +91,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001&nhs_mhs_manufacturer_org=lsp04" }, - "sk": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, + "sk": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v001&nhs_mhs_manufacturer_org=lsp04" }, - "sk_read": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "root": { "BOOL": false }, - "id": { "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "name": { "S": "AAA-111111/000000000004 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "name": { + "S": "AAA-111111/000000000004 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.005712+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.007286+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.005712+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.007286+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000004" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000004" + } } } ] @@ -93,10 +153,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -109,29 +177,55 @@ "pk": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04" }, - "sk": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, + "sk": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, "pk_read": { "S": "DT#nhs_as_client=aaa&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk04" }, - "sk_read": { "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "root": { "BOOL": false }, - "id": { "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" }, - "name": { "S": "AAA-111111/000000000004 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.VNT-MLW" }, + "sk_read": { + "S": "D#4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "4ec9c8a8-37ff-4085-bf3f-e93e9e3ac23e" + }, + "name": { + "S": "AAA-111111/000000000004 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.VNT-MLW" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.005712+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.007286+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.005712+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.007286+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000004" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000004" + } } } ] @@ -145,10 +239,18 @@ "device_reference_data": { "M": { "3dfd9f0b-0cf3-4c3d-92cd-e379adfaecf6": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "d3d0e6b8-8277-4849-8e8d-5cb035af5536": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -158,27 +260,55 @@ { "PutRequest": { "Item": { - "pk": { "S": "P#P.LU6-Y7D" }, - "sk": { "S": "P#P.LU6-Y7D" }, - "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "sk_read": { "S": "P#P.LU6-Y7D" }, - "root": { "BOOL": true }, - "id": { "S": "P.LU6-Y7D" }, + "pk": { + "S": "P#P.LU6-Y7D" + }, + "sk": { + "S": "P#P.LU6-Y7D" + }, + "pk_read": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "sk_read": { + "S": "P#P.LU6-Y7D" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "My BBB Product" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.017417+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.017614+00:00" }, - "deleted_on": { "NULL": true }, + "name": { + "S": "My BBB Product" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017417+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.017614+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "party_key" }, - "key_value": { "S": "BBB-111111" } + "key_type": { + "S": "party_key" + }, + "key_value": { + "S": "BBB-111111" + } } } ] @@ -189,27 +319,55 @@ { "PutRequest": { "Item": { - "pk": { "S": "P#BBB-111111" }, - "sk": { "S": "P#BBB-111111" }, - "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "sk_read": { "S": "P#BBB-111111" }, - "root": { "BOOL": false }, - "id": { "S": "P.LU6-Y7D" }, + "pk": { + "S": "P#BBB-111111" + }, + "sk": { + "S": "P#BBB-111111" + }, + "pk_read": { + "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441" + }, + "sk_read": { + "S": "P#BBB-111111" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "name": { "S": "My BBB Product" }, - "ods_code": { "S": "LSP04" }, - "status": { "S": "active" }, - "created_on": { "S": "2024-11-20T10:54:19.017417+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.017614+00:00" }, - "deleted_on": { "NULL": true }, + "name": { + "S": "My BBB Product" + }, + "ods_code": { + "S": "LSP04" + }, + "status": { + "S": "active" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017417+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.017614+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "party_key" }, - "key_value": { "S": "BBB-111111" } + "key_type": { + "S": "party_key" + }, + "key_value": { + "S": "BBB-111111" + } } } ] @@ -220,98 +378,222 @@ { "PutRequest": { "Item": { - "pk": { "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" }, - "sk": { "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" }, + "pk": { + "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" + }, + "sk": { + "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" }, - "root": { "BOOL": true }, - "id": { "S": "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" }, - "name": { "S": "BBB-111111 - MHS Message Sets" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "DRD#b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e" + }, + "name": { + "S": "BBB-111111 - MHS Message Sets" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, + "ods_code": { + "S": "LSP04" + }, "questionnaire_responses": { "M": { "spine_mhs_message_sets/1": { "L": [ { "M": { - "id": { "S": "719577ca-919e-486d-b0d1-e5e06388051c" }, - "questionnaire_name": { "S": "spine_mhs_message_sets" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "719577ca-919e-486d-b0d1-e5e06388051c" + }, + "questionnaire_name": { + "S": "spine_mhs_message_sets" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "MHS IN": { "S": "READ_PRACTITIONER_ROLE_R4_V002" }, - "MHS SN": { "S": "urn:nhs:names:services:ers" }, + "MHS IN": { + "S": "READ_PRACTITIONER_ROLE_R4_V002" + }, + "MHS SN": { + "S": "urn:nhs:names:services:ers" + }, "Interaction ID": { "S": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V002" + }, + "Contract Property Template Key": { + "S": "14" + }, + "Interaction Type": { + "S": "fhir" + }, + "Reliability Configuration Ack Requested": { + "S": "never" + }, + "MHS CPA ID": { + "S": "00000000000b" + }, + "Reliability Configuration Duplication Elimination": { + "S": "never" + }, + "MHS IP Address": { + "S": "0.0.0.0" + }, + "MHS Is Authenticated": { + "S": "none" + }, + "Product Key": { + "S": "111" + }, + "Unique Identifier": { + "S": "00000000000b" } } }, - "created_on": { "S": "2024-11-20T10:54:19.015021+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.015021+00:00" + } } }, { "M": { - "id": { "S": "417fe8ec-2fc1-4a38-80fc-7cb0ab5245e9" }, - "questionnaire_name": { "S": "spine_mhs_message_sets" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "417fe8ec-2fc1-4a38-80fc-7cb0ab5245e9" + }, + "questionnaire_name": { + "S": "spine_mhs_message_sets" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "MHS IN": { "S": "READ_PRACTITIONER_ROLE_R4_V002" }, - "MHS SN": { "S": "urn:nhs:names:services:ers" }, + "MHS IN": { + "S": "READ_PRACTITIONER_ROLE_R4_V003" + }, + "MHS SN": { + "S": "urn:nhs:names:services:ers" + }, "Interaction ID": { "S": "urn:nhs:names:services:ers:READ_PRACTITIONER_ROLE_R4_V003" + }, + "Contract Property Template Key": { + "S": "14" + }, + "Interaction Type": { + "S": "fhir" + }, + "Reliability Configuration Ack Requested": { + "S": "never" + }, + "MHS CPA ID": { + "S": "00000000000c" + }, + "Reliability Configuration Duplication Elimination": { + "S": "never" + }, + "MHS IP Address": { + "S": "0.0.0.0" + }, + "MHS Is Authenticated": { + "S": "none" + }, + "Product Key": { + "S": "111" + }, + "Unique Identifier": { + "S": "00000000000c" } } }, - "created_on": { "S": "2024-11-20T10:54:19.015692+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.015692+00:00" + } } } ] } } }, - "created_on": { "S": "2024-11-20T10:54:19.017673+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.017837+00:00" }, - "deleted_on": { "NULL": true } + "created_on": { + "S": "2024-11-20T10:54:19.017673+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.017837+00:00" + }, + "deleted_on": { + "NULL": true + } } } }, { "PutRequest": { "Item": { - "pk": { "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" }, - "sk": { "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" }, + "pk": { + "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" + }, + "sk": { + "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" }, - "root": { "BOOL": true }, - "id": { "S": "b4186163-23ec-41fa-abc2-5fe8b0fe9cab" }, - "name": { "S": "BBB-111111 - AS Additional Interactions" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "DRD#b4186163-23ec-41fa-abc2-5fe8b0fe9cab" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "b4186163-23ec-41fa-abc2-5fe8b0fe9cab" + }, + "name": { + "S": "BBB-111111 - AS Additional Interactions" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, + "ods_code": { + "S": "LSP04" + }, "questionnaire_responses": { "M": { "spine_as_additional_interactions/1": { "L": [ { "M": { - "id": { "S": "4fc814dd-6309-4c8f-92ac-ef450292c058" }, + "id": { + "S": "4fc814dd-6309-4c8f-92ac-ef450292c058" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -319,16 +601,22 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.016015+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.016015+00:00" + } } }, { "M": { - "id": { "S": "048c60e7-f664-4b02-b1ad-78460c47ba17" }, + "id": { + "S": "048c60e7-f664-4b02-b1ad-78460c47ba17" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -336,16 +624,22 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.016328+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.016328+00:00" + } } }, { "M": { - "id": { "S": "f43844e2-0514-4140-a110-b3cb400e6d9d" }, + "id": { + "S": "f43844e2-0514-4140-a110-b3cb400e6d9d" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -353,16 +647,22 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.016638+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.016638+00:00" + } } }, { "M": { - "id": { "S": "4a379a26-65b0-4d2d-9fef-9a92b92df293" }, + "id": { + "S": "4a379a26-65b0-4d2d-9fef-9a92b92df293" + }, "questionnaire_name": { "S": "spine_as_additional_interactions" }, - "questionnaire_version": { "S": "1" }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { "Interaction ID": { @@ -370,52 +670,92 @@ } } }, - "created_on": { "S": "2024-11-20T10:54:19.016947+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.016947+00:00" + } } } ] } } }, - "created_on": { "S": "2024-11-20T10:54:19.019795+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.020066+00:00" }, - "deleted_on": { "NULL": true } + "created_on": { + "S": "2024-11-20T10:54:19.019795+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.020066+00:00" + }, + "deleted_on": { + "NULL": true + } } } }, { "PutRequest": { "Item": { - "pk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "pk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": true }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -429,40 +769,61 @@ "L": [ { "M": { - "id": { "S": "2dfdf37f-53e6-43be-9a96-9430e24604ac" }, - "questionnaire_name": { "S": "spine_mhs" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "2dfdf37f-53e6-43be-9a96-9430e24604ac" + }, + "questionnaire_name": { + "S": "spine_mhs" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "Approver URP": { "S": "myApprover" }, - "Contract Property Template Key": { "S": "14" }, - "Date Approved": { "S": "20020202020202" }, - "Date DNS Approved": { "S": "20020202020202" }, - "Date Requested": { "S": "20020202020202" }, - "DNS Approver": { "S": "myApprover" }, - "Interaction Type": { "S": "fhir" }, - "Managing Organization": { "S": "BBB" }, - "Reliability Configuration Ack Requested": { - "S": "never" + "Approver URP": { + "S": "myApprover" }, - "MHS CPA ID": { "S": "00000000000b" }, - "Reliability Configuration Duplication Elimination": { - "S": "never" + "Date Approved": { + "S": "20020202020202" + }, + "Date DNS Approved": { + "S": "20020202020202" + }, + "Date Requested": { + "S": "20020202020202" + }, + "DNS Approver": { + "S": "myApprover" + }, + "Managing Organization": { + "S": "BBB" + }, + "Address": { + "S": "https://test.C3O9X.nhs.uk/" }, - "Address": { "S": "https://test.C3O9X.nhs.uk/" }, - "MHS FQDN": { "S": "test.C3O9X.nhs.uk" }, - "MHS IP Address": { "S": "0.0.0.0" }, - "MHS Is Authenticated": { "S": "none" }, - "MHS Manufacturer Organisation": { "S": "LSP04" }, - "MHS Party key": { "S": "BBB-111111" }, - "Product Key": { "S": "111" }, - "Product Name": { "S": "My BBB Product" }, - "Product Version": { "S": "2005.02" }, - "Requestor URP": { "S": "myRequestor" }, - "Unique Identifier": { "S": "00000000000b" } + "MHS FQDN": { + "S": "test.C3O9X.nhs.uk" + }, + "MHS Manufacturer Organisation": { + "S": "LSP04" + }, + "MHS Party key": { + "S": "BBB-111111" + }, + "Product Name": { + "S": "My BBB Product" + }, + "Product Version": { + "S": "2005.02" + }, + "Requestor URP": { + "S": "myRequestor" + } } }, - "created_on": { "S": "2024-11-20T10:54:19.010898+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.010898+00:00" + } } } ] @@ -471,7 +832,13 @@ }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -480,36 +847,68 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#00000000000b" }, - "sk": { "S": "D#00000000000b" }, + "pk": { + "S": "D#00000000000b" + }, + "sk": { + "S": "D#00000000000b" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "D#00000000000b" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#00000000000b" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -518,11 +917,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -531,36 +936,68 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#00000000000c" }, - "sk": { "S": "D#00000000000c" }, + "pk": { + "S": "D#00000000000c" + }, + "sk": { + "S": "D#00000000000c" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "D#00000000000c" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#00000000000c" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -569,11 +1006,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } diff --git a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.5.json b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.5.json index d3ac2c2c7..537e1b6c1 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.5.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.5.json @@ -5,35 +5,65 @@ "pk": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -42,11 +72,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -58,35 +94,65 @@ "pk": { "S": "DT#nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -95,11 +161,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -111,35 +183,65 @@ "pk": { "S": "DT#nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -148,11 +250,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -164,35 +272,65 @@ "pk": { "S": "DT#nhs_id_code=bbb&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_id_code=bbb&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -201,11 +339,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -217,35 +361,65 @@ "pk": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -254,11 +428,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -270,35 +450,65 @@ "pk": { "S": "DT#nhs_id_code=bbb&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_id_code=bbb&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -307,11 +517,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -323,35 +539,65 @@ "pk": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -360,11 +606,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -373,34 +625,68 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "pk_read": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "pk": { + "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111" + }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "pk_read": { + "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111" + }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -409,11 +695,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -425,35 +717,65 @@ "pk": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, "pk_read": { "S": "DT#nhs_id_code=bbb&nhs_mhs_party_key=bbb-111111&nhs_mhs_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -462,11 +784,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -475,34 +803,68 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_mhs_party_key=bbb-111111" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "pk_read": { "S": "DT#nhs_mhs_party_key=bbb-111111" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "pk": { + "S": "DT#nhs_mhs_party_key=bbb-111111" + }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "pk_read": { + "S": "DT#nhs_mhs_party_key=bbb-111111" + }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -511,11 +873,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } diff --git a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.6.json b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.6.json index 40ada85a5..26cb2500b 100644 --- a/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.6.json +++ b/src/etl/sds/worker/bulk/tests/stage_data/3.load_fanout_output.6.json @@ -2,34 +2,68 @@ { "PutRequest": { "Item": { - "pk": { "S": "DT#nhs_id_code=bbb" }, - "sk": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "pk_read": { "S": "DT#nhs_id_code=bbb" }, - "sk_read": { "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" }, - "root": { "BOOL": false }, - "id": { "S": "a5c17f6a-560d-4553-af40-9095ab84e807" }, - "name": { "S": "BBB-111111 - Message Handling System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "pk": { + "S": "DT#nhs_id_code=bbb" + }, + "sk": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "pk_read": { + "S": "DT#nhs_id_code=bbb" + }, + "sk_read": { + "S": "D#a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "a5c17f6a-560d-4553-af40-9095ab84e807" + }, + "name": { + "S": "BBB-111111 - Message Handling System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.017931+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.019737+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.017931+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.019737+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000b" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000b" + } } }, { "M": { - "key_type": { "S": "cpa_id" }, - "key_value": { "S": "00000000000c" } + "key_type": { + "S": "cpa_id" + }, + "key_value": { + "S": "00000000000c" + } } } ] @@ -38,11 +72,17 @@ "S": "H4sIAMVbSGcC/9WUy46jRhSGs4jyLJEsxWAuthdZQBkwVdxxcZOywIBpmzvYLmA1DzCLKJq8wzzAPEIeLC13J61Rb2aXyVmXTn31nTr/hx///OOnHx7126efP/61ZwdV0L2jqyRgOfvoYPdAF11J9KgWGGtw8TTncqw0y1Ln0AAV52IjNRNxuBtcQJsaIURnNmO/DYp7dKWLgKZWrLOG5hqlOeeWOg7JJmWkFddmydi3ubdHt47fU9Ryjk/DcvRnGE91kIdmh4UgVbtGna9rX2h41DgM3SvMNAWJeDDI1g6mJ2bn1ELInShgo65lhef69dPHL189Y3XNK683BEEZ8ewKnZQQjddZ6ylTwYg099xfBlrv26VDoItL3ukAiRxcAHVRIe083A7srNutFcWlE5S+LSn9XT8ktIJ69uqeh2EsVGDSnXHu0A6P8MjnaKdwUNMLfd7cn48s0G5TG8e1CrW1TnSxcauu2+dCrJzr6Sl/UP8PsNkXbNDpVG29YX/+CnsKVJc0wLaJhCWZyW8pgaHJDtnm3Bw2sthOFFTMO0fA9mJltMgOHTI4fqH3t5rNTs7y6tRFlCAjAevlDReVNVOL41xpnr7XmJM1tU8hFFjCQlFZpGMjhnhIxWNIcyzrtjZ1bwAfMrEhU+nNIgLnpy1dF68f4/d3hp0ePQyvUB1bB8L5GI+LBCSBHCX1WLGtnU1bdLbALW9kLwsrrhs8b4xLOYouyC68Fh9lH1dt7gY0wJU8uX6EoppLY1le4JrT42Blu8EqysOdXRqeZAli7ljF9uHvW+zZJv9f2fMwC3nmO7FHXuyhnA1q+GqvfIeU9dK/K6Mm68fKXPTSuhRLGHhoxxguviLsQcCqUr6R2VyTmitCN3PG063e7gUxCrBBfBHFXZMJppwVT9B4ue5b8lH+HvMxFOiu5P7Jx8M7a3EP3wZpq1z1OkgsnzEuy9M+6rjIzvrOLaBM73R4fs6CfC8oA1EXOfViR3vX1u13b20dwq2e266yagSnuuUdk/dl0y26uGi7RiRiboqQQPKaK9kvfwP9sqYTnQYAAA==" }, "questionnaire_responses": { - "S": "H4sIAMVbSGcC/31SXY8SMRTVBYOyLH7EfTHR9MFEE8PQgQF3eGNBI1FYBNb4siGF6UADdMZOxwSTTfwBfawv/lpvy8fu+tV5md5ze++5557v2R8/M7fsudTqMIkZp+PVPCm7+kJf6pfqgAVaPa8EYRBWX4elWpXWS151Qks+8esl36tiWvHq2CNTrR59SWkiWcQ5YYKOOVlRre7ta2p1fDPhKxUJXLS67WqVDYgktmWhGcciAhCdD/pa5VfrXUCrZ62IS0GmEvVFFFMh12hEV/GSSIre07VWB66n1VHb3LevgH+xgnHl6tPqoU1o94b/SyrapAG1pP+aUbhWQfzG9EGHS2qYwoRotI5Bimw4Z4AcdwknM8Zn6EzMCGffiLQqZE5PT7V6MaBLRiZsyWA2mDZks1TYDNScLq7TucPppm333RC1+k3UaQMlfHUmWrn/rtZO4yWbbv7fLNmK8S2PXd1cMwgETWBvT+ZSxkmjXJbQ2mlVz/zPDp8nTrooa3XXtH/7sd0DWf/AQTQDd/poXyyHHftp9dhCCWqmck65NGTMXFkecVDrqUFBqjQEEVMBdtjIlexofhj2sVm2yesTY4WFcUAeZCy59oCjwSZBCnax5sjYWGEX61mDFrtrBE/QNqrV/R3+aefPHCy+5piNH231j7bmPFyt9xGY/5wzuKBOYMYJmVHx5kJSlZ8KauYcm8IIbOQB2VIFj1zcqHkN13ewi0/8k1cYNzDWKUmcXzS0XuOlAwAA" + "S": "H4sIAGTgWmcC/2WQS0/CQBSFfWB88DCasDExmYULE9MyfYCUnUiMC0EUNW4MGelAG0PBmalJTUz8AXd5/b8OtYDG6WrOOZ1z7/eZ+zpdW0nPB0JeTsOI98eBrFj4hB94DGuhj3Bk+0N/6JwOjarDa4brPHPDY17N8FyHctutUZcNEPZfYy5VOIkiFgrej9iYI2wv3kQo/w28cSH1BWHVQsj5TLG0snA2nYqJNsn9bRdhZ5zMBYRiiylOsruerGRTai8/hL000Or0lqFgF0qpesvT/h+p8CsjMChCuc0iNgqjEbkWIxaF70ylw603m02EzTPfF1zqJQ4CpaayUako/ZZ57lx7j2YUSDN+qSBstS975OKm1dGT/PMRDme27omHbKBioVf86ZJZ18ZVr0tdveYs12VCJeSFJ5qBnsGw0oNQ6IqJHw8U6aSAS+2EaJtkKsLu3H+Y893UlKrmDE8xYzDJ4ObHyULBGHYGgmtSfn/2F9FAXd1q2PTOoo2q27A8k1q07tVPKG1QijGT5jdCorV0QgIAAA==" }, "device_reference_data": { "M": { - "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { "L": [{ "S": "*" }] } + "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { + "L": [ + { + "S": "*" + } + ] + } } } } @@ -51,30 +91,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "pk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": true }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": true + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -88,27 +156,65 @@ "L": [ { "M": { - "id": { "S": "c793754b-1eb9-49d3-99dc-a57e5d2589b1" }, - "questionnaire_name": { "S": "spine_as" }, - "questionnaire_version": { "S": "1" }, + "id": { + "S": "c793754b-1eb9-49d3-99dc-a57e5d2589b1" + }, + "questionnaire_name": { + "S": "spine_as" + }, + "questionnaire_version": { + "S": "1" + }, "data": { "M": { - "Approver URP": { "S": "myApprover" }, - "Client ODS Codes": { "L": [{ "S": "BBB" }] }, - "Date Approved": { "S": "20020202020202" }, - "Date Requested": { "S": "20020202020202" }, - "ODS Code": { "S": "BBB" }, - "MHS Manufacturer Organisation": { "S": "LSP04" }, - "Party Key": { "S": "BBB-111111" }, - "Product Key": { "S": "222" }, - "Product Name": { "S": "My BBB Product" }, - "Product Version": { "S": "2005.02" }, - "Requestor URP": { "S": "myRequestor" }, - "Temp UID": { "S": "222" }, - "ASID": { "S": "000000000002" } + "Approver URP": { + "S": "myApprover" + }, + "Client ODS Codes": { + "L": [ + { + "S": "BBB" + } + ] + }, + "Date Approved": { + "S": "20020202020202" + }, + "Date Requested": { + "S": "20020202020202" + }, + "ODS Code": { + "S": "BBB" + }, + "MHS Manufacturer Organisation": { + "S": "LSP04" + }, + "Party Key": { + "S": "BBB-111111" + }, + "Product Key": { + "S": "222" + }, + "Product Name": { + "S": "My BBB Product" + }, + "Product Version": { + "S": "2005.02" + }, + "Requestor URP": { + "S": "myRequestor" + }, + "Temp UID": { + "S": "222" + }, + "ASID": { + "S": "000000000002" + } } }, - "created_on": { "S": "2024-11-20T10:54:19.012568+00:00" } + "created_on": { + "S": "2024-11-20T10:54:19.012568+00:00" + } } } ] @@ -118,10 +224,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -131,30 +245,58 @@ { "PutRequest": { "Item": { - "pk": { "S": "D#000000000002" }, - "sk": { "S": "D#000000000002" }, + "pk": { + "S": "D#000000000002" + }, + "sk": { + "S": "D#000000000002" + }, "pk_read": { "S": "PT#LSP04.ec12b569-ea31-4c28-9559-17d533c78441#P#P.LU6-Y7D" }, - "sk_read": { "S": "D#000000000002" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#000000000002" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -168,10 +310,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -184,29 +334,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003&nhs_mhs_party_key=bbb-111111" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003&nhs_mhs_party_key=bbb-111111" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -220,10 +396,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -236,29 +420,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk02" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk02" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -272,10 +482,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -288,29 +506,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk03" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk03" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -324,10 +568,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -340,29 +592,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk02&nhs_mhs_manufacturer_org=lsp04" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk02&nhs_mhs_manufacturer_org=lsp04" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -376,10 +654,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -392,29 +678,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002&nhs_mhs_party_key=bbb-111111" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v002&nhs_mhs_party_key=bbb-111111" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -428,10 +740,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -444,29 +764,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk03&nhs_mhs_manufacturer_org=lsp04&nhs_mhs_party_key=bbb-111111" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Apds%3Aqupa_in040000uk03&nhs_mhs_manufacturer_org=lsp04&nhs_mhs_party_key=bbb-111111" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -480,10 +826,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } @@ -496,29 +850,55 @@ "pk": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003&nhs_mhs_manufacturer_org=lsp04" }, - "sk": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, + "sk": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, "pk_read": { "S": "DT#nhs_as_client=bbb&nhs_as_svc_ia=urn%3Anhs%3Anames%3Aservices%3Aers%3Aread_practitioner_role_r4_v003&nhs_mhs_manufacturer_org=lsp04" }, - "sk_read": { "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "root": { "BOOL": false }, - "id": { "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" }, - "name": { "S": "BBB-111111/000000000002 - Accredited System" }, - "status": { "S": "active" }, - "product_id": { "S": "P.LU6-Y7D" }, + "sk_read": { + "S": "D#6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "root": { + "BOOL": false + }, + "id": { + "S": "6924122e-86da-45b3-9c2e-b6a3609b1ed9" + }, + "name": { + "S": "BBB-111111/000000000002 - Accredited System" + }, + "status": { + "S": "active" + }, + "product_id": { + "S": "P.LU6-Y7D" + }, "product_team_id": { "S": "LSP04.ec12b569-ea31-4c28-9559-17d533c78441" }, - "ods_code": { "S": "LSP04" }, - "created_on": { "S": "2024-11-20T10:54:19.020121+00:00" }, - "updated_on": { "S": "2024-11-20T10:54:19.021912+00:00" }, - "deleted_on": { "NULL": true }, + "ods_code": { + "S": "LSP04" + }, + "created_on": { + "S": "2024-11-20T10:54:19.020121+00:00" + }, + "updated_on": { + "S": "2024-11-20T10:54:19.021912+00:00" + }, + "deleted_on": { + "NULL": true + }, "keys": { "L": [ { "M": { - "key_type": { "S": "accredited_system_id" }, - "key_value": { "S": "000000000002" } + "key_type": { + "S": "accredited_system_id" + }, + "key_value": { + "S": "000000000002" + } } } ] @@ -532,10 +912,18 @@ "device_reference_data": { "M": { "b362b7c1-317c-4e1f-86e4-d8cbd0f9524e": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] }, "b4186163-23ec-41fa-abc2-5fe8b0fe9cab": { - "L": [{ "S": "*.Interaction ID" }] + "L": [ + { + "S": "*.Interaction ID" + } + ] } } } diff --git a/src/layers/domain/api/common_steps/questionnaire_response_validation.py b/src/layers/domain/api/common_steps/questionnaire_response_validation.py new file mode 100644 index 000000000..3144dc8d3 --- /dev/null +++ b/src/layers/domain/api/common_steps/questionnaire_response_validation.py @@ -0,0 +1,32 @@ +from domain.core.error import ConfigurationError +from domain.core.questionnaire.v1 import Questionnaire, QuestionnaireResponse +from domain.repository.questionnaire_repository.v1.questionnaires import ( + QuestionnaireInstance, +) + + +def check_expected_questionnaire_response_fields( + questionnaire: Questionnaire, response: dict +): + expected_fields = set(questionnaire.user_provided_fields) + payload_fields = set(response.keys()) + + unexpected_fields = payload_fields - expected_fields + if unexpected_fields: + raise ConfigurationError( + f"Payload contains unexpected fields: {unexpected_fields}. " + f"Expected fields are: {sorted(expected_fields)}." + ) + + +def process_and_validate_questionnaire_response( + questionnaire: Questionnaire, + questionnaire_response: dict, + party_key: str, + instance: QuestionnaireInstance, +) -> QuestionnaireResponse: + check_expected_questionnaire_response_fields(questionnaire, questionnaire_response) + questionnaire.generate_system_fields( + questionnaire_response, instance=instance, party_key=party_key + ) + return questionnaire.validate(data=questionnaire_response) diff --git a/src/layers/domain/core/questionnaire/v1.py b/src/layers/domain/core/questionnaire/v1.py index 080a2ca06..4a0188cda 100644 --- a/src/layers/domain/core/questionnaire/v1.py +++ b/src/layers/domain/core/questionnaire/v1.py @@ -4,12 +4,66 @@ import jsonschema from domain.core.aggregate_root import AggregateRoot from domain.core.base import BaseModel +from domain.core.error import ConfigurationError from domain.core.timestamp import now from pydantic import Field, Json, validator +from sds.epr.constants import SdsFieldName REQUIRED = "required" +# This will be moved as part of a QuestionnaireInstance refactor +def generate_spine_mhs_fields(response: dict, **kwargs) -> None: + required_fields = [SdsFieldName.MHS_FQDN] + missing_fields = [field for field in required_fields if not response.get(field)] + if missing_fields: + # use questionnaire instance for questionnaire name? + raise ConfigurationError( + f"The following required fields are missing in the response to spine_mhs: {', '.join(missing_fields)}" + ) + + response[str(SdsFieldName.ADDRESS)] = ( + f"https://{response.get(SdsFieldName.MHS_FQDN)}" + ) + party_key = kwargs.get("party_key") + response[str(SdsFieldName.PARTY_KEY)] = party_key + response[str(SdsFieldName.MANAGING_ORGANIZATION)] = party_key.split("-")[0] + response[str(SdsFieldName.DATE_APPROVED)] = str(now()) + response[str(SdsFieldName.DATE_REQUESTED)] = str(now()) + response[str(SdsFieldName.DATE_DNS_APPROVED)] = str(None) + + +def generate_spine_mhs_message_sets_fields(response: dict, **kwargs): + """ + Generates system fields for a given questionnaire response. + """ + + # Ensure required fields for system-generated fields are present + required_fields = [SdsFieldName.MHS_SN, SdsFieldName.MHS_IN] + missing_fields = [field for field in required_fields if not response.get(field)] + if missing_fields: + raise ConfigurationError( + f"The following required fields are missing in the response to spine_mhs_message_sets: {', '.join(missing_fields)}" + ) + + # Generate system fields + response[str(SdsFieldName.INTERACTION_ID)] = ( + f"{response.get(SdsFieldName.MHS_SN)}:{response.get(SdsFieldName.MHS_IN)}" + ) + party_key = kwargs.get("party_key") + response[str(SdsFieldName.CPA_ID)] = ( + f"{party_key}:{response[SdsFieldName.INTERACTION_ID]}" + ) + response[str(SdsFieldName.UNIQUE_IDENTIFIER)] = response[SdsFieldName.CPA_ID] + + +# Mapping of QuestionnaireInstance to field generation functions +FIELD_GENERATION_STRATEGIES = { + "spine_mhs": generate_spine_mhs_fields, + "spine_mhs_message_sets": generate_spine_mhs_message_sets_fields, +} + + class QuestionnaireResponseValidationError(Exception): ... @@ -51,6 +105,41 @@ def validate(self, data) -> "QuestionnaireResponse": def id(self) -> str: return f"{self.name}/{self.version}" + @property + def user_provided_fields(self) -> list[str]: + """ + Returns a generator object of fields NOT marked as 'system generated' in the JSON schema. + """ + properties = self.json_schema.get("properties", {}) + return ( + field_name + for field_name, field_attrs in properties.items() + if not field_attrs.get("system generated", False) + ) + + @property + def system_generated_fields(self) -> list[str]: + """ + Returns a list of fields marked as 'system generated' in the JSON schema. + """ + properties = self.json_schema.get("properties", {}) + return [ + field_name + for field_name, field_attrs in properties.items() + if field_attrs.get("system generated") is True + ] + + def generate_system_fields(self, response: dict, instance, **kwargs) -> None: + """ + Delegates system field generation to the appropriate strategy. + """ + strategy = FIELD_GENERATION_STRATEGIES.get(instance) + if not strategy: + raise NotImplementedError( + f"System field generation is not implemented for {instance}" + ) + strategy(response, **kwargs) + class QuestionnaireResponse(BaseModel): id: UUID = Field(default_factory=uuid4) diff --git a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/field_generation.py b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/field_generation.py new file mode 100644 index 000000000..be24f18e6 --- /dev/null +++ b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/field_generation.py @@ -0,0 +1,62 @@ +from domain.core.error import ConfigurationError +from domain.core.timestamp import now +from domain.repository.questionnaire_repository.v1.questionnaires import ( + QuestionnaireInstance, +) +from sds.epr.constants import SdsFieldName + + +# Move this as part of a QuestionnaireInstance refactor +def generate_spine_mhs_fields(response: dict, **kwargs) -> None: + from domain.repository.questionnaire_repository.v1.questionnaires import ( + QuestionnaireInstance, + ) + + required_fields = [SdsFieldName.BINDING, SdsFieldName.MHS_FQDN] + missing_fields = [field for field in required_fields if not response.get(field)] + if missing_fields: + # use questionnaire instance for questionnaire name? + raise ConfigurationError( + f"The following required fields are missing in the response to {QuestionnaireInstance.SPINE_MHS}: {', '.join(missing_fields)}" + ) + + response[str(SdsFieldName.ADDRESS)] = ( + f"{response.get(SdsFieldName.BINDING)}{response.get(SdsFieldName.MHS_FQDN)}" + ) + party_key = kwargs.get("party_key") + response[str(SdsFieldName.PARTY_KEY)] = party_key + response[str(SdsFieldName.MANAGING_ORGANIZATION)] = party_key.split("-")[0] + response[str(SdsFieldName.DATE_APPROVED)] = str(now()) + response[str(SdsFieldName.DATE_REQUESTED)] = str(now()) + response[str(SdsFieldName.DATE_DNS_APPROVED)] = str(None) + + +def generate_spine_mhs_message_sets_fields(response: dict, **kwargs): + """ + Generates system fields for a given questionnaire response. + """ + + # Ensure required fields for system-generated fields are present + required_fields = [SdsFieldName.MHS_SN, SdsFieldName.MHS_IN] + missing_fields = [field for field in required_fields if not response.get(field)] + if missing_fields: + raise ConfigurationError( + f"The following required fields are missing in the response to {QuestionnaireInstance.SPINE_MHS_MESSAGE_SETS}: {', '.join(missing_fields)}" + ) + + # Generate system fields + response[str(SdsFieldName.INTERACTION_ID)] = ( + f"{response.get(SdsFieldName.MHS_SN)}:{response.get(SdsFieldName.MHS_IN)}" + ) + party_key = kwargs.get("party_key") + response[str(SdsFieldName.CPA_ID)] = ( + f"{party_key}:{response[SdsFieldName.INTERACTION_ID]}" + ) + response[str(SdsFieldName.UNIQUE_IDENTIFIER)] = response[SdsFieldName.CPA_ID] + + +# Mapping of QuestionnaireInstance to field generation functions +FIELD_GENERATION_STRATEGIES = { + "SPINE_MHS": generate_spine_mhs_fields, + "SPINE_MHS_MESSAGE_SETS": generate_spine_mhs_message_sets_fields, +} diff --git a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/field_mapping.json b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/field_mapping.json index 86a58ba81..3bae46b33 100644 --- a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/field_mapping.json +++ b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/field_mapping.json @@ -1,27 +1,16 @@ { + "nhs_mhs_fqdn": "MHS FQDN", + "nhs_mhs_service_description": "MHS Service Description", + "nhs_mhs_manufacturer_org": "MHS Manufacturer Organisation", + "nhs_product_name": "Product Name", + "nhs_product_version": "Product Version", "nhs_mhs_end_point": "Address", - "unique_identifier": "Unique Identifier", - "nhs_id_code": "Managing Organization", "nhs_mhs_party_key": "MHS Party key", - "nhs_mhs_cpa_id": "MHS CPA ID", - "nhs_mhs_actor": "Reliability Configuration Actor", - "nhs_mhs_sync_reply_mode": "Reliability Configuration Reply Mode", - "nhs_mhs_duplicate_elimination": "Reliability Configuration Duplication Elimination", - "nhs_mhs_ack_requested": "Reliability Configuration Ack Requested", - "nhs_approver_urp": "Approver URP", - "nhs_contract_property_template_key": "Contract Property Template Key", "nhs_date_approved": "Date Approved", "nhs_date_dns_approved": "Date DNS Approved", "nhs_date_requested": "Date Requested", + "nhs_id_code": "Managing Organization", + "nhs_approver_urp": "Approver URP", "nhs_dns_approver": "DNS Approver", - "nhs_ep_interaction_type": "Interaction Type", - "nhs_mhs_fqdn": "MHS FQDN", - "nhs_mhs_ip_address": "MHS IP Address", - "nhs_mhs_is_authenticated": "MHS Is Authenticated", - "nhs_product_key": "Product Key", - "nhs_product_name": "Product Name", - "nhs_product_version": "Product Version", - "nhs_requestor_urp": "Requestor URP", - "nhs_mhs_service_description": "MHS Service Description", - "nhs_mhs_manufacturer_org": "MHS Manufacturer Organisation" + "nhs_requestor_urp": "Requestor URP" } diff --git a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/v1.json b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/v1.json index 679c4fb9f..96a0941b4 100644 --- a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/v1.json +++ b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs/v1.json @@ -2,140 +2,75 @@ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { - "Address": { + "MHS FQDN": { "type": "string", - "format": "url" - }, - "Unique Identifier": { - "type": "string" + "system generated": false }, - "Managing Organization": { - "type": "string" + "MHS Service Description": { + "type": "string", + "system generated": false }, - "MHS Party key": { - "type": "string" + "MHS Manufacturer Organisation": { + "type": "string", + "system generated": false }, - "MHS CPA ID": { - "type": "string" + "Product Name": { + "type": "string", + "system generated": false }, - "Reliability Configuration Actor": { + "Product Version": { "type": "string", - "enum": [ - "urn:oasis:names:tc:ebxml-msg:actor:topartymsh", - "urn:oasis:names:tc:ebxml-msg:actor:nextmsh", - "ignored", - "IGNORED" - ] + "system generated": false }, - "Reliability Configuration Reply Mode": { + "Approver URP": { "type": "string", - "enum": [ - "MSHSIGNALSONLY", - "NEVER", - "NONE", - "SIGNALSANDRESPONSE", - "mshsignalsonly", - "never", - "none", - "signalsandresponse" - ] + "system generated": false }, - - "Reliability Configuration Duplication Elimination": { + "DNS Approver": { "type": "string", - "enum": ["ALWAYS", "NEVER", "always", "never"] + "system generated": false }, - "Reliability Configuration Ack Requested": { + "Requestor URP": { "type": "string", - "enum": ["ALWAYS", "NEVER", "always", "never"] + "system generated": false }, - - "Approver URP": { - "type": "string" + "Address": { + "type": "string", + "format": "url", + "system generated": true }, - "Contract Property Template Key": { - "type": "string" + "MHS Party key": { + "type": "string", + "system generated": true }, "Date Approved": { - "type": "string" + "type": "string", + "system generated": true }, "Date DNS Approved": { - "type": "string" + "type": "string", + "system generated": true }, "Date Requested": { - "type": "string" - }, - "DNS Approver": { - "type": "string" - }, - "Interaction Type": { "type": "string", - "enum": [ - "FHIR", - "HL7", - "EBXML", - "N/A", - "MSHSIGNALSONLY", - "fhir", - "hl7", - "ebxml", - "n/a", - "mshsignalsonly" - ] - }, - "MHS FQDN": { - "type": "string" - }, - "MHS IP Address": { - "type": "string" + "system generated": true }, - "MHS Is Authenticated": { + "Managing Organization": { "type": "string", - "enum": [ - "NONE", - "TRANSIENT", - "PERSISTENT", - "none", - "transient", - "persistent" - ] - }, - "Product Key": { - "type": "string" - }, - "Product Name": { - "type": "string" - }, - "Product Version": { - "type": "string" - }, - "Requestor URP": { - "type": "string" - }, - "MHS Service Description": { - "type": "string" - }, - "MHS Manufacturer Organisation": { - "type": "string" + "system generated": true } }, "required": [ - "Address", + "MHS FQDN", "MHS Manufacturer Organisation", - "Unique Identifier", + "Address", "Managing Organization", "MHS Party key", - "MHS CPA ID", "Approver URP", - "Contract Property Template Key", "Date Approved", "Date DNS Approved", "Date Requested", "DNS Approver", - "Interaction Type", - "MHS FQDN", - "MHS Is Authenticated", - "Product Key", "Requestor URP" ], "additionalProperties": false diff --git a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/field_mapping.json b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/field_mapping.json index 1abd42720..97a33864d 100644 --- a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/field_mapping.json +++ b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/field_mapping.json @@ -1,8 +1,19 @@ { "nhs_mhs_in": "MHS IN", - "nhs_mhs_retry_interval": "Reliability Configuration Retry Interval", - "nhs_mhs_retries": "Reliability Configuration Retries", - "nhs_mhs_persist_duration": "Reliability Configuration Persist Duration", "nhs_mhs_sn": "MHS SN", - "nhs_mhs_svc_ia": "Interaction ID" + "nhs_mhs_sync_reply_mode": "Reliability Configuration Reply Mode", + "nhs_mhs_ack_requested": "Reliability Configuration Ack Requested", + "nhs_mhs_duplicate_elimination": "Reliability Configuration Duplication Elimination", + "nhs_mhs_actor": "Reliability Configuration Actor", + "nhs_mhs_persist_duration": "Reliability Configuration Persist Duration", + "nhs_mhs_retries": "Reliability Configuration Retries", + "nhs_mhs_retry_interval": "Reliability Configuration Retry Interval", + "nhs_ep_interaction_type": "Interaction Type", + "nhs_contract_property_template_key": "Contract Property Template Key", + "nhs_mhs_is_authenticated": "MHS Is Authenticated", + "nhs_mhs_svc_ia": "Interaction ID", + "nhs_mhs_cpa_id": "MHS CPA ID", + "unique_identifier": "Unique Identifier", + "nhs_mhs_ip_address": "MHS IP Address", + "nhs_product_key": "Product Key" } diff --git a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/v1.json b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/v1.json index dfa892caf..7f38cc033 100644 --- a/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/v1.json +++ b/src/layers/domain/repository/questionnaire_repository/v1/questionnaires/spine_mhs_message_sets/v1.json @@ -2,25 +2,119 @@ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { - "Interaction ID": { - "type": "string" + "MHS IN": { + "type": "string", + "system generated": false }, "MHS SN": { - "type": "string" + "type": "string", + "system generated": false }, - "MHS IN": { - "type": "string" + "Reliability Configuration Reply Mode": { + "type": "string", + "system generated": false, + "enum": [ + "MSHSIGNALSONLY", + "NEVER", + "NONE", + "SIGNALSANDRESPONSE", + "mshsignalsonly", + "never", + "none", + "signalsandresponse" + ] }, - "Reliability Configuration Retry Interval": { - "type": "string" + "Reliability Configuration Ack Requested": { + "type": "string", + "system generated": false, + "enum": ["ALWAYS", "NEVER", "always", "never"] }, - "Reliability Configuration Retries": { - "type": "integer" + "Reliability Configuration Duplication Elimination": { + "type": "string", + "system generated": false, + "enum": ["ALWAYS", "NEVER", "always", "never"] + }, + "Reliability Configuration Actor": { + "type": "string", + "system generated": false, + "enum": [ + "urn:oasis:names:tc:ebxml-msg:actor:topartymsh", + "urn:oasis:names:tc:ebxml-msg:actor:nextmsh", + "ignored", + "IGNORED" + ] }, "Reliability Configuration Persist Duration": { - "type": "string" + "type": "string", + "system generated": false + }, + "Reliability Configuration Retries": { + "type": "integer", + "system generated": false + }, + "Reliability Configuration Retry Interval": { + "type": "string", + "system generated": false + }, + "Interaction Type": { + "type": "string", + "system generated": false, + "enum": [ + "FHIR", + "HL7", + "EBXML", + "N/A", + "MSHSIGNALSONLY", + "fhir", + "hl7", + "ebxml", + "n/a", + "mshsignalsonly" + ] + }, + "Contract Property Template Key": { + "type": "string", + "system generated": false + }, + "MHS Is Authenticated": { + "type": "string", + "system generated": false, + "enum": [ + "NONE", + "TRANSIENT", + "PERSISTENT", + "none", + "transient", + "persistent" + ] + }, + "MHS IP Address": { + "type": "string", + "system generated": false + }, + "Product Key": { + "type": "string", + "system generated": false + }, + "Interaction ID": { + "type": "string", + "system generated": true + }, + "MHS CPA ID": { + "type": "string", + "system generated": true + }, + "Unique Identifier": { + "type": "string", + "system generated": true } }, - "required": ["MHS IN", "Interaction ID", "MHS SN"], + "required": [ + "MHS IN", + "MHS SN", + "Interaction ID", + "MHS CPA ID", + "Unique Identifier" + ], "additionalProperties": false } diff --git a/src/layers/domain/request_models/v1.py b/src/layers/domain/request_models/v1.py index a59138d85..6e89886bf 100644 --- a/src/layers/domain/request_models/v1.py +++ b/src/layers/domain/request_models/v1.py @@ -68,17 +68,13 @@ class CreateDeviceIncomingParams(BaseModel, extra=Extra.forbid): name: str = Field(...) -class SpineMhsQuestionnaireRsponse(BaseModel): - __root__: list[dict] = Field(min_items=1, max_items=1) - - class SpineAsQuestionnaireResponse(BaseModel): __root__: list[dict] = Field(min_items=1, max_items=1) class CreateMhsDeviceIncomingParams(BaseModel, extra=Extra.forbid): questionnaire_responses: dict[ - Literal[QuestionnaireInstance.SPINE_MHS], SpineMhsQuestionnaireRsponse + Literal[QuestionnaireInstance.SPINE_MHS], list[dict] ] = Field(...) diff --git a/src/layers/sds/domain/nhs_mhs.py b/src/layers/sds/domain/nhs_mhs.py index 75a777274..dc75e1562 100644 --- a/src/layers/sds/domain/nhs_mhs.py +++ b/src/layers/sds/domain/nhs_mhs.py @@ -52,14 +52,14 @@ class NhsMhs(SdsBaseModel): nhs_mhs_in: str = Field(alias="nhsmhsin") nhs_mhs_ip_address: Optional[str] = Field(alias="nhsmhsipaddress") nhs_mhs_is_authenticated: Authentication = Field(alias="nhsmhsisauthenticated") - nhs_mhs_manufacturer_org: Optional[str] = Field(alias="nhsmhsmanufacturerorg") + nhs_mhs_manufacturer_org: str = Field(alias="nhsmhsmanufacturerorg") nhs_mhs_party_key: str = Field(alias="nhsmhspartykey") nhs_mhs_sn: str = Field(alias="nhsmhssn") nhs_mhs_svc_ia: str = Field(alias="nhsmhssvcia") nhs_mhs_sync_reply_mode: Optional[SyncReplyModel] = Field( alias="nhsmhssyncreplymode" ) - nhs_product_key: str = Field(alias="nhsproductkey") + nhs_product_key: Optional[str] = Field(alias="nhsproductkey") nhs_product_name: Optional[str] = Field(alias="nhsproductname") nhs_product_version: Optional[str] = Field(alias="nhsproductversion") nhs_requestor_urp: str = Field(alias="nhsrequestorurp") diff --git a/src/layers/sds/epr/bulk_create/tests/conftest.py b/src/layers/sds/epr/bulk_create/tests/conftest.py index a7b689ff9..1da5c91df 100644 --- a/src/layers/sds/epr/bulk_create/tests/conftest.py +++ b/src/layers/sds/epr/bulk_create/tests/conftest.py @@ -15,9 +15,9 @@ def mhs_1() -> NhsMhs: nhsidcode="AAA", nhsproductname="My EPR Product", nhsmhspartykey="AAA-123456", - nhsmhssvcia="my-interaction-id", - nhsmhsendpoint="my-mhs-endpoint", - uniqueidentifier="1wd354", + nhsmhssvcia="sn-123:in-123", + nhsmhsendpoint="https://my-fqdn", + uniqueidentifier="AAA-123456:sn-123:in-123", nhsapproverurp="approver-123", nhscontractpropertytemplatekey="key-123", nhsdateapproved="today", @@ -25,12 +25,11 @@ def mhs_1() -> NhsMhs: nhsdaterequested="a week ago", nhsdnsapprover="dns-approver-123", nhsepinteractiontype="hl7", - nhsmhscpaid="1wd354", + nhsmhscpaid="AAA-123456:sn-123:in-123", nhsmhsfqdn="my-fqdn", nhsmhsin="in-123", nhsmhsisauthenticated="none", nhsmhssn="sn-123", - nhsproductkey="key-123", nhsrequestorurp="requester-123", nhsmhsmanufacturerorg="AAA", ) @@ -46,9 +45,9 @@ def mhs_2() -> NhsMhs: nhsidcode="BBB", nhsproductname="My Other EPR Product", nhsmhspartykey="BBB-123456", - nhsmhssvcia="my-other-interaction-id", - nhsmhsendpoint="my-other-mhs-endpoint", - uniqueidentifier="h0394j", + nhsmhssvcia="sn-456:in-456", + nhsmhsendpoint="https://my-fqdn2", + uniqueidentifier="BBB-123456:sn-456:in-456", nhsapproverurp="approver-456", nhscontractpropertytemplatekey="key-456", nhsdateapproved="today", @@ -56,12 +55,11 @@ def mhs_2() -> NhsMhs: nhsdaterequested="a week ago", nhsdnsapprover="dns-approver-456", nhsepinteractiontype="hl7", - nhsmhscpaid="h0394j", - nhsmhsfqdn="my-fqdn", + nhsmhscpaid="BBB-123456:sn-456:in-456", + nhsmhsfqdn="my-fqdn2", nhsmhsin="in-456", nhsmhsisauthenticated="none", nhsmhssn="sn-456", - nhsproductkey="key-456", nhsrequestorurp="requester-456", nhsmhsmanufacturerorg="AAA", ) diff --git a/src/layers/sds/epr/bulk_create/tests/test_bulk_create.py b/src/layers/sds/epr/bulk_create/tests/test_bulk_create.py index 96e9f9d04..bde97e64f 100644 --- a/src/layers/sds/epr/bulk_create/tests/test_bulk_create.py +++ b/src/layers/sds/epr/bulk_create/tests/test_bulk_create.py @@ -35,21 +35,15 @@ def mhs_data(): "questionnaire_name": "spine_mhs", "questionnaire_version": "1", "data": { - "Unique Identifier": "1wd354", "Approver URP": "approver-123", - "Contract Property Template Key": "key-123", "Date Approved": "today", "Date DNS Approved": "yesterday", "Date Requested": "a week ago", "DNS Approver": "dns-approver-123", - "Interaction Type": "hl7", "Managing Organization": "AAA", - "MHS CPA ID": "1wd354", - "Address": "my-mhs-endpoint", + "Address": "https://my-fqdn", "MHS FQDN": "my-fqdn", - "MHS Is Authenticated": "none", "MHS Party key": "AAA-123456", - "Product Key": "key-123", "Product Name": "My EPR Product", "Requestor URP": "requester-123", "MHS Manufacturer Organisation": "AAA", @@ -64,18 +58,28 @@ def message_set_data(): "questionnaire_name": "spine_mhs_message_sets", "questionnaire_version": "1", "data": { + "Unique Identifier": "AAA-123456:sn-123:in-123", + "Contract Property Template Key": "key-123", + "Interaction Type": "hl7", + "MHS CPA ID": "AAA-123456:sn-123:in-123", "MHS IN": "in-123", + "MHS Is Authenticated": "none", "MHS SN": "sn-123", - "Interaction ID": "my-interaction-id", + "Interaction ID": "sn-123:in-123", }, }, { "questionnaire_name": "spine_mhs_message_sets", "questionnaire_version": "1", "data": { + "Unique Identifier": "BBB-123456:sn-456:in-456", + "Contract Property Template Key": "key-456", + "Interaction Type": "hl7", + "MHS CPA ID": "BBB-123456:sn-456:in-456", "MHS IN": "in-456", + "MHS Is Authenticated": "none", "MHS SN": "sn-456", - "Interaction ID": "my-other-interaction-id", + "Interaction ID": "sn-456:in-456", }, }, ] @@ -83,7 +87,7 @@ def message_set_data(): @pytest.fixture def mhs_cpa_ids(): - return ["1wd354", "h0394j"] + return ["AAA-123456:sn-123:in-123", "BBB-123456:sn-456:in-456"] @pytest.fixture diff --git a/src/layers/sds/epr/bulk_create/tests/test_creators.py b/src/layers/sds/epr/bulk_create/tests/test_creators.py index 02f16c2fe..f30f966bd 100644 --- a/src/layers/sds/epr/bulk_create/tests/test_creators.py +++ b/src/layers/sds/epr/bulk_create/tests/test_creators.py @@ -49,14 +49,18 @@ def message_sets(product, party_key): questionnaire.validate(data=_raw_message_set_data) for _raw_message_set_data in ( { - "Interaction ID": "my-interaction-id", - "MHS IN": "in-123", "MHS SN": "sn-123", + "MHS IN": "in-123", + "Interaction ID": "sn-123:in-123", + "MHS CPA ID": "AAA-123456:sn-123:in-123", + "Unique Identifier": "AAA-123456:sn-123:in-123", }, { - "Interaction ID": "my-other-interaction-id", - "MHS IN": "in-456", "MHS SN": "sn-456", + "MHS IN": "in-456", + "Interaction ID": "sn-456:in-456", + "MHS CPA ID": "AAA-123456:sn-456:in-456", + "Unique Identifier": "AAA-123456:sn-456:in-456", }, ) ] @@ -92,21 +96,15 @@ def mhs_device(product, party_key, message_sets: DeviceReferenceData, mhs_tags): data={ "Address": "my-mhs-endpoint", "Approver URP": "approver-123", - "Contract Property Template Key": "key-123", "DNS Approver": "dns-approver-123", "Date Approved": "today", "Date DNS Approved": "yesterday", "Date Requested": "a week ago", - "Interaction Type": "hl7", - "MHS CPA ID": "1wd354", "MHS FQDN": "my-fqdn", - "MHS Is Authenticated": "none", "MHS Party key": "AAA-123456", "Managing Organization": "AAA", - "Product Key": "key-123", "Product Name": "My EPR Product", "Requestor URP": "requester-123", - "Unique Identifier": "1wd354", "MHS Manufacturer Organisation": "AAA", } ) @@ -255,18 +253,22 @@ def test_create_message_sets( "spine_mhs_message_sets/1": [ { "data": { - "Interaction ID": "my-interaction-id", - "MHS IN": "in-123", "MHS SN": "sn-123", + "MHS IN": "in-123", + "Interaction ID": "sn-123:in-123", + "MHS CPA ID": "AAA-123456:sn-123:in-123", + "Unique Identifier": "AAA-123456:sn-123:in-123", }, "questionnaire_name": "spine_mhs_message_sets", "questionnaire_version": "1", }, { "data": { - "Interaction ID": "my-other-interaction-id", - "MHS IN": "in-456", "MHS SN": "sn-456", + "MHS IN": "in-456", + "Interaction ID": "sn-456:in-456", + "MHS CPA ID": "AAA-123456:sn-456:in-456", + "Unique Identifier": "AAA-123456:sn-456:in-456", }, "questionnaire_name": "spine_mhs_message_sets", "questionnaire_version": "1", @@ -323,21 +325,15 @@ def test_create_mhs_device( "data": { "Address": "my-mhs-endpoint", "Approver URP": "approver-123", - "Contract Property Template Key": "key-123", "DNS Approver": "dns-approver-123", "Date Approved": "today", "Date DNS Approved": "yesterday", "Date Requested": "a week ago", - "Interaction Type": "hl7", - "MHS CPA ID": "1wd354", "MHS FQDN": "my-fqdn", - "MHS Is Authenticated": "none", "MHS Party key": "AAA-123456", "Managing Organization": "AAA", - "Product Key": "key-123", "Product Name": "My EPR Product", "Requestor URP": "requester-123", - "Unique Identifier": "1wd354", "MHS Manufacturer Organisation": "AAA", }, "questionnaire_name": "spine_mhs", diff --git a/src/layers/sds/epr/bulk_create/tests/test_getters.py b/src/layers/sds/epr/bulk_create/tests/test_getters.py index 26cd22632..1546209a6 100644 --- a/src/layers/sds/epr/bulk_create/tests/test_getters.py +++ b/src/layers/sds/epr/bulk_create/tests/test_getters.py @@ -61,23 +61,17 @@ def test_get_mhs_device_data(mhs_1: NhsMhs): assert mhs_data.questionnaire_name == QuestionnaireInstance.SPINE_MHS assert mhs_data.questionnaire_version == "1" assert mhs_data.data == { - "Address": "my-mhs-endpoint", + "Address": "https://my-fqdn", "Approver URP": "approver-123", - "Contract Property Template Key": "key-123", "DNS Approver": "dns-approver-123", "Date Approved": "today", "Date DNS Approved": "yesterday", "Date Requested": "a week ago", - "Interaction Type": "hl7", - "MHS CPA ID": "1wd354", "MHS FQDN": "my-fqdn", - "MHS Is Authenticated": "none", "MHS Party key": "AAA-123456", "Managing Organization": "AAA", - "Product Key": "key-123", "Product Name": "My EPR Product", "Requestor URP": "requester-123", - "Unique Identifier": "1wd354", "MHS Manufacturer Organisation": "AAA", } assert mhs_data.created_on.date() == now().date() @@ -126,6 +120,7 @@ def test_get_message_set_data(mhs_1: NhsMhs, mhs_2: NhsMhs): message_set_field_mapping=message_set_field_mapping, ) data = [] + # where get this data from? for message_set in message_sets: data.append(message_set.data) assert ( @@ -137,14 +132,24 @@ def test_get_message_set_data(mhs_1: NhsMhs, mhs_2: NhsMhs): assert data == [ { - "Interaction ID": "my-interaction-id", + "Unique Identifier": "AAA-123456:sn-123:in-123", + "Contract Property Template Key": "key-123", + "Interaction Type": "hl7", + "MHS CPA ID": "AAA-123456:sn-123:in-123", "MHS IN": "in-123", + "MHS Is Authenticated": "none", "MHS SN": "sn-123", + "Interaction ID": "sn-123:in-123", }, { - "Interaction ID": "my-other-interaction-id", + "Unique Identifier": "BBB-123456:sn-456:in-456", + "Contract Property Template Key": "key-456", + "Interaction Type": "hl7", + "MHS CPA ID": "BBB-123456:sn-456:in-456", "MHS IN": "in-456", + "MHS Is Authenticated": "none", "MHS SN": "sn-456", + "Interaction ID": "sn-456:in-456", }, ] diff --git a/src/layers/sds/epr/constants.py b/src/layers/sds/epr/constants.py index 5bff37536..c911fac2a 100644 --- a/src/layers/sds/epr/constants.py +++ b/src/layers/sds/epr/constants.py @@ -2,8 +2,19 @@ class SdsFieldName(StrEnum): - INTERACTION_ID = "Interaction ID" ASID = "ASID" + CPA_ID = "MHS CPA ID" + MHS_FQDN = "MHS FQDN" + ADDRESS = "Address" + PARTY_KEY = "MHS Party key" + MANAGING_ORGANIZATION = "Managing Organization" + DATE_REQUESTED = "Date Requested" + DATE_APPROVED = "Date Approved" + DATE_DNS_APPROVED = "Date DNS Approved" + MHS_SN = "MHS SN" + MHS_IN = "MHS IN" + INTERACTION_ID = "Interaction ID" + UNIQUE_IDENTIFIER = "Unique Identifier" class SdsDeviceReferenceDataPath(StrEnum):