def test_get_most_recent_previous_supervision_period_valid(self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 10, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2000, 10, 1),
            termination_date=date(2000, 11, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_periods = [supervision_period_1, supervision_period_2]

        supervision_period_index = SupervisionPeriodIndex(
            supervision_periods=supervision_periods)

        self.assertEqual(
            supervision_period_1,
            supervision_period_index.
            get_most_recent_previous_supervision_period(supervision_period_2),
        )
    def test_supervision_periods_converter_sort_by_admission_reason_court(
            self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 1, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=222,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 1, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            TRANSFER_WITHIN_STATE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        supervision_period_index = SupervisionPeriodIndex(
            supervision_periods=supervision_periods)

        sorted_supervision_periods = [
            supervision_period_1, supervision_period_2
        ]

        self.assertEqual(sorted_supervision_periods,
                         supervision_period_index.supervision_periods)
    def test_find_most_recently_terminated_supervision_period_ends_before_cutoff(
            self):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2005, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            termination_date=date(2010, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        # Set the admission date to be 1 day after the cut-off for how close a supervision period termination has to be
        # to a revocation admission to be counted as a proximal supervision period
        admission_date = (
            supervision_period_recent.termination_date +
            relativedelta(months=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT) +
            relativedelta(days=1))

        most_recently_terminated_period = (
            find_last_supervision_period_terminated_before_date(
                upper_bound_date=admission_date,
                supervision_periods=[
                    supervision_period_older,
                    supervision_period_recent,
                ],
            ))

        self.assertIsNone(most_recently_terminated_period)
    def test_supervision_periods_converter_empty_termination_date(self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=222,
            start_date=date(2000, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        supervision_period_index = SupervisionPeriodIndex(
            supervision_periods=supervision_periods)

        sorted_supervision_periods = [
            supervision_period_1, supervision_period_2
        ]

        self.assertEqual(sorted_supervision_periods,
                         supervision_period_index.supervision_periods)
    def test_prepare_supervision_periods_for_calculations_unset_future_release_dates(
        self, ):
        supervision_period = StateSupervisionPeriod.new_with_defaults(
            status=StateSupervisionPeriodStatus.UNDER_SUPERVISION,
            state_code="US_ND",
            start_date=date(1990, 1, 1),
            termination_date=date(2007, 12, 31),
            termination_reason=StateSupervisionPeriodTerminationReason.
            DISCHARGE,
        )

        updated_periods = prepare_supervision_periods_for_calculations(
            [supervision_period],
            drop_federal_and_other_country_supervision_periods=False,
        )

        updated_period = StateSupervisionPeriod.new_with_defaults(
            status=StateSupervisionPeriodStatus.UNDER_SUPERVISION,
            state_code="US_ND",
            start_date=date(1990, 1, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            INTERNAL_UNKNOWN,
            termination_date=None,
            termination_reason=None,
        )

        self.assertEqual([updated_period], updated_periods)
    def test_find_most_recently_terminated_supervision_period_none(self):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2005, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            termination_date=date(2010, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = (
            find_last_supervision_period_terminated_before_date(
                upper_bound_date=date(1990, 10, 1),
                supervision_periods=[
                    supervision_period_older,
                    supervision_period_recent,
                ],
            ))

        self.assertIsNone(most_recently_terminated_period)
    def test_find_most_recently_terminated_supervision_period_overlapping(
            self):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2007, 9, 20),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        # Overlapping supervision period should not be returned
        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            termination_date=date(2010, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = (
            find_last_supervision_period_terminated_before_date(
                upper_bound_date=date(2007, 10, 1),
                supervision_periods=[
                    supervision_period_older,
                    supervision_period_recent,
                ],
            ))

        self.assertEqual(supervision_period_older,
                         most_recently_terminated_period)
示例#8
0
    def test_us_id_pre_commitment_supervision_period(self) -> None:
        supervision_period_set = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ID",
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PROBATION,
        )

        supervision_period_unset = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ID",
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=None,
        )

        supervision_periods = [
            supervision_period_set, supervision_period_unset
        ]

        self.assertEqual(
            supervision_period_set,
            self._test_us_id_pre_commitment_supervision_period(
                admission_date=date(2017, 5, 11),
                admission_reason=StateIncarcerationPeriodAdmissionReason.
                PROBATION_REVOCATION,
                supervision_periods=supervision_periods,
            ),
        )
    def test_supervision_start_dates_by_period_id_no_official_admission(self):
        # The first supervision period always counts as the official start of supervision
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 10, 3),
            admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=222,
            start_date=date(2000, 10, 3),
            termination_date=date(2000, 10, 11),
            admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        supervision_period_index = SupervisionPeriodIndex(supervision_periods=supervision_periods)

        expected_output = {
            supervision_period_1.supervision_period_id: supervision_period_1.start_date,
            supervision_period_2.supervision_period_id: supervision_period_1.start_date
        }

        self.assertEqual(expected_output, supervision_period_index.supervision_start_dates_by_period_id)
    def test_supervision_periods_by_termination_month_multiple_years(self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 5, 3),
            admission_reason=StateSupervisionPeriodAdmissionReason.CONDITIONAL_RELEASE
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=222,
            start_date=date(2020, 10, 3),
            termination_date=date(2020, 10, 11),
            admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        supervision_period_index = SupervisionPeriodIndex(supervision_periods=supervision_periods)

        expected_output = {
            2000: {
                5: [supervision_period_1]
            },
            2020: {
                10: [supervision_period_2]
            }
        }

        self.assertEqual(expected_output, supervision_period_index.supervision_periods_by_termination_month)
    def test_supervision_start_dates_by_period_id(self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 10, 3),
            admission_reason=StateSupervisionPeriodAdmissionReason.CONDITIONAL_RELEASE
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=222,
            start_date=date(2000, 10, 3),
            termination_date=date(2000, 10, 11),
            admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        supervision_period_index = SupervisionPeriodIndex(supervision_periods=supervision_periods)

        expected_output = {
            supervision_period_1.supervision_period_id: supervision_period_1.start_date,
            supervision_period_2.supervision_period_id: supervision_period_1.start_date
        }

        self.assertEqual(expected_output, supervision_period_index.supervision_start_dates_by_period_id)
示例#12
0
    def test_prepare_supervision_periods_for_calculations_unset_future_release_dates(
        self, ) -> None:
        supervision_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=1,
            status=StateSupervisionPeriodStatus.UNDER_SUPERVISION,
            state_code="US_XX",
            start_date=datetime.date(1990, 1, 1),
            termination_date=datetime.date(2007, 12, 31),
            termination_reason=StateSupervisionPeriodTerminationReason.
            DISCHARGE,
        )

        updated_periods = self._pre_processed_supervision_periods_for_calculations(
            [supervision_period], )

        updated_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=1,
            status=StateSupervisionPeriodStatus.UNDER_SUPERVISION,
            state_code="US_XX",
            start_date=datetime.date(1990, 1, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            INTERNAL_UNKNOWN,
            termination_date=None,
            termination_reason=None,
        )

        self.assertEqual([updated_period], updated_periods)
示例#13
0
    def test_prepare_supervision_periods_for_calculations_sort_empty_termination_date(
        self, ):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=datetime.date(2000, 1, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            termination_date=datetime.date(2000, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
            termination_reason=StateSupervisionPeriodTerminationReason.
            TRANSFER_WITHIN_STATE,
        )

        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=222,
            start_date=datetime.date(2000, 1, 1),
            status=StateSupervisionPeriodStatus.UNDER_SUPERVISION,
            admission_reason=StateSupervisionPeriodAdmissionReason.
            TRANSFER_WITHIN_STATE,
        )

        supervision_periods = [supervision_period_2, supervision_period_1]

        updated_periods = self._pre_processed_supervision_periods_for_calculations(
            supervision_periods, )

        sorted_supervision_periods = [
            supervision_period_1, supervision_period_2
        ]

        self.assertEqual(sorted_supervision_periods, updated_periods)
示例#14
0
    def test_associateSupervisionPeriodsWithSentenceDoNotMoveOntoPlaceholder(
            self):
        # Arrange
        placeholder_inc_s = StateIncarcerationSentence.new_with_defaults()

        placeholder_sp = StateSupervisionPeriod.new_with_defaults()

        sp = StateSupervisionPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID_3,
            start_date=_DATE_2,
            termination_date=_DATE_3)

        inc_s = StateIncarcerationSentence.new_with_defaults(
            external_id=_EXTERNAL_ID,
            start_date=_DATE,
            completion_date=_DATE_8,
            supervision_periods=[sp, placeholder_sp])

        sg = StateSentenceGroup.new_with_defaults(
            incarceration_sentences=[inc_s, placeholder_inc_s])

        state_person = StatePerson.new_with_defaults(sentence_groups=[sg])

        # Should remain unchanged - periods should not get attached to other
        # placeholder sentence.
        expected_person = attr.evolve(state_person)

        # Act
        input_people = \
            converter.convert_entity_people_to_schema_people(
                [state_person])
        move_supervision_periods_onto_sentences_by_date(input_people)

        # Assert
        self.assert_people_match([expected_person], input_people)
    def test_find_most_recently_terminated_supervision_period_overlapping_no_termination(
        self, ):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2007, 9, 20),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        # Overlapping supervision period that should have been found in the other identifier code
        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = (
            find_last_supervision_period_terminated_before_date(
                upper_bound_date=date(2007, 10, 1),
                supervision_periods=[
                    supervision_period_older,
                    supervision_period_recent,
                ],
            ))

        self.assertEqual(supervision_period_older,
                         most_recently_terminated_period)
    def test_us_id_filter_supervision_periods_for_revocation_identification(
            self):
        supervision_period_set = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id='sp1',
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code='US_ID',
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PROBATION)

        supervision_period_unset = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id='sp1',
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code='US_ID',
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=None)

        supervision_periods = [
            supervision_period_set, supervision_period_unset
        ]

        self.assertEqual(
            [supervision_period_set],
            us_id_filter_supervision_periods_for_revocation_identification(
                supervision_periods))
    def test_associatePeriodsWithSentence_doNotMatchSentenceWithNoStart(self):
        # Arrange
        placeholder_sp = StateSupervisionPeriod.new_with_defaults()

        sp = StateSupervisionPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID_3,
            start_date=_DATE_2,
            termination_date=_DATE_3)
        ip = StateIncarcerationPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID_3,
            admission_date=_DATE_2,
            release_date=_DATE_3)

        inc_s_no_dates = StateIncarcerationSentence.new_with_defaults(
            external_id=_EXTERNAL_ID, supervision_periods=[placeholder_sp])

        placeholder_inc_s = StateIncarcerationSentence.new_with_defaults(
            incarceration_periods=[ip], supervision_periods=[sp])

        sg = StateSentenceGroup.new_with_defaults(
            incarceration_sentences=[inc_s_no_dates, placeholder_inc_s])

        state_person = StatePerson.new_with_defaults(sentence_groups=[sg])

        # Should remain unchanged - the non-placeholder period should not get moved onto sentence with an id
        # but no start date
        expected_person = attr.evolve(state_person)

        # Act
        input_people = converter.convert_entity_people_to_schema_people(
            [state_person])
        move_periods_onto_sentences_by_date(input_people)

        # Assert
        self.assert_people_match([expected_person], input_people)
    def test_get_most_recent_previous_supervision_period_first_in_list(self):
        supervision_period_1 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2000, 1, 1),
            termination_date=date(2000, 10, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        supervision_period_2 = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            supervision_period_id=111,
            start_date=date(2010, 10, 1),
            termination_date=date(2010, 11, 1),
            admission_reason=StateSupervisionPeriodAdmissionReason.
            COURT_SENTENCE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_periods = [supervision_period_1, supervision_period_2]

        supervision_period_index = PreProcessedSupervisionPeriodIndex(
            supervision_periods=standard_date_sort_for_supervision_periods(
                supervision_periods))

        self.assertIsNone(
            supervision_period_index.
            get_most_recent_previous_supervision_period(supervision_period_1))
示例#19
0
    def test_us_id_filter_supervision_periods_for_revocation_identification_internal_unknown(
        self, ):
        supervision_period_set = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ID",
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PROBATION,
        )

        supervision_period_unset = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ID",
            start_date=date(2017, 3, 5),
            termination_date=date(2017, 5, 9),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.INTERNAL_UNKNOWN,
        )

        supervision_periods = [
            supervision_period_set, supervision_period_unset
        ]

        self.assertEqual(
            [supervision_period_set],
            us_id_filter_supervision_periods_for_revocation_identification(
                supervision_periods),
        )
示例#20
0
 def testUsIdGetSupervisionPeriodAdmissionOverride_investigationTooFarBack(
     self,
 ) -> None:
     previous_termination_date = self.upper_bound_date - relativedelta(days=10)
     supervision_period_previous = StateSupervisionPeriod.new_with_defaults(
         state_code="US_ID",
         supervision_period_id=1,
         start_date=self.upper_bound_date - relativedelta(days=100),
         termination_date=previous_termination_date,
         termination_reason=StateSupervisionPeriodTerminationReason.TRANSFER_WITHIN_STATE,
         supervision_period_supervision_type=StateSupervisionPeriodSupervisionType.INVESTIGATION,
         status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
     )
     supervision_period = StateSupervisionPeriod.new_with_defaults(
         state_code="US_ID",
         supervision_period_id=2,
         admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE,
         start_date=previous_termination_date
         + relativedelta(days=SUPERVISION_TYPE_LOOKBACK_DAYS_LIMIT + 1),
         supervision_period_supervision_type=StateSupervisionPeriodSupervisionType.PAROLE,
         status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
     )
     idx = PreProcessedSupervisionPeriodIndex(
         supervision_periods=[supervision_period, supervision_period_previous]
     )
     found_admission_reason = us_id_get_supervision_period_admission_override(
         supervision_period=supervision_period, supervision_period_index=idx
     )
     self.assertEqual(supervision_period.admission_reason, found_admission_reason)
示例#21
0
 def testUsIdGetSupervisionPeriodAdmissionOverride_notPrecededByInvestigation(
     self,
 ) -> None:
     supervision_period_previous = StateSupervisionPeriod.new_with_defaults(
         state_code="US_ID",
         supervision_period_id=1,
         start_date=self.upper_bound_date - relativedelta(days=100),
         termination_date=self.upper_bound_date - relativedelta(days=10),
         termination_reason=StateSupervisionPeriodTerminationReason.TRANSFER_WITHIN_STATE,
         supervision_period_supervision_type=StateSupervisionPeriodSupervisionType.PAROLE,
         status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
     )
     supervision_period = StateSupervisionPeriod.new_with_defaults(
         state_code="US_ID",
         supervision_period_id=2,
         admission_reason=StateSupervisionPeriodAdmissionReason.TRANSFER_WITHIN_STATE,
         start_date=supervision_period_previous.termination_date,
         supervision_period_supervision_type=StateSupervisionPeriodSupervisionType.PAROLE,
         status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
     )
     idx = PreProcessedSupervisionPeriodIndex(
         supervision_periods=[supervision_period, supervision_period_previous]
     )
     found_admission_reason = us_id_get_supervision_period_admission_override(
         supervision_period=supervision_period, supervision_period_index=idx
     )
     self.assertEqual(supervision_period.admission_reason, found_admission_reason)
示例#22
0
    def test_find_last_terminated_period_before_date_none(self):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2005, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            termination_date=date(2010, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = find_last_terminated_period_before_date(
            upper_bound_date=date(1990, 10, 1),
            periods=[
                supervision_period_older,
                supervision_period_recent,
            ],
            maximum_months_proximity=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT,
        )

        self.assertIsNone(most_recently_terminated_period)
示例#23
0
    def test_find_last_terminated_period_before_date_same_termination_date(
        self, ):
        supervision_period_a = StateSupervisionPeriod.new_with_defaults(
            external_id="a",
            state_code="US_XX",
            start_date=date(2006, 1, 1),
            termination_date=date(2007, 12, 31),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_b = StateSupervisionPeriod.new_with_defaults(
            external_id="b",
            state_code="US_XX",
            start_date=date(2006, 1, 1),
            termination_date=date(2007, 12, 31),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = find_last_terminated_period_before_date(
            upper_bound_date=date(2008, 1, 10),
            periods=[supervision_period_a, supervision_period_b],
            maximum_months_proximity=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT,
        )

        self.assertEqual(supervision_period_a, most_recently_terminated_period)
示例#24
0
    def test_find_last_terminated_period_before_date_overlapping_no_termination(
        self, ):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2007, 9, 20),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        # Overlapping supervision period that should have been found in the other identifier code
        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        most_recently_terminated_period = find_last_terminated_period_before_date(
            upper_bound_date=date(2007, 10, 1),
            periods=[
                supervision_period_older,
                supervision_period_recent,
            ],
            maximum_months_proximity=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT,
        )

        self.assertEqual(supervision_period_older,
                         most_recently_terminated_period)
示例#25
0
    def test_find_last_terminated_period_before_date_ends_on_cutoff_date(self):
        supervision_period_older = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2000, 1, 1),
            termination_date=date(2005, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_recent = StateSupervisionPeriod.new_with_defaults(
            state_code="US_XX",
            start_date=date(2006, 3, 1),
            termination_date=date(2010, 1, 1),
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        # Set the admission date to be on the last day of the cut-off for how close a supervision period termination
        # has to be to a revocation admission to be counted as a proximal supervision period
        admission_date = supervision_period_recent.termination_date + relativedelta(
            days=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT)

        most_recently_terminated_period = find_last_terminated_period_before_date(
            upper_bound_date=admission_date,
            periods=[
                supervision_period_older,
                supervision_period_recent,
            ],
            maximum_months_proximity=SUPERVISION_PERIOD_PROXIMITY_MONTH_LIMIT,
        )

        self.assertEqual(supervision_period_recent,
                         most_recently_terminated_period)
示例#26
0
    def test_get_commitment_from_supervision_details_transfer_on_admission(
            self):
        """Tests that the period *prior to the incarceration admission* is chosen
        when a person is transferred to a new supervision period on the date of an
        admission to incarceration."""
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            state_code="US_XX",
            incarceration_period_id=111,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            SANCTION_ADMISSION,
            admission_date=date(2020, 1, 1),
            status=StateIncarcerationPeriodStatus.IN_CUSTODY,
            specialized_purpose_for_incarceration=
            StateSpecializedPurposeForIncarceration.SHOCK_INCARCERATION,
        )

        pre_commitment_sp = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=_DEFAULT_SUPERVISION_PERIOD_ID,
            state_code="US_XX",
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE,
            start_date=date(2010, 12, 1),
            termination_date=incarceration_period.admission_date,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_period_while_in_prison = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=222,
            state_code="US_XX",
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE,
            start_date=incarceration_period.admission_date,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        commitment_details = self._test_get_commitment_from_supervision_details(
            incarceration_period,
            [pre_commitment_sp, supervision_period_while_in_prison],
        )
        self.assertEqual(
            CommitmentDetails(
                purpose_for_incarceration=
                StateSpecializedPurposeForIncarceration.SHOCK_INCARCERATION,
                purpose_for_incarceration_subtype=None,
                level_1_supervision_location_external_id=pre_commitment_sp.
                supervision_site,
                level_2_supervision_location_external_id=None,
                supervising_officer_external_id=
                DEFAULT_SUPERVISION_PERIOD_AGENT_ASSOCIATIONS.get(
                    pre_commitment_sp.supervision_period_id).get(
                        "agent_external_id"),
                case_type=StateSupervisionCaseType.GENERAL,
                supervision_level=pre_commitment_sp.supervision_level,
                supervision_level_raw_text=pre_commitment_sp.
                supervision_level_raw_text,
                supervision_type=StateSupervisionPeriodSupervisionType.PAROLE,
            ),
            commitment_details,
        )
示例#27
0
    def test_associatedSupervisionPeriodsWithSentences(self):
        # Arrange
        sp_no_match = StateSupervisionPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID,
            start_date=_DATE,
            termination_date=_DATE_2)

        sp_1 = StateSupervisionPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID,
            start_date=_DATE_4,
            termination_date=_DATE_6)

        sp_2 = StateSupervisionPeriod.new_with_defaults(
            external_id=_EXTERNAL_ID_2,
            start_date=_DATE_6,
            termination_date=None)

        placeholder_ss = StateSupervisionSentence.new_with_defaults(
            supervision_periods=[sp_no_match, sp_1, sp_2])

        ss = StateSupervisionSentence.new_with_defaults(
            external_id=_EXTERNAL_ID, start_date=_DATE_4, completion_date=None)
        inc_s = StateIncarcerationSentence.new_with_defaults(
            external_id=_EXTERNAL_ID,
            start_date=_DATE_3,
            completion_date=_DATE_5)

        sg = StateSentenceGroup.new_with_defaults(
            incarceration_sentences=[inc_s],
            supervision_sentences=[ss, placeholder_ss])

        state_person = StatePerson.new_with_defaults(sentence_groups=[sg])

        expected_sp_1 = attr.evolve(sp_1)
        expected_sp_2 = attr.evolve(sp_2)

        expected_placeholder_ss = attr.evolve(
            placeholder_ss, supervision_periods=[sp_no_match])
        expected_inc_s = attr.evolve(inc_s,
                                     supervision_periods=[expected_sp_1])
        expected_ss = attr.evolve(
            ss, supervision_periods=[expected_sp_1, expected_sp_2])

        expected_sg = attr.evolve(
            sg,
            supervision_sentences=[expected_ss, expected_placeholder_ss],
            incarceration_sentences=[expected_inc_s])
        expected_person = attr.evolve(state_person,
                                      sentence_groups=[expected_sg])

        # Act
        input_people = \
            converter.convert_entity_people_to_schema_people(
                [state_person])
        move_supervision_periods_onto_sentences_by_date(input_people)

        # Assert
        self.assert_people_match([expected_person], input_people)
示例#28
0
    def testUsIdGetSupervisionPeriodAdmissionReasonOverride_multiplePeriodsStartOnInvestigationEnd(
        self, ):
        supervision_period_previous = StateSupervisionPeriod.new_with_defaults(
            state_code="US_ID",
            supervision_period_id=1,
            start_date=self.upper_bound_date - relativedelta(days=100),
            termination_date=self.upper_bound_date - relativedelta(days=10),
            termination_reason=StateSupervisionPeriodTerminationReason.
            TRANSFER_WITHIN_STATE,
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.INVESTIGATION,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        supervision_period_one_day = StateSupervisionPeriod.new_with_defaults(
            state_code="US_ID",
            supervision_period_id=2,
            admission_reason=StateSupervisionPeriodAdmissionReason.
            TRANSFER_WITHIN_STATE,
            start_date=supervision_period_previous.termination_date,
            termination_date=supervision_period_previous.termination_date,
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.INFORMAL_PROBATION,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        supervision_period_ongoing = StateSupervisionPeriod.new_with_defaults(
            state_code="US_ID",
            supervision_period_id=3,
            admission_reason=StateSupervisionPeriodAdmissionReason.
            TRANSFER_WITHIN_STATE,
            start_date=supervision_period_one_day.termination_date,
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        idx = SupervisionPeriodIndex(supervision_periods=[
            supervision_period_previous,
            supervision_period_ongoing,
            supervision_period_one_day,
        ])
        found_admission_reason_for_one_day = (
            us_id_get_supervision_period_admission_override(
                supervision_period=supervision_period_one_day,
                supervision_period_index=idx,
            ))
        self.assertEqual(
            StateSupervisionPeriodAdmissionReason.COURT_SENTENCE,
            found_admission_reason_for_one_day,
        )
        found_admission_reason_for_ongoing = (
            us_id_get_supervision_period_admission_override(
                supervision_period=supervision_period_ongoing,
                supervision_period_index=idx,
            ))
        self.assertEqual(
            supervision_period_ongoing.admission_reason,
            found_admission_reason_for_ongoing,
        )
示例#29
0
    def test_referrals_for_supervision_periods_different_types(self):
        supervision_period_1 = \
            StateSupervisionPeriod.new_with_defaults(
                supervision_period_id=111,
                status=StateSupervisionPeriodStatus.TERMINATED,
                state_code='UT',
                start_date=date(2008, 3, 5),
                termination_date=date(2010, 5, 19),
                termination_reason=StateSupervisionPeriodTerminationReason.DISCHARGE,
                supervision_type=StateSupervisionType.PAROLE
            )

        supervision_period_2 = \
            StateSupervisionPeriod.new_with_defaults(
                supervision_period_id=111,
                status=StateSupervisionPeriodStatus.TERMINATED,
                state_code='UT',
                start_date=date(2008, 3, 5),
                termination_date=date(2010, 5, 19),
                termination_reason=StateSupervisionPeriodTerminationReason.DISCHARGE,
                supervision_type=StateSupervisionType.PROBATION
            )

        supervision_periods = [supervision_period_1, supervision_period_2]

        program_referrals = identifier.referrals_for_supervision_periods(
            state_code='UT',
            program_id='XXX',
            referral_date=date(2009, 3, 19),
            participation_status=StateProgramAssignmentParticipationStatus.
            DENIED,
            assessment_score=39,
            assessment_type=StateAssessmentType.LSIR,
            supervision_periods=supervision_periods,
            supervision_period_to_agent_associations=
            DEFAULT_SUPERVISION_PERIOD_AGENT_ASSOCIATIONS)

        self.assertListEqual([
            ProgramReferralEvent(
                state_code='UT',
                program_id='XXX',
                event_date=date(2009, 3, 19),
                participation_status=StateProgramAssignmentParticipationStatus.
                DENIED,
                assessment_score=39,
                assessment_type=StateAssessmentType.LSIR,
                supervision_type=supervision_period_1.supervision_type),
            ProgramReferralEvent(
                state_code='UT',
                program_id='XXX',
                event_date=date(2009, 3, 19),
                participation_status=StateProgramAssignmentParticipationStatus.
                DENIED,
                assessment_score=39,
                assessment_type=StateAssessmentType.LSIR,
                supervision_type=supervision_period_2.supervision_type)
        ], program_referrals)
示例#30
0
    def test_pre_processed_incarceration_periods_for_calculations_NewAdmissionNotDirectlyAfterProbationRevocation(
        self, ) -> None:
        """Tests that when a NEW_ADMISSION incarceration follows a PROBATION+REVOCATION
        supervision period, but not directly, as there is a PRE_CONFINEMENT+REVOCATION
        supervision period in between them, then the incarceration period is not
        updated."""
        earlier_probation_supervision_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ND",
            start_date=date(2019, 3, 5),
            termination_date=date(2019, 5, 4),
            termination_reason=StateSupervisionPeriodTerminationReason.
            REVOCATION,
            supervision_type=StateSupervisionType.PROBATION,
        )

        later_parole_supervision_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=111,
            external_id="sp1",
            status=StateSupervisionPeriodStatus.TERMINATED,
            state_code="US_ND",
            start_date=date(2019, 3, 5),
            termination_date=date(2019, 6, 9),
            termination_reason=StateSupervisionPeriodTerminationReason.
            REVOCATION,
            supervision_type=StateSupervisionType.PRE_CONFINEMENT,
        )

        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            incarceration_period_id=222,
            external_id="ip2",
            state_code="US_ND",
            incarceration_type=StateIncarcerationType.STATE_PRISON,
            status=StateIncarcerationPeriodStatus.IN_CUSTODY,
            admission_date=date(2019, 6, 17),
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            NEW_ADMISSION,
        )

        updated_period = attr.evolve(
            incarceration_period,
            specialized_purpose_for_incarceration=
            StateSpecializedPurposeForIncarceration.GENERAL,
        )

        validated_incarceration_periods = (
            self._pre_processed_incarceration_periods_for_calculations(
                incarceration_periods=[incarceration_period],
                supervision_periods=[
                    earlier_probation_supervision_period,
                    later_parole_supervision_period,
                ],
            ))

        self.assertEqual([updated_period], validated_incarceration_periods)