def get_next_assessment_date(client: ETLClient) -> Optional[date]: """Calculates the next assessment date for the given case.""" # TODO(#5769): Eventually move this calculation to our calculate pipeline. # In the meantime, we're hard-coding the relation to US_ID as a quick stop gap if client.state_code != "US_ID": raise CaseTriageInvalidStateException(client.state_code) if client.supervision_level == StateSupervisionLevel.INTERNAL_UNKNOWN.value: return None if client.most_recent_assessment_date is None or client.assessment_score is None: if client.supervision_start_date is None: # We expect that supervision_start_date is filled in, but in instances where # our default calc pipeline look back period is shorter than the amount of time # someone has been on supervision, it will be empty. # # We log the warning, but still want to fail gracefully. logging.warning( "Supervision start date unexpectedly empty for client with id %s in state %s", client.person_external_id, client.state_code, ) return None return client.supervision_start_date + timedelta( days=NEW_SUPERVISION_ASSESSMENT_DEADLINE_DAYS) if client.case_type == StateSupervisionCaseType.SEX_OFFENSE.value: if (client.gender is not None and client.assessment_score < SEX_OFFENSE_LSIR_MINIMUM_SCORE.get(Gender(client.gender), 0)): return None if StateSupervisionLevel( client.supervision_level) == StateSupervisionLevel.MINIMUM: return None return client.most_recent_assessment_date + timedelta( days=REASSESSMENT_DEADLINE_DAYS)
def testWrite_SingleCountWithGender(self): store_single_count(SingleCount(count=_COUNT, gender=Gender.FEMALE), '01001001') query = SessionFactory.for_schema_base(JailsBase).query( SingleCountAggregate) result = one(query.all()) self.assertEqual(result.jid, _JID) self.assertEqual(result.count, _COUNT) self.assertEqual(Gender(result.gender), Gender.FEMALE)
def testWrite_SingleCountWithGender(self): store_single_count(SingleCount(count=_COUNT, gender=Gender.FEMALE), "01001001") with SessionFactory.using_database(self.database_key, autocommit=False) as session: query = session.query(SingleCountAggregate) result = one(query.all()) self.assertEqual(result.jid, _JID) self.assertEqual(result.count, _COUNT) self.assertEqual(Gender(result.gender), Gender.FEMALE)
def _next_assessment_date(self) -> Optional[date]: # TODO(#5769): Eventually move this method to our calculate pipeline. if (self.etl_client.most_recent_assessment_date is None or self.etl_client.assessment_score is None): return self.etl_client.supervision_start_date + timedelta( days=NEW_SUPERVISION_ASSESSMENT_DEADLINE_DAYS) if self.etl_client.case_type == StateSupervisionCaseType.SEX_OFFENSE.value: if self.etl_client.assessment_score < SEX_OFFENSE_LSIR_MINIMUM_SCORE.get( Gender(self.etl_client.gender), 0): return None if (StateSupervisionLevel(self.etl_client.supervision_level) == StateSupervisionLevel.MINIMUM): return None return self.etl_client.most_recent_assessment_date + timedelta( days=REASSESSMENT_DEADLINE_DAYS)
def test_parseBadGenderEnum(self): with pytest.raises(EnumParsingError): Gender.parse("ABD", EnumOverrides.empty())
def test_parseGenderEnum(self): assert Gender.parse("Male", EnumOverrides.empty()) == Gender.MALE