修正
This commit is contained in:
108
verify_bank_balance.py
Normal file
108
verify_bank_balance.py
Normal file
@@ -0,0 +1,108 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user