def get_post_incarceration_supervision_type(
    incarceration_sentences: List[StateIncarcerationSentence],
    supervision_sentences: List[StateSupervisionSentence],
    incarceration_period: StateIncarcerationPeriod,
) -> Optional[StateSupervisionPeriodSupervisionType]:
    """If the person was released from incarceration onto some form of supervision, returns the type of supervision
    they were released to. This function must be implemented for each state for which we need this output. There is not
    a default way to determine the supervision type someone is released onto.

    Args:
        incarceration_sentences: (List[StateIncarcerationSentence]) All IncarcerationSentences associated with this
            person.
        supervision_sentences: (List[StateSupervisionSentence]) All SupervisionSentences associated with this person.
        incarceration_period: (StateIncarcerationPeriod) The incarceration period the person was released from.
    """
    state_code = incarceration_period.state_code

    if state_code.upper() == "US_ID":
        return us_id_get_post_incarceration_supervision_type(
            incarceration_sentences, supervision_sentences, incarceration_period
        )
    if state_code.upper() == "US_MO":
        return us_mo_get_post_incarceration_supervision_type(
            incarceration_sentences, supervision_sentences, incarceration_period
        )
    if state_code.upper() == "US_ND":
        return us_nd_get_post_incarceration_supervision_type(incarceration_period)

    logging.warning(
        "get_post_incarceration_supervision_type not implemented for state: %s",
        state_code,
    )
    return None
Exemple #2
0
    def test_usId_getPostIncarcerationSupervisionType(self):
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            incarceration_period_id=1,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            RETURN_FROM_SUPERVISION,
            external_id='ip1',
            state_code='US_ID',
            admission_date=date(2019, 9, 13),
            release_date=date(2020, 3, 1),
            release_reason=StateIncarcerationPeriodReleaseReason.
            CONDITIONAL_RELEASE)

        succeeding_supervision_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=1,
            start_date=incarceration_period.release_date,
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE)

        supervision_sentence = StateSupervisionSentence.new_with_defaults(
            supervision_sentence_id=1,
            external_id='XXX',
            supervision_periods=[succeeding_supervision_period])

        self.assertEqual(
            StateSupervisionPeriodSupervisionType.PAROLE,
            us_id_get_post_incarceration_supervision_type(
                incarceration_sentences=[],
                supervision_sentences=[supervision_sentence],
                incarceration_period=incarceration_period))
Exemple #3
0
    def test_usId_getPostIncarcerationSupervisionType_ignoreOutOfDatePeriods_Before(
            self):
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            incarceration_period_id=1,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            RETURN_FROM_SUPERVISION,
            external_id='ip1',
            state_code='US_ID',
            admission_date=date(2019, 9, 13),
            release_date=date(2020, 1, 18),
            release_reason=StateIncarcerationPeriodReleaseReason.
            CONDITIONAL_RELEASE)

        succeeding_supervision_period = StateSupervisionPeriod.new_with_defaults(
            supervision_period_id=1,
            start_date=incarceration_period.admission_date - relativedelta(
                days=INCARCERATION_SUPERVISION_TYPE_DAYS_LIMIT + 100),
            termination_date=incarceration_period.admission_date -
            relativedelta(days=INCARCERATION_SUPERVISION_TYPE_DAYS_LIMIT + 10),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE)

        supervision_sentence = StateSupervisionSentence.new_with_defaults(
            supervision_sentence_id=1,
            external_id='XXX',
            supervision_periods=[succeeding_supervision_period])

        self.assertIsNone(
            us_id_get_post_incarceration_supervision_type(
                incarceration_sentences=[],
                supervision_sentences=[supervision_sentence],
                incarceration_period=incarceration_period))
Exemple #4
0
    def test_usId_getPostIncarcerationSupervisionType_NotConditionalRelease(
            self):
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            incarceration_period_id=1,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            RETURN_FROM_SUPERVISION,
            external_id='ip1',
            state_code='US_ID',
            admission_date=date(2019, 9, 13),
            release_date=date(2020, 3, 1),
            release_reason=StateIncarcerationPeriodReleaseReason.
            SENTENCE_SERVED)

        self.assertIsNone(
            us_id_get_post_incarceration_supervision_type(
                incarceration_sentences=[],
                supervision_sentences=[],
                incarceration_period=incarceration_period))
Exemple #5
0
    def test_usId_getPostIncarcerationSupervisionType_ignoreOutOfDatePeriods_Before(
        self, ):
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            incarceration_period_id=1,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            RETURN_FROM_SUPERVISION,
            external_id="ip1",
            state_code="US_ID",
            admission_date=date(2019, 9, 13),
            release_date=date(2020, 1, 18),
            release_reason=StateIncarcerationPeriodReleaseReason.
            CONDITIONAL_RELEASE,
            status=StateIncarcerationPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        succeeding_supervision_period = StateSupervisionPeriod.new_with_defaults(
            state_code="US_ID",
            supervision_period_id=1,
            start_date=incarceration_period.admission_date -
            relativedelta(days=SUPERVISION_TYPE_LOOKBACK_DAYS_LIMIT + 100),
            termination_date=incarceration_period.admission_date -
            relativedelta(days=SUPERVISION_TYPE_LOOKBACK_DAYS_LIMIT + 10),
            supervision_period_supervision_type=
            StateSupervisionPeriodSupervisionType.PAROLE,
            status=StateSupervisionPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        supervision_sentence = StateSupervisionSentence.new_with_defaults(
            state_code="US_ID",
            supervision_sentence_id=1,
            external_id="XXX",
            supervision_periods=[succeeding_supervision_period],
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
        )

        self.assertIsNone(
            us_id_get_post_incarceration_supervision_type(
                incarceration_sentences=[],
                supervision_sentences=[supervision_sentence],
                incarceration_period=incarceration_period,
            ))