Example #1
0
def test_eligible_mrc_with_single_arrest():
    three_yr_mrc = ChargeFactory.create(
        disposition=DispositionCreator.create(ruling="Convicted", date=Time.THREE_YEARS_AGO)
    )

    arrest = ChargeFactory.create(disposition=DispositionCreator.create(ruling="Dismissed", date=Time.THREE_YEARS_AGO))

    case = CaseFactory.create(charges=tuple([three_yr_mrc, arrest]))
    record = Record(tuple([case]))
    expunger_result = Expunger.run(record)

    assert expunger_result[arrest.ambiguous_charge_id].status is EligibilityStatus.ELIGIBLE
    assert (
        expunger_result[arrest.ambiguous_charge_id].reason
        == 'Time eligibility of the arrest matches conviction on the same case (the "friendly" rule)'
    )
    assert expunger_result[arrest.ambiguous_charge_id].date_will_be_eligible == date.today()

    assert expunger_result[three_yr_mrc.ambiguous_charge_id].status is EligibilityStatus.ELIGIBLE
    assert expunger_result[three_yr_mrc.ambiguous_charge_id].reason == "Eligible now"
    assert expunger_result[three_yr_mrc.ambiguous_charge_id].date_will_be_eligible == date.today()

    merged_record = RecordMerger.merge([record], [expunger_result])
    assert (
        merged_record.cases[0].charges[0].expungement_result.charge_eligibility.status  # type: ignore
        == ChargeEligibilityStatus.ELIGIBLE_NOW
    )
    assert merged_record.cases[0].charges[0].expungement_result.charge_eligibility.label == "Eligible"  # type: ignore

    assert (
        merged_record.cases[0].charges[1].expungement_result.charge_eligibility.status  # type: ignore
        == ChargeEligibilityStatus.ELIGIBLE_NOW
    )
    assert merged_record.cases[0].charges[1].expungement_result.charge_eligibility.label == "Eligible"  # type: ignore
 def analyze_ambiguous_record(ambiguous_record: AmbiguousRecord):
     charge_id_to_time_eligibilities = []
     for record in ambiguous_record:
         record.errors += ErrorChecker.check(record)  # TODO: Fix mutation
         expunger = Expunger(record)
         charge_id_to_time_eligibility = expunger.run()
         charge_id_to_time_eligibilities.append(
             charge_id_to_time_eligibility)
     record = RecordMerger.merge(ambiguous_record,
                                 charge_id_to_time_eligibilities)
     return record
 def analyze_ambiguous_record(ambiguous_record: AmbiguousRecord):
     charge_id_to_time_eligibilities = []
     ambiguous_record_with_errors = []
     for record in ambiguous_record:
         record_with_errors = replace(record,
                                      errors=tuple(
                                          ErrorChecker.check(record)))
         charge_id_to_time_eligibility = Expunger.run(record_with_errors)
         charge_id_to_time_eligibilities.append(
             charge_id_to_time_eligibility)
         ambiguous_record_with_errors.append(record_with_errors)
     record = RecordMerger.merge(ambiguous_record_with_errors,
                                 charge_id_to_time_eligibilities)
     return record
 def _analyze_ambiguous_record(ambiguous_record: AmbiguousRecord,
                               charge_ids_with_question: List[str]):
     charge_id_to_time_eligibilities = []
     ambiguous_record_with_errors = []
     for record in ambiguous_record:
         charge_id_to_time_eligibility = Expunger.run(record)
         charge_id_to_time_eligibilities.append(
             charge_id_to_time_eligibility)
         ambiguous_record_with_errors.append(record)
     record = RecordMerger.merge(ambiguous_record_with_errors,
                                 charge_id_to_time_eligibilities,
                                 charge_ids_with_question)
     sorted_record = RecordCreator.sort_record(record)
     return replace(sorted_record,
                    errors=tuple(ErrorChecker.check(sorted_record)))
def test_marijuana_violation_uses_statewide_form(record_with_mj_over_21):
    expunger_result = Expunger.run(record_with_mj_over_21)
    merged_record = RecordMerger.merge([record_with_mj_over_21],
                                       [expunger_result], [])
    record_summary = RecordSummarizer.summarize(merged_record, {})
    user_information = {
        "full_name": "",
        "date_of_birth": "",
        "mailing_address": "",
        "phone_number": "",
        "city": "",
        "state": "",
        "zip_code": "",
    }
    zip_path, zip_name = FormFilling.build_zip(record_summary,
                                               user_information)
    temp_dir = mkdtemp()
    with ZipFile(zip_path, "r") as zip_ref:
        zip_ref.extractall(temp_dir)
        for _root, _dir, files in os.walk(temp_dir):
            assert len(files) == 1
            assert "statewide_marijuana_conviction" in files[0]
def test_normal_conviction_uses_multnomah_conviction_form():
    record = CrawlerFactory.create(JohnDoe.SINGLE_CASE_RECORD,
                                   {"CASEJD1": CaseDetails.CASEJD74})
    expunger_result = Expunger.run(record)
    merged_record = RecordMerger.merge([record], [expunger_result], [])
    record_summary = RecordSummarizer.summarize(merged_record, {})
    user_information = {
        "full_name": "",
        "date_of_birth": "",
        "mailing_address": "",
        "phone_number": "",
        "city": "",
        "state": "",
        "zip_code": "",
    }
    zip_path, zip_name = FormFilling.build_zip(record_summary,
                                               user_information)
    temp_dir = mkdtemp()
    with ZipFile(zip_path, "r") as zip_ref:
        zip_ref.extractall(temp_dir)
        for _root, _dir, files in os.walk(temp_dir):
            assert len(files) == 1
            assert "multnomah_conviction" in files[0]
def test_record_summarizer_multiple_cases():
    case_all_eligible = CaseFactory.create(case_number="1", balance="100.00", date_location=["1/1/1995", "Multnomah"])
    case_all_eligible.charges = [
        ChargeFactory.create(
            case_number=case_all_eligible.case_number,
            name="Theft of dignity",
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        )
    ]

    case_partially_eligible = CaseFactory.create(
        case_number="2", balance="200.00", date_location=["1/1/1995", "Clackamas"]
    )
    case_partially_eligible.charges = [
        ChargeFactory.create(
            case_number=case_partially_eligible.case_number,
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        ),
        ChargeFactory.create(
            case_number=case_partially_eligible.case_number,
            level="Felony Class A",
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        ),
    ]

    case_possibly_eligible = CaseFactory.create(case_number="3", balance="300.00", date_location=["1/1/1995", "Baker"])
    case_possibly_eligible.charges = [
        ChargeFactory.create(
            case_number=case_possibly_eligible.case_number,
            level="Felony Class B",
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        )
    ]

    case_all_ineligible = CaseFactory.create(case_number="4", balance="400.00", date_location=["1/1/1995", "Baker"])
    case_all_ineligible.charges = [
        ChargeFactory.create(
            case_number=case_all_ineligible.case_number,
            level="Felony Class A",
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        )
    ]

    case_all_ineligible_2 = CaseFactory.create(case_number="5", date_location=["1/1/1995", "Baker"])
    case_all_ineligible_2.charges = [
        ChargeFactory.create(
            case_number=case_all_ineligible_2.case_number,
            level="Felony Class A",
            disposition=Disposition(ruling="Convicted", date=Time.TEN_YEARS_AGO),
        )
    ]
    record = Record(
        [case_all_eligible, case_partially_eligible, case_possibly_eligible, case_all_ineligible, case_all_ineligible_2]
    )
    expunger = Expunger(record)
    expunger_result = expunger.run()
    merged_record = RecordMerger.merge([record], [expunger_result])
    record_summary = RecordSummarizer.summarize(merged_record, {})

    assert record_summary.total_balance_due == 1000.00
    assert record_summary.total_cases == 5
    assert record_summary.total_charges == 6
    assert record_summary.cases_sorted["fully_eligible"] == ["1"]
    assert record_summary.cases_sorted["fully_ineligible"] == ["4", "5"]
    assert record_summary.cases_sorted["partially_eligible"] == ["2"]
    assert record_summary.cases_sorted["other"] == ["3"]

    """
Example #8
0
def test_round_trip_various_records(record):
    expunger_result = Expunger.run(record)
    updated_record = RecordMerger.merge([record], [expunger_result])
    json.loads(json.dumps(updated_record, cls=ExpungeModelEncoder))
def test_record_summarizer_multiple_cases():
    case_all_eligible = CaseFactory.create(
        case_number="1",
        balance="100.00",
        date_location=["1/1/1995", "Multnomah"],
        charges=tuple([
            ChargeFactory.create(
                case_number="1",
                name="Theft of dignity",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            )
        ]),
    )

    case_partially_eligible = CaseFactory.create(
        case_number="2",
        balance="200.00",
        date_location=["1/1/1995", "Clackamas"],
        charges=tuple([
            ChargeFactory.create(
                case_number="2",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            ),
            ChargeFactory.create(
                case_number="2",
                level="Felony Class A",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            ),
        ]),
    )

    case_possibly_eligible = CaseFactory.create(
        case_number="3",
        balance="300.00",
        date_location=["1/1/1995", "Baker"],
        charges=tuple([
            ChargeFactory.create(
                case_number="3",
                level="Felony Class B",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            )
        ]),
    )

    case_all_ineligible = CaseFactory.create(
        case_number="4",
        balance="400.00",
        date_location=["1/1/1995", "Baker"],
        charges=tuple([
            ChargeFactory.create(
                case_number="4",
                level="Felony Class A",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            )
        ]),
    )

    case_all_ineligible_2 = CaseFactory.create(
        case_number="5",
        date_location=["1/1/1995", "Baker"],
        charges=tuple([
            ChargeFactory.create(
                case_number="5",
                level="Felony Class A",
                disposition=DispositionCreator.create(ruling="Convicted",
                                                      date=date(2010, 1, 1)),
            )
        ]),
    )
    record = Record(
        tuple([
            case_all_eligible,
            case_partially_eligible,
            case_possibly_eligible,
            case_all_ineligible,
            case_all_ineligible_2,
        ]))
    expunger_result = Expunger.run(record)

    merged_record = RecordMerger.merge([record], [expunger_result], [])
    record_summary = RecordSummarizer.summarize(merged_record, {})

    assert record_summary.total_fines_due == 1000.00
    assert record_summary.total_cases == 5
    assert record_summary.total_charges == 6
    assert record_summary.eligible_charges_by_date == {
        "Eligible Jan 1, 2030": [(
            case_possibly_eligible.charges[0].ambiguous_charge_id,
            "Theft of services (CONVICTED) Charged Jan 1, "
            "2010",
        )],
        "Eligible Now": [
            (case_all_eligible.charges[0].ambiguous_charge_id,
             "Theft of dignity (CONVICTED) Charged Jan 1, 2010"),
            (
                case_partially_eligible.charges[0].ambiguous_charge_id,
                "Theft of services (CONVICTED) Charged Jan 1, 2010",
            ),
        ],
        "Ineligible": [
            (
                case_partially_eligible.charges[1].ambiguous_charge_id,
                "Theft of services (CONVICTED) Charged Jan 1, 2010",
            ),
            (
                case_all_ineligible.charges[0].ambiguous_charge_id,
                "Theft of services (CONVICTED) Charged Jan 1, 2010",
            ),
            (
                case_all_ineligible_2.charges[0].ambiguous_charge_id,
                "Theft of services (CONVICTED) Charged Jan 1, 2010",
            ),
        ],
    }
    assert len(record_summary.county_filing_fees) == 2
    assert record_summary.total_filing_fees_due == 722
    assert (next(county.total_fines_due
                 for county in record_summary.county_fines
                 if county.county_name == "Multnomah") == 100)
    assert (next(county.total_fines_due
                 for county in record_summary.county_fines
                 if county.county_name == "Clackamas") == 200)
    assert (next(county.total_fines_due
                 for county in record_summary.county_fines
                 if county.county_name == "Baker") == 700)