/// <summary> /// Create original identifier for a link /// </summary> private void CreateOriginalIdentifier(IDbConnection conn, IDbTransaction tx, decimal identifier, HealthServiceRecordSite healthServiceRecordSite, DomainIdentifier id) { IDbCommand cmd = DbUtil.CreateCommandStoredProc(conn, tx); try { // Participant HealthcareParticipant paticipantComponent = healthServiceRecordSite.Component as HealthcareParticipant; cmd.CommandText = "add_link_hc_ptcpt_orig_id"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "hsr_id_in", DbType.Decimal, identifier)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_in", DbType.Decimal, paticipantComponent.Id)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_cls_in", DbType.Decimal, (decimal)healthServiceRecordSite.SiteRoleType)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "orig_id_domain_in", DbType.StringFixedLength, id.Domain)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "orig_id_in", DbType.StringFixedLength, (object)id.Identifier ?? DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "license_ind_in", DbType.Boolean, id.IsLicenseAuthority)); // Insert cmd.ExecuteNonQuery(); } finally { cmd.Dispose(); } }
/// <summary> /// Create a participant component from an organization /// </summary> private HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090102CA.Organization organization, List <IResultDetail> dtls) { HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Organization; // Organization identifier if (organization.Id == null || organization.Id.IsNull) { dtls.Add(new MandatoryElementMissingResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE032"), null)); return(null); } retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = organization.Id.Root, Identifier = organization.Id.Extension }); // Organization name if (organization.Name != null) { retVal.LegalName = new NameSet() { Use = NameSet.NameSetUse.Legal }; retVal.LegalName.Parts.Add(new NamePart() { Type = NamePart.NamePartType.Given, Value = organization.Name }); } ; return(retVal); }
/// <summary> /// Create a healthcare participant component /// </summary> private HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090102CA.AssignedEntity assignedEntity, List <IResultDetail> dtls) { // Create healthcare participant HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Person; // Check for an id if (assignedEntity.Id == null || assignedEntity.Id.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE02F"), null, null)); return(null); } // Identifiers retVal.AlternateIdentifiers.AddRange(CreateDomainIdentifierList(assignedEntity.Id, dtls)); // Name if (assignedEntity.AssignedPerson != null && assignedEntity.AssignedPerson.NullFlavor == null && assignedEntity.AssignedPerson.Name != null && !assignedEntity.AssignedPerson.Name.IsNull) { retVal.LegalName = CreateNameSet(assignedEntity.AssignedPerson.Name, dtls); } // License number if (assignedEntity.AssignedPerson.AsHealthCareProvider != null && assignedEntity.AssignedPerson.AsHealthCareProvider.Id != null && !assignedEntity.AssignedPerson.AsHealthCareProvider.Id.IsNull) { retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = assignedEntity.AssignedPerson.AsHealthCareProvider.Id.Root, Identifier = assignedEntity.AssignedPerson.AsHealthCareProvider.Id.Extension, IsLicenseAuthority = true }); } // Represented organization if (assignedEntity.RepresentedOrganization != null && assignedEntity.RepresentedOrganization.NullFlavor == null) { HealthcareParticipant ptcpt = CreateParticipantComponent(assignedEntity.RepresentedOrganization, dtls); if (ptcpt != null) { retVal.Add(ptcpt, "RPO", HealthServiceRecordSiteRoleType.RepresentitiveOf, ptcpt.AlternateIdentifiers); } else { dtls.Add(new ResultDetail(ResultDetailType.Warning, this.m_localeService.GetString("MSGW010"), null, null)); } } return(retVal); }
/// <summary> /// Link participant to a health service record /// </summary> private void LinkHealthServiceRecord(IDbConnection conn, IDbTransaction tx, decimal identifier, HealthServiceRecordSite healthServiceRecordSite) { IDbCommand cmd = DbUtil.CreateCommandStoredProc(conn, tx); try { cmd.CommandText = "link_hc_ptcpt"; // Represented organization HealthcareParticipant paticipantComponent = healthServiceRecordSite.Component as HealthcareParticipant; var repOrganizations = from HealthServiceRecordComponent comp in paticipantComponent.Components where (comp.Site as HealthServiceRecordSite).SiteRoleType == HealthServiceRecordSiteRoleType.RepresentitiveOf select comp; HealthcareParticipant representedOrganization = repOrganizations.Count() > 0 ? repOrganizations.First() as HealthcareParticipant : null; if (representedOrganization != null) { representedOrganization.Id = Convert.ToDecimal(Persist(conn, tx, representedOrganization, false).Identifier); } // Parameters cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "hsr_id_in", DbType.Decimal, identifier)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_in", DbType.Decimal, paticipantComponent.Id)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_cls_in", DbType.Decimal, (decimal)healthServiceRecordSite.SiteRoleType)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_rep_org_id_in", DbType.Decimal, representedOrganization == null ? DBNull.Value : (object)representedOrganization.Id)); // Insert cmd.ExecuteNonQuery(); // Insert original identifiers if (healthServiceRecordSite.OriginalIdentifier != null) { foreach (var id in healthServiceRecordSite.OriginalIdentifier) { CreateOriginalIdentifier(conn, tx, identifier, healthServiceRecordSite, id); } } } finally { cmd.Dispose(); } }
/// <summary> /// Create a healthcare participant /// </summary> /// <param name="p"></param> /// <param name="dtls"></param> /// <returns></returns> private HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090502CA.AssignedEntity assignedEntity, List <IResultDetail> dtls) { // Create the healthcare participant HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Organization; // Check for id if (assignedEntity.RepresentedOrganization == null || assignedEntity.RepresentedOrganization.NullFlavor != null || assignedEntity.RepresentedOrganization.Id == null || assignedEntity.RepresentedOrganization.Id.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE02B"), null, null)); return(null); } // Add identifier retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = assignedEntity.RepresentedOrganization.Id.Root, Identifier = assignedEntity.RepresentedOrganization.Id.Extension }); // Legal name if (assignedEntity.RepresentedOrganization.Name != null && !assignedEntity.RepresentedOrganization.Name.IsNull) { retVal.LegalName = new NameSet(); retVal.LegalName.Use = NameSet.NameSetUse.Legal; retVal.LegalName.Parts.Add(new NamePart() { Value = assignedEntity.RepresentedOrganization.Name, Type = NamePart.NamePartType.Given }); } return(retVal); }
private HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090108CA.Organization organization, List <IResultDetail> dtls) { HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Organization; // Organization identifier if (organization.Id == null || organization.Id.IsNull) { dtls.Add(new MandatoryElementMissingResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE032"), null)); return(null); } retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = organization.Id.Root, Identifier = organization.Id.Extension }); // Organization name if (organization.Name != null) { retVal.LegalName = new NameSet() { Use = NameSet.NameSetUse.Legal }; retVal.LegalName.Parts.Add(new NamePart() { Type = NamePart.NamePartType.Given, Value = organization.Name }); } ; // Organization type if (organization.AssignedOrganization != null && organization.AssignedOrganization.NullFlavor == null) { if (organization.AssignedOrganization.Code == null || organization.AssignedOrganization.Code.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Warning, this.m_localeService.GetString("MSGW011"), null, null)); } else { retVal.Type = CreateCodeValue <String>(organization.AssignedOrganization.Code, dtls); } // Telecommunications if (organization.AssignedOrganization.Telecom != null && !organization.AssignedOrganization.Telecom.IsEmpty) { foreach (var tel in organization.AssignedOrganization.Telecom) { retVal.TelecomAddresses.Add(new TelecommunicationsAddress() { Use = tel.Use == null ? null : Util.ToWireFormat(tel.Use), Value = tel.Value }); } } } return(retVal); }
/// <summary> /// Create a healthcare participant component /// </summary> protected HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090108CA.AssignedEntity assignedEntity, List <IResultDetail> dtls) { HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Person; // Check for an id if (assignedEntity.Id == null || assignedEntity.Id.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE02F"), null, null)); return(null); } // Identifiers retVal.AlternateIdentifiers.AddRange(CreateDomainIdentifierList(assignedEntity.Id, dtls)); // Name if (assignedEntity.AssignedPerson == null || assignedEntity.AssignedPerson.NullFlavor != null) { dtls.Add(new MandatoryElementMissingResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE030"), null)); return(null); } if (assignedEntity.AssignedPerson.Name != null && !assignedEntity.AssignedPerson.Name.IsNull) { retVal.LegalName = CreateNameSet(assignedEntity.AssignedPerson.Name, dtls); } // Type if (assignedEntity.Code == null || assignedEntity.Code.IsNull) { dtls.Add(new MandatoryElementMissingResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE031"), null)); return(null); } retVal.Type = CreateCodeValue(assignedEntity.Code, dtls); // Telecom addresses if (assignedEntity.Telecom != null && !assignedEntity.Telecom.IsEmpty) { foreach (var telecom in assignedEntity.Telecom) { retVal.TelecomAddresses.Add(new TelecommunicationsAddress() { Use = telecom.Use == null ? null : Util.ToWireFormat(telecom.Use), Value = telecom.Value }); } } // License number if (assignedEntity.AssignedPerson.AsHealthCareProvider != null && assignedEntity.AssignedPerson.AsHealthCareProvider.Id != null && !assignedEntity.AssignedPerson.AsHealthCareProvider.Id.IsNull) { retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = assignedEntity.AssignedPerson.AsHealthCareProvider.Id.Root, Identifier = assignedEntity.AssignedPerson.AsHealthCareProvider.Id.Extension, IsLicenseAuthority = true }); } // Represented organization if (assignedEntity.RepresentedOrganization != null && assignedEntity.RepresentedOrganization.NullFlavor == null) { HealthcareParticipant ptcpt = CreateParticipantComponent(assignedEntity.RepresentedOrganization, dtls); if (ptcpt != null) { retVal.Add(ptcpt, "RPO", HealthServiceRecordSiteRoleType.RepresentitiveOf, ptcpt.AlternateIdentifiers); } else { dtls.Add(new ResultDetail(ResultDetailType.Warning, this.m_localeService.GetString("MSGW010"), null, null)); } } return(retVal); }
/// <summary> /// Create a healthcare participant component /// </summary> protected HealthcareParticipant CreateParticipantComponent(MARC.Everest.RMIM.CA.R020403.COCT_MT090508CA.AssignedEntity assignedEntity, List <IResultDetail> dtls) { HealthcareParticipant retVal = new HealthcareParticipant(); retVal.Classifier = HealthcareParticipant.HealthcareParticipantType.Organization; // Check for id if (assignedEntity.RepresentedOrganization == null || assignedEntity.RepresentedOrganization.NullFlavor != null || assignedEntity.RepresentedOrganization.Id == null || assignedEntity.RepresentedOrganization.Id.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Error, this.m_localeService.GetString("MSGE02B"), null, null)); return(null); } // Add identifier retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = assignedEntity.RepresentedOrganization.Id.Root, Identifier = assignedEntity.RepresentedOrganization.Id.Extension }); // Legal name if (assignedEntity.RepresentedOrganization.Name != null && !assignedEntity.RepresentedOrganization.Name.IsNull) { retVal.LegalName = new NameSet(); retVal.LegalName.Use = NameSet.NameSetUse.Legal; retVal.LegalName.Parts.Add(new NamePart() { Value = assignedEntity.RepresentedOrganization.Name, Type = NamePart.NamePartType.Given }); } // Organization type if (assignedEntity.RepresentedOrganization.AssignedOrganization != null && assignedEntity.RepresentedOrganization.AssignedOrganization.NullFlavor == null) { if (assignedEntity.RepresentedOrganization.AssignedOrganization.Code == null || assignedEntity.RepresentedOrganization.AssignedOrganization.Code.IsNull) { dtls.Add(new ResultDetail(ResultDetailType.Warning, this.m_localeService.GetString("MSGW00F"), null, null)); } else { retVal.Type = CreateCodeValue <String>(assignedEntity.RepresentedOrganization.AssignedOrganization.Code, dtls); } // Telecommunications if (assignedEntity.RepresentedOrganization.AssignedOrganization.Telecom != null && !assignedEntity.RepresentedOrganization.AssignedOrganization.Telecom.IsEmpty) { foreach (var tel in assignedEntity.RepresentedOrganization.AssignedOrganization.Telecom) { retVal.TelecomAddresses.Add(new TelecommunicationsAddress() { Use = tel.Use == null ? null : Util.ToWireFormat(tel.Use), Value = tel.Value }); } } } return(retVal); }
public override SVC.Messaging.FHIR.Resources.ResourceBase ProcessComponent(System.ComponentModel.IComponent component, List <Everest.Connectors.IResultDetail> dtls) { // Create a component HealthcareParticipant ptcpt = component as HealthcareParticipant; if (ptcpt.Classifier != HealthcareParticipant.HealthcareParticipantType.Organization) { ; // Not an organization pass off } // Organization Organization retVal = new Organization(); retVal.Id = ptcpt.Id.ToString(); retVal.VersionId = ptcpt.Id.ToString(); // Other identifiers foreach (var id in ptcpt.AlternateIdentifiers) { retVal.Extension.Add(ExtensionUtil.CreateIdentificationExtension(id)); } if (ptcpt.Type != null) { retVal.Type = base.ConvertCode(ptcpt.Type); } retVal.Name = ptcpt.LegalName.Parts[0].Value; retVal.Active = true; // Address if (ptcpt.PrimaryAddress != null) { retVal.Address = base.ConvertAddressSet(ptcpt.PrimaryAddress); } // Telecoms if (ptcpt.TelecomAddresses != null) { foreach (var tel in ptcpt.TelecomAddresses) { retVal.Telecom.AddRange(base.ConvertTelecom(tel)); } } var contacts = ptcpt.FindAllComponents(SVC.Core.ComponentModel.HealthServiceRecordSiteRoleType.RepresentitiveOf); foreach (HealthcareParticipant contact in contacts) { ContactEntity ce = new ContactEntity(); // Link var processor = FhirMessageProcessorUtil.GetComponentProcessor(contact.GetType()); var processResult = processor.ProcessComponent(contact, dtls); if (processResult is Practictioner) { var prac = processResult as Practictioner; ce.Name = prac.Name[0]; ce.Address = prac.Address[0]; ce.Gender = prac.Gender; ce.Telecom = prac.Telecom; } if (ce.Name != null) { ce.Name = base.ConvertNameSet(contact.LegalName); } if (contact.TelecomAddresses != null) { foreach (var t in contact.TelecomAddresses) { ce.Telecom.AddRange(base.ConvertTelecom(t)); } } if (contact.PrimaryAddress != null) { ce.Address = base.ConvertAddressSet(contact.PrimaryAddress)[0]; } retVal.ContactEntity.Add(ce); } return(retVal); }
/// <summary> /// Create audit data /// </summary> public AuditData CreateAuditData(string itiName, ActionType action, OutcomeIndicator outcome, UnsolicitedDataEventArgs msgEvent, IReceiveResult msgReceiveResult, IEnumerable <VersionedDomainIdentifier> patientRecord, HealthcareParticipant author) { // Audit data AuditData retVal = null; AuditableObjectLifecycle lifecycle = AuditableObjectLifecycle.Access; var wcfReceiveResult = msgReceiveResult as WcfReceiveResult; var msgReplyTo = wcfReceiveResult == null || wcfReceiveResult.Headers == null || wcfReceiveResult.Headers.ReplyTo == null?msgEvent.SolicitorEndpoint.ToString() : wcfReceiveResult.Headers.ReplyTo.Uri.ToString(); string userId = String.Empty; if (OperationContext.Current.Channel.RemoteAddress != null && OperationContext.Current.Channel.RemoteAddress.Uri != null) { userId = OperationContext.Current.Channel.RemoteAddress.Uri.OriginalString; } else if (OperationContext.Current.ServiceSecurityContext != null && OperationContext.Current.ServiceSecurityContext.PrimaryIdentity != null) { userId = OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name; } switch (itiName) { case "PRPA_TE101103CA": { retVal = new AuditData(DateTime.Now, action, outcome, EventIdentifierType.PatientRecord, new CodeValue(itiName, "HL7 Trigger Events")); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); var request = msgReceiveResult.Structure as MARC.Everest.RMIM.CA.R020403.Interactions.PRPA_IN101103CA; retVal.AuditableObjects.Add(new AuditableObject() { Type = AuditableObjectType.SystemObject, Role = AuditableObjectRole.Query, IDTypeCode = AuditableObjectIdType.SearchCritereon, QueryData = Convert.ToBase64String(SerializeQuery(request.controlActEvent.QueryByParameter)), ObjectId = String.Format("{1}^^^&{0}&ISO", request.controlActEvent.QueryByParameter.QueryId.Root, request.controlActEvent.QueryByParameter.QueryId.Extension) }); break; } case "PRPA_TE101101CA": { retVal = new AuditData(DateTime.Now, action, outcome, EventIdentifierType.PatientRecord, new CodeValue(itiName, "HL7 Trigger Events")); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); var request = msgReceiveResult.Structure as MARC.Everest.RMIM.CA.R020403.Interactions.PRPA_IN101101CA; retVal.AuditableObjects.Add(new AuditableObject() { Type = AuditableObjectType.SystemObject, Role = AuditableObjectRole.Query, IDTypeCode = AuditableObjectIdType.SearchCritereon, QueryData = Convert.ToBase64String(SerializeQuery(request.controlActEvent.QueryByParameter)), ObjectId = String.Format("{1}^^^&{0}&ISO", request.controlActEvent.QueryByParameter.QueryId.Root, request.controlActEvent.QueryByParameter.QueryId.Extension) }); break; } case "PRPA_TE101201CA": { retVal = new AuditData(DateTime.Now, action, outcome, EventIdentifierType.PatientRecord, new CodeValue(itiName, "HL7 Trigger Events")); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); break; } case "PRPA_TE101105CA": { retVal = new AuditData(DateTime.Now, action, outcome, EventIdentifierType.PatientRecord, new CodeValue(itiName, "HL7 Trigger Events")); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); var request = msgReceiveResult.Structure as MARC.Everest.RMIM.CA.R020403.Interactions.PRPA_IN101105CA; retVal.AuditableObjects.Add(new AuditableObject() { Type = AuditableObjectType.SystemObject, Role = AuditableObjectRole.Query, IDTypeCode = AuditableObjectIdType.SearchCritereon, QueryData = Convert.ToBase64String(SerializeQuery(request.controlActEvent.QueryByParameter)), ObjectId = String.Format("{1}^^^&{0}&ISO", request.controlActEvent.QueryByParameter.QueryId.Root, request.controlActEvent.QueryByParameter.QueryId.Extension) }); break; break; } case "ITI-44": retVal = new AuditData(DateTime.Now, action, outcome, EventIdentifierType.PatientRecord, new CodeValue(itiName, "IHE Transactions")); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); break; case "ITI-45": { retVal = new AuditData(DateTime.Now, ActionType.Execute, outcome, EventIdentifierType.Query, new CodeValue("ITI-45", "IHE Transactions") { DisplayName = "PIX Query" }); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); // Add query var request = msgReceiveResult.Structure as PRPA_IN201309UV02; retVal.AuditableObjects.Add(new AuditableObject() { Type = AuditableObjectType.SystemObject, Role = AuditableObjectRole.Query, IDTypeCode = AuditableObjectIdType.Custom, CustomIdTypeCode = new CodeValue("ITI45", "IHE Transactions"), QueryData = Convert.ToBase64String(SerializeQuery(request.controlActProcess.queryByParameter)), ObjectId = String.Format("{1}^^^&{0}&ISO", request.controlActProcess.queryByParameter.QueryId.Root, request.controlActProcess.queryByParameter.QueryId.Extension) }); break; } case "ITI-47": { retVal = new AuditData(DateTime.Now, ActionType.Execute, outcome, EventIdentifierType.Query, new CodeValue("ITI-47", "IHE Transactions") { DisplayName = "Patient Demographics Query" }); // Audit actor for Patient Identity Source retVal.Actors.Add(new AuditActorData() { UserIsRequestor = true, UserIdentifier = msgReplyTo, ActorRoleCode = new List <CodeValue>() { new CodeValue("110153", "DCM") { DisplayName = "Source" } }, NetworkAccessPointId = msgEvent.SolicitorEndpoint.Host, NetworkAccessPointType = msgEvent.SolicitorEndpoint.HostNameType == UriHostNameType.Dns ? NetworkAccessPointType.MachineName : NetworkAccessPointType.IPAddress, UserName = userId }); // Audit actor for PIX manager retVal.Actors.Add(new AuditActorData() { UserIdentifier = msgEvent.ReceiveEndpoint.ToString(), UserIsRequestor = false, ActorRoleCode = new List <CodeValue>() { new CodeValue("110152", "DCM") { DisplayName = "Destination" } }, NetworkAccessPointType = NetworkAccessPointType.MachineName, NetworkAccessPointId = Dns.GetHostName(), AlternativeUserId = Process.GetCurrentProcess().Id.ToString() }); // Add query var request = msgReceiveResult.Structure as PRPA_IN201305UV02; retVal.AuditableObjects.Add(new AuditableObject() { Type = AuditableObjectType.SystemObject, Role = AuditableObjectRole.Query, IDTypeCode = AuditableObjectIdType.Custom, CustomIdTypeCode = new CodeValue("ITI47", "IHE Transactions"), QueryData = Convert.ToBase64String(SerializeQuery(request.controlActProcess.queryByParameter)), ObjectId = String.Format("{1}^^^&{0}&ISO", request.controlActProcess.queryByParameter.QueryId.Root, request.controlActProcess.queryByParameter.QueryId.Extension) }); break; } } // Audit authors if (author != null) { retVal.AuditableObjects.Add(new AuditableObject() { IDTypeCode = AuditableObjectIdType.UserIdentifier, ObjectId = String.Format("{1}^^^&{0}&ISO", this.m_configService.OidRegistrar.GetOid("CR_PID"), author.Id), Role = AuditableObjectRole.Provider, Type = AuditableObjectType.Person, LifecycleType = (AuditableObjectLifecycle?)(action == ActionType.Read ? (object)AuditableObjectLifecycle.ReceiptOfDisclosure : null) }); } // Audit patients foreach (var pat in patientRecord) { // Construct the audit object AuditableObject aud = new AuditableObject() { IDTypeCode = AuditableObjectIdType.PatientNumber, Role = AuditableObjectRole.Patient, Type = AuditableObjectType.Person }; // Lifecycle switch (action) { case ActionType.Create: aud.LifecycleType = AuditableObjectLifecycle.Creation; break; case ActionType.Delete: aud.LifecycleType = AuditableObjectLifecycle.LogicalDeletion; break; case ActionType.Execute: aud.LifecycleType = AuditableObjectLifecycle.Access; break; case ActionType.Read: aud.LifecycleType = AuditableObjectLifecycle.Disclosure; break; case ActionType.Update: aud.LifecycleType = AuditableObjectLifecycle.Amendment; break; } aud.ObjectId = String.Format("{1}^^^&{0}&ISO", pat.Domain, pat.Identifier); retVal.AuditableObjects.Add(aud); } return(retVal); }
/// <summary> /// Create audit data that is in response to a query /// </summary> internal AuditData CreateAuditData(string itiName, ActionType actionType, OutcomeIndicator outcomeIndicator, UnsolicitedDataEventArgs msgEvent, IReceiveResult msgReceiveResult, RegistryQueryResult result, HealthcareParticipant author) { // Create the call to the other create audit data message by constructing the list of disclosed identifiers List <VersionedDomainIdentifier> vids = new List <VersionedDomainIdentifier>(result.Results.Count); foreach (var res in result.Results) { if (res == null) { continue; } var subj = res.FindComponent(SVC.Core.ComponentModel.HealthServiceRecordSiteRoleType.SubjectOf) as Person; if (subj == null) { continue; } vids.Add(new VersionedDomainIdentifier() { Domain = this.m_configService.OidRegistrar.GetOid("CR_CID").Oid, Identifier = subj.Id.ToString() }); } return(CreateAuditData(itiName, actionType, outcomeIndicator, msgEvent, msgReceiveResult, vids, author)); }
/// <summary> /// De-persist /// </summary> public System.ComponentModel.IComponent DePersist(System.Data.IDbConnection conn, decimal identifier, IContainer container, HealthServiceRecordSiteRoleType?roleType, bool loadFast) { HealthcareParticipant retVal = new HealthcareParticipant(); IDbCommand cmd = DbUtil.CreateCommandStoredProc(conn, null); try { // Determine the container RegistrationEvent hsrParent = container as RegistrationEvent; retVal = GetProvider(conn, null, new DomainIdentifier() { Identifier = identifier.ToString() }); // Data reader if (hsrParent != null) { cmd.CommandText = "get_hsr_ptcpt"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "hsr_id_in", DbType.Decimal, hsrParent.Id)); //cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "vrsn_id_in", DbType.Decimal, hsrParent.VersionIdentifier)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_in", DbType.Decimal, identifier)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_cls_in", DbType.Decimal, (decimal)roleType.Value)); // Role Decimal repOrgId = default(decimal); List <DomainIdentifier> originalIds = new List <DomainIdentifier>(); // Execute a reader IDataReader reader = cmd.ExecuteReader(); try { // Read a row while (reader.Read()) { repOrgId = reader["ptcpt_rep_org_id"] == DBNull.Value ? default(decimal) : Convert.ToDecimal(reader["ptcpt_rep_org_id"]); originalIds.Add(new DomainIdentifier() { Domain = Convert.ToString(reader["orig_id_domain"]), Identifier = Convert.ToString(reader["orig_id"]), IsLicenseAuthority = Convert.ToBoolean(reader["license_ind"]) }); } } finally { reader.Close(); } // Representative of if (repOrgId != default(decimal)) { retVal.Add(GetProvider(conn, null, new DomainIdentifier() { Identifier = repOrgId.ToString() }), "REPOF", HealthServiceRecordSiteRoleType.RepresentitiveOf, null); } // Add to parent hsrParent.Add(retVal, Guid.NewGuid().ToString(), roleType.Value, originalIds); } else if (container != null) { container.Add(retVal); } } finally { cmd.Dispose(); } // TODO: Get original identifiers for this link return(retVal); }
/// <summary> /// Persist an object /// </summary> public VersionedDomainIdentifier Persist(System.Data.IDbConnection conn, System.Data.IDbTransaction tx, System.ComponentModel.IComponent data, bool isUpdate) { ISystemConfigurationService configServce = ApplicationContext.ConfigurationService; //ApplicationContext.Current.GetService(typeof(ISystemConfigurationService)) as ISystemConfigurationService; // First, we must determine if we're going to be performing an update or a put HealthcareParticipant ptcpt = data as HealthcareParticipant; // Do we have the shrid? if (ptcpt.Id == default(decimal) && ptcpt.AlternateIdentifiers.Count > 0) // nope { // Attempt to get the SHRID int iId = 0; HealthcareParticipant resPtcpt = null; while (resPtcpt == null && iId < ptcpt.AlternateIdentifiers.Count) { resPtcpt = GetProvider(conn, tx, ptcpt.AlternateIdentifiers[iId]); iId++; } if (resPtcpt == null && !DatabasePersistenceService.ValidationSettings.PersonsMustExist) // We need to create a client { // Validate Clients if (DatabasePersistenceService.ValidationSettings.ValidateHealthcareParticipants) { IHealthcareWorkerIdentityService ptcptLookup = ApplicationContext.CurrentContext.GetService(typeof(IHealthcareWorkerIdentityService)) as IHealthcareWorkerIdentityService; if (ptcptLookup == null) { throw new InvalidOperationException("Unable to validate participant as no participant lookup service exists that can fulfill this request"); } resPtcpt = ptcptLookup.FindParticipant(ptcpt.AlternateIdentifiers[0]); if (resPtcpt == null || QueryUtil.MatchName(resPtcpt.LegalName, resPtcpt.LegalName) < DatabasePersistenceService.ValidationSettings.PersonNameMatch) { throw new DataException(String.Format("Could not validate participant {1}^^^&{0}&ISO against the participant validation service", ptcpt.AlternateIdentifiers[0].Domain, ptcpt.AlternateIdentifiers[0].Identifier)); } } CreatePtcpt(conn, tx, ptcpt); } else if (resPtcpt == null) { throw new DataException(String.Format("Particiapant {1}^^^&{0}&ISO cannot be found in this system", ptcpt.AlternateIdentifiers[0].Domain, ptcpt.AlternateIdentifiers[0].Identifier)); } else { // Validate the name given matches the legal name. Has to be more than // 80% match if (QueryUtil.MatchName(ptcpt.LegalName, resPtcpt.LegalName) < DatabasePersistenceService.ValidationSettings.PersonNameMatch) { throw new DataException(String.Format("The provided legal name does not match the legal name of participant {1}^^^&{0}&ISO, please ensure participant name is correct", ptcpt.AlternateIdentifiers[0].Domain, ptcpt.AlternateIdentifiers[0].Identifier)); } ptcpt.Id = resPtcpt.Id; ptcpt.LegalName = resPtcpt.LegalName ?? ptcpt.LegalName; ptcpt.PrimaryAddress = resPtcpt.PrimaryAddress ?? ptcpt.PrimaryAddress; ptcpt.Type = resPtcpt.Type ?? ptcpt.Type; // TODO: Update the information about the provider // Register alternative identifiers foreach (var id in ptcpt.AlternateIdentifiers) { if (resPtcpt.AlternateIdentifiers.Count(o => o.Domain == id.Domain) == 0) // register { CreateAlternateIdentifier(conn, tx, ptcpt.Id, id); } } } } // Persist the site with the container if known if (ptcpt.Site != null && ptcpt.Site.Container is RegistrationEvent) { LinkHealthServiceRecord(conn, tx, (ptcpt.Site.Container as RegistrationEvent).Id, ptcpt.Site as HealthServiceRecordSite); } // Persist any components within the provider record DbUtil.PersistComponents(conn, tx, isUpdate, this, ptcpt); // Return the versioned identifier return(new VersionedDomainIdentifier() { Domain = configServce.OidRegistrar.GetOid(ClientRegistryOids.PROVIDER_CRID).Oid, Identifier = ptcpt.Id.ToString() }); }
/// <summary> /// Get provider by an identifier /// </summary> internal HealthcareParticipant GetProvider(System.Data.IDbConnection conn, System.Data.IDbTransaction tx, DomainIdentifier domainIdentifier) { // Get configuration service ISystemConfigurationService config = ApplicationContext.ConfigurationService; //ApplicationContext.Current.GetService(typeof(ISystemConfigurationService)) as ISystemConfigurationService; // Create database command IDbCommand cmd = DbUtil.CreateCommandStoredProc(conn, tx); try { // Fetch the client data using shrid if (String.IsNullOrEmpty(domainIdentifier.Domain) || domainIdentifier.Domain.Equals(config.OidRegistrar.GetOid(ClientRegistryOids.PROVIDER_CRID).Oid)) { cmd.CommandText = "get_hc_ptcpt"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_in", DbType.Decimal, Convert.ToDecimal(domainIdentifier.Identifier))); } else // get using alt id { cmd.CommandText = "get_hc_ptcpt_extern"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_domain_in", DbType.StringFixedLength, domainIdentifier.Domain)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_id_in", DbType.StringFixedLength, (object)domainIdentifier.Identifier ?? DBNull.Value)); } // Execute the reader IDataReader reader = cmd.ExecuteReader(); // read data if (!reader.Read()) { return(null); } // Parse data HealthcareParticipant retVal = new HealthcareParticipant(); decimal?nsSetId = null, addrSetId = null, typeCodeId = null; try { retVal.Id = Convert.ToDecimal(reader["ptcpt_id"]); retVal.Classifier = Convert.ToString(reader["ptcpt_cls_cs"]).Trim().Equals("PSN") ? HealthcareParticipant.HealthcareParticipantType.Person : HealthcareParticipant.HealthcareParticipantType.Organization; // Define set identifiers nsSetId = reader["ptcpt_name_set_id"] == DBNull.Value ? null : (decimal?)Convert.ToDecimal(reader["ptcpt_name_set_id"]); addrSetId = reader["ptcpt_addr_set_id"] == DBNull.Value ? null : (decimal?)Convert.ToDecimal(reader["ptcpt_addr_set_id"]); typeCodeId = reader["ptcpt_typ_cd_id"] == DBNull.Value ? null : (decimal?)Convert.ToDecimal(reader["ptcpt_typ_cd_id"]); } finally { // Close the reader reader.Close(); } // Get name set if (nsSetId.HasValue) { retVal.LegalName = DbUtil.GetName(conn, tx, nsSetId, false); } // Get addr set if (addrSetId.HasValue) { retVal.PrimaryAddress = DbUtil.GetAddress(conn, tx, addrSetId, false); } // Get type code if (typeCodeId.HasValue) { retVal.Type = DbUtil.GetCodedValue(conn, tx, typeCodeId); } // Read alternate identifiers retVal.AlternateIdentifiers.AddRange(GetAlternateIdentifiers(conn, tx, retVal.Id)); retVal.AlternateIdentifiers.Add(new DomainIdentifier() { Domain = config.OidRegistrar.GetOid(ClientRegistryOids.PROVIDER_CRID).Oid, Identifier = retVal.Id.ToString() }); // Read telecoms retVal.TelecomAddresses.AddRange(GetTelecomAddresses(conn, tx, retVal.Id)); // Return type return(retVal); } finally { cmd.Dispose(); } }
/// <summary> /// Create a participant /// </summary> private void CreatePtcpt(System.Data.IDbConnection conn, System.Data.IDbTransaction tx, HealthcareParticipant ptcpt) { IDbCommand cmd = DbUtil.CreateCommandStoredProc(conn, tx); try { // Create name set decimal?nameSetId = null, addrSetId = null, typeCodeId = null; // Create name if (ptcpt.LegalName != null) { nameSetId = DbUtil.CreateNameSet(conn, tx, ptcpt.LegalName); } if (ptcpt.PrimaryAddress != null) { addrSetId = DbUtil.CreateAddressSet(conn, tx, ptcpt.PrimaryAddress); } if (ptcpt.Type != null) { typeCodeId = DbUtil.CreateCodedValue(conn, tx, ptcpt.Type); } // Does // Create person if (ptcpt.Classifier == HealthcareParticipant.HealthcareParticipantType.Person) { cmd.CommandText = "crt_hc_ptcpt_psn"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_name_set_id_in", DbType.Decimal, (object)nameSetId ?? DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_addr_set_id_in", DbType.Decimal, (object)addrSetId ?? DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_tel_in", DbType.StringFixedLength, DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_typ_cd_id_in", DbType.Decimal, (object)typeCodeId ?? DBNull.Value)); } else { cmd.CommandText = "crt_hc_ptcpt_org"; cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_name_in", DbType.StringFixedLength, ptcpt.LegalName != null && ptcpt.LegalName.Parts.Count > 0 ? (object)ptcpt.LegalName.Parts[0].Value : DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_addr_set_id_in", DbType.Decimal, (object)addrSetId ?? DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_work_tel_in", DbType.StringFixedLength, DBNull.Value)); cmd.Parameters.Add(DbUtil.CreateParameterIn(cmd, "ptcpt_typ_cd_id_in", DbType.Decimal, (object)typeCodeId ?? DBNull.Value)); } // Execute a scalar ptcpt.Id = Convert.ToDecimal(cmd.ExecuteScalar()); // Register an alternate identifier if they exist // normalize alt identifiers, remove duplicates for (int i = ptcpt.AlternateIdentifiers.Count - 1; i > 0; i--) { if (ptcpt.AlternateIdentifiers.Count(o => o.Domain.Equals(ptcpt.AlternateIdentifiers[i].Domain) || o.Identifier.Equals(ptcpt.AlternateIdentifiers[i].Identifier)) > 1) { ptcpt.AlternateIdentifiers.RemoveAt(i); } } foreach (var id in ptcpt.AlternateIdentifiers) { CreateAlternateIdentifier(conn, tx, ptcpt.Id, id); } // Register all telecom addresses if (ptcpt.TelecomAddresses != null) { foreach (var tel in ptcpt.TelecomAddresses) { CreateTelecommunicationsAddress(conn, tx, tel, ptcpt.Id); } } } finally { cmd.Dispose(); } }
/// <summary> /// Create organization scoper /// </summary> private MARC.Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Organization CreateOrganization(HealthcareParticipant scoper, List <MARC.Everest.Connectors.IResultDetail> details) { if (scoper == null) { return(null); } PN tName = null; if (scoper.LegalName != null) { tName = CreatePN(scoper.LegalName, details); } var id = scoper.AlternateIdentifiers.Find(o => o.Domain != this.m_configService.OidRegistrar.GetOid("CR_PID").Oid); // Basic return value var retVal = new MARC.Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Organization( SET <II> .CreateSET(CreateII(id, details)), scoper.Type != null ? CreateCD <String>(scoper.Type, details) : null, tName != null ? BAG <ON> .CreateBAG(new ON(tName.Use[0], tName.Part)) : null, null ); // Find all representatives foreach (HealthcareParticipant rep in scoper.FindAllComponents(HealthServiceRecordSiteRoleType.RepresentitiveOf)) { var cp = new MARC.Everest.RMIM.UV.NE2008.COCT_MT150003UV03.ContactParty( CreateIISet(rep.AlternateIdentifiers, details), rep.Type != null ? CreateCD <String>(rep.Type, details) : null, rep.PrimaryAddress != null ? BAG <AD> .CreateBAG(CreateAD(rep.PrimaryAddress, details)) : null, null, null ); // Add telecoms if (rep.TelecomAddresses != null) { cp.Telecom = new BAG <TEL>(); foreach (var tel in rep.TelecomAddresses) { cp.Telecom.Add(CreateTEL(tel, details)); } } // Person info if (rep.Classifier == HealthcareParticipant.HealthcareParticipantType.Person && rep.LegalName != null) { cp.ContactPerson = new MARC.Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Person( BAG <EN> .CreateBAG(CreatePN(rep.LegalName, details)) ); } retVal.ContactParty.Add(cp); } return(retVal); }
/// <summary> /// Create provider organization /// </summary> private Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Organization CreateProviderOrganization(HealthcareParticipant providerOrg) { var contactParties = providerOrg.FindAllComponents(SVC.Core.ComponentModel.HealthServiceRecordSiteRoleType.RepresentitiveOf); // Construct var retVal = new Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Organization( CreateIISet(providerOrg.AlternateIdentifiers), CreateCD <String>(providerOrg.Type), BAG <ON> .CreateBAG(CreateON(providerOrg.LegalName)), null ); // Converts the contact party(ies) foreach (HealthcareParticipant cp in contactParties) { var contact = new Everest.RMIM.UV.NE2008.COCT_MT150003UV03.ContactParty( CreateIISet(cp.AlternateIdentifiers), CreateCD <String>(cp.Type), BAG <AD> .CreateBAG(CreateAD(cp.PrimaryAddress)), null, null); // Add tel addresses to the contact parties if (cp.TelecomAddresses != null) { contact.Telecom = new BAG <TEL>(); foreach (var tel in cp.TelecomAddresses) { contact.Telecom.Add(CreateTEL(tel)); } } // Person? if (cp.Classifier == HealthcareParticipant.HealthcareParticipantType.Person) { contact.ContactPerson = new Everest.RMIM.UV.NE2008.COCT_MT150003UV03.Person( BAG <EN> .CreateBAG(CreatePN(cp.LegalName)) ); } retVal.ContactParty.Add(contact); } return(retVal); }