Files
njts-accounting-core/verify_bank_balance.py
2026-02-21 10:51:25 +09:00

109 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import psycopg2
conn = psycopg2.connect(
host="192.168.0.61",
port=55432,
database="njts_acct",
user="njts_app",
password="njts_app2025"
)
cur = conn.cursor()
print("=" * 160)
print("【普通預金の詳細確認】")
print("=" * 160)
# 查询普通預金是否有遗漏删除的is_latest=false的记录
cur.execute("""
SELECT
COUNT(*) as total_count,
SUM(CASE WHEN je.is_deleted = false AND je.is_latest = true THEN 1 ELSE 0 END) as latest_count,
SUM(CASE WHEN je.is_deleted = false AND je.is_latest = false THEN 1 ELSE 0 END) as old_version_count,
SUM(CASE WHEN je.is_deleted = true THEN 1 ELSE 0 END) as deleted_count
FROM journal_lines jl
INNER JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
WHERE jl.account_id = 2 -- 普通預金
""")
total, latest, old_ver, deleted = cur.fetchone()
print(f"\n普通預金の仕訳カウント:")
print(f" 全体: {total}")
print(f" 最新版is_latest=true: {latest}")
print(f" 古い版is_deleted=false, is_latest=false: {old_ver}")
print(f" 削除済みis_deleted=true: {deleted}")
# 查询普通預金的各种状态的余额
cur.execute("""
SELECT
je.is_latest,
je.is_deleted,
COUNT(*) as cnt,
COALESCE(SUM(jl.debit), 0) as total_debit,
COALESCE(SUM(jl.credit), 0) as total_credit,
COALESCE(SUM(jl.debit), 0) - COALESCE(SUM(jl.credit), 0) as balance
FROM journal_lines jl
INNER JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
WHERE jl.account_id = 2
GROUP BY je.is_latest, je.is_deleted
ORDER BY je.is_deleted, je.is_latest
""")
print(f"\n普通預金の状態別残高:")
print()
total_all = 0
for is_latest, is_deleted, cnt, debit, credit, balance in cur.fetchall():
status = f"is_latest={is_latest}, is_deleted={is_deleted}"
print(f" {status:35} | 件数={cnt:3} | 借={debit:>12,.0f} 貸={credit:>12,.0f} | 残高={balance:>12,.0f}")
total_all += balance
print(f"\n全て合計: {total_all:>15,.0f}")
# 查询只计算最新版本和非删除的
cur.execute("""
SELECT
COALESCE(SUM(COALESCE(jl.debit, 0) - COALESCE(jl.credit, 0)), 0)
FROM journal_lines jl
INNER JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
WHERE jl.account_id = 2
AND je.is_deleted = false
AND je.is_latest = true
""")
valid_balance = cur.fetchone()[0]
print(f"有効な残高is_deleted=false, is_latest=true: {valid_balance:>15,.0f}")
# 比对
print("\n" + "=" * 160)
print("【理想的な月別普通預金期末残高】")
print("=" * 160)
cur.execute("""
SELECT
EXTRACT(YEAR FROM je.entry_date)::INT as year,
EXTRACT(MONTH FROM je.entry_date)::INT as month,
CASE
WHEN EXTRACT(MONTH FROM je.entry_date) >= 6
THEN EXTRACT(YEAR FROM je.entry_date)
ELSE EXTRACT(YEAR FROM je.entry_date) - 1
END as fiscal_year,
COALESCE(SUM(COALESCE(jl.debit, 0) - COALESCE(jl.credit, 0)), 0) as balance
FROM journal_lines jl
INNER JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
WHERE jl.account_id = 2
AND je.is_deleted = false
AND je.is_latest = true
AND EXTRACT(YEAR FROM je.entry_date) = 2025
GROUP BY fiscal_year, year, month
ORDER BY month
""")
results = cur.fetchall()
print()
for year, month, fy, balance in results:
print(f" {year}{month:2}月:{balance:>15,.0f}")
cur.close()
conn.close()