예제 #1
0
 public HL7V2Controller(IBusinessEngine IBusinessEngine,
                        IBusinessEngineInput IBusinessEngineInput,
                        IOptions <IcimsSiteContext> IcimsSiteContext,
                        IBusinessEngineOutcome IBusinessOutcomeError,
                        ILogger <HL7V2Controller> ILogger)
 {
     this.IBusinessEngine       = IBusinessEngine;
     this.IBusinessEngineInput  = IBusinessEngineInput;
     this.IcimsSiteContext      = IcimsSiteContext;
     this.IBusinessOutcomeError = IBusinessOutcomeError;
     this.ILogger = ILogger;
 }
예제 #2
0
        public IBusinessEngineOutcome Process(IBusinessEngineInput BusinessEngineInput)
        {
            //ILogger.LogDebug("### ANGUS TEST ####");
            //Parse the V2 Message
            try
            {
                Msg = Creator.Message(BusinessEngineInput.HL7V2Message);
            }
            catch (Exception Exec)
            {
                IBusinessOutcome.StatusCode = StatusCode.error;
                IBusinessOutcome.Message    = Exec.Message;
                return(IBusinessOutcome);
            }

            //Check it is an ADT message type
            if (Msg.MessageType != "ADT")
            {
                IBusinessOutcome.StatusCode = StatusCode.error;
                IBusinessOutcome.Message    = $"Only message types of ADT are supported by the {IcimsSiteContext.Value.NameOfThisService}. The message type received was {Msg.MessageType}";
                return(IBusinessOutcome);
            }

            DomainModel = new DomainModel();
            DomainModel.HL7Message.MessageControlId = Msg.MessageControlID;
            DomainModel.HL7Message.MessageDateTime  = Msg.MessageCreationDateTime;

            switch (Msg.MessageTrigger)
            {
            case "A04":
                if (AddProcessing())
                {
                    Common.Models.IcimsInterface.Add Add = IIcimsInterfaceModelMapper.MapToAdd(DomainModel);
                    Task <IIcimsHttpClientOutcome>   IcimsHttpCleintTaskResult = IIcimsHttpClient.PostAddAsync(Add.GetValueDictionary());
                    IcimsHttpCleintTaskResult.Wait();
                    IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result;
                    IBusinessOutcome.StatusCode    = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome);
                    IBusinessOutcome.Message       = IcimsHttpClientOutcome.Message;
                    IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse;
                }
                break;

            case "A08":
                if (UpdateProcessing())
                {
                    Common.Models.IcimsInterface.Update Update = IIcimsInterfaceModelMapper.MapToUpdate(DomainModel);
                    Task <IIcimsHttpClientOutcome>      IcimsHttpCleintTaskResult = IIcimsHttpClient.PostUpdateAsync(Update.GetValueDictionary());
                    IcimsHttpCleintTaskResult.Wait();
                    IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result;
                    IBusinessOutcome.StatusCode    = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome);
                    IBusinessOutcome.Message       = IcimsHttpClientOutcome.Message;
                    IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse;
                }
                break;

            case "A40":
                if (MergeProcessing())
                {
                    Common.Models.IcimsInterface.Merge Merge = IIcimsInterfaceModelMapper.MapToMerge(DomainModel);
                    Task <IIcimsHttpClientOutcome>     IcimsHttpCleintTaskResult = IIcimsHttpClient.PostMergeAsync(Merge.GetValueDictionary());
                    IcimsHttpCleintTaskResult.Wait();
                    IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result;
                    IBusinessOutcome.StatusCode    = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome);
                    IBusinessOutcome.Message       = IcimsHttpClientOutcome.Message;
                    IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse;
                }
                break;

            default:
                IBusinessOutcome.StatusCode    = StatusCode.error;
                IBusinessOutcome.Message       = $"Only ADT message of event types A04. A08 and A40 are supported by the {IcimsSiteContext.Value.NameOfThisService}. The message event received was {Msg.MessageTrigger}";
                IBusinessOutcome.IcimsResponse = null;
                return(IBusinessOutcome);
            }

            return(IBusinessOutcome);
        }