修正
This commit is contained in:
150
diagnose_pattern.py
Normal file
150
diagnose_pattern.py
Normal file
@@ -0,0 +1,150 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend'))
|
||||
|
||||
os.environ.setdefault("DB_HOST", "localhost")
|
||||
os.environ.setdefault("DB_PORT", "5432")
|
||||
os.environ.setdefault("DB_NAME", "accounting_db")
|
||||
os.environ.setdefault("DB_USER", "postgres")
|
||||
os.environ.setdefault("DB_PASSWORD", "root")
|
||||
|
||||
from app.core.database import get_connection
|
||||
from decimal import Decimal
|
||||
|
||||
def diagnose():
|
||||
"""診断スクリプト"""
|
||||
|
||||
with get_connection() as conn:
|
||||
with conn.cursor() as cur:
|
||||
print("=" * 100)
|
||||
print("診断: 2025年6月の701の1,400,000円を探す")
|
||||
print("=" * 100)
|
||||
|
||||
# 全交易を見る
|
||||
print("\n【 全トランザクション 】")
|
||||
sql = """
|
||||
SELECT
|
||||
e.journal_entry_id,
|
||||
e.entry_date,
|
||||
e.description,
|
||||
l.credit,
|
||||
e.is_deleted,
|
||||
e.parent_entry_id
|
||||
FROM journal_lines l
|
||||
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
|
||||
WHERE l.account_id = 701
|
||||
AND e.entry_date >= '2025-06-01'
|
||||
AND e.entry_date <= '2025-06-30'
|
||||
AND l.credit > 0
|
||||
ORDER BY e.entry_date, e.journal_entry_id
|
||||
"""
|
||||
|
||||
cur.execute(sql)
|
||||
rows = cur.fetchall()
|
||||
|
||||
total_credit = Decimal(0)
|
||||
for row in rows:
|
||||
print(f"ID:{row['journal_entry_id']:5d} | {row['entry_date']} | {row['description'][:40]:40s} | " +
|
||||
f"credit:{row['credit']:>12,.0f} | deleted:{row['is_deleted']} | parent:{row['parent_entry_id']}")
|
||||
total_credit += row['credit']
|
||||
|
||||
print(f"\n全合計: {total_credit:,.0f}")
|
||||
|
||||
# [逆仕訳]パターンをテスト
|
||||
print("\n【 逆仕訳の検出複数パターンテスト 】")
|
||||
|
||||
patterns = [
|
||||
("%[逆仕訳]%", "LIKE '%[逆仕訳]%'"),
|
||||
("[逆仕訳]%", "LIKE '[逆仕訳]%'"),
|
||||
("\\[逆仕訳\\]%", "SIMILAR TO '\\[逆仕訳\\]%'"),
|
||||
]
|
||||
|
||||
for pattern, desc in patterns:
|
||||
if "SIMILAR" in desc:
|
||||
sql = f"""
|
||||
SELECT COUNT(*) as cnt, COALESCE(SUM(l.credit), 0) as credit
|
||||
FROM journal_lines l
|
||||
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
|
||||
WHERE l.account_id = 701
|
||||
AND e.entry_date >= '2025-06-01'
|
||||
AND e.entry_date <= '2025-06-30'
|
||||
AND e.description SIMILAR TO %s
|
||||
"""
|
||||
else:
|
||||
sql = f"""
|
||||
SELECT COUNT(*) as cnt, COALESCE(SUM(l.credit), 0) as credit
|
||||
FROM journal_lines l
|
||||
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
|
||||
WHERE l.account_id = 701
|
||||
AND e.entry_date >= '2025-06-01'
|
||||
AND e.entry_date <= '2025-06-30'
|
||||
AND e.description LIKE %s
|
||||
"""
|
||||
|
||||
cur.execute(sql, (pattern,))
|
||||
result = cur.fetchone()
|
||||
print(f"{desc:35s} -> cnt:{result['cnt']:2d}, credit:{result['credit']:>12,.0f}")
|
||||
|
||||
# 1,400,000の交易を特定
|
||||
print("\n【 1,400,000円を探す 】")
|
||||
sql = """
|
||||
SELECT
|
||||
e.journal_entry_id,
|
||||
e.entry_date,
|
||||
e.description,
|
||||
COALESCE(SUM(l.credit), 0) as total_credit,
|
||||
e.is_deleted,
|
||||
e.parent_entry_id,
|
||||
e.description LIKE '%[逆仕訳]%' as like_pattern,
|
||||
e.description SIMILAR TO '%逆仕%' as contains_gyo,
|
||||
e.description SIMILAR TO '\\[逆仕訳\\]%' as similar_pattern
|
||||
FROM journal_lines l
|
||||
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
|
||||
WHERE l.account_id = 701
|
||||
AND e.entry_date >= '2025-06-01'
|
||||
AND e.entry_date <= '2025-06-30'
|
||||
GROUP BY e.journal_entry_id, e.entry_date, e.description, e.is_deleted, e.parent_entry_id
|
||||
HAVING COALESCE(SUM(l.credit), 0) = 1400000
|
||||
"""
|
||||
|
||||
cur.execute(sql)
|
||||
result = cur.fetchone()
|
||||
|
||||
if result:
|
||||
print(f"見つかりました!")
|
||||
print(f" ID: {result['journal_entry_id']}")
|
||||
print(f" 日付: {result['entry_date']}")
|
||||
print(f" 説明: {result['description']}")
|
||||
print(f" クレジット: {result['total_credit']:,}")
|
||||
print(f" 削除済み: {result['is_deleted']}")
|
||||
print(f" 親ID: {result['parent_entry_id']}")
|
||||
print(f" LIKE結果: {result['like_pattern']}")
|
||||
print(f" SIMILAR含む逆仕: {result['contains_gyo']}")
|
||||
print(f" SIMILAR正規表現: {result['similar_pattern']}")
|
||||
else:
|
||||
print("1,400,000円のクレジット交易は見つかりません")
|
||||
|
||||
# 他の額を見る
|
||||
print("\n【 クレジット額の分布 】")
|
||||
sql = """
|
||||
SELECT COALESCE(SUM(l.credit), 0) as total_credit, COUNT(*) as cnt
|
||||
FROM journal_lines l
|
||||
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
|
||||
WHERE l.account_id = 701
|
||||
AND e.entry_date >= '2025-06-01'
|
||||
AND e.entry_date <= '2025-06-30'
|
||||
GROUP BY e.journal_entry_id
|
||||
ORDER BY total_credit DESC
|
||||
LIMIT 10
|
||||
"""
|
||||
|
||||
cur.execute(sql)
|
||||
for row in cur.fetchall():
|
||||
print(f" {row['total_credit']:>12,.0f}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
diagnose()
|
||||
Reference in New Issue
Block a user