public PRPA_IN201306UV02 PRPA_IN201305UV02(string CURRENT_USER, Int32 CURRENT_REGISTRY_ID, PATIENT p) { PRPA_IN201306UV02 objReturn = null; try { PRPA_MT201306UV02ParameterList patientParameters = GetDemographicParameters(p); if (patientParameters == null) { return(null); } QUQI_MT021001UV01DataEnterer[] currentUser = GetDataEnterer(CURRENT_USER, CURRENT_REGISTRY_ID); if (rsMain == null) { InitProxy(); } string createDateTime = DateTime.Now.ToString("yyyyMMddhhmmss"); PRPA_IN201305UV02 PRPA_IN201305UV021 = new PRPA_IN201305UV02() { id = new II() { root = vaRoot, extension = string.Format("{0}-{1}", "MCID", createDateTime) }, creationTime = new TS() { value = createDateTime }, versionCode = new CS() { code = verCode }, interactionId = new II() { extension = "PRPA_IN201305UV02", root = iiRoot }, processingCode = new CS() { code = prcCode }, processingModeCode = new CS() { code = "T" }, acceptAckCode = new CS() { code = "AL" }, receiver = new MCCI_MT000100UV01Receiver[] { new MCCI_MT000100UV01Receiver() { typeCode = CommunicationFunctionType.RCV, device = new MCCI_MT000100UV01Device() { determinerCode = "INSTANCE", classCode = EntityClassDevice.DEV, id = new II[] { new II() { root = vaRoot } } } } }, sender = new MCCI_MT000100UV01Sender() { typeCode = CommunicationFunctionType.SND, device = new MCCI_MT000100UV01Device() { determinerCode = "INSTANCE", classCode = EntityClassDevice.DEV, id = new II[] { new II() { root = vaRoot, extension = "200CRSE" } } } }, controlActProcess = new PRPA_IN201305UV02QUQI_MT021001UV01ControlActProcess() { dataEnterer = currentUser, classCode = ActClassControlAct.CACT, moodCode = x_ActMoodIntentEvent.EVN, code = new CD() { code = "PRPA_TE201305UV02", codeSystem = iiRoot }, queryByParameter = new PRPA_MT201306UV02QueryByParameter() { queryId = new II() { root = vaRoot, extension = createDateTime }, statusCode = new CS() { code = "new" }, modifyCode = new CS() { code = "MVI.COMP1" }, initialQuantity = new INT() { value = "1" }, parameterList = patientParameters }, } }; ////Used for debugging request //SoapEnvelope envelope = new SoapEnvelope(); //envelope.body = new Body(); //envelope.body.PRPA_IN201305UV02 = PRPA_IN201305UV021; //XmlSerializer ser = new XmlSerializer(typeof(SoapEnvelope)); //TextWriter writer = new StreamWriter("C:\\temp\\PRPA_IN201305UV02.xml"); //ser.Serialize(writer, envelope); //writer.Close(); LogDetails logDetails = new LogDetails(String.Format("{0}.{1}", System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodBase.GetCurrentMethod().Name), CURRENT_USER, CURRENT_REGISTRY_ID); objReturn = rsMain.PRPA_IN201305UV02(PRPA_IN201305UV021); LogManager.LogTiming(logDetails); ////Used for debugging response //if (objReturn != null) //{ // envelope = new SoapEnvelope(); // envelope.body = new Body(); // envelope.body.PRPA_IN201306UV02 = objReturn; // ser = new XmlSerializer(typeof(SoapEnvelope)); // writer = new StreamWriter("C:\\temp\\PRPA_IN201306UV02.xml"); // ser.Serialize(writer, envelope); // writer.Close(); //} } catch (WebException ex) { LogManager.LogError(ex.Message, String.Format("{0}.{1}", System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodBase.GetCurrentMethod().Name), CURRENT_USER, CURRENT_REGISTRY_ID); throw ex; } catch (Exception ex) { LogManager.LogError(ex.Message, String.Format("{0}.{1}", System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName, System.Reflection.MethodBase.GetCurrentMethod().Name), CURRENT_USER, CURRENT_REGISTRY_ID); throw ex; } return(objReturn); }
public static bool PRPA_IN201305UV02(string CURRENT_USER, Int32 CURRENT_REGISTRY_ID, Int32 CURRENT_PATIENT_ID) { bool objReturn = false; MviDB objDB = new MviDB(); PATIENT p = PATIENTManager.GetItemComplete(CURRENT_USER, CURRENT_REGISTRY_ID, CURRENT_PATIENT_ID); if (p != null) { if (p.SPATIENT == null) { p.SPATIENT = new SPATIENT() { PatientICN = p.PatientICN }; } PRPA_IN201306UV02 prpaItem = objDB.PRPA_IN201305UV02(CURRENT_USER, CURRENT_REGISTRY_ID, p); if (prpaItem != null) { if (prpaItem.controlActProcess != null && prpaItem.controlActProcess.queryAck != null && prpaItem.controlActProcess.queryAck.queryResponseCode != null && !string.IsNullOrEmpty(prpaItem.controlActProcess.queryAck.queryResponseCode.code)) { switch (prpaItem.controlActProcess.queryAck.queryResponseCode.code.Trim().ToUpper()) { case "OK": int resultCurrentQuantity = 0; int.TryParse(prpaItem.controlActProcess.queryAck.resultCurrentQuantity.value, out resultCurrentQuantity); if (resultCurrentQuantity == 1) //TODO: may need to handle multiple results at some point???...display list to user or something { if (prpaItem.controlActProcess.subject != null && prpaItem.controlActProcess.subject[0].registrationEvent != null && prpaItem.controlActProcess.subject[0].registrationEvent.subject1 != null && prpaItem.controlActProcess.subject[0].registrationEvent.subject1.patient != null) { //TODO: ID's if (prpaItem.controlActProcess.subject[0].registrationEvent.subject1.patient.Item != null) { if (prpaItem.controlActProcess.subject[0].registrationEvent.subject1.patient.Item is PRPA_MT201310UV02Person) { PRPA_MT201310UV02Person person = (PRPA_MT201310UV02Person)prpaItem.controlActProcess.subject[0].registrationEvent.subject1.patient.Item; //NAMES (First and Last) if (person.name != null && person.name.Length > 0 && person.name[0].Items != null && person.name[0].Items.Length > 0) { int givenCount = 0; for (int i = 0; i < person.name[0].Items.Length; i++) { if (person.name[0].ItemsElementName.Length > i) { switch (person.name[0].ItemsElementName[i]) { case ItemsChoiceType8.given: if (givenCount == 0) { p.FIRST_NAME = p.SPATIENT.PatientFirstName = person.name[0].Items[i]; } else if (givenCount > 0) { p.MIDDLE_NAME = person.name[0].Items[i]; } givenCount++; break; case ItemsChoiceType8.family: p.LAST_NAME = p.SPATIENT.PatientLastName = person.name[0].Items[i]; break; default: break; } } } } //PHONES if (person.telecom != null && person.telecom.Length > 0) { foreach (TEL tel in person.telecom) { if (!string.IsNullOrEmpty(tel.value) && tel.use != null && tel.use.Length > 0) { switch (tel.use[0]) { case "HP": p.SPATIENT.PhoneResidence = RemoveChars(tel.value); break; default: break; } } } } //GENDER if (person.administrativeGenderCode != null && !string.IsNullOrEmpty(person.administrativeGenderCode.code)) { p.SPATIENT.Gender = person.administrativeGenderCode.code.Trim().ToUpper().Substring(0, 1); } //DOB if (person.birthTime != null && !string.IsNullOrEmpty(person.birthTime.value)) { int y = 0; int m = 0; int d = 0; if (person.birthTime.value.Length >= 4) { int.TryParse(person.birthTime.value.Substring(0, 4), out y); } if (person.birthTime.value.Length >= 6) { int.TryParse(person.birthTime.value.Substring(4, 2), out m); } if (person.birthTime.value.Length >= 8) { int.TryParse(person.birthTime.value.Substring(6, 2), out d); } DateTime?dob = null; if (p.SPATIENT.DateOfBirth != null) { dob = p.SPATIENT.DateOfBirth; } else if (p.BIRTH_DATE != null) { dob = p.BIRTH_DATE; } if (y == 0 && dob != null) { y = dob.Value.Year; } if (m == 0 && dob != null) { m = dob.Value.Month; } if (d == 0 && dob != null) { d = dob.Value.Day; } if (y > 0 && m > 0 && d > 0 && dob != null) { p.BIRTH_DATE = p.SPATIENT.DateOfBirth = new DateTime(y, m, d, dob.Value.Hour, dob.Value.Minute, dob.Value.Second); } else if (y > 0 && m > 0 && d > 0) { p.BIRTH_DATE = p.SPATIENT.DateOfBirth = new DateTime(y, m, d); } } //ADDRESSES if (person.addr != null && person.addr.Length > 0) { foreach (AD a in person.addr) { if (a.use != null && a.use.Length > 0) { if (a.use[0] == "PHYS") //TODO: CRSe DB only stores one address, should we check for other MVI address types here??? { if (a.Items != null && a.Items.Length > 0) { for (int i = 0; i < a.Items.Length; i++) { switch (a.ItemsElementName[i]) { case ItemsChoiceType7.streetAddressLine: p.SPATIENT.StreetAddress1 = a.Items[i].ToString(); break; case ItemsChoiceType7.city: p.SPATIENT.City = a.Items[i].ToString(); break; case ItemsChoiceType7.state: p.SPATIENT.State = a.Items[i].ToString(); break; case ItemsChoiceType7.postalCode: p.SPATIENT.PostalCode = a.Items[i].ToString(); break; case ItemsChoiceType7.country: p.SPATIENT.Country = a.Items[i].ToString(); break; default: break; } } } } } } } //OTHER IDS (SSN) if (person.asOtherIDs != null && person.asOtherIDs.Length > 0) { foreach (PRPA_MT201310UV02OtherIDs id in person.asOtherIDs) { if (id.id != null && id.id.Length > 0) { if (id.classCode == "SSN") { p.SPATIENT.PatientSSN = id.id[0].extension; } } } } } } } p.PATIENT_ID = PATIENTManager.SaveComplete(CURRENT_USER, CURRENT_REGISTRY_ID, p); objReturn = true; } break; case "NF": break; default: break; } } } } objDB.Dispose(); return(objReturn); }
/// <summary> /// Handle a query for patient demographic data /// </summary> private IGraphable HandleQueryPatientDemographics(MARC.Everest.Connectors.UnsolicitedDataEventArgs e, MARC.Everest.Connectors.IReceiveResult receivedMessage) { // Setup the lists of details and issues List <IResultDetail> dtls = new List <IResultDetail>(receivedMessage.Details); // System configuration service ISystemConfigurationService configService = Context.GetService(typeof(ISystemConfigurationService)) as ISystemConfigurationService; // Localization service ILocalizationService locale = Context.GetService(typeof(ILocalizationService)) as ILocalizationService; // Data Service IClientRegistryDataService dataSvc = Context.GetService(typeof(IClientRegistryDataService)) as IClientRegistryDataService; // Do basic check and add common validation errors MessageUtil.ValidateTransportWrapperUv(receivedMessage.Structure as IInteraction, configService, dtls); // Check the request is valid var request = receivedMessage.Structure as PRPA_IN201305UV02; if (request == null) { return(null); } // Determine if the received message was interpreted properly bool isValid = MessageUtil.IsValid(receivedMessage); // set the URI if (request.controlActProcess != null) { request.controlActProcess.Code = request.controlActProcess.Code ?? Util.Convert <CD <String> >(PRPA_IN201302UV02.GetTriggerEvent()); } if (request.Receiver.Count > 0) { request.Receiver[0].Telecom = request.Receiver[0].Telecom ?? e.ReceiveEndpoint.ToString(); } // Construct the acknowledgment var response = new PRPA_IN201306UV02( new II(configService.OidRegistrar.GetOid("CR_MSGID").Oid, Guid.NewGuid().ToString()), DateTime.Now, PRPA_IN201306UV02.GetInteractionId(), request.ProcessingCode, request.ProcessingModeCode, AcknowledgementCondition.Never, MessageUtil.CreateReceiver(request.Sender), MessageUtil.CreateSenderUv(e.ReceiveEndpoint, configService), null ); // Create the support classes AuditData audit = null; IheAuditUtil dataUtil = new IheAuditUtil() { Context = this.Context }; // Try to execute the record try { // Determine if the message is valid if (!isValid) { throw new MessageValidationException(locale.GetString("MSGE00A"), receivedMessage.Structure); } // Construct the canonical data structure PatientDemographicsQueryResponseFactory fact = new PatientDemographicsQueryResponseFactory() { Context = this.Context }; RegistryQueryRequest filter = fact.CreateFilterData(request, dtls); if (filter.QueryRequest == null) { throw new MessageValidationException(locale.GetString("MSGE00A"), receivedMessage.Structure); } // Query var results = dataSvc.Query(filter); dtls.AddRange(results.Details); // Prepare for audit audit = dataUtil.CreateAuditData("ITI-47", ActionType.Execute, dtls.Exists(r => r.Type == ResultDetailType.Error) ? OutcomeIndicator.MinorFail : OutcomeIndicator.Success, e, receivedMessage, results, filter.QueryRequest.FindComponent(SVC.Core.ComponentModel.HealthServiceRecordSiteRoleType.AuthorOf) as HealthcareParticipant ); response = fact.Create(request, results, dtls) as PRPA_IN201306UV02; } catch (Exception ex) { Trace.TraceError(ex.ToString()); // Prepare for audit audit = dataUtil.CreateAuditData("ITI-47", ActionType.Execute, OutcomeIndicator.EpicFail, e, receivedMessage, new List <VersionedDomainIdentifier>(), null ); dtls.Add(new ResultDetail(ResultDetailType.Error, ex.Message, ex)); response.Acknowledgement.Add(new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100300UV01.Acknowledgement( AcknowledgementType.AcceptAcknowledgementCommitError, new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.TargetMessage(request.Id) )); // Add AE for query response response.controlActProcess = new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.ControlActProcess <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.QueryByParameter, MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object>( "EVN", new MARC.Everest.RMIM.UV.NE2008.QUQI_MT120001UV01.QueryAck( QueryResponse.ApplicationError ) ); } finally { IAuditorService auditService = Context.GetService(typeof(IAuditorService)) as IAuditorService; if (auditService != null) { auditService.SendAudit(audit); } } // Common response parameters response.ProfileId = new SET <II>(MCCI_IN000002UV01.GetProfileId()); response.VersionCode = HL7StandardVersionCode.Version3_Prerelease1; response.AcceptAckCode = AcknowledgementCondition.Never; response.Acknowledgement[0].AcknowledgementDetail.AddRange(MessageUtil.CreateAckDetailsUv(dtls.ToArray())); return(response); }
/// <summary> /// Create the interaction type /// </summary> public MARC.Everest.Interfaces.IInteraction Create(MARC.Everest.Interfaces.IInteraction request, RegistryQueryResult results, List <IResultDetail> dtls) { // GEt the config services ISystemConfigurationService configService = Context.GetService(typeof(ISystemConfigurationService)) as ISystemConfigurationService; var retHl7v3 = new List <MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.Subject1 <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object> >(); //List<MARC.Everest.RMIM.CA.R020403.MFMI_MT700746CA.Subject2<MARC.Everest.RMIM.CA.R020403.PRPA_MT101104CA.IdentifiedEntity>> retHl7v3 = new List<MARC.Everest.RMIM.CA.R020403.MFMI_MT700746CA.Subject2<MARC.Everest.RMIM.CA.R020403.PRPA_MT101104CA.IdentifiedEntity>>(results.Results.Count()); UvDeComponentUtil dCompUtil = new UvDeComponentUtil(); dCompUtil.Context = this.Context; PRPA_IN201305UV02 rqst = request as PRPA_IN201305UV02; // Convert results to HL7v3 foreach (RegistrationEvent res in results.Results) { var retRec = new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.Subject1 <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object>( true, dCompUtil.CreateRegistrationEvent(res, dtls) ); if (retRec.RegistrationEvent == null) { retRec = new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.Subject1 <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object>( false, new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.RegistrationEvent <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object>() { NullFlavor = NullFlavor.NoInformation } ); } retHl7v3.Add(retRec); } // HACK: Sort by confidence score (if present) //retHl7v3.Sort((a, b) => // a != null && b != null && // a.RegistrationEvent != null && b.RegistrationEvent != null && // a.RegistrationEvent.Subject1 != null && b.RegistrationEvent.Subject1 != null && // a.RegistrationEvent.Subject1.registeredRole != null && b.RegistrationEvent.Subject1.registeredRole != null && // (a.RegistrationEvent.Subject1.registeredRole.SubjectOf1.Count > 0) && (b.RegistrationEvent.Subject1.registeredRole.SubjectOf1.Count > 0) ? // (b.RegistrationEvent.Subject1.registeredRole.SubjectOf1[0].QueryMatchObservation.Value as INT).CompareTo((a.RegistrationEvent.Subject1.registeredRole.SubjectOf1[0].QueryMatchObservation.Value as INT)) : 0); // Create the response PRPA_IN201306UV02 response = new PRPA_IN201306UV02 ( Guid.NewGuid(), DateTime.Now, PRPA_IN201306UV02.GetInteractionId(), ProcessingID.Production, "T", AcknowledgementCondition.Never, MessageUtil.CreateReceiver(rqst.Sender), MessageUtil.CreateSenderUv(new Uri(rqst.Receiver[0].Telecom.Value), configService), null ) { Acknowledgement = new List <MARC.Everest.RMIM.UV.NE2008.MCCI_MT100300UV01.Acknowledgement>() { new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100300UV01.Acknowledgement( dtls.Count(a => a.Type == ResultDetailType.Error) == 0 ? AcknowledgementType.ApplicationAcknowledgementAccept : AcknowledgementType.ApplicationAcknowledgementError, new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.TargetMessage(request.Id) ) } }; response.controlActProcess = new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700711UV01.ControlActProcess <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.QueryByParameter, MARC.Everest.RMIM.UV.NE2008.PRPA_MT201310UV02.Patient, object>("EVN") { Id = SET <II> .CreateSET(new II(configService.Custodianship.Id.Domain, Guid.NewGuid().ToString())), Code = new CD <string>(PRPA_IN201306UV02.GetTriggerEvent().Code, PRPA_IN201306UV02.GetTriggerEvent().CodeSystem), QueryAck = new MARC.Everest.RMIM.UV.NE2008.QUQI_MT120001UV01.QueryAck( rqst.controlActProcess.queryByParameter.QueryId, "complete", (AcknowledgementType)response.Acknowledgement[0].TypeCode == AcknowledgementType.ApplicationAcknowledgementError ? QueryResponse.ApplicationError : results.TotalResults == 0 ? QueryResponse.NoDataFound : QueryResponse.DataFound, results.TotalResults, results.Results.Count, results.TotalResults - results.Results.Count - results.StartRecordNumber ), queryByParameter = rqst.controlActProcess.queryByParameter }; response.controlActProcess.LanguageCode = MessageUtil.GetDefaultLanguageCode(this.Context); if (retHl7v3.Count > 0) { response.controlActProcess.Subject.AddRange(retHl7v3); } return(response); }
/// <summary> /// Generate the auto complete data /// </summary> public String[] Filter(WcfClientConnector connector, string filter) { List <String> retVal = new List <String>(); // Create the instance PRPA_IN201305UV02 instance = new PRPA_IN201305UV02( Guid.NewGuid(), DateTime.Now, PRPA_IN201305UV02.GetInteractionId(), ProcessingID.Production, "T", AcknowledgementCondition.Always, new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.Receiver() { Telecom = new TEL("http://cr.marc-hi.ca:8080/pdqsupplier"), Device = new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.Device( SET <II> .CreateSET(new II("1.3.6.1.4.1.33349.3.1.1.20.4", "CR")) ) }, new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.Sender() { Telecom = new TEL() { NullFlavor = NullFlavor.NoInformation }, Device = new MARC.Everest.RMIM.UV.NE2008.MCCI_MT100200UV01.Device( SET <II> .CreateSET(new II("1.2.3.4.5.4", "Sample")) ) }, new MARC.Everest.RMIM.UV.NE2008.QUQI_MT021001UV01.ControlActProcess <MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.QueryByParameter>("EVN") { Id = SET <II> .CreateSET(Guid.NewGuid()), Code = CD <String> .Parse(PRPA_IN201305UV02.GetTriggerEvent()), AuthorOrPerformer = new List <MARC.Everest.RMIM.UV.NE2008.MFMI_MT700701UV01.AuthorOrPerformer>(), queryByParameter = new MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.QueryByParameter( Guid.NewGuid(), "new", new MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.ParameterList() ) { InitialQuantity = 10 } } ); instance.controlActProcess.EffectiveTime = new IVL <TS>(DateTime.Now); // Set the author instance.controlActProcess.AuthorOrPerformer.Add(new MARC.Everest.RMIM.UV.NE2008.MFMI_MT700701UV01.AuthorOrPerformer()); instance.controlActProcess.AuthorOrPerformer[0].SetParticipationChoice(new MARC.Everest.RMIM.UV.NE2008.COCT_MT090300UV01.AssignedDevice( SET <II> .CreateSET(new II("1.2.3.4.5.4", "Sample")), "DEV" ) ); // Set the filter for given then family foreach (var enpt in new EntityNamePartType[] { EntityNamePartType.Given, EntityNamePartType.Family }) { instance.Id = Guid.NewGuid(); instance.controlActProcess.queryByParameter.QueryId = Guid.NewGuid(); // Set the name instance.controlActProcess.queryByParameter.ParameterList.LivingSubjectName.Clear(); instance.controlActProcess.queryByParameter.ParameterList.LivingSubjectName.Add( new MARC.Everest.RMIM.UV.NE2008.PRPA_MT201306UV02.LivingSubjectName( SET <EN> .CreateSET(new EN(EntityNameUse.Search, new ENXP[] { new ENXP(filter, enpt) })), "livingSubject.name" ) ); // Make the query PRPA_IN201306UV02 response = this.SendReceive(connector, instance) as PRPA_IN201306UV02; // Interpret the response code if (response.Acknowledgement[0].TypeCode != AcknowledgementType.ApplicationAcknowledgementAccept || response.controlActProcess == null) { continue; } foreach (var subj in response.controlActProcess.Subject) { // Ensure that the relationships exist if (subj.RegistrationEvent == null || subj.RegistrationEvent.Subject1 == null || subj.RegistrationEvent.Subject1.registeredRole == null || subj.RegistrationEvent.Subject1.registeredRole.GetPatientEntityChoiceSubjectAsPRPA_MT201310UV02Person() == null || subj.RegistrationEvent.Subject1.registeredRole.GetPatientEntityChoiceSubjectAsPRPA_MT201310UV02Person().Name == null || subj.RegistrationEvent.Subject1.registeredRole.GetPatientEntityChoiceSubjectAsPRPA_MT201310UV02Person().Name.IsEmpty) { continue; } // Add the formatted name var legalName = subj.RegistrationEvent.Subject1.registeredRole.GetPatientEntityChoiceSubjectAsPRPA_MT201310UV02Person().Name.Find(o => o.Use != null && o.Use.Contains(EntityNameUse.Legal)); if (legalName == null) { legalName = subj.RegistrationEvent.Subject1.registeredRole.GetPatientEntityChoiceSubjectAsPRPA_MT201310UV02Person().Name[0]; } retVal.Add(String.Format("{0}@{1} - {2}", subj.RegistrationEvent.Subject1.registeredRole.Id[0].Root, subj.RegistrationEvent.Subject1.registeredRole.Id[0].Extension, legalName.ToString("{FAM}, {GIV}"))); } } // Now return results return(retVal.ToArray()); }