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"
Esempio n. 2
0
 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
Esempio n. 3
0
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"
    )
Esempio n. 5
0
 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"
    )
Esempio n. 9
0
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