diff --git a/converter/converter/cisu/resources_info/resources_info_cisu_constants.py b/converter/converter/cisu/resources_info/resources_info_cisu_constants.py index 0f046fdd9..9d8f7b97a 100644 --- a/converter/converter/cisu/resources_info/resources_info_cisu_constants.py +++ b/converter/converter/cisu/resources_info/resources_info_cisu_constants.py @@ -4,6 +4,7 @@ class ResourcesInfoCISUConstants: VEHICLE_TYPE_PATH = "$.vehicleType" CASE_ID_FIELD = "caseId" + RESOURCE_ID_KEY = "resourceId" PATIENT_ID_KEY = "patientId" POSITION_KEY = "position" diff --git a/converter/converter/cisu/resources_status/resources_status_constants.py b/converter/converter/cisu/resources_status/resources_status_constants.py index 8f2b157c2..a3499341c 100644 --- a/converter/converter/cisu/resources_status/resources_status_constants.py +++ b/converter/converter/cisu/resources_status/resources_status_constants.py @@ -1,3 +1,4 @@ class ResourcesStatusConstants: RESOURCE_STATUS_PATH = "$.resourceStatus" CASE_ID = "$.caseId" + RESOURCE_ID = "$.resourceId" diff --git a/converter/converter/cisu/resources_status/resources_status_converter.py b/converter/converter/cisu/resources_status/resources_status_converter.py index 27aade0c1..9bad91d53 100644 --- a/converter/converter/cisu/resources_status/resources_status_converter.py +++ b/converter/converter/cisu/resources_status/resources_status_converter.py @@ -8,6 +8,9 @@ from converter.cisu.resources_info.resources_info_cisu_converter import ( ResourcesInfoCISUConverter, ) +from converter.cisu.resources_info.resources_info_cisu_constants import ( + ResourcesInfoCISUConstants, +) from converter.cisu.resources_status.resources_status_constants import ( ResourcesStatusConstants, ) @@ -37,6 +40,7 @@ def from_rs_to_cisu( raise ValueError(f"No RS-RI found for caseId: {case_id!r}") rs_ri = rs_ri_msg.payload + cls.check_resource_belongs_to_case(rs_ri, current_use_case) rs_sr_use_cases = [ cls.copy_rs_input_use_case_content(pm.payload) for pm in persisted_rs_sr @@ -50,3 +54,26 @@ def from_rs_to_cisu( enriched = enrich_rs_ri_with_rs_srs(rs_ri_use_case, rs_sr_use_cases) return ResourcesInfoCISUConverter.convert_single_rs_ri(output_json, enriched) + + @classmethod + def check_resource_belongs_to_case( + cls, rs_ri: Dict[str, Any], rs_sr_use_case: Dict[str, Any] + ) -> None: + case_id = get_field_value(rs_sr_use_case, ResourcesStatusConstants.CASE_ID) + resource_id = get_field_value( + rs_sr_use_case, ResourcesStatusConstants.RESOURCE_ID + ) + + rs_ri_content = ResourcesInfoCISUConverter.copy_rs_input_use_case_content(rs_ri) + resources = ( + get_field_value(rs_ri_content, ResourcesInfoCISUConstants.RESOURCE_PATH) + or [] + ) + resource_ids_in_rs_ri = { + r.get(ResourcesInfoCISUConstants.RESOURCE_ID_KEY) for r in resources + } + + if resource_id not in resource_ids_in_rs_ri: + raise ValueError( + f"Resource '{resource_id}' from RS-SR not found in RS-RI for caseId '{case_id}'" + ) diff --git a/converter/tests/cisu/test_resources_status_converter.py b/converter/tests/cisu/test_resources_status_converter.py index 38978c9ab..e6b61c543 100644 --- a/converter/tests/cisu/test_resources_status_converter.py +++ b/converter/tests/cisu/test_resources_status_converter.py @@ -75,3 +75,21 @@ def test_from_rs_to_cisu_no_rs_ri(): ): with pytest.raises(ValueError, match="No RS-RI found for caseId"): ResourcesStatusConverter.from_rs_to_cisu(rs_sr_new) + + +def test_from_rs_to_cisu_resource_not_in_rs_ri(): + unknown_resource_id = "fr.fire.sis076.cgo-076.resource.UNKNOWN_VLM" + rs_sr = make_rs_sr_from_sample(_CASE_ID, unknown_resource_id, "ARRIVEE") + rs_ri = make_rs_ri_from_sample(_CASE_ID) + + with ( + patch( + _PATCH_GET_RS_MESSAGES, + return_value=persisted_rs_ri_and_rs_sr(rs_ri, []), + ), + pytest.raises( + ValueError, + match=f"Resource '{unknown_resource_id}' from RS-SR not found in RS-RI for caseId '{_CASE_ID}'", + ), + ): + ResourcesStatusConverter.from_rs_to_cisu(rs_sr)