Exemple #1
0
    def test_set_date_specific_lsir_fields_date_in_future(self) -> None:
        # Should use the current classification
        assessment_future = StateAssessment(
            assessment_score="33",
            assessment_date=date.strftime(
                date.today() + relativedelta(days=100), "%m%d%Y"),
        )

        updated_assessment_future = (
            us_pa_assessment_level_reference.set_date_specific_lsir_fields(
                assessment_future))

        assessment_today = StateAssessment(assessment_score="33",
                                           assessment_date=date.strftime(
                                               date.today(), "%m%d%Y"))

        updated_assessment_today = (
            us_pa_assessment_level_reference.set_date_specific_lsir_fields(
                assessment_today))

        self.assertEqual(
            updated_assessment_future.assessment_level,
            updated_assessment_today.assessment_level,
        )
        self.assertEqual(
            updated_assessment_future.assessment_score,
            updated_assessment_today.assessment_score,
        )
def set_date_specific_lsir_fields(
        assessment: StateAssessment) -> StateAssessment:
    """Over time, US_PA has updated the mapping between an LSIR score and the associated assessment level. This function
    sets the appropriate assessment_level and assessment_score according to the score and the date of the |assessment|,
    as defined by _DATE_SPECIFIC_ORDERED_LSIR_LEVELS.

    Returns the updated StateAssessment object.
    """
    if not assessment.assessment_score:
        return assessment

    assessment_score = parse_int(assessment.assessment_score)

    if assessment_score == 60:
        # This value indicates the scoring was not completed
        assessment.assessment_score = None
        assessment.assessment_level = "UNKNOWN (60-ATTEMPTED_INCOMPLETE)"
    elif assessment_score == 70:
        # This person either refused to be assessed or did not need to be assessed because they chose not to be released
        # onto parole
        assessment.assessment_score = None
        assessment.assessment_level = "UNKNOWN (70-REFUSED)"
    elif assessment_score > 55:
        # Assessment score number is over the max value of 54, and isn't one of the expected special-case
        # codes (60, 70, 55)
        assessment.assessment_level = f"UNKNOWN ({assessment_score}-SCORE_OUT_OF_RANGE)"
        assessment.assessment_score = None
    else:
        if assessment_score == 55:
            # This should be treated as a 54
            assessment_score = 54
            assessment.assessment_score = "54"

        assessment_date_raw = assessment.assessment_date
        assessment_date = (str_field_utils.parse_date(assessment_date_raw)
                           if assessment_date_raw else None)

        if not assessment_date:
            # At this point we need a valid assessment_date to determine the date-specific LSIR level
            assessment.assessment_level = "UNKNOWN (NO_DATE)"
            return assessment
        for cutoff_date, score_level_map in _DATE_SPECIFIC_ORDERED_LSIR_LEVELS.items(
        ):
            if assessment_date <= cutoff_date:
                for cutoff_score, level in score_level_map.items():
                    if assessment_score <= cutoff_score:
                        assessment.assessment_level = level.value
                        return assessment

        raise ValueError(
            f"Unhandled assessment_score {assessment_score} with assessment_date {assessment_date}"
        )

    return assessment
Exemple #3
0
    def test_set_date_specific_lsir_fields_non_int_score(self):
        assessment = StateAssessment(
            assessment_score='X9K',  # This should throw
            assessment_date='12042014')

        with pytest.raises(ValueError):
            _ = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
                assessment)
Exemple #4
0
    def test_set_date_specific_lsir_fields_no_score(self) -> None:
        assessment = StateAssessment(assessment_score=None,
                                     assessment_date="12042014")

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertIsNone(updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #5
0
    def test_set_date_specific_lsir_fields(self) -> None:
        assessment = StateAssessment(assessment_score="33",
                                     assessment_date="03012018")

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual("33", updated_assessment.assessment_score)
Exemple #6
0
    def test_set_date_specific_lsir_fields_no_date(self):
        assessment = StateAssessment(assessment_score='31',
                                     assessment_date=None)

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual('UNKNOWN (NO_DATE)',
                         updated_assessment.assessment_level)
        self.assertEqual('31', updated_assessment.assessment_score)
Exemple #7
0
    def test_set_date_specific_lsir_fields(self):
        assessment = StateAssessment(assessment_score='33',
                                     assessment_date='03012018')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual('33', updated_assessment.assessment_score)
Exemple #8
0
    def test_set_date_specific_lsir_fields_timestamp(self):
        assessment = StateAssessment(assessment_score='33',
                                     assessment_date='12/19/2016 15:21:56')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual('33', updated_assessment.assessment_score)
Exemple #9
0
    def test_set_date_specific_lsir_fields_no_date(self) -> None:
        assessment = StateAssessment(assessment_score="31",
                                     assessment_date=None)

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual("UNKNOWN (NO_DATE)",
                         updated_assessment.assessment_level)
        self.assertEqual("31", updated_assessment.assessment_score)
Exemple #10
0
    def test_set_date_specific_lsir_fields_pre_2014_12_3(self):
        assessment = StateAssessment(
            assessment_score='18',  # This was considered MEDIUM until 2014-12-3
            assessment_date='03012010')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.MEDIUM.value,
                         updated_assessment.assessment_level)
        self.assertEqual('18', updated_assessment.assessment_score)
Exemple #11
0
    def test_set_date_specific_lsir_fields_54(self):
        assessment = StateAssessment(
            assessment_score='54',  # This is the maximum score
            assessment_date='12032014')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual('54', updated_assessment.assessment_score)
Exemple #12
0
    def test_set_date_specific_lsir_fields_55_as_54(self):
        assessment = StateAssessment(
            assessment_score='55',  # This should be treated (and cast) as a 54
            assessment_date='12032014')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual('54', updated_assessment.assessment_score)
Exemple #13
0
    def test_set_date_specific_lsir_fields_55_as_54(self) -> None:
        assessment = StateAssessment(
            assessment_score="55",  # This should be treated (and cast) as a 54
            assessment_date="12032014",
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual("54", updated_assessment.assessment_score)
Exemple #14
0
    def test_set_date_specific_lsir_fields_54(self) -> None:
        assessment = StateAssessment(
            assessment_score="54",  # This is the maximum score
            assessment_date="12032014",
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual("54", updated_assessment.assessment_score)
Exemple #15
0
    def test_set_date_specific_lsir_fields_undetermined_60(self):
        assessment = StateAssessment(
            assessment_score=
            '60',  # This score should be cleared, with the level set as ATTEMPTED_INCOMPLETE
            assessment_date='12032014')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual('UNKNOWN (60-ATTEMPTED_INCOMPLETE)',
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #16
0
    def test_set_date_specific_lsir_fields_date_in_future(self):
        # Should use the current classification
        assessment_future = StateAssessment(
            assessment_score='33',
            assessment_date=date.strftime(
                date.today() + relativedelta(days=100), '%m%d%Y'))

        updated_assessment_future = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment_future)

        assessment_today = StateAssessment(assessment_score='33',
                                           assessment_date=date.strftime(
                                               date.today(), '%m%d%Y'))

        updated_assessment_today = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment_today)

        self.assertEqual(updated_assessment_future.assessment_level,
                         updated_assessment_today.assessment_level)
        self.assertEqual(updated_assessment_future.assessment_score,
                         updated_assessment_today.assessment_score)
Exemple #17
0
    def test_set_date_specific_lsir_fields_undetermined_general(self):
        assessment = StateAssessment(
            assessment_score=
            '351',  # Scores above 54 indicate typos in the data entry
            assessment_date='03012010')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual('UNKNOWN (351-SCORE_OUT_OF_RANGE)',
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #18
0
    def test_set_date_specific_lsir_fields_non_applicable(self):
        assessment = StateAssessment(
            assessment_score=
            '70',  # This score should be cleared, with the level set as REFUSED
            assessment_date='12032014')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual('UNKNOWN (70-REFUSED)',
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #19
0
    def test_set_date_specific_lsir_fields_pre_2009(self):
        assessment = StateAssessment(
            assessment_score=
            '19',  # This was considered LOW before 2009, but since then has been MEDIUM or HIGH
            assessment_date='03012000')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.LOW.value,
                         updated_assessment.assessment_level)
        self.assertEqual('19', updated_assessment.assessment_score)
Exemple #20
0
    def test_set_date_specific_lsir_fields_post_2014_12_3(self):
        assessment = StateAssessment(
            assessment_score=
            '27',  # This was considered HIGH until 2014-12-3, but since then has been MEDIUM
            assessment_date='12042014')

        updated_assessment = us_pa_assessment_level_reference.set_date_specific_lsir_fields(
            assessment)

        self.assertEqual(StateAssessmentLevel.MEDIUM.value,
                         updated_assessment.assessment_level)
        self.assertEqual('27', updated_assessment.assessment_score)
Exemple #21
0
    def test_set_date_specific_lsir_fields_on_2014_12_3(self) -> None:
        assessment = StateAssessment(
            assessment_score=
            "27",  # This was considered HIGH until 2014-12-3, but since then has been MEDIUM
            assessment_date="12032014",
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual(StateAssessmentLevel.HIGH.value,
                         updated_assessment.assessment_level)
        self.assertEqual("27", updated_assessment.assessment_score)
Exemple #22
0
    def test_set_date_specific_lsir_fields_undetermined_60_no_date(
            self) -> None:
        assessment = StateAssessment(
            assessment_score=
            "60",  # This score should be cleared,with the level set as ATTEMPTED_INCOMPLETE
            assessment_date=None,  # Date does not matter for this score
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual("UNKNOWN (60-ATTEMPTED_INCOMPLETE)",
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #23
0
    def test_set_date_specific_lsir_fields_undetermined_general_no_date(
            self) -> None:
        assessment = StateAssessment(
            assessment_score=
            "351",  # Scores above 54 indicate typos in the data entry
            assessment_date=None,  # Date does not matter for this score
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual("UNKNOWN (351-SCORE_OUT_OF_RANGE)",
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
Exemple #24
0
    def test_set_date_specific_lsir_fields_non_applicable_no_date(
            self) -> None:
        assessment = StateAssessment(
            assessment_score=
            "70",  # This score should be cleared, with the level set as REFUSED
            assessment_date=None,  # Date does not matter for this score
        )

        updated_assessment = (us_pa_assessment_level_reference.
                              set_date_specific_lsir_fields(assessment))

        self.assertEqual("UNKNOWN (70-REFUSED)",
                         updated_assessment.assessment_level)
        self.assertIsNone(updated_assessment.assessment_score)
    def test_populate_data_dbo_LSIR(self):
        expected = IngestInfo(
            state_people=[
                StatePerson(state_person_id='789C',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='789C', id_type=US_PA_PBPP),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='789C-0-1',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='01312001',
                                                assessment_score='14'),
                            ]),
                StatePerson(state_person_id='456B',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='456B', id_type=US_PA_PBPP),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='456B-1-1',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='12222005',
                                                assessment_score='23'),
                            ]),
                StatePerson(state_person_id='345E',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='345E', id_type=US_PA_PBPP),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='345E-3-1',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='01192006',
                                                assessment_score='30'),
                                StateAssessment(state_assessment_id='345E-3-2',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='08032006',
                                                assessment_score='30'),
                                StateAssessment(state_assessment_id='345E-3-3',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='01152007',
                                                assessment_score='31'),
                                StateAssessment(state_assessment_id='345E-4-1',
                                                assessment_type='LSIR',
                                                assessment_class='RISK',
                                                assessment_date='07142007',
                                                assessment_score='33'),
                            ]),
            ])

        self.run_parse_file_test(expected, 'dbo_LSIR')
    def test_populate_data_dbo_tblInmTestScore(self):
        expected = IngestInfo(
            state_people=[
                StatePerson(state_person_id='123456',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='123456', id_type=US_PA_CONTROL),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='123456-1-1',
                                                assessment_type='CSS-M                                             ',
                                                assessment_class='SOCIAL',
                                                assessment_date='6/22/2008 13:20:54',
                                                assessment_score='19'),
                                StateAssessment(state_assessment_id='123456-2-1',
                                                assessment_type='HIQ                                               ',
                                                assessment_class='SOCIAL',
                                                assessment_date='7/12/2004 8:23:28',
                                                assessment_score='62'),
                                StateAssessment(state_assessment_id='123456-3-3',
                                                assessment_type='LSI-R                                             ',
                                                assessment_class='RISK',
                                                assessment_date='10/3/2010 12:11:41',
                                                assessment_score='25'),
                            ]),
                StatePerson(state_person_id='654321',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='654321', id_type=US_PA_CONTROL),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='654321-1-1',
                                                assessment_type='CSS-M                                             ',
                                                assessment_class='SOCIAL',
                                                assessment_date='4/1/2003 11:42:17',
                                                assessment_score='22'),
                                StateAssessment(state_assessment_id='654321-3-1',
                                                assessment_type='LSI-R                                             ',
                                                assessment_class='RISK',
                                                assessment_date='6/8/2004 11:07:48',
                                                assessment_score='19'),
                                StateAssessment(state_assessment_id='654321-4-1',
                                                assessment_type='TCU                                               ',
                                                assessment_class='SUBSTANCE_ABUSE',
                                                assessment_date='1/4/2004 11:09:52',
                                                assessment_score='6'),
                                StateAssessment(state_assessment_id='654321-5-1',
                                                assessment_type='ST99                                              ',
                                                assessment_class='SEX_OFFENSE',
                                                assessment_date='7/5/2004 15:30:59',
                                                assessment_score='4'),
                            ]),
                StatePerson(state_person_id='445566',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='445566', id_type=US_PA_CONTROL),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='445566-2-1',
                                                assessment_type='HIQ                                               ',
                                                assessment_class='SOCIAL',
                                                assessment_date='7/28/2005 10:33:31',
                                                assessment_score='61'),
                                StateAssessment(state_assessment_id='445566-3-2',
                                                assessment_type='LSI-R                                             ',
                                                assessment_class='RISK',
                                                assessment_date='12/19/2016 15:21:56',
                                                assessment_score='13'),
                            ]),
                StatePerson(state_person_id='778899',
                            state_person_external_ids=[
                                StatePersonExternalId(state_person_external_id_id='778899', id_type=US_PA_CONTROL),
                            ],
                            state_assessments=[
                                StateAssessment(state_assessment_id='778899-3-3',
                                                assessment_type='LSI-R                                             ',
                                                assessment_class='RISK',
                                                assessment_date='1/6/2017 18:16:56',
                                                assessment_score='14'),
                                StateAssessment(state_assessment_id='778899-6-1',
                                                assessment_type='RST                                               ',
                                                assessment_class='RISK',
                                                assessment_date='12/8/2012 15:09:08',
                                                assessment_score='9',
                                                assessment_metadata=json.dumps({"latest_version": False})),
                                StateAssessment(state_assessment_id='778899-6-2',
                                                assessment_type='RST                                               ',
                                                assessment_class='RISK',
                                                assessment_date='5/11/2018 15:54:06',
                                                assessment_score='7',
                                                assessment_metadata=json.dumps({"latest_version": True})),
                            ]),
            ])

        self.run_parse_file_test(expected, 'dbo_tblInmTestScore')