def test_no_disposition(): unclassified_dispo_none = ChargeFactory.create( name="Unknown", statute="333.333", level="Felony Class F", disposition=DispositionCreator.empty(), ) assert isinstance(unclassified_dispo_none.charge_type, UnclassifiedCharge) assert unclassified_dispo_none.type_eligibility.status is EligibilityStatus.NEEDS_MORE_ANALYSIS assert unclassified_dispo_none.type_eligibility.reason == "Unrecognized Charge : Further Analysis Needed"
def merge_dispositions(same_charges: List[Charge]) -> Disposition: if len( list( unique_everseen([ charge.disposition for charge in same_charges ]))) == 2: return DispositionCreator.empty() else: return same_charges[0].disposition
def test_no_dispo_violation_is_not_type_eligible(): charge = ChargeFactory.create(statute="801.000", level="Class C Traffic Violation", disposition=DispositionCreator.empty()) assert charge.type_eligibility.status is EligibilityStatus.INELIGIBLE assert ( charge.type_eligibility.reason == "Always ineligible under 137.225(7)(a) (for convictions) or by omission from statute (for dismissals)" ) assert not charge.charge_type.blocks_other_charges
def test_manufacture_delivery_missing_disposition(): charges = ChargeFactory.create_ambiguous_charge( name="Manufacture/Delivery", statute="4759922b", level="Felony Class A", disposition=DispositionCreator.empty()) type_eligibility = RecordMerger.merge_type_eligibilities(charges) assert type_eligibility.status is EligibilityStatus.NEEDS_MORE_ANALYSIS assert ( type_eligibility.reason == "Marijuana Manufacture Delivery – Always eligible under 137.226 (for convictions) or 137.225(1)(d) (for dismissals) OR Felony Class A – Disposition not found. Needs further analysis" )
def create_ambiguous_charge( cls, case_number="1", name="Theft of services", statute="164.125", level="Misdemeanor Class A", date: date_class = None, disposition: Disposition = DispositionCreator.empty(), violation_type="Offense Misdemeanor", ) -> AmbiguousCharge: return cls._build_ambiguous_charge(case_number, date, disposition, level, name, statute, violation_type)
def test_felony_c_no_disposition(): charge = ChargeFactory.create( name="Theft in the first degree", statute="164.055", level="Felony Class C", disposition=DispositionCreator.empty(), ) assert isinstance(charge.charge_type, FelonyClassC) assert charge.type_eligibility.status is EligibilityStatus.ELIGIBLE assert ( charge.type_eligibility.reason == "Eligible under 137.225(5)(b) for convictions or under 137.225(1)(b) for dismissals" )
def test_marijuana_eligible_missing_dispo(): marijuana_eligible_charge = ChargeFactory.create( name="Delivery of Marijuana to Minor", statute="4758604A", level="Felony Class A", disposition=DispositionCreator.empty(), ) assert isinstance(marijuana_eligible_charge.charge_type, MarijuanaEligible) assert marijuana_eligible_charge.type_eligibility.status is EligibilityStatus.ELIGIBLE assert ( marijuana_eligible_charge.type_eligibility.reason == "Always eligible under 137.226 (for convictions) or 137.225(1)(b) (for dismissals)" )
def test_misdemeanor_missing_disposition(): misdemeanor_charge = ChargeFactory.create( name="Criminal Trespass in the Second Degree", statute="164.245", level="Misdemeanor Class C", disposition=DispositionCreator.empty(), ) assert isinstance(misdemeanor_charge.charge_type, MisdemeanorClassBC) assert misdemeanor_charge.type_eligibility.status is EligibilityStatus.ELIGIBLE assert ( misdemeanor_charge.type_eligibility.reason == "Always eligible under 137.225(1)(b) for convictions, or 137.225(1)(d) for dismissals" )
class DemoRecords: @staticmethod def build_search_results( username: str, password: str, aliases: Tuple[Alias, ...], search_cache: LRUCache ) -> Tuple[List[OeciCase], List[str]]: alias_match = search_cache[aliases] if alias_match: return alias_match else: errors = [] search_results: List[OeciCase] = [] for alias in aliases: alias_lower = Alias( alias.first_name.lower().strip(), alias.last_name.lower().strip(), alias.middle_name.lower().strip(), alias.birth_date, ) try: alias_search_result = DemoRecords.records.get(alias_lower, []) search_results += alias_search_result except Exception as e: errors.append(str(e)) print(e) if not errors: search_cache[aliases] = search_results, errors return search_results, errors shared_case_data = { "citation_number": "something", "case_detail_link": "?404", "edit_status": EditStatus.UNCHANGED, "current_status": "Closed", "balance_due_in_cents": 0, "birth_year": 1995, "location": "Multnomah", "violation_type": "Offense Misdemeanor", "date": date_class.today(), "district_attorney_number": "01234567", "sid": "OR12345678", } shared_charge_data = { "balance_due_in_cents": 0, "edit_status": EditStatus.UNCHANGED, "probation_revoked": None, "level": "Misdemeanor Class C", "statute": "166.015", "name": "Disorderly Conduct", "date": date_class.today(), "disposition": DispositionCreator.empty(), } common_name_record_1 = [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON A. NAME", "birth_year": 1970, "case_number": "100000", "location": "Clackamas", "date": date_class.today() - relativedelta(years=6, days=12, months=4), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Aggravated Theft in the First Degree", "statute": "164.057", "level": "Felony Class B", "date": date_class.today() - relativedelta(years=6, days=12, months=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=6, days=12, months=3), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON NAME", "birth_year": 1970, "case_number": "110000", "location": "Baker", "date": date_class.today() - relativedelta(years=7, days=26, months=7), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "110000-1", "name": "Theft in the Second Degree", "statute": "164.057", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=7, days=26, months=7), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=7, days=26, months=6), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON A NAME", "birth_year": 1970, "case_number": "120000", "location": "Baker", "date": date_class.today() - relativedelta(years=7, days=26, months=7), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "120000-1", "name": "Poss under oz Marijuana", "statute": "475.000", "level": "violation", "date": date_class.today() - relativedelta(years=8, days=26, months=7), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=8, days=26, months=6), ruling="Convicted" ), }, ), ), ), ] common_name_record_2 = [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON NAME", "birth_year": 1985, "case_number": "200000", "location": "Benton", "date": date_class.today() - relativedelta(years=3, days=12, months=4), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "200000-1", "name": "Obstruction of search warrant", "statute": "162.247", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=3, days=12, months=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, days=12, months=4), ruling="Dismissed" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "COMMON B. NAME", "birth_year": 1985, "case_number": "210000", "location": "Baker", "date": date_class.today() - relativedelta(years=4, days=5, months=2), }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "210000-1", "name": "Poss Controlled Sub", "statute": "475.9924A", "level": "Felony Unclassified", "date": date_class.today() - relativedelta(years=4, days=5, months=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4), ruling="Convicted" ), }, ), ), ), ] # "date": date_class.today() - relativedelta(years=3, days=9, months =5), records = { Alias("john", "common", "", ""): common_name_record_1 + common_name_record_2, Alias("john", "common", "", "1/1/1970"): common_name_record_1, Alias("john", "common", "", "2/2/1985"): common_name_record_2, Alias("single", "conviction", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "SINGLE OFFENSE", "birth_year": 1995, "case_number": "100000", "location": "Deschutes", "date": date_class.today() - relativedelta(years=5), "violation_type": "Offense Felony", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Identity Theft", "statute": "165.800", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), ], Alias("multiple", "charges", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "balance_due_in_cents": 100000, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "100000", "location": "Baker", "date": date_class.today() - relativedelta(years=4), "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Disorderly Conduct in the First Degree", "statute": "166.223", "level": "Misdemeanor Class A", "date": date_class.today() - relativedelta(years=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, months=9), ruling="Convicted" ), "balance_due_in_cents": 100000, }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-2", "name": "Disorderly Conduct in the Second Degree", "statute": "166.2250A", "level": "Misdemeanor Class B", "date": date_class.today() - relativedelta(years=4), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=3, months=9), ruling="Dismissed" ), "balance_due_in_cents": 100000, }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "110000", "location": "Multnomah", "date": date_class.today() - relativedelta(years=1), "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "110000-1", "name": "Theft in the Third Degree", "statute": "164.043", "level": "Misdemeanor Class C", "date": date_class.today() - relativedelta(years=1), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(months=9), ruling="Dismissed" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "name": "MULTIPLE CHARGES", "birth_year": 1990, "case_number": "120000", "location": "Multnomah", "date": date_class.today() - relativedelta(years=12), "violation_type": "Offense Violation", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "120000-1", "name": "Failure to Obey Traffic Control Device", "statute": "811.265", "level": "Violation", "date": date_class.today() - relativedelta(years=12), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=11, months=9), ruling="Dismissed" ), }, ), ), ), ], Alias("portland", "protester", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Open", "name": "DEFUND POLICE", "case_number": "100000", "violation_type": "Offense Misdemeanor", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-3", "name": "Interfering w/ Peace/Parole and Probation Officer", "statute": "162.247", "level": "Misdemeanor Class A", "date": date_class.today() + relativedelta(days=1), }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-4", "name": "Disorderly Conduct in the First Degree", "statute": "166.0232A", "level": "Misdemeanor Class A", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-5", "name": "Resisting Arrest", "statute": "162.315", "level": "Misdemeanor Class A", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-6", "name": "Riot", "statute": "166.015", "level": "Felony Class C", }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "100000-7", "name": "Riot While Masked", "statute": "166.015A", "level": "Felony Class B", }, ), ), ), ], Alias("more", "categories", "", ""): [ OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "123456", "violation_type": "Offense Felony", "balance_due_in_cents": 50000, }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "123456-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=1, months=9), ruling="Convicted" ), "balance_due_in_cents": 50000, }, ), from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "123456-2", "name": "Felony Riot", "statute": "111.111", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=2), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=1, months=9), ruling="Dismissed" ), "balance_due_in_cents": 50000, }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "234567", "violation_type": "Offense Felony", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "234567-1", "name": "Assaulting a Public Safety Officer", "statute": "163.208", "level": "Felony Class C", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "333333", "violation_type": "Offense Violation", }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "333333-1", "name": "Possession of Marijuana < 1 Ounce", "statute": "4758643", "level": "Violation Unclassified", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), }, ), ), ), OeciCase( summary=from_dict( data_class=CaseSummary, data={ **shared_case_data, "current_status": "Closed", "name": "John Notaperson", "case_number": "444444", "violation_type": "Offense Violation", "balance_due_in_cents": 50000, }, ), charges=( from_dict( data_class=OeciCharge, data={ **shared_charge_data, "ambiguous_charge_id": "444444-1", "name": "Possession of Marijuana < 1 Ounce", "statute": "4758643", "level": "Violation Unclassified", "date": date_class.today() - relativedelta(years=5), "disposition": DispositionCreator.create( date=date_class.today() - relativedelta(years=4, months=9), ruling="Convicted" ), "balance_due_in_cents": 50000, }, ), ), ), ], }
date=date(1981, 1, 1), ruling="Convicted", status=DispositionStatus.CONVICTED, amended=False, ), probation_revoked=None, balance_due_in_cents=0, edit_status=EditStatus.UNCHANGED, ), OeciCharge( ambiguous_charge_id="X0002-2", name="assault 3", statute="200.000", level="Violation", date=date(1001, 1, 1), disposition=DispositionCreator.empty(), probation_revoked=None, balance_due_in_cents=0, edit_status=EditStatus.UNCHANGED, ), ), ) mock_search_results = { "empty": [], "single_case_two_charges": [case_1], "two_cases_two_charges_each": [case_1, case_2] } def search( mocked_record_name