reconcile: Remove totals, highlight payee mismatches orange.
This commit is contained in:
parent
519542b1fa
commit
da5caa3e6c
1 changed files with 18 additions and 19 deletions
|
@ -21,11 +21,10 @@ employees.
|
|||
Run it like this:
|
||||
|
||||
$ statement_reconciler \
|
||||
--beancount-file=2021.beancount \
|
||||
--account=Liabilities:CreditCard:AMEX \
|
||||
--csv-statement=2021-09-10_AMEX_activity.csv \
|
||||
--bank-statement=2021-09-10_AMEX_activity.csv \
|
||||
--statement-balance=1000
|
||||
--beancount-file 2021.beancount \
|
||||
--account Liabilities:CreditCard:AMEX \
|
||||
--csv-statement ~/svn/2021-09-10_AMEX_activity.csv \
|
||||
--bank-statement ~/svn/2021-09-10_AMEX_activity.pdf
|
||||
|
||||
Background:
|
||||
|
||||
|
@ -374,7 +373,10 @@ def format_matches(matches: List, csv_statement: str, show_reconciled_matches: b
|
|||
if r1s and r2s:
|
||||
if show_reconciled_matches or not all(x['bank_statement'] for x in r2s):
|
||||
if len(r2s) == 1:
|
||||
match_output.append([r1s[0]['date'], f'{format_record(r1s[0])} → {format_record(r2s[0])} ✓ Matched{note}'])
|
||||
entry = [r1s[0]['date'], f'{format_record(r1s[0])} → {format_record(r2s[0])} ✓ Matched{note}']
|
||||
if 'payee mismatch' in note:
|
||||
entry[1] = Fore.YELLOW + Style.BRIGHT + entry[1] + Style.RESET_ALL
|
||||
match_output.append(entry)
|
||||
else:
|
||||
match_output.extend(format_multirecord(r1s, r2s, note))
|
||||
elif r1s:
|
||||
|
@ -474,11 +476,9 @@ def parse_arguments(argv: List[str]) -> argparse.Namespace:
|
|||
parser.add_argument('--csv-statement', required=True, type=parse_repo_relative_path)
|
||||
parser.add_argument('--bank-statement', required=True, type=parse_repo_relative_path)
|
||||
parser.add_argument('--account', required=True, help='eg. Liabilities:CreditCard:AMEX')
|
||||
parser.add_argument('--grep-output-filename')
|
||||
# parser.add_argument('--report-group-regex')
|
||||
parser.add_argument('--show-reconciled-matches', action='store_true')
|
||||
parser.add_argument('--statement-balance', type=parse_decimal_with_separator, required=True, help="A.K.A \"cleared balance\" taken from the end of the period on the PDF statement. Required because CSV statements don't include final or running totals")
|
||||
parser.add_argument('--non-interactive', action='store_true', help="Don't prompt to write to the books")
|
||||
parser.add_argument('--non-interactive', action='store_true', help="Don't prompt to write to the books") # parser.add_argument('--statement-balance', type=parse_decimal_with_separator, required=True, help="A.K.A \"cleared balance\" taken from the end of the period on the PDF statement. Required because CSV statements don't include final or running totals")
|
||||
args = parser.parse_args(args=argv)
|
||||
return args
|
||||
|
||||
|
@ -581,10 +581,10 @@ def main(arglist: Optional[Sequence[str]] = None,
|
|||
# but I'm not clear on how to use compile(). An example would help.
|
||||
entries, _, options = loader.load_file(args.beancount_file)
|
||||
|
||||
books_balance_query = f"""SELECT sum(COST(position)) AS aa WHERE account = "{args.account}"
|
||||
AND date <= {end_date.isoformat()}"""
|
||||
_, result_rows = run_query(entries, options, books_balance_query, numberify=True)
|
||||
books_balance = result_rows[0][0] if result_rows else 0
|
||||
# books_balance_query = f"""SELECT sum(COST(position)) AS aa WHERE account = "{args.account}"
|
||||
# AND date <= {end_date.isoformat()}"""
|
||||
# _, result_rows = run_query(entries, options, books_balance_query, numberify=True)
|
||||
# books_balance = result_rows[0][0] if result_rows else 0
|
||||
|
||||
# String concatenation looks bad, but there's no SQL injection possible here
|
||||
# because BQL can't write back to the Beancount files. I hope!
|
||||
|
@ -604,16 +604,15 @@ def main(arglist: Optional[Sequence[str]] = None,
|
|||
_, total_missing_from_books, total_missing_from_statement = totals(matches)
|
||||
|
||||
print('-' * 155)
|
||||
print(f'{"Statement transaction":<52} {"Books transaction":<58} Notes')
|
||||
statement_heading = f'Statement transactions {begin_date} to {end_date}'
|
||||
print(f'{statement_heading:<52} {"Books transactions":<58} Notes')
|
||||
print('-' * 155)
|
||||
for _, output in sorted(match_output, key=lambda x: x[0]):
|
||||
print(output)
|
||||
print('-' * 155)
|
||||
print(f'Statement period {begin_date} to {end_date}')
|
||||
print(f'Statement/cleared balance: {args.statement_balance:12,.2f} (as provided by you)')
|
||||
print(f'Books balance: {books_balance:12,.2f} (all transactions, includes unreconciled)')
|
||||
print(f'Total not on statement: {total_missing_from_statement:12,.2f}')
|
||||
print(f'Total not on books: {total_missing_from_books:12,.2f}')
|
||||
print(f'Sub-total not on statement: {total_missing_from_statement:12,.2f}')
|
||||
print(f'Sub-total not in books: {total_missing_from_books:12,.2f}')
|
||||
print(f'Total: {total_missing_from_statement + total_missing_from_books:12,.2f}')
|
||||
print('-' * 155)
|
||||
|
||||
# Write statement metadata back to books
|
||||
|
|
Loading…
Reference in a new issue