def is_conviction(charge: Charge) -> Decision: return Decision( name=f"Is this charge for {charge.offense} a conviction?", value=charge.is_conviction(), reasoning= f"The charge's disposition {charge.disposition} indicates a conviction" if charge.is_conviction() else f"The charge's disposition {charge.disposition} indicates its not a conviction.", )
def no_corruption_of_minors_offense( charge: Charge, penalty_limit: int, conviction_limit: int, within_years: int ) -> Decision: """ No disqualifying convictions for corruption of minors. No sealing a conviction if it was punishable by more than two years for offenses under section 6301(a)(1), corruption of minors. 18 Pa.C.S. 9122.1(b)(1)(v) Returns: a True Decision if the charge was NOT a disqualifying offense. Otherwise a False Decision. """ decision = Decision(name="This charge is not a disqualifying corruption of minors offense?") patt = re.compile(r"^(?P<chapt>\d+)\s*ยง\s(?P<section>\d+\.?\d*)\s*(?P<subsections>[\(\)A-Za-z0-9\.]+).*") matches = patt.match(charge.statute) if not matches: decision.reasoning = "This doesn't appear to be one of the tiered sex offense statutes." decision.value = True else: this_offense = matches.group("section") + matches.group("subsections").replace("(","").replace(")","") decision.reasoning = [charge.is_conviction(), charge.get_statute_chapter() == 18, this_offense == "6301a1"] decision.value = not all(decision.reasoning) return decision
def not_felony1(charge: Charge) -> Decision: """ Any F1 graded offense disqualifies a whole record from sealing. 18 PA Code 9122.1(b)(2)(i) Returns: a True decision if the charge was NOT a felony1 conviction. """ decision = Decision(name="Is the charge an F1 conviction?") if charge.grade.strip() == "": decision.value = False decision.reasoning = ( "The charge's grade is unknown, so we don't know its *not* an F1." ) elif re.match("F1", charge.grade): if charge.is_conviction(): decision.value = False decision.reasoning = "The charge is an F1 conviction" else: decision.value = True decision.reasoning = ( f"The charge was F1, but the disposition was {charge.disposition}" ) else: decision.value = True decision.reasoning = f"The charge is {charge.grade}, which is not F1" return decision
def is_felony_conviction(charge: Charge) -> Decision: """ Was `charge` a felony conviction Args: charge: A Charge. Return: A Decision that is True if the charge is a felony conviction. """ decision = Decision(name=f"Was the charge [{charge.offense}, {charge.grade}, {charge.disposition}] a felony conviction?") decision.reasoning = [ re.match("F", charge.grade, re.IGNORECASE), charge.is_conviction(), ] decision.value = all(decision.reasoning) return decision
def not_murder(charge: Charge) -> Decision: """ Checks if a charge was a conviction for murder. Returns true if the charge was NOT a murder conviction. TODO The Expungement Generator's test is for the statute 18 PaCS 1502. Does the implementation here even work? Need to find real murder convictions to see. """ decision = Decision(name="Is the charge NOT a murder conviction?") if charge.is_conviction(): if re.match("murder", charge.offense, re.IGNORECASE): decision.value = False decision.reasoning = "The charge was a murder conviction." else: decision.value = True decision.reasoning = "Conviction for something other than murder." else: decision.value = True decision.reasoning = "Not a conviction." return decision