File size: 1,334 Bytes
ef983af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env python3
"""Read-only D3 ledger verification: balanced journals + projections match derived balances.

Exit code 0 when the ledger is healthy, 1 otherwise. Never mutates the database.

Example:
  python scripts/d3_verify_ledger.py --db-path /tmp/amanpay-d2/amanpay.db --tenant event \
      --allow-unknown-fs --json
"""

from __future__ import annotations

import argparse
import sys

from amanpay.finance.cli import add_common_args, build_runtime_for_cli, emit, resolve_tenant_id
from amanpay.finance.verification import verify_ledger


def main(argv=None) -> int:
    p = argparse.ArgumentParser(description="Verify the D3 ledger (read-only).")
    add_common_args(p, tenant_required=False)
    args = p.parse_args(argv)

    rt = build_runtime_for_cli(args.db_path, allow_unknown_fs=args.allow_unknown_fs)
    tid = resolve_tenant_id(rt, args.tenant) if args.tenant else None
    result = verify_ledger(rt.store, tid)
    emit({"ok": result["ok"], "all_balanced": result["control_totals"]["all_balanced"],
          "projections_ok": result["projections"]["ok"],
          "last_journal_seq": result["control_totals"]["last_journal_seq"],
          "counts": result["control_totals"]["counts"]}, as_json=args.json)
    rt.close()
    return 0 if result["ok"] else 1


if __name__ == "__main__":
    sys.exit(main())