修正
This commit is contained in:
112
replacement_analysis.py
Normal file
112
replacement_analysis.py
Normal file
@@ -0,0 +1,112 @@
|
||||
import sys
|
||||
sys.path.insert(0, '/app')
|
||||
|
||||
from app.core.database import get_connection
|
||||
from datetime import datetime
|
||||
|
||||
print("=" * 80)
|
||||
print("【account_id 53(小口現金) → 20(未払金)の置換前分析】")
|
||||
print("=" * 80)
|
||||
|
||||
with get_connection() as conn:
|
||||
with conn.cursor() as cur:
|
||||
# 1. 影響する仕訳の件数
|
||||
print("\n【1】影響する仕訳行の件数")
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) as cnt
|
||||
FROM journal_lines
|
||||
WHERE account_id = 53
|
||||
""")
|
||||
result = cur.fetchone()
|
||||
print(f" • account_id 53 を含む仕訳行: {result['cnt']} 件")
|
||||
|
||||
if result['cnt'] > 0:
|
||||
# 2. 金額の影響
|
||||
print("\n【2】金額の影響")
|
||||
cur.execute("""
|
||||
SELECT
|
||||
SUM(CASE WHEN debit > 0 THEN debit ELSE 0 END) as total_debit,
|
||||
SUM(CASE WHEN credit > 0 THEN credit ELSE 0 END) as total_credit
|
||||
FROM journal_lines
|
||||
WHERE account_id = 53
|
||||
""")
|
||||
result_amount = cur.fetchone()
|
||||
print(f" • 借方合計: {result_amount['total_debit']}")
|
||||
print(f" • 貸方合計: {result_amount['total_credit']}")
|
||||
|
||||
# 3. 影響する仕訳の詳細
|
||||
print("\n【3】影響する仕訳の詳細(最初の 20 件)")
|
||||
cur.execute("""
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
je.entry_date,
|
||||
je.description,
|
||||
a.account_code,
|
||||
a.account_name,
|
||||
jl.debit,
|
||||
jl.credit
|
||||
FROM journal_lines jl
|
||||
JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
|
||||
JOIN accounts a ON jl.account_id = a.account_id
|
||||
WHERE jl.account_id = 53
|
||||
ORDER BY je.entry_date DESC
|
||||
LIMIT 20
|
||||
""")
|
||||
|
||||
for i, row in enumerate(cur.fetchall(), 1):
|
||||
side = '借方' if row['debit'] > 0 else '貸方'
|
||||
amount = row['debit'] if row['debit'] > 0 else row['credit']
|
||||
print(f" {i}. {row['entry_date']} - {row['description'][:40]}...")
|
||||
print(f" {row['account_code']} {row['account_name']}: {side} {amount}")
|
||||
|
||||
# 4. 会計的影響の分析
|
||||
print("\n【4】会計的な影響(警告)⚠️")
|
||||
print(" 【問題1】資産 vs 負債の分類変更")
|
||||
print(" • 小口現金(105)= 流動資産")
|
||||
print(" • 未払金(502)= 流動負債")
|
||||
print(" → 貸借対照表の構成が大きく変わります")
|
||||
|
||||
print("\n 【問題2】簿記ルール違反の可能性")
|
||||
cur.execute("""
|
||||
SELECT
|
||||
COUNT(DISTINCT je.journal_entry_id) as journal_count,
|
||||
MAX(je.entry_date) as latest_date
|
||||
FROM journal_lines jl
|
||||
JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
|
||||
WHERE jl.account_id = 53
|
||||
""")
|
||||
result_check = cur.fetchone()
|
||||
print(f" • 影響する仕訳: {result_check['journal_count']} 件")
|
||||
print(f" • 最新の仕訳: {result_check['latest_date']}")
|
||||
print(" → これらの仕訳の相手科目との整合性が乱れる可能性")
|
||||
|
||||
print("\n 【問題3】監査証跡の喪失")
|
||||
print(" • 元の科目情報が失われます")
|
||||
print(" → 修正履歴は保存されていません(一度背き不可)")
|
||||
|
||||
else:
|
||||
print(" • account_id 53 の仕訳行は存在しません(置換は不要)")
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("【SQL 置換コマンド】")
|
||||
print("=" * 80)
|
||||
|
||||
print("""
|
||||
-- バックアップ推奨:先に元のデータをダンプしてください
|
||||
-- pg_dump accounting_db > backup_before_replacement.sql
|
||||
|
||||
-- 置換実行SQL(自己責任で実行してください)
|
||||
BEGIN; -- トランザクション開始
|
||||
|
||||
UPDATE journal_lines
|
||||
SET account_id = 20
|
||||
WHERE account_id = 53;
|
||||
|
||||
-- 確認用SQL(実行前に確認してください)
|
||||
-- SELECT COUNT(*) FROM journal_lines WHERE account_id = 20;
|
||||
|
||||
COMMIT; -- コミット(このコマンドで確定)
|
||||
-- ROLLBACK; -- ロールバック(中止したい場合)
|
||||
""")
|
||||
|
||||
print("=" * 80)
|
||||
Reference in New Issue
Block a user