Fix opening balance scope and add async cash ledger loading

This commit is contained in:
A R R R Associates
2026-09-04 15:30:39 +05:30
parent 58752e30e1
commit 3ad20087be
9 changed files with 508 additions and 34 deletions
@@ -38,6 +38,33 @@ def _near(a, b, tolerance=0.01):
return abs(float(a or 0) - float(b or 0)) <= tolerance
def _is_balance_sheet_ledger(row):
"""Return True only for ledger masters that belong to the Balance Sheet.
Tally exports ISREVENUE for Ledger masters. Revenue ledgers (income,
expense, purchase and sales accounts) must not carry an opening balance
into a new financial year. Stock Items are handled separately below.
"""
flag = _s((row or {}).get("is_revenue")).casefold()
if flag in {"yes", "y", "true", "1"}:
return False
if flag in {"no", "n", "false", "0"}:
return True
# Defensive fallback for older Tally responses that omitted ISREVENUE.
# Exclude only unmistakable P&L roots; retain Balance-Sheet masters.
parent = _norm((row or {}).get("parent"))
pnl_roots = (
"direct expenses", "indirect expenses", "direct incomes",
"indirect incomes", "sales accounts", "purchase accounts",
)
return parent not in pnl_roots
def _balance_sheet_ledgers(masters):
return [row for row in list((masters or {}).get("ledgers") or []) if _is_balance_sheet_ledger(row)]
def _mapping_index(db, *, tenant_id, client_id, master_type, previous_company_guid, current_company_guid):
rows = list(
db.execute(
@@ -308,8 +335,8 @@ def create_comparison_run(
)
ledger_matches = _match_ledgers(
list(previous_masters.get("ledgers") or []),
list(current_masters.get("ledgers") or []),
_balance_sheet_ledgers(previous_masters),
_balance_sheet_ledgers(current_masters),
ledger_map,
)
stock_matches = _match_stock(