-- 报销模块表结构（仅CRUD，无审批流）
DROP TABLE IF EXISTS gear_reimbursement;
CREATE TABLE gear_reimbursement (
  reimbursement_id    bigint(20)      NOT NULL                   COMMENT '报销ID',
  applicant_id        bigint(20)      NOT NULL                   COMMENT '申请人用户ID',
  applicant_name      varchar(64)     NOT NULL                   COMMENT '申请人名称',
  attachment_url      varchar(500)    DEFAULT ''                 COMMENT '附件地址',
  upload_time         datetime                                   COMMENT '上传时间',
  amount              decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '报销金额',
  reimburse_status    char(1)         NOT NULL DEFAULT '0'       COMMENT '报销状态（0未报销 1已报销）',
  del_flag            char(1)         NOT NULL DEFAULT '0'       COMMENT '删除标志（0存在 2删除）',
  create_by           varchar(64)     DEFAULT ''                 COMMENT '创建者',
  create_time         datetime                                   COMMENT '创建时间',
  update_by           varchar(64)     DEFAULT ''                 COMMENT '更新者',
  update_time         datetime                                   COMMENT '更新时间',
  remark              varchar(500)    DEFAULT NULL               COMMENT '备注',
  PRIMARY KEY (reimbursement_id),
  KEY idx_applicant_id (applicant_id),
  KEY idx_reimburse_status (reimburse_status),
  KEY idx_upload_time (upload_time)
) ENGINE=InnoDB COMMENT='报销表';

-- 菜单（挂载到“办公管理”下，parent_id=5）
INSERT INTO sys_menu VALUES ('131', '报销管理', '5', '7', 'reimbursement', 'oms/reimbursement/index', '', 1, 0, 'C', '0', '0', 'oa:reimbursement:list', 'money', 'admin', sysdate(), '', null, '报销管理菜单');
-- 按钮权限
INSERT INTO sys_menu VALUES ('1311', '报销查询', '131', '1', '#', '', '', 1, 0, 'F', '0', '0', 'oa:reimbursement:query', '#', 'admin', sysdate(), '', null, '');
INSERT INTO sys_menu VALUES ('1312', '报销新增', '131', '2', '#', '', '', 1, 0, 'F', '0', '0', 'oa:reimbursement:add', '#', 'admin', sysdate(), '', null, '');
INSERT INTO sys_menu VALUES ('1313', '报销修改', '131', '3', '#', '', '', 1, 0, 'F', '0', '0', 'oa:reimbursement:edit', '#', 'admin', sysdate(), '', null, '');
INSERT INTO sys_menu VALUES ('1314', '报销删除', '131', '4', '#', '', '', 1, 0, 'F', '0', '0', 'oa:reimbursement:remove', '#', 'admin', sysdate(), '', null, '');
INSERT INTO sys_menu VALUES ('1315', '报销导出', '131', '5', '#', '', '', 1, 0, 'F', '0', '0', 'oa:reimbursement:export', '#', 'admin', sysdate(), '', null, '');

-- ================================
-- 工资录入/补录模块（v0.8.3）
-- ================================

-- 1) 计费基础配置（小时工/计件工/天工）
DROP TABLE IF EXISTS gear_wage_rate_config;
CREATE TABLE gear_wage_rate_config (
  rate_id               bigint(20)      NOT NULL                   COMMENT '费率配置ID',
  rate_code             varchar(64)     NOT NULL                   COMMENT '费率编码（唯一）',
  rate_name             varchar(128)    NOT NULL                   COMMENT '费率名称',
  billing_type          char(1)         NOT NULL                   COMMENT '计费类型（1小时工 2计件工 3天工）',
  work_type_name        varchar(64)     DEFAULT ''                 COMMENT '工种名称（小时工/天工使用）',
  item_name             varchar(128)    DEFAULT ''                 COMMENT '加工物品名称（计件工使用）',
  process_name          varchar(128)    DEFAULT ''                 COMMENT '工序名称（计件工使用）',
  workday_hours         decimal(5,2)    DEFAULT NULL               COMMENT '日工时制度（如8/9，仅天工）',
  unit_price            decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '单价（小时单价/件单价/日薪）',
  status                char(1)         NOT NULL DEFAULT '0'       COMMENT '状态（0启用 1停用）',
  del_flag              char(1)         NOT NULL DEFAULT '0'       COMMENT '删除标志（0存在 2删除）',
  create_by             varchar(64)     DEFAULT ''                 COMMENT '创建者',
  create_time           datetime                                   COMMENT '创建时间',
  update_by             varchar(64)     DEFAULT ''                 COMMENT '更新者',
  update_time           datetime                                   COMMENT '更新时间',
  remark                varchar(500)    DEFAULT NULL               COMMENT '备注',
  PRIMARY KEY (rate_id),
  UNIQUE KEY uk_rate_code (rate_code),
  KEY idx_billing_type_status (billing_type, status),
  KEY idx_work_type_name (work_type_name),
  KEY idx_item_process (item_name, process_name)
) ENGINE=InnoDB COMMENT='工资费率配置表';

-- 2) 每日录入批次（用于“自动带入全员员工”和录入进度统计）
DROP TABLE IF EXISTS gear_wage_entry_batch;
CREATE TABLE gear_wage_entry_batch (
  batch_id               bigint(20)      NOT NULL                   COMMENT '批次ID',
  entry_date             date            NOT NULL                   COMMENT '录入日期',
  total_emp_count        int(11)         NOT NULL DEFAULT 0         COMMENT '应录入员工总数',
  entered_emp_count      int(11)         NOT NULL DEFAULT 0         COMMENT '已录入员工数',
  unentered_emp_count    int(11)         NOT NULL DEFAULT 0         COMMENT '未录入员工数',
  status                 char(1)         NOT NULL DEFAULT '0'       COMMENT '状态（0进行中 1已完成）',
  del_flag               char(1)         NOT NULL DEFAULT '0'       COMMENT '删除标志（0存在 2删除）',
  create_by              varchar(64)     DEFAULT ''                 COMMENT '创建者',
  create_time            datetime                                   COMMENT '创建时间',
  update_by              varchar(64)     DEFAULT ''                 COMMENT '更新者',
  update_time            datetime                                   COMMENT '更新时间',
  remark                 varchar(500)    DEFAULT NULL               COMMENT '备注',
  PRIMARY KEY (batch_id),
  UNIQUE KEY uk_entry_date (entry_date),
  KEY idx_status (status)
) ENGINE=InnoDB COMMENT='工资每日录入批次表';

-- 3) 每日员工录入状态（用于“已录入/未录入”检索）
DROP TABLE IF EXISTS gear_wage_entry_emp_status;
CREATE TABLE gear_wage_entry_emp_status (
  status_id              bigint(20)      NOT NULL                   COMMENT '状态ID',
  batch_id               bigint(20)      NOT NULL                   COMMENT '批次ID',
  entry_date             date            NOT NULL                   COMMENT '录入日期',
  emp_id                 bigint(20)      NOT NULL                   COMMENT '员工ID',
  emp_name               varchar(64)     NOT NULL                   COMMENT '员工姓名',
  entered_flag           char(1)         NOT NULL DEFAULT '0'       COMMENT '是否已录入（0否 1是）',
  first_entry_time       datetime                                   COMMENT '首次录入时间',
  del_flag               char(1)         NOT NULL DEFAULT '0'       COMMENT '删除标志（0存在 2删除）',
  create_by              varchar(64)     DEFAULT ''                 COMMENT '创建者',
  create_time            datetime                                   COMMENT '创建时间',
  update_by              varchar(64)     DEFAULT ''                 COMMENT '更新者',
  update_time            datetime                                   COMMENT '更新时间',
  remark                 varchar(500)    DEFAULT NULL               COMMENT '备注',
  PRIMARY KEY (status_id),
  UNIQUE KEY uk_entry_date_emp (entry_date, emp_id),
  KEY idx_batch_id (batch_id),
  KEY idx_entered_flag (entered_flag)
) ENGINE=InnoDB COMMENT='工资录入员工状态表';

-- 4) 工资录入明细（原始录入 + 补录）
DROP TABLE IF EXISTS gear_wage_entry_detail;
CREATE TABLE gear_wage_entry_detail (
  detail_id              bigint(20)      NOT NULL                   COMMENT '明细ID',
  entry_date             date            NOT NULL                   COMMENT '业务日期',
  emp_id                 bigint(20)      NOT NULL                   COMMENT '员工ID',
  emp_name               varchar(64)     NOT NULL                   COMMENT '员工姓名',
  billing_type           char(1)         NOT NULL                   COMMENT '计费类型（1小时工 2计件工 3天工）',
  rate_id                bigint(20)      NOT NULL                   COMMENT '费率配置ID',
  work_type_name         varchar(64)     DEFAULT ''                 COMMENT '工种名称（快照）',
  item_name              varchar(128)    DEFAULT ''                 COMMENT '加工物品（快照）',
  process_name           varchar(128)    DEFAULT ''                 COMMENT '工序（快照）',
  order_no               varchar(64)     DEFAULT ''                 COMMENT '订单号（订单维度去重）',
  workload               decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '工作量（小时/件数/天数）',
  unit_price             decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '单价快照',
  base_amount            decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '基础金额（工作量*单价）',
  extra_amount           decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '额外金额（高温/交通等）',
  extra_reason           varchar(255)    DEFAULT ''                 COMMENT '额外金额原因',
  total_amount           decimal(12,2)   NOT NULL DEFAULT 0.00      COMMENT '总金额（基础+额外）',
  is_makeup              char(1)         NOT NULL DEFAULT '0'       COMMENT '是否补录（0否 1是）',
  source_detail_id       bigint(20)      DEFAULT NULL               COMMENT '被补录/被修改的原始明细ID',
  makeup_responsible_id  bigint(20)      DEFAULT NULL               COMMENT '补录责任人ID',
  makeup_responsible     varchar(64)     DEFAULT ''                 COMMENT '补录责任人姓名',
  makeup_reason          varchar(500)    DEFAULT ''                 COMMENT '补录原因',
  del_flag               char(1)         NOT NULL DEFAULT '0'       COMMENT '删除标志（0存在 2删除）',
  create_by              varchar(64)     DEFAULT ''                 COMMENT '创建者',
  create_time            datetime                                   COMMENT '创建时间',
  update_by              varchar(64)     DEFAULT ''                 COMMENT '更新者',
  update_time            datetime                                   COMMENT '更新时间',
  remark                 varchar(500)    DEFAULT NULL               COMMENT '备注',
  PRIMARY KEY (detail_id),
  UNIQUE KEY uk_entry_unique (entry_date, emp_id, billing_type, rate_id, order_no, del_flag),
  KEY idx_entry_date_emp (entry_date, emp_id),
  KEY idx_is_makeup (is_makeup),
  KEY idx_makeup_resp (makeup_responsible_id),
  KEY idx_source_detail_id (source_detail_id),
  KEY idx_order_no (order_no)
) ENGINE=InnoDB COMMENT='工资录入明细表';

-- 5) 补录操作日志（确保责任链可追溯）
DROP TABLE IF EXISTS gear_wage_makeup_log;
CREATE TABLE gear_wage_makeup_log (
  log_id                  bigint(20)      NOT NULL                  COMMENT '日志ID',
  detail_id               bigint(20)      NOT NULL                  COMMENT '补录后明细ID',
  source_detail_id        bigint(20)      DEFAULT NULL              COMMENT '补录前明细ID',
  operation_type          char(1)         NOT NULL DEFAULT '1'      COMMENT '操作类型（1新增补录 2修改补录 3撤销补录）',
  operation_date          date            NOT NULL                  COMMENT '补录目标日期',
  emp_id                  bigint(20)      NOT NULL                  COMMENT '员工ID',
  makeup_responsible_id   bigint(20)      NOT NULL                  COMMENT '补录责任人ID',
  makeup_responsible      varchar(64)     NOT NULL                  COMMENT '补录责任人姓名',
  makeup_reason           varchar(500)    NOT NULL                  COMMENT '补录原因',
  del_flag                char(1)         NOT NULL DEFAULT '0'      COMMENT '删除标志（0存在 2删除）',
  create_by               varchar(64)     DEFAULT ''                COMMENT '创建者',
  create_time             datetime                                   COMMENT '创建时间',
  update_by               varchar(64)     DEFAULT ''                COMMENT '更新者',
  update_time             datetime                                   COMMENT '更新时间',
  remark                  varchar(500)    DEFAULT NULL              COMMENT '备注',
  PRIMARY KEY (log_id),
  KEY idx_operation_date (operation_date),
  KEY idx_resp_id (makeup_responsible_id),
  KEY idx_emp_id (emp_id),
  KEY idx_detail_id (detail_id)
) ENGINE=InnoDB COMMENT='工资补录日志表';

-- 6) 工人主数据（支持模板导入，长期复用）
DROP TABLE IF EXISTS gear_worker;
CREATE TABLE gear_worker (
  worker_id              bigint(20)      NOT NULL                  COMMENT '工人ID',
  worker_no              varchar(64)     NOT NULL                  COMMENT '工号',
  worker_name            varchar(64)     NOT NULL                  COMMENT '姓名',
  phone                  varchar(20)     DEFAULT ''                COMMENT '手机号',
  default_billing_type   char(1)         DEFAULT '1'               COMMENT '默认计费类型（1小时工 2计件工 3天工）',
  default_work_type_name varchar(64)     DEFAULT ''                COMMENT '默认工种',
  status                 char(1)         NOT NULL DEFAULT '0'      COMMENT '状态（0在职 1离职）',
  del_flag               char(1)         NOT NULL DEFAULT '0'      COMMENT '删除标志（0存在 2删除）',
  create_by              varchar(64)     DEFAULT ''                COMMENT '创建者',
  create_time            datetime                                  COMMENT '创建时间',
  update_by              varchar(64)     DEFAULT ''                COMMENT '更新者',
  update_time            datetime                                  COMMENT '更新时间',
  remark                 varchar(500)    DEFAULT NULL              COMMENT '备注',
  PRIMARY KEY (worker_id),
  UNIQUE KEY uk_worker_no (worker_no),
  KEY idx_worker_name (worker_name),
  KEY idx_status (status)
) ENGINE=InnoDB COMMENT='工人主数据表';
