Files
njts-accounting-core/split_bonus_from_salary.py
2026-05-14 22:02:06 +09:00

113 lines
3.7 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.
"""
賞与を給料手当から分離する処理:
1. 賞与の勘定科目 (821) を追加
2. JE:833 の給料手当行 (4,720,000) を
給料手当 420,000 賞与 4,300,000 に分離
"""
import psycopg2
conn = psycopg2.connect(
host='192.168.0.61', port=55432,
dbname='njts_acct', user='njts_app', password='njts_app2025'
)
cur = conn.cursor()
print("=== 変更前の確認 ===")
cur.execute("""
SELECT jl.journal_line_id, a.account_code, a.account_name, jl.debit, jl.credit, jl.line_description
FROM journal_lines jl
JOIN accounts a ON jl.account_id = a.account_id
WHERE jl.journal_entry_id = 833
ORDER BY jl.journal_line_id
""")
rows = cur.fetchall()
for r in rows:
print(f" line_id:{r[0]} {r[1]} {r[2]:<15} 借:{r[3] or 0:>12,.0f} 貸:{r[4] or 0:>12,.0f} {r[5] or ''}")
print()
# Step 1: 賞与 (821) の科目を追加(存在しない場合のみ)
cur.execute("SELECT account_id FROM accounts WHERE account_code = '821'")
existing = cur.fetchone()
if existing:
print(f"科目 821 は既に存在します (ID:{existing[0]})")
bonus_account_id = existing[0]
else:
cur.execute("""
INSERT INTO accounts (account_code, account_name, account_type)
VALUES ('821', '賞与', 'expense')
RETURNING account_id
""")
bonus_account_id = cur.fetchone()[0]
print(f"科目 821 賞与 を追加しました (ID:{bonus_account_id})")
# Step 2: 給料手当行 (line_id:2162) の金額を 4,720,000→420,000 に変更
cur.execute("""
UPDATE journal_lines
SET debit = 420000,
line_description = NULL
WHERE journal_line_id = 2162
""")
print(f"給料手当行 (line_id:2162) を 4,720,000→420,000 に更新")
# Step 3: 賞与の新しい明細行を追加
cur.execute("""
INSERT INTO journal_lines (journal_entry_id, account_id, debit, credit, line_description)
VALUES (833, %s, 4300000, 0, '賞与')
RETURNING journal_line_id
""", (bonus_account_id,))
new_line_id = cur.fetchone()[0]
print(f"賞与行 (line_id:{new_line_id}) を追加: 4,300,000 円")
# Step 4: 仕訳の摘要も更新
cur.execute("""
UPDATE journal_entries
SET description = '張翔鶴 10月給料・賞与'
WHERE journal_entry_id = 833
""")
print("仕訳摘要を更新: '張翔鶴 10月給料 + ボーナス''張翔鶴 10月給料・賞与'")
conn.commit()
print()
print("=== 変更後の確認 ===")
cur.execute("""
SELECT jl.journal_line_id, a.account_code, a.account_name, jl.debit, jl.credit, jl.line_description
FROM journal_lines jl
JOIN accounts a ON jl.account_id = a.account_id
WHERE jl.journal_entry_id = 833
ORDER BY jl.journal_line_id
""")
rows = cur.fetchall()
debit_total = 0
credit_total = 0
for r in rows:
d = r[3] or 0
c = r[4] or 0
debit_total += d
credit_total += c
print(f" line_id:{r[0]} {r[1]} {r[2]:<15} 借:{d:>12,.0f} 貸:{c:>12,.0f} {r[5] or ''}")
print(f" {'合計':<30} 借:{debit_total:>12,.0f} 貸:{credit_total:>12,.0f}")
print(f" 貸借バランス: {'✓ OK' if debit_total == credit_total else '✗ NG'}")
print()
print("=== 期間合計(給料手当・賞与)===")
cur.execute("""
SELECT a.account_code, a.account_name, SUM(jl.debit) AS total
FROM journal_lines jl
JOIN accounts a ON jl.account_id = a.account_id
JOIN journal_entries je ON jl.journal_entry_id = je.journal_entry_id
WHERE je.is_latest = true AND je.is_deleted = false
AND je.entry_date >= '2025-06-01' AND je.entry_date <= '2025-12-31'
AND a.account_code IN ('812', '813', '821')
GROUP BY a.account_code, a.account_name
ORDER BY a.account_code
""")
rows = cur.fetchall()
for r in rows:
print(f" {r[0]} {r[1]:<12}: {r[2] or 0:>12,.0f}")
conn.close()
print()
print("完了しました。")