コード例 #1
0
    def test_get_get_subrecord_from_model_name(self):
        self.assertEqual(tmodels.HatWearer,
                         subrecords.get_subrecord_from_model_name("HatWearer"))

        self.assertEqual(
            tmodels.FamousLastWords,
            subrecords.get_subrecord_from_model_name("FamousLastWords"))
コード例 #2
0
    def test_get_get_subrecord_from_model_name(self):
        self.assertEqual(
            tmodels.HatWearer,
            subrecords.get_subrecord_from_model_name("HatWearer")
        )

        self.assertEqual(
            tmodels.FamousLastWords,
            subrecords.get_subrecord_from_model_name("FamousLastWords")
        )
コード例 #3
0
ファイル: models.py プロジェクト: openhealthcare/uclp-tb
    def get_or_create_patient(self, data, user):
        Demographics = subrecords.get_subrecord_from_model_name('Demographics')
        demographics_fields = Demographics._get_fieldnames_to_serialize()
        demographics_data = {
            i: v for i, v in data.iteritems() if v and i in demographics_fields
        }

        filter_fields = [
            "first_name",
            "surname",
            "hospital_number",
            "nhs_number"
        ]

        filter_args = {
            i: v for i, v in demographics_data.iteritems() if v and i in filter_fields
        }

        demographics = Demographics.objects.filter(
            **filter_args
        ).first()

        if demographics:
            created = False
            patient = demographics.patient
        else:
            created = True
            patient = models.Patient.objects.create()
            demographics = patient.demographics_set.first()
            demographics.update_from_dict(demographics_data, user)

        return patient, created
コード例 #4
0
    def get_or_create_patient(self, data, user):
        Demographics = subrecords.get_subrecord_from_model_name('Demographics')
        demographics_fields = Demographics._get_fieldnames_to_serialize()
        demographics_data = {
            i: v
            for i, v in data.iteritems() if v and i in demographics_fields
        }

        filter_fields = [
            "first_name", "surname", "hospital_number", "nhs_number"
        ]

        filter_args = {
            i: v
            for i, v in demographics_data.iteritems()
            if v and i in filter_fields
        }

        demographics = Demographics.objects.filter(**filter_args).first()

        if demographics:
            created = False
            patient = demographics.patient
        else:
            created = True
            patient = models.Patient.objects.create()
            demographics = patient.demographics_set.first()
            demographics.update_from_dict(demographics_data, user)

        return patient, created
コード例 #5
0
ファイル: test_models.py プロジェクト: ahillebra/Aceso
 def test_demographics_does_not_exist(self):
     # This is one of those things that should not exist, but let's make
     # doubly sure that we raise an exception if it does happen !
     patient = models.Patient.objects.create()
     patient.demographics_set.get().delete()
     Demographics = subrecords.get_subrecord_from_model_name('Demographics')
     with self.assertRaises(Demographics.DoesNotExist):
         demographics = patient.demographics()
コード例 #6
0
ファイル: test_models.py プロジェクト: openhealthcare/opal
 def test_demographics_does_not_exist(self):
     # This is one of those things that should not exist, but let's make
     # doubly sure that we raise an exception if it does happen !
     patient = models.Patient.objects.create()
     patient.demographics_set.get().delete()
     Demographics = subrecords.get_subrecord_from_model_name('Demographics')
     with self.assertRaises(Demographics.DoesNotExist):
         demographics = patient.demographics()
コード例 #7
0
def _model_and_field_from_path(fieldname):
    model_name, field_name = fieldname.split(".")
    model = get_subrecord_from_model_name(model_name)
    field = None

    if hasattr(model, field_name):
        # this is true for lookuplists
        lookuplist_field = getattr(model, field_name)
        if isinstance(lookuplist_field, fields.ForeignKeyOrFreeText):
            field = lookuplist_field
    if not field:
        field = model._meta.get_field(field_name)
    return model, field
コード例 #8
0
ファイル: forms.py プロジェクト: mattstibbs/opal
def _model_and_field_from_path(fieldname):
    model_name, field_name = fieldname.split(".")
    model = get_subrecord_from_model_name(model_name)
    field = None

    if hasattr(model, field_name):
        # this is true for lookuplists
        lookuplist_field = getattr(model, field_name)
        if lookuplist_field.__class__ == fields.ForeignKeyOrFreeText:
            field = lookuplist_field

    if not field:
        field = model._meta.get_field(field_name)
    return model, field
コード例 #9
0
ファイル: models.py プロジェクト: openhealthcare/uclp-tb
    def update_contact_details(self, patient, data, user):
        """
        current behaviour is if there are no contact details
        we'll let you populate them, otherwise they'll stay the same
        """
        ContactDetails = subrecords.get_subrecord_from_model_name('ContactDetails')
        contact_details_fields = ContactDetails._get_fieldnames_to_serialize()
        contact_details = patient.contactdetails_set.first()

        if not contact_details.updated:
            contact_detail_data = {
                i: v for i, v in data.iteritems() if i in contact_details_fields
            }

            contact_details.update_from_dict(contact_detail_data, user)
コード例 #10
0
    def update_contact_details(self, patient, data, user):
        """
        current behaviour is if there are no contact details
        we'll let you populate them, otherwise they'll stay the same
        """
        ContactDetails = subrecords.get_subrecord_from_model_name(
            'ContactDetails')
        contact_details_fields = ContactDetails._get_fieldnames_to_serialize()
        contact_details = patient.contactdetails_set.first()

        if not contact_details.updated:
            contact_detail_data = {
                i: v
                for i, v in data.iteritems() if i in contact_details_fields
            }

            contact_details.update_from_dict(contact_detail_data, user)
コード例 #11
0
ファイル: api.py プロジェクト: openhealthcare/rbhl
    def list(self, request, *args, **kwargs):
        Demographics = subrecords.get_subrecord_from_model_name("Demographics")
        hospital_number = request.query_params.get("hospital_number")
        if not hospital_number:
            return HttpResponseBadRequest("Please pass in a hospital number")
        demographics = Demographics.objects.filter(
            hospital_number=hospital_number).last()

        # the patient is in elcid
        if demographics:
            return json_response(
                dict(patient=demographics.patient.to_dict(request.user),
                     status=self.PATIENT_FOUND_IN_APPLICATION))
        else:
            if getattr(settings, "UPSTREAM_DEMOGRAPHICS_SERVICE", None):
                upstream_demographics = import_string(
                    settings.UPSTREAM_DEMOGRAPHICS_SERVICE)
                demographics = upstream_demographics(hospital_number)

                if demographics:
                    return json_response(
                        dict(patient=dict(demographics=[demographics]),
                             status=self.PATIENT_FOUND_UPSTREAM))
        return json_response(dict(status=self.PATIENT_NOT_FOUND))
コード例 #12
0
 def test_subrecord_does_not_exist(self):
     with self.assertRaises(ValueError):
         subrecords.get_subrecord_from_model_name('NotAModel')
コード例 #13
0
 def test_subrecord_does_not_exist(self):
     with self.assertRaises(ValueError):
         subrecords.get_subrecord_from_model_name('NotAModel')
コード例 #14
0
"""
Patient matching
"""
import collections

from opal import models
from opal.core import subrecords

from . import exceptions


Demographics = subrecords.get_subrecord_from_model_name('Demographics')
Mapping      = collections.namedtuple(
    'Mapping',
    ('data_fieldname', 'demographics_fieldname')
)


class FieldConverter(object):

    def __init__(self, convert, target_fieldname):
        self.convert          = convert
        self.target_fieldname = target_fieldname

    def get_value(self, raw_data):
        return self.convert(raw_data)


class Matcher(object):
    direct_match_field     = None
    attribute_match_fields = []