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