financial_system/tests/payroll_exceptions_test.py
2026-06-23 09:13:13 +08:00

56 lines
1.7 KiB
Python

from __future__ import annotations
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from financial_system.domain.models import EmployeeAttendance, PayrollResult
from financial_system.domain.payroll_exceptions import detect_payroll_exceptions
def test_detect_payroll_exceptions_flags_core_payroll_risks() -> None:
result = PayrollResult(
employee=EmployeeAttendance(name="张三", employee_no="ZA0001", department="生产中心"),
salary_month="2026-06",
salary_mode="monthly",
attendance_days=0,
absence_days=22,
actual_work_hours=0,
punch_overtime_hours=1,
leave_hours=3,
remaining_overtime_hours=-2,
workday_overtime_hours=0,
weekend_overtime_hours=0,
holiday_overtime_hours=0,
minor_late_count=4,
major_late_count=1,
penalized_late_count=2,
late_deduction=60,
missing_card_count=1,
missing_card_deduction=20,
total_deduction=80,
base_salary=None,
base_pay=None,
commission_amount=0,
overtime_rate=0,
weekend_overtime_rate=0,
holiday_overtime_rate=0,
overtime_pay=0,
gross_salary=None,
net_salary=None,
note="未配置薪资档案",
)
exception_types = {item.exception_type for item in detect_payroll_exceptions([result])}
assert "missing_salary_profile" in exception_types
assert "missing_card" in exception_types
assert "late_penalty" in exception_types
assert "negative_remaining_overtime" in exception_types
assert "empty_attendance" in exception_types
if __name__ == "__main__":
test_detect_payroll_exceptions_flags_core_payroll_risks()