Пример #1
0
def parse_patient(node):
    sda_patient = SDAPatient()
    sda_patient.data = dict()

    name_node = node.find('./Name')

    if name_node is not None:
        sda_patient.data['name'] = parse_name(name_node)

    set_code_description(sda_patient.data, 'gender', node.find('./Gender'))
    set_code_description(sda_patient.data, 'ethnic_group', node.find('./EthnicGroup'))

    set_datetime(sda_patient.data, 'birth_time', node.find('./BirthTime'))
    set_datetime(sda_patient.data, 'death_time', node.find('./DeathTime'))

    for patient_name_node in node.findall('./Aliases/Name'):
        sda_patient_alias = parse_patient_alias(patient_name_node)
        sda_patient.aliases.append(sda_patient_alias)

    for patient_number_node in node.findall('./PatientNumbers/PatientNumber'):
        sda_patient_number = parse_patient_number(patient_number_node)
        sda_patient.numbers.append(sda_patient_number)

    for patient_address_node in node.findall('./Addresses/Address'):
        sda_patient_address = parse_patient_address(patient_address_node)
        sda_patient.addresses.append(sda_patient_address)

    return sda_patient
Пример #2
0
def demographics_to_sda_bundle(demographics):
    # TODO
    facility = Facility.query.filter(Facility.code == 'RADAR').first_or_404()

    sda_bundle = SDABundle(facility=facility, patient=demographics.patient)

    sda_patient = SDAPatient()

    if demographics.gender == 1:
        gender_code = 'M'
        gender_description = 'Male'
    else:
        gender_code = 'F'
        gender_description = 'Male'

    sda_patient.data = {
        'name': {
            'given_name': demographics.first_name,
            'family_name': demographics.last_name,
        },
        'birth_time': demographics.date_of_birth,
        'gender': {
            'code': gender_code,
            'description': gender_description,
        }
    }

    if demographics.date_of_death:
        sda_patient.data['death_time'] = demographics.date_of_death

    sda_bundle.sda_patient = sda_patient

    sda_patient_address = SDAPatientAddress()

    sda_patient_address.data = {
        'zip': {
            'description': demographics.postcode
        }
    }

    street = '; '.join(x for x in [demographics.address_line_1, demographics.address_line_2, demographics.address_line_3] if x)

    if street:
        sda_patient_address.data['street'] = street

    sda_patient.addresses.append(sda_patient_address)

    if demographics.home_number:
        set_path(sda_patient.data, ['contact_info', 'home_phone_number'], demographics.home_number)

    if demographics.work_number:
        set_path(sda_patient.data, ['contact_info', 'work_phone_number'], demographics.work_number)

    if demographics.mobile_number:
        set_path(sda_patient.data, ['contact_info', 'mobile_phone_number'], demographics.mobile_number)

    if demographics.email_address:
        set_path(sda_patient.data, ['contact_info', 'email_address'], demographics.email_address)

    if demographics.alias_first_name or demographics.alias_last_name:
        sda_patient_alias = SDAPatientAlias()
        sda_patient_alias.data = {}

        if demographics.alias_first_name:
            sda_patient_alias.data['given_name'] = demographics.first_name

        if demographics.alias_last_name:
            sda_patient_alias.data['family_name'] = demographics.last_name

        sda_patient.aliases.append(sda_patient_alias)

    return sda_bundle