Files
njts-accounting-core/find_170660_issue.py
2026-02-20 15:47:27 +09:00

92 lines
3.2 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()
# 获取account 102的ID
cur.execute("SELECT account_id FROM accounts WHERE account_code = '102'")
account_id = cur.fetchone()[0]
# 查询普通預金 2025年8月的数据
cur.execute("""
SELECT
je.journal_entry_id,
je.entry_date,
je.description,
je.revision_count,
je.is_latest,
je.is_deleted,
SUM(CASE WHEN jl.account_id = %s THEN jl.debit ELSE 0 END) as debit,
SUM(CASE WHEN jl.account_id = %s THEN jl.credit ELSE 0 END) as credit
FROM journal_entries je
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
WHERE je.entry_date >= '2025-08-01'
AND je.entry_date < '2025-09-01'
GROUP BY je.journal_entry_id, je.entry_date, je.description, je.revision_count, je.is_latest, je.is_deleted
ORDER BY je.entry_date DESC, je.journal_entry_id DESC
""", (account_id, account_id))
results = cur.fetchall()
print("=" * 120)
print("普通預金 2025年8月 明細分析")
print("=" * 120)
# 分类统计
total_debit = 0
total_credit = 0
not_deleted_debit = 0
not_deleted_credit = 0
not_deleted_latest_debit = 0
not_deleted_latest_credit = 0
if results:
for entry_id, entry_date, description, rev_count, is_latest, is_deleted, debit, credit in results:
debit = debit or 0
credit = credit or 0
if debit > 0 or credit > 0:
total_debit += debit
total_credit += credit
deleted_mark = "【削除】" if is_deleted else " "
latest_mark = "" if is_latest else ""
print(f"{entry_date} {deleted_mark} [{latest_mark}v{rev_count}] ID={entry_id:3d} | 借={debit:>14,.0f} 貸={credit:>14,.0f} | {description[:40]}")
if not is_deleted:
not_deleted_debit += debit
not_deleted_credit += credit
if is_latest:
not_deleted_latest_debit += debit
not_deleted_latest_credit += credit
print("\n" + "=" * 120)
print("統計")
print("=" * 120)
print(f"全体合計(すべて): 借={total_debit:>15,.0f} 貸={total_credit:>15,.0f}")
print(f"【削除】以外: 借={not_deleted_debit:>15,.0f} 貸={not_deleted_credit:>15,.0f}")
print(f"【削除】以外で最新: 借={not_deleted_latest_debit:>15,.0f} 貸={not_deleted_latest_credit:>15,.0f}")
# 試算表で使う条件is_deleted=false AND is_latest=true
print(f"\n✓ 試算表に計上されるべき条件 (is_deleted=false AND is_latest=true):")
print(f" 借={not_deleted_latest_debit:>15,.0f} 貸={not_deleted_latest_credit:>15,.0f}")
# チェック:削除されたが最新になっているものを検出
print("\n⚠️ 問題検出: 削除されているのに is_latest=true のもの")
for entry_id, entry_date, description, rev_count, is_latest, is_deleted, debit, credit in results:
debit = debit or 0
credit = credit or 0
if is_deleted and is_latest and (debit > 0 or credit > 0):
print(f" ID={entry_id}: {description} | 借={debit:>14,.0f} 貸={credit:>14,.0f}")
cur.close()
conn.close()