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

114 lines
4.4 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:
# 获取account_id
cur.execute("SELECT account_id FROM accounts WHERE account_code = '701'")
aid = cur.fetchone()['account_id']
print('\n【 当前的试算表结果 (2025年6月) 】\n')
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"借方 (debit): {row['debit']}")
print(f"贳方 (credit): {row['credit']}")
print('\n【 被包含的交易 (child.journal_entry_id IS NULL) 】\n')
cur.execute("""
SELECT
j.journal_entry_id,
j.entry_date,
j.description,
l.debit,
l.credit,
j.parent_entry_id
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
ORDER BY j.journal_entry_id
""", (aid,))
total_debit = 0
total_credit = 0
print("Entry# | Date | Debit | Credit | Parent | Description")
print("-" * 90)
for row in cur.fetchall():
parent_str = f"#{row['parent_entry_id']}" if row['parent_entry_id'] else "None"
print(f"#{row['journal_entry_id']:<5} | {row['entry_date']} | {row['debit'] or 0:>10} | {row['credit'] or 0:>10} | {parent_str:<6} | {row['description'][:40]}")
total_debit += row['debit'] or 0
total_credit += row['credit'] or 0
print("-" * 90)
print(f"小计: {total_debit:>10} | {total_credit:>10}")
print('\n【 验证对冲 】\n')
print('关于1,400,000的对冲:')
# 查询涉及1.4M的被包含的交易
cur.execute("""
SELECT
j.journal_entry_id,
j.description,
l.debit,
l.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
AND (l.debit = 1400000 OR l.credit = 1400000)
ORDER BY j.journal_entry_id
""", (aid,))
hedge_entries = cur.fetchall()
if hedge_entries:
print(f"找到{len(hedge_entries)}笔1,400,000的交易:")
for row in hedge_entries:
debit_str = f"{row['debit']}" if row['debit'] else f"{row['credit']}"
print(f" Entry#{row['journal_entry_id']}: {debit_str} | {row['description'][:50]}")
debit_140 = sum(row['debit'] or 0 for row in hedge_entries)
credit_140 = sum(row['credit'] or 0 for row in hedge_entries)
print(f"\n 小计: 借{debit_140}, 贳{credit_140}")
if debit_140 == credit_140 and debit_140 == 1400000:
print(' ✓ 这1,400,000的借贳完美对冲了')
else:
print(' ⚠️ 没有完美对冲')
else:
print('没有找到1,400,000的交易')