예제 #1
0
        /// <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());
        }