Files
njts-accounting-core/backend/test_care_insurance.py
2026-01-21 10:58:19 +09:00

95 lines
3.0 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.
"""介護保険デバッグスクリプト"""
import psycopg
from datetime import date
from decimal import Decimal
# 接続
conn = psycopg.connect('host=192.168.0.61 port=55432 dbname=njts_acct user=njts_app password=njts_app2025')
cur = conn.cursor()
# 従業員情報取得
cur.execute("SELECT employee_id, employee_code, name, birth_date FROM employees WHERE employee_code = '20190001'")
emp = cur.fetchone()
print(f'従業員: ID={emp[0]}, コード={emp[1]}, 名前={emp[2]}, 生年月日={emp[3]}')
# 年齢計算
birth_date = emp[3]
payment_date = date(2025, 12, 25)
age = payment_date.year - birth_date.year
if (payment_date.month, payment_date.day) < (birth_date.month, birth_date.day):
age -= 1
print(f'\n支給日: {payment_date}')
print(f'年齢: {age}')
print(f'介護保険対象: {40 <= age < 65}')
# 2025年介護保険料率取得
print('\n=== 介護保険料率検索 ===')
cur.execute("""
SELECT rate_id, rate_year, rate_type, calculation_target, employee_rate, employer_rate, prefecture
FROM insurance_rates
WHERE rate_type = '介護保険'
AND rate_year = 2025
AND calculation_target = '給与'
ORDER BY rate_id DESC
LIMIT 1
""")
rate = cur.fetchone()
if rate:
print(f'料率ID: {rate[0]}')
print(f'年度: {rate[1]}')
print(f'種類: {rate[2]}')
print(f'計算対象: {rate[3]}')
print(f'従業員負担率: {rate[4]} ({float(rate[4])*100:.3f}%)')
print(f'会社負担率: {rate[5]} ({float(rate[5])*100:.3f}%)')
print(f'都道府県: {rate[6]}')
else:
print('料率が見つかりません!')
# 給与設定取得
print('\n=== 給与設定 ===')
cur.execute("""
SELECT base_salary FROM salary_settings
WHERE employee_id = %s
AND valid_from <= %s
AND (valid_to IS NULL OR valid_to >= %s)
ORDER BY valid_from DESC
LIMIT 1
""", (emp[0], payment_date, payment_date))
salary = cur.fetchone()
if salary:
print(f'基本給: ¥{salary[0]:,}')
else:
print('給与設定が見つかりません!')
# 計算
if rate and salary:
print('\n=== 介護保険計算 ===')
base = Decimal(str(salary[0]))
rate_val = Decimal(str(rate[4])) # employee_rate
care_ins = (base * rate_val).quantize(Decimal('1'))
print(f'計算式: ¥{base:,} × {rate_val} = ¥{care_ins:,}')
# 実際の給与データ確認
print('\n=== 実際の給与データ ===')
cur.execute("""
SELECT payroll_id, payment_date, base_salary, health_insurance, care_insurance, status
FROM monthly_payroll
WHERE employee_id = %s
AND EXTRACT(YEAR FROM payment_date) = 2025
AND EXTRACT(MONTH FROM payment_date) = 12
ORDER BY payroll_id DESC
LIMIT 1
""", (emp[0],))
payroll = cur.fetchone()
if payroll:
print(f'給与ID: {payroll[0]}')
print(f'支給日: {payroll[1]}')
print(f'基本給: ¥{payroll[2]:,}')
print(f'健康保険: ¥{payroll[3]:,}')
print(f'介護保険: ¥{payroll[4]:,}')
print(f'ステータス: {payroll[5]}')
else:
print('2025年12月の給与データが見つかりません!')
conn.close()