Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #5
0
    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)
Exemple #6
0
    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)