package cn.iocoder.yudao.module.hrm.controller.admin.salary.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Schema(description = "管理后台 - 薪酬核算保存 Request VO") @Data public class HrmSalaryCalculationSaveReqVO { @Schema(description = "核算周期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-01") @NotNull(message = "核算周期不能为空") private String period; @Schema(description = "薪酬核算列表", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "薪酬核算列表不能为空") @Valid private List list; @Schema(description = "薪酬核算项") @Data public static class CalculationItem { @Schema(description = "核算ID(新增时不传,修改时必传)") private Long id; @Schema(description = "系统用户ID", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "员工不能为空") private Long userId; @Schema(description = "部门ID", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "部门不能为空") private Long deptId; @Schema(description = "基本工资", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "基本工资不能为空") private BigDecimal baseSalary; @Schema(description = "标准工资") private BigDecimal standardSalary; @Schema(description = "岗位工资") private BigDecimal postSalary; @Schema(description = "加班工资标准(元/小时)") private BigDecimal overtimeHourlyRate; @Schema(description = "安全环保奖标准") private BigDecimal safetyAwardStandard; @Schema(description = "绩效标准") private BigDecimal performanceStandard; @Schema(description = "计薪出勤(天)") private BigDecimal paidAttendanceDays; @Schema(description = "标准出勤时长(小时)") private BigDecimal standardWorkHours; @Schema(description = "法定假日时长(小时)") private BigDecimal legalHolidayHours; @Schema(description = "标准出勤工资") private BigDecimal standardAttendancePay; @Schema(description = "法定假工资") private BigDecimal legalHolidayPay; @Schema(description = "安全环保奖") private BigDecimal safetyAward; @Schema(description = "浮动绩效工资") private BigDecimal floatingPerformancePay; @Schema(description = "应付工资") private BigDecimal payableSalary; @Schema(description = "工龄工资") private BigDecimal seniorityPay; @Schema(description = "夜班补助") private BigDecimal nightShiftAllowance; @Schema(description = "学历补贴") private BigDecimal educationAllowance; @Schema(description = "体检") private BigDecimal healthCheckAllowance; @Schema(description = "优秀员工奖") private BigDecimal excellentEmployeeAward; @Schema(description = "其他补助") private BigDecimal otherSubsidy; @Schema(description = "部门绩效") private BigDecimal deptPerformance; @Schema(description = "加项合计") private BigDecimal additionTotal; @Schema(description = "漏打卡") private BigDecimal missedPunchDeduction; @Schema(description = "迟到早退") private BigDecimal lateEarlyDeduction; @Schema(description = "扣款合计") private BigDecimal deductionTotal; @Schema(description = "绩效工资") private BigDecimal performanceSalary; @Schema(description = "加班工资") private BigDecimal overtimePay; @Schema(description = "餐补") private BigDecimal mealAllowance; @Schema(description = "交通补贴") private BigDecimal transportAllowance; @Schema(description = "其他补贴") private BigDecimal otherAllowance; @Schema(description = "社保扣除") private BigDecimal socialSecurityDeduction; @Schema(description = "公积金扣除") private BigDecimal housingFundDeduction; @Schema(description = "个税扣除") private BigDecimal taxDeduction; @Schema(description = "其他扣除") private BigDecimal otherDeduction; @Schema(description = "实发工资", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "实发工资不能为空") private BigDecimal actualSalary; @Schema(description = "出勤天数") private Integer workDays; @Schema(description = "加班时长") private BigDecimal overtimeHours; @Schema(description = "备注") private String remark; } }