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]); }
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); }
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]); }