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

99 lines
4.0 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.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
sys.path.insert(0, 'backend')
os.environ['DB_HOST'] = '192.168.0.61'
os.environ['DB_NAME'] = 'njts_acct'
os.environ['DB_USER'] = 'njts_app'
os.environ['DB_PASSWORD'] = 'njts_app2025'
os.environ['DB_PORT'] = '55432'
from app.core.database import get_connection
with get_connection() as conn:
with conn.cursor() as cur:
print('\n【 執行選項A完全對冲 】\n')
print('操作1: 刪除Entry#371已完成')
print('操作2: 刪除Entry#373進行中...\n')
# 標記Entry#373為已刪除
print('執行: UPDATE journal_entries SET is_deleted=true WHERE journal_entry_id=373')
cur.execute('UPDATE journal_entries SET is_deleted=true WHERE journal_entry_id = 373')
conn.commit()
print('✓ Entry#373 已標記為已刪除\n')
# 驗證修正鏈條都被正確過濾
print('【 驗證修正鏈條 】\n')
cur.execute("""
SELECT
j.journal_entry_id,
j.description,
l.debit,
l.credit,
j.parent_entry_id,
j.is_deleted,
(SELECT COUNT(*) FROM journal_entries child WHERE child.parent_entry_id = j.journal_entry_id) as has_child
FROM journal_entries j
LEFT JOIN journal_lines l ON l.journal_entry_id = j.journal_entry_id AND l.account_id = (
SELECT account_id FROM accounts WHERE account_code = '701'
)
WHERE j.journal_entry_id IN (357, 360, 372, 373)
ORDER BY j.journal_entry_id
""")
print("Entry# | Delete | Parent | 借方 | 貳方 | 狀態")
print("-" * 70)
for row in cur.fetchall():
delete_str = "" if row['is_deleted'] else ""
parent_str = f"#{row['parent_entry_id']}" if row['parent_entry_id'] else "None"
debit = row['debit'] or 0
credit = row['credit'] or 0
# 確定是否被過濾
if row['is_deleted']:
status = "❌ 已刪除"
elif row['has_child'] > 0:
status = "❌ 有子(被過濾)"
else:
status = "✓ 被計入"
print(f"#{row['journal_entry_id']:<6} | {delete_str:<6} | {parent_str:<6} | {debit:>10} | {credit:>10} | {status}")
print('\n【 最終驗證:試算表結果 】\n')
cur.execute("SELECT account_id FROM accounts WHERE account_code = '701'")
aid = cur.fetchone()['account_id']
cur.execute("""
SELECT
COALESCE(SUM(l.debit), 0) AS debit,
COALESCE(SUM(l.credit), 0) AS credit
FROM journal_lines l
JOIN journal_entries j
ON j.journal_entry_id = l.journal_entry_id
LEFT JOIN journal_entries child
ON child.parent_entry_id = j.journal_entry_id
WHERE l.account_id = %s
AND j.entry_date BETWEEN '2025-06-01' AND '2025-06-30'
AND j.is_deleted = false
AND child.journal_entry_id IS NULL
""", (aid,))
row = cur.fetchone()
print(f'2025年6月 - 科目701売上高最終結果:')
print(f' 借方 (debit): {row["debit"]:>10}')
print(f' 貳方 (credit): {row["credit"]:>10}')
print(f' 淨值 (credit - debit): {row["credit"] - row["debit"]:>10}')
if row['debit'] == 0 and row['credit'] == 4082728:
print('\n✓✓✓ 完美!對冲成功!')
print(' - 1,400,000的借貳對冲已完全移除試算表')
print(' - 貳方金額為淨值: 4,082,728')
elif row['credit'] == 4082728:
print(f'\n✓ 貳方正確,但借方仍有:{row["debit"]}')
else:
print(f'\n⚠️ 可能還有其他問題,當前值: 借{row["debit"]}, 貳{row["credit"]}')