public async Task <CaseReportViewModel> GetCaseReportForUser(string userId, int caseId)
        {
            Case currentCase = await _caseRepository.GetByIdAsync(caseId);

            Report report = GetExistingReport(userId, caseId);

            if (currentCase == null)
            {
                return(null);
            }

            CaseReportViewModel caseReport = new CaseReportViewModel
            {
                CaseNumber  = currentCase.CaseNumber,
                PatientAge  = currentCase.PatientAge,
                TumourSize  = currentCase.TumourSize,
                SlideUrl    = currentCase.SlideURL,
                IsSubmitted = false
            };

            if (report != null)
            {
                caseReport.TumourGrade = report.TumourGrade;
                caseReport.NumberofLVI = report.NumberofLVI;
                caseReport.IsSubmitted = report.IsSubmitted;
            }

            return(caseReport);
        }
Пример #2
0
 public void GivenCaseReportWithNoDescription()
 {
     _caseReportViewModel = new CaseReportViewModel
     {
         Title       = "Test Title",
         Description = null,
         OpenDate    = new DateTime()
     };
 }
Пример #3
0
        public void AddCaseReport__SavesReportToDatabase__ReturnsViewModel()
        {
            var title      = $"Jessie James Report {Guid.NewGuid()}";
            var caseReport = new CaseReportViewModel
            {
                Title       = title,
                Description = "Jessie was captured and put in prison."
            };

            var caseReportService = new CaseReportsService();
            var actual            = caseReportService.PostCaseReport(caseReport);

            Assert.AreEqual(actual.Title, caseReport.Title);
            Assert.AreEqual(actual.Description, caseReport.Description);
        }
        public async void CalculateCumulativeStatistics_CalculatesCorrectly(Report[] testReports)
        {
            // Arrange
            Report currentTestReport  = testReports[testReports.Length - 1];
            Report previousTestReport = null;

            if (testReports.Length > 1)
            {
                previousTestReport = testReports[testReports.Length - 2];
            }

            var mock = new Mock <IReportService>();

            mock.Setup(rs => rs.GetPreviousUserReport(It.IsAny <string>())).Returns(previousTestReport);
            mock.Setup(rs => rs.CalculateStatistics(
                           It.IsAny <int>(),
                           It.IsAny <decimal>(),
                           It.IsAny <Grade>(),
                           It.IsAny <int>(),
                           It.IsAny <Report>())).Returns(currentTestReport.Statistics);


            CaseReportViewModel model = new CaseReportViewModel()
            {
                PatientAge  = currentTestReport.Case.PatientAge,
                TumourSize  = currentTestReport.Case.TumourSize,
                TumourGrade = currentTestReport.TumourGrade,
                NumberofLVI = currentTestReport.NumberofLVI
            };

            InterventionData expectedData = InterventionTestData.OrderedInterventionDataSet[testReports.Length - 1];

            //Act
            CaseReportViewModelService crvmService = new CaseReportViewModelService(null, null, mock.Object);
            InterventionData           actualData  = await crvmService.GetInterventionDataForCaseReport(model, "testUser");

            //Assert
            for (int i = 0; i < actualData.ChartXAxis.Length; i++)
            {
                Assert.Equal(Decimal.Round(expectedData.ObservedYValues[i], 5), Decimal.Round(actualData.ObservedYValues[i], 5));
                Assert.Equal(Decimal.Round(expectedData.TheoreticalYValues[i], 5), Decimal.Round(actualData.TheoreticalYValues[i], 5));
            }
            Assert.Equal(Decimal.Round(expectedData.PreTestProbability, 5), Decimal.Round(actualData.PreTestProbability, 5));
            Assert.Equal(Decimal.Round(expectedData.PostTestProbability, 5), Decimal.Round(actualData.PostTestProbability, 5));
        }
        public async Task GetPreTestProbabilityData(CaseReportViewModel caseReportViewModel, ReportStatistics statistics)
        {
            if (statistics.BayesForSize > 0)
            {
                await Task.Run(() => _reportService.CalculatePreTestProbability(statistics, caseReportViewModel.TumourGrade));
            }
            else
            {
                // Assume we haven't yet calculated the first two bayes theorum values (probabilities based on age and tumour size)
                await Task.Run(() => _reportService.CalculateAgeBasedStatistics(statistics, caseReportViewModel.PatientAge));

                await Task.Run(() => _reportService.CalculateSizeBasedStatistics(statistics, caseReportViewModel.TumourSize));

                await Task.Run(() => _reportService.CalculatePreTestProbability(statistics, caseReportViewModel.TumourGrade));
            }

            return;
        }
Пример #6
0
        public void AddCaseReport__SavesReportToDatabaseSuccessfully()
        {
            var title      = $"Jessie James Report {Guid.NewGuid()}";
            var caseReport = new CaseReportViewModel
            {
                Title       = title,
                Description = "Jessie was captured and put in prison."
            };

            var caseReportService = new CaseReportsService();

            caseReportService.PostCaseReport(caseReport);

            var dbReport = GetCaseReportFromDatabase(title);

            Assert.AreEqual(dbReport.Title, caseReport.Title);
            Assert.AreEqual(dbReport.Description, caseReport.Description);
        }
        public async Task <InterventionData> GetInterventionDataForCaseReport(CaseReportViewModel caseReportViewModel, string userId)
        {
            int[]     chartXAxis;
            decimal[] theoreticalYValues;
            decimal[] observedYValues;

            Report previousReport = _reportService.GetPreviousUserReport(userId);

            int currentReportNumber = previousReport != null ? previousReport.UserReportNumber + 1 : 1;

            // Calculate statistics for the current case report on the fly
            ReportStatistics currentStatistics = await Task.Run(() => _reportService.CalculateStatistics(
                                                                    caseReportViewModel.PatientAge,
                                                                    caseReportViewModel.TumourSize,
                                                                    caseReportViewModel.TumourGrade,
                                                                    caseReportViewModel.NumberofLVI,
                                                                    previousReport));

            // Get the theoretical series values (x and y)
            theoreticalYValues = new decimal[currentReportNumber + 1];
            observedYValues    = new decimal[currentReportNumber + 1];
            chartXAxis         = new int[currentReportNumber + 1];

            BinomialDistribution binomDist = new BinomialDistribution(currentReportNumber, (double)currentStatistics.CumulativeAverageBayesForGrade);

            for (int i = 0; i <= currentReportNumber; i++)
            {
                theoreticalYValues[i] = (decimal)binomDist.ProbabilityMassFunction(i);
                observedYValues[i]    = currentStatistics.CumulativeCasesWithLVIPos == i ? currentStatistics.BinomialDist : 0;
                chartXAxis[i]         = i;
            }

            return(new InterventionData()
            {
                TheoreticalYValues = theoreticalYValues,
                ObservedYValues = observedYValues,
                ChartXAxis = chartXAxis,
                PreTestProbability = currentStatistics.BayesForGrade,
                PostTestProbability = currentStatistics.BayesForNumberOfLVI,
                LVIReported = caseReportViewModel.NumberofLVI > 0 ? true : false
            });
        }
Пример #8
0
 public void GivenCaseReport()
 {
     _caseReportViewModel = JessieJamesCaseReportViewModel.Build(_docketNumber);
 }
 public ActionResult PostCaseReport(CaseReportViewModel caseReportViewModel)
 {
     return(Ok(_caseReportsService.PostCaseReport(caseReportViewModel)));
 }
        public async Task CreateOrUpdateCaseReport(CaseReportViewModel caseReport, Report existingReport, int caseId, string userId, bool isSubmitted = false)
        {
            Case currentCase = await _caseRepository.GetByIdAsync(caseId);

            await _reportService.CreateOrUpdateReportFromCase(currentCase, existingReport, caseReport.TumourGrade, caseReport.NumberofLVI, userId, isSubmitted);
        }
        public async Task <IActionResult> OnGetAdditionalProbabilityDataAsync(int?id, [FromQuery] CaseReportViewModel caseReportData)
        {
            InterventionData = await _caseReportService.GetInterventionDataForCaseReport(caseReportData, _userManager.GetUserId(User));

            return(new JsonResult(InterventionData));
        }
        public async Task <IActionResult> OnGetPreTestProbabilityDataAsync(int?id, [FromQuery] CaseReportViewModel caseReportData)
        {
            await _caseReportService.GetPreTestProbabilityData(caseReportData, _statistics);

            return(new JsonResult(_statistics.BayesForGrade));
        }
Пример #13
0
 public PostCaseReportCommand(CaseReportViewModel caseReport)
 {
     _caseReport = caseReport;
 }