From 75d9ba3021b644842aa4885ba8532fb3b5abc7e9 Mon Sep 17 00:00:00 2001 From: Pipeline Agent Date: Wed, 19 Aug 2026 18:44:59 +0800 Subject: [PATCH] =?UTF-8?q?agent.develop:=20=E3=80=90=E9=87=8D=E5=81=9A?= =?UTF-8?q?=C2=B7=E5=BF=85=E9=A1=BB=E4=BA=A7=E5=87=BA=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=91=E6=89=B9=E6=AC=A11=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E5=9F=BA=E7=A1=80T01/T02=EF=BC=9A49=E8=A1=A8models=20?= =?UTF-8?q?JSON=E5=A5=91=E7=BA=A6+ahserver(Python)/bricks=E8=84=9A?= =?UTF-8?q?=E6=89=8B=E6=9E=B6+MariaDB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/hr_contract/contract_info.json | 165 ++++ models/hr_contract/contract_remind_rule.json | 79 ++ models/hr_contract/contract_template.json | 78 ++ models/hr_contract/contract_type.json | 76 ++ models/hr_flow/flow_def.json | 111 +++ models/hr_flow/flow_form_def.json | 93 ++ models/hr_flow/flow_instance.json | 132 +++ models/hr_flow/flow_node_def.json | 79 ++ models/hr_flow/flow_op_log.json | 59 ++ models/hr_flow/flow_role.json | 76 ++ models/hr_flow/flow_task.json | 84 ++ models/hr_org/headcount_item.json | 83 ++ models/hr_org/headcount_snapshot.json | 79 ++ models/hr_org/org_blacklist.json | 80 ++ models/hr_org/org_concurrent_post.json | 100 ++ models/hr_org/org_contract_company.json | 94 ++ models/hr_org/org_entry.json | 244 +++++ models/hr_org/org_field_def.json | 99 ++ models/hr_org/org_field_value.json | 68 ++ models/hr_org/org_grade_level.json | 92 ++ models/hr_org/org_grade_rank.json | 79 ++ models/hr_org/org_headcount_scheme.json | 105 +++ models/hr_org/org_job.json | 107 +++ models/hr_org/org_leave.json | 137 +++ models/hr_org/org_leave_handover.json | 82 ++ models/hr_org/org_position.json | 123 +++ models/hr_org/org_project.json | 127 +++ models/hr_org/org_project_post.json | 101 +++ models/hr_org/org_regularization.json | 99 ++ models/hr_org/org_sequence.json | 73 ++ models/hr_org/org_transfer.json | 100 ++ models/hr_org/org_transfer_detail.json | 92 ++ models/hr_org/org_unit.json | 133 +++ models/hr_org/org_unit_change.json | 81 ++ models/hr_roster/roster_employee.json | 302 +++++++ models/hr_roster/roster_empno_rule.json | 91 ++ models/hr_roster/roster_field_def.json | 134 +++ models/hr_roster/roster_field_group.json | 82 ++ models/hr_roster/roster_field_value.json | 87 ++ models/hr_roster/roster_timeline.json | 77 ++ models/hr_roster/roster_type_rule.json | 80 ++ models/hr_system/sys_announcement.json | 82 ++ models/hr_system/sys_audit_log.json | 120 +++ models/hr_system/sys_care_config.json | 68 ++ models/hr_system/sys_data_scope.json | 80 ++ models/hr_system/sys_message.json | 97 ++ models/hr_system/sys_openapp.json | 93 ++ models/hr_system/sys_policy.json | 89 ++ models/hr_system/sys_remind_rule.json | 101 +++ scripts/gen_models.py | 10 +- scripts/json2ddl.py | 23 +- sql/V001__init_hrs.sql | 906 +++++++++++++++++++ 52 files changed, 5916 insertions(+), 16 deletions(-) create mode 100644 models/hr_contract/contract_info.json create mode 100644 models/hr_contract/contract_remind_rule.json create mode 100644 models/hr_contract/contract_template.json create mode 100644 models/hr_contract/contract_type.json create mode 100644 models/hr_flow/flow_def.json create mode 100644 models/hr_flow/flow_form_def.json create mode 100644 models/hr_flow/flow_instance.json create mode 100644 models/hr_flow/flow_node_def.json create mode 100644 models/hr_flow/flow_op_log.json create mode 100644 models/hr_flow/flow_role.json create mode 100644 models/hr_flow/flow_task.json create mode 100644 models/hr_org/headcount_item.json create mode 100644 models/hr_org/headcount_snapshot.json create mode 100644 models/hr_org/org_blacklist.json create mode 100644 models/hr_org/org_concurrent_post.json create mode 100644 models/hr_org/org_contract_company.json create mode 100644 models/hr_org/org_entry.json create mode 100644 models/hr_org/org_field_def.json create mode 100644 models/hr_org/org_field_value.json create mode 100644 models/hr_org/org_grade_level.json create mode 100644 models/hr_org/org_grade_rank.json create mode 100644 models/hr_org/org_headcount_scheme.json create mode 100644 models/hr_org/org_job.json create mode 100644 models/hr_org/org_leave.json create mode 100644 models/hr_org/org_leave_handover.json create mode 100644 models/hr_org/org_position.json create mode 100644 models/hr_org/org_project.json create mode 100644 models/hr_org/org_project_post.json create mode 100644 models/hr_org/org_regularization.json create mode 100644 models/hr_org/org_sequence.json create mode 100644 models/hr_org/org_transfer.json create mode 100644 models/hr_org/org_transfer_detail.json create mode 100644 models/hr_org/org_unit.json create mode 100644 models/hr_org/org_unit_change.json create mode 100644 models/hr_roster/roster_employee.json create mode 100644 models/hr_roster/roster_empno_rule.json create mode 100644 models/hr_roster/roster_field_def.json create mode 100644 models/hr_roster/roster_field_group.json create mode 100644 models/hr_roster/roster_field_value.json create mode 100644 models/hr_roster/roster_timeline.json create mode 100644 models/hr_roster/roster_type_rule.json create mode 100644 models/hr_system/sys_announcement.json create mode 100644 models/hr_system/sys_audit_log.json create mode 100644 models/hr_system/sys_care_config.json create mode 100644 models/hr_system/sys_data_scope.json create mode 100644 models/hr_system/sys_message.json create mode 100644 models/hr_system/sys_openapp.json create mode 100644 models/hr_system/sys_policy.json create mode 100644 models/hr_system/sys_remind_rule.json create mode 100644 sql/V001__init_hrs.sql diff --git a/models/hr_contract/contract_info.json b/models/hr_contract/contract_info.json new file mode 100644 index 0000000..d765311 --- /dev/null +++ b/models/hr_contract/contract_info.json @@ -0,0 +1,165 @@ +{ + "summary": [ + { + "name": "contract_info", + "title": "合同台账", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "contract_no", + "title": "合同编号", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "type_id", + "title": "合同类型", + "type": "varchar", + "length": 32 + }, + { + "name": "company_id", + "title": "签约公司(org_contract_company)", + "type": "varchar", + "length": 32 + }, + { + "name": "template_id", + "title": "合同模板", + "type": "varchar", + "length": 32 + }, + { + "name": "start_date", + "title": "合同起始日", + "type": "date" + }, + { + "name": "end_date", + "title": "合同到期日", + "type": "date" + }, + { + "name": "sign_date", + "title": "签订日期", + "type": "date" + }, + { + "name": "contract_status", + "title": "合同状态(字典CONTRACT_STATUS)", + "type": "varchar", + "length": 16, + "default": "active" + }, + { + "name": "file_path", + "title": "合同文件(文件ID)", + "type": "varchar", + "length": 256 + }, + { + "name": "text_file_path", + "title": "模板生成合同文本(D4)", + "type": "varchar", + "length": 256 + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "remind_rule_id", + "title": "到期提醒规则", + "type": "varchar", + "length": 32 + }, + { + "name": "esign_status", + "title": "电子签状态(字典ESIGN_STATUS,D4预留)", + "type": "varchar", + "length": 16, + "default": "not_enabled" + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_employee", + "fields": [ + "employee_id" + ] + }, + { + "name": "idx_end_date", + "fields": [ + "end_date" + ] + }, + { + "name": "idx_status", + "fields": [ + "contract_status" + ] + } + ], + "codes": [ + { + "name": "contract_status", + "source": "appcodes", + "code": "CONTRACT_STATUS" + }, + { + "name": "esign_status", + "source": "appcodes", + "code": "ESIGN_STATUS" + } + ] +} diff --git a/models/hr_contract/contract_remind_rule.json b/models/hr_contract/contract_remind_rule.json new file mode 100644 index 0000000..7919506 --- /dev/null +++ b/models/hr_contract/contract_remind_rule.json @@ -0,0 +1,79 @@ +{ + "summary": [ + { + "name": "contract_remind_rule", + "title": "合同到期提醒规则", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "rule_name", + "title": "规则名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "days_before", + "title": "提前天数", + "type": "int", + "default": 30 + }, + { + "name": "target_role", + "title": "提醒对象(self/leader/hr)", + "type": "varchar", + "length": 16, + "default": "hr" + }, + { + "name": "content_template", + "title": "提醒内容模板", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [], + "codes": [] +} diff --git a/models/hr_contract/contract_template.json b/models/hr_contract/contract_template.json new file mode 100644 index 0000000..b10a848 --- /dev/null +++ b/models/hr_contract/contract_template.json @@ -0,0 +1,78 @@ +{ + "summary": [ + { + "name": "contract_template", + "title": "合同模板", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "template_name", + "title": "模板名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "type_id", + "title": "合同类型", + "type": "varchar", + "length": 32 + }, + { + "name": "file_path", + "title": "模板文件(文件ID)", + "type": "varchar", + "length": 256 + }, + { + "name": "field_marks_json", + "title": "占位符映射", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [], + "codes": [] +} diff --git a/models/hr_contract/contract_type.json b/models/hr_contract/contract_type.json new file mode 100644 index 0000000..2acce29 --- /dev/null +++ b/models/hr_contract/contract_type.json @@ -0,0 +1,76 @@ +{ + "summary": [ + { + "name": "contract_type", + "title": "合同类型", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "type_code", + "title": "类型编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "type_name", + "title": "类型名称(劳动合同/保密协议/竞业协议…)", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_type_code", + "fields": [ + "type_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_flow/flow_def.json b/models/hr_flow/flow_def.json new file mode 100644 index 0000000..3e0d11c --- /dev/null +++ b/models/hr_flow/flow_def.json @@ -0,0 +1,111 @@ +{ + "summary": [ + { + "name": "flow_def", + "title": "流程定义", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "flow_code", + "title": "流程编码", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "flow_name", + "title": "流程名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "form_id", + "title": "表单定义", + "type": "varchar", + "length": 32 + }, + { + "name": "biz_type", + "title": "业务类型(字典FLOW_BIZ_TYPE)", + "type": "varchar", + "length": 32 + }, + { + "name": "match_cond_json", + "title": "匹配条件(员工类型/部门)", + "type": "text" + }, + { + "name": "version", + "title": "版本", + "type": "int", + "default": 1 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_flow_code", + "fields": [ + "flow_code" + ], + "unique": true + }, + { + "name": "idx_biz_type", + "fields": [ + "biz_type" + ] + } + ], + "codes": [ + { + "name": "biz_type", + "source": "appcodes", + "code": "FLOW_BIZ_TYPE" + } + ] +} diff --git a/models/hr_flow/flow_form_def.json b/models/hr_flow/flow_form_def.json new file mode 100644 index 0000000..51caf6f --- /dev/null +++ b/models/hr_flow/flow_form_def.json @@ -0,0 +1,93 @@ +{ + "summary": [ + { + "name": "flow_form_def", + "title": "表单定义", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "form_code", + "title": "表单编码", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "form_name", + "title": "表单名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "biz_type", + "title": "业务类型(字典FLOW_BIZ_TYPE,含attendance_*桩位)", + "type": "varchar", + "length": 32 + }, + { + "name": "fields_json", + "title": "字段定义(引用roster_field_def或自定义项)", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_form_code", + "fields": [ + "form_code" + ], + "unique": true + } + ], + "codes": [ + { + "name": "biz_type", + "source": "appcodes", + "code": "FLOW_BIZ_TYPE" + } + ] +} diff --git a/models/hr_flow/flow_instance.json b/models/hr_flow/flow_instance.json new file mode 100644 index 0000000..69a250f --- /dev/null +++ b/models/hr_flow/flow_instance.json @@ -0,0 +1,132 @@ +{ + "summary": [ + { + "name": "flow_instance", + "title": "流程实例", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "inst_no", + "title": "审批编号", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "flow_id", + "title": "流程定义", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "form_id", + "title": "表单定义", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "biz_type", + "title": "业务类型(字典FLOW_BIZ_TYPE)", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "biz_id", + "title": "业务单据ID", + "type": "varchar", + "length": 32 + }, + { + "name": "title", + "title": "标题", + "type": "varchar", + "length": 256 + }, + { + "name": "initiator_id", + "title": "发起人", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "inst_status", + "title": "实例状态(字典INST_STATUS)", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "running" + }, + { + "name": "submit_data_json", + "title": "提交表单数据快照", + "type": "text" + }, + { + "name": "start_time", + "title": "发起时间", + "type": "timestamp" + }, + { + "name": "finish_time", + "title": "结束时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_inst_no", + "fields": [ + "inst_no" + ], + "unique": true + }, + { + "name": "idx_biz", + "fields": [ + "biz_type", + "biz_id" + ] + }, + { + "name": "idx_initiator", + "fields": [ + "initiator_id" + ] + }, + { + "name": "idx_status", + "fields": [ + "inst_status" + ] + } + ], + "codes": [ + { + "name": "biz_type", + "source": "appcodes", + "code": "FLOW_BIZ_TYPE" + }, + { + "name": "inst_status", + "source": "appcodes", + "code": "INST_STATUS" + } + ] +} diff --git a/models/hr_flow/flow_node_def.json b/models/hr_flow/flow_node_def.json new file mode 100644 index 0000000..a0170fd --- /dev/null +++ b/models/hr_flow/flow_node_def.json @@ -0,0 +1,79 @@ +{ + "summary": [ + { + "name": "flow_node_def", + "title": "流程节点", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "flow_id", + "title": "流程定义", + "type": "varchar", + "length": 32 + }, + { + "name": "node_seq", + "title": "节点序号", + "type": "int", + "default": 1 + }, + { + "name": "node_name", + "title": "节点名称", + "type": "varchar", + "length": 64 + }, + { + "name": "approver_type", + "title": "审批人类型(user/role/leader/admin/flow_role)", + "type": "varchar", + "length": 16 + }, + { + "name": "approver_value", + "title": "审批人取值", + "type": "varchar", + "length": 256 + }, + { + "name": "pass_rule", + "title": "通过规则(any/all)", + "type": "varchar", + "length": 8, + "default": "all" + }, + { + "name": "field_perm_json", + "title": "节点字段可读写权限", + "type": "text" + }, + { + "name": "cc_to", + "title": "抄送对象", + "type": "varchar", + "length": 512 + } + ], + "indexes": [ + { + "name": "idx_flow_id", + "fields": [ + "flow_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_flow/flow_op_log.json b/models/hr_flow/flow_op_log.json new file mode 100644 index 0000000..dbbd084 --- /dev/null +++ b/models/hr_flow/flow_op_log.json @@ -0,0 +1,59 @@ +{ + "summary": [ + { + "name": "flow_op_log", + "title": "流转日志", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "op_type", + "title": "操作类型(submit/approve/reject/forward/cancel/withdraw)", + "type": "varchar", + "length": 16 + }, + { + "name": "operator_id", + "title": "操作人", + "type": "varchar", + "length": 32 + }, + { + "name": "comment", + "title": "意见", + "type": "text" + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_instance", + "fields": [ + "instance_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_flow/flow_role.json b/models/hr_flow/flow_role.json new file mode 100644 index 0000000..02ce3b3 --- /dev/null +++ b/models/hr_flow/flow_role.json @@ -0,0 +1,76 @@ +{ + "summary": [ + { + "name": "flow_role", + "title": "审批角色", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "role_name", + "title": "角色名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "flow_scope_json", + "title": "可用流程范围", + "type": "text" + }, + { + "name": "op_perm_json", + "title": "操作权限", + "type": "text" + }, + { + "name": "data_scope_json", + "title": "数据查看范围", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [], + "codes": [] +} diff --git a/models/hr_flow/flow_task.json b/models/hr_flow/flow_task.json new file mode 100644 index 0000000..76a439d --- /dev/null +++ b/models/hr_flow/flow_task.json @@ -0,0 +1,84 @@ +{ + "summary": [ + { + "name": "flow_task", + "title": "审批任务(待办/已办)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "node_id", + "title": "节点定义", + "type": "varchar", + "length": 32 + }, + { + "name": "node_name", + "title": "节点名称", + "type": "varchar", + "length": 64 + }, + { + "name": "approver_id", + "title": "审批人", + "type": "varchar", + "length": 32 + }, + { + "name": "task_status", + "title": "任务状态(pending/approved/rejected/forwarded/cancelled)", + "type": "varchar", + "length": 16, + "default": "pending" + }, + { + "name": "comment", + "title": "审批意见", + "type": "text" + }, + { + "name": "handle_time", + "title": "处理时间", + "type": "timestamp" + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_approver_status", + "fields": [ + "approver_id", + "task_status" + ] + }, + { + "name": "idx_instance", + "fields": [ + "instance_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/headcount_item.json b/models/hr_org/headcount_item.json new file mode 100644 index 0000000..21d2f1a --- /dev/null +++ b/models/hr_org/headcount_item.json @@ -0,0 +1,83 @@ +{ + "summary": [ + { + "name": "headcount_item", + "title": "编制细分项(F16)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "scheme_id", + "title": "编制方案", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "scope_json", + "title": "占编范围条件(员工类型/状态/职位/职级/自定义字段)", + "type": "text", + "notnull": true + }, + { + "name": "seg_json", + "title": "细分维度(空=整体)", + "type": "text" + }, + { + "name": "head_limit", + "title": "编制数量", + "type": "int", + "notnull": true, + "default": 0 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_scheme_id", + "fields": [ + "scheme_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/headcount_snapshot.json b/models/hr_org/headcount_snapshot.json new file mode 100644 index 0000000..a3a24f4 --- /dev/null +++ b/models/hr_org/headcount_snapshot.json @@ -0,0 +1,79 @@ +{ + "summary": [ + { + "name": "headcount_snapshot", + "title": "编制快照(F16历史回溯/实时计数)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "scheme_id", + "title": "编制方案", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "item_id", + "title": "细分项", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "snap_date", + "title": "快照日期", + "type": "date", + "notnull": true + }, + { + "name": "used_count", + "title": "占编人数", + "type": "int", + "notnull": true, + "default": 0 + }, + { + "name": "over_count", + "title": "超编数(0=未超编)", + "type": "int", + "notnull": true, + "default": 0 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_scheme_item_date", + "fields": [ + "scheme_id", + "item_id", + "snap_date" + ], + "unique": true + }, + { + "name": "idx_snap_date", + "fields": [ + "snap_date" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_blacklist.json b/models/hr_org/org_blacklist.json new file mode 100644 index 0000000..d3a4181 --- /dev/null +++ b/models/hr_org/org_blacklist.json @@ -0,0 +1,80 @@ +{ + "summary": [ + { + "name": "org_blacklist", + "title": "黑名单", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "name", + "title": "姓名", + "type": "varchar", + "length": 64 + }, + { + "name": "id_number_hash", + "title": "证件号哈希(确定性,匹配用)", + "type": "varchar", + "length": 64, + "sensitive": true + }, + { + "name": "id_number_cipher", + "title": "证件号密文", + "type": "varchar", + "length": 256, + "sensitive": true + }, + { + "name": "reason", + "title": "拉黑原因", + "type": "varchar", + "length": 256 + }, + { + "name": "source", + "title": "来源(leave/manual)", + "type": "varchar", + "length": 16 + }, + { + "name": "source_employee_id", + "title": "来源员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_id_number_hash", + "fields": [ + "id_number_hash" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_concurrent_post.json b/models/hr_org/org_concurrent_post.json new file mode 100644 index 0000000..2bfc79b --- /dev/null +++ b/models/hr_org/org_concurrent_post.json @@ -0,0 +1,100 @@ +{ + "summary": [ + { + "name": "org_concurrent_post", + "title": "兼岗", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "org_id", + "title": "兼岗组织", + "type": "varchar", + "length": 32 + }, + { + "name": "position_id", + "title": "兼岗职位", + "type": "varchar", + "length": 32 + }, + { + "name": "start_date", + "title": "开始日期", + "type": "date" + }, + { + "name": "end_date", + "title": "结束日期", + "type": "date" + }, + { + "name": "status", + "title": "状态(awaiting/active/expired)", + "type": "varchar", + "length": 16, + "default": "awaiting" + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_employee_id", + "fields": [ + "employee_id" + ] + }, + { + "name": "idx_status", + "fields": [ + "status" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_contract_company.json b/models/hr_org/org_contract_company.json new file mode 100644 index 0000000..3a89f96 --- /dev/null +++ b/models/hr_org/org_contract_company.json @@ -0,0 +1,94 @@ +{ + "summary": [ + { + "name": "org_contract_company", + "title": "合同公司", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "company_code", + "title": "公司编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "company_name", + "title": "公司名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "credit_code", + "title": "统一社会信用代码", + "type": "varchar", + "length": 32 + }, + { + "name": "legal_person", + "title": "法人", + "type": "varchar", + "length": 64 + }, + { + "name": "contact_info", + "title": "联系方式", + "type": "varchar", + "length": 128 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_company_code", + "fields": [ + "company_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_org/org_entry.json b/models/hr_org/org_entry.json new file mode 100644 index 0000000..77003ff --- /dev/null +++ b/models/hr_org/org_entry.json @@ -0,0 +1,244 @@ +{ + "summary": [ + { + "name": "org_entry", + "title": "入职记录", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案(可空,待入职)", + "type": "varchar", + "length": 32 + }, + { + "name": "name", + "title": "姓名", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "id_type", + "title": "证件类型(字典ID_TYPE)", + "type": "varchar", + "length": 16, + "default": "id_card" + }, + { + "name": "id_number_cipher", + "title": "证件号密文", + "type": "varchar", + "length": 256, + "sensitive": true + }, + { + "name": "id_number_hash", + "title": "证件号哈希", + "type": "varchar", + "length": 64, + "sensitive": true + }, + { + "name": "id_valid_from", + "title": "证件有效期起", + "type": "date" + }, + { + "name": "id_valid_to", + "title": "证件有效期止(长期=9999-12-31)", + "type": "date" + }, + { + "name": "id_authority", + "title": "证件签发机关", + "type": "varchar", + "length": 128 + }, + { + "name": "id_source", + "title": "证件信息来源(字典ID_SOURCE,D1手工录入)", + "type": "varchar", + "length": 16, + "default": "manual" + }, + { + "name": "employee_type", + "title": "员工类型(字典EMP_TYPE)", + "type": "varchar", + "length": 16 + }, + { + "name": "org_id", + "title": "入职组织", + "type": "varchar", + "length": 32 + }, + { + "name": "position_id", + "title": "职位", + "type": "varchar", + "length": 32 + }, + { + "name": "company_id", + "title": "合同公司", + "type": "varchar", + "length": 32 + }, + { + "name": "work_location", + "title": "办公地点", + "type": "varchar", + "length": 128 + }, + { + "name": "hire_date", + "title": "入职日期", + "type": "date" + }, + { + "name": "entry_status", + "title": "入职状态(字典ENTRY_STATUS)", + "type": "varchar", + "length": 24, + "default": "pending_approval" + }, + { + "name": "is_rehire", + "title": "是否复职(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "register_status", + "title": "登记表状态(none/invited/filled)", + "type": "varchar", + "length": 16, + "default": "none" + }, + { + "name": "register_token", + "title": "登记表token(扫码入职降级)", + "type": "varchar", + "length": 64 + }, + { + "name": "register_url", + "title": "登记表链接", + "type": "varchar", + "length": 256 + }, + { + "name": "qrcode_file", + "title": "登记二维码图片(文件ID)", + "type": "varchar", + "length": 64 + }, + { + "name": "register_expire", + "title": "登记链接过期时间", + "type": "timestamp" + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_entry_status", + "fields": [ + "entry_status" + ] + }, + { + "name": "idx_hire_date", + "fields": [ + "hire_date" + ] + }, + { + "name": "idx_flow_instance_id", + "fields": [ + "flow_instance_id" + ] + }, + { + "name": "uk_register_token", + "fields": [ + "register_token" + ], + "unique": true + } + ], + "codes": [ + { + "name": "id_type", + "source": "appcodes", + "code": "ID_TYPE" + }, + { + "name": "id_source", + "source": "appcodes", + "code": "ID_SOURCE" + }, + { + "name": "employee_type", + "source": "appcodes", + "code": "EMP_TYPE" + }, + { + "name": "entry_status", + "source": "appcodes", + "code": "ENTRY_STATUS" + }, + { + "name": "register_status", + "source": "appcodes", + "code": "REGISTER_STATUS" + } + ] +} diff --git a/models/hr_org/org_field_def.json b/models/hr_org/org_field_def.json new file mode 100644 index 0000000..0a707f8 --- /dev/null +++ b/models/hr_org/org_field_def.json @@ -0,0 +1,99 @@ +{ + "summary": [ + { + "name": "org_field_def", + "title": "组织自定义字段定义", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "field_code", + "title": "字段编码", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "field_name", + "title": "字段名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "field_type", + "title": "字段类型(text/number/date/select/file)", + "type": "varchar", + "length": 16 + }, + { + "name": "options_json", + "title": "选项定义JSON", + "type": "text" + }, + { + "name": "required", + "title": "是否必填(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_field_code", + "fields": [ + "field_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_org/org_field_value.json b/models/hr_org/org_field_value.json new file mode 100644 index 0000000..fc80eb1 --- /dev/null +++ b/models/hr_org/org_field_value.json @@ -0,0 +1,68 @@ +{ + "summary": [ + { + "name": "org_field_value", + "title": "组织字段值(EAV)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "org_id", + "title": "组织", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "field_id", + "title": "字段定义", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "value_text", + "title": "文本值", + "type": "text" + }, + { + "name": "value_date", + "title": "日期值", + "type": "date" + }, + { + "name": "value_file", + "title": "附件值(文件ID)", + "type": "varchar", + "length": 64 + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_org_field", + "fields": [ + "org_id", + "field_id" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_org/org_grade_level.json b/models/hr_org/org_grade_level.json new file mode 100644 index 0000000..7f251a0 --- /dev/null +++ b/models/hr_org/org_grade_level.json @@ -0,0 +1,92 @@ +{ + "summary": [ + { + "name": "org_grade_level", + "title": "职级", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "level_code", + "title": "职级编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "level_name", + "title": "职级名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "level_category", + "title": "职级类别", + "type": "varchar", + "length": 32 + }, + { + "name": "start_rank_id", + "title": "起始职等", + "type": "varchar", + "length": 32 + }, + { + "name": "end_rank_id", + "title": "结束职等", + "type": "varchar", + "length": 32 + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_level_code", + "fields": [ + "level_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_org/org_grade_rank.json b/models/hr_org/org_grade_rank.json new file mode 100644 index 0000000..b26e1a3 --- /dev/null +++ b/models/hr_org/org_grade_rank.json @@ -0,0 +1,79 @@ +{ + "summary": [ + { + "name": "org_grade_rank", + "title": "职等", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "rank_code", + "title": "职等编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "rank_name", + "title": "职等名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "rank_level", + "title": "职等层级", + "type": "int" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_rank_code", + "fields": [ + "rank_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_org/org_headcount_scheme.json b/models/hr_org/org_headcount_scheme.json new file mode 100644 index 0000000..a666ef1 --- /dev/null +++ b/models/hr_org/org_headcount_scheme.json @@ -0,0 +1,105 @@ +{ + "summary": [ + { + "name": "org_headcount_scheme", + "title": "编制方案(F16)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "scheme_name", + "title": "方案名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "cycle_type", + "title": "周期(字典HEADCOUNT_CYCLE: year/quarter/month)", + "type": "varchar", + "length": 16, + "notnull": true + }, + { + "name": "cycle_start", + "title": "周期起", + "type": "date", + "notnull": true + }, + { + "name": "cycle_end", + "title": "周期止", + "type": "date", + "notnull": true + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_cycle", + "fields": [ + "cycle_start", + "cycle_end" + ] + }, + { + "name": "idx_status", + "fields": [ + "status" + ] + } + ], + "codes": [ + { + "name": "cycle_type", + "source": "appcodes", + "code": "HEADCOUNT_CYCLE" + } + ] +} diff --git a/models/hr_org/org_job.json b/models/hr_org/org_job.json new file mode 100644 index 0000000..f35ce2d --- /dev/null +++ b/models/hr_org/org_job.json @@ -0,0 +1,107 @@ +{ + "summary": [ + { + "name": "org_job", + "title": "职务(含F17横向职务)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "job_code", + "title": "职务编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "job_name", + "title": "职务名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "job_category", + "title": "职务类别(vertical/horizontal,F17)", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "vertical" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_job_code", + "fields": [ + "job_code" + ], + "unique": true + }, + { + "name": "idx_job_category", + "fields": [ + "job_category" + ] + } + ], + "codes": [ + { + "name": "job_category", + "source": "appcodes", + "code": "JOB_CATEGORY" + } + ] +} diff --git a/models/hr_org/org_leave.json b/models/hr_org/org_leave.json new file mode 100644 index 0000000..80c43f6 --- /dev/null +++ b/models/hr_org/org_leave.json @@ -0,0 +1,137 @@ +{ + "summary": [ + { + "name": "org_leave", + "title": "离职记录", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "leave_type", + "title": "离职类型(辞职/劝退/合同到期/退休)", + "type": "varchar", + "length": 24 + }, + { + "name": "leave_reason", + "title": "离职原因(字典LEAVE_REASON)", + "type": "varchar", + "length": 32 + }, + { + "name": "leave_date", + "title": "离职日期", + "type": "date" + }, + { + "name": "apply_type", + "title": "申请方式(self/proxy/manual)", + "type": "varchar", + "length": 16 + }, + { + "name": "status", + "title": "状态(pending_leave/left/cancelled)", + "type": "varchar", + "length": 16, + "default": "pending_leave" + }, + { + "name": "handover_status", + "title": "交接状态(pending/done)", + "type": "varchar", + "length": 16, + "default": "pending" + }, + { + "name": "certificate_file", + "title": "离职证明文件ID", + "type": "varchar", + "length": 64 + }, + { + "name": "blacklist_flag", + "title": "是否加入黑名单(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_employee_id", + "fields": [ + "employee_id" + ] + }, + { + "name": "idx_status", + "fields": [ + "status" + ] + }, + { + "name": "idx_leave_date", + "fields": [ + "leave_date" + ] + } + ], + "codes": [ + { + "name": "leave_reason", + "source": "appcodes", + "code": "LEAVE_REASON" + } + ] +} diff --git a/models/hr_org/org_leave_handover.json b/models/hr_org/org_leave_handover.json new file mode 100644 index 0000000..2cfea18 --- /dev/null +++ b/models/hr_org/org_leave_handover.json @@ -0,0 +1,82 @@ +{ + "summary": [ + { + "name": "org_leave_handover", + "title": "离职交接项", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "leave_id", + "title": "离职记录", + "type": "varchar", + "length": 32 + }, + { + "name": "item_type", + "title": "交接项类型(字典HANDOVER_TYPE,含dingtalk_resource占位D3)", + "type": "varchar", + "length": 32 + }, + { + "name": "item_content", + "title": "交接内容", + "type": "text" + }, + { + "name": "handover_to_id", + "title": "交接人", + "type": "varchar", + "length": 32 + }, + { + "name": "status", + "title": "状态(pending/done)", + "type": "varchar", + "length": 16, + "default": "pending" + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_leave_id", + "fields": [ + "leave_id" + ] + } + ], + "codes": [ + { + "name": "item_type", + "source": "appcodes", + "code": "HANDOVER_TYPE" + } + ] +} diff --git a/models/hr_org/org_position.json b/models/hr_org/org_position.json new file mode 100644 index 0000000..cf8f78b --- /dev/null +++ b/models/hr_org/org_position.json @@ -0,0 +1,123 @@ +{ + "summary": [ + { + "name": "org_position", + "title": "职位", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "position_code", + "title": "职位编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "position_name", + "title": "职位名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "job_id", + "title": "职务", + "type": "varchar", + "length": 32 + }, + { + "name": "sequence_id", + "title": "序列", + "type": "varchar", + "length": 32 + }, + { + "name": "category", + "title": "职位类别(字典POS_CATEGORY)", + "type": "varchar", + "length": 16 + }, + { + "name": "dept_ids", + "title": "适用部门(多值,逗号分隔)", + "type": "varchar", + "length": 512 + }, + { + "name": "description", + "title": "职位描述", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_position_code", + "fields": [ + "position_code" + ], + "unique": true + }, + { + "name": "idx_job_id", + "fields": [ + "job_id" + ] + } + ], + "codes": [ + { + "name": "category", + "source": "appcodes", + "code": "POS_CATEGORY" + } + ] +} diff --git a/models/hr_org/org_project.json b/models/hr_org/org_project.json new file mode 100644 index 0000000..b899072 --- /dev/null +++ b/models/hr_org/org_project.json @@ -0,0 +1,127 @@ +{ + "summary": [ + { + "name": "org_project", + "title": "项目式组织(F17)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "project_code", + "title": "项目编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "project_name", + "title": "项目名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "parent_id", + "title": "上级项目(自引用多层级)", + "type": "varchar", + "length": 32 + }, + { + "name": "owner_id", + "title": "负责人", + "type": "varchar", + "length": 32 + }, + { + "name": "start_date", + "title": "开始日期", + "type": "date" + }, + { + "name": "end_date", + "title": "结束日期", + "type": "date" + }, + { + "name": "project_status", + "title": "项目状态(字典PROJECT_STATUS)", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "attrs_json", + "title": "项目属性", + "type": "text" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_project_code", + "fields": [ + "project_code" + ], + "unique": true + }, + { + "name": "idx_parent_id", + "fields": [ + "parent_id" + ] + }, + { + "name": "idx_project_status", + "fields": [ + "project_status" + ] + } + ], + "codes": [ + { + "name": "project_status", + "source": "appcodes", + "code": "PROJECT_STATUS" + } + ] +} diff --git a/models/hr_org/org_project_post.json b/models/hr_org/org_project_post.json new file mode 100644 index 0000000..0e04937 --- /dev/null +++ b/models/hr_org/org_project_post.json @@ -0,0 +1,101 @@ +{ + "summary": [ + { + "name": "org_project_post", + "title": "项目任职(F17横向)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "project_id", + "title": "项目组织", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "job_id", + "title": "横向职务(org_job.job_category=horizontal)", + "type": "varchar", + "length": 32 + }, + { + "name": "start_date", + "title": "开始日期", + "type": "date" + }, + { + "name": "end_date", + "title": "结束日期", + "type": "date" + }, + { + "name": "status", + "title": "状态 active/expired", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_proj_emp_job", + "fields": [ + "project_id", + "employee_id", + "job_id", + "start_date" + ], + "unique": true + }, + { + "name": "idx_employee_id", + "fields": [ + "employee_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_regularization.json b/models/hr_org/org_regularization.json new file mode 100644 index 0000000..79f183e --- /dev/null +++ b/models/hr_org/org_regularization.json @@ -0,0 +1,99 @@ +{ + "summary": [ + { + "name": "org_regularization", + "title": "转正记录", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "probation_end_date", + "title": "试用期止(预计转正日)", + "type": "date" + }, + { + "name": "regular_date", + "title": "转正日期", + "type": "date" + }, + { + "name": "apply_type", + "title": "申请方式(self/proxy/manual)", + "type": "varchar", + "length": 16 + }, + { + "name": "status", + "title": "状态(pending/approved/rejected/cancelled)", + "type": "varchar", + "length": 16, + "default": "pending" + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_employee_id", + "fields": [ + "employee_id" + ] + }, + { + "name": "idx_regular_date", + "fields": [ + "regular_date" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_sequence.json b/models/hr_org/org_sequence.json new file mode 100644 index 0000000..321b1b4 --- /dev/null +++ b/models/hr_org/org_sequence.json @@ -0,0 +1,73 @@ +{ + "summary": [ + { + "name": "org_sequence", + "title": "序列", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "seq_category", + "title": "序列类别", + "type": "varchar", + "length": 32 + }, + { + "name": "seq_name", + "title": "序列名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "grade_level_ids", + "title": "关联职级类别(多值,逗号分隔)", + "type": "varchar", + "length": 512 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [], + "codes": [] +} diff --git a/models/hr_org/org_transfer.json b/models/hr_org/org_transfer.json new file mode 100644 index 0000000..3ab80b4 --- /dev/null +++ b/models/hr_org/org_transfer.json @@ -0,0 +1,100 @@ +{ + "summary": [ + { + "name": "org_transfer", + "title": "调动单(支持批量)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "transfer_type", + "title": "调动类型(字典TRANSFER_TYPE)", + "type": "varchar", + "length": 24 + }, + { + "name": "status", + "title": "状态(pending/confirmed/cancelled)", + "type": "varchar", + "length": 16, + "default": "pending" + }, + { + "name": "effective_date", + "title": "生效日期", + "type": "date" + }, + { + "name": "batch_no", + "title": "批次号", + "type": "varchar", + "length": 32 + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_status", + "fields": [ + "status" + ] + }, + { + "name": "idx_effective_date", + "fields": [ + "effective_date" + ] + } + ], + "codes": [ + { + "name": "transfer_type", + "source": "appcodes", + "code": "TRANSFER_TYPE" + } + ] +} diff --git a/models/hr_org/org_transfer_detail.json b/models/hr_org/org_transfer_detail.json new file mode 100644 index 0000000..b85cd86 --- /dev/null +++ b/models/hr_org/org_transfer_detail.json @@ -0,0 +1,92 @@ +{ + "summary": [ + { + "name": "org_transfer_detail", + "title": "调动明细(逐人)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "transfer_id", + "title": "调动单", + "type": "varchar", + "length": 32 + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "from_org_id", + "title": "原组织", + "type": "varchar", + "length": 32 + }, + { + "name": "to_org_id", + "title": "新组织", + "type": "varchar", + "length": 32 + }, + { + "name": "from_position_id", + "title": "原职位", + "type": "varchar", + "length": 32 + }, + { + "name": "to_position_id", + "title": "新职位", + "type": "varchar", + "length": 32 + }, + { + "name": "from_grade_level_id", + "title": "原职级", + "type": "varchar", + "length": 32 + }, + { + "name": "to_grade_level_id", + "title": "新职级", + "type": "varchar", + "length": 32 + }, + { + "name": "status", + "title": "状态(pending/done/cancelled)", + "type": "varchar", + "length": 16, + "default": "pending" + } + ], + "indexes": [ + { + "name": "idx_transfer_id", + "fields": [ + "transfer_id" + ] + }, + { + "name": "idx_employee_id", + "fields": [ + "employee_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_org/org_unit.json b/models/hr_org/org_unit.json new file mode 100644 index 0000000..7f99178 --- /dev/null +++ b/models/hr_org/org_unit.json @@ -0,0 +1,133 @@ +{ + "summary": [ + { + "name": "org_unit", + "title": "组织", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "org_code", + "title": "组织编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "org_name", + "title": "组织名称", + "type": "varchar", + "length": 128, + "notnull": true + }, + { + "name": "parent_id", + "title": "上级组织(自引用)", + "type": "varchar", + "length": 32 + }, + { + "name": "org_type", + "title": "组织类型(字典ORG_TYPE)", + "type": "varchar", + "length": 16 + }, + { + "name": "leader_id", + "title": "负责人", + "type": "varchar", + "length": 32 + }, + { + "name": "effective_date", + "title": "生效日期", + "type": "date" + }, + { + "name": "expire_date", + "title": "失效日期(空=长期)", + "type": "date" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_org_code", + "fields": [ + "org_code" + ], + "unique": true + }, + { + "name": "idx_parent_id", + "fields": [ + "parent_id" + ] + }, + { + "name": "idx_status", + "fields": [ + "status" + ] + } + ], + "codes": [ + { + "name": "org_type", + "source": "appcodes", + "code": "ORG_TYPE" + } + ] +} diff --git a/models/hr_org/org_unit_change.json b/models/hr_org/org_unit_change.json new file mode 100644 index 0000000..97e6827 --- /dev/null +++ b/models/hr_org/org_unit_change.json @@ -0,0 +1,81 @@ +{ + "summary": [ + { + "name": "org_unit_change", + "title": "组织变更时间轴", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "org_id", + "title": "组织", + "type": "varchar", + "length": 32 + }, + { + "name": "change_type", + "title": "变更类型(add/edit/disable/move/split/merge/delete)", + "type": "varchar", + "length": 16 + }, + { + "name": "before_json", + "title": "变更前快照", + "type": "text" + }, + { + "name": "after_json", + "title": "变更后快照", + "type": "text" + }, + { + "name": "effective_date", + "title": "生效日期", + "type": "date" + }, + { + "name": "operator_id", + "title": "操作人", + "type": "varchar", + "length": 32 + }, + { + "name": "flow_instance_id", + "title": "流程实例", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_org_id", + "fields": [ + "org_id" + ] + }, + { + "name": "idx_created_at", + "fields": [ + "created_at" + ] + } + ], + "codes": [] +} diff --git a/models/hr_roster/roster_employee.json b/models/hr_roster/roster_employee.json new file mode 100644 index 0000000..7729de8 --- /dev/null +++ b/models/hr_roster/roster_employee.json @@ -0,0 +1,302 @@ +{ + "summary": [ + { + "name": "roster_employee", + "title": "员工主档", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_no", + "title": "工号", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "name", + "title": "姓名", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "gender", + "title": "性别(字典GENDER)", + "type": "varchar", + "length": 16 + }, + { + "name": "id_type", + "title": "证件类型", + "type": "varchar", + "length": 16, + "default": "id_card" + }, + { + "name": "id_number_cipher", + "title": "证件号密文(敏感)", + "type": "varchar", + "length": 256, + "sensitive": true + }, + { + "name": "id_number_hash", + "title": "证件号哈希(确定性,唯一/黑名单匹配)", + "type": "varchar", + "length": 64, + "sensitive": true + }, + { + "name": "id_valid_from", + "title": "证件有效期起", + "type": "date" + }, + { + "name": "id_valid_to", + "title": "证件有效期止(长期=9999-12-31)", + "type": "date" + }, + { + "name": "id_authority", + "title": "证件签发机关", + "type": "varchar", + "length": 128 + }, + { + "name": "id_source", + "title": "证件信息来源(字典ID_SOURCE)", + "type": "varchar", + "length": 16, + "default": "manual" + }, + { + "name": "birthday", + "title": "出生日期", + "type": "date" + }, + { + "name": "phone", + "title": "手机号(明文存储,按角色脱敏)", + "type": "varchar", + "length": 20, + "sensitive": true + }, + { + "name": "email", + "title": "邮箱", + "type": "varchar", + "length": 128 + }, + { + "name": "org_id", + "title": "组织", + "type": "varchar", + "length": 32 + }, + { + "name": "position_id", + "title": "职位", + "type": "varchar", + "length": 32 + }, + { + "name": "job_id", + "title": "职务", + "type": "varchar", + "length": 32 + }, + { + "name": "grade_level_id", + "title": "职级", + "type": "varchar", + "length": 32 + }, + { + "name": "grade_rank_id", + "title": "职等", + "type": "varchar", + "length": 32 + }, + { + "name": "sequence_id", + "title": "序列", + "type": "varchar", + "length": 32 + }, + { + "name": "employee_type", + "title": "员工类型(字典EMP_TYPE)", + "type": "varchar", + "length": 16 + }, + { + "name": "employee_status", + "title": "员工状态(字典EMP_STATUS)", + "type": "varchar", + "length": 16 + }, + { + "name": "hire_date", + "title": "入职日期", + "type": "date" + }, + { + "name": "probation_end_date", + "title": "试用期止(预计转正日)", + "type": "date" + }, + { + "name": "regular_date", + "title": "转正日期", + "type": "date" + }, + { + "name": "leave_date", + "title": "离职日期", + "type": "date" + }, + { + "name": "company_id", + "title": "合同公司", + "type": "varchar", + "length": 32 + }, + { + "name": "work_location", + "title": "办公地点", + "type": "varchar", + "length": 128 + }, + { + "name": "direct_leader_id", + "title": "直属主管", + "type": "varchar", + "length": 32 + }, + { + "name": "prev_employee_id", + "title": "复职关联原档案ID", + "type": "varchar", + "length": 32 + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_employee_no", + "fields": [ + "employee_no" + ], + "unique": true + }, + { + "name": "uk_id_number_hash", + "fields": [ + "id_number_hash" + ], + "unique": true + }, + { + "name": "idx_org_id", + "fields": [ + "org_id" + ] + }, + { + "name": "idx_status", + "fields": [ + "employee_status" + ] + }, + { + "name": "idx_hire_date", + "fields": [ + "hire_date" + ] + }, + { + "name": "idx_probation_end", + "fields": [ + "probation_end_date" + ] + }, + { + "name": "idx_direct_leader", + "fields": [ + "direct_leader_id" + ] + }, + { + "name": "idx_prev_employee", + "fields": [ + "prev_employee_id" + ] + } + ], + "codes": [ + { + "name": "gender", + "source": "appcodes", + "code": "GENDER" + }, + { + "name": "employee_type", + "source": "appcodes", + "code": "EMP_TYPE" + }, + { + "name": "employee_status", + "source": "appcodes", + "code": "EMP_STATUS" + }, + { + "name": "id_source", + "source": "appcodes", + "code": "ID_SOURCE" + }, + { + "name": "id_type", + "source": "appcodes", + "code": "ID_TYPE" + } + ] +} diff --git a/models/hr_roster/roster_empno_rule.json b/models/hr_roster/roster_empno_rule.json new file mode 100644 index 0000000..0a292d8 --- /dev/null +++ b/models/hr_roster/roster_empno_rule.json @@ -0,0 +1,91 @@ +{ + "summary": [ + { + "name": "roster_empno_rule", + "title": "工号规则", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "rule_name", + "title": "规则名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "prefix", + "title": "工号前缀", + "type": "varchar", + "length": 16 + }, + { + "name": "match_field", + "title": "匹配字段(如company_id)", + "type": "varchar", + "length": 32 + }, + { + "name": "match_value", + "title": "匹配值", + "type": "varchar", + "length": 64 + }, + { + "name": "seq_length", + "title": "流水号长度", + "type": "int", + "default": 4 + }, + { + "name": "current_seq", + "title": "当前流水号", + "type": "int", + "default": 0 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [], + "codes": [] +} diff --git a/models/hr_roster/roster_field_def.json b/models/hr_roster/roster_field_def.json new file mode 100644 index 0000000..e2cfca6 --- /dev/null +++ b/models/hr_roster/roster_field_def.json @@ -0,0 +1,134 @@ +{ + "summary": [ + { + "name": "roster_field_def", + "title": "花名册字段定义", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "group_id", + "title": "字段分组", + "type": "varchar", + "length": 32 + }, + { + "name": "field_code", + "title": "字段编码", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "field_name", + "title": "字段名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "field_type", + "title": "字段类型(text/number/date/select/multiselect/file)", + "type": "varchar", + "length": 16 + }, + { + "name": "options_json", + "title": "选项定义(字典code或自定义项)", + "type": "text" + }, + { + "name": "required", + "title": "是否必填(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "sensitive", + "title": "是否敏感(0/1,驱动脱敏与可见性)", + "type": "int", + "default": 0 + }, + { + "name": "editable_self", + "title": "员工自助可编辑(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "need_audit", + "title": "自助修改需审核(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "apply_types", + "title": "适用员工类型JSON", + "type": "text" + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_field_code", + "fields": [ + "field_code" + ], + "unique": true + }, + { + "name": "idx_group_id", + "fields": [ + "group_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_roster/roster_field_group.json b/models/hr_roster/roster_field_group.json new file mode 100644 index 0000000..1f348f3 --- /dev/null +++ b/models/hr_roster/roster_field_group.json @@ -0,0 +1,82 @@ +{ + "summary": [ + { + "name": "roster_field_group", + "title": "花名册字段分组", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "group_code", + "title": "分组编码", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "group_name", + "title": "分组名称(工作信息/个人信息/绩效结果/培训记录)", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "sort_no", + "title": "排序号", + "type": "int", + "default": 0 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_group_code", + "fields": [ + "group_code" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_roster/roster_field_value.json b/models/hr_roster/roster_field_value.json new file mode 100644 index 0000000..9d9256f --- /dev/null +++ b/models/hr_roster/roster_field_value.json @@ -0,0 +1,87 @@ +{ + "summary": [ + { + "name": "roster_field_value", + "title": "花名册字段值(EAV)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "field_id", + "title": "字段定义", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "value_text", + "title": "文本值", + "type": "text" + }, + { + "name": "value_number", + "title": "数值", + "type": "decimal", + "precision": 18, + "scale": 4 + }, + { + "name": "value_date", + "title": "日期值", + "type": "date" + }, + { + "name": "value_file", + "title": "附件值(文件ID)", + "type": "varchar", + "length": 64 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_employee_field", + "fields": [ + "employee_id", + "field_id" + ], + "unique": true + }, + { + "name": "idx_field_id", + "fields": [ + "field_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_roster/roster_timeline.json b/models/hr_roster/roster_timeline.json new file mode 100644 index 0000000..c81e770 --- /dev/null +++ b/models/hr_roster/roster_timeline.json @@ -0,0 +1,77 @@ +{ + "summary": [ + { + "name": "roster_timeline", + "title": "员工时间轴", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_id", + "title": "员工档案", + "type": "varchar", + "length": 32 + }, + { + "name": "event_type", + "title": "事件类型(entry/regular/transfer/leave/concurrent/contract/field_change/headcount/project/migrate)", + "type": "varchar", + "length": 24 + }, + { + "name": "event_date", + "title": "事件日期", + "type": "date" + }, + { + "name": "title", + "title": "标题", + "type": "varchar", + "length": 128 + }, + { + "name": "content_json", + "title": "内容JSON", + "type": "text" + }, + { + "name": "source_type", + "title": "来源类型", + "type": "varchar", + "length": 32 + }, + { + "name": "source_id", + "title": "来源ID", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_emp_date", + "fields": [ + "employee_id", + "event_date" + ] + } + ], + "codes": [] +} diff --git a/models/hr_roster/roster_type_rule.json b/models/hr_roster/roster_type_rule.json new file mode 100644 index 0000000..e1a2d6f --- /dev/null +++ b/models/hr_roster/roster_type_rule.json @@ -0,0 +1,80 @@ +{ + "summary": [ + { + "name": "roster_type_rule", + "title": "员工类型字段规则", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "employee_type", + "title": "员工类型(字典EMP_TYPE)", + "type": "varchar", + "length": 16, + "notnull": true + }, + { + "name": "field_rules_json", + "title": "按类型必填/隐藏字段规则", + "type": "text" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_employee_type", + "fields": [ + "employee_type" + ], + "unique": true + } + ], + "codes": [ + { + "name": "employee_type", + "source": "appcodes", + "code": "EMP_TYPE" + } + ] +} diff --git a/models/hr_system/sys_announcement.json b/models/hr_system/sys_announcement.json new file mode 100644 index 0000000..05c7975 --- /dev/null +++ b/models/hr_system/sys_announcement.json @@ -0,0 +1,82 @@ +{ + "summary": [ + { + "name": "sys_announcement", + "title": "企业公告(F15)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "title", + "title": "标题", + "type": "varchar", + "length": 256, + "notnull": true + }, + { + "name": "content", + "title": "内容", + "type": "text" + }, + { + "name": "publish_scope_json", + "title": "发布范围", + "type": "text" + }, + { + "name": "publish_time", + "title": "发布时间", + "type": "timestamp" + }, + { + "name": "status", + "title": "状态(draft/published/offline)", + "type": "varchar", + "length": 16, + "default": "draft" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_status", + "fields": [ + "status" + ] + } + ], + "codes": [] +} diff --git a/models/hr_system/sys_audit_log.json b/models/hr_system/sys_audit_log.json new file mode 100644 index 0000000..0f650b8 --- /dev/null +++ b/models/hr_system/sys_audit_log.json @@ -0,0 +1,120 @@ +{ + "summary": [ + { + "name": "sys_audit_log", + "title": "操作日志(只增,F12)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "module", + "title": "模块(hr-org/hr-roster/...)", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "target_type", + "title": "对象类型(roster_employee/org_unit/...)", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "target_id", + "title": "对象ID", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "operation", + "title": "操作类型(字典AUDIT_OP)", + "type": "varchar", + "length": 16, + "notnull": true + }, + { + "name": "operator_id", + "title": "操作人", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "operator_name", + "title": "操作人姓名", + "type": "varchar", + "length": 64, + "default": "" + }, + { + "name": "before_json", + "title": "变更前快照", + "type": "text" + }, + { + "name": "after_json", + "title": "变更后快照", + "type": "text" + }, + { + "name": "request_ip", + "title": "请求IP", + "type": "varchar", + "length": 64 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_target", + "fields": [ + "target_type", + "target_id" + ] + }, + { + "name": "idx_operator", + "fields": [ + "operator_id" + ] + }, + { + "name": "idx_created_at", + "fields": [ + "created_at" + ] + }, + { + "name": "idx_module_op", + "fields": [ + "module", + "operation" + ] + } + ], + "codes": [ + { + "name": "operation", + "source": "appcodes", + "code": "AUDIT_OP" + } + ] +} diff --git a/models/hr_system/sys_care_config.json b/models/hr_system/sys_care_config.json new file mode 100644 index 0000000..57a6fe2 --- /dev/null +++ b/models/hr_system/sys_care_config.json @@ -0,0 +1,68 @@ +{ + "summary": [ + { + "name": "sys_care_config", + "title": "关怀配置(生日/周年,F15)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "care_type", + "title": "关怀类型(birthday/anniversary)", + "type": "varchar", + "length": 16, + "notnull": true + }, + { + "name": "template", + "title": "文案模板", + "type": "text" + }, + { + "name": "enable", + "title": "启用(0/1)", + "type": "int", + "default": 1 + }, + { + "name": "push_target", + "title": "推送对象(employee/leader)", + "type": "varchar", + "length": 16, + "default": "employee" + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_care_type", + "fields": [ + "care_type" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_system/sys_data_scope.json b/models/hr_system/sys_data_scope.json new file mode 100644 index 0000000..f2d0584 --- /dev/null +++ b/models/hr_system/sys_data_scope.json @@ -0,0 +1,80 @@ +{ + "summary": [ + { + "name": "sys_data_scope", + "title": "数据范围(F11)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "admin_user_id", + "title": "管理员用户", + "type": "varchar", + "length": 32 + }, + { + "name": "scope_type", + "title": "范围类型(org/field)", + "type": "varchar", + "length": 16 + }, + { + "name": "org_ids_json", + "title": "组织维度(含子树)", + "type": "text" + }, + { + "name": "field_ids_json", + "title": "花名册字段维度", + "type": "text" + }, + { + "name": "remark", + "title": "备注", + "type": "text" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_admin_user", + "fields": [ + "admin_user_id" + ] + } + ], + "codes": [] +} diff --git a/models/hr_system/sys_message.json b/models/hr_system/sys_message.json new file mode 100644 index 0000000..e15811a --- /dev/null +++ b/models/hr_system/sys_message.json @@ -0,0 +1,97 @@ +{ + "summary": [ + { + "name": "sys_message", + "title": "站内消息(F15)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "receiver_id", + "title": "接收人", + "type": "varchar", + "length": 32 + }, + { + "name": "msg_type", + "title": "消息类型(todo/approval/remind/care/notice)", + "type": "varchar", + "length": 16 + }, + { + "name": "title", + "title": "标题", + "type": "varchar", + "length": 256 + }, + { + "name": "content", + "title": "内容", + "type": "text" + }, + { + "name": "biz_type", + "title": "业务类型", + "type": "varchar", + "length": 32 + }, + { + "name": "biz_id", + "title": "业务ID", + "type": "varchar", + "length": 32 + }, + { + "name": "send_channel", + "title": "发送渠道(字典MSG_CHANNEL,一期仅site;D9)", + "type": "varchar", + "length": 16, + "default": "site" + }, + { + "name": "is_read", + "title": "是否已读(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_receiver_read", + "fields": [ + "receiver_id", + "is_read" + ] + }, + { + "name": "idx_created_at", + "fields": [ + "created_at" + ] + } + ], + "codes": [ + { + "name": "send_channel", + "source": "appcodes", + "code": "MSG_CHANNEL" + } + ] +} diff --git a/models/hr_system/sys_openapp.json b/models/hr_system/sys_openapp.json new file mode 100644 index 0000000..0d2ce95 --- /dev/null +++ b/models/hr_system/sys_openapp.json @@ -0,0 +1,93 @@ +{ + "summary": [ + { + "name": "sys_openapp", + "title": "API开放应用(一期预留,FEAT-B1-01⑦)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "app_key", + "title": "应用Key", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "app_secret_cipher", + "title": "应用密钥密文", + "type": "varchar", + "length": 256, + "sensitive": true + }, + { + "name": "app_name", + "title": "应用名称", + "type": "varchar", + "length": 128 + }, + { + "name": "scope_json", + "title": "授权资源范围", + "type": "text" + }, + { + "name": "rate_limit", + "title": "限流(req/s,默认10)", + "type": "int", + "default": 10 + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_app_key", + "fields": [ + "app_key" + ], + "unique": true + } + ], + "codes": [] +} diff --git a/models/hr_system/sys_policy.json b/models/hr_system/sys_policy.json new file mode 100644 index 0000000..9a2ea59 --- /dev/null +++ b/models/hr_system/sys_policy.json @@ -0,0 +1,89 @@ +{ + "summary": [ + { + "name": "sys_policy", + "title": "企业政策(F15)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "title", + "title": "标题", + "type": "varchar", + "length": 256, + "notnull": true + }, + { + "name": "file_path", + "title": "政策文件(文件ID)", + "type": "varchar", + "length": 256 + }, + { + "name": "view_scope_json", + "title": "查阅范围", + "type": "text" + }, + { + "name": "downloadable", + "title": "允许下载(0/1)", + "type": "int", + "default": 0 + }, + { + "name": "publish_time", + "title": "发布时间", + "type": "timestamp" + }, + { + "name": "status", + "title": "状态(draft/published/offline)", + "type": "varchar", + "length": 16, + "default": "draft" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "idx_status", + "fields": [ + "status" + ] + } + ], + "codes": [] +} diff --git a/models/hr_system/sys_remind_rule.json b/models/hr_system/sys_remind_rule.json new file mode 100644 index 0000000..6e05954 --- /dev/null +++ b/models/hr_system/sys_remind_rule.json @@ -0,0 +1,101 @@ +{ + "summary": [ + { + "name": "sys_remind_rule", + "title": "通用提醒规则(F15)", + "pk": [ + "id" + ], + "charset": "utf8mb4", + "collate": "utf8mb4_unicode_ci" + } + ], + "fields": [ + { + "name": "id", + "title": "主键", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "scene_code", + "title": "提醒场景(字典REMIND_SCENE,≥6类)", + "type": "varchar", + "length": 32, + "notnull": true + }, + { + "name": "rule_name", + "title": "规则名称", + "type": "varchar", + "length": 64, + "notnull": true + }, + { + "name": "days_before", + "title": "提前天数", + "type": "int", + "default": 7 + }, + { + "name": "content_template", + "title": "提醒内容模板", + "type": "text" + }, + { + "name": "target_role", + "title": "提醒对象(admin/employee/leader)", + "type": "varchar", + "length": 16, + "default": "admin" + }, + { + "name": "status", + "title": "状态 active/inactive", + "type": "varchar", + "length": 16, + "notnull": true, + "default": "active" + }, + { + "name": "created_by", + "title": "创建人", + "type": "varchar", + "length": 32 + }, + { + "name": "updated_by", + "title": "更新人", + "type": "varchar", + "length": 32 + }, + { + "name": "created_at", + "title": "创建时间", + "type": "timestamp" + }, + { + "name": "updated_at", + "title": "更新时间", + "type": "timestamp" + } + ], + "indexes": [ + { + "name": "uk_scene_rule", + "fields": [ + "scene_code", + "rule_name" + ], + "unique": true + } + ], + "codes": [ + { + "name": "scene_code", + "source": "appcodes", + "code": "REMIND_SCENE" + } + ] +} diff --git a/scripts/gen_models.py b/scripts/gen_models.py index 3544680..de80095 100644 --- a/scripts/gen_models.py +++ b/scripts/gen_models.py @@ -155,8 +155,8 @@ ORG = { "title": "黑名单", "log": True, "fields": [ V("id", "主键", 32, notnull=True), V("name", "姓名", 64), - V("id_number_hash", "证件号哈希(确定性,匹配用)", 64), - V("id_number_cipher", "证件号密文", 256), + V("id_number_hash", "证件号哈希(确定性,匹配用)", 64, sensitive=True), + V("id_number_cipher", "证件号密文", 256, sensitive=True), V("reason", "拉黑原因", 256), V("source", "来源(leave/manual)", 16), V("source_employee_id", "来源员工档案", 32), @@ -183,8 +183,8 @@ ORG = { V("employee_id", "员工档案(可空,待入职)", 32), V("name", "姓名", 64, notnull=True), V("id_type", "证件类型(字典ID_TYPE)", 16, default="id_card"), - V("id_number_cipher", "证件号密文", 256), - V("id_number_hash", "证件号哈希", 64), + V("id_number_cipher", "证件号密文", 256, sensitive=True), + V("id_number_hash", "证件号哈希", 64, sensitive=True), F("id_valid_from", "证件有效期起", "date"), F("id_valid_to", "证件有效期止(长期=9999-12-31)", "date"), V("id_authority", "证件签发机关", 128), @@ -742,7 +742,7 @@ SYS = { "title": "API开放应用(一期预留,FEAT-B1-01⑦)", "fields": [ V("id", "主键", 32, notnull=True), V("app_key", "应用Key", 64, notnull=True), - V("app_secret_cipher", "应用密钥密文", 256), + V("app_secret_cipher", "应用密钥密文", 256, sensitive=True), V("app_name", "应用名称", 128), F("scope_json", "授权资源范围", "text"), F("rate_limit", "限流(req/s,默认10)", "int", default=10), diff --git a/scripts/json2ddl.py b/scripts/json2ddl.py index 301bc19..58b21d8 100644 --- a/scripts/json2ddl.py +++ b/scripts/json2ddl.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- """json2ddl 等价实现(ocai database-table-definition-spec): 读取 models/{module}/*.json(summary/fields/indexes/codes),生成幂等 MySQL/MariaDB DDL。 -幂等性:CREATE TABLE IF NOT EXISTS;索引先查 information_schema 再按需补建(可重跑)。 +幂等性:CREATE TABLE IF NOT EXISTS;索引随建表语句一并声明,可整体重跑不报错。 用法:python3 scripts/json2ddl.py [输出sql文件] """ import json, os, sys, glob @@ -26,7 +26,11 @@ def render_field(f): if "default" in f and t != "timestamp": dv = f["default"] col += f" DEFAULT '{dv}'" if isinstance(dv, str) else f" DEFAULT {dv}" - col += f" COMMENT '{f['title']}'" + title = f["title"] + if f.get("sensitive"): + title += "【敏感:sensitive,落库加密/脱敏展示】" + title = title.replace("'", " ") + col += f" COMMENT '{title}'" return col def render_index_sql(table, idx): @@ -45,23 +49,18 @@ def gen_table_ddl(path): lines.append(render_index_sql(table, idx)) charset = s.get("charset", "utf8mb4") collate = s.get("collate", "utf8mb4_unicode_ci") - title = s.get("title", table) + title = str(s.get("title", table)).replace("'", " ") return table, (f"CREATE TABLE IF NOT EXISTS `{table}` (\n" + ",\n".join(lines) + f"\n) ENGINE=InnoDB DEFAULT CHARSET={charset} COLLATE={collate} COMMENT='{title}';") -def gen_index_guard_sql(table, idx): - """运行时补索引(建表时已含;此处供重跑补漏,apply_ddl.py 使用)""" - kind = "UNIQUE INDEX" if idx.get("unique") else "INDEX" - cols = ",".join(f"`{c}`" for c in idx["fields"]) - return f"ALTER TABLE `{table}` ADD {kind} `{idx['name']}` ({cols});" - def main(): src = sys.argv[1] if len(sys.argv) > 1 else "models" out = sys.argv[2] if len(sys.argv) > 2 else None parts = ["-- 人事系统 hr-web 批次1 DDL(json2ddl 生成,幂等可重跑)", "-- 来源:models/*.json(database-design.md v3.0,49 表);目标库:hrs(MariaDB)", - "-- 执行:mysql -utest -ptest123 hrs < mysql.ddl.sql 或 python3 scripts/apply_ddl.py", - "SET NAMES utf8mb4;", ""] + "-- 执行:mysql -utest -ptest123 hrs < sql/V001__init_hrs.sql 或 python3 scripts/apply_ddl.py", + "SET NAMES utf8mb4;", + "SET FOREIGN_KEY_CHECKS=0;", ""] n = 0 for moddir in sorted(glob.glob(os.path.join(src, "*"))): if not os.path.isdir(moddir): @@ -76,9 +75,11 @@ def main(): parts.append(ddl) parts.append("") n += 1 + parts.append("SET FOREIGN_KEY_CHECKS=1;") parts.append(f"-- 共 {n} 张表") sql = "\n".join(parts) + "\n" if out: + os.makedirs(os.path.dirname(out) or ".", exist_ok=True) with open(out, "w", encoding="utf-8") as f: f.write(sql) print(f"生成 {out}:{n} 张表") diff --git a/sql/V001__init_hrs.sql b/sql/V001__init_hrs.sql new file mode 100644 index 0000000..94a68d6 --- /dev/null +++ b/sql/V001__init_hrs.sql @@ -0,0 +1,906 @@ +-- 人事系统 hr-web 批次1 DDL(json2ddl 生成,幂等可重跑) +-- 来源:models/*.json(database-design.md v3.0,49 表);目标库:hrs(MariaDB) +-- 执行:mysql -utest -ptest123 hrs < sql/V001__init_hrs.sql 或 python3 scripts/apply_ddl.py +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS=0; + +-- ===== hr_contract(4 张)===== +-- contract_info +CREATE TABLE IF NOT EXISTS `contract_info` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`contract_no` VARCHAR(64) NOT NULL COMMENT '合同编号', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`type_id` VARCHAR(32) COMMENT '合同类型', +`company_id` VARCHAR(32) COMMENT '签约公司(org_contract_company)', +`template_id` VARCHAR(32) COMMENT '合同模板', +`start_date` DATE COMMENT '合同起始日', +`end_date` DATE COMMENT '合同到期日', +`sign_date` DATE COMMENT '签订日期', +`contract_status` VARCHAR(16) DEFAULT 'active' COMMENT '合同状态(字典CONTRACT_STATUS)', +`file_path` VARCHAR(256) COMMENT '合同文件(文件ID)', +`text_file_path` VARCHAR(256) COMMENT '模板生成合同文本(D4)', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`remind_rule_id` VARCHAR(32) COMMENT '到期提醒规则', +`esign_status` VARCHAR(16) DEFAULT 'not_enabled' COMMENT '电子签状态(字典ESIGN_STATUS,D4预留)', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_employee` (`employee_id`), + KEY `idx_end_date` (`end_date`), + KEY `idx_status` (`contract_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同台账'; + +-- contract_remind_rule +CREATE TABLE IF NOT EXISTS `contract_remind_rule` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称', +`days_before` INT DEFAULT 30 COMMENT '提前天数', +`target_role` VARCHAR(16) DEFAULT 'hr' COMMENT '提醒对象(self/leader/hr)', +`content_template` TEXT COMMENT '提醒内容模板', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同到期提醒规则'; + +-- contract_template +CREATE TABLE IF NOT EXISTS `contract_template` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`template_name` VARCHAR(128) NOT NULL COMMENT '模板名称', +`type_id` VARCHAR(32) COMMENT '合同类型', +`file_path` VARCHAR(256) COMMENT '模板文件(文件ID)', +`field_marks_json` TEXT COMMENT '占位符映射', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同模板'; + +-- contract_type +CREATE TABLE IF NOT EXISTS `contract_type` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`type_code` VARCHAR(32) NOT NULL COMMENT '类型编码', +`type_name` VARCHAR(64) NOT NULL COMMENT '类型名称(劳动合同/保密协议/竞业协议…)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_type_code` (`type_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同类型'; + +-- ===== hr_flow(7 张)===== +-- flow_def +CREATE TABLE IF NOT EXISTS `flow_def` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`flow_code` VARCHAR(64) NOT NULL COMMENT '流程编码', +`flow_name` VARCHAR(128) NOT NULL COMMENT '流程名称', +`form_id` VARCHAR(32) COMMENT '表单定义', +`biz_type` VARCHAR(32) COMMENT '业务类型(字典FLOW_BIZ_TYPE)', +`match_cond_json` TEXT COMMENT '匹配条件(员工类型/部门)', +`version` INT DEFAULT 1 COMMENT '版本', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_flow_code` (`flow_code`), + KEY `idx_biz_type` (`biz_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程定义'; + +-- flow_form_def +CREATE TABLE IF NOT EXISTS `flow_form_def` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`form_code` VARCHAR(64) NOT NULL COMMENT '表单编码', +`form_name` VARCHAR(128) NOT NULL COMMENT '表单名称', +`biz_type` VARCHAR(32) COMMENT '业务类型(字典FLOW_BIZ_TYPE,含attendance_*桩位)', +`fields_json` TEXT COMMENT '字段定义(引用roster_field_def或自定义项)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_form_code` (`form_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表单定义'; + +-- flow_instance +CREATE TABLE IF NOT EXISTS `flow_instance` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`inst_no` VARCHAR(32) NOT NULL COMMENT '审批编号', +`flow_id` VARCHAR(32) NOT NULL COMMENT '流程定义', +`form_id` VARCHAR(32) NOT NULL COMMENT '表单定义', +`biz_type` VARCHAR(32) NOT NULL COMMENT '业务类型(字典FLOW_BIZ_TYPE)', +`biz_id` VARCHAR(32) COMMENT '业务单据ID', +`title` VARCHAR(256) COMMENT '标题', +`initiator_id` VARCHAR(32) NOT NULL COMMENT '发起人', +`inst_status` VARCHAR(16) NOT NULL DEFAULT 'running' COMMENT '实例状态(字典INST_STATUS)', +`submit_data_json` TEXT COMMENT '提交表单数据快照', +`start_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发起时间', +`finish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '结束时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inst_no` (`inst_no`), + KEY `idx_biz` (`biz_type`,`biz_id`), + KEY `idx_initiator` (`initiator_id`), + KEY `idx_status` (`inst_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程实例'; + +-- flow_node_def +CREATE TABLE IF NOT EXISTS `flow_node_def` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`flow_id` VARCHAR(32) COMMENT '流程定义', +`node_seq` INT DEFAULT 1 COMMENT '节点序号', +`node_name` VARCHAR(64) COMMENT '节点名称', +`approver_type` VARCHAR(16) COMMENT '审批人类型(user/role/leader/admin/flow_role)', +`approver_value` VARCHAR(256) COMMENT '审批人取值', +`pass_rule` VARCHAR(8) DEFAULT 'all' COMMENT '通过规则(any/all)', +`field_perm_json` TEXT COMMENT '节点字段可读写权限', +`cc_to` VARCHAR(512) COMMENT '抄送对象', + PRIMARY KEY (`id`), + KEY `idx_flow_id` (`flow_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程节点'; + +-- flow_op_log +CREATE TABLE IF NOT EXISTS `flow_op_log` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`instance_id` VARCHAR(32) COMMENT '流程实例', +`op_type` VARCHAR(16) COMMENT '操作类型(submit/approve/reject/forward/cancel/withdraw)', +`operator_id` VARCHAR(32) COMMENT '操作人', +`comment` TEXT COMMENT '意见', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_instance` (`instance_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流转日志'; + +-- flow_role +CREATE TABLE IF NOT EXISTS `flow_role` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`role_name` VARCHAR(64) NOT NULL COMMENT '角色名称', +`flow_scope_json` TEXT COMMENT '可用流程范围', +`op_perm_json` TEXT COMMENT '操作权限', +`data_scope_json` TEXT COMMENT '数据查看范围', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批角色'; + +-- flow_task +CREATE TABLE IF NOT EXISTS `flow_task` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`instance_id` VARCHAR(32) COMMENT '流程实例', +`node_id` VARCHAR(32) COMMENT '节点定义', +`node_name` VARCHAR(64) COMMENT '节点名称', +`approver_id` VARCHAR(32) COMMENT '审批人', +`task_status` VARCHAR(16) DEFAULT 'pending' COMMENT '任务状态(pending/approved/rejected/forwarded/cancelled)', +`comment` TEXT COMMENT '审批意见', +`handle_time` TIMESTAMP NULL DEFAULT NULL COMMENT '处理时间', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_approver_status` (`approver_id`,`task_status`), + KEY `idx_instance` (`instance_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批任务(待办/已办)'; + +-- ===== hr_org(23 张)===== +-- headcount_item +CREATE TABLE IF NOT EXISTS `headcount_item` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`scheme_id` VARCHAR(32) NOT NULL COMMENT '编制方案', +`scope_json` TEXT NOT NULL COMMENT '占编范围条件(员工类型/状态/职位/职级/自定义字段)', +`seg_json` TEXT COMMENT '细分维度(空=整体)', +`head_limit` INT NOT NULL DEFAULT 0 COMMENT '编制数量', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_scheme_id` (`scheme_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制细分项(F16)'; + +-- headcount_snapshot +CREATE TABLE IF NOT EXISTS `headcount_snapshot` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`scheme_id` VARCHAR(32) NOT NULL COMMENT '编制方案', +`item_id` VARCHAR(32) NOT NULL COMMENT '细分项', +`snap_date` DATE NOT NULL COMMENT '快照日期', +`used_count` INT NOT NULL DEFAULT 0 COMMENT '占编人数', +`over_count` INT NOT NULL DEFAULT 0 COMMENT '超编数(0=未超编)', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_scheme_item_date` (`scheme_id`,`item_id`,`snap_date`), + KEY `idx_snap_date` (`snap_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制快照(F16历史回溯/实时计数)'; + +-- org_blacklist +CREATE TABLE IF NOT EXISTS `org_blacklist` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`name` VARCHAR(64) COMMENT '姓名', +`id_number_hash` VARCHAR(64) COMMENT '证件号哈希(确定性,匹配用)【敏感:sensitive,落库加密/脱敏展示】', +`id_number_cipher` VARCHAR(256) COMMENT '证件号密文【敏感:sensitive,落库加密/脱敏展示】', +`reason` VARCHAR(256) COMMENT '拉黑原因', +`source` VARCHAR(16) COMMENT '来源(leave/manual)', +`source_employee_id` VARCHAR(32) COMMENT '来源员工档案', +`created_by` VARCHAR(32) COMMENT '创建人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_id_number_hash` (`id_number_hash`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='黑名单'; + +-- org_concurrent_post +CREATE TABLE IF NOT EXISTS `org_concurrent_post` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`org_id` VARCHAR(32) COMMENT '兼岗组织', +`position_id` VARCHAR(32) COMMENT '兼岗职位', +`start_date` DATE COMMENT '开始日期', +`end_date` DATE COMMENT '结束日期', +`status` VARCHAR(16) DEFAULT 'awaiting' COMMENT '状态(awaiting/active/expired)', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_employee_id` (`employee_id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='兼岗'; + +-- org_contract_company +CREATE TABLE IF NOT EXISTS `org_contract_company` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`company_code` VARCHAR(32) NOT NULL COMMENT '公司编码', +`company_name` VARCHAR(128) NOT NULL COMMENT '公司名称', +`credit_code` VARCHAR(32) COMMENT '统一社会信用代码', +`legal_person` VARCHAR(64) COMMENT '法人', +`contact_info` VARCHAR(128) COMMENT '联系方式', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_company_code` (`company_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同公司'; + +-- org_entry +CREATE TABLE IF NOT EXISTS `org_entry` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) COMMENT '员工档案(可空,待入职)', +`name` VARCHAR(64) NOT NULL COMMENT '姓名', +`id_type` VARCHAR(16) DEFAULT 'id_card' COMMENT '证件类型(字典ID_TYPE)', +`id_number_cipher` VARCHAR(256) COMMENT '证件号密文【敏感:sensitive,落库加密/脱敏展示】', +`id_number_hash` VARCHAR(64) COMMENT '证件号哈希【敏感:sensitive,落库加密/脱敏展示】', +`id_valid_from` DATE COMMENT '证件有效期起', +`id_valid_to` DATE COMMENT '证件有效期止(长期=9999-12-31)', +`id_authority` VARCHAR(128) COMMENT '证件签发机关', +`id_source` VARCHAR(16) DEFAULT 'manual' COMMENT '证件信息来源(字典ID_SOURCE,D1手工录入)', +`employee_type` VARCHAR(16) COMMENT '员工类型(字典EMP_TYPE)', +`org_id` VARCHAR(32) COMMENT '入职组织', +`position_id` VARCHAR(32) COMMENT '职位', +`company_id` VARCHAR(32) COMMENT '合同公司', +`work_location` VARCHAR(128) COMMENT '办公地点', +`hire_date` DATE COMMENT '入职日期', +`entry_status` VARCHAR(24) DEFAULT 'pending_approval' COMMENT '入职状态(字典ENTRY_STATUS)', +`is_rehire` INT DEFAULT 0 COMMENT '是否复职(0/1)', +`register_status` VARCHAR(16) DEFAULT 'none' COMMENT '登记表状态(none/invited/filled)', +`register_token` VARCHAR(64) COMMENT '登记表token(扫码入职降级)', +`register_url` VARCHAR(256) COMMENT '登记表链接', +`qrcode_file` VARCHAR(64) COMMENT '登记二维码图片(文件ID)', +`register_expire` TIMESTAMP NULL DEFAULT NULL COMMENT '登记链接过期时间', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_entry_status` (`entry_status`), + KEY `idx_hire_date` (`hire_date`), + KEY `idx_flow_instance_id` (`flow_instance_id`), + UNIQUE KEY `uk_register_token` (`register_token`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职记录'; + +-- org_field_def +CREATE TABLE IF NOT EXISTS `org_field_def` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`field_code` VARCHAR(64) NOT NULL COMMENT '字段编码', +`field_name` VARCHAR(64) NOT NULL COMMENT '字段名称', +`field_type` VARCHAR(16) COMMENT '字段类型(text/number/date/select/file)', +`options_json` TEXT COMMENT '选项定义JSON', +`required` INT DEFAULT 0 COMMENT '是否必填(0/1)', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_field_code` (`field_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织自定义字段定义'; + +-- org_field_value +CREATE TABLE IF NOT EXISTS `org_field_value` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`org_id` VARCHAR(32) NOT NULL COMMENT '组织', +`field_id` VARCHAR(32) NOT NULL COMMENT '字段定义', +`value_text` TEXT COMMENT '文本值', +`value_date` DATE COMMENT '日期值', +`value_file` VARCHAR(64) COMMENT '附件值(文件ID)', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_org_field` (`org_id`,`field_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织字段值(EAV)'; + +-- org_grade_level +CREATE TABLE IF NOT EXISTS `org_grade_level` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`level_code` VARCHAR(32) NOT NULL COMMENT '职级编码', +`level_name` VARCHAR(64) NOT NULL COMMENT '职级名称', +`level_category` VARCHAR(32) COMMENT '职级类别', +`start_rank_id` VARCHAR(32) COMMENT '起始职等', +`end_rank_id` VARCHAR(32) COMMENT '结束职等', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_level_code` (`level_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职级'; + +-- org_grade_rank +CREATE TABLE IF NOT EXISTS `org_grade_rank` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`rank_code` VARCHAR(32) NOT NULL COMMENT '职等编码', +`rank_name` VARCHAR(64) NOT NULL COMMENT '职等名称', +`rank_level` INT COMMENT '职等层级', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_rank_code` (`rank_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职等'; + +-- org_headcount_scheme +CREATE TABLE IF NOT EXISTS `org_headcount_scheme` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`scheme_name` VARCHAR(128) NOT NULL COMMENT '方案名称', +`cycle_type` VARCHAR(16) NOT NULL COMMENT '周期(字典HEADCOUNT_CYCLE: year/quarter/month)', +`cycle_start` DATE NOT NULL COMMENT '周期起', +`cycle_end` DATE NOT NULL COMMENT '周期止', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_cycle` (`cycle_start`,`cycle_end`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编制方案(F16)'; + +-- org_job +CREATE TABLE IF NOT EXISTS `org_job` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`job_code` VARCHAR(32) NOT NULL COMMENT '职务编码', +`job_name` VARCHAR(64) NOT NULL COMMENT '职务名称', +`job_category` VARCHAR(16) NOT NULL DEFAULT 'vertical' COMMENT '职务类别(vertical/horizontal,F17)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_job_code` (`job_code`), + KEY `idx_job_category` (`job_category`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职务(含F17横向职务)'; + +-- org_leave +CREATE TABLE IF NOT EXISTS `org_leave` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`leave_type` VARCHAR(24) COMMENT '离职类型(辞职/劝退/合同到期/退休)', +`leave_reason` VARCHAR(32) COMMENT '离职原因(字典LEAVE_REASON)', +`leave_date` DATE COMMENT '离职日期', +`apply_type` VARCHAR(16) COMMENT '申请方式(self/proxy/manual)', +`status` VARCHAR(16) DEFAULT 'pending_leave' COMMENT '状态(pending_leave/left/cancelled)', +`handover_status` VARCHAR(16) DEFAULT 'pending' COMMENT '交接状态(pending/done)', +`certificate_file` VARCHAR(64) COMMENT '离职证明文件ID', +`blacklist_flag` INT DEFAULT 0 COMMENT '是否加入黑名单(0/1)', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_employee_id` (`employee_id`), + KEY `idx_status` (`status`), + KEY `idx_leave_date` (`leave_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='离职记录'; + +-- org_leave_handover +CREATE TABLE IF NOT EXISTS `org_leave_handover` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`leave_id` VARCHAR(32) COMMENT '离职记录', +`item_type` VARCHAR(32) COMMENT '交接项类型(字典HANDOVER_TYPE,含dingtalk_resource占位D3)', +`item_content` TEXT COMMENT '交接内容', +`handover_to_id` VARCHAR(32) COMMENT '交接人', +`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/done)', +`remark` TEXT COMMENT '备注', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_leave_id` (`leave_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='离职交接项'; + +-- org_position +CREATE TABLE IF NOT EXISTS `org_position` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`position_code` VARCHAR(32) NOT NULL COMMENT '职位编码', +`position_name` VARCHAR(64) NOT NULL COMMENT '职位名称', +`job_id` VARCHAR(32) COMMENT '职务', +`sequence_id` VARCHAR(32) COMMENT '序列', +`category` VARCHAR(16) COMMENT '职位类别(字典POS_CATEGORY)', +`dept_ids` VARCHAR(512) COMMENT '适用部门(多值,逗号分隔)', +`description` TEXT COMMENT '职位描述', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_position_code` (`position_code`), + KEY `idx_job_id` (`job_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职位'; + +-- org_project +CREATE TABLE IF NOT EXISTS `org_project` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`project_code` VARCHAR(32) NOT NULL COMMENT '项目编码', +`project_name` VARCHAR(128) NOT NULL COMMENT '项目名称', +`parent_id` VARCHAR(32) COMMENT '上级项目(自引用多层级)', +`owner_id` VARCHAR(32) COMMENT '负责人', +`start_date` DATE COMMENT '开始日期', +`end_date` DATE COMMENT '结束日期', +`project_status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '项目状态(字典PROJECT_STATUS)', +`attrs_json` TEXT COMMENT '项目属性', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_project_code` (`project_code`), + KEY `idx_parent_id` (`parent_id`), + KEY `idx_project_status` (`project_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目式组织(F17)'; + +-- org_project_post +CREATE TABLE IF NOT EXISTS `org_project_post` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`project_id` VARCHAR(32) NOT NULL COMMENT '项目组织', +`employee_id` VARCHAR(32) NOT NULL COMMENT '员工', +`job_id` VARCHAR(32) COMMENT '横向职务(org_job.job_category=horizontal)', +`start_date` DATE COMMENT '开始日期', +`end_date` DATE COMMENT '结束日期', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/expired', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_proj_emp_job` (`project_id`,`employee_id`,`job_id`,`start_date`), + KEY `idx_employee_id` (`employee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目任职(F17横向)'; + +-- org_regularization +CREATE TABLE IF NOT EXISTS `org_regularization` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`probation_end_date` DATE COMMENT '试用期止(预计转正日)', +`regular_date` DATE COMMENT '转正日期', +`apply_type` VARCHAR(16) COMMENT '申请方式(self/proxy/manual)', +`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/approved/rejected/cancelled)', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_employee_id` (`employee_id`), + KEY `idx_regular_date` (`regular_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转正记录'; + +-- org_sequence +CREATE TABLE IF NOT EXISTS `org_sequence` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`seq_category` VARCHAR(32) COMMENT '序列类别', +`seq_name` VARCHAR(64) NOT NULL COMMENT '序列名称', +`grade_level_ids` VARCHAR(512) COMMENT '关联职级类别(多值,逗号分隔)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='序列'; + +-- org_transfer +CREATE TABLE IF NOT EXISTS `org_transfer` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`transfer_type` VARCHAR(24) COMMENT '调动类型(字典TRANSFER_TYPE)', +`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/confirmed/cancelled)', +`effective_date` DATE COMMENT '生效日期', +`batch_no` VARCHAR(32) COMMENT '批次号', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_status` (`status`), + KEY `idx_effective_date` (`effective_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='调动单(支持批量)'; + +-- org_transfer_detail +CREATE TABLE IF NOT EXISTS `org_transfer_detail` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`transfer_id` VARCHAR(32) COMMENT '调动单', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`from_org_id` VARCHAR(32) COMMENT '原组织', +`to_org_id` VARCHAR(32) COMMENT '新组织', +`from_position_id` VARCHAR(32) COMMENT '原职位', +`to_position_id` VARCHAR(32) COMMENT '新职位', +`from_grade_level_id` VARCHAR(32) COMMENT '原职级', +`to_grade_level_id` VARCHAR(32) COMMENT '新职级', +`status` VARCHAR(16) DEFAULT 'pending' COMMENT '状态(pending/done/cancelled)', + PRIMARY KEY (`id`), + KEY `idx_transfer_id` (`transfer_id`), + KEY `idx_employee_id` (`employee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='调动明细(逐人)'; + +-- org_unit +CREATE TABLE IF NOT EXISTS `org_unit` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`org_code` VARCHAR(32) NOT NULL COMMENT '组织编码', +`org_name` VARCHAR(128) NOT NULL COMMENT '组织名称', +`parent_id` VARCHAR(32) COMMENT '上级组织(自引用)', +`org_type` VARCHAR(16) COMMENT '组织类型(字典ORG_TYPE)', +`leader_id` VARCHAR(32) COMMENT '负责人', +`effective_date` DATE COMMENT '生效日期', +`expire_date` DATE COMMENT '失效日期(空=长期)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_org_code` (`org_code`), + KEY `idx_parent_id` (`parent_id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织'; + +-- org_unit_change +CREATE TABLE IF NOT EXISTS `org_unit_change` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`org_id` VARCHAR(32) COMMENT '组织', +`change_type` VARCHAR(16) COMMENT '变更类型(add/edit/disable/move/split/merge/delete)', +`before_json` TEXT COMMENT '变更前快照', +`after_json` TEXT COMMENT '变更后快照', +`effective_date` DATE COMMENT '生效日期', +`operator_id` VARCHAR(32) COMMENT '操作人', +`flow_instance_id` VARCHAR(32) COMMENT '流程实例', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_org_id` (`org_id`), + KEY `idx_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织变更时间轴'; + +-- ===== hr_roster(7 张)===== +-- roster_employee +CREATE TABLE IF NOT EXISTS `roster_employee` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_no` VARCHAR(32) NOT NULL COMMENT '工号', +`name` VARCHAR(64) NOT NULL COMMENT '姓名', +`gender` VARCHAR(16) COMMENT '性别(字典GENDER)', +`id_type` VARCHAR(16) DEFAULT 'id_card' COMMENT '证件类型', +`id_number_cipher` VARCHAR(256) COMMENT '证件号密文(敏感)【敏感:sensitive,落库加密/脱敏展示】', +`id_number_hash` VARCHAR(64) COMMENT '证件号哈希(确定性,唯一/黑名单匹配)【敏感:sensitive,落库加密/脱敏展示】', +`id_valid_from` DATE COMMENT '证件有效期起', +`id_valid_to` DATE COMMENT '证件有效期止(长期=9999-12-31)', +`id_authority` VARCHAR(128) COMMENT '证件签发机关', +`id_source` VARCHAR(16) DEFAULT 'manual' COMMENT '证件信息来源(字典ID_SOURCE)', +`birthday` DATE COMMENT '出生日期', +`phone` VARCHAR(20) COMMENT '手机号(明文存储,按角色脱敏)【敏感:sensitive,落库加密/脱敏展示】', +`email` VARCHAR(128) COMMENT '邮箱', +`org_id` VARCHAR(32) COMMENT '组织', +`position_id` VARCHAR(32) COMMENT '职位', +`job_id` VARCHAR(32) COMMENT '职务', +`grade_level_id` VARCHAR(32) COMMENT '职级', +`grade_rank_id` VARCHAR(32) COMMENT '职等', +`sequence_id` VARCHAR(32) COMMENT '序列', +`employee_type` VARCHAR(16) COMMENT '员工类型(字典EMP_TYPE)', +`employee_status` VARCHAR(16) COMMENT '员工状态(字典EMP_STATUS)', +`hire_date` DATE COMMENT '入职日期', +`probation_end_date` DATE COMMENT '试用期止(预计转正日)', +`regular_date` DATE COMMENT '转正日期', +`leave_date` DATE COMMENT '离职日期', +`company_id` VARCHAR(32) COMMENT '合同公司', +`work_location` VARCHAR(128) COMMENT '办公地点', +`direct_leader_id` VARCHAR(32) COMMENT '直属主管', +`prev_employee_id` VARCHAR(32) COMMENT '复职关联原档案ID', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_employee_no` (`employee_no`), + UNIQUE KEY `uk_id_number_hash` (`id_number_hash`), + KEY `idx_org_id` (`org_id`), + KEY `idx_status` (`employee_status`), + KEY `idx_hire_date` (`hire_date`), + KEY `idx_probation_end` (`probation_end_date`), + KEY `idx_direct_leader` (`direct_leader_id`), + KEY `idx_prev_employee` (`prev_employee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工主档'; + +-- roster_empno_rule +CREATE TABLE IF NOT EXISTS `roster_empno_rule` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称', +`prefix` VARCHAR(16) COMMENT '工号前缀', +`match_field` VARCHAR(32) COMMENT '匹配字段(如company_id)', +`match_value` VARCHAR(64) COMMENT '匹配值', +`seq_length` INT DEFAULT 4 COMMENT '流水号长度', +`current_seq` INT DEFAULT 0 COMMENT '当前流水号', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工号规则'; + +-- roster_field_def +CREATE TABLE IF NOT EXISTS `roster_field_def` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`group_id` VARCHAR(32) COMMENT '字段分组', +`field_code` VARCHAR(64) NOT NULL COMMENT '字段编码', +`field_name` VARCHAR(64) NOT NULL COMMENT '字段名称', +`field_type` VARCHAR(16) COMMENT '字段类型(text/number/date/select/multiselect/file)', +`options_json` TEXT COMMENT '选项定义(字典code或自定义项)', +`required` INT DEFAULT 0 COMMENT '是否必填(0/1)', +`sensitive` INT DEFAULT 0 COMMENT '是否敏感(0/1,驱动脱敏与可见性)', +`editable_self` INT DEFAULT 0 COMMENT '员工自助可编辑(0/1)', +`need_audit` INT DEFAULT 0 COMMENT '自助修改需审核(0/1)', +`apply_types` TEXT COMMENT '适用员工类型JSON', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_field_code` (`field_code`), + KEY `idx_group_id` (`group_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段定义'; + +-- roster_field_group +CREATE TABLE IF NOT EXISTS `roster_field_group` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`group_code` VARCHAR(32) NOT NULL COMMENT '分组编码', +`group_name` VARCHAR(64) NOT NULL COMMENT '分组名称(工作信息/个人信息/绩效结果/培训记录)', +`sort_no` INT DEFAULT 0 COMMENT '排序号', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_group_code` (`group_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段分组'; + +-- roster_field_value +CREATE TABLE IF NOT EXISTS `roster_field_value` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) NOT NULL COMMENT '员工档案', +`field_id` VARCHAR(32) NOT NULL COMMENT '字段定义', +`value_text` TEXT COMMENT '文本值', +`value_number` DECIMAL(18,4) COMMENT '数值', +`value_date` DATE COMMENT '日期值', +`value_file` VARCHAR(64) COMMENT '附件值(文件ID)', +`updated_by` VARCHAR(32) COMMENT '更新人', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_employee_field` (`employee_id`,`field_id`), + KEY `idx_field_id` (`field_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花名册字段值(EAV)'; + +-- roster_timeline +CREATE TABLE IF NOT EXISTS `roster_timeline` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_id` VARCHAR(32) COMMENT '员工档案', +`event_type` VARCHAR(24) COMMENT '事件类型(entry/regular/transfer/leave/concurrent/contract/field_change/headcount/project/migrate)', +`event_date` DATE COMMENT '事件日期', +`title` VARCHAR(128) COMMENT '标题', +`content_json` TEXT COMMENT '内容JSON', +`source_type` VARCHAR(32) COMMENT '来源类型', +`source_id` VARCHAR(32) COMMENT '来源ID', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_emp_date` (`employee_id`,`event_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工时间轴'; + +-- roster_type_rule +CREATE TABLE IF NOT EXISTS `roster_type_rule` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`employee_type` VARCHAR(16) NOT NULL COMMENT '员工类型(字典EMP_TYPE)', +`field_rules_json` TEXT COMMENT '按类型必填/隐藏字段规则', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_employee_type` (`employee_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工类型字段规则'; + +-- ===== hr_system(8 张)===== +-- sys_announcement +CREATE TABLE IF NOT EXISTS `sys_announcement` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`title` VARCHAR(256) NOT NULL COMMENT '标题', +`content` TEXT COMMENT '内容', +`publish_scope_json` TEXT COMMENT '发布范围', +`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间', +`status` VARCHAR(16) DEFAULT 'draft' COMMENT '状态(draft/published/offline)', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业公告(F15)'; + +-- sys_audit_log +CREATE TABLE IF NOT EXISTS `sys_audit_log` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`module` VARCHAR(32) NOT NULL COMMENT '模块(hr-org/hr-roster/...)', +`target_type` VARCHAR(32) NOT NULL COMMENT '对象类型(roster_employee/org_unit/...)', +`target_id` VARCHAR(32) NOT NULL COMMENT '对象ID', +`operation` VARCHAR(16) NOT NULL COMMENT '操作类型(字典AUDIT_OP)', +`operator_id` VARCHAR(32) NOT NULL COMMENT '操作人', +`operator_name` VARCHAR(64) DEFAULT '' COMMENT '操作人姓名', +`before_json` TEXT COMMENT '变更前快照', +`after_json` TEXT COMMENT '变更后快照', +`request_ip` VARCHAR(64) COMMENT '请求IP', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_target` (`target_type`,`target_id`), + KEY `idx_operator` (`operator_id`), + KEY `idx_created_at` (`created_at`), + KEY `idx_module_op` (`module`,`operation`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志(只增,F12)'; + +-- sys_care_config +CREATE TABLE IF NOT EXISTS `sys_care_config` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`care_type` VARCHAR(16) NOT NULL COMMENT '关怀类型(birthday/anniversary)', +`template` TEXT COMMENT '文案模板', +`enable` INT DEFAULT 1 COMMENT '启用(0/1)', +`push_target` VARCHAR(16) DEFAULT 'employee' COMMENT '推送对象(employee/leader)', +`updated_by` VARCHAR(32) COMMENT '更新人', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_care_type` (`care_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='关怀配置(生日/周年,F15)'; + +-- sys_data_scope +CREATE TABLE IF NOT EXISTS `sys_data_scope` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`admin_user_id` VARCHAR(32) COMMENT '管理员用户', +`scope_type` VARCHAR(16) COMMENT '范围类型(org/field)', +`org_ids_json` TEXT COMMENT '组织维度(含子树)', +`field_ids_json` TEXT COMMENT '花名册字段维度', +`remark` TEXT COMMENT '备注', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_admin_user` (`admin_user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据范围(F11)'; + +-- sys_message +CREATE TABLE IF NOT EXISTS `sys_message` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`receiver_id` VARCHAR(32) COMMENT '接收人', +`msg_type` VARCHAR(16) COMMENT '消息类型(todo/approval/remind/care/notice)', +`title` VARCHAR(256) COMMENT '标题', +`content` TEXT COMMENT '内容', +`biz_type` VARCHAR(32) COMMENT '业务类型', +`biz_id` VARCHAR(32) COMMENT '业务ID', +`send_channel` VARCHAR(16) DEFAULT 'site' COMMENT '发送渠道(字典MSG_CHANNEL,一期仅site;D9)', +`is_read` INT DEFAULT 0 COMMENT '是否已读(0/1)', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_receiver_read` (`receiver_id`,`is_read`), + KEY `idx_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站内消息(F15)'; + +-- sys_openapp +CREATE TABLE IF NOT EXISTS `sys_openapp` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`app_key` VARCHAR(64) NOT NULL COMMENT '应用Key', +`app_secret_cipher` VARCHAR(256) COMMENT '应用密钥密文【敏感:sensitive,落库加密/脱敏展示】', +`app_name` VARCHAR(128) COMMENT '应用名称', +`scope_json` TEXT COMMENT '授权资源范围', +`rate_limit` INT DEFAULT 10 COMMENT '限流(req/s,默认10)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_app_key` (`app_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API开放应用(一期预留,FEAT-B1-01⑦)'; + +-- sys_policy +CREATE TABLE IF NOT EXISTS `sys_policy` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`title` VARCHAR(256) NOT NULL COMMENT '标题', +`file_path` VARCHAR(256) COMMENT '政策文件(文件ID)', +`view_scope_json` TEXT COMMENT '查阅范围', +`downloadable` INT DEFAULT 0 COMMENT '允许下载(0/1)', +`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间', +`status` VARCHAR(16) DEFAULT 'draft' COMMENT '状态(draft/published/offline)', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业政策(F15)'; + +-- sys_remind_rule +CREATE TABLE IF NOT EXISTS `sys_remind_rule` ( +`id` VARCHAR(32) NOT NULL COMMENT '主键', +`scene_code` VARCHAR(32) NOT NULL COMMENT '提醒场景(字典REMIND_SCENE,≥6类)', +`rule_name` VARCHAR(64) NOT NULL COMMENT '规则名称', +`days_before` INT DEFAULT 7 COMMENT '提前天数', +`content_template` TEXT COMMENT '提醒内容模板', +`target_role` VARCHAR(16) DEFAULT 'admin' COMMENT '提醒对象(admin/employee/leader)', +`status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态 active/inactive', +`created_by` VARCHAR(32) COMMENT '创建人', +`updated_by` VARCHAR(32) COMMENT '更新人', +`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间', +`updated_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_scene_rule` (`scene_code`,`rule_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通用提醒规则(F15)'; + +SET FOREIGN_KEY_CHECKS=1; +-- 共 49 张表