From a071a11df3ca09cb9f2ff0647e00bd886b4441cc Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 18 May 2026 13:30:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A4=BE=E4=BC=9A=E4=BF=9D=E9=99=BA?= =?UTF-8?q?=E6=96=99=E3=81=AE=E7=AB=AF=E6=95=B0=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E5=9B=9B=E6=8D=A8=E4=BA=94=E5=85=A5=E3=81=8B=E3=82=89=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=8D=A8=E3=81=A6=E3=81=AB=E5=A4=89=E6=9B=B4=20(?= =?UTF-8?q?=E5=81=A5=E5=BA=B7=E4=BF=9D=E9=99=BA=E3=83=BB=E4=BB=8B=E8=AD=B7?= =?UTF-8?q?=E4=BF=9D=E9=99=BA=E3=83=BB=E5=8E=9A=E7=94=9F=E5=B9=B4=E9=87=91?= =?UTF-8?q?=E3=83=BB=E9=9B=87=E7=94=A8=E4=BF=9D=E9=99=BA=E3=83=BB=E5=AD=90?= =?UTF-8?q?=E8=82=B2=E3=81=A6=E6=94=AF=E6=8F=B4=E9=87=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/payroll/bonus/service.py | 12 ++++++------ backend/app/payroll/calculation/service.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/backend/app/payroll/bonus/service.py b/backend/app/payroll/bonus/service.py index 5228368..bcfd87d 100644 --- a/backend/app/payroll/bonus/service.py +++ b/backend/app/payroll/bonus/service.py @@ -4,7 +4,7 @@ import json import os import functools -from decimal import Decimal, ROUND_HALF_UP +from decimal import Decimal, ROUND_HALF_UP, ROUND_DOWN from datetime import date from typing import Dict, Any from ...core.database import get_connection @@ -203,7 +203,7 @@ class BonusCalculationService: if health_insurance_rate: health_insurance = ( health_standard_bonus * Decimal(str(health_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) # 介護保険(40歳以上65歳未満が対象) care_insurance = Decimal("0") @@ -212,7 +212,7 @@ class BonusCalculationService: if care_insurance_rate: care_insurance = ( health_standard_bonus * Decimal(str(care_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) # 厚生年金 pension_insurance_rate = BonusCalculationService.get_insurance_rate("厚生年金", payment_date) @@ -220,7 +220,7 @@ class BonusCalculationService: if pension_insurance_rate: pension_insurance = ( pension_standard_bonus * Decimal(str(pension_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) # 雇用保険 employment_insurance_rate = BonusCalculationService.get_insurance_rate("雇用保険", payment_date) @@ -228,7 +228,7 @@ class BonusCalculationService: if employment_insurance_rate: employment_insurance = ( total_bonus * Decimal(str(employment_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) # 子ども・子育て支援金(令和8年5月支給分以降のみ適用) # 賞与は bonus_month でなく実際の支給日(payment_date)で判定する @@ -241,7 +241,7 @@ class BonusCalculationService: if child_support_rate: child_support = ( total_bonus * Decimal(str(child_support_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) print(f"[DEBUG] 賞与子育て支援金: 賞与総額={total_bonus} × 料率={child_support_rate['employee_rate']} = {child_support}") # 所得税の計算(賞与特有の計算) diff --git a/backend/app/payroll/calculation/service.py b/backend/app/payroll/calculation/service.py index 6c7d2cd..fbeeb3e 100644 --- a/backend/app/payroll/calculation/service.py +++ b/backend/app/payroll/calculation/service.py @@ -1,7 +1,7 @@ """ 給与計算サービス (Payroll Calculation Service) """ -from decimal import Decimal, ROUND_HALF_UP +from decimal import Decimal, ROUND_HALF_UP, ROUND_DOWN from datetime import date from typing import Dict, Any from ...core.database import get_connection @@ -381,7 +381,7 @@ class PayrollCalculationService: if health_insurance_rate: health_insurance = ( health_standard_salary * Decimal(str(health_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) elif calc_social_insurance: errors.append(f"健康保険料率が見つかりません(年度: {payment_date.year})") @@ -392,7 +392,7 @@ class PayrollCalculationService: if care_insurance_rate: care_insurance = ( health_standard_salary * Decimal(str(care_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) print(f"[DEBUG] 介護保険計算: {health_standard_salary} × {care_insurance_rate['employee_rate']}% = {care_insurance}") else: errors.append(f"介護保険料率が見つかりません(年度: {payment_date.year})") if calc_social_insurance else None @@ -403,7 +403,7 @@ class PayrollCalculationService: if pension_insurance_rate: pension_insurance = ( pension_standard_salary * Decimal(str(pension_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) print(f"[DEBUG] 厚生年金計算: {pension_standard_salary} × {pension_insurance_rate['employee_rate']}% = {pension_insurance}") elif calc_social_insurance: errors.append(f"厚生年金保険料率が見つかりません(年度: {payment_date.year})") @@ -423,7 +423,7 @@ class PayrollCalculationService: if child_support_rate: child_support = ( standard_monthly_salary * Decimal(str(child_support_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) print(f"[DEBUG] 子育て支援金: 標準報酬月額={standard_monthly_salary} × 料率={child_support_rate['employee_rate']} = {child_support}") # 雇用保険加入対象かどうか確認 @@ -432,7 +432,7 @@ class PayrollCalculationService: if is_employment_insurance_eligible and employment_insurance_rate: employment_insurance = ( total_payment * Decimal(str(employment_insurance_rate["employee_rate"])) - ).quantize(Decimal("1"), rounding=ROUND_HALF_UP) + ).quantize(Decimal("1"), rounding=ROUND_DOWN) elif not is_employment_insurance_eligible: print(f"[DEBUG] この従業員は雇用保険非対象です") elif not employment_insurance_rate and calc_social_insurance: