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

140 lines
5.3 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 psycopg
from datetime import datetime
# 連接到数据库
conn = psycopg.connect(
host="127.0.0.1",
port=5432,
dbname="njts_accounting",
user="postgres",
password="postgres"
)
try:
with conn:
with conn.cursor(row_factory=psycopg.rows.dict_row) as cur:
print("=" * 80)
print("【デバッグ: ID=431と432のis_latest値の確認】")
print("=" * 80)
# Check if is_latest column exists
cur.execute("""
SELECT COUNT(*) as cnt
FROM information_schema.columns
WHERE table_name = 'journal_entries' AND column_name = 'is_latest'
""")
col_exists = cur.fetchone()['cnt'] > 0
print(f"is_latest列が存在: {col_exists}")
print()
# Check the test entries
cur.execute("""
SELECT
journal_entry_id,
description,
is_latest,
is_deleted,
parent_entry_id,
original_entry_id
FROM journal_entries
WHERE journal_entry_id IN (431, 432)
ORDER BY journal_entry_id
""")
entries = cur.fetchall()
for e in entries:
print(f"ID={e['journal_entry_id']}: {e['description']}")
print(f" is_latest={e['is_latest']}, is_deleted={e['is_deleted']}")
print(f" parent_entry_id={e['parent_entry_id']}, original_entry_id={e['original_entry_id']}")
print()
print("=" * 80)
print("【デバッグ: 修正後のサービスロジックで701科目をクエリ】")
print("=" * 80)
# Get account id for 701
cur.execute("SELECT account_id FROM accounts WHERE account_code = '701'")
acc_result = cur.fetchone()
if acc_result:
account_id = acc_result['account_id']
# Execute the same query as the service with is_latest = true
cur.execute("""
SELECT
COALESCE(SUM(l.debit), 0) AS debit,
COALESCE(SUM(l.credit), 0) AS credit
FROM journal_lines l
JOIN journal_entries j
ON j.journal_entry_id = l.journal_entry_id
WHERE l.account_id = %s
AND j.entry_date BETWEEN '2025-01-01' AND '2025-12-31'
AND j.is_deleted = false
AND j.is_latest = true
""", (account_id,))
result = cur.fetchone()
print(f"701科目の試算表is_latest=true:")
print(f" 借方: {result['debit']}")
print(f" 貸方: {result['credit']}")
print()
print("=" * 80)
print("【デバッグ: 701科目のすべての仕訳行を確認】")
print("=" * 80)
cur.execute("""
SELECT
j.journal_entry_id,
j.description,
j.is_latest,
j.is_deleted,
l.debit,
l.credit
FROM journal_lines l
JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id
JOIN accounts a ON a.account_id = l.account_id
WHERE a.account_code = '701'
AND j.is_deleted = false
ORDER BY j.journal_entry_id
""")
lines = cur.fetchall()
print(f"合計: {len(lines)}")
print()
total_debit = 0
total_credit = 0
for line in lines:
status = "" if line['is_latest'] else ""
print(f"{status} ID={line['journal_entry_id']:4d}: {line['description']:30s} | 借={line['debit']:10.0f} 貸={line['credit']:10.0f} | is_latest={line['is_latest']}")
total_debit += line['debit']
total_credit += line['credit']
print()
print(f"【全行合計】借={total_debit:.0f}, 貸={total_credit:.0f}")
print()
# Count by is_latest
cur.execute("""
SELECT
j.is_latest,
COUNT(*) as count,
COALESCE(SUM(l.debit), 0) as total_debit,
COALESCE(SUM(l.credit), 0) as total_credit
FROM journal_lines l
JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id
JOIN accounts a ON a.account_id = l.account_id
WHERE a.account_code = '701'
AND j.is_deleted = false
GROUP BY j.is_latest
ORDER BY j.is_latest DESC
""")
stats = cur.fetchall()
print("【is_latestごとの集計】")
for stat in stats:
status = "最新" if stat['is_latest'] else "旧版"
print(f"{status}: {stat['count']}行 | 借={stat['total_debit']:.0f} 貸={stat['total_credit']:.0f}")
finally:
conn.close()