Пример #1
0
    def test_ssvrFlatFieldMatchingRevocationTypeChanges(self) -> None:
        db_person = generate_person(state_code=_US_MO)
        db_supervision_violation_response = generate_supervision_violation_response(
            person=db_person,
            state_code=_US_MO,
            response_type=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
            response_type_raw_text=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
            deciding_body_type=StateSupervisionViolationResponseDecidingBodyType
            .PAROLE_BOARD.value,
            deciding_body_type_raw_text=
            StateSupervisionViolationResponseDecidingBodyType.PAROLE_BOARD.
            value,
            revocation_type=StateSupervisionViolationResponseRevocationType.
            REINCARCERATION.value,
            revocation_type_raw_text="S",
        )
        db_incarceration_period = generate_incarceration_period(
            person=db_person,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            PAROLE_REVOCATION.value,
            source_supervision_violation_response=
            db_supervision_violation_response,
        )
        db_incarceration_sentence = generate_incarceration_sentence(
            person=db_person,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO.value,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            incarceration_periods=[db_incarceration_period],
        )
        db_sentence_group = generate_sentence_group(
            person=db_person,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID_WITH_SUFFIX,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO.value,
            incarceration_sentences=[db_incarceration_sentence],
            supervision_sentences=[],
        )
        db_external_id = generate_external_id(
            person=db_person,
            state_code=_US_MO,
            id_type=_ID_TYPE,
            external_id=_EXTERNAL_ID,
        )
        db_person.external_ids = [db_external_id]
        db_person.sentence_groups = [db_sentence_group]

        self._commit_to_db(db_person)

        # Even though the revocation type has changed, we still allow a match
        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            state_code=_US_MO,
            response_type=StateSupervisionViolationResponseType.
            PERMANENT_DECISION,
            response_type_raw_text=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
            deciding_body_type=StateSupervisionViolationResponseDecidingBodyType
            .PAROLE_BOARD,
            deciding_body_type_raw_text=
            StateSupervisionViolationResponseDecidingBodyType.PAROLE_BOARD.
            value,
            revocation_type=StateSupervisionViolationResponseRevocationType.
            TREATMENT_IN_PRISON,
            revocation_type_raw_text="L",
        )
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            PAROLE_REVOCATION,
            source_supervision_violation_response=
            supervision_violation_response,
            status=StateIncarcerationPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        incarceration_sentence = StateIncarcerationSentence.new_with_defaults(
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            incarceration_periods=[incarceration_period],
        )
        sentence_group = StateSentenceGroup.new_with_defaults(
            state_code=_US_MO,
            external_id=_EXTERNAL_ID_WITH_SUFFIX,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            incarceration_sentences=[incarceration_sentence],
            supervision_sentences=[],
        )
        external_id = StatePersonExternalId.new_with_defaults(
            state_code=_US_MO, id_type=_ID_TYPE, external_id=_EXTERNAL_ID)
        person = StatePerson.new_with_defaults(
            sentence_groups=[sentence_group],
            external_ids=[external_id],
            state_code=_US_MO,
        )

        expected_person = self.to_entity(db_person)
        expected_ip = (expected_person.sentence_groups[0].
                       incarceration_sentences[0].incarceration_periods[0])
        expected_ssvr = expected_ip.source_supervision_violation_response
        expected_ssvr.revocation_type = (
            StateSupervisionViolationResponseRevocationType.TREATMENT_IN_PRISON
        )
        expected_ssvr.revocation_type_raw_text = "L"

        # Act 1 - Match
        session = self._session()
        matched_entities = entity_matching.match(session,
                                                 _US_MO,
                                                 ingested_people=[person])

        self.assert_people_match_pre_and_post_commit([expected_person],
                                                     matched_entities.people,
                                                     session)
        self.assertEqual(0, matched_entities.error_count)
        self.assertEqual(1, matched_entities.total_root_entities)
Пример #2
0
    def test_supervisionViolationsWithDifferentParents_mergesViolations(self):
        db_person = generate_person(person_id=_ID, full_name=_FULL_NAME)
        db_supervision_violation = generate_supervision_violation(
            person=db_person,
            state_code=_US_MO,
            supervision_violation_id=_ID,
            external_id=_EXTERNAL_ID)
        db_placeholder_supervision_period = generate_supervision_period(
            person=db_person,
            state_code=_US_MO,
            supervision_period_id=_ID,
            supervision_violation_entries=[db_supervision_violation])
        db_incarceration_sentence = generate_incarceration_sentence(
            person=db_person,
            state_code=_US_MO,
            incarceration_sentence_id=_ID,
            external_id=_EXTERNAL_ID,
            supervision_periods=[db_placeholder_supervision_period])
        db_sentence_group = generate_sentence_group(
            person=db_person,
            state_code=_US_MO,
            sentence_group_id=_ID,
            external_id=_EXTERNAL_ID,
            incarceration_sentences=[db_incarceration_sentence])
        db_external_id = generate_external_id(person=db_person,
                                              person_external_id_id=_ID,
                                              state_code=_US_MO,
                                              external_id=_EXTERNAL_ID)
        db_person.sentence_groups = [db_sentence_group]
        db_person.external_ids = [db_external_id]

        self._commit_to_db(db_person)

        supervision_violation = attr.evolve(
            self.to_entity(db_supervision_violation),
            supervision_violation_id=None,
            external_id=_EXTERNAL_ID_WITH_SUFFIX)
        placeholder_supervision_period = attr.evolve(
            self.to_entity(db_placeholder_supervision_period),
            supervision_period_id=None,
            supervision_violation_entries=[supervision_violation])
        supervision_sentence = StateSupervisionSentence.new_with_defaults(
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            supervision_periods=[placeholder_supervision_period])
        sentence_group = attr.evolve(
            self.to_entity(db_sentence_group),
            sentence_group_id=None,
            incarceration_sentences=[],
            supervision_sentences=[supervision_sentence])
        external_id = attr.evolve(self.to_entity(db_external_id),
                                  person_external_id_id=None)
        person = attr.evolve(self.to_entity(db_person),
                             person_id=None,
                             sentence_groups=[sentence_group],
                             external_ids=[external_id])

        expected_supervision_violation = attr.evolve(
            self.to_entity(db_supervision_violation))
        expected_placeholder_supervision_period_is = attr.evolve(
            placeholder_supervision_period,
            supervision_violation_entries=[expected_supervision_violation])
        expected_placeholder_supervision_period_ss = attr.evolve(
            self.to_entity(db_placeholder_supervision_period),
            supervision_violation_entries=[expected_supervision_violation])
        expected_supervision_sentence = attr.evolve(
            supervision_sentence,
            supervision_periods=[expected_placeholder_supervision_period_ss])
        expected_incarceration_sentence = attr.evolve(
            self.to_entity(db_incarceration_sentence),
            supervision_periods=[expected_placeholder_supervision_period_is])
        expected_sentence_group = attr.evolve(
            self.to_entity(db_sentence_group),
            incarceration_sentences=[expected_incarceration_sentence],
            supervision_sentences=[expected_supervision_sentence])
        expected_external_id = attr.evolve(self.to_entity(db_external_id))
        expected_person = attr.evolve(
            self.to_entity(db_person),
            external_ids=[expected_external_id],
            sentence_groups=[expected_sentence_group])
        # Act 1 - Match
        session = self._session()
        matched_entities = entity_matching.match(session,
                                                 _US_MO,
                                                 ingested_people=[person])

        self.assert_people_match_pre_and_post_commit([expected_person],
                                                     matched_entities.people,
                                                     session)
        self.assertEqual(0, matched_entities.error_count)
        self.assertEqual(1, matched_entities.total_root_entities)
Пример #3
0
    def test_ssvrFlatFieldMatchingWithSomeNullValues(self) -> None:
        db_person = generate_person(state_code=_US_MO)
        db_supervision_violation_response = generate_supervision_violation_response(
            person=db_person,
            state_code=_US_MO,
            response_type=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
            response_type_raw_text=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
            deciding_body_type=StateSupervisionViolationResponseDecidingBodyType
            .PAROLE_BOARD.value,
            deciding_body_type_raw_text=
            StateSupervisionViolationResponseDecidingBodyType.PAROLE_BOARD.
            value,
        )
        db_incarceration_period = generate_incarceration_period(
            person=db_person,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            PAROLE_REVOCATION.value,
            source_supervision_violation_response=
            db_supervision_violation_response,
        )
        db_incarceration_sentence = generate_incarceration_sentence(
            person=db_person,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO.value,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            incarceration_periods=[db_incarceration_period],
        )
        db_sentence_group = generate_sentence_group(
            person=db_person,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID_WITH_SUFFIX,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO.value,
            incarceration_sentences=[db_incarceration_sentence],
            supervision_sentences=[],
        )
        db_external_id = generate_external_id(
            person=db_person,
            state_code=_US_MO,
            id_type=_ID_TYPE,
            external_id=_EXTERNAL_ID,
        )
        db_person.external_ids = [db_external_id]
        db_person.sentence_groups = [db_sentence_group]

        self._commit_to_db(db_person)

        # Even though this violation response doesn't have a deciding_body_type set, it will not clear the values in
        # db_supervision_violation_response.
        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            state_code=_US_MO,
            response_type=StateSupervisionViolationResponseType.
            PERMANENT_DECISION,
            response_type_raw_text=StateSupervisionViolationResponseType.
            PERMANENT_DECISION.value,
        )
        incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            admission_reason=StateIncarcerationPeriodAdmissionReason.
            PAROLE_REVOCATION,
            source_supervision_violation_response=
            supervision_violation_response,
            status=StateIncarcerationPeriodStatus.PRESENT_WITHOUT_INFO,
        )
        incarceration_sentence = StateIncarcerationSentence.new_with_defaults(
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            state_code=_US_MO,
            external_id=_EXTERNAL_ID,
            incarceration_periods=[incarceration_period],
        )
        sentence_group = StateSentenceGroup.new_with_defaults(
            state_code=_US_MO,
            external_id=_EXTERNAL_ID_WITH_SUFFIX,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            incarceration_sentences=[incarceration_sentence],
            supervision_sentences=[],
        )
        external_id = StatePersonExternalId.new_with_defaults(
            state_code=_US_MO, id_type=_ID_TYPE, external_id=_EXTERNAL_ID)
        person = StatePerson.new_with_defaults(
            sentence_groups=[sentence_group],
            external_ids=[external_id],
            state_code=_US_MO,
        )

        expected_person = self.to_entity(db_person)

        # Act 1 - Match
        session = self._session()
        matched_entities = entity_matching.match(session,
                                                 _US_MO,
                                                 ingested_people=[person])

        self.assert_people_match_pre_and_post_commit([expected_person],
                                                     matched_entities.people,
                                                     session)
        self.assertEqual(0, matched_entities.error_count)
        self.assertEqual(1, matched_entities.total_root_entities)