修正
This commit is contained in:
125
check_deleted_entries.py
Normal file
125
check_deleted_entries.py
Normal file
@@ -0,0 +1,125 @@
|
||||
import psycopg2
|
||||
|
||||
conn = psycopg2.connect(
|
||||
host="192.168.0.61",
|
||||
port=55432,
|
||||
database="njts_acct",
|
||||
user="njts_app",
|
||||
password="njts_app2025"
|
||||
)
|
||||
|
||||
cur = conn.cursor()
|
||||
|
||||
print("=" * 160)
|
||||
print("【要确认的关键仕訳】")
|
||||
print("=" * 160)
|
||||
|
||||
# 查询ID 444和445的current状态
|
||||
for entry_id in [444, 445]:
|
||||
print(f"\n--- ID={entry_id} ---")
|
||||
|
||||
cur.execute("""
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
je.entry_date,
|
||||
je.description,
|
||||
je.is_latest,
|
||||
je.is_deleted,
|
||||
COALESCE(SUM(jl.debit), 0) as debit,
|
||||
COALESCE(SUM(jl.credit), 0) as credit
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.journal_entry_id = %s
|
||||
GROUP BY je.journal_entry_id, je.entry_date, je.description, je.is_latest, je.is_deleted
|
||||
""", (entry_id,))
|
||||
|
||||
result = cur.fetchone()
|
||||
if result:
|
||||
je_id, date, desc, is_latest, is_deleted, debit, credit = result
|
||||
print(f"日付: {date}")
|
||||
print(f"摘要: {desc}")
|
||||
print(f"is_latest: {is_latest}, is_deleted: {is_deleted}")
|
||||
print(f"仕訳: 借={debit:>12,.0f} 貸={credit:>12,.0f}")
|
||||
else:
|
||||
print("存在しません")
|
||||
|
||||
# 查询所有is_deleted=true但金额较大的仕订
|
||||
print("\n" + "=" * 160)
|
||||
print("【削除済みの大きい仕訳(is_deleted=true)】")
|
||||
print("=" * 160)
|
||||
|
||||
cur.execute("""
|
||||
WITH deleted_with_impact AS (
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
je.entry_date,
|
||||
je.description,
|
||||
je.is_latest,
|
||||
COALESCE(SUM(jl.debit), 0) as total_debit,
|
||||
COALESCE(SUM(jl.credit), 0) as total_credit,
|
||||
COALESCE(SUM(CASE WHEN jl.account_id = 2 THEN jl.debit - jl.credit ELSE 0 END), 0) as bank_impact
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.is_deleted = true
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
GROUP BY je.journal_entry_id, je.entry_date, je.description, je.is_latest
|
||||
)
|
||||
SELECT *
|
||||
FROM deleted_with_impact
|
||||
WHERE ABS(total_debit - total_credit) > 100000
|
||||
ORDER BY ABS(bank_impact) DESC
|
||||
LIMIT 20
|
||||
""")
|
||||
|
||||
deleted_entries = cur.fetchall()
|
||||
print(f"\n金額100万以上が削除(最大20件):\n")
|
||||
|
||||
for je_id, date, desc, is_latest, debit, credit, bank_impact in deleted_entries:
|
||||
print(f"ID={je_id:3d} | {date} | 借={debit:>12,.0f} 貸={credit:>12,.0f} | 普通預金への影响={bank_impact:>12,.0f}円")
|
||||
print(f" └─ {desc[:80]}")
|
||||
|
||||
print("\n" + "=" * 160)
|
||||
print("【復旧すべき削除仕訳の推奨】")
|
||||
print("=" * 160)
|
||||
|
||||
# 計算期待値とのギャップ
|
||||
target_balance = 14_916_322
|
||||
current_balance = 11_685_193
|
||||
gap = target_balance - current_balance
|
||||
|
||||
print(f"\n期望値: {target_balance:>15,.0f}円")
|
||||
print(f"現在値: {current_balance:>15,.0f}円")
|
||||
print(f"ギャップ: {gap:>15,.0f}円")
|
||||
|
||||
if gap > 0:
|
||||
print(f"\n→ {gap:,}円分の入金(または出金削減)が必要")
|
||||
|
||||
# 找出删除的仕訳中,哪些恢复后能接近目标
|
||||
cur.execute("""
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
je.entry_date,
|
||||
je.description,
|
||||
COALESCE(SUM(CASE WHEN jl.account_id = 2 THEN jl.debit - jl.credit ELSE 0 END), 0) as bank_impact
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.is_deleted = true
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
AND je.is_latest = true
|
||||
GROUP BY je.journal_entry_id, je.entry_date, je.description
|
||||
ORDER BY bank_impact DESC
|
||||
""")
|
||||
|
||||
restored_balance = current_balance
|
||||
print(f"\n削除済みの仕訳を復旧した場合のシミュレーション:\n")
|
||||
|
||||
for je_id, date, desc, impact in cur.fetchall():
|
||||
if impact != 0:
|
||||
restored_balance += impact
|
||||
print(f"ID={je_id:3d}: {date} | impact={impact:>12,.0f} → balance={restored_balance:>12,.0f}")
|
||||
|
||||
if abs(restored_balance - target_balance) < abs(current_balance - target_balance):
|
||||
print(f" ✓ これを復旧すると目標値に近くなります")
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user