def test_us_id_revoked_supervision_period_if_revocation_occurred_no_revocation( self, ): incarceration_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 17), admission_reason=StateIncarcerationPeriodAdmissionReason. NEW_ADMISSION, release_date=date(2019, 5, 29), release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.GENERAL, ) ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( incarceration_period, [], None) self.assertFalse(admission_is_revocation) self.assertIsNone(revoked_period)
def test_us_id_revoked_supervision_period_if_revocation_occurred_treatment_transfer_not_revocation( self, ): supervision_period = StateSupervisionPeriod.new_with_defaults( state_code="US_ID", start_date=date(2017, 1, 1), termination_date=date(2017, 5, 17), supervision_period_supervision_type= StateSupervisionPeriodSupervisionType.PROBATION, status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO, ) treatment_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 17), admission_reason=StateIncarcerationPeriodAdmissionReason. RETURN_FROM_SUPERVISION, release_date=date(2017, 5, 29), release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.TREATMENT_IN_PRISON, ) transfer_incarceration_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 29), admission_reason=StateIncarcerationPeriodAdmissionReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.GENERAL, ) supervision_periods = [supervision_period] ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( transfer_incarceration_period, supervision_periods, treatment_period) self.assertFalse(admission_is_revocation) self.assertIsNone(revoked_period)
def test_us_id_revoked_supervision_period_if_revocation_occurred_parole_board_to_treatment_revocation( self, ): supervision_period = StateSupervisionPeriod.new_with_defaults( state_code="US_ID", start_date=date(2017, 1, 1), termination_date=date(2017, 5, 17), supervision_period_supervision_type= StateSupervisionPeriodSupervisionType.PAROLE, status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO, ) board_hold_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 17), admission_reason=StateIncarcerationPeriodAdmissionReason. RETURN_FROM_SUPERVISION, release_date=date(2017, 5, 29), release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.PAROLE_BOARD_HOLD, ) incarceration_revocation_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 29), admission_reason=StateIncarcerationPeriodAdmissionReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.TREATMENT_IN_PRISON, ) supervision_periods = [supervision_period] ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( incarceration_revocation_period, supervision_periods, board_hold_period) self.assertTrue(admission_is_revocation) self.assertEqual(revoked_period, supervision_period)
def revoked_supervision_periods_if_revocation_occurred( state_code: str, incarceration_period: StateIncarcerationPeriod, supervision_periods: List[StateSupervisionPeriod], preceding_incarceration_period: Optional[StateIncarcerationPeriod], ) -> Tuple[bool, List[StateSupervisionPeriod]]: """If the incarceration period was a result of a supervision revocation, finds the supervision periods that were revoked. Returns False, [] if the incarceration period was not a result of a revocation. Returns True and the list of supervision periods that were revoked if the incarceration period was a result of a revocation. In some cases, it's possible for the admission to be a revocation even though we cannot identify the corresponding supervision periods that were revoked (e.g. the person was serving supervision out-of-state). In these instances, this function will return True and an empty list []. """ revoked_periods: List[StateSupervisionPeriod] = [] if state_code == StateCode.US_ID.value: ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( incarceration_period, supervision_periods, preceding_incarceration_period ) if revoked_period: revoked_periods = [revoked_period] elif state_code == StateCode.US_PA.value: ( admission_is_revocation, revoked_periods, ) = us_pa_revoked_supervision_periods_if_revocation_occurred( incarceration_period, supervision_periods ) else: admission_is_revocation = is_revocation_admission( incarceration_period.admission_reason ) revoked_periods = get_relevant_supervision_periods_before_admission_date( incarceration_period.admission_date, supervision_periods ) return admission_is_revocation, revoked_periods
def test_us_id_revoked_supervision_period_if_revocation_occurred_probation_revocation( self, ): supervision_period = StateSupervisionPeriod.new_with_defaults( state_code="US_ID", start_date=date(2017, 1, 1), termination_date=date(2017, 5, 17), supervision_period_supervision_type= StateSupervisionPeriodSupervisionType.PROBATION, status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO, ) incarceration_revocation_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 17), admission_reason=StateIncarcerationPeriodAdmissionReason. RETURN_FROM_SUPERVISION, release_date=date(2019, 3, 3), release_reason=StateIncarcerationPeriodReleaseReason. SENTENCE_SERVED, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.GENERAL, ) supervision_periods = [supervision_period] ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( incarceration_revocation_period, supervision_periods, None) self.assertTrue(admission_is_revocation) self.assertEqual(revoked_period, supervision_period)
def test_us_id_revoked_supervision_period_if_revocation_occurred_transfers_not_same_day( self, ): treatment_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2017, 5, 17), admission_reason=StateIncarcerationPeriodAdmissionReason. RETURN_FROM_SUPERVISION, release_date=date(2017, 5, 29), release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.TREATMENT_IN_PRISON, ) incarceration_revocation_period = StateIncarcerationPeriod.new_with_defaults( incarceration_period_id=222, external_id="ip2", state_code="US_ID", incarceration_type=StateIncarcerationType.STATE_PRISON, status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY, admission_date=date(2018, 9, 29), admission_reason=StateIncarcerationPeriodAdmissionReason.TRANSFER, specialized_purpose_for_incarceration= StateSpecializedPurposeForIncarceration.GENERAL, ) ( admission_is_revocation, revoked_period, ) = us_id_revoked_supervision_period_if_revocation_occurred( incarceration_revocation_period, [], treatment_period) self.assertFalse(admission_is_revocation) self.assertIsNone(revoked_period)