Beispiel #1
0
        public async Task <Result <List <PrepEncountersView> > > Handle(GetPrepEncountersCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try

                {
                    if (request.fromDate != null && request.toDate != null)
                    {
                        list = await _prepUnitOfWork.Repository <PrepEncountersView>()
                               .Get(x => x.PatientId == request.PatientId && x.ServiceAreaId == request.ServiceAreaId &&
                                    x.EncounterStartTime.Value <= request.toDate && x.EncounterStartTime.Value >= request.fromDate).Take(300).ToListAsync();
                    }
                    else
                    {
                        list = await _prepUnitOfWork.Repository <PrepEncountersView>()
                               .Get(x => x.PatientId == request.PatientId && x.ServiceAreaId == request.ServiceAreaId).ToListAsync();
                    }

                    return(Result <List <PrepEncountersView> > .Valid(list));
                }
                catch (Exception e)
                {
                    Log.Error($"Could not fetch PrEP Encounters for PatientId: {request.PatientId}");
                    return(Result <List <PrepEncountersView> > .Invalid($"Could not fetch PrEP Encounters for PatientId: {request.PatientId}"));
                }
            }
        }
        public async Task <Result <CheckinOutCome> > Handle(PatientCheckinCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var servicecheckin = await _prepUnitOfWork.Repository <ServiceCheckin>().Get(x => x.PatientId == request.PatientId && x.ServiceId == request.ServiceId && x.VisitDate == request.VisitDate).FirstOrDefaultAsync();

                if (servicecheckin != null)
                {
                    servicecheckin.Start      = DateTime.Now;
                    servicecheckin.Status     = request.Status;
                    servicecheckin.VisitDate  = request.VisitDate;
                    servicecheckin.PatientId  = request.PatientId;
                    servicecheckin.ServiceId  = request.ServiceId;
                    servicecheckin.EMRType    = request.EmrType;
                    servicecheckin.Active     = true;
                    servicecheckin.DeleteFlag = false;
                    servicecheckin.CreatedBy  = request.UserId;

                    _prepUnitOfWork.Repository <ServiceCheckin>().Update(servicecheckin);
                    await _prepUnitOfWork.SaveAsync();

                    Id       = servicecheckin.Id;
                    message += "Successfully checked In";
                }
                else
                {
                    ServiceCheckin servi = new ServiceCheckin();
                    servi.Status     = request.Status;
                    servi.VisitDate  = request.VisitDate;
                    servi.PatientId  = request.PatientId;
                    servi.ServiceId  = request.ServiceId;
                    servi.EMRType    = request.EmrType;
                    servi.Active     = true;
                    servi.DeleteFlag = false;
                    servi.CreatedBy  = request.UserId;
                    servi.Start      = DateTime.Now;
                    servi.Status     = request.Status;

                    await _prepUnitOfWork.Repository <ServiceCheckin>().AddAsync(servi);

                    await _prepUnitOfWork.SaveAsync();

                    Id       = servi.Id;
                    message += "Succeessfully checked in";
                }

                return(Result <CheckinOutCome> .Valid(new CheckinOutCome()
                {
                    ServiceCheckInId = Id,
                    Message = message
                }));
            }
            catch (Exception ex)
            {
                return(Result <CheckinOutCome> .Invalid(ex.Message));
            }
        }
Beispiel #3
0
        public async Task <Result <GetRiskAssessmentResponse> > Handle(GetRiskAssessmentDetailsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var RiskAssessmentList = await _prepUnitOfWork.Repository <RiskAssessment>().Get(x => x.PatientMasterVisitId == request.PatientMasterVisitId && x.PatientId == request.PatientId && x.DeleteFlag == false).ToListAsync();

                if (RiskAssessmentList != null && RiskAssessmentList.Count > 0)
                {
                    RiskAssessmentList.ForEach(x =>
                    {
                        RiskAssessmentDetails rd = new RiskAssessmentDetails();
                        rd.Id = x.Id;
                        rd.RiskAssessmentid = x.RiskAssessmentId;
                        rd.Value            = x.RiskAssessmentValue;
                        rd.DeleteFlag       = x.DeleteFlag;
                        rd.Comment          = x.Comment;
                        rd.Date             = x.AssessmentDate;

                        rads.Add(rd);
                    });
                }

                var RiskComments = await _prepUnitOfWork.Repository <PatientClinicalNotes>().Get(x => x.PatientMasterVisitId == request.PatientMasterVisitId && x.PatientId == request.PatientId && x.DeleteFlag == false).ToListAsync();

                if (RiskComments != null && RiskComments.Count > 0)
                {
                    RiskComments.ForEach(x =>
                    {
                        Notes nt = new Notes
                        {
                            Comment    = x.ClinicalNotes,
                            Id         = x.Id,
                            DeleteFlag = x.DeleteFlag
                        };
                        pcn.Add(nt);
                    });
                }


                return(Result <GetRiskAssessmentResponse> .Valid(new GetRiskAssessmentResponse
                {
                    VisitDate = visitDate,
                    RiskAssessmentDetails = rads,
                    ClinicalNotes = pcn
                }));
            }
            catch (Exception ex)
            {
                {
                    string message = $"An error  has Occured" + ex.Message;


                    return(await Task.FromResult(Result <GetRiskAssessmentResponse> .Invalid(message)));
                }
            }
        }
        public async Task <Result <CheckOutResponse> > Handle(PatientCheckOutCommand request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.Id > 0)
                {
                    var servicechecked = await _prepUnitOfWork.Repository <ServiceCheckin>().Get(x => x.Id == request.Id).FirstOrDefaultAsync();

                    if (servicechecked != null)
                    {
                        servicechecked.Status     = request.Status;
                        servicechecked.End        = DateTime.Now;
                        servicechecked.DeleteFlag = request.DeleteFlag;

                        _prepUnitOfWork.Repository <ServiceCheckin>().Update(servicechecked);
                        await _prepUnitOfWork.SaveAsync();

                        Id      = servicechecked.Id;
                        message = "Patient Successfully checked out";
                    }
                }
                else
                {
                    var serviceChecked = await _prepUnitOfWork.Repository <ServiceCheckin>().Get(x => x.PatientId == request.PatientId &&
                                                                                                 x.ServiceId == request.ServiceId && x.VisitDate.ToString() == request.VisitDate.ToString()).FirstOrDefaultAsync();

                    if (serviceChecked != null)
                    {
                        serviceChecked.Status     = request.Status;
                        serviceChecked.End        = DateTime.Now;
                        serviceChecked.DeleteFlag = request.DeleteFlag;
                        _prepUnitOfWork.Repository <ServiceCheckin>().Update(serviceChecked);
                        await _prepUnitOfWork.SaveAsync();

                        Id      = serviceChecked.Id;
                        message = "Patient Successfully checked out";
                    }
                }



                return(Result <CheckOutResponse> .Valid(new CheckOutResponse()
                {
                    Id = Id,
                    Message = message
                }));
            }
            catch (Exception ex)
            {
                return(Result <CheckOutResponse> .Invalid(ex.Message));
            }
        }
        public async Task <Result <RefillResponse> > Handle(GetMonthlyRefillDetailsCommand request, CancellationToken cancellationToken)
        {
            try
            {
                List <MonthlyRefillDetailsResponse> itemdetails = new List <MonthlyRefillDetailsResponse>();
                var clinicalnotes = await _prepUnitOfWork.Repository <PatientClinicalNotes>().Get(x => x.PatientId == request.PatientId && x.PatientMasterVisitId == request.PatientMasterVisitId && x.ServiceAreaId == request.ServiceAreaId && x.DeleteFlag == false).FirstOrDefaultAsync();

                var adherence = await _prepUnitOfWork.Repository <AdherenceOutcome>().Get(x => x.PatientId == request.PatientId && x.PatientMasterVisitId == request.PatientMasterVisitId && x.DeleteFlag == false)
                                .OrderByDescending(x => x.Id).FirstOrDefaultAsync();

                if (adherence != null)
                {
                    MonthlyRefillDetailsResponse mrd = new MonthlyRefillDetailsResponse();
                    mrd.PatientId            = request.PatientId;
                    mrd.PatientMasterVisitId = request.PatientMasterVisitId;
                    mrd.ItemId   = adherence.Score;
                    mrd.MasterId = adherence.AdherenceType;
                    mrd.Comment  = adherence.ScoreDescription;

                    itemdetails.Add(mrd);
                }


                var patientscreeninglist = await _prepUnitOfWork.Repository <PatientScreening>().Get(x => x.PatientId == request.PatientId && x.PatientMasterVisitId == request.PatientMasterVisitId && x.DeleteFlag == false).ToListAsync();

                if (patientscreeninglist.Count > 0)
                {
                    patientscreeninglist.ForEach(x =>
                    {
                        MonthlyRefillDetailsResponse mrd = new MonthlyRefillDetailsResponse();
                        mrd.PatientId            = request.PatientId;
                        mrd.PatientMasterVisitId = request.PatientMasterVisitId;
                        mrd.ItemId   = x.ScreeningValueId;
                        mrd.MasterId = x.ScreeningTypeId;
                        mrd.Comment  = x.Comment;

                        itemdetails.Add(mrd);
                    });
                }
                return(Result <RefillResponse> .Valid(new RefillResponse
                                                      { refilldetails = itemdetails,
                                                        clinicalnote = clinicalnotes }));
            }
            catch (Exception ex)
            {
                return(Result <RefillResponse> .Invalid(ex.Message));
            }
        }
Beispiel #6
0
        public async Task <Result <PatientCircumcisionStatus> > Handle(AddPatientCircumcisionStatusCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    if (request.Id.HasValue && request.Id.Value > 0)
                    {
                        var result = await _prepUnitOfWork.Repository <PatientCircumcisionStatus>()
                                     .FindByIdAsync(request.Id.Value);

                        if (result != null)
                        {
                            result.ClientCircumcised = request.ClientCircumcised;
                            result.ReferredToVMMC    = request.ReferredToVMMC;

                            _prepUnitOfWork.Repository <PatientCircumcisionStatus>().Update(result);
                            await _prepUnitOfWork.SaveAsync();

                            return(Result <PatientCircumcisionStatus> .Valid(result));
                        }
                    }

                    PatientCircumcisionStatus patientCircumcisionStatus = new PatientCircumcisionStatus()
                    {
                        PatientId         = request.PatientId,
                        ClientCircumcised = request.ClientCircumcised,
                        ReferredToVMMC    = request.ReferredToVMMC,
                        CreateDate        = request.CreateDate,
                        CreatedBy         = request.CreatedBy,
                        DeleteFlag        = request.DeleteFlag
                    };

                    await _prepUnitOfWork.Repository <PatientCircumcisionStatus>().AddAsync(patientCircumcisionStatus);

                    await _prepUnitOfWork.SaveAsync();

                    return(Result <PatientCircumcisionStatus> .Valid(patientCircumcisionStatus));
                }
                catch (Exception ex)
                {
                    string message = $"An error occured while saving prep circumcision status request for patientId {request.PatientId}";
                    Log.Error(ex, message);

                    return(Result <PatientCircumcisionStatus> .Invalid(message));
                }
            }
        }
        public async Task <Result <RiskAssessmentExistResponse> > Handle(CheckRiskAssessmentEncounterCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var EncounterExists = await _prepUnitOfWork.Repository <PrepRiskAssessmentEncounterView>().Get(x => x.PersonId == request.PersonId && x.VisitDate.Value.Day == DateTime.Now.Day && x.VisitDate.Value.Month == DateTime.Now.Month && x.VisitDate.Value.Year == DateTime.Now.Year).ToListAsync();

                if (EncounterExists != null)
                {
                    message += "The risk assessment  form exists";
                }
                else
                {
                    message += "risk assessment form does not exist";
                }


                return(Result <RiskAssessmentExistResponse> .Valid(new RiskAssessmentExistResponse()
                {
                    Message = message,
                    Encounters = EncounterExists
                }));
            }
            catch (Exception ex)
            {
                string message = $"An error  has Occured" + ex.Message;


                return(await Task.FromResult(Result <RiskAssessmentExistResponse> .Invalid(message)));
            }
        }
        public async Task <Result <PatientPrEPEvents> > Handle(GetPrepStatusDateEventCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    var prepevents = await _prepUnitOfWork.Repository <PatientPrEPStatus>().Get(x =>
                                                                                                x.PatientId == request.PatientId &&
                                                                                                x.DeleteFlag == false && x.PrepStatusToday == request.startitemId).OrderByDescending(x => x.PatientEncounterId).ToListAsync();

                    var prepInitiation = await _prepUnitOfWork.Repository <PatientARVHistory>().Get(x => x.PatientId == request.PatientId && x.Purpose == "PrEP" && x.DeleteFlag == false)
                                         .OrderByDescending(x => x.PatientMasterVisitId).OrderByDescending(x => x.CreateDate).ToListAsync();


                    if (prepInitiation.Count > 0)
                    {
                        InitiationDate = prepInitiation[0].InitiationDate;
                    }
                    PatientPrEPEvents pts = new PatientPrEPEvents();
                    if (prepevents.Count > 0)
                    {
                        pts.PatientEncounterId = prepevents[0].PatientEncounterId;
                        pts.PatientId          = prepevents[0].PatientId;
                        pts.Id = prepevents[0].Id;
                        if (prepevents[0].DateField == null)
                        {
                            pts.DateStarted = InitiationDate;
                        }
                        else
                        {
                            pts.DateStarted = prepevents[0].DateField;
                        }
                    }



                    return(Result <PatientPrEPEvents> .Valid(pts));
                }
                catch (Exception ex)
                {
                    Log.Error($"An error occured while trying to get prep status for PatientId: {request.PatientId} , exception: {ex.Message} {ex.InnerException}");
                    return(Result <PatientPrEPEvents> .Invalid($"An error occured while trying to get prep status for PatientId: {request.PatientId} "));
                }
            }
        }
        public async Task <Result <List <PrepRiskAssessmentEncounterView> > > Handle(RiskAssessmentVisitQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var RiskAssessmentEncounter = await _prepUnitOfWork.Repository <PrepRiskAssessmentEncounterView>().Get(x => x.PersonId == request.PersonId).OrderByDescending(x => x.VisitDate).Take(10).ToListAsync();


                return(await Task.FromResult(Result <List <PrepRiskAssessmentEncounterView> > .Valid(RiskAssessmentEncounter)));
            }
            catch (Exception ex)
            {
                return(await Task.FromResult(Result <List <PrepRiskAssessmentEncounterView> > .Invalid(ex.Message.ToString())));
            }
        }
Beispiel #10
0
        public async Task <Result <List <AdherenceView> > > Handle(GetPatientAdherenceOutcomeCommand request, CancellationToken cancellationToken)

        {
            using (_prepUnitOfWork)
            {
                try
                {
                    var results = await _prepUnitOfWork.Repository <AdherenceView>().Get(x => x.PatientId == request.PatientId).
                                  OrderByDescending(x => x.VisitDate).Take(2).ToListAsync();

                    return(Result <List <AdherenceView> > .Valid(results));
                }
                catch (Exception ex)
                {
                    return(Result <List <AdherenceView> > .Invalid(ex.Message));
                }
            }
        }
        public async Task <Result <PatientCircumcisionStatus> > Handle(GetPatientCircumcisionStatusCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    var result = await _prepUnitOfWork.Repository <PatientCircumcisionStatus>()
                                 .Get(x => x.PatientId == request.PatientId && x.DeleteFlag == false)
                                 .OrderByDescending(x => x.Id).FirstOrDefaultAsync();

                    return(Result <PatientCircumcisionStatus> .Valid(result));
                }
                catch (Exception e)
                {
                    Log.Error($"Could not fetch client circumcision status Exception: {e.Message}, InnerException {e.InnerException}");
                    return(Result <PatientCircumcisionStatus> .Invalid($"Could not fetch client circumcision status exception: {e.Message}"));
                }
            }
        }
Beispiel #12
0
        public async Task <Result <List <PatientPrEPStatus> > > Handle(GetPrepStatusCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    var prepstatus = await _prepUnitOfWork.Repository <PatientPrEPStatus>().Get(x =>
                                                                                                x.PatientId == request.PatientId && x.PatientEncounterId == request.PatientEncounterId &&
                                                                                                x.DeleteFlag == false).ToListAsync();

                    return(Result <List <PatientPrEPStatus> > .Valid(prepstatus));
                }
                catch (Exception ex)
                {
                    Log.Error($"An error occured while trying to get prep status for PatientId: {request.PatientId} and PatientEncounterId: {request.PatientEncounterId}, exception: {ex.Message} {ex.InnerException}");
                    return(Result <List <PatientPrEPStatus> > .Invalid($"An error occured while trying to get prep status for PatientId: {request.PatientId} and PatientEncounterId: {request.PatientEncounterId}"));
                }
            }
        }
Beispiel #13
0
        public async Task <Result <List <PrepEncountersView> > > Handle(GetPrepEncountersByVisitDateCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try

                {
                    if (request.visitDate != null)
                    {
                        list = await _prepUnitOfWork.Repository <PrepEncountersView>()
                               .Get(x => x.PatientId == request.PatientId && x.ServiceAreaId == request.ServiceAreaId &&
                                    x.VisitDate.Value.Day == request.visitDate.Value.Day && x.VisitDate.Value.Year == request.visitDate.Value.Year && x.VisitDate.Value.Month == request.visitDate.Value.Month).Take(300).ToListAsync();
                    }


                    return(Result <List <PrepEncountersView> > .Valid(list));
                }
                catch (System.Exception e)
                {
                    Log.Error($"Could not fetch PrEP Encounters for PatientId: {request.PatientId}");
                    return(Result <List <PrepEncountersView> > .Invalid($"Could not fetch PrEP Encounters for PatientId: {request.PatientId}"));
                }
            }
        }
Beispiel #14
0
        public async Task <Result <RiskAssessmentResponse> > Handle(RiskAssessmentVisitDetailCommand request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.PatientMasterVisitId > 0)
                {
                    int PatientMasterVisitId = request.PatientMasterVisitId;



                    if (request.riskAssessments.Count > 0)
                    {
                        foreach (var ra in request.riskAssessments)
                        {
                            var RiskAssessments = await _prepUnitOfWork.Repository <RiskAssessment>().Get(x => x.PatientMasterVisitId == PatientMasterVisitId && x.PatientId == request.PatientId &&
                                                                                                          x.Id == ra.Id).ToListAsync();


                            if (RiskAssessments != null && RiskAssessments.Count > 0)
                            {
                                foreach (var rass in RiskAssessments)
                                {
                                    rass.DeleteFlag          = ra.DeleteFlag;
                                    rass.RiskAssessmentId    = ra.RiskAssessmentid;
                                    rass.RiskAssessmentValue = ra.Value;
                                    rass.AssessmentDate      = ra.Date;
                                    rass.Comment             = ra.Comment;
                                    _prepUnitOfWork.Repository <RiskAssessment>().Update(rass);

                                    await _prepUnitOfWork.SaveAsync();
                                }
                            }
                            else
                            {
                                RiskAssessment riskass = new RiskAssessment();
                                riskass.PatientMasterVisitId = PatientMasterVisitId;
                                riskass.PatientId            = request.PatientId;
                                riskass.RiskAssessmentId     = ra.RiskAssessmentid;
                                riskass.RiskAssessmentValue  = ra.Value;
                                riskass.DeleteFlag           = ra.DeleteFlag;
                                riskass.CreateDate           = DateTime.Now;
                                riskass.Comment        = ra.Comment;
                                riskass.AssessmentDate = ra.Date;
                                await _prepUnitOfWork.Repository <RiskAssessment>().AddAsync(riskass);

                                await _prepUnitOfWork.SaveAsync();
                            }
                        }
                        _prepUnitOfWork.Save();

                        message += "The Risk Assessment Form Has Been Updated";
                    }

                    if (request.ClinicalNotes.Count > 0)
                    {
                        foreach (var clinicalnotes in request.ClinicalNotes)
                        {
                            var clinicalNotes = await _prepUnitOfWork.Repository <PatientClinicalNotes>().Get(x => x.PatientMasterVisitId == PatientMasterVisitId && x.PatientId == request.PatientId &&
                                                                                                              x.Id == clinicalnotes.Id).ToListAsync();

                            if (clinicalNotes != null && clinicalNotes.Count > 0)
                            {
                                foreach (var clinicaln in clinicalNotes)
                                {
                                    clinicaln.ClinicalNotes        = clinicalnotes.Comment;
                                    clinicaln.CreatedBy            = request.UserId;
                                    clinicaln.CreateDate           = DateTime.Now;
                                    clinicaln.DeleteFlag           = clinicalnotes.DeleteFlag;
                                    clinicaln.ServiceAreaId        = clinicaln.ServiceAreaId;
                                    clinicaln.PatientId            = request.PatientId;
                                    clinicaln.PatientMasterVisitId = PatientMasterVisitId;



                                    _prepUnitOfWork.Repository <PatientClinicalNotes>().Update(clinicaln);

                                    await _prepUnitOfWork.SaveAsync();
                                }
                            }
                            else
                            {
                                if (!String.IsNullOrEmpty(clinicalnotes.Comment))
                                {
                                    PatientClinicalNotes pcn = new PatientClinicalNotes();
                                    pcn.ClinicalNotes        = clinicalnotes.Comment;
                                    pcn.CreatedBy            = request.UserId;
                                    pcn.CreateDate           = DateTime.Now;
                                    pcn.DeleteFlag           = clinicalnotes.DeleteFlag;
                                    pcn.ServiceAreaId        = clinicalnotes.ServiceAreaId;
                                    pcn.PatientId            = request.PatientId;
                                    pcn.PatientMasterVisitId = PatientMasterVisitId;

                                    await _prepUnitOfWork.Repository <PatientClinicalNotes>().AddAsync(pcn);

                                    await _prepUnitOfWork.SaveAsync();
                                }
                            }
                            _prepUnitOfWork.Save();
                        }
                    }
                }

                return(Result <RiskAssessmentResponse> .Valid(new RiskAssessmentResponse
                {
                    PatientMasterVisitId = pmvId,
                    Message = message
                }));
            }
            catch (Exception ex)
            {
                {
                    string message = $"An error  has Occured" + ex.Message;


                    return(await Task.FromResult(Result <RiskAssessmentResponse> .Invalid(message)));
                }
            }
        }
        public async Task <Result <MonthlyRefillResponse> > Handle(AddMonthlyRefillCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var clinicalnotes = await _prepUnitOfWork.Repository <PatientClinicalNotes>().Get(x => x.PatientId == request.PatientId && x.ServiceAreaId == request.ServiceAreaId && x.PatientMasterVisitId == request.PatientMasterVisitId && x.DeleteFlag == false).ToListAsync();

                if (request.clinicalNotes.Count > 0)
                {
                    if (clinicalnotes.Count > 0)
                    {
                        foreach (var x  in clinicalnotes)
                        {
                            if (String.IsNullOrEmpty(request.clinicalNotes[0].remark) == true)
                            {
                                x.DeleteFlag = true;
                            }
                            else
                            {
                                x.DeleteFlag    = false;
                                x.ClinicalNotes = request.clinicalNotes[0].remark;
                            }

                            _prepUnitOfWork.Repository <PatientClinicalNotes>().Update(x);
                            await _prepUnitOfWork.SaveAsync();

                            message += "Remarks is updated";
                        }
                    }
                    else
                    {
                        if (request.clinicalNotes.Count > 0)
                        {
                            if (String.IsNullOrEmpty(request.clinicalNotes[0].remark.ToString()) == false)
                            {
                                PatientClinicalNotes cl = new PatientClinicalNotes();

                                cl.ServiceAreaId        = request.ServiceAreaId;
                                cl.ClinicalNotes        = request.clinicalNotes[0].remark;
                                cl.DeleteFlag           = false;
                                cl.PatientId            = request.PatientId;
                                cl.PatientMasterVisitId = request.PatientMasterVisitId;
                                cl.CreatedBy            = request.CreatedBy;
                                cl.CreateDate           = DateTime.Now;

                                await _prepUnitOfWork.Repository <PatientClinicalNotes>().AddAsync(cl);

                                await _prepUnitOfWork.SaveAsync();

                                message += "Remarks is added successfully";
                            }
                        }
                    }
                }
                if (request.Adherence.Count > 0)
                {
                    var AdherenceOutcome = await _prepUnitOfWork.Repository <AdherenceOutcome>().Get(x => x.PatientId == request.PatientId && x.PatientMasterVisitId == request.PatientMasterVisitId && x.AdherenceType == request.Adherence[0].AdherenceType && x.DeleteFlag == false).ToListAsync();


                    if (AdherenceOutcome.Count > 0)
                    {
                        foreach (var x in AdherenceOutcome)
                        {
                            if (x.AdherenceType == request.Adherence[0].AdherenceType && x.Score == request.Adherence[0].Score)
                            {
                                x.DeleteFlag = false;
                                x.CreateBy   = request.CreatedBy;
                                x.CreateDate = DateTime.Now;

                                Id = x.Id;

                                _prepUnitOfWork.Repository <AdherenceOutcome>().Update(x);
                                await _prepUnitOfWork.SaveAsync();

                                message += "Adherence Outcome has been updated";
                            }
                            else
                            {
                                x.DeleteFlag = true;
                                _prepUnitOfWork.Repository <AdherenceOutcome>().Update(x);
                                await _prepUnitOfWork.SaveAsync();


                                AdherenceOutcome adc = new AdherenceOutcome();
                                adc.PatientId            = request.PatientId;
                                adc.PatientMasterVisitId = request.PatientMasterVisitId;
                                adc.Score         = request.Adherence[0].Score;
                                adc.AdherenceType = request.Adherence[0].AdherenceType;
                                adc.CreateBy      = request.CreatedBy;
                                adc.CreateDate    = DateTime.Now;
                                await _prepUnitOfWork.Repository <AdherenceOutcome>().AddAsync(adc);

                                await _prepUnitOfWork.SaveAsync();

                                Id       = adc.Id;
                                message += "Adherence Outcome has been Saved";
                            }
                        }
                    }
                    else
                    {
                        AdherenceOutcome adc = new AdherenceOutcome();
                        adc.PatientId            = request.PatientId;
                        adc.PatientMasterVisitId = request.PatientMasterVisitId;
                        adc.Score         = request.Adherence[0].Score;
                        adc.AdherenceType = request.Adherence[0].AdherenceType;
                        adc.CreateBy      = request.CreatedBy;
                        adc.CreateDate    = DateTime.Now;
                        await _prepUnitOfWork.Repository <AdherenceOutcome>().AddAsync(adc);

                        await _prepUnitOfWork.SaveAsync();

                        Id       = adc.Id;
                        message += "Adherence Outcome has been Saved";
                    }
                }
                else
                {
                    AdherenceOutcome adc = new AdherenceOutcome();
                    adc.PatientId            = request.PatientId;
                    adc.PatientMasterVisitId = request.PatientMasterVisitId;
                    adc.Score         = request.Adherence[0].Score;
                    adc.AdherenceType = request.Adherence[0].AdherenceType;
                    adc.CreateBy      = request.CreatedBy;
                    adc.CreateDate    = DateTime.Now;
                    await _prepUnitOfWork.Repository <AdherenceOutcome>().AddAsync(adc);

                    await _prepUnitOfWork.SaveAsync();

                    Id       = adc.Id;
                    message += "Adherence Outcome has been Saved";
                }


                if (request.screeningdetail.Count > 0)
                {
                    var patientscreeninglist = await _prepUnitOfWork.Repository <PatientScreening>().Get(x => x.PatientId == request.PatientId && x.PatientMasterVisitId == request.PatientMasterVisitId).ToListAsync();

                    if (patientscreeninglist.Count > 0)
                    {
                        foreach (var x  in patientscreeninglist)
                        {
                            x.DeleteFlag = true;
                            _prepUnitOfWork.Repository <PatientScreening>().Update(x);
                            await _prepUnitOfWork.SaveAsync();
                        }

                        foreach (var detail in request.screeningdetail) //.ForEach(async x =>
                        {
                            var find = patientscreeninglist.Find(t => t.ScreeningTypeId == detail.ScreeningTypeId && t.ScreeningValueId == detail.ScreeningValueId);
                            if (find != null)
                            {
                                find.DeleteFlag = false;
                                find.VisitDate  = request.VisitDate;
                                find.CreatedBy  = request.CreatedBy;
                                find.Comment    = detail.Comment;
                                _prepUnitOfWork.Repository <PatientScreening>().Update(find);
                                await _prepUnitOfWork.SaveAsync();
                            }
                            else
                            {
                                PatientScreening sc = new PatientScreening();
                                sc.DeleteFlag           = false;
                                sc.VisitDate            = request.VisitDate;
                                sc.ScreeningTypeId      = detail.ScreeningTypeId;
                                sc.ScreeningValueId     = detail.ScreeningValueId;
                                sc.ScreeningDone        = true;
                                sc.Active               = true;
                                sc.CreateDate           = DateTime.Now;
                                sc.CreatedBy            = request.CreatedBy;
                                sc.Comment              = detail.Comment;
                                sc.PatientId            = request.PatientId;
                                sc.PatientMasterVisitId = request.PatientMasterVisitId;
                                await _prepUnitOfWork.Repository <PatientScreening>().AddAsync(sc);

                                await _prepUnitOfWork.SaveAsync();
                            }
                        }

                        message += "Monthly Refill updated successfully";
                    }
                    else
                    {
                        foreach (var requestdetail in request.screeningdetail)
                        {
                            PatientScreening sc = new PatientScreening();
                            sc.DeleteFlag           = false;
                            sc.VisitDate            = request.VisitDate;
                            sc.ScreeningTypeId      = requestdetail.ScreeningTypeId;
                            sc.ScreeningValueId     = requestdetail.ScreeningValueId;
                            sc.ScreeningDone        = true;
                            sc.Active               = true;
                            sc.CreateDate           = DateTime.Now;
                            sc.CreatedBy            = request.CreatedBy;
                            sc.Comment              = requestdetail.Comment;
                            sc.PatientId            = request.PatientId;
                            sc.PatientMasterVisitId = request.PatientMasterVisitId;
                            await _prepUnitOfWork.Repository <PatientScreening>().AddAsync(sc);

                            await _prepUnitOfWork.SaveAsync();
                        }

                        message += "Monthly refill saved successfully";
                    }
                }

                return(Result <MonthlyRefillResponse> .Valid(new MonthlyRefillResponse()
                {
                    Message = message,
                    Id = Id
                }));
            }
            catch (Exception ex)
            {
                return(Result <MonthlyRefillResponse> .Invalid(ex.Message));
            }
        }
Beispiel #16
0
        public async Task <Result <ResponseEncounter> > Handle(GetEncounterToFillCommand request, CancellationToken cancellationToken)
        {
            try
            {
                if (request.EmrMode.ToString().ToLower() == "poc")
                {
                    var prepformview = await _prepUnitOfWork.Repository <PrepFormsView>().Get(x => x.PatientId == request.PatientId && x.VisitDate < request.VisitDate).OrderByDescending(x => x.EncounterId).ToListAsync();

                    if (prepformview.Count > 0)
                    {
                        prepform = prepformview[0];
                        if (prepformview[0].Form == "Initiation")
                        {
                            form = "Followup";

                            DateTime visitdate = Convert.ToDateTime(prepformview[0].VisitDate);
                            if (visitdate != null)
                            {
                                DateTime newdate = visitdate.AddMonths(1);
                                if (request.VisitDate > prepformview[0].VisitDate && request.VisitDate <= newdate.AddDays(7))
                                {
                                    form = "Followup";
                                }

                                DateTime refilldate = visitdate.AddMonths(2);
                                if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= refilldate.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }
                            }
                        }

                        else if (prepformview[0].Form == "PrepEncounter")
                        {
                            if (prepformview[0].PrepStatusToday.ToLower() == "start")
                            {
                                DateTime visitdate = Convert.ToDateTime(prepformview[0].VisitDate);

                                DateTime newdate = visitdate.AddMonths(1);
                                if (request.VisitDate > prepformview[0].VisitDate && request.VisitDate <= newdate.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }


                                DateTime newdatefollow = visitdate.AddMonths(2);
                                if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= newdatefollow.AddDays(7))
                                {
                                    form = "Followup";
                                }



                                DateTime newdaterefill = visitdate.AddMonths(3);
                                if (request.VisitDate > visitdate.AddMonths(2) && request.VisitDate <= newdaterefill.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }


                                DateTime newdaterefill4 = visitdate.AddMonths(4);
                                if (request.VisitDate > visitdate.AddMonths(3) && request.VisitDate <= newdaterefill4.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }
                                if (string.IsNullOrEmpty(form) == true)
                                {
                                    form = "MonthlyRefill";
                                }
                            }
                            else if (prepformview[0].PrepStatusToday.ToLower() == "restart")
                            {
                                DateTime visitdate = Convert.ToDateTime(prepformview[0].VisitDate);

                                DateTime newdate = visitdate.AddMonths(1);
                                if (request.VisitDate > prepformview[0].VisitDate && request.VisitDate <= newdate.AddDays(7))
                                {
                                    form = "Followup";
                                }


                                DateTime newdaterefill = visitdate.AddMonths(2);
                                if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= newdaterefill.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }



                                DateTime newdatefollow = visitdate.AddMonths(3);
                                if (request.VisitDate > visitdate.AddMonths(2) && request.VisitDate <= newdatefollow.AddDays(7))
                                {
                                    form = "Followup";
                                }



                                DateTime newdaterefill2 = visitdate.AddMonths(4);
                                if (request.VisitDate > visitdate.AddMonths(3) && request.VisitDate <= newdaterefill.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }



                                DateTime newdaterefill3 = visitdate.AddMonths(5);
                                if (request.VisitDate > visitdate.AddMonths(4) && request.VisitDate <= newdaterefill3.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }



                                DateTime newdatefollowup2 = visitdate.AddMonths(6);
                                if (request.VisitDate > visitdate.AddMonths(5) && request.VisitDate <= newdatefollowup2.AddDays(7))
                                {
                                    form = "Followup";
                                }
                                if (String.IsNullOrEmpty(form) == true)
                                {
                                    form = "Followup";
                                }
                            }
                            else if (prepformview[0].PrepStatusToday.ToLower() == "continue")
                            {
                                DateTime visitdate     = Convert.ToDateTime(prepformview[0].VisitDate);
                                DateTime newdaterefill = visitdate.AddMonths(1);
                                if (request.VisitDate > visitdate && request.VisitDate <= newdaterefill.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }

                                DateTime newdaterefill2 = visitdate.AddMonths(2);
                                if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= newdaterefill2.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }

                                DateTime newdatefollowup = visitdate.AddMonths(3);
                                if (request.VisitDate > visitdate.AddMonths(2) && request.VisitDate <= newdatefollowup.AddDays(7))
                                {
                                    form = "Followup";
                                }

                                if (String.IsNullOrEmpty(form) == true)
                                {
                                    form = "MonthlyRefill";
                                }
                            }
                        }

                        else if (prepformview[0].Form == "MonthlyRefill")
                        {
                            List <PrepFormsView> itemsafterremove = new List <PrepFormsView>();

                            itemsafterremove = prepformview.FindAll(x => x != prepformview[0] && x.Form == "MonthlyRefill" || x.Form == "PrepEncounter").OrderByDescending(x => x.EncounterId).ToList();

                            if (itemsafterremove.Count > 0)
                            {
                                if (itemsafterremove[1].Form == "MonthlyRefill")
                                {
                                    DateTime visitdate       = Convert.ToDateTime(prepformview[0].VisitDate);
                                    DateTime newdatefollowup = visitdate.AddMonths(1);
                                    if (request.VisitDate > visitdate && request.VisitDate <= newdatefollowup.AddDays(7))
                                    {
                                        form = "Followup";
                                    }
                                }
                                else if (itemsafterremove[1].Form == "PrepEncounter")
                                {
                                    DateTime visitdate     = Convert.ToDateTime(prepformview[0].VisitDate);
                                    DateTime newdaterefill = visitdate.AddMonths(1);
                                    if (request.VisitDate > visitdate && request.VisitDate <= newdaterefill.AddDays(7))
                                    {
                                        form = "MonthlyRefill";
                                    }

                                    DateTime newdaterefill2 = visitdate.AddMonths(2);
                                    if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= newdaterefill2.AddDays(7))
                                    {
                                        form = "MonthlyRefill";
                                    }



                                    DateTime newdatefollowup = visitdate.AddMonths(3);
                                    if (request.VisitDate > visitdate.AddMonths(2) && request.VisitDate <= newdatefollowup.AddDays(7))
                                    {
                                        form = "Followup";
                                    }
                                }
                            }



                            if (prepformview[1].Form == "MonthlyRefill")
                            {
                                DateTime visitdate       = Convert.ToDateTime(prepformview[0].VisitDate);
                                DateTime newdatefollowup = visitdate.AddMonths(1);
                                if (request.VisitDate > visitdate && request.VisitDate <= newdatefollowup.AddDays(7))
                                {
                                    form = "Followup";
                                }
                            }
                            else if (prepformview[1].Form == "PrepEncounter")
                            {
                                DateTime visitdate     = Convert.ToDateTime(prepformview[0].VisitDate);
                                DateTime newdaterefill = visitdate.AddMonths(1);
                                if (request.VisitDate > visitdate && request.VisitDate <= newdaterefill.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }

                                DateTime newdaterefill2 = visitdate.AddMonths(2);
                                if (request.VisitDate > visitdate.AddMonths(1) && request.VisitDate <= newdaterefill2.AddDays(7))
                                {
                                    form = "MonthlyRefill";
                                }



                                DateTime newdatefollowup = visitdate.AddMonths(3);
                                if (request.VisitDate > visitdate.AddMonths(2) && request.VisitDate <= newdatefollowup.AddDays(7))
                                {
                                    form = "Followup";
                                }
                            }
                        }
                    }
                }



                return(Result <ResponseEncounter> .Valid(new ResponseEncounter
                {
                    PrepFormsView = prepform,
                    EncounterType = form
                }));
            }
            catch (Exception ex)
            {
                return(Result <ResponseEncounter> .Invalid(ex.Message));
            }
        }
        public async Task <Result <PatientPrEPStatus> > Handle(AddPrepStatusCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    if (request.Id.HasValue && request.Id.Value > 0)
                    {
                        var result = await _prepUnitOfWork.Repository <PatientPrEPStatus>()
                                     .FindByIdAsync(request.Id.Value);

                        if (result != null)
                        {
                            result.AdherenceCounsellingDone = request.AdherenceCounsellingDone;
                            result.SignsOrSymptomsHIV       = request.SignsOrSymptomsHIV;
                            //  result.ContraindicationsPrepPresent = request.ContraindicationsPrepPresent;
                            result.PrepStatusToday = request.PrepStatusToday;
                            result.CreatedBy       = request.CreatedBy;
                            result.CondomsIssued   = request.CondomsIssued;
                            result.NoOfCondoms     = request.NoOfCondoms;

                            _prepUnitOfWork.Repository <PatientPrEPStatus>().Update(result);
                            await _prepUnitOfWork.SaveAsync();

                            return(Result <PatientPrEPStatus> .Valid(result));
                        }
                        else
                        {
                            PatientPrEPStatus patientPrEpStatus = new PatientPrEPStatus()
                            {
                                PatientId                = request.PatientId,
                                PatientEncounterId       = request.PatientEncounterId,
                                SignsOrSymptomsHIV       = request.SignsOrSymptomsHIV,
                                AdherenceCounsellingDone = request.AdherenceCounsellingDone,
                                //ContraindicationsPrepPresent = request.ContraindicationsPrepPresent,
                                PrepStatusToday = request.PrepStatusToday,
                                DeleteFlag      = false,
                                CreatedBy       = request.CreatedBy,
                                CreateDate      = DateTime.Now,
                                CondomsIssued   = request.CondomsIssued,
                                NoOfCondoms     = request.NoOfCondoms
                            };

                            await _prepUnitOfWork.Repository <PatientPrEPStatus>().AddAsync(patientPrEpStatus);

                            await _prepUnitOfWork.SaveAsync();

                            return(Result <PatientPrEPStatus> .Valid(patientPrEpStatus));
                        }
                    }
                    else
                    {
                        PatientPrEPStatus patientPrEpStatus = new PatientPrEPStatus()
                        {
                            PatientId                = request.PatientId,
                            PatientEncounterId       = request.PatientEncounterId,
                            SignsOrSymptomsHIV       = request.SignsOrSymptomsHIV,
                            AdherenceCounsellingDone = request.AdherenceCounsellingDone,
                            //ContraindicationsPrepPresent = request.ContraindicationsPrepPresent,
                            PrepStatusToday = request.PrepStatusToday,
                            DeleteFlag      = false,
                            CreatedBy       = request.CreatedBy,
                            CreateDate      = DateTime.Now,
                            CondomsIssued   = request.CondomsIssued,
                            NoOfCondoms     = request.NoOfCondoms
                        };

                        await _prepUnitOfWork.Repository <PatientPrEPStatus>().AddAsync(patientPrEpStatus);

                        await _prepUnitOfWork.SaveAsync();

                        return(Result <PatientPrEPStatus> .Valid(patientPrEpStatus));
                    }
                }
                catch (Exception ex)
                {
                    string message = $"An error occured while saving prep status request for patientId {request.PatientId}";
                    Log.Error(ex, message);

                    return(Result <PatientPrEPStatus> .Invalid(message));
                }
            }
        }
Beispiel #18
0
        public async Task <Result <PatientProfileResponse> > Handle(AddPatientPartnerProfileCommand request, CancellationToken cancellationToken)
        {
            using (_prepUnitOfWork)
            {
                try
                {
                    if (request.patientPartnerProfiles.Count > 0)
                    {
                        foreach (var patientprofile in request.patientPartnerProfiles)
                        {
                            if (patientprofile.Id > 0)
                            {
                                var result = await _prepUnitOfWork.Repository <PatientPartnerProfile>()
                                             .FindByIdAsync(patientprofile.Id);

                                if (result != null)
                                {
                                    result.PatientId = request.PatientId;

                                    result.NumberofChildren    = patientprofile.NumberofChildren;
                                    result.PartnerARTStartDate = patientprofile.PartnerARTStartDate;
                                    if (!String.IsNullOrEmpty(patientprofile.SexWithoutCondoms) == true)
                                    {
                                        result.SexWithoutCondoms = Convert.ToInt32(patientprofile.SexWithoutCondoms);
                                    }

                                    result.HIVSeroDiscordantDuration = patientprofile.HIVSeroDiscordantDuration;
                                    result.HivPositiveStatusDate     = patientprofile.HivPositiveStatusDate;
                                    if (!String.IsNullOrEmpty(patientprofile.CCCEnrollment) == true)
                                    {
                                        result.CCCEnrollment = Convert.ToInt32(patientprofile.CCCEnrollment);
                                    }
                                    result.CCCNumber  = patientprofile.CCCNumber;
                                    result.DeleteFlag = patientprofile.DeleteFlag;


                                    _prepUnitOfWork.Repository <PatientPartnerProfile>().Update(result);
                                    await _prepUnitOfWork.SaveAsync();
                                }
                                else
                                {
                                    PatientPartnerProfile plf = new PatientPartnerProfile();
                                    plf.PatientId = request.PatientId;

                                    plf.NumberofChildren    = patientprofile.NumberofChildren;
                                    plf.PartnerARTStartDate = patientprofile.PartnerARTStartDate;
                                    if (!String.IsNullOrEmpty(patientprofile.SexWithoutCondoms) == true)
                                    {
                                        plf.SexWithoutCondoms = Convert.ToInt32(patientprofile.SexWithoutCondoms);
                                    }
                                    plf.HIVSeroDiscordantDuration = patientprofile.HIVSeroDiscordantDuration;
                                    plf.HivPositiveStatusDate     = patientprofile.HivPositiveStatusDate;
                                    if (!String.IsNullOrEmpty(patientprofile.CCCEnrollment) == true)
                                    {
                                        plf.CCCEnrollment = Convert.ToInt32(patientprofile.CCCEnrollment);
                                    }
                                    plf.CCCNumber  = patientprofile.CCCNumber;
                                    plf.DeleteFlag = patientprofile.DeleteFlag;
                                    plf.CreatedBy  = patientprofile.CreatedBy;
                                    plf.CreateDate = DateTime.Now;

                                    await _prepUnitOfWork.Repository <PatientPartnerProfile>().AddAsync(plf);

                                    await _prepUnitOfWork.SaveAsync();
                                }
                            }
                            else
                            {
                                PatientPartnerProfile plf = new PatientPartnerProfile();
                                plf.PatientId = request.PatientId;

                                plf.NumberofChildren    = patientprofile.NumberofChildren;
                                plf.PartnerARTStartDate = patientprofile.PartnerARTStartDate;
                                if (!String.IsNullOrEmpty(patientprofile.SexWithoutCondoms) == true)
                                {
                                    plf.SexWithoutCondoms = Convert.ToInt32(patientprofile.SexWithoutCondoms);
                                }
                                plf.HIVSeroDiscordantDuration = patientprofile.HIVSeroDiscordantDuration;
                                plf.HivPositiveStatusDate     = patientprofile.HivPositiveStatusDate;
                                if (!String.IsNullOrEmpty(patientprofile.CCCEnrollment) == true)
                                {
                                    plf.CCCEnrollment = Convert.ToInt32(patientprofile.CCCEnrollment);
                                }
                                plf.CCCNumber  = patientprofile.CCCNumber;
                                plf.DeleteFlag = patientprofile.DeleteFlag;
                                plf.CreatedBy  = patientprofile.CreatedBy;
                                plf.CreateDate = DateTime.Now;

                                await _prepUnitOfWork.Repository <PatientPartnerProfile>().AddAsync(plf);

                                await _prepUnitOfWork.SaveAsync();
                            }
                        }

                        Msg += "The hiv status partner profile has been saved successfully";
                    }


                    return(Result <PatientProfileResponse> .Valid(new PatientProfileResponse()
                    {
                        Message = Msg
                    }));
                }
                catch (Exception ex)
                {
                    String message = $"An error occured while saving partner hiv profile status request for patientId {request.PatientId}";
                    Log.Error(ex, message);

                    return(Result <PatientProfileResponse> .Invalid(message));
                }
            }
        }