Пример #1
0
        private PatientSearchResultDto GetPatientSearchResultDto(MailAttachment mailAttachment)
        {
            var patientSearchResultDto = new PatientSearchResultDto();

            var queryCriteria = new PatientQueryCriteria();

            var contentBytes = mailAttachment.ContentBytes;
            var fileName     = mailAttachment.FileName;

            if (fileName.ToLower().EndsWith(".zip"))
            {
                queryCriteria = GetQueryCriteriaFromXDM(contentBytes);
            }
            else if (fileName.ToLower().EndsWith(".xml"))
            {
                queryCriteria = GetQueryCriteriaFromC32(contentBytes);
            }
            else
            {
                throw new ApplicationException("Unsupported file type :" + fileName);
            }

            if (queryCriteria.IsNullCriteria())
            {
                return(patientSearchResultDto);
            }

            var result = _patientRepository.FindPatientsByAdvancedSearch(
                queryCriteria.FirstName,
                queryCriteria.MiddleName,
                queryCriteria.LastName,
                queryCriteria.GenderWellKnownName,
                queryCriteria.BirthDate,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                0,
                100);

            var patientSearchResultDtos = Mapper.Map <IList <Patient>, IList <PatientSearchResultDto> > (result.Item3);
            var firstOrDefault          = patientSearchResultDtos.FirstOrDefault();

            if (firstOrDefault != null)
            {
                patientSearchResultDto = firstOrDefault;
            }
            else
            {
                patientSearchResultDto = CreatePatientSearchResultDtoFromQueryCriteria(queryCriteria);
            }

            return(patientSearchResultDto);
        }
Пример #2
0
        private PatientQueryCriteria GetQueryCriteriaFromC32(byte[] contentBytes)
        {
            var patientQueryCriteria = new PatientQueryCriteria();

            var contentString = Encoding.UTF8.GetString(contentBytes);

            patientQueryCriteria = GetQueryCriteriaFromC32(contentString);

            return(patientQueryCriteria);
        }
Пример #3
0
        private PatientQueryCriteria GetQueryCriteriaFromXDM(byte[] contentBytes)
        {
            var patientQueryCriteria = new PatientQueryCriteria();

            var packager = XDMZipPackager.Default;
            var xdmFile  = ZipFile.Read(contentBytes, null, Encoding.UTF8);

            var documentPackage = packager.Unpackage(xdmFile);

            if (documentPackage == null || documentPackage.Documents == null || documentPackage.Documents.FirstOrDefault() == null)
            {
                return(patientQueryCriteria);
            }

            patientQueryCriteria = GetQueryCriteriaFromC32(documentPackage.Documents.FirstOrDefault().DocumentString);

            return(patientQueryCriteria);
        }
Пример #4
0
        private PatientSearchResultDto CreatePatientSearchResultDtoFromQueryCriteria(PatientQueryCriteria queryCriteria)
        {
            var patientSearchResultDto = new PatientSearchResultDto
            {
                Addresses    = new SoftDeleteObservableCollection <PatientAddressDto> (),
                PhoneNumbers = new SoftDeleteObservableCollection <PatientPhoneDto> (),
                FirstName    = queryCriteria.FirstName,
                LastName     = queryCriteria.LastName,
                MiddleName   = queryCriteria.MiddleName,
                BirthDate    = queryCriteria.BirthDate
            };

            if (!string.IsNullOrEmpty(queryCriteria.GenderWellKnownName))
            {
                var patientGender = _lookupValueRepository.GetLookupByWellKnownName <PatientGender> (queryCriteria.GenderWellKnownName);
                if (patientGender != null)
                {
                    patientSearchResultDto.PatientGender = Mapper.Map <LookupBase, LookupValueDto> (patientGender);
                }
            }

            if (!string.IsNullOrEmpty(queryCriteria.Phone))
            {
                var patientPhoneType =
                    _lookupValueRepository.GetLookupByWellKnownName <PatientPhoneType> (WellKnownNames.PatientModule.PatientPhoneType.Other);
                var patietnPhoneTypeDto = Mapper.Map <LookupBase, LookupValueDto> (patientPhoneType);
                var patientPhoneDto     = new PatientPhoneDto
                {
                    PatientPhoneType = patietnPhoneTypeDto,
                    PhoneNumber      = queryCriteria.Phone
                };
                patientSearchResultDto.PhoneNumbers.Add(patientPhoneDto);
            }

            if (!string.IsNullOrEmpty(queryCriteria.AddressLineOne) || !string.IsNullOrEmpty(queryCriteria.City) ||
                !string.IsNullOrEmpty(queryCriteria.StateWellKnownName) || !string.IsNullOrEmpty(queryCriteria.ZipCode))
            {
                var patientAddressType =
                    _lookupValueRepository.GetLookupByWellKnownName <PatientAddressType> (WellKnownNames.PatientModule.PatientAddressType.Other);
                var patientAddressTypeDto = Mapper.Map <LookupBase, LookupValueDto> (patientAddressType);
                var patientAddressDto     = new PatientAddressDto
                {
                    FirstStreetAddress = queryCriteria.AddressLineOne,
                    PostalCode         = queryCriteria.ZipCode,
                    CityName           = queryCriteria.City,
                    PatientAddressType = patientAddressTypeDto
                };

                if (!string.IsNullOrEmpty(queryCriteria.StateWellKnownName))
                {
                    var state = _lookupValueRepository.GetLookupByWellKnownName <StateProvince> (queryCriteria.StateWellKnownName);
                    if (state != null)
                    {
                        patientAddressDto.StateProvince = Mapper.Map <LookupBase, LookupValueDto> (state);
                    }
                }

                patientSearchResultDto.Addresses.Add(patientAddressDto);
            }

            return(patientSearchResultDto);
        }
Пример #5
0
        private PatientQueryCriteria GetQueryCriteriaFromC32(string content)
        {
            var patientQueryCriteria = new PatientQueryCriteria();

            if (string.IsNullOrEmpty(content))
            {
                return(patientQueryCriteria);
            }
            var c32Dto = _c32Builder.BuildC32Dto(content);

            if (c32Dto == null || c32Dto.Header == null || c32Dto.Header.PersonalInfo == null || c32Dto.Header.PersonalInfo.PatientInfo == null ||
                c32Dto.Header.PersonalInfo.PatientInfo.PersonInfo == null)
            {
                return(patientQueryCriteria);
            }

            var personAddress = c32Dto.Header.PersonalInfo.PatientInfo.PersonAddress;

            if (personAddress != null)
            {
                patientQueryCriteria.City           = personAddress.City;
                patientQueryCriteria.AddressLineOne = personAddress.StreetAddressLines == null
                                                          ? null
                                                          : personAddress.StreetAddressLines.FirstOrDefault();
                patientQueryCriteria.ZipCode            = personAddress.PostalCode;
                patientQueryCriteria.StateWellKnownName = personAddress.State;
            }

            var personPhone = c32Dto.Header.PersonalInfo.PatientInfo.PersonPhone;

            if (personPhone != null)
            {
                patientQueryCriteria.Phone = personPhone.Value;
            }

            var personInfo = c32Dto.Header.PersonalInfo.PatientInfo.PersonInfo;

            if (personInfo.PersonName != null)
            {
                patientQueryCriteria.FirstName = personInfo.PersonName.Given;
                patientQueryCriteria.LastName  = personInfo.PersonName.Family;
            }

            if (personInfo.Gender != null && !string.IsNullOrEmpty(personInfo.Gender.Code))
            {
                var lookup = _codedConceptLookupBaseRepository.GetLookupByCodedConceptCode(typeof(AdministrativeGender), personInfo.Gender.Code);

                if (lookup != null)
                {
                    patientQueryCriteria.GenderWellKnownName = lookup.WellKnownName;
                }
            }

            if (personInfo.PersonDateOfBirth != null && !string.IsNullOrEmpty(personInfo.PersonDateOfBirth.Value))
            {
                var birthDate = DateTime.MinValue;

                DateTime.TryParseExact(
                    personInfo.PersonDateOfBirth.Value,
                    "yyyyMMdd",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out birthDate);

                if (birthDate != DateTime.MinValue)
                {
                    patientQueryCriteria.BirthDate = birthDate;
                }
            }

            return(patientQueryCriteria);
        }