This commit is contained in:
admin
2026-02-21 10:51:25 +09:00
parent 584530937b
commit 3b028b8fc0
25 changed files with 1852 additions and 244 deletions

125
check_deleted_entries.py Normal file
View 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()