Пример #1
0
        public async Task <PatientMasterVisit> AddPatientMasterVisit(int patientId, int serviceAreaId, DateTime encounterDate, int userId)
        {
            try
            {
                PatientMasterVisit patientMasterVisit = new PatientMasterVisit()
                {
                    PatientId  = patientId,
                    ServiceId  = serviceAreaId,
                    Start      = encounterDate,
                    Active     = true,
                    CreateDate = DateTime.Now,
                    DeleteFlag = false,
                    VisitDate  = encounterDate,
                    CreatedBy  = userId,
                    VisitType  = 0
                };

                await _unitOfWork.Repository <PatientMasterVisit>().AddAsync(patientMasterVisit);

                await _unitOfWork.SaveAsync();

                return(patientMasterVisit);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Пример #2
0
 public int PatientMasterVisitCheckout(int patientId, PatientMasterVisit patientMasterVisit)
 {
     using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
     {
         var patientVisit =
             unitOfWork.PatientMasterVisitRepository.FindBy(
                 x => x.PatientId == patientId & x.Status == 1 & !x.DeleteFlag & x.End == null & !x.Active)
             .FirstOrDefault();
         if (patientVisit != null)
         {
             patientVisit.Status         = 2;
             patientVisit.End            = patientMasterVisit.End;
             patientVisit.VisitDate      = patientMasterVisit.VisitDate;
             patientVisit.VisitScheduled = patientMasterVisit.VisitScheduled;
             patientVisit.VisitType      = patientMasterVisit.VisitType;
             patientVisit.VisitBy        = patientMasterVisit.VisitBy;
             patientVisit.Patient        = null;
             //call the update function here....
             unitOfWork.PatientMasterVisitRepository.Update(patientMasterVisit);
             Result = unitOfWork.Complete();
         }
         unitOfWork.Dispose();
         return(Result);
     }
 }
        public int AddPatientMasterVisit(int patientId, int userId, int visitType, int?_facilityId)
        {
            try
            {
                PatientMasterVisit visit = new PatientMasterVisit
                {
                    PatientId  = patientId,
                    ServiceId  = 1,
                    Start      = DateTime.Now,
                    Active     = true,
                    CreateDate = DateTime.Now,
                    DeleteFlag = false,
                    VisitDate  = DateTime.Now,
                    CreatedBy  = userId,
                    VisitType  = visitType,
                    FacilityId = _facilityId
                };

                return(_result = _patientMasterVisitManager.AddPatientmasterVisit(visit));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Пример #4
0
 public int UpdatePatientMasterVisit(PatientMasterVisit patientMasterVisit)
 {
     using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
     {
         unitOfWork.PatientMasterVisitRepository.Update(patientMasterVisit);
         unitOfWork.Dispose();
         return(Result = unitOfWork.Complete());
     }
 }
Пример #5
0
 public PatientMasterVisit GetVisitById(int id)
 {
     using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
     {
         PatientMasterVisit visit = unitOfWork.PatientMasterVisitRepository.GetById(id);
         unitOfWork.Dispose();
         return(visit);
     }
 }
Пример #6
0
        public async Task <Result <AddEncounterVisitResponse> > Handle(AddEncounterVisitCommand request, CancellationToken cancellationToken)
        {
            using (var trans = _unitOfWork.Context.Database.BeginTransaction())
            {
                try
                {
                    PatientMasterVisit patientMasterVisit = new PatientMasterVisit()
                    {
                        PatientId  = request.PatientId,
                        ServiceId  = request.ServiceAreaId,
                        Start      = request.EncounterDate,
                        Active     = true,
                        CreateDate = DateTime.Now,
                        DeleteFlag = false,
                        VisitDate  = request.EncounterDate,
                        CreatedBy  = request.UserId,
                        VisitType  = 0
                    };

                    await _unitOfWork.Repository <PatientMasterVisit>().AddAsync(patientMasterVisit);

                    await _unitOfWork.SaveAsync();

                    PatientEncounter patientEncounter = new PatientEncounter()
                    {
                        PatientId            = request.PatientId,
                        EncounterTypeId      = request.EncounterType,
                        Status               = 0,
                        PatientMasterVisitId = patientMasterVisit.Id,
                        EncounterStartTime   = request.EncounterDate,
                        EncounterEndTime     = request.EncounterDate,
                        ServiceAreaId        = request.ServiceAreaId,
                        CreatedBy            = request.UserId,
                        CreateDate           = DateTime.Now
                    };

                    await _unitOfWork.Repository <PatientEncounter>().AddAsync(patientEncounter);

                    await _unitOfWork.SaveAsync();

                    trans.Commit();

                    //_unitOfWork.Dispose();

                    return(Result <AddEncounterVisitResponse> .Valid(new AddEncounterVisitResponse
                    {
                        PatientMasterVisitId = patientMasterVisit.Id,
                        PatientEncounterId = patientEncounter.Id
                    }));
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    return(Result <AddEncounterVisitResponse> .Invalid(ex.Message));
                }
            }
        }
Пример #7
0
 public PatientMasterVisit GetLastPatientVisit(int patientId)
 {
     using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
     {
         PatientMasterVisit visit = unitOfWork.PatientMasterVisitRepository.FindBy(x => x.PatientId == patientId)
                                    .OrderByDescending(y => y.Id).FirstOrDefault();
         unitOfWork.Dispose();
         return(visit);
     }
 }
Пример #8
0
 public int AddPatientmasterVisit(PatientMasterVisit patientMasterVisit)
 {
     using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
     {
         unitOfWork.PatientMasterVisitRepository.Add(patientMasterVisit);
         Result = unitOfWork.Complete();
         unitOfWork.Dispose();
         return(patientMasterVisit.Id);
     }
 }
 public int AddPatientMasterVisit(PatientMasterVisit pm)
 {
     try
     {
         return(_result = _patientMasterVisitManager.AddPatientmasterVisit(pm));
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
Пример #10
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (PatientMasterVisitId == 0)
     {
         PatientMasterVisit visit = new PatientMasterVisit()
         {
             PatientId = PatientId,
             Active    = true,
         };
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (PatientMasterVisitId == 0)
            {
                PatientMasterVisit visit = new PatientMasterVisit()
                {
                    PatientId = PatientId,
                    Active    = true,
                };
            }

            PatientLookupManager patientLookupManager = new PatientLookupManager();
            var patientDetails = patientLookupManager.GetPatientDetailSummary(PatientId);

            Session["DateOfEnrollment"] = patientDetails.EnrollmentDate;
        }
Пример #12
0
        public int PatientMasterVisitCheckin(int patientId, int userId)
        {
            var objPpatientMasterVisit = new PatientMasterVisit
            {
                PatientId = patientId,
                ServiceId = 1,
                Status    = 1,
                Start     = DateTime.Now,
                VisitDate = DateTime.Now,
                CreatedBy = userId
            };

            if (patientId > 0)
            {
                _result = _patientMasterVisitManager.PatientMasterVisitCheckin(patientId, objPpatientMasterVisit);
            }

            return(_result > 0 ?_result:0);
        }
Пример #13
0
        public int PatientMasterVisitCheckin(int patientId, PatientMasterVisit patientMasterVisit)
        {
            using (UnitOfWork unitOfWork = new UnitOfWork(new GreencardContext()))
            {
                PatientMasterVisitAutoClosure(patientId);

                var visitId =
                    unitOfWork.PatientMasterVisitRepository.FindBy(
                        x =>
                        //x.PatientId == patientId & DbFunctions.AddHours(x.Start,-24) <= DateTime.Now &
                        x.PatientId == patientId & DbFunctions.DiffHours(x.Start, DateTime.Now) <= 24 &
                        x.End == null & !x.Active & x.Status == 1).Select(x => x.Id).FirstOrDefault();
                if (visitId == 0)
                {
                    unitOfWork.PatientMasterVisitRepository.Add(patientMasterVisit);
                    unitOfWork.Complete();
                    visitId = patientMasterVisit.Id;
                }

                unitOfWork.Dispose();
                return(visitId);
            }
        }
        public int AddPatientMasterVisit(int patientId, int userId, int visitType)
        {
            try
            {
                PatientMasterVisit visit = new PatientMasterVisit
                {
                    PatientId  = patientId,
                    ServiceId  = sv.GetServiceAreaById("Registration"),
                    Start      = DateTime.Now,
                    Active     = true,
                    CreateDate = DateTime.Now,
                    DeleteFlag = false,
                    VisitDate  = DateTime.Now,
                    CreatedBy  = userId,
                    VisitType  = visitType
                };

                return(_result = _patientMasterVisitManager.AddPatientmasterVisit(visit));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public string GetPatientMasterVisitId(int PatientId, DateTime visitDate, string EncounterType, int ServiceAreaId, int UserId)
        {
            PatientMasterVisitManager pmvManager       = new PatientMasterVisitManager();
            List <PatientMasterVisit> pmv              = new List <PatientMasterVisit>();
            PatientEncounterLogic     patientEncounter = new PatientEncounterLogic();
            OutCome ResultOutcome = new OutCome();

            pmv = pmvManager.GetPatientMasterVisitBasedonVisitDate(PatientId, visitDate);
            if (pmv != null)
            {
                if (pmv.Count > 0)
                {
                    MasterVisitId = pmv[0].Id;
                }
            }


            if (MasterVisitId > 0)
            {
                Result = patientEncounter.SavePatientPreviousEncounter(PatientId, MasterVisitId, EncounterType, ServiceAreaId, Convert.ToInt32(Session["AppUserId"]), visitDate);
                if (Result > 0)
                {
                    ResultOutcome.Result = MasterVisitId;
                    ResultOutcome.Msg    = EncounterType + " Encounter Saved";
                }
            }
            else
            {
                var lookupLogic = new LookupLogic();
                var facility    = lookupLogic.GetFacility(Session["AppPosID"].ToString());
                if (facility == null)
                {
                    facility = lookupLogic.GetFacility();
                }

                PatientMasterVisit pm = new PatientMasterVisit();
                pm.ServiceId  = 1;
                pm.VisitDate  = visitDate;
                pm.VisitBy    = UserId;
                pm.Start      = visitDate;
                pm.End        = visitDate;
                pm.PatientId  = PatientId;
                pm.CreatedBy  = UserId;
                pm.Active     = true;
                pm.Status     = 2;
                pm.FacilityId = facility.FacilityID;

                int PatientMasterVisitId = pmvManager.AddPatientMasterVisit(pm);

                int res = patientEncounter.SavePatientPreviousEncounter(PatientId, PatientMasterVisitId, EncounterType, ServiceAreaId, Convert.ToInt32(Session["AppUserId"]), visitDate);
                if (res > 0)
                {
                    Result = PatientMasterVisitId;
                    ResultOutcome.Result = Result;
                    ResultOutcome.Msg    = EncounterType + "Encounter Saved";
                }
            }
            string jsonScreeningObject = "[]";

            jsonScreeningObject = new JavaScriptSerializer().Serialize(ResultOutcome);
            return(jsonScreeningObject);
        }
Пример #16
0
        public static ObservationResultDTO GetWHOStage(int entityId)
        {
            try
            {
                ObservationResultDTO   observationResult = new ObservationResultDTO();
                PatientWhoStageManager whoStageManager   = new PatientWhoStageManager();
                var whoStage = whoStageManager.GetWhoStageById(entityId);

                if (whoStage != null)
                {
                    LookupLogic lookupLogic = new LookupLogic();
                    PatientMasterVisitManager visitManager            = new PatientMasterVisitManager();
                    PersonIdentifierManager   personIdentifierManager = new PersonIdentifierManager();
                    IdentifierManager         identifierManager       = new IdentifierManager();
                    Identifier            identifier            = identifierManager.GetIdentifierByCode("GODS_NUMBER");
                    PatientMessageManager patientMessageManager = new PatientMessageManager();
                    PatientMessage        patientMessage        = patientMessageManager.GetPatientMessageByEntityId(whoStage.PatientId);
                    PatientMasterVisit    visit = visitManager.GetVisitById(whoStage.PatientMasterVisitId);

                    List <PersonIdentifier> personIdentifiers = personIdentifierManager.GetPersonIdentifiers(patientMessage.Id, identifier.Id);
                    string whoStageString = lookupLogic.GetLookupItemNameByMasterNameItemId(whoStage.WHOStage, "WHOStage");

                    //Initialize default values
                    observationResult.PATIENT_IDENTIFICATION = observationResult.PATIENT_IDENTIFICATION == null ? new OBSERVATIONPATIENTIDENTIFICATION() : observationResult.PATIENT_IDENTIFICATION;
                    observationResult.PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID = observationResult.PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID == null ? new List <INTERNALPATIENTID>() : observationResult.PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID;
                    observationResult.PATIENT_IDENTIFICATION.EXTERNAL_PATIENT_ID = observationResult.PATIENT_IDENTIFICATION.EXTERNAL_PATIENT_ID == null ? new EXTERNALPATIENTID() : observationResult.PATIENT_IDENTIFICATION.EXTERNAL_PATIENT_ID;
                    observationResult.PATIENT_IDENTIFICATION.PATIENT_NAME        = observationResult.PATIENT_IDENTIFICATION.PATIENT_NAME == null ? new PATIENTNAME() : observationResult.PATIENT_IDENTIFICATION.PATIENT_NAME;
                    observationResult.OBSERVATION_RESULT = observationResult.OBSERVATION_RESULT == null ? new List <OBSERVATION_RESULT>() : observationResult.OBSERVATION_RESULT;

                    //External Patient Id
                    observationResult.PATIENT_IDENTIFICATION.EXTERNAL_PATIENT_ID = PatientIdentificationSegment.GetExternalPatientId(personIdentifiers);

                    //CCC Number
                    INTERNALPATIENTID internalPatientId = PatientIdentificationSegment.getInternalPatientIdCCC(patientMessage);
                    observationResult.PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Add(internalPatientId);

                    //National ID
                    INTERNALPATIENTID internalNationalId = PatientIdentificationSegment.getInternalPatientIdNationalId(patientMessage);
                    if (internalNationalId != null)
                    {
                        observationResult.PATIENT_IDENTIFICATION.INTERNAL_PATIENT_ID.Add(internalNationalId);
                    }

                    //Patient Names
                    observationResult.PATIENT_IDENTIFICATION.PATIENT_NAME = PatientIdentificationSegment.GetPatientName(patientMessage);

                    //set visitdate value
                    DateTime visitDate       = visit.VisitDate.HasValue ? visit.VisitDate.Value : DateTime.Now;
                    string   observationDate = visitDate.ToString("yyyyMMddHmmss", CultureInfo.InvariantCulture);

                    string observationValue = String.Empty;
                    switch (whoStageString)
                    {
                    case "Stage1":
                        observationValue = "1";
                        break;

                    case "Stage2":
                        observationValue = "2";
                        break;

                    case "Stage3":
                        observationValue = "3";
                        break;

                    case "Stage4":
                        observationValue = "4";
                        break;
                    }
                    //WHO STAGE
                    OBSERVATION_RESULT observation = new OBSERVATION_RESULT()
                    {
                        OBSERVATION_IDENTIFIER = "WHO_STAGE",
                        OBSERVATION_SUB_ID     = "",
                        CODING_SYSTEM          = "WHO",
                        VALUE_TYPE             = "NM",
                        OBSERVATION_VALUE      = observationValue,
                        UNITS = "",
                        OBSERVATION_RESULT_STATUS = "F",
                        OBSERVATION_DATETIME      = observationDate,
                        ABNORMAL_FLAGS            = "N"
                    };

                    observationResult.OBSERVATION_RESULT.Add(observation);
                }

                return(observationResult);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Пример #17
0
        public async Task <PatientIdentifier> EnrollPatient(string enrollmentNo, int patientId, int serviceAreaId, int createdBy, DateTime dateOfEnrollment)
        {
            using (var trans = _unitOfWork.Context.Database.BeginTransaction())
            {
                try
                {
                    var previouslyIdentifiers = await _unitOfWork.Repository <PatientIdentifier>().Get(y =>
                                                                                                       y.IdentifierValue == enrollmentNo && y.IdentifierTypeId == 8)
                                                .ToListAsync();

                    if (previouslyIdentifiers.Count > 0)
                    {
                        var exception = new Exception("No: " + enrollmentNo + " already exists");
                        throw exception;
                    }

                    var enrollmentVisitType = await _unitOfWork.Repository <LookupItemView>().Get(x => x.MasterName == "VisitType" && x.ItemName == "Enrollment").FirstOrDefaultAsync();

                    int?visitType          = enrollmentVisitType != null ? enrollmentVisitType.ItemId : 0;
                    var patientMasterVisit = new PatientMasterVisit()
                    {
                        PatientId  = patientId,
                        ServiceId  = serviceAreaId,
                        Start      = DateTime.Now,
                        End        = null,
                        Active     = false,
                        VisitDate  = DateTime.Now,
                        VisitType  = visitType,
                        Status     = 1,
                        CreateDate = DateTime.Now,
                        DeleteFlag = false,
                        CreatedBy  = createdBy
                    };

                    await _unitOfWork.Repository <PatientMasterVisit>().AddAsync(patientMasterVisit);

                    await _unitOfWork.SaveAsync();

                    var patientEnrollment = new PatientEnrollment()
                    {
                        PatientId          = patientId,
                        ServiceAreaId      = serviceAreaId,
                        EnrollmentDate     = dateOfEnrollment,
                        EnrollmentStatusId = 0,
                        TransferIn         = false,
                        CareEnded          = false,
                        DeleteFlag         = false,
                        CreatedBy          = createdBy,
                        CreateDate         = DateTime.Now
                    };

                    await _unitOfWork.Repository <PatientEnrollment>().AddAsync(patientEnrollment);

                    await _unitOfWork.SaveAsync();

                    var patientIdentifier = new PatientIdentifier()
                    {
                        PatientId           = patientId,
                        PatientEnrollmentId = patientEnrollment.Id,
                        IdentifierTypeId    = 8,
                        IdentifierValue     = enrollmentNo,
                        DeleteFlag          = false,
                        CreatedBy           = createdBy,
                        CreateDate          = DateTime.Now,
                        Active = true
                    };

                    await _unitOfWork.Repository <PatientIdentifier>().AddAsync(patientIdentifier);

                    await _unitOfWork.SaveAsync();

                    GetPatientDetails patientDetails = new GetPatientDetails(_unitOfWork);
                    LookupLogic       lookupLogic    = new LookupLogic(_unitOfWork);

                    var patientLookup = await patientDetails.GetPatientByPatientId(patientId);

                    if (patientLookup.Count > 0)
                    {
                        Facility facility = await _unitOfWork.Repository <Facility>().Get(x => x.DeleteFlag == 0).FirstOrDefaultAsync();

                        var referralId = await lookupLogic.GetDecodeIdByName("VCT", 17);

                        var maritalStatusId = await lookupLogic.GetDecodeIdByName(patientLookup[0].MaritalStatusName, 17);

                        var address      = patientLookup[0].PhysicalAddress == null ? " " : patientLookup[0].PhysicalAddress;
                        var phone        = patientLookup[0].MobileNumber == null ? " " : patientLookup[0].MobileNumber;
                        var dobPrecision = 0;
                        if (patientLookup[0].DobPrecision.HasValue)
                        {
                            var dobPrecisionValue = patientLookup[0].DobPrecision.Value;
                            dobPrecision = dobPrecisionValue ? 1 : 0;
                        }

                        var gender = 0;
                        if (patientLookup[0].Gender == "Male")
                        {
                            gender = 16;
                        }
                        else if (patientLookup[0].Gender == "Female")
                        {
                            gender = 17;
                        }

                        string dateOfBirth = string.Empty;
                        if (patientLookup[0].DateOfBirth.HasValue)
                        {
                            dateOfBirth = patientLookup[0].DateOfBirth.Value.ToString("yyyy-MM-dd");
                        }

                        StringBuilder sql = new StringBuilder();
                        sql.Append("exec pr_OpenDecryptedSession;");
                        sql.Append("Insert Into mst_Patient(FirstName, LastName, MiddleName, LocationID, PatientEnrollmentID, ReferredFrom, RegistrationDate, Sex, DOB, DobPrecision, MaritalStatus, Address, Phone, UserID, PosId, Status, DeleteFlag, CreateDate,MovedToPatientTable)");
                        sql.Append("Values(");
                        sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].FirstName}'),");
                        sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].LastName}'),");
                        sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{patientLookup[0].MidName}'),");
                        sql.Append($"'{facility.FacilityID}',");
                        sql.Append("' ',");
                        sql.Append($"'{referralId}',");
                        sql.Append($"'{dateOfEnrollment.ToString("yyyy-MM-dd")}',");
                        sql.Append($"'{gender}',");
                        sql.Append($"'{dateOfBirth}',");
                        sql.Append($"'{dobPrecision}',");
                        sql.Append($"'{maritalStatusId}',");
                        sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{address}'),");
                        sql.Append($"ENCRYPTBYKEY(KEY_GUID('Key_CTC'),'{phone}'),");
                        sql.Append($"'{createdBy}',");
                        sql.Append($"'{facility.PosID}',");
                        sql.Append("0,");
                        sql.Append("0,");
                        sql.Append($"'{dateOfEnrollment.ToString("yyyy-MM-dd")}',");
                        sql.Append("1");
                        sql.Append(");");

                        sql.Append("SELECT Ptn_Pk, CAST(DECRYPTBYKEY([FirstName]) AS VARCHAR(50)) AS FirstName, CAST(DECRYPTBYKEY([LastName]) AS VARCHAR(50)) AS LastName, LocationID FROM [dbo].[mst_Patient] WHERE [Ptn_Pk] = SCOPE_IDENTITY();");
                        sql.Append("exec [dbo].[pr_CloseDecryptedSession];");

                        var result = await _unitOfWork.Repository <MstPatient>().FromSql(sql.ToString());

                        StringBuilder sqlBuilder = new StringBuilder();
                        sqlBuilder.Append("Insert Into Lnk_PatientProgramStart(Ptn_pk, ModuleId, StartDate, UserID, CreateDate)");
                        sqlBuilder.Append("Values(");
                        sqlBuilder.Append($"'{result[0].Ptn_Pk}',");
                        sqlBuilder.Append("283,");
                        sqlBuilder.Append($"'{dateOfEnrollment.ToString("yyyy-MM-dd")}',");
                        sqlBuilder.Append($"'{createdBy}',");
                        sqlBuilder.Append($"'{dateOfEnrollment.ToString("yyyy-MM-dd")}'");
                        sqlBuilder.Append(");");

                        var insertResult = await _unitOfWork.Context.Database.ExecuteSqlCommandAsync(sqlBuilder.ToString());

                        StringBuilder sqlPatient = new StringBuilder();
                        sqlPatient.Append($"UPDATE Patient SET ptn_pk = '{result[0].Ptn_Pk}' WHERE Id = '{patientId}';");
                        var updateResult = await _unitOfWork.Context.Database.ExecuteSqlCommandAsync(sqlPatient.ToString());
                    }

                    trans.Commit();

                    return(patientIdentifier);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }
        }
Пример #18
0
        public async Task <Result <EnrollClientResponse> > Handle(EnrollClientCommand request, CancellationToken cancellationToken)
        {
            using (var trans = _unitOfWork.Context.Database.BeginTransaction())
            {
                try
                {
                    var patientMasterVisit = new PatientMasterVisit()
                    {
                        PatientId      = request.ClientEnrollment.PatientId,
                        ServiceId      = request.ClientEnrollment.ServiceAreaId,
                        Start          = DateTime.Now,
                        End            = null,
                        Active         = false,
                        VisitDate      = DateTime.Now,
                        VisitScheduled = 0,
                        VisitBy        = 108,
                        VisitType      = 1,
                        Status         = 1,
                        CreateDate     = DateTime.Now,
                        DeleteFlag     = false,
                        CreatedBy      = request.ClientEnrollment.CreatedBy
                    };

                    await _unitOfWork.Repository <PatientMasterVisit>().AddAsync(patientMasterVisit);

                    await _unitOfWork.SaveAsync();

                    var patientEnrollment = new PatientEnrollment()
                    {
                        PatientId          = request.ClientEnrollment.PatientId,
                        ServiceAreaId      = request.ClientEnrollment.ServiceAreaId,
                        EnrollmentDate     = request.ClientEnrollment.DateOfEnrollment,
                        EnrollmentStatusId = 0,
                        TransferIn         = false,
                        CareEnded          = false,
                        DeleteFlag         = false,
                        CreatedBy          = request.ClientEnrollment.CreatedBy,
                        CreateDate         = DateTime.Now
                    };

                    await _unitOfWork.Repository <PatientEnrollment>().AddAsync(patientEnrollment);

                    await _unitOfWork.SaveAsync();

                    var patientIdentifier = new PatientIdentifier()
                    {
                        PatientId           = request.ClientEnrollment.PatientId,
                        PatientEnrollmentId = patientEnrollment.Id,
                        IdentifierTypeId    = 8,
                        IdentifierValue     = request.ClientEnrollment.EnrollmentNo,
                        DeleteFlag          = false,
                        CreatedBy           = request.ClientEnrollment.CreatedBy,
                        CreateDate          = DateTime.Now,
                        Active = true
                    };

                    await _unitOfWork.Repository <PatientIdentifier>().AddAsync(patientIdentifier);

                    await _unitOfWork.SaveAsync();

                    trans.Commit();

                    return(Result <EnrollClientResponse> .Valid(new EnrollClientResponse
                    {
                        IdentifierValue = request.ClientEnrollment.EnrollmentNo,
                        IdentifierId = patientIdentifier.Id
                    }));
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    return(Result <EnrollClientResponse> .Invalid(ex.Message));
                }
            }
        }