221 lines
5.8 KiB
Python
221 lines
5.8 KiB
Python
"""
|
||
給与設定・税率・保険料のスキーマ定義 (Settings Schemas)
|
||
"""
|
||
from pydantic import BaseModel
|
||
from datetime import date, datetime
|
||
from typing import Optional
|
||
from decimal import Decimal
|
||
|
||
|
||
class SalarySettingBase(BaseModel):
|
||
"""給与基本設定"""
|
||
employee_id: int
|
||
base_salary: Decimal = Decimal("0")
|
||
hourly_rate: Optional[Decimal] = None
|
||
employment_type: str # 正社員/契約社員/パート/アルバイト
|
||
payment_type: str # 月給/時給/日給
|
||
commute_allowance: Decimal = Decimal("0")
|
||
other_allowance: Decimal = Decimal("0")
|
||
valid_from: date
|
||
valid_to: Optional[date] = None
|
||
|
||
|
||
class SalarySettingCreate(SalarySettingBase):
|
||
"""給与設定の作成"""
|
||
pass
|
||
|
||
|
||
class SalarySettingUpdate(BaseModel):
|
||
"""給与設定の更新"""
|
||
base_salary: Optional[Decimal] = None
|
||
hourly_rate: Optional[Decimal] = None
|
||
employment_type: Optional[str] = None
|
||
payment_type: Optional[str] = None
|
||
commute_allowance: Optional[Decimal] = None
|
||
other_allowance: Optional[Decimal] = None
|
||
valid_from: Optional[date] = None
|
||
valid_to: Optional[date] = None
|
||
|
||
|
||
class SalarySetting(SalarySettingBase):
|
||
"""給与設定の情報"""
|
||
setting_id: int
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
class InsuranceRateBase(BaseModel):
|
||
"""社会保険料率"""
|
||
rate_year: int # 適用年度(例: 2026)
|
||
rate_type: str # 健康保険/介護保険/厚生年金/雇用保険/労災保険
|
||
calculation_target: str # 給与/賞与
|
||
prefecture: str = "東京都" # 事業所所在地
|
||
employee_rate: Decimal
|
||
employer_rate: Decimal
|
||
care_insurance_age_threshold: Optional[int] = None # 介護保険適用年齢下限
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class InsuranceRateCreate(InsuranceRateBase):
|
||
"""保険料率の作成"""
|
||
pass
|
||
|
||
|
||
class InsuranceRateUpdate(BaseModel):
|
||
"""保険料率の更新"""
|
||
rate_year: Optional[int] = None
|
||
rate_type: Optional[str] = None
|
||
calculation_target: Optional[str] = None
|
||
prefecture: Optional[str] = None
|
||
employee_rate: Optional[Decimal] = None
|
||
employer_rate: Optional[Decimal] = None
|
||
care_insurance_age_threshold: Optional[int] = None
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class InsuranceRate(InsuranceRateBase):
|
||
"""保険料率の情報"""
|
||
rate_id: int
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
class IncomeTaxTableBase(BaseModel):
|
||
"""所得税率表"""
|
||
monthly_income_from: Decimal
|
||
monthly_income_to: Decimal
|
||
dependents_count: int = 0
|
||
tax_amount: Decimal
|
||
valid_from: date
|
||
valid_to: Optional[date] = None
|
||
|
||
|
||
class IncomeTaxTableCreate(IncomeTaxTableBase):
|
||
"""所得税率表の作成"""
|
||
pass
|
||
|
||
|
||
class IncomeTaxTable(IncomeTaxTableBase):
|
||
"""所得税率表の情報"""
|
||
tax_id: int
|
||
created_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
# ========================================
|
||
# 子ども・子育て拠出金率
|
||
# ========================================
|
||
|
||
class ChildSupportContributionRateBase(BaseModel):
|
||
"""子ども・子育て拠出金率"""
|
||
rate_year: int # 適用年度
|
||
income_threshold: Decimal # 所得基準額(標準報酬月額)
|
||
contribution_rate: Decimal # 拠出金率(事業主負担のみ)
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class ChildSupportContributionRateCreate(ChildSupportContributionRateBase):
|
||
"""子ども・子育て拠出金率の作成"""
|
||
pass
|
||
|
||
|
||
class ChildSupportContributionRateUpdate(BaseModel):
|
||
"""子ども・子育て拠出金率の更新"""
|
||
income_threshold: Optional[Decimal] = None
|
||
contribution_rate: Optional[Decimal] = None
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class ChildSupportContributionRate(ChildSupportContributionRateBase):
|
||
"""子ども・子育て拠出金率の情報"""
|
||
contribution_id: int
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
# ========================================
|
||
# 社会保険料上限設定
|
||
# ========================================
|
||
|
||
class InsuranceLimitSettingBase(BaseModel):
|
||
"""社会保険料上限設定"""
|
||
setting_type: str # 健康保険標準報酬月額上限/厚生年金標準報酬月額上限/通勤手当非課税限度額
|
||
limit_amount: Decimal
|
||
valid_from: date
|
||
valid_to: Optional[date] = None
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class InsuranceLimitSettingCreate(InsuranceLimitSettingBase):
|
||
"""上限設定の作成"""
|
||
pass
|
||
|
||
|
||
class InsuranceLimitSettingUpdate(BaseModel):
|
||
"""上限設定の更新"""
|
||
limit_amount: Optional[Decimal] = None
|
||
valid_from: Optional[date] = None
|
||
valid_to: Optional[date] = None
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class InsuranceLimitSetting(InsuranceLimitSettingBase):
|
||
"""上限設定の情報"""
|
||
limit_id: int
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
# ========================================
|
||
# 扶養家族判定条件
|
||
# ========================================
|
||
|
||
class DependentRuleBase(BaseModel):
|
||
"""扶養家族判定条件"""
|
||
rule_type: str # 所得限度額/年齢条件/同一生計
|
||
rule_value: str
|
||
valid_from: date
|
||
valid_to: Optional[date] = None
|
||
description: Optional[str] = None
|
||
|
||
|
||
class DependentRuleCreate(DependentRuleBase):
|
||
"""判定条件の作成"""
|
||
pass
|
||
|
||
|
||
class DependentRule(DependentRuleBase):
|
||
"""判定条件の情報"""
|
||
rule_id: int
|
||
created_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
"""所得税率表の情報"""
|
||
tax_id: int
|
||
created_at: datetime
|
||
|
||
class Config:
|
||
from_attributes = True
|
||
|
||
|
||
class IncomeTaxImport(BaseModel):
|
||
"""所得税率表のインポート用"""
|
||
data: list[IncomeTaxTableCreate]
|
||
valid_from: date
|