Files
s2f/backend/app/models/standard_field.py
T
freedakgmail 33b4c734aa feat: 完善前后端核心功能模块
后端:
- 新增认证(auth)、任务(tasks)、映射(mappings)、对账(reconciliation)、异常(exceptions)、导出(exports) API
- 新增核心模块: database, security, permissions, tenant, exceptions, error_handlers
- 新增数据模型: user, company, reconciliation_task, field_mapping, uploaded_file 等
- 新增服务层: ai_recognizer, file_parser, file_storage, mapping, reconciliation 等
- 添加数据库迁移脚本

前端:
- 新增登录页面和仪表盘页面
- 新增任务列表、任务详情、字段映射页面
- 新增异常处理页面和规则设置页面
- 新增 API 代理路由 /api/[...path]
- 新增 UI 组件库 (button, card, dialog, input, table 等)
- 新增 auth 组件 (ProtectedRoute, PermissionGate)
- 新增 layout 组件 (Header, Sidebar)
- 新增 mapping 组件 (FieldMappingTable, AISuggestionPanel)
- 新增 API 客户端和 hooks (useAsync, useToast, usePermission 等)
- 新增状态管理 (auth-store, company-store, ui-store)
- 集成 Tailwind CSS 和 shadcn/ui 组件库

其他:
- 添加 Alembic 数据库迁移配置
- 添加初始化示例数据脚本
- 更新项目文档
2026-07-07 09:04:47 +08:00

130 lines
4.9 KiB
Python

"""
标准字段定义
定义工资表、社保表、个税表的标准字段
"""
from enum import Enum
class StandardField(str, Enum):
"""标准字段枚举"""
# ===== 公共字段 =====
EMPLOYEE_NAME = "员工姓名" # 员工姓名
EMPLOYEE_ID = "工号" # 工号
DEPARTMENT = "部门" # 部门
POSITION = "岗位" # 岗位/职位
# ===== 工资表字段 =====
BASE_SALARY = "基本工资" # 基本工资
BONUS = "奖金" # 奖金
ALLOWANCE = "补贴" # 补贴
OVERTIME_PAY = "加班费" # 加班费
DEDUCTION = "扣款" # 扣款
GROSS_SALARY = "应发工资" # 应发工资
NET_SALARY = "实发工资" # 实发工资/净工资
BANK_CARD = "银行账号" # 银行账号
ID_CARD = "身份证号" # 身份证号
# ===== 社保表字段 =====
SOCIAL_SECURITY_BASE = "社保基数" # 社保基数
PENSION_INSURANCE = "养老保险" # 养老保险(个人)
MEDICAL_INSURANCE = "医疗保险" # 医疗保险(个人)
UNEMPLOYMENT_INSURANCE = "失业保险" # 失业保险(个人)
HOUSING_FUND = "公积金" # 住房公积金(个人)
PENSION_INSURANCE_COMPANY = "养老保险(公司)" # 养老保险(公司)
MEDICAL_INSURANCE_COMPANY = "医疗保险(公司)" # 医疗保险(公司)
UNEMPLOYMENT_INSURANCE_COMPANY = "失业保险(公司)" # 失业保险(公司)
HOUSING_FUND_COMPANY = "公积金(公司)" # 住房公积金(公司)
SOCIAL_SECURITY_TOTAL = "社保合计" # 社保合计
# ===== 个税表字段 =====
TAXABLE_INCOME = "应税收入" # 应税收入
PRE_TAX_DEDUCTION = "税前扣除" # 税前扣除(三险一金等)
TAX_FREE_INCOME = "免税收入" # 免税收入
TAX_EXEMPT_INCOME = "税前减免" # 税前减免
QUICK_DEDUCTION = "速算扣除数" # 速算扣除数
TAX_AMOUNT = "应缴个税" # 应缴个人所得税
TAX_PAID = "已缴个税" # 已缴个人所得税
AFTER_TAX_INCOME = "税后收入" # 税后收入
# 标准字段分组
FIELD_GROUPS = {
"公共字段": [
StandardField.EMPLOYEE_NAME,
StandardField.EMPLOYEE_ID,
StandardField.DEPARTMENT,
StandardField.POSITION,
],
"工资表字段": [
StandardField.BASE_SALARY,
StandardField.BONUS,
StandardField.ALLOWANCE,
StandardField.OVERTIME_PAY,
StandardField.DEDUCTION,
StandardField.GROSS_SALARY,
StandardField.NET_SALARY,
StandardField.BANK_CARD,
StandardField.ID_CARD,
],
"社保表字段": [
StandardField.SOCIAL_SECURITY_BASE,
StandardField.PENSION_INSURANCE,
StandardField.MEDICAL_INSURANCE,
StandardField.UNEMPLOYMENT_INSURANCE,
StandardField.HOUSING_FUND,
StandardField.PENSION_INSURANCE_COMPANY,
StandardField.MEDICAL_INSURANCE_COMPANY,
StandardField.UNEMPLOYMENT_INSURANCE_COMPANY,
StandardField.HOUSING_FUND_COMPANY,
StandardField.SOCIAL_SECURITY_TOTAL,
],
"个税表字段": [
StandardField.TAXABLE_INCOME,
StandardField.PRE_TAX_DEDUCTION,
StandardField.TAX_FREE_INCOME,
StandardField.TAX_EXEMPT_INCOME,
StandardField.QUICK_DEDUCTION,
StandardField.TAX_AMOUNT,
StandardField.TAX_PAID,
StandardField.AFTER_TAX_INCOME,
],
}
# 字段类型映射
FIELD_TYPES = {
StandardField.EMPLOYEE_NAME.value: "string",
StandardField.EMPLOYEE_ID.value: "string",
StandardField.DEPARTMENT.value: "string",
StandardField.POSITION.value: "string",
StandardField.BASE_SALARY.value: "number",
StandardField.BONUS.value: "number",
StandardField.ALLOWANCE.value: "number",
StandardField.OVERTIME_PAY.value: "number",
StandardField.DEDUCTION.value: "number",
StandardField.GROSS_SALARY.value: "number",
StandardField.NET_SALARY.value: "number",
StandardField.BANK_CARD.value: "string",
StandardField.ID_CARD.value: "string",
StandardField.SOCIAL_SECURITY_BASE.value: "number",
StandardField.PENSION_INSURANCE.value: "number",
StandardField.MEDICAL_INSURANCE.value: "number",
StandardField.UNEMPLOYMENT_INSURANCE.value: "number",
StandardField.HOUSING_FUND.value: "number",
StandardField.PENSION_INSURANCE_COMPANY.value: "number",
StandardField.MEDICAL_INSURANCE_COMPANY.value: "number",
StandardField.UNEMPLOYMENT_INSURANCE_COMPANY.value: "number",
StandardField.HOUSING_FUND_COMPANY.value: "number",
StandardField.SOCIAL_SECURITY_TOTAL.value: "number",
StandardField.TAXABLE_INCOME.value: "number",
StandardField.PRE_TAX_DEDUCTION.value: "number",
StandardField.TAX_FREE_INCOME.value: "number",
StandardField.TAX_EXEMPT_INCOME.value: "number",
StandardField.QUICK_DEDUCTION.value: "number",
StandardField.TAX_AMOUNT.value: "number",
StandardField.TAX_PAID.value: "number",
StandardField.AFTER_TAX_INCOME.value: "number",
}