def test_build_pkb_sync_disabled_extract(ukrdc3_session, extract): PID_1 = "PYTEST01:PV:00000000A" _create_membership(PID_1, ukrdc3_session) record = ukrdc3_session.query(PatientRecord).get(PID_1) record.sendingextract = extract ukrdc3_session.commit() with pytest.raises(PKBOutboundDisabledError): build_pkb_sync_messages(record, ukrdc3_session)
def test_build_pkb_sync_message_missing_facility(ukrdc3_session): PID_1 = "PYTEST01:PV:00000000A" _create_membership(PID_1, ukrdc3_session) record = ukrdc3_session.query(PatientRecord).get(PID_1) record.sendingfacility = "MISSING" ukrdc3_session.commit() with pytest.raises(MissingFacilityError): build_pkb_sync_messages(record, ukrdc3_session)
def test_build_pkb_sync_disabled_facility(ukrdc3_session): PID_1 = "PYTEST01:PV:00000000A" _create_membership(PID_1, ukrdc3_session) record = ukrdc3_session.query(PatientRecord).get(PID_1) facility = ukrdc3_session.query(Facility).get(record.sendingfacility) facility.pkb_out = False ukrdc3_session.commit() with pytest.raises(PKBOutboundDisabledError): build_pkb_sync_messages(record, ukrdc3_session)
async def export_all_to_pkb( pid: str, user: UKRDCUser, ukrdc3: Session, mirth: MirthAPI, redis: Redis, ) -> list[MirthMessageResponseSchema]: """ Export a specific patient's data to PKB. Notes: - Unlike other export functions, this sends multiple messages to Mirth in order to sync the patient record with PKB. - Because of this, it may take a while to complete. - Upstream functions calling export_all_to_pkb should probably run this function in the background (thread or asyncio etc.) """ record: PatientRecord = get_patientrecord(ukrdc3, pid, user) messages = build_pkb_sync_messages(record, ukrdc3) responses: list[MirthMessageResponseSchema] = [] for message in messages: responses.append(await safe_send_mirth_message_to_name( "PKB Outbound", message, mirth, redis)) return responses
def test_build_pkb_sync_message(ukrdc3_session): PID_1 = "PYTEST01:PV:00000000A" _create_membership(PID_1, ukrdc3_session) record = ukrdc3_session.query(PatientRecord).get(PID_1) messages = build_pkb_sync_messages(record, ukrdc3_session) assert messages == [ "<result><msg_type>ADT_A28</msg_type><pid>PYTEST01:PV:00000000A</pid></result>", "<result><msg_type>MDM_T02_CP</msg_type><pid>PYTEST01:PV:00000000A</pid></result>", "<result><msg_type>MDM_T02_DOC</msg_type><pid>PYTEST01:PV:00000000A</pid><id>DOCUMENT_PDF</id></result>", "<result><msg_type>MDM_T02_DOC</msg_type><pid>PYTEST01:PV:00000000A</pid><id>DOCUMENT_TXT</id></result>", "<result><msg_type>ORU_R01_LAB</msg_type><pid>PYTEST01:PV:00000000A</pid><id>LABORDER1</id></result>", "<result><msg_type>ORU_R01_LAB</msg_type><pid>PYTEST01:PV:00000000A</pid><id>LABORDER2</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION1</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION_DIA_1</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION_SYS_1</id></result>", ]
def test_build_pkb_sync_message_facility_exclusions(ukrdc3_session): PID_1 = "PYTEST01:PV:00000000A" _create_membership(PID_1, ukrdc3_session) record = ukrdc3_session.query(PatientRecord).get(PID_1) facility = ukrdc3_session.query(Facility).get(record.sendingfacility) facility.pkb_msg_exclusions = ["MDM_T02_DOC"] ukrdc3_session.commit() messages = build_pkb_sync_messages(record, ukrdc3_session) assert messages == [ "<result><msg_type>ADT_A28</msg_type><pid>PYTEST01:PV:00000000A</pid></result>", "<result><msg_type>MDM_T02_CP</msg_type><pid>PYTEST01:PV:00000000A</pid></result>", "<result><msg_type>ORU_R01_LAB</msg_type><pid>PYTEST01:PV:00000000A</pid><id>LABORDER1</id></result>", "<result><msg_type>ORU_R01_LAB</msg_type><pid>PYTEST01:PV:00000000A</pid><id>LABORDER2</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION1</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION_DIA_1</id></result>", "<result><msg_type>ORU_R01_OBS</msg_type><pid>PYTEST01:PV:00000000A</pid><id>OBSERVATION_SYS_1</id></result>", ]
def test_build_pkb_sync_message_no_membership(ukrdc3_session): PID_1 = "PYTEST01:PV:00000000A" record = ukrdc3_session.query(PatientRecord).get(PID_1) with pytest.raises(NoActiveMembershipError): build_pkb_sync_messages(record, ukrdc3_session)