示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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
示例#5
0
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>",
    ]
示例#6
0
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>",
    ]
示例#7
0
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)