示例#1
0
 private ENCOUNTERS(PLACER_DETAIL placerDetail, PRE_TEST preTest, HIV_TESTS hivTests, NewReferral referral, List <NewTracing> tracing, NewLinkage linkage)
 {
     PLACER_DETAIL = placerDetail;
     PRE_TEST      = preTest;
     HIV_TESTS     = hivTests;
     REFERRAL      = referral;
     TRACING       = tracing;
     LINKAGE       = linkage;
 }
        private async Task <IndexClientMessage> CreatePretestEncounters(MESSAGE_HEADER header,
                                                                        PATIENT_IDENTIFICATION pid, ClientStage stagedClient, ClientPretestStage pretest,
                                                                        params LoadAction[] actions)
        {
            ENCOUNTERS encounter = null;

            //  PLACER_DETAIL
            var placerDetail = PLACER_DETAIL.Create(pretest.UserId, pretest.Id);

            //  PRE_TEST
            PRE_TEST preTest = null;

            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.Pretest))
            {
                preTest = PRE_TEST.Create(pretest);
            }

            //  HIV_TESTS
            HIV_TESTS hivTests = null;

            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.Testing))
            {
                var allfinalTests = await _clientFinalTestStageExtractor.Extract(stagedClient.ClientId);

                var alltests = await _clientTestingStageExtractor.Extract();

                var finalTest = allfinalTests.Where(x => x.PretestEncounterId == pretest.Id).ToList()
                                .LastOrDefault();

                var tests = alltests.Where(x => x.PretestEncounterId == pretest.Id).ToList();

                if (null != finalTest && tests.Any())
                {
                    hivTests = HIV_TESTS.Create(tests, finalTest);
                }
            }

            // GET THE LAST ONE


            encounter = ENCOUNTERS.Create(placerDetail, preTest, hivTests, null, new List <NewTracing>(), null);

            return(new IndexClientMessage(header,
                                          new List <NEWCLIENT> {
                NEWCLIENT.Create(pid, encounter)
            }, stagedClient.ClientId));
        }
        public async Task <IEnumerable <FamilyClientMessage> > Load(Guid?htsClientId = null, params LoadAction[] actions)
        {
            var messages = new List <FamilyClientMessage>();

            if (!actions.Any())
            {
                actions = new[] { LoadAction.All }
            }
            ;

            //  Set Facility
            var facility = _practiceRepository.GetDefault();

            if (null == facility)
            {
                throw new Exception($"Default Faciltity Not found");
            }

            //      MESSAGE_HEADER

            var facilityCode = facility.Code;
            var header       = MESSAGE_HEADER.Create(facilityCode);

            //      CLIENT

            var familyMembers = _clientStageRelationshipRepository.GetAll(x => !x.IsPartner);

            if (!htsClientId.IsNullOrEmpty())
            {
                familyMembers = familyMembers.Where(x => x.SecondaryClientId == htsClientId);
            }

            foreach (var familyMember in familyMembers)
            {
                var stagedClient = _clientStageRepository.GetQueued(familyMember.SecondaryClientId);

                if (null != stagedClient && !stagedClient.IsIndex)
                {
                    header.UpdateMfl(stagedClient.SiteCode);

                    #region PATIENT_IDENTIFICATION

                    var pid = PARTNER_FAMILY_PATIENT_IDENTIFICATION.Create(stagedClient, familyMember.IndexClientId,
                                                                           familyMember.Relation);

                    #endregion

                    FAMILY_ENCOUNTER encounter = null;

                    if (!actions.Contains(LoadAction.RegistrationOnly))
                    {
                        PLACER_DETAIL         placerDetail    = null;
                        FAMILY_SCREENING      familyScreening = null;
                        List <FAMILY_TRACING> familyTracings  = new List <FAMILY_TRACING>();

                        #region ENCOUNTERS

                        var screening = await _clientFamilyScreeningStageExtractor.Extract(stagedClient.ClientId);

                        var screeningStage = screening.OrderBy(x => x.ScreeningDate).LastOrDefault();

                        //  PLACER_DETAIL

                        if (null != screeningStage)
                        {
                            placerDetail = PLACER_DETAIL.Create(screeningStage.UserId, screeningStage.Id);

                            //  FAMILY_SCREENING

                            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.ContactScreenig))
                            {
                                familyScreening = FAMILY_SCREENING.Create(screeningStage);
                            }
                        }

                        //  FAMILY_TRACING

                        if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.ContactTracing))
                        {
                            var allTracing = await _clientFamilyTracingStageExtractor.Extract(stagedClient.ClientId);

                            if (allTracing.Any())
                            {
                                familyTracings = FAMILY_TRACING.Create(allTracing.ToList());
                            }
                        }

                        #endregion

                        encounter = new FAMILY_ENCOUNTER(placerDetail, familyScreening, familyTracings);
                    }

                    messages.Add(new FamilyClientMessage(header,
                                                         new List <FAMILY> {
                        new FAMILY(pid, encounter)
                    }, stagedClient.ClientId));
                }
            }

            return(messages);
        }
示例#4
0
 private PretestMessage(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, PRE_TEST preTest) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     PRE_TEST            = preTest;
 }
示例#5
0
 private TracingMessage(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, List <NewTracing> tracings) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     TRACING             = tracings;
 }
        private async Task <IndexClientMessage> CreateNonPretestEncounters(MESSAGE_HEADER header, PATIENT_IDENTIFICATION pid, ClientStage stagedClient, ClientPretestStage lastPretest, params LoadAction[] actions)
        {
            ENCOUNTERS encounter = null;

            //  PLACER_DETAIL

            var lastplacerDetail = PLACER_DETAIL.Create(lastPretest.UserId, lastPretest.Id);

            //  NewReferral
            NewReferral newReferral = null;

            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.Referral))
            {
                var allReferrals = await _clientReferralStageExtractor.Extract(stagedClient.ClientId);

                if (allReferrals.Any())
                {
                    var referrall = allReferrals.LastOrDefault();
                    newReferral = NewReferral.Create(referrall);
                }
            }

            //  NewTracing
            var newTracings = new List <NewTracing>();

            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.Tracing))
            {
                var allTracing = await _clientTracingStageExtractor.Extract(stagedClient.ClientId);

                if (allTracing.Any())
                {
                    newTracings = NewTracing.Create(allTracing.ToList());
                }
            }

            // NewLinkage
            NewLinkage newLinkage = null;

            if (actions.Contains(LoadAction.All) || actions.Contains(LoadAction.Linkage))
            {
                var allLinkages = await _clientLinkageStageExtractor.Extract(stagedClient.ClientId);

                if (allLinkages.Any())
                {
                    var linkage = allLinkages.LastOrDefault();
                    newLinkage = linkage.HasData ? NewLinkage.Create(linkage) : null;
                }
            }

            if (null == newReferral && !newTracings.Any() && null == newLinkage)
            {
                return(null);
            }

            encounter = ENCOUNTERS.Create(lastplacerDetail, null, null, newReferral, newTracings, newLinkage);

            return(new IndexClientMessage(header,
                                          new List <NEWCLIENT> {
                NEWCLIENT.Create(pid, encounter)
            }, stagedClient.ClientId));
        }
 public PARTNER_ENCOUNTER(PLACER_DETAIL placerDetail, PARTNER_SCREENING partnerScreening, List <PARTNER_TRACING> tracing)
 {
     PLACER_DETAIL     = placerDetail;
     PARTNER_SCREENING = partnerScreening;
     TRACING           = tracing;
 }
示例#8
0
 private TestsMessage(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, HIV_TESTS tests) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     HIV_TESTS           = tests;
 }
 public PartnerScreening(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, PARTNER_SCREENING familyScreening) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     PARTNER_SCREENING   = familyScreening;
 }
示例#10
0
 public static ENCOUNTERS Create(PLACER_DETAIL placerDetail, PRE_TEST preTest, HIV_TESTS hivTests, NewReferral referral, List <NewTracing> tracing, NewLinkage linkage)
 {
     return(new ENCOUNTERS(placerDetail, preTest, hivTests, referral, tracing, linkage));
 }
示例#11
0
 public PartnerTracing(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, List <PARTNER_TRACING> tracings) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     TRACING             = tracings;
 }
示例#12
0
 public FAMILY_ENCOUNTER(PLACER_DETAIL placerDetail, FAMILY_SCREENING familyScreening, List <FAMILY_TRACING> tracing)
 {
     PLACER_DETAIL    = placerDetail;
     FAMILY_SCREENING = familyScreening;
     TRACING          = tracing;
 }
示例#13
0
 private ReferralMessage(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, NewReferral referral) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     REFERRAL            = referral;
 }
示例#14
0
 private LinkageMessage(MESSAGE_HEADER messageHeader, Guid clientId, List <INTERNAL_PATIENT_ID> patientIds, PLACER_DETAIL placerDetail, NewLinkage linkage) : base(messageHeader, clientId)
 {
     INTERNAL_PATIENT_ID = patientIds;
     PLACER_DETAIL       = placerDetail;
     LINKAGE             = linkage;
 }