Exemplo n.º 1
0
    def test_identifyViolationSubtype_technical_law_citation(self):
        # Arrange
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition=_SUBSTANCE_ABUSE_CONDITION_STR),
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition=_LAW_CITATION_SUBTYPE_STR)
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ])
        ]

        # Act
        subtype = identify_violation_subtype(
            StateSupervisionViolationType.TECHNICAL, violations)

        # Assert
        self.assertEqual(_LAW_CITATION_SUBTYPE_STR, subtype)
Exemplo n.º 2
0
    def test_get_violation_type_frequency_counter_us_pa(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code='US_PA',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.ABSCONDED
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                        violation_type_raw_text='L05'),
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code='US_PA',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.
                        MISDEMEANOR),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                        violation_type_raw_text='H12')
                ])
        ]

        violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter(
            violations)

        self.assertEqual([['ABSCONDED', 'FELONY', 'LOW_TECH'],
                          ['MISDEMEANOR', 'SUBSTANCE_ABUSE']],
                         violation_type_frequency_counter)
Exemplo n.º 3
0
    def test_identifyViolationSubtype_technical_drg(self):
        # Arrange
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition='DRG')
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ])
        ]

        # Act
        subtype = identify_violation_subtype(
            StateSupervisionViolationType.TECHNICAL, violations)

        # Assert
        self.assertEqual('SUBSTANCE_ABUSE', subtype)
Exemplo n.º 4
0
    def test_identify_most_severe_violation_type(self) -> None:
        violation = StateSupervisionViolation.new_with_defaults(
            state_code="US_XX",
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                ),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.FELONY,
                ),
            ],
        )

        (
            most_severe_violation_type,
            most_severe_violation_type_subtype,
        ) = violation_utils.identify_most_severe_violation_type_and_subtype(
            [violation])

        self.assertEqual(most_severe_violation_type,
                         StateSupervisionViolationType.FELONY)
        self.assertEqual(
            most_severe_violation_type_subtype,
            StateSupervisionViolationType.FELONY.value,
        )
Exemplo n.º 5
0
    def test_identifyViolationSubtype_nonTechnical(self):
        # Arrange
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition='DRG')
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ])
        ]

        # Act
        subtype = identify_violation_subtype(
            StateSupervisionViolationType.FELONY, violations)
        self.assertIsNone(subtype)
Exemplo n.º 6
0
    def test_get_violation_type_frequency_counter_us_mo(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_MO",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.ABSCONDED,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.FELONY,
                    ),
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        state_code="US_XX", condition="DRG")
                ],
            )
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(violations))

        self.assertEqual(
            [["ABSCONDED", "FELONY", "SUBSTANCE_ABUSE"]],
            violation_type_frequency_counter,
        )
Exemplo n.º 7
0
    def test_get_violation_and_response_history(self):
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_XX",
            violation_date=datetime.date(2009, 1, 3),
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                ),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.FELONY,
                ),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.ABSCONDED,
                ),
            ],
        )

        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            supervision_violation_response_id=_DEFAULT_SSVR_ID,
            response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT,
            state_code="US_XX",
            response_date=datetime.date(2009, 1, 7),
            supervision_violation_response_decisions=[
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_XX",
                    decision=StateSupervisionViolationResponseDecision.REVOCATION,
                    revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION,
                ),
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_XX",
                    decision=StateSupervisionViolationResponseDecision.CONTINUANCE,
                ),
            ],
            supervision_violation=supervision_violation,
        )

        revocation_date = datetime.date(2009, 2, 13)

        violation_history = violation_utils.get_violation_and_response_history(
            revocation_date, [supervision_violation_response], UsXxViolationDelegate()
        )

        expected_output = violation_utils.ViolationHistory(
            most_severe_violation_type=StateSupervisionViolationType.FELONY,
            most_severe_violation_type_subtype=StateSupervisionViolationType.FELONY.value,
            most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION,
            response_count=1,
            violation_history_description="1felony",
            violation_type_frequency_counter=[["TECHNICAL", "FELONY", "ABSCONDED"]],
        )

        self.assertEqual(expected_output, violation_history)
Exemplo n.º 8
0
    def test_get_violation_and_response_history_with_us_pa_subtype_high_technical(self):
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_PA",
            violation_date=datetime.date(2009, 1, 3),
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_PA",
                    violation_type=StateSupervisionViolationType.ABSCONDED,
                    violation_type_raw_text="H09",
                ),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_PA",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                    violation_type_raw_text="H08",  # High Technical
                ),
            ],
        )

        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            supervision_violation_response_id=_DEFAULT_SSVR_ID,
            response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT,
            state_code="US_PA",
            response_date=datetime.date(2009, 1, 7),
            supervision_violation_response_decisions=[
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_PA",
                    decision=StateSupervisionViolationResponseDecision.REVOCATION,
                    revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION,
                ),
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_PA",
                    decision=StateSupervisionViolationResponseDecision.CONTINUANCE,
                    revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION,
                ),
            ],
            supervision_violation=supervision_violation,
        )

        revocation_date = datetime.date(2009, 2, 13)

        violation_history = violation_utils.get_violation_and_response_history(
            revocation_date, [supervision_violation_response], UsPaViolationDelegate()
        )

        expected_output = violation_utils.ViolationHistory(
            most_severe_violation_type=StateSupervisionViolationType.TECHNICAL,
            most_severe_violation_type_subtype="HIGH_TECH",
            most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION,
            response_count=1,
            violation_history_description="1high_tech",
            violation_type_frequency_counter=[["ABSCONDED", "HIGH_TECH"]],
        )

        self.assertEqual(expected_output, violation_history)
Exemplo n.º 9
0
    def test_get_violation_type_frequency_counter_us_mo_multiple_violations(
        self,
    ) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_MO",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.ABSCONDED,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.FELONY,
                    ),
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        state_code="US_XX", condition="WEA"
                    )
                ],
            ),
            StateSupervisionViolation.new_with_defaults(
                state_code="US_MO",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.MISDEMEANOR,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                    ),
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        state_code="US_XX", condition="DRG"
                    ),
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        state_code="US_XX", condition="EMP"
                    ),
                ],
            ),
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(
                violations, UsMoViolationDelegate()
            )
        )

        self.assertEqual(
            [["ABSCONDED", "FELONY", "WEA"], ["MISDEMEANOR", "SUBSTANCE_ABUSE", "EMP"]],
            violation_type_frequency_counter,
        )
Exemplo n.º 10
0
    def test_get_violation_and_response_history_citation_date(self):
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_XX",
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.ABSCONDED,
                ),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_XX",
                    violation_type=StateSupervisionViolationType.MISDEMEANOR,
                ),
            ],
        )

        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            state_code="US_XX",
            supervision_violation_response_id=_DEFAULT_SSVR_ID,
            response_type=StateSupervisionViolationResponseType.CITATION,
            response_date=datetime.date(2009, 1, 7),
            supervision_violation_response_decisions=[
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_XX",
                    decision=StateSupervisionViolationResponseDecision.REVOCATION,
                    revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION,
                ),
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_XX",
                    decision=StateSupervisionViolationResponseDecision.CONTINUANCE,
                    revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION,
                ),
            ],
            supervision_violation=supervision_violation,
        )

        revocation_date = datetime.date(2009, 2, 13)

        violation_history = violation_utils.get_violation_and_response_history(
            revocation_date, [supervision_violation_response], UsXxViolationDelegate()
        )

        expected_output = violation_utils.ViolationHistory(
            most_severe_violation_type=StateSupervisionViolationType.MISDEMEANOR,
            most_severe_violation_type_subtype=StateSupervisionViolationType.MISDEMEANOR.value,
            most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION,
            response_count=1,
            violation_history_description="1misdemeanor",
            violation_type_frequency_counter=[["ABSCONDED", "MISDEMEANOR"]],
        )

        self.assertEqual(expected_output, violation_history)
    def test_us_nd_prepare_violation_responses_for_calculations_different_days(
        self,
    ) -> None:
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123,
            state_code=STATE_CODE,
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code=STATE_CODE,
                    violation_type=StateSupervisionViolationType.ABSCONDED,
                ),
            ],
        )

        ssvr = StateSupervisionViolationResponse.new_with_defaults(
            state_code=STATE_CODE,
            supervision_violation_response_id=123,
            supervision_violation=supervision_violation,
            response_date=datetime.date(2008, 12, 1),
            response_type=StateSupervisionViolationResponseType.PERMANENT_DECISION,
        )

        other_supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123,
            state_code=STATE_CODE,
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code=STATE_CODE,
                    violation_type=StateSupervisionViolationType.FELONY,
                ),
            ],
        )

        other_ssvr = StateSupervisionViolationResponse.new_with_defaults(
            state_code=STATE_CODE,
            supervision_violation_response_id=123,
            supervision_violation=other_supervision_violation,
            response_date=datetime.date(2008, 12, 25),
            response_type=StateSupervisionViolationResponseType.PERMANENT_DECISION,
        )

        prepared_responses = (
            us_nd_violation_utils.us_nd_prepare_violation_responses_for_calculations(
                violation_responses=[ssvr, other_ssvr]
            )
        )

        self.assertCountEqual(
            [ssvr, other_ssvr],
            prepared_responses,
        )
Exemplo n.º 12
0
    def test_get_violation_type_frequency_counter_us_mo_technical_only_no_conditions(
        self,
    ) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_MO",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                    )
                ],
            )
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(
                violations, UsMoViolationDelegate()
            )
        )

        self.assertEqual(
            [[StateSupervisionViolationType.TECHNICAL.value]],
            violation_type_frequency_counter,
        )
Exemplo n.º 13
0
    def test_get_violation_type_frequency_counter_us_mo_technical_only(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_MO",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                    )
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        state_code="US_XX", condition="DRG"
                    )
                ],
            )
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(
                violations, UsMoViolationDelegate()
            )
        )

        self.assertEqual([["SUBSTANCE_ABUSE"]], violation_type_frequency_counter)
    def test_identify_most_severe_violation_type(self):
        violation = StateSupervisionViolation.new_with_defaults(
            state_code='US_MO',
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    violation_type=StateSupervisionViolationType.TECHNICAL),
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    violation_type=StateSupervisionViolationType.FELONY)
            ])

        most_severe_violation_type, most_severe_violation_type_subtype = \
            calculator_utils.identify_most_severe_violation_type_and_subtype([violation])

        self.assertEqual(most_severe_violation_type,
                         StateSupervisionViolationType.FELONY)
        self.assertEqual('UNSET', most_severe_violation_type_subtype)
Exemplo n.º 15
0
    def test_handle_citation_violations_us_mo(self):
        # Arrange
        supervision_violation = \
            StateSupervisionViolation.new_with_defaults(
                state_code='US_MO',
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(condition='LAW'),
                ]
            )

        supervision_violation_response = \
            StateSupervisionViolationResponse.new_with_defaults(
                state_code='US_MO',
                response_type=StateSupervisionViolationResponseType.CITATION,
                supervision_violation=supervision_violation
            )

        # Act
        _ = normalize_violations_on_responses(supervision_violation_response)

        # Assert
        self.assertEqual(supervision_violation.supervision_violation_types, [
            StateSupervisionViolationTypeEntry(
                state_code='US_MO',
                violation_type=StateSupervisionViolationType.TECHNICAL,
                violation_type_raw_text=None)
        ])
        self.assertEqual(
            supervision_violation.supervision_violated_conditions, [
                StateSupervisionViolatedConditionEntry.new_with_defaults(
                    condition=_LAW_CITATION_SUBTYPE_STR),
            ])
Exemplo n.º 16
0
def _normalize_violations_on_responses_us_mo(response: StateSupervisionViolationResponse) -> \
        StateSupervisionViolationResponse:
    """For responses that are not of type CITATION or don't have an associated violation, does nothing. Responses of
    type CITATION do not have violation types on their violations, so the violation types and conditions violated on
    these violations are updated."""
    if not response.state_code or response.state_code.upper() != 'US_MO':
        raise ValueError(f"Calling state-specific US_MO helper function for a response from {response.state_code}")

    # Citations in US_MO don't have violation types on them. However, we want to classify them as TECHNICAL.
    # If this is a CITATION and there's a violation on it, add TECHNICAL to the list of violation types.
    if response.response_type == StateSupervisionViolationResponseType.CITATION and response.supervision_violation:
        supervision_violation = response.supervision_violation

        if not supervision_violation.supervision_violation_types:
            supervision_violation.supervision_violation_types.append(
                StateSupervisionViolationTypeEntry(
                    state_code=response.state_code,
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                    violation_type_raw_text=None
                )
            )

        # Update citations that list the _LAW_CONDITION_STR as a condition to instead list _LAW_CITATION_SUBTYPE_STR
        # so we can track law citations independently from other violations with LAW conditions on them
        for condition_entry in supervision_violation.supervision_violated_conditions:
            if condition_entry.condition == _LAW_CONDITION_STR:
                condition_entry.condition = _LAW_CITATION_SUBTYPE_STR

    return response
Exemplo n.º 17
0
    def test_us_pa_get_violation_type_subtype_strings_for_violation_high_technical(
        self,
    ) -> None:
        # Arrange
        violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_PA",
            violation_date=date(2009, 1, 3),
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code=_STATE_CODE,
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                    violation_type_raw_text="H05",
                ),
            ],
        )

        # Act
        type_subtype_strings = (
            self.delegate.get_violation_type_subtype_strings_for_violation(violation)
        )

        # Assert
        expected_type_subtype_strings = ["HIGH_TECH"]
        self.assertEqual(expected_type_subtype_strings, type_subtype_strings)
    def test_normalize_violations_on_responses_us_mo_no_conditions(
            self) -> None:
        # Arrange
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            state_code="US_MO")

        supervision_violation_response = (
            StateSupervisionViolationResponse.new_with_defaults(
                state_code="US_MO",
                response_type=StateSupervisionViolationResponseType.CITATION,
                supervision_violation=supervision_violation,
            ))

        # Act
        _ = _normalize_violations_on_responses(supervision_violation_response)

        # Assert
        self.assertEqual(
            [
                StateSupervisionViolationTypeEntry(
                    state_code="US_MO",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                    violation_type_raw_text=None,
                )
            ],
            supervision_violation.supervision_violation_types,
        )
        self.assertEqual([],
                         supervision_violation.supervision_violated_conditions)
Exemplo n.º 19
0
    def test_us_mo_get_violation_type_subtype_strings_for_violation_technical(
        self, ) -> None:
        # Arrange
        violation = StateSupervisionViolation.new_with_defaults(
            state_code=_STATE_CODE,
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code=_STATE_CODE,
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                )
            ],
            supervision_violated_conditions=[
                StateSupervisionViolatedConditionEntry.new_with_defaults(
                    state_code=_STATE_CODE, condition="EMP")
            ],
        )

        # Act
        type_subtype_strings = (
            self.delegate.get_violation_type_subtype_strings_for_violation(
                violation))

        # Assert
        expected_type_subtype_strings = ["EMP", "TECHNICAL"]
        self.assertEqual(expected_type_subtype_strings, type_subtype_strings)
Exemplo n.º 20
0
    def test_handle_citation_violations_us_mo_no_conditions(self):
        # Arrange
        supervision_violation = \
            StateSupervisionViolation.new_with_defaults(
                state_code='US_MO'
            )

        supervision_violation_response = \
            StateSupervisionViolationResponse.new_with_defaults(
                state_code='US_MO',
                response_type=StateSupervisionViolationResponseType.CITATION,
                supervision_violation=supervision_violation
            )

        # Act
        _ = normalize_violations_on_responses(supervision_violation_response)

        # Assert
        self.assertEqual([
            StateSupervisionViolationTypeEntry(
                state_code='US_MO',
                violation_type=StateSupervisionViolationType.TECHNICAL,
                violation_type_raw_text=None)
        ], supervision_violation.supervision_violation_types)
        self.assertEqual([],
                         supervision_violation.supervision_violated_conditions)
Exemplo n.º 21
0
    def test_getRankedViolationTypeAndSubtypeCounts(self):
        # Arrange
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition='LAW')
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition='DRG')
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ]),
            StateSupervisionViolation.new_with_defaults(
                state_code=_STATE_CODE,
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.
                        MISDEMEANOR),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ])
        ]

        # Act
        ordered_counts = get_ranked_violation_type_and_subtype_counts(
            violations, VIOLATION_TYPE_SEVERITY_ORDER)

        # Assert
        expected_counts = OrderedDict([('fel', 2), ('subs', 1), ('tech', 1)])
        self.assertEqual(expected_counts, ordered_counts)
Exemplo n.º 22
0
    def test_get_violation_type_frequency_counter_us_pa(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_PA",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.ABSCONDED,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.FELONY,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                        violation_type_raw_text="L05",
                    ),
                ],
            ),
            StateSupervisionViolation.new_with_defaults(
                state_code="US_PA",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.MISDEMEANOR,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.TECHNICAL,
                        violation_type_raw_text="H12",
                    ),
                ],
            ),
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(
                violations, UsPaViolationDelegate()
            )
        )

        self.assertEqual(
            [["ABSCONDED", "FELONY", "LOW_TECH"], ["MISDEMEANOR", "SUBSTANCE_ABUSE"]],
            violation_type_frequency_counter,
        )
Exemplo n.º 23
0
    def test_get_violation_and_response_history_us_mo_handle_law_technicals(self):
        """Tests that a US_MO violation report with a TECHNICAL type and a LAW condition is not treated like a
        citation with a LAW condition."""
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_MO",
            violation_date=datetime.date(2009, 1, 7),
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_MO",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                ),
            ],
            supervision_violated_conditions=[
                StateSupervisionViolatedConditionEntry.new_with_defaults(
                    state_code="US_MO", condition="LAW"
                ),
            ],
        )

        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            state_code="US_MO",
            supervision_violation_response_id=_DEFAULT_SSVR_ID,
            response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT,
            response_subtype="ITR",
            response_date=datetime.date(2009, 1, 7),
            is_draft=False,
            supervision_violation_response_decisions=[
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_MO",
                    decision=StateSupervisionViolationResponseDecision.REVOCATION,
                    revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION,
                ),
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_MO",
                    decision=StateSupervisionViolationResponseDecision.CONTINUANCE,
                    revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION,
                ),
            ],
            supervision_violation=supervision_violation,
        )

        revocation_date = datetime.date(2009, 2, 13)

        violation_history = violation_utils.get_violation_and_response_history(
            revocation_date, [supervision_violation_response], UsMoViolationDelegate()
        )

        expected_output = violation_utils.ViolationHistory(
            most_severe_violation_type=StateSupervisionViolationType.TECHNICAL,
            most_severe_violation_type_subtype=StateSupervisionViolationType.TECHNICAL.value,
            most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION,
            response_count=1,
            violation_history_description="1tech",
            violation_type_frequency_counter=[["LAW", "TECHNICAL"]],
        )

        self.assertEqual(expected_output, violation_history)
Exemplo n.º 24
0
    def test_get_violation_and_response_history_with_us_mo_subtype(self):
        supervision_violation = StateSupervisionViolation.new_with_defaults(
            supervision_violation_id=123455,
            state_code="US_MO",
            violation_date=datetime.date(2009, 1, 3),
            supervision_violation_types=[
                StateSupervisionViolationTypeEntry.new_with_defaults(
                    state_code="US_MO",
                    violation_type=StateSupervisionViolationType.TECHNICAL,
                ),
            ],
            supervision_violated_conditions=[
                StateSupervisionViolatedConditionEntry.new_with_defaults(
                    state_code="US_MO", condition="DRG"
                ),
                StateSupervisionViolatedConditionEntry.new_with_defaults(
                    state_code="US_MO", condition="OTHER"
                ),
            ],
        )

        supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults(
            supervision_violation_response_id=_DEFAULT_SSVR_ID,
            response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT,
            response_subtype="INI",
            state_code="US_MO",
            response_date=datetime.date(2009, 1, 7),
            supervision_violation_response_decisions=[
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_MO",
                    decision=StateSupervisionViolationResponseDecision.REVOCATION,
                    revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION,
                ),
                StateSupervisionViolationResponseDecisionEntry.new_with_defaults(
                    state_code="US_MO",
                    decision=StateSupervisionViolationResponseDecision.CONTINUANCE,
                ),
            ],
            supervision_violation=supervision_violation,
        )

        revocation_date = datetime.date(2009, 2, 13)

        violation_history = violation_utils.get_violation_and_response_history(
            revocation_date, [supervision_violation_response], UsMoViolationDelegate()
        )

        expected_output = violation_utils.ViolationHistory(
            most_severe_violation_type=StateSupervisionViolationType.TECHNICAL,
            most_severe_violation_type_subtype="SUBSTANCE_ABUSE",
            most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION,
            response_count=1,
            violation_history_description="1subs",
            violation_type_frequency_counter=[["SUBSTANCE_ABUSE", "OTHER"]],
        )

        self.assertEqual(expected_output, violation_history)
Exemplo n.º 25
0
    def test_get_violation_type_frequency_counter(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code='US_XX',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.ABSCONDED
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ],
            )
        ]

        violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter(
            violations)

        self.assertEqual([['ABSCONDED', 'FELONY']],
                         violation_type_frequency_counter)
    def test_identify_most_severe_violation_type_test_all_types(self):
        for violation_type in StateSupervisionViolationType:
            violation = StateSupervisionViolation.new_with_defaults(
                state_code='US_MO',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=violation_type)
                ])
            most_severe_violation_type, most_severe_violation_type_subtype = \
                calculator_utils.identify_most_severe_violation_type_and_subtype([violation])

            self.assertEqual(most_severe_violation_type, violation_type)
            self.assertEqual('UNSET', most_severe_violation_type_subtype)
Exemplo n.º 27
0
    def test_get_violation_type_frequency_counter(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code="US_XX",
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.ABSCONDED,
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        state_code="US_XX",
                        violation_type=StateSupervisionViolationType.FELONY,
                    ),
                ],
            )
        ]

        violation_type_frequency_counter = (
            violation_utils.get_violation_type_frequency_counter(violations))

        self.assertEqual([["ABSCONDED", "FELONY"]],
                         violation_type_frequency_counter)
Exemplo n.º 28
0
    def test_get_violation_type_frequency_counter_us_mo(self) -> None:
        violations = [
            StateSupervisionViolation.new_with_defaults(
                state_code='US_MO',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.ABSCONDED
                    ),
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.FELONY)
                ],
                supervision_violated_conditions=[
                    StateSupervisionViolatedConditionEntry.new_with_defaults(
                        condition='DRG')
                ])
        ]

        violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter(
            violations)

        self.assertEqual([['ABSCONDED', 'FELONY', 'SUBSTANCE_ABUSE']],
                         violation_type_frequency_counter)
Exemplo n.º 29
0
    def test_identify_most_severe_violation_type_test_all_types(self) -> None:
        for violation_type in StateSupervisionViolationType:
            violation = StateSupervisionViolation.new_with_defaults(
                state_code='US_XX',
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=violation_type)
                ])
            most_severe_violation_type, most_severe_violation_type_subtype = \
                violation_utils.identify_most_severe_violation_type_and_subtype([violation])

            self.assertEqual(most_severe_violation_type, violation_type)
            self.assertEqual(violation_type.value,
                             most_severe_violation_type_subtype)
    def testSetViolationOnViolationsResponse(self):
        """Tests that the hydrated StateSupervisionViolation is set
        on the StateSupervisionViolationResponse."""

        supervision_violation_response = \
            StateSupervisionViolationResponse.new_with_defaults(
                supervision_violation_response_id=123,
                response_type=
                StateSupervisionViolationResponseType.PERMANENT_DECISION
            )

        supervision_violation = \
            StateSupervisionViolation.new_with_defaults(
                supervision_violation_id=999,
                supervision_violation_responses=
                [supervision_violation_response],
                supervision_violation_types=[
                    StateSupervisionViolationTypeEntry.new_with_defaults(
                        violation_type=StateSupervisionViolationType.TECHNICAL
                    )]
            )

        supervision_violations_and_responses = (
            {'violations': [supervision_violation],
             'violation_responses': [supervision_violation_response]
             }
        )

        expected_violation_response = \
            StateSupervisionViolationResponse.new_with_defaults(
                supervision_violation_response_id=123,
                response_type=
                StateSupervisionViolationResponseType.PERMANENT_DECISION,
                supervision_violation=supervision_violation
            )

        test_pipeline = TestPipeline()

        output = (test_pipeline
                  | beam.Create([(12345,
                                  supervision_violations_and_responses)])
                  | 'Set Supervision Violation on '
                    'Supervision Violation Response' >>
                  beam.ParDo(
                      entity_hydration_utils.SetViolationOnViolationsResponse())
                  )

        assert_that(output, equal_to([(12345, expected_violation_response)]))

        test_pipeline.run()