修正
This commit is contained in:
112
split_bonus_from_salary.py
Normal file
112
split_bonus_from_salary.py
Normal file
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
賞与を給料手当から分離する処理:
|
||||
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("完了しました。")
|
||||
Reference in New Issue
Block a user