113 lines
3.7 KiB
Python
113 lines
3.7 KiB
Python
"""
|
||
賞与を給料手当から分離する処理:
|
||
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("完了しました。")
|