def interpret_loan_entry(entry):
    """Interpret data fields within a CO-TRACER loan report.

    Interpret the payment amount, loan amount, interest rate, interest payment,
    loan balance, payment date, filed date, loan date, amended, and amendment
    fields of the provided entry. All dates (payment, filed, and loan) are
    interpreted together and, if any fails, all will retain their original
    value. Likewise, amended and amendment are interpreted together and
    if one is malformed, both will retain their original value. Finally,
    the payment amount, loan amount, interest rate, interest payment, and
    loan balance will be interpreted transactionally and, if any fail, all
    will retain their original value.

    Entry may be edited in place and side-effects are possible in coupled code.
    However, client code should use the return value to guard against future
    changes.

    A value with the key 'AmountsInterpreted' will be set to True or False in
    the returned entry if floating point values are successfully interpreted
    or not respectively.

    A value with the key 'DatesInterpreted' will be set to True or False in
    the returned entry if ISO 8601 strings are successfully interpreted
    or not respectively.

    A value with the key 'BooleanFieldsInterpreted' will be set to True or
    False in the returned entry if boolean strings are successfully interpreted
    or not respectively.

    @param entry: The loan report data to manipulate / interpret.
    @type entry: dict
    @return: The entry passed 
    @raise ValueError: Raised if any expected field cannot be found in entry.
    """
    try:
        payment_amount = float(entry['PaymentAmount'])
        loan_amount = float(entry['LoanAmount'])
        interest_rate = float(entry['InterestRate'])
        interest_payment = float(entry['InterestPayment'])
        loan_balance = float(entry['LoanBalance'])
        entry['AmountsInterpreted'] = True
        entry['PaymentAmount'] = payment_amount
        entry['LoanAmount'] = loan_amount
        entry['InterestRate'] = interest_rate
        entry['InterestPayment'] = interest_payment
        entry['LoanBalance'] = loan_balance
    except ValueError:
        entry['AmountsInterpreted'] = False

    try:
        payment_date = parse_iso_str(entry['PaymentDate'])
        filed_date = parse_iso_str(entry['FiledDate'])
        loan_date = parse_iso_str(entry['LoanDate'])
        entry['DatesInterpreted'] = True
        entry['PaymentDate'] = payment_date
        entry['FiledDate'] = filed_date
        entry['LoanDate'] = loan_date
    except ValueError:
        entry['DatesInterpreted'] = False

    try:
        amended = parse_yes_no_str(entry['Amended'])
        amendment = parse_yes_no_str(entry['Amendment'])
        entry['BooleanFieldsInterpreted'] = True
        entry['Amended'] = amended
        entry['Amendment'] = amendment
    except ValueError:
        entry['BooleanFieldsInterpreted'] = False

    return entry
Interpret data fields within a CO-TRACER loan report.

    Interpret the payment amount, loan amount, interest rate, interest payment,
    loan balance, payment date, filed date, loan date, amended, and amendment
    fields of the provided entry. All dates (payment, filed, and loan) are
    interpreted together and, if any fails, all will retain their original
    value. Likewise, amended and amendment are interpreted together and
    if one is malformed, both will retain their original value. Finally,
    the payment amount, loan amount, interest rate, interest payment, and
    loan balance will be interpreted transactionally and, if any fail, all
    will retain their original value.

    Entry may be edited in place and side-effects are possible in coupled code.
    However, client code should use the return value to guard against future
    changes.

    A value with the key 'AmountsInterpreted' will be set to True or False in
    the returned entry if floating point values are successfully interpreted
    or not respectively.

    A value with the key 'DatesInterpreted' will be set to True or False in
    the returned entry if ISO 8601 strings are successfully interpreted
    or not respectively.

    A value with the key 'BooleanFieldsInterpreted' will be set to True or
    False in the returned entry if boolean strings are successfully interpreted
    or not respectively.

    @param entry: The loan report data to manipulate / interpret.
    @type entry: dict
    @return: The entry passed 
    @raise ValueError: Raised if any expected field cannot be found in entry.