def _get_sequence_no(period: StateIncarcerationPeriod) -> int: """Extracts the ND specific Movement Sequence Number from the external id of the provided |period|. """ try: external_id = cast(str, period.external_id) sequence_no = int(external_id.split('-')[-1]) except Exception: raise EntityMatchingError( f"Could not parse sequence number from external_id " f"{period.external_id}", period.get_entity_name()) return sequence_no
def admitted_for_revocation(ip: StateIncarcerationPeriod) -> bool: """Determines if the provided |ip| began because of a revocation.""" if not ip.admission_reason: return False revocation_types = [ StateIncarcerationPeriodAdmissionReason.PAROLE_REVOCATION, StateIncarcerationPeriodAdmissionReason.PROBATION_REVOCATION ] non_revocation_types = [ StateIncarcerationPeriodAdmissionReason.ADMITTED_IN_ERROR, StateIncarcerationPeriodAdmissionReason.EXTERNAL_UNKNOWN, StateIncarcerationPeriodAdmissionReason.NEW_ADMISSION, StateIncarcerationPeriodAdmissionReason.RETURN_FROM_ERRONEOUS_RELEASE, StateIncarcerationPeriodAdmissionReason.RETURN_FROM_ESCAPE, StateIncarcerationPeriodAdmissionReason.TRANSFER ] if ip.admission_reason in revocation_types: return True if ip.admission_reason in non_revocation_types: return False raise EntityMatchingError( f"Unexpected StateIncarcerationPeriodAdmissionReason " f"{ip.admission_reason}.", ip.get_entity_name())
def _merge_incomplete_periods( a: StateIncarcerationPeriod, b: StateIncarcerationPeriod) \ -> StateIncarcerationPeriod: if bool(a.admission_date) and bool(b.release_date): admission_period, release_period = a, b elif bool(a.release_date) and bool(b.admission_date): admission_period, release_period = b, a else: raise EntityMatchingError( f"Expected one admission period and one release period when " f"merging, instead found periods: {a}, {b}", a.get_entity_name()) merged_period = attr.evolve(admission_period) admission_external_id = admission_period.external_id or '' release_external_id = release_period.external_id or '' new_external_id = admission_external_id \ + _INCARCERATION_PERIOD_ID_DELIMITER \ + release_external_id _default_merge_flat_fields(new_entity=release_period, old_entity=merged_period) merged_period.external_id = new_external_id return merged_period