def METHOD_NAME(session: Session, case_summary: CaseSummary) -> OeciCase:
    case_parser_data = Crawler._parse_case(session, case_summary)
    district_attorney_number = case_parser_data.district_attorney_number
    sid = case_parser_data.sid
    balance_due_in_cents = CaseCreator.compute_balance_due_in_cents(case_parser_data.balance_due)
    charges: List[OeciCharge] = []
    for charge_id, charge_dict in case_parser_data.hashed_charge_data.items():
        ambiguous_charge_id = f"{case_summary.case_number}-{charge_id}"
        charge = Crawler._build_oeci_charge(
            charge_id, ambiguous_charge_id, charge_dict, case_parser_data, balance_due_in_cents
        )
        charges.append(charge)
    updated_case_summary = replace(
        case_summary,
        district_attorney_number=district_attorney_number,
        sid=sid,
        balance_due_in_cents=balance_due_in_cents,
        edit_status=EditStatus.UNCHANGED,
    )
    return OeciCase(updated_case_summary, charges=tuple(charges))