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

124 lines
4.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
import json
from psycopg.rows import dict_row
# 連接到数据库
conn = psycopg.connect(
host="127.0.0.1",
port=5432,
dbname="njts_accounting",
user="postgres",
password="postgres"
)
with conn:
with conn.cursor(row_factory=dict_row) as cur:
print("=" * 80)
print("【検証1】is_latestフィールドが存在するかどうか")
print("=" * 80)
cur.execute("""
SELECT COUNT(*) as cnt
FROM information_schema.columns
WHERE table_name = 'journal_entries' AND column_name = 'is_latest'
""")
result = cur.fetchone()
has_is_latest = result['cnt'] > 0
print(f"is_latest フィールドが存在: {has_is_latest}")
print()
print("=" * 80)
print("【検証2】test元ID=431, 432のバージョン情報")
print("=" * 80)
cur.execute("""
SELECT
journal_entry_id,
description,
is_latest,
is_deleted,
parent_entry_id,
original_entry_id,
revision_count,
entry_date,
created_at
FROM journal_entries
WHERE description LIKE '%test%'
ORDER BY journal_entry_id
""")
test_entries = cur.fetchall()
for entry in test_entries:
print(f"ID={entry['journal_entry_id']}: {entry['description']}")
print(f" is_latest={entry['is_latest']}, is_deleted={entry['is_deleted']}")
print(f" parent_entry_id={entry['parent_entry_id']}, original_entry_id={entry['original_entry_id']}")
print()
print("=" * 80)
print("【検証3】修正前のロジック親IDで排除の結果")
print("=" * 80)
cur.execute("""
SELECT
a.account_code,
a.account_name,
SUM(l.debit) as debit,
SUM(l.credit) as credit
FROM journal_lines l
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
JOIN accounts a ON a.account_id = l.account_id
WHERE e.is_deleted = false
AND e.journal_entry_id NOT IN (
SELECT parent_entry_id
FROM journal_entries
WHERE parent_entry_id IS NOT NULL
)
AND a.account_code = '701'
GROUP BY a.account_code, a.account_name
""")
old_logic = cur.fetchone()
if old_logic:
print(f"701売上高旧ロジック: 借={old_logic['debit']}, 貸={old_logic['credit']}")
print()
print("=" * 80)
print("【検証4】修正後のロジックis_latest=trueで過濾の結果")
print("=" * 80)
cur.execute("""
SELECT
a.account_code,
a.account_name,
SUM(l.debit) as debit,
SUM(l.credit) as credit
FROM journal_lines l
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
JOIN accounts a ON a.account_id = l.account_id
WHERE e.is_deleted = false
AND e.is_latest = true
AND a.account_code = '701'
GROUP BY a.account_code, a.account_name
""")
new_logic = cur.fetchone()
if new_logic:
print(f"701売上高新ロジック: 借={new_logic['debit']}, 貸={new_logic['credit']}")
print()
print("=" * 80)
print("【検証5】各test要素の詳細")
print("=" * 80)
for entry in test_entries:
eid = entry['journal_entry_id']
print(f"\n ID={eid} ({entry['description']}):")
cur.execute("""
SELECT
a.account_code,
a.account_name,
l.debit,
l.credit
FROM journal_lines l
JOIN accounts a ON a.account_id = l.account_id
WHERE l.journal_entry_id = %s
ORDER BY a.account_code
""", (eid,))
lines = cur.fetchall()
for line in lines:
print(f" {line['account_code']} {line['account_name']}: 借={line['debit']}, 貸={line['credit']}")
conn.close()