Ejemplo n.º 1
0
        public void SendLabResult(LabResultViewModel labResult)
        {
            var observation = CreateLabResultResource(labResult);
            var result      = FhirClientObj.Create <Observation>(observation);

            UpdateProcedureByProcedureId(labResult.ProcedureId);
        }
Ejemplo n.º 2
0
        void DeleteLabResultExecute(LabResultViewModel resultVM)
        {
            if (LabResultCollection == null)
            {
                return;
            }

            string caseGuid = resultVM.CaseRecordGuid;
            string labGuid  = resultVM.RecordId;

            LabResultCollection.Remove(resultVM);

            Query deleteQuery = Database.CreateQuery("DELETE * FROM " + LabForm.TableName + " WHERE GlobalRecordId = @GUID");

            if (Database.ToString().ToLower().Contains("sql"))
            {
                deleteQuery = Database.CreateQuery("DELETE FROM " + LabForm.TableName + " WHERE GlobalRecordId = @GUID");
            }
            deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, labGuid));
            Database.ExecuteNonQuery(deleteQuery);

            foreach (Epi.Page page in LabForm.Pages)
            {
                deleteQuery = Database.CreateQuery("DELETE * FROM " + page.TableName + " WHERE GlobalRecordId = @GUID");
                if (Database.ToString().ToLower().Contains("sql"))
                {
                    deleteQuery = Database.CreateQuery("DELETE  FROM " + page.TableName + " WHERE GlobalRecordId = @GUID");
                }
                deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, labGuid));
                Database.ExecuteNonQuery(deleteQuery);
            }

            Query selectQuery = Database.CreateQuery("SELECT FKEY FROM " + LabForm.TableName + " WHERE FKEY = @GUID");

            selectQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid));

            DataTable dt = Database.Select(selectQuery);

            if (dt.Rows.Count == 0)
            {
                deleteQuery = Database.CreateQuery("DELETE * FROM " + CaseForm.TableName + " WHERE GlobalRecordId = @GUID");
                if (Database.ToString().ToLower().Contains("sql"))
                {
                    deleteQuery = Database.CreateQuery("DELETE  FROM " + CaseForm.TableName + " WHERE GlobalRecordId = @GUID");
                }
                deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid));
                Database.ExecuteNonQuery(deleteQuery);

                foreach (Epi.Page page in CaseForm.Pages)
                {
                    deleteQuery = Database.CreateQuery("DELETE * FROM " + page.TableName + " WHERE GlobalRecordId = @GUID");
                    if (Database.ToString().ToLower().Contains("sql"))
                    {
                        deleteQuery = Database.CreateQuery("DELETE  FROM " + page.TableName + " WHERE GlobalRecordId = @GUID");
                    }
                    deleteQuery.Parameters.Add(new QueryParameter("@GUID", DbType.String, caseGuid));
                    Database.ExecuteNonQuery(deleteQuery);
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// To get lab result details based on procedure id
        /// </summary>
        /// <param name="procedureId"></param>
        /// <returns></returns>
        public LabResultViewModel GetLabResultByRequestId(string procedureId)
        {
            LabResultViewModel labresult = new LabResultViewModel();

            try
            {
                string[] criteria          = new string[] { "based-on:ProcedureRequest=" + procedureId };
                var      labResultResponse = FhirClientObj.Search <Observation>(criteria);

                //Serializing the data to json string
                string labResultJson = fhirJsonSerializer.SerializeToString(labResultResponse);

                //Parsing the json string
                Bundle labResults = (Bundle)fhirJsonParser.Parse(labResultJson, typeof(Bundle));

                //Parsing the data to the procedure request list
                Observation observation;
                observation = labResults.Entry.Select(Resource => (Observation)Resource.Resource).ToList().FirstOrDefault();

                labresult.Category           = observation.Code.Coding.FirstOrDefault().Display;
                labresult.PatientId          = observation.Subject.Reference;
                labresult.ResultGlucoseLevel = ((Quantity)observation.Value).Value.ToString();
                labresult.IssuedDate         = observation.Issued.ToString();
                labresult.Status             = observation.Status.ToString();
                labresult.FhirResource       = JValue.Parse(labResultJson).ToString();
            }
            catch (Exception ex)
            {
                var response = new StreamReader(ex.Message).ReadToEnd();
                var error    = JsonConvert.DeserializeObject(response);
                labresult.Error = error.ToString();
            }

            return(labresult);
        }
        public ActionResult SendReport(LabResultViewModel modal)
        {
            LabService lab = new LabService();

            lab.SendLabResult(modal);

            return(RedirectToAction("List", "LabList"));
        }
        public ActionResult Report(LabResultViewModel modal)
        {
            if (TempData.ContainsKey("LabResult"))
            {
                modal = (LabResultViewModel)TempData["LabResult"];
            }

            return(View(modal));
        }
Ejemplo n.º 6
0
        void UpdateOrAddLabResultExecute(string labGuid)
        {
            if (LabResultCollection == null)
            {
                return;
            }

            LabResultViewModel newResultVM = CreateLabResultFromGuid(labGuid);

            if (newResultVM != null)
            {
                bool found = false;
                foreach (var iResult in LabResultCollection)
                {
                    if (iResult.RecordId == labGuid)
                    {
                        iResult.Copy.Execute(newResultVM);
                        RaisePropertyChanged("LabResultCollection");
                        found = true;

                        if (newResultVM.CaseID != newResultVM.LabCaseID)
                        {
                            // Cascade update all lab records with new ID
                            RenderableField idField = LabForm.Fields["ID"] as RenderableField;
                            if (idField != null)
                            {
                                Query updateQuery = Database.CreateQuery("UPDATE " + LabForm.TableName +
                                                                         " lf INNER JOIN " + idField.Page.TableName + " lf1 ON lf.GlobalRecordId = lf1.GlobalRecordId " +
                                                                         " SET [ID] = @ID " +
                                                                         " WHERE lf.FKEY = @FKEY");
                                updateQuery.Parameters.Add(new QueryParameter("@ID", DbType.String, newResultVM.CaseID));
                                updateQuery.Parameters.Add(new QueryParameter("@FKEY", DbType.String, newResultVM.CaseRecordGuid));
                                int rowsUpdated = Database.ExecuteNonQuery(updateQuery);
                                newResultVM.LabCaseID = newResultVM.CaseID;
                            }
                            else
                            {
                                throw new InvalidOperationException("Field ID is missing on case report form.");
                            }
                        }

                        break;
                    }
                }

                if (!found)
                {
                    AddResult(newResultVM);

                    RaisePropertyChanged("LabResultCollection");
                }

                SortCases();
                UpdateResultNumbers();
            }
        }
        public RedirectToRouteResult Labtest(string procedureId, string status, string patientId, string practitionerId, string patientName)
        {
            LabResultViewModel labresult = new LabResultViewModel();

            labresult.ProcedureId = procedureId;
            labresult.Status      = status;
            labresult.PatientId   = patientId;
            labresult.Performer   = practitionerId;
            labresult.Category    = "Glucose measurement, blood (procedure)";
            labresult.PatientName = patientName;
            TempData["LabResult"] = labresult;

            return(RedirectToAction("Report", "LabResult"));
        }
Ejemplo n.º 8
0
        private void AddResult(LabResultViewModel newResult)
        {
            if (LabResultCollection == null)
            {
                return;
            }

            LabResultCollection.Add(newResult);

            //int SUDV = 0;
            //int BDBV = 0;
            //int EBOV = 0;
            //int MARV = 0;

            //foreach (LabResultViewModel labResultVM in LabResultCollection)
            //{
            //    if (!String.IsNullOrEmpty(labResultVM.MARVPCR)) MARV++;
            //    if (!String.IsNullOrEmpty(labResultVM.EBOVPCR)) EBOV++;
            //    if (!String.IsNullOrEmpty(labResultVM.BDBVPCR)) BDBV++;
            //    if (!String.IsNullOrEmpty(labResultVM.SUDVPCR)) SUDV++;
            //}

            //VirusTestTypes virusTestType = Core.VirusTestTypes.Sudan;

            //if (SUDV > BDBV && SUDV > EBOV && SUDV > MARV)
            //{
            //    virusTestType = Core.VirusTestTypes.Sudan;
            //}

            //if (MARV > SUDV && MARV > EBOV && MARV > BDBV)
            //{
            //    virusTestType = Core.VirusTestTypes.Marburg;
            //}

            //if (EBOV > MARV && EBOV > SUDV && EBOV > BDBV)
            //{
            //    virusTestType = Core.VirusTestTypes.Ebola;
            //}

            //if (BDBV > MARV && BDBV > EBOV && BDBV > SUDV)
            //{
            //    virusTestType = Core.VirusTestTypes.Bundibugyo;
            //}

            if (LabRecordAdded != null)
            {
                LabRecordAdded(this, new CaseDataPopulatedArgs(VirusTestType, false));
            }
        }
Ejemplo n.º 9
0
        public JsonResult GetLabResultsListAjax()
        {
            Profile p = _profileRepo.GetByUserId(User.Identity.GetUserId());

            if (p == null)
            {
                return(Json(null, JsonRequestBehavior.AllowGet));
            }

            IEnumerable <Donation> donationList = _donationService.GetDonationsForProfile(p.Id);

            if (donationList == null)
            {
                return(Json(null, JsonRequestBehavior.AllowGet));
            }
            List <LabResultViewModel> labResults = new List <LabResultViewModel>();

            foreach (var donation in donationList)
            {
                IEnumerable <LabResult> results = _labResultService.GetByDonationId(donation.Id);
                if (results == null)
                {
                    continue;
                }

                foreach (var labResult in results)
                {
                    LabResultViewModel labResultView = new LabResultViewModel()
                    {
                        Date      = donation.DonationDate.ToString("yyyy MMMM dd"),
                        Hepatitis = labResult.Hepatitis == false ? "Negative" : "Positive",
                        HIV       = labResult.HIV == false ? "Negative" : "Positive",
                        HTLV      = labResult.HTLV == false ? "Negative" : "Positive",
                        Syphilis  = labResult.Syphilis == false ? "Negative" : "Positive",
                        Other     = labResult.ALT == true ? labResult.Notes : ""
                    };
                    labResults.Add(labResultView);
                }
            }

            return(Json(labResults, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 10
0
        protected override bool PopulateCollections(bool initialLoad = false)
        {
            LabDataHelper.SampleInterpretConfirmedAcute        = Properties.Resources.AnalysisClassConfirmedAcute;
            LabDataHelper.SampleInterpretConfirmedConvalescent = Properties.Resources.AnalysisClassConfirmedConvalescent;
            LabDataHelper.SampleInterpretNotCase               = Properties.Resources.AnalysisClassNotCase;
            LabDataHelper.SampleInterpretIndeterminate         = Properties.Resources.AnalysisClassIndeterminate;
            LabDataHelper.SampleInterpretNegativeNeedsFollowUp = Properties.Resources.AnalysisClassNegativeNeedsFollowUp;

            LabDataHelper.PCRPositive      = Properties.Resources.Positive;
            LabDataHelper.PCRNegative      = Properties.Resources.Negative;
            LabDataHelper.PCRIndeterminate = Properties.Resources.AnalysisClassIndeterminate;
            LabDataHelper.PCRNotAvailable  = "n/a";

            LabDataHelper.SampleTypeWholeBlood = Properties.Resources.SampleTypeWholeBlood;
            LabDataHelper.SampleTypeSerum      = Properties.Resources.SampleTypeSerum;
            LabDataHelper.SampleTypeHeartBlood = Properties.Resources.SampleTypeHeartBlood;
            LabDataHelper.SampleTypeSkin       = Properties.Resources.SampleTypeSkin;
            LabDataHelper.SampleTypeOther      = Properties.Resources.SampleTypeOther;

            // *********************************************************************************
            // Following code shows virus tests depending on what's in the database.
            // *********************************************************************************
            DataTable CaseTable = GetCasesTable();
            DataView  CaseView  = new DataView(CaseTable, String.Empty, String.Empty, DataViewRowState.CurrentRows);

            DataTable LabTable = GetLabTable();
            DataView  LabView  = new DataView(LabTable, String.Empty, String.Empty, DataViewRowState.CurrentRows);

            SudanTestsDetected      = false;
            EbolaTestsDetected      = false;
            BundibugyoTestsDetected = false;
            MarburgTestsDetected    = false;
            CCHFTestsDetected       = false;
            RiftTestsDetected       = false;
            LassaTestsDetected      = false;

            foreach (DataRowView rowView in LabView)
            {
                LabResultViewModel labResultVM = new LabResultViewModel(LabForm);
                LoadResultData(rowView.Row, labResultVM, CaseView);
                LabResultCollection.Add(labResultVM);

                if (!String.IsNullOrEmpty(labResultVM.MARVPCR))
                {
                    MarburgTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.EBOVPCR))
                {
                    EbolaTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.BDBVPCR))
                {
                    BundibugyoTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.SUDVPCR))
                {
                    SudanTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.CCHFPCR))
                {
                    CCHFTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.RVFPCR))
                {
                    RiftTestsDetected = true;
                }
                if (!String.IsNullOrEmpty(labResultVM.LHFPCR))
                {
                    LassaTestsDetected = true;
                }
            }

            // *********************************************************************************
            // Following (uncommented) code shows virus tests depending on what the user entered on the initial app setup
            // *********************************************************************************
            Query     selectQuery = Database.CreateQuery("SELECT * FROM metaDbInfo");
            DataTable dt          = Database.Select(selectQuery);

            OutbreakName = dt.Rows[0]["OutbreakName"].ToString();
            if (!String.IsNullOrEmpty(dt.Rows[0]["OutbreakDate"].ToString()))
            {
                OutbreakDate = (DateTime)dt.Rows[0]["OutbreakDate"];
            }
            IDPrefix    = dt.Rows[0]["IDPrefix"].ToString();
            IDSeparator = dt.Rows[0]["IDSeparator"].ToString();
            IDPattern   = dt.Rows[0]["IDPattern"].ToString();
            Country     = dt.Rows[0]["PrimaryCountry"].ToString();

            switch (dt.Rows[0]["Virus"].ToString())
            {
            case "Sudan":
                VirusTestType      = Core.Enums.VirusTestTypes.Sudan;
                SudanTestsDetected = true;
                break;

            case "Ebola":
                VirusTestType      = Core.Enums.VirusTestTypes.Ebola;
                EbolaTestsDetected = true;
                break;

            case "Marburg":
                VirusTestType        = Core.Enums.VirusTestTypes.Marburg;
                MarburgTestsDetected = true;
                break;

            case "Bundibugyo":
                VirusTestType           = Core.Enums.VirusTestTypes.Bundibugyo;
                BundibugyoTestsDetected = true;
                break;

            case "CCHF":
                VirusTestType     = Core.Enums.VirusTestTypes.CCHF;
                CCHFTestsDetected = true;
                break;

            case "Rift":
                VirusTestType     = Core.Enums.VirusTestTypes.Rift;
                RiftTestsDetected = true;
                break;

            case "Lassa":
                VirusTestType      = Core.Enums.VirusTestTypes.Lassa;
                LassaTestsDetected = true;
                break;
            }

            SortCases();
            UpdateResultNumbers();

            LabResultCollectionView = System.Windows.Data.CollectionViewSource.GetDefaultView(LabResultCollection);
            RaisePropertyChanged("LabResultCollectionView");

            if (CaseDataPopulated != null)
            {
                CaseDataPopulated(this, new CaseDataPopulatedArgs(VirusTestType, false));
            }

            TaskbarProgressState = System.Windows.Shell.TaskbarItemProgressState.None;

            return(true);
        }
Ejemplo n.º 11
0
        private Observation CreateLabResultResource(LabResultViewModel labResult)
        {
            string      identifier  = "CTOBS-123";
            Observation observation = new Observation();

            observation.Identifier = new List <Identifier>
            {
                new Identifier()
                {
                    Value = identifier, System = SystemName
                }
            };

            string procedureRequestRef = "ProcedureRequest/" + labResult.ProcedureId;

            observation.BasedOn = new List <ResourceReference>()
            {
                new ResourceReference(procedureRequestRef)
            };

            observation.Status = ObservationStatus.Final;

            string observationCode    = "15074-8";
            string observationSystem  = "http://loinc.org";
            string observationDisplay = "Glucose [Moles/volume] in Blood";

            observation.Code = new CodeableConcept
            {
                Coding = new List <Coding>
                {
                    new Coding(observationSystem,
                               observationCode, observationDisplay)
                }
            };

            string subjectRef = labResult.PatientId;

            observation.Subject = new ResourceReference(subjectRef);

            string performer    = "CTlab";
            string performerRef = "Organization/" + performer;

            observation.Performer = new List <ResourceReference>()
            {
                new ResourceReference(performerRef)
            };

            string  obsValueCodeSystem = "http://unitsofmeasure.org";
            decimal obsValue           = Convert.ToDecimal(labResult.ResultGlucoseLevel);
            string  obsValueUnity      = labResult.ResultUnit;

            observation.Value = new Quantity(obsValue, obsValueUnity, obsValueCodeSystem);

            string methodSystem  = "http://snomed.info/sct";
            string methodCode    = "707692008";
            string methodDisplay = "Corrected for glucose technique";

            observation.Method = new CodeableConcept(methodSystem, methodCode, methodDisplay);

            observation.Issued = Convert.ToDateTime(labResult.IssuedDate);

            return(observation);
        }
Ejemplo n.º 12
0
        private void LabResultActionsRowControl_DeleteRequested(object sender, EventArgs e)
        {
            MessageBoxResult result = MessageBox.Show("Are you sure you want to delete this lab record?", "Confirm deletion", MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (result == MessageBoxResult.Yes)
            {
                Dialogs.AuthCodeDialog            authDialog = new Dialogs.AuthCodeDialog(ContactTracing.Core.Constants.AUTH_CODE);
                System.Windows.Forms.DialogResult authResult = authDialog.ShowDialog();
                if (authResult == System.Windows.Forms.DialogResult.OK)
                {
                    if (authDialog.IsAuthorized)
                    {
                        try
                        {
                            if (this.DataContext != null)
                            {
                                EpiDataHelper DataHelper = this.DataContext as EpiDataHelper;

                                if (DataHelper != null)
                                {
                                    LabResultViewModel r = dg.SelectedItem as LabResultViewModel;
                                    if (r != null)
                                    {
                                        string guid = r.RecordId;

                                        IDbDriver db = DataHelper.Project.CollectedData.GetDatabase();

                                        #region Soft deletion code (Unused)
                                        /* SOFT DELETE */
                                        //int rows = 0;
                                        //string querySyntax = "UPDATE [" + DataHelper.LabForm.TableName + "] SET RecStatus = 0 WHERE [GlobalRecordId] = @GlobalRecordId";
                                        //Query labUpdateQuery = db.CreateQuery(querySyntax);
                                        //labUpdateQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid));
                                        //rows = db.ExecuteNonQuery(labUpdateQuery);

                                        //CaseViewModel c = DataHelper.GetCaseVM(r.CaseRecordGuid);

                                        //if (rows == 1)
                                        //{
                                        //    Core.DbLogger.Log(String.Format(
                                        //        "Soft-deleted lab : Case ID = {0}, Case EpiCaseDef = {1}, FLSID = {2}, Lab GUID = {3}",
                                        //            c.ID, c.EpiCaseDef, r.FieldLabSpecimenID, r.RecordId));
                                        //}
                                        //else if (rows == 0)
                                        //{
                                        //    Core.DbLogger.Log(String.Format(
                                        //        "Lab soft-deletion attempted but no lab record found in database : GUID = {0}",
                                        //            guid));
                                        //}
                                        //else if (rows > 1)
                                        //{
                                        //    Core.DbLogger.Log(String.Format(
                                        //        "Lab soft-deletion affected {0} records for GUID {1}. Duplicate labs may be present.",
                                        //            rows.ToString(), guid));
                                        //}
                                        #endregion Soft deletion code

                                        /* HARD DELETE */
                                        using (IDbTransaction transaction = db.OpenTransaction())
                                        {
                                            Query deleteQuery = db.CreateQuery("DELETE FROM " + DataHelper.LabForm.TableName + " WHERE GlobalRecordId = @GlobalRecordId");
                                            deleteQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid));
                                            int rows = db.ExecuteNonQuery(deleteQuery, transaction);

                                            foreach (Epi.Page page in DataHelper.LabForm.Pages)
                                            {
                                                deleteQuery = db.CreateQuery("DELETE FROM " + page.TableName + " WHERE GlobalRecordId = @GlobalRecordId");
                                                deleteQuery.Parameters.Add(new QueryParameter("@GlobalRecordId", System.Data.DbType.String, guid));
                                                db.ExecuteNonQuery(deleteQuery, transaction);
                                            }

                                            try
                                            {
                                                transaction.Commit();
                                            }
                                            catch (Exception ex0)
                                            {
                                                ContactTracing.Core.DbLogger.Log("Lab record deletion failed on commit. Transaction rolled back. Exception: " + ex0.Message);

                                                try
                                                {
                                                    transaction.Rollback();
                                                }
                                                catch (Exception ex1)
                                                {
                                                    ContactTracing.Core.DbLogger.Log("Lab record deletion failed on commit rollback. Transaction rolled back. Exception: " + ex1.Message);
                                                }
                                            }

                                            CaseViewModel c = DataHelper.GetCaseVM(r.CaseRecordGuid);
                                            DataHelper.PopulateLabRecordsForCase.Execute(c);
                                            db.CloseTransaction(transaction);
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(String.Format("An exception occurred while trying to delete a lab record. Message: {0}", ex.Message));//. Case ID: {0}. Please give this message to the application developer.\n{1}", caseVM.ID, ex.Message));
                            ContactTracing.Core.DbLogger.Log("Lab record deletion failed. Exception: " + ex.Message);
                        }
                    }
                }
            }
        }