/// <summary> /// Create the interaction /// </summary> public MARC.Everest.Interfaces.IInteraction Create(MARC.Everest.Interfaces.IInteraction request, RegistryQueryResult results, List <MARC.Everest.Connectors.IResultDetail> details) { // GEt the config services ISystemConfigurationService configService = Context.GetService(typeof(ISystemConfigurationService)) as ISystemConfigurationService; 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()); CaDeComponentUtil dCompUtil = new CaDeComponentUtil(); dCompUtil.Context = this.Context; PRPA_IN101103CA rqst = request as PRPA_IN101103CA; // Convert results to HL7v3 foreach (RegistrationEvent res in results.Results) { var retRec = new MARC.Everest.RMIM.CA.R020403.MFMI_MT700746CA.Subject2 <MARC.Everest.RMIM.CA.R020403.PRPA_MT101104CA.IdentifiedEntity>( dCompUtil.CreateRegistrationEvent(res, details) ); if (retRec.RegistrationEvent == null) { retRec = new MARC.Everest.RMIM.CA.R020403.MFMI_MT700746CA.Subject2 <MARC.Everest.RMIM.CA.R020403.PRPA_MT101104CA.IdentifiedEntity>( new MARC.Everest.RMIM.CA.R020403.MFMI_MT700746CA.RegistrationEvent <MARC.Everest.RMIM.CA.R020403.PRPA_MT101104CA.IdentifiedEntity>() { NullFlavor = NullFlavor.NoInformation } ); } retHl7v3.Add(retRec); } // HACK: Sort by confidence score (if present) retHl7v3.Sort((a, b) => b.RegistrationEvent.Subject.registeredRole.SubjectOf.ObservationEvent.Value.CompareTo(a.RegistrationEvent.Subject.registeredRole.SubjectOf.ObservationEvent.Value)); // Create the response PRPA_IN101104CA response = new PRPA_IN101104CA ( Guid.NewGuid(), DateTime.Now, ResponseMode.Immediate, PRPA_IN101104CA.GetInteractionId(), PRPA_IN101104CA.GetProfileId(), ProcessingID.Production, AcknowledgementCondition.Never, MessageUtil.CreateReceiver(rqst.Sender), MessageUtil.CreateSender(rqst.Receiver.Telecom == null ? null : new Uri(rqst.Receiver.Telecom.Value), configService), new MARC.Everest.RMIM.CA.R020403.MCCI_MT002200CA.Acknowledgement( details.Count(a => a.Type == ResultDetailType.Error) == 0 ? AcknowledgementType.ApplicationAcknowledgementAccept : AcknowledgementType.ApplicationAcknowledgementError, new MARC.Everest.RMIM.CA.R020403.MCCI_MT002200CA.TargetMessage(request.Id) ) ); response.Acknowledgement.AcknowledgementDetail = MessageUtil.CreateAckDetails(details.ToArray()); response.controlActEvent = PRPA_IN101104CA.CreateControlActEvent( new II(configService.Custodianship.Id.Domain, Guid.NewGuid().ToString()), PRPA_IN101104CA.GetTriggerEvent(), new MARC.Everest.RMIM.CA.R020403.QUQI_MT120008CA.QueryAck( rqst.controlActEvent.QueryByParameter.QueryId, results.TotalResults == 0 ? QueryResponse.NoDataFound : (AcknowledgementType)response.Acknowledgement.TypeCode == AcknowledgementType.ApplicationAcknowledgementError ? QueryResponse.ApplicationError : QueryResponse.DataFound, results.TotalResults, results.Results.Count, results.TotalResults - results.Results.Count - results.StartRecordNumber ), rqst.controlActEvent.QueryByParameter ); response.controlActEvent.LanguageCode = MessageUtil.GetDefaultLanguageCode(this.Context); if (details.Count(o => o is DetectedIssueResultDetail) > 0) { response.controlActEvent.SubjectOf.AddRange(MessageUtil.CreateDetectedIssueEventsQuery(details.OfType <DetectedIssueResultDetail>().Select(o => o.Issue).ToList())); } response.controlActEvent.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_IN101103CA instance = new PRPA_IN101103CA( Guid.NewGuid(), DateTime.Now, ResponseMode.Immediate, PRPA_IN101103CA.GetInteractionId(), PRPA_IN101103CA.GetProfileId(), ProcessingID.Debugging, AcknowledgementCondition.Always, new Receiver() { Telecom = new TEL("http://cr.marc-hi.ca:8080/cr"), Device = new Device2( new II("1.3.6.1.4.1.33349.3.1.1.20.4", "CR-FAKE"), "MARC-HI Client Registry", null ) }, new Sender() { Telecom = new TEL() { NullFlavor = NullFlavor.NoInformation }, Device = new Device1( new II("1.2.3.4.5.4", "Sample"), "Everest Sample", null, null, null, "An Example" ) }, new ControlActEvent <MARC.Everest.RMIM.CA.R020402.PRPA_MT101103CA.ParameterList>( Guid.NewGuid(), PRPA_IN101103CA.GetTriggerEvent(), new Author(DateTime.Now), new MARC.Everest.RMIM.CA.R020402.QUQI_MT120008CA.QueryByParameter <MARC.Everest.RMIM.CA.R020402.PRPA_MT101103CA.ParameterList>( Guid.NewGuid(), ResponseModality.RealTime, 10, QueryRequestLimit.Record, new MARC.Everest.RMIM.CA.R020402.PRPA_MT101103CA.ParameterList() ) )); instance.controlActEvent.EffectiveTime = new IVL <TS>(DateTime.Now); // Set the author instance.controlActEvent.Author.SetAuthorPerson( SET <II> .CreateSET(new II("1.3.6.1.4.1.21367.2010.3.2.202", "0008")), new MARC.Everest.RMIM.CA.R020402.COCT_MT090102CA.Person( new PN(EntityNameUse.License, new ENXP[] { new ENXP("Birth", EntityNamePartType.Family), new ENXP("John", EntityNamePartType.Given) } ), null ) ); // Set the filter for given then family foreach (var enpt in new EntityNamePartType[] { EntityNamePartType.Given, EntityNamePartType.Family }) { instance.Id = Guid.NewGuid(); instance.controlActEvent.QueryByParameter.QueryId = Guid.NewGuid(); // Set the name instance.controlActEvent.QueryByParameter.parameterList.PersonName.Clear(); instance.controlActEvent.QueryByParameter.parameterList.PersonName.Add( new MARC.Everest.RMIM.CA.R020402.PRPA_MT101103CA.PersonName( new PN(EntityNameUse.Legal, new ENXP[] { new ENXP(filter, enpt) }) ) ); // Make the query PRPA_IN101104CA response = this.SendReceive(connector, instance) as PRPA_IN101104CA; // Interpret the response code if (response.Acknowledgement.TypeCode != AcknowledgementType.ApplicationAcknowledgementAccept || response.controlActEvent == null) { continue; } foreach (var subj in response.controlActEvent.Subject) { // Ensure that the relationships exist if (subj.RegistrationEvent == null || subj.RegistrationEvent.Subject == null || subj.RegistrationEvent.Subject.registeredRole == null || subj.RegistrationEvent.Subject.registeredRole.IdentifiedPerson == null || subj.RegistrationEvent.Subject.registeredRole.IdentifiedPerson.Name == null || subj.RegistrationEvent.Subject.registeredRole.IdentifiedPerson.Name.IsEmpty) { continue; } // Add the formatted name var legalName = subj.RegistrationEvent.Subject.registeredRole.IdentifiedPerson.Name.Find(o => o.Use != null && o.Use.Contains(EntityNameUse.Legal)); if (legalName == null) { legalName = subj.RegistrationEvent.Subject.registeredRole.IdentifiedPerson.Name[0]; } retVal.Add(String.Format("{0}@{1} - {2}", subj.RegistrationEvent.Subject.registeredRole.Id[0].Root, subj.RegistrationEvent.Subject.registeredRole.Id[0].Extension, legalName.ToString("{FAM}, {GIV}"))); } } // Now return results return(retVal.ToArray()); }