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

178 lines
7.1 KiB
Python
Raw Permalink 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
# 添加backend目录到路径
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 check_account_701_detailed():
"""详细检查701账户2025年6月的所有交易"""
with get_connection() as conn:
with conn.cursor() as cur:
print("=" * 100)
print("921年6月 账户701(売上高) 详细数据分析")
print("=" * 100)
# 查询所有相关交易
sql = """
SELECT
e.journal_entry_id,
e.entry_date,
e.description,
l.account_id,
a.account_name,
COALESCE(l.debit, 0) as debit,
COALESCE(l.credit, 0) as credit,
e.is_deleted,
e.parent_entry_id,
e.version
FROM journal_lines l
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
JOIN accounts a ON a.account_id = l.account_id
WHERE a.account_id = 701
AND e.entry_date >= '2025-06-01'
AND e.entry_date <= '2025-06-30'
ORDER BY e.entry_date, e.journal_entry_id
"""
cur.execute(sql)
all_rows = cur.fetchall()
# 分析数据
total_all_debit = Decimal(0)
total_all_credit = Decimal(0)
total_valid_debit = Decimal(0)
total_valid_credit = Decimal(0)
print("\n【 全部交易 】")
for row in all_rows:
total_all_debit += row['debit']
total_all_credit += row['credit']
status_flags = []
if row['is_deleted']:
status_flags.append("已删除")
if '[逆仕訳]' in row['description']:
status_flags.append("逆仕訳")
if row['parent_entry_id'] is not None:
status_flags.append(f"修正版(原ID:{row['parent_entry_id']})")
status = " | ".join(status_flags) if status_flags else "✓ 有效"
print(f"ID:{row['journal_entry_id']:5d} | {row['entry_date']} | {row['description']:40s} | " +
f"借:{row['debit']:12} | 贷:{row['credit']:12} | {status}")
print(f"\n全部交易总计 - 借方: {total_all_debit:,} | 贷方: {total_all_credit:,}")
# 查询实际被排除的交易
print("\n【 需要排除的交易 】")
# 1. 查询被修正的交易
sql_corrected = """
SELECT DISTINCT parent_entry_id
FROM journal_entries
WHERE parent_entry_id IS NOT NULL
AND parent_entry_id IN (
SELECT journal_entry_id
FROM journal_entries
WHERE entry_date >= '2025-06-01'
AND entry_date <= '2025-06-30'
)
"""
cur.execute(sql_corrected)
corrected_ids = [row['parent_entry_id'] for row in cur.fetchall()]
if corrected_ids:
print(f"已被修正的交易ID: {corrected_ids}")
sql_corrected_data = """
SELECT
journal_entry_id,
entry_date,
description,
COALESCE(SUM(l.debit), 0) as total_debit,
COALESCE(SUM(l.credit), 0) as total_credit
FROM journal_lines l
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
WHERE e.journal_entry_id IN ({})
AND l.account_id = 701
GROUP BY e.journal_entry_id, e.entry_date, e.description
""".format(','.join(str(id) for id in corrected_ids))
cur.execute(sql_corrected_data)
corrected_rows = cur.fetchall()
for row in corrected_rows:
print(f" ID:{row['journal_entry_id']} | {row['entry_date']} | {row['description']} | " +
f"借:{row['total_debit']:,} | 贷:{row['total_credit']:,}")
total_valid_credit -= row['total_credit'] # 这些应该被排除
# 2. 查询逆仕訳标记的交易
sql_reversed = """
SELECT
journal_entry_id,
entry_date,
description,
COALESCE(SUM(l.debit), 0) as total_debit,
COALESCE(SUM(l.credit), 0) as total_credit
FROM journal_lines l
JOIN journal_entries e ON e.journal_entry_id = l.journal_entry_id
WHERE e.description LIKE '%[逆仕訳]%'
AND e.entry_date >= '2025-06-01'
AND e.entry_date <= '2025-06-30'
AND l.account_id = 701
GROUP BY e.journal_entry_id, e.entry_date, e.description
"""
cur.execute(sql_reversed)
reversed_rows = cur.fetchall()
if reversed_rows:
print("\n标记为逆仕訳的交易:")
for row in reversed_rows:
print(f" ID:{row['journal_entry_id']} | {row['entry_date']} | {row['description']} | " +
f"借:{row['total_debit']:,} | 贷:{row['total_credit']:,}")
total_valid_credit -= row['total_credit']
# 计算有效总计
for row in all_rows:
# 排除已删除
if row['is_deleted']:
continue
# 排除逆仕訳
if '[逆仕訳]' in row['description']:
continue
# 排除被修正的交易
if row['parent_entry_id'] is not None:
continue
# 排除作为修正元的交易
if row['journal_entry_id'] in corrected_ids:
continue
total_valid_debit += row['debit']
total_valid_credit += row['credit']
print(f"\n【 有效交易总计 】")
print(f"借方: {total_valid_debit:,}")
print(f"贷方: {total_valid_credit:,}")
print(f"\n差异检查:")
print(f"全部贷方: {total_all_credit:,}")
print(f"有效贷方: {total_valid_credit:,}")
print(f"需排除金额: {total_all_credit - total_valid_credit:,}")
if total_all_credit - total_valid_credit == 1400000:
print("✓ 找到问题差异正好是1,400,000")
if __name__ == "__main__":
check_account_701_detailed()