Exemplo n.º 1
0
        public void GroupEpisodesIntoPeriods_GroupsBasedOnEndingOutcomeType()
        {
            // Act
            var periods = _testTreatmentEvents.GroupEpisodesIntoPeriods();

            // Assert
            Assert.Equal(5, periods.Count);
            var expectedPeriod0 = TreatmentPeriod.CreatePeriodFromEvents(1,
                                                                         new List <TreatmentEvent> {
                _testTreatmentEvents[0], _testTreatmentEvents[1]
            },
                                                                         _testTreatmentEvents[1].EventDate);

            var expectedPeriod1 = TreatmentPeriod.CreateTransferPeriod(_testTreatmentEvents[2]);

            var expectedPeriod2 = TreatmentPeriod.CreateTreatmentPeriod(2, _testTreatmentEvents[3]);

            var expectedPeriod3 = TreatmentPeriod.CreatePeriodFromEvents(3,
                                                                         new List <TreatmentEvent> {
                _testTreatmentEvents[5], _testTreatmentEvents[4]
            },
                                                                         _testTreatmentEvents[4].EventDate);

            var expectedPeriod4 = TreatmentPeriod.CreatePeriodFromEvents(4,
                                                                         new List <TreatmentEvent> {
                _testTreatmentEvents[6], _testTreatmentEvents[8], _testTreatmentEvents[7]
            },
                                                                         _testTreatmentEvents[7].EventDate);

            AssertTreatmentPeriodMatchesExpected(expectedPeriod0, periods[0]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod1, periods[1]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod2, periods[2]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod3, periods[3]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod4, periods[4]);
        }
Exemplo n.º 2
0
        public void GroupEpisodesIntoPeriods_CorrectlyCreatesOnePeriodWithDeathDateForPostMortemCase()
        {
            // Arrange
            var dateOfDeath     = new DateTime(1999, 12, 12);
            var treatmentEvents = new List <TreatmentEvent>
            {
                new TreatmentEvent
                {
                    TreatmentEventType = TreatmentEventType.TreatmentOutcome,
                    TreatmentOutcome   = new TreatmentOutcome {
                        TreatmentOutcomeType = TreatmentOutcomeType.Died
                    },
                    EventDate = dateOfDeath
                },
                new TreatmentEvent
                {
                    TreatmentEventType = TreatmentEventType.DiagnosisMade, EventDate = dateOfDeath.AddDays(15)
                }
            };
            var expectedPeriod = TreatmentPeriod.CreatePeriodFromEvents(1, treatmentEvents, dateOfDeath);

            // Act
            var periods = treatmentEvents.GroupEpisodesIntoPeriods(isPostMortemWithCorrectEvents: true);

            // Assert
            Assert.Single(periods);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod, periods.Single());
        }
Exemplo n.º 3
0
 private void AssertTreatmentPeriodMatchesExpected(TreatmentPeriod expected, TreatmentPeriod actual)
 {
     Assert.Equal(expected.TreatmentEvents, actual.TreatmentEvents);
     Assert.Equal(expected.PeriodNumber, actual.PeriodNumber);
     Assert.Equal(expected.IsTransfer, actual.IsTransfer);
     Assert.Equal(expected.PeriodStartDate, actual.PeriodStartDate);
     Assert.Equal(expected.PeriodEndDate, actual.PeriodEndDate);
 }
        public static List <TreatmentPeriod> GroupEpisodesIntoPeriods(this IEnumerable <TreatmentEvent> treatmentEvents, bool isPostMortemWithCorrectEvents = false)
        {
            var treatmentPeriods = new List <TreatmentPeriod>();
            var periodNumber     = 1;

            if (isPostMortemWithCorrectEvents)
            {
                var deathDate  = treatmentEvents.Single(te => te.TreatmentEventIsDeathEvent).EventDate;
                var onlyPeriod = TreatmentPeriod.CreatePeriodFromEvents(1, treatmentEvents.OrderForEpisodes(), deathDate);
                return(new List <TreatmentPeriod> {
                    onlyPeriod
                });
            }

            // The treatment period to append to; if it is null then a new period should be created
            TreatmentPeriod currentTreatmentPeriod = null;

            foreach (var treatmentEvent in treatmentEvents.OrderForEpisodes())
            {
                // If at the start of a new treatment period, make it and add the event
                if (currentTreatmentPeriod == null)
                {
                    // If a transfer out event, make a special period just for this event
                    if (treatmentEvent.TreatmentEventType == TreatmentEventType.TransferOut)
                    {
                        currentTreatmentPeriod = TreatmentPeriod.CreateTransferPeriod(treatmentEvent);
                    }
                    else
                    {
                        currentTreatmentPeriod = TreatmentPeriod.CreateTreatmentPeriod(periodNumber, treatmentEvent);
                        periodNumber++;
                    }

                    treatmentPeriods.Add(currentTreatmentPeriod);
                }
                // Otherwise append this event to the existing period
                else
                {
                    currentTreatmentPeriod.AddTreatmentEvent(treatmentEvent);
                }

                if (treatmentEvent.IsEpisodeEndingTreatmentEvent())
                {
                    currentTreatmentPeriod = null;
                }
            }

            return(treatmentPeriods);
        }
Exemplo n.º 5
0
        public void GroupEpisodesIntoPeriods_GroupsTransfers()
        {
            // Arrange
            List <TreatmentEvent> testTransferEvents = new List <TreatmentEvent>
            {
                // Episode 1
                new TreatmentEvent
                {
                    EventDate = new DateTime(2010, 1, 1), TreatmentEventType = TreatmentEventType.TreatmentStart
                },
                new TreatmentEvent
                {
                    EventDate          = new DateTime(2011, 1, 1),
                    TreatmentEventType = TreatmentEventType.TreatmentOutcome,
                    TreatmentOutcome   =
                        new TreatmentOutcome {
                        TreatmentOutcomeType = TreatmentOutcomeType.TreatmentStopped
                    }
                },
                // Transfer
                new TreatmentEvent
                {
                    EventDate = new DateTime(2012, 1, 1), TreatmentEventType = TreatmentEventType.TransferOut
                },
                // Episode 2
                new TreatmentEvent
                {
                    EventDate = new DateTime(2013, 1, 1), TreatmentEventType = TreatmentEventType.TransferIn
                },
                new TreatmentEvent
                {
                    EventDate = new DateTime(2014, 1, 1), TreatmentEventType = TreatmentEventType.TreatmentRestart
                },
                new TreatmentEvent
                {
                    EventDate = new DateTime(2015, 1, 1), TreatmentEventType = TreatmentEventType.TransferOut
                },
                // Episode 3
                new TreatmentEvent
                {
                    EventDate = new DateTime(2016, 1, 1), TreatmentEventType = TreatmentEventType.TransferIn
                },
                new TreatmentEvent
                {
                    EventDate          = new DateTime(2017, 1, 1),
                    TreatmentEventType = TreatmentEventType.TreatmentOutcome,
                    TreatmentOutcome   = new TreatmentOutcome {
                        TreatmentOutcomeType = TreatmentOutcomeType.Completed
                    }
                },
            };

            // Act
            var periods = testTransferEvents.GroupEpisodesIntoPeriods();

            // Assert
            Assert.Equal(4, periods.Count);
            var expectedPeriod0 = TreatmentPeriod.CreatePeriodFromEvents(1,
                                                                         new List <TreatmentEvent> {
                testTransferEvents[0], testTransferEvents[1]
            },
                                                                         testTransferEvents[1].EventDate);

            var expectedPeriod1 = TreatmentPeriod.CreateTransferPeriod(testTransferEvents[2]);

            var expectedPeriod2 = TreatmentPeriod.CreatePeriodFromEvents(2,
                                                                         new List <TreatmentEvent> {
                testTransferEvents[3], testTransferEvents[4], testTransferEvents[5]
            },
                                                                         testTransferEvents[5].EventDate);

            var expectedPeriod3 = TreatmentPeriod.CreatePeriodFromEvents(3,
                                                                         new List <TreatmentEvent> {
                testTransferEvents[6], testTransferEvents[7]
            },
                                                                         testTransferEvents[7].EventDate);

            AssertTreatmentPeriodMatchesExpected(expectedPeriod0, periods[0]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod1, periods[1]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod2, periods[2]);
            AssertTreatmentPeriodMatchesExpected(expectedPeriod3, periods[3]);
        }