Files
njts-accounting-core/check_db_records.py
2026-03-03 00:01:43 +09:00

86 lines
3.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 sys
sys.path.insert(0, '/app')
from app.core.database import get_connection
from_date = "2025-06-01"
to_date = "2025-06-30"
account_id = 501
print("=" * 80)
print("【検索条件】")
print(f" 期間: {from_date} {to_date}")
print(f" 科目: {account_id} (費用金)")
print("=" * 80)
with get_connection() as conn:
with conn.cursor() as cur:
# ステップ 1: journal_lines に account_id 501 のレコードがあるか
print("\n【ステップ 0】account_id 501 を持つ journal_lines")
sql0 = "SELECT COUNT(*) as cnt FROM journal_lines WHERE account_id = %s"
cur.execute(sql0, [account_id])
result0 = cur.fetchone()
print(f" 全体件数: {result0['cnt']}")
# ステップ 2: journal_lines に account_id 501 で期間限定のレコードがあるか
print("\n【ステップ 0.5】account_id 501 で期間限定のレコード")
sql0_5 = """
SELECT COUNT(*) as cnt FROM journal_lines jl
WHERE jl.account_id = %s
AND jl.journal_entry_id IN (
SELECT journal_entry_id FROM journal_entries
WHERE entry_date >= %s AND entry_date <= %s
)
"""
cur.execute(sql0_5, [account_id, from_date, to_date])
result0_5 = cur.fetchone()
print(f" 期間内件数: {result0_5['cnt']}")
# ステップ 3: その journal_entry_id のリスト
print("\n【ステップ 1】該当する journal_entry_id のリスト")
sql1 = """
SELECT DISTINCT journal_entry_id
FROM journal_lines
WHERE account_id = %s
AND journal_entry_id IN (
SELECT journal_entry_id FROM journal_entries
WHERE entry_date >= %s AND entry_date <= %s
)
"""
cur.execute(sql1, [account_id, from_date, to_date])
entry_ids = [row['journal_entry_id'] for row in cur.fetchall()]
print(f" 該当 journal_entry_id: {entry_ids}")
if entry_ids:
print("\n【ステップ 2】これらの仕訳の詳細")
placeholders = ','.join(['%s'] * len(entry_ids))
sql2 = f"""
SELECT
journal_entry_id, entry_date, description, revision_count, is_latest
FROM journal_entries
WHERE journal_entry_id IN ({placeholders})
"""
cur.execute(sql2, entry_ids)
for row in cur.fetchall():
print(f" • ID {row['journal_entry_id']}: {row['entry_date']} - {row['description']} (v{row['revision_count']}, latest={row['is_latest']})")
# オリジナルのクエリ
print("\n【ステップ 3】修正履歴を含まないis_latest = true")
sql3 = """
SELECT COUNT(*) as cnt FROM journal_entries je
WHERE je.is_deleted = false
AND je.is_latest = true
AND je.entry_date >= %s
AND je.entry_date <= %s
AND je.journal_entry_id IN (
SELECT DISTINCT journal_entry_id
FROM journal_lines
WHERE account_id = %s
)
"""
cur.execute(sql3, [from_date, to_date, account_id])
result3 = cur.fetchone()
print(f" 件数: {result3['cnt']}")
print("\n" + "=" * 80)