{
  "version": "hr-0.4.0",
  "forms": [
    {
      "code": "HR-F01",
      "version": "hr-0.4.0",
      "title": "人员建档与核验",
      "grain": "一名人员一条名册记录",
      "api": "GET / POST / PATCH / DELETE /personnel/people",
      "table": "personnel_people",
      "entry": "collection.html?form=HR-F01",
      "relation": "一人可有多次派遣；被业务引用后归档保留，不硬删。",
      "fields": [
        {
          "key": "personnelCode",
          "label": "人员编号",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_people.personnel_code",
          "rule": "必填；公司内唯一，不用姓名代替关联编号。",
          "id": "HR-F01-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.personnel_code"
          ]
        },
        {
          "key": "legalName",
          "label": "法定姓名",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_people.legal_name",
          "rule": "必填；修改已核验姓名需要重新核验。",
          "id": "HR-F01-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.legal_name"
          ]
        },
        {
          "key": "displayName",
          "label": "显示姓名",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_people.display_name",
          "rule": "必填；用于现场识别。",
          "id": "HR-F01-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.display_name"
          ]
        },
        {
          "key": "phone",
          "label": "联系电话",
          "kind": "事实",
          "type": "电话",
          "mapping": "personnel_people.phone",
          "rule": "选填；只作联系信息。",
          "id": "HR-F01-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.phone"
          ]
        },
        {
          "key": "roleName",
          "label": "岗位",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_people.role_name",
          "rule": "必填；派遣岗位必须与订单匹配。",
          "id": "HR-F01-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.role_name"
          ]
        },
        {
          "key": "skills",
          "label": "技能",
          "kind": "事实",
          "type": "列表",
          "mapping": "personnel_people.skills_json",
          "rule": "选填；数组保存。",
          "id": "HR-F01-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.skills_json"
          ]
        },
        {
          "key": "identityStatus",
          "label": "身份核验结果",
          "kind": "审批",
          "type": "枚举",
          "mapping": "personnel_people.identity_status",
          "rule": "待核验、已核验、未通过；审核人员操作。",
          "id": "HR-F01-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.identity_status"
          ]
        },
        {
          "key": "identityMethod",
          "label": "身份核验方式",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_people.identity_method",
          "rule": "核验时记录依据和方式。",
          "id": "HR-F01-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.identity_method"
          ]
        },
        {
          "key": "identityReference",
          "label": "核验凭据参考",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_people.identity_reference_masked",
          "rule": "仅保留脱敏末四位；不保存完整证件号。",
          "id": "HR-F01-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.identity_reference_masked"
          ]
        },
        {
          "key": "qualificationStatus",
          "label": "岗位资格核验",
          "kind": "审批",
          "type": "枚举",
          "mapping": "personnel_people.qualification_status",
          "rule": "派遣前须已核验。",
          "id": "HR-F01-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.qualification_status"
          ]
        },
        {
          "key": "availability",
          "label": "可派遣情况",
          "kind": "规则",
          "type": "枚举",
          "mapping": "personnel_people.availability",
          "rule": "可派遣或不可派遣，另校验时间冲突。",
          "id": "HR-F01-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.availability"
          ]
        },
        {
          "key": "status",
          "label": "在册状态",
          "kind": "规则",
          "type": "枚举",
          "mapping": "personnel_people.status",
          "rule": "在册或归档；归档不抹去历史。",
          "id": "HR-F01-C012",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.status"
          ]
        },
        {
          "key": "notes",
          "label": "人员备注",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_people.notes",
          "rule": "选填，不放完整证件。",
          "id": "HR-F01-C013",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.notes"
          ]
        },
        {
          "key": "id",
          "label": "人员记录编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_people.id",
          "rule": "服务端生成，派遣引用此编号。",
          "id": "HR-F01-C014",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.id"
          ]
        },
        {
          "key": "version",
          "label": "记录修订号",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_people.version",
          "rule": "更新必须提交此前读取的版本。",
          "id": "HR-F01-C015",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.version"
          ]
        },
        {
          "key": "identityVerifiedBy",
          "label": "核验人",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_people.verified_by",
          "rule": "服务端记录审核者。",
          "id": "HR-F01-C016",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.verified_by"
          ]
        },
        {
          "key": "identityVerifiedAt",
          "label": "核验时间",
          "kind": "系统",
          "type": "日期时间",
          "mapping": "personnel_people.verified_at",
          "rule": "服务端时间。",
          "id": "HR-F01-C017",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_people.verified_at"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F01",
        "collection": "collection.html?form=HR-F01",
        "operations": "records.html?form=HR-F01",
        "analysis": "analysis.html?form=HR-F01",
        "development": "development.html?form=HR-F01"
      }
    },
    {
      "code": "HR-F02",
      "version": "hr-0.4.0",
      "title": "班次标准",
      "grain": "一种班次的一版标准",
      "api": "GET / POST / PATCH /personnel/shifts",
      "table": "personnel_shifts",
      "entry": "collection.html?form=HR-F02",
      "relation": "订单引用班次并保存快照；班次后续修订不改变旧订单。",
      "fields": [
        {
          "key": "code",
          "label": "班次编号",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_shifts.code",
          "rule": "必填；稳定且唯一。",
          "id": "HR-F02-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.code"
          ]
        },
        {
          "key": "name",
          "label": "班次名称",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_shifts.name",
          "rule": "必填；例如三小时白班。",
          "id": "HR-F02-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.name"
          ]
        },
        {
          "key": "startTime",
          "label": "计划上工时间",
          "kind": "规则",
          "type": "时间",
          "mapping": "personnel_shifts.start_time",
          "rule": "必填；津巴布韦当地时间。",
          "id": "HR-F02-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.start_time"
          ]
        },
        {
          "key": "endTime",
          "label": "计划下工时间",
          "kind": "规则",
          "type": "时间",
          "mapping": "personnel_shifts.end_time",
          "rule": "必填；早于开始表示次日，相等无效。",
          "id": "HR-F02-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.end_time"
          ]
        },
        {
          "key": "breaks",
          "label": "计划休息区间",
          "kind": "规则",
          "type": "区间列表",
          "mapping": "personnel_shifts.breaks_json",
          "rule": "每项开始、结束；班次内且不重叠；不代表实际休息。",
          "id": "HR-F02-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.breaks_json"
          ]
        },
        {
          "key": "standardMinutes",
          "label": "标准工作分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_shifts.standard_minutes",
          "rule": "计划跨度减计划休息，由系统计算。",
          "id": "HR-F02-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.standard_minutes"
          ],
          "derivedFrom": [
            "HR-F02-C003",
            "HR-F02-C004",
            "HR-F02-C005"
          ]
        },
        {
          "key": "notes",
          "label": "班次说明",
          "kind": "规则",
          "type": "长文本",
          "mapping": "personnel_shifts.notes",
          "rule": "选填，记录约定。",
          "id": "HR-F02-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.notes"
          ]
        },
        {
          "key": "status",
          "label": "班次状态",
          "kind": "规则",
          "type": "枚举",
          "mapping": "personnel_shifts.status",
          "rule": "有效或归档；已引用记录保持快照。",
          "id": "HR-F02-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.status"
          ]
        },
        {
          "key": "id",
          "label": "班次记录编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_shifts.id",
          "rule": "服务端生成。",
          "id": "HR-F02-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.id"
          ]
        },
        {
          "key": "version",
          "label": "班次修订号",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_shifts.version",
          "rule": "版本化更新。",
          "id": "HR-F02-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_shifts.version"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F02",
        "collection": "collection.html?form=HR-F02",
        "operations": "records.html?form=HR-F02",
        "analysis": "analysis.html?form=HR-F02",
        "development": "development.html?form=HR-F02"
      }
    },
    {
      "code": "HR-F03",
      "version": "hr-0.4.0",
      "title": "客户服务订单",
      "grain": "一个客户、一天、一个班次及岗位的一项需求",
      "api": "GET / POST / PATCH /personnel/orders",
      "table": "personnel_orders",
      "entry": "collection.html?form=HR-F03",
      "relation": "一份订单对应多名派遣人员、多条履约记录和至多一份锁定结算。",
      "fields": [
        {
          "key": "clientName",
          "label": "客户名称",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_orders.client_name",
          "rule": "必填；当前客户按文本记录，尚未独立客户主档。",
          "id": "HR-F03-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.client_name"
          ]
        },
        {
          "key": "contractRef",
          "label": "合同编号",
          "kind": "引用",
          "type": "文本",
          "mapping": "personnel_orders.contract_ref",
          "rule": "必填；关联商务约定。",
          "id": "HR-F03-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.contract_ref"
          ]
        },
        {
          "key": "site",
          "label": "服务地点",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_orders.site",
          "rule": "必填。",
          "id": "HR-F03-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.site"
          ]
        },
        {
          "key": "serviceDate",
          "label": "服务日期",
          "kind": "事实",
          "type": "日期",
          "mapping": "personnel_orders.service_date",
          "rule": "必填；班次开始所在日期。",
          "id": "HR-F03-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.service_date"
          ]
        },
        {
          "key": "shiftTemplateId",
          "label": "班次标准",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_orders.shift_template_id",
          "rule": "必填；选择有效班次，不手输班次名称。",
          "id": "HR-F03-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.shift_template_id"
          ]
        },
        {
          "key": "requestedPeople",
          "label": "需求人数",
          "kind": "规则",
          "type": "整数",
          "mapping": "personnel_orders.requested_people",
          "rule": "必填且大于零；派遣人数必须一致。",
          "id": "HR-F03-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.requested_people"
          ]
        },
        {
          "key": "roleName",
          "label": "需求岗位",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_orders.role_name",
          "rule": "必填；与名册岗位匹配。",
          "id": "HR-F03-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.role_name"
          ]
        },
        {
          "key": "currency",
          "label": "结算币种",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_orders.currency",
          "rule": "必填；不同币种不得相加。",
          "id": "HR-F03-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.currency"
          ]
        },
        {
          "key": "clientHourRate",
          "label": "客户每小时费率",
          "kind": "规则",
          "type": "金额",
          "mapping": "personnel_orders.client_hour_rate_minor",
          "rule": "必填非负；录入元，存储最小货币单位。",
          "id": "HR-F03-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.client_hour_rate_minor"
          ]
        },
        {
          "key": "labourHourCost",
          "label": "人工每小时成本",
          "kind": "规则",
          "type": "金额",
          "mapping": "personnel_orders.labour_hour_cost_minor",
          "rule": "必填非负；与客户费率分开。",
          "id": "HR-F03-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.labour_hour_cost_minor"
          ]
        },
        {
          "key": "budgetAmount",
          "label": "订单预算",
          "kind": "规则",
          "type": "金额",
          "mapping": "personnel_orders.budget_amount_minor",
          "rule": "必填非负；不自动等于结算金额。",
          "id": "HR-F03-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.budget_amount_minor"
          ]
        },
        {
          "key": "notes",
          "label": "需求备注",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_orders.notes",
          "rule": "选填。",
          "id": "HR-F03-C012",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.notes"
          ]
        },
        {
          "key": "plannedStartAt",
          "label": "计划开始",
          "kind": "计算",
          "type": "日期时间",
          "mapping": "personnel_orders.planned_start_at",
          "rule": "服务日期与班次落为具体带时区的时间。",
          "id": "HR-F03-C013",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.planned_start_at"
          ],
          "derivedFrom": [
            "HR-F03-C004",
            "HR-F02-C003"
          ]
        },
        {
          "key": "plannedEndAt",
          "label": "计划结束",
          "kind": "计算",
          "type": "日期时间",
          "mapping": "personnel_orders.planned_end_at",
          "rule": "支持次日。",
          "id": "HR-F03-C014",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.planned_end_at"
          ],
          "derivedFrom": [
            "HR-F03-C004",
            "HR-F02-C004"
          ]
        },
        {
          "key": "standardMinutes",
          "label": "每人标准分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_orders.standard_minutes",
          "rule": "创建时的班次标准快照。",
          "id": "HR-F03-C015",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.standard_minutes"
          ],
          "derivedFrom": [
            "HR-F02-C006"
          ]
        },
        {
          "key": "shiftTemplateVersion",
          "label": "班次来源版本",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_orders.shift_template_version",
          "rule": "保留创建时版本。",
          "id": "HR-F03-C016",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.shift_template_version"
          ]
        },
        {
          "key": "shiftSnapshot",
          "label": "班次快照",
          "kind": "系统",
          "type": "对象",
          "mapping": "personnel_orders.shift_snapshot_json",
          "rule": "规则和计划休息快照；不随模板修改。",
          "id": "HR-F03-C017",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.shift_snapshot_json"
          ]
        },
        {
          "key": "ruleVersion",
          "label": "计算规范版本",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_orders.rule_version",
          "rule": "新记录 hr-0.3.0；历史记录明确标记。",
          "id": "HR-F03-C018",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.rule_version"
          ]
        },
        {
          "key": "status",
          "label": "订单状态",
          "kind": "系统",
          "type": "枚举",
          "mapping": "personnel_orders.status",
          "rule": "由业务操作推进，不手工随意改值。",
          "id": "HR-F03-C019",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.status"
          ]
        },
        {
          "key": "id",
          "label": "订单编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_orders.id",
          "rule": "所有履约记录引用它。",
          "id": "HR-F03-C020",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.id"
          ]
        },
        {
          "key": "version",
          "label": "订单修订号",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_orders.version",
          "rule": "每次操作带原版本防止覆盖。",
          "id": "HR-F03-C021",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_orders.version"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F03",
        "collection": "collection.html?form=HR-F03",
        "operations": "records.html?form=HR-F03",
        "analysis": "analysis.html?form=HR-F03",
        "development": "development.html?form=HR-F03"
      }
    },
    {
      "code": "HR-F04",
      "version": "hr-0.4.0",
      "title": "人员派遣与排班",
      "grain": "一个订单下的一人一次排班",
      "api": "POST /personnel/orders/:id/dispatch",
      "table": "personnel_assignments",
      "entry": "collection.html?form=HR-F04",
      "relation": "订单与人员通过派遣关联；出勤和绩效引用派遣编号。",
      "fields": [
        {
          "key": "personId",
          "label": "所选人员",
          "kind": "引用",
          "type": "多选",
          "mapping": "personnel_assignments.person_id",
          "rule": "从合格名册选择；每人产生一条派遣记录。",
          "id": "HR-F04-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.person_id"
          ]
        },
        {
          "key": "orderId",
          "label": "所选订单",
          "kind": "引用",
          "type": "编号",
          "mapping": "personnel_assignments.order_id",
          "rule": "上下文选择，不是新增表单。",
          "id": "HR-F04-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.order_id"
          ]
        },
        {
          "key": "plannedStartAt",
          "label": "排班开始",
          "kind": "计算",
          "type": "日期时间",
          "mapping": "personnel_assignments.planned_start_at",
          "rule": "继承订单具体计划；禁止同一人员排班重叠。",
          "id": "HR-F04-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.planned_start_at"
          ],
          "derivedFrom": [
            "HR-F03-C012"
          ]
        },
        {
          "key": "plannedEndAt",
          "label": "排班结束",
          "kind": "计算",
          "type": "日期时间",
          "mapping": "personnel_assignments.planned_end_at",
          "rule": "保留跨日的完整日期。",
          "id": "HR-F04-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.planned_end_at"
          ],
          "derivedFrom": [
            "HR-F03-C013"
          ]
        },
        {
          "key": "standardMinutes",
          "label": "标准分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_assignments.standard_minutes",
          "rule": "此人此派遣的标准额度。",
          "id": "HR-F04-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.standard_minutes"
          ],
          "derivedFrom": [
            "HR-F03-C014"
          ]
        },
        {
          "key": "schedule",
          "label": "排班依据",
          "kind": "系统",
          "type": "对象",
          "mapping": "personnel_assignments.schedule_json",
          "rule": "保留班次与来源信息。",
          "id": "HR-F04-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.schedule_json"
          ]
        },
        {
          "key": "personnelCode",
          "label": "人员编号快照",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_assignments.personnel_code",
          "rule": "派遣时保留。",
          "id": "HR-F04-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.personnel_code"
          ]
        },
        {
          "key": "displayName",
          "label": "姓名快照",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_assignments.display_name",
          "rule": "人员改名不改历史派遣。",
          "id": "HR-F04-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.display_name"
          ]
        },
        {
          "key": "roleName",
          "label": "岗位快照",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_assignments.role_name",
          "rule": "派遣时岗位。",
          "id": "HR-F04-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.role_name"
          ]
        },
        {
          "key": "status",
          "label": "派遣状态",
          "kind": "系统",
          "type": "枚举",
          "mapping": "personnel_assignments.status",
          "rule": "已派遣、已替换等。",
          "id": "HR-F04-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.status"
          ]
        },
        {
          "key": "id",
          "label": "派遣编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_assignments.id",
          "rule": "出勤、绩效关联键。",
          "id": "HR-F04-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.id"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F04",
        "collection": "collection.html?form=HR-F04",
        "operations": "records.html?form=HR-F04",
        "analysis": "analysis.html?form=HR-F04",
        "development": "development.html?form=HR-F04"
      }
    },
    {
      "code": "HR-F05",
      "version": "hr-0.4.0",
      "title": "出勤与实际休息",
      "grain": "一名派遣人员的一段工作区间或一条缺勤说明",
      "api": "POST /personnel/orders/:id/timesheets",
      "table": "personnel_timesheets",
      "entry": "collection.html?form=HR-F05",
      "relation": "同一派遣可有多段不重叠出勤；累计扣减同一班次标准，不能分段规避加班。",
      "fields": [
        {
          "key": "assignmentId",
          "label": "派遣人员",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_timesheets.assignment_id",
          "rule": "必填；只能选当前订单有效派遣。",
          "id": "HR-F05-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.assignment_id"
          ]
        },
        {
          "key": "attendance",
          "label": "出勤情况",
          "kind": "事实",
          "type": "枚举",
          "mapping": "personnel_timesheets.attendance",
          "rule": "出勤或缺勤；缺勤不产生工时。",
          "id": "HR-F05-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.attendance"
          ]
        },
        {
          "key": "startedAt",
          "label": "实际上工",
          "kind": "事实",
          "type": "日期时间",
          "mapping": "personnel_timesheets.started_at",
          "rule": "出勤必填；津巴布韦时间输入，UTC 保存。",
          "id": "HR-F05-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.started_at"
          ]
        },
        {
          "key": "endedAt",
          "label": "实际下工",
          "kind": "事实",
          "type": "日期时间",
          "mapping": "personnel_timesheets.ended_at",
          "rule": "出勤必填；完整日期，晚于上工。",
          "id": "HR-F05-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.ended_at"
          ]
        },
        {
          "key": "breaks",
          "label": "实际休息区间",
          "kind": "事实",
          "type": "区间列表",
          "mapping": "personnel_timesheets.breaks_json",
          "rule": "每项 startedAt、endedAt；工作区间内且不重叠。",
          "id": "HR-F05-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.breaks_json"
          ]
        },
        {
          "key": "noBreakConfirmed",
          "label": "确认本段无休息",
          "kind": "事实",
          "type": "确认",
          "mapping": "personnel_timesheets.no_break_confirmed",
          "rule": "无休息区间时必须明确确认，缺失不能默认为零。",
          "id": "HR-F05-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.no_break_confirmed"
          ]
        },
        {
          "key": "replacementNote",
          "label": "出勤说明",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_timesheets.replacement_note",
          "rule": "异常、缺勤等说明。",
          "id": "HR-F05-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.replacement_note"
          ]
        },
        {
          "key": "breakMinutes",
          "label": "实际休息分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_timesheets.break_minutes",
          "rule": "实际休息各区间时长之和；不可手填。",
          "id": "HR-F05-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.break_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C005"
          ]
        },
        {
          "key": "effectiveMinutes",
          "label": "实际净工作分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_timesheets.effective_minutes",
          "rule": "下工减上工减休息。",
          "id": "HR-F05-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.effective_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C003",
            "HR-F05-C004",
            "HR-F05-C005"
          ]
        },
        {
          "key": "regularMinutes",
          "label": "正常工作分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_timesheets.regular_minutes",
          "rule": "min(本段净工时,max(0,标准工时−此前净工时))。",
          "id": "HR-F05-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.regular_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C009",
            "HR-F05-C013"
          ]
        },
        {
          "key": "overtimeMinutes",
          "label": "超出标准分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_timesheets.overtime_minutes",
          "rule": "本段净工时减本段正常工时；不是审核结果。",
          "id": "HR-F05-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.overtime_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C009",
            "HR-F05-C010"
          ]
        },
        {
          "key": "overtimeStatus",
          "label": "加班审核状态",
          "kind": "审批",
          "type": "枚举",
          "mapping": "personnel_timesheets.overtime_status",
          "rule": "有加班自动待审核；另由 HR-F07 决定。",
          "id": "HR-F05-C012",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.overtime_status"
          ]
        },
        {
          "key": "standardMinutes",
          "label": "标准额度快照",
          "kind": "系统",
          "type": "分钟",
          "mapping": "personnel_timesheets.standard_minutes",
          "rule": "引用排班标准，旧记录不补造。",
          "id": "HR-F05-C013",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.standard_minutes"
          ]
        },
        {
          "key": "ruleVersion",
          "label": "计算规范",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_timesheets.rule_version",
          "rule": "记录使用的计算规则。",
          "id": "HR-F05-C014",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.rule_version"
          ]
        },
        {
          "key": "id",
          "label": "出勤记录编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_timesheets.id",
          "rule": "加班审核引用。",
          "id": "HR-F05-C015",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.id"
          ]
        },
        {
          "key": "version",
          "label": "出勤修订号",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_timesheets.version",
          "rule": "审核并发控制。",
          "id": "HR-F05-C016",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.version"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F05",
        "collection": "collection.html?form=HR-F05",
        "operations": "records.html?form=HR-F05",
        "analysis": "analysis.html?form=HR-F05",
        "development": "development.html?form=HR-F05"
      }
    },
    {
      "code": "HR-F06",
      "version": "hr-0.4.0",
      "title": "绩效与服务结果",
      "grain": "一名派遣人员的一次成果记录",
      "api": "POST /personnel/orders/:id/performance",
      "table": "personnel_performance",
      "entry": "collection.html?form=HR-F06",
      "relation": "绩效引用派遣，与工时分别记录，不把评分当工时。",
      "fields": [
        {
          "key": "assignmentId",
          "label": "派遣人员",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_performance.assignment_id",
          "rule": "当前订单有效派遣。",
          "id": "HR-F06-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.assignment_id"
          ]
        },
        {
          "key": "quantity",
          "label": "完成数量",
          "kind": "事实",
          "type": "数值",
          "mapping": "personnel_performance.quantity",
          "rule": "非负，必须连同单位解释。",
          "id": "HR-F06-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.quantity"
          ]
        },
        {
          "key": "unit",
          "label": "数量单位",
          "kind": "规则",
          "type": "文本",
          "mapping": "personnel_performance.unit",
          "rule": "必填；不同单位不能直接相加。",
          "id": "HR-F06-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.unit"
          ]
        },
        {
          "key": "qualityScore",
          "label": "质量评分",
          "kind": "事实",
          "type": "数值",
          "mapping": "personnel_performance.quality_score",
          "rule": "0–100；评价事实，不自动代表产量。",
          "id": "HR-F06-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.quality_score"
          ]
        },
        {
          "key": "evidenceBasis",
          "label": "评价依据",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_performance.evidence_basis",
          "rule": "必填，可注明附件编号。",
          "id": "HR-F06-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.evidence_basis"
          ]
        },
        {
          "key": "reworkOrIncident",
          "label": "返工与异常",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_performance.rework_or_incident",
          "rule": "选填。",
          "id": "HR-F06-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.rework_or_incident"
          ]
        },
        {
          "key": "id",
          "label": "绩效记录编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_performance.id",
          "rule": "服务端生成。",
          "id": "HR-F06-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_performance.id"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F06",
        "collection": "collection.html?form=HR-F06",
        "operations": "records.html?form=HR-F06",
        "analysis": "analysis.html?form=HR-F06",
        "development": "development.html?form=HR-F06"
      }
    },
    {
      "code": "HR-F07",
      "version": "hr-0.4.0",
      "title": "加班审核",
      "grain": "一条出勤中待审核加班的一次决定",
      "api": "POST /personnel/timesheets/:id/overtime",
      "table": "personnel_timesheets",
      "entry": "collection.html?form=HR-F07",
      "relation": "读取 HR-F05 计算的加班事实；审批改变计费资格，不改事实时长。",
      "fields": [
        {
          "key": "id",
          "label": "出勤记录",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_timesheets.id",
          "rule": "所选出勤编号。",
          "id": "HR-F07-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.id"
          ]
        },
        {
          "key": "status",
          "label": "加班决定",
          "kind": "审批",
          "type": "枚举",
          "mapping": "personnel_timesheets.overtime_status",
          "rule": "批准或拒绝；本期整段审核，不提供部分批准。",
          "id": "HR-F07-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.overtime_status"
          ]
        },
        {
          "key": "timesheetVersion",
          "label": "出勤版本",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_timesheets.version",
          "rule": "提交当前版本，冲突需重新读取。",
          "id": "HR-F07-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.version"
          ]
        },
        {
          "key": "overtimeDecidedBy",
          "label": "审核人",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_timesheets.overtime_decided_by",
          "rule": "从登录会话记录。",
          "id": "HR-F07-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.overtime_decided_by"
          ]
        },
        {
          "key": "overtimeDecidedAt",
          "label": "审核时间",
          "kind": "系统",
          "type": "日期时间",
          "mapping": "personnel_timesheets.overtime_decided_at",
          "rule": "服务端时间。",
          "id": "HR-F07-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_timesheets.overtime_decided_at"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F07",
        "collection": "collection.html?form=HR-F07",
        "operations": "records.html?form=HR-F07",
        "analysis": "analysis.html?form=HR-F07",
        "development": "development.html?form=HR-F07"
      }
    },
    {
      "code": "HR-F08",
      "version": "hr-0.4.0",
      "title": "客户验收",
      "grain": "一份订单的一次客户验收意见",
      "api": "POST /personnel/orders/:id/acceptance",
      "table": "personnel_acceptance",
      "entry": "collection.html?form=HR-F08",
      "relation": "订单提交后方可验收；退回进入返工，接受后才可结算。",
      "fields": [
        {
          "key": "decision",
          "label": "验收决定",
          "kind": "审批",
          "type": "枚举",
          "mapping": "personnel_acceptance.decision",
          "rule": "接受、拒绝、争议、退回。",
          "id": "HR-F08-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_acceptance.decision"
          ]
        },
        {
          "key": "reviewerName",
          "label": "客户验收人",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_acceptance.reviewer_name",
          "rule": "必填；系统另记录操作人。",
          "id": "HR-F08-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_acceptance.reviewer_name"
          ]
        },
        {
          "key": "reason",
          "label": "验收说明",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_acceptance.reason",
          "rule": "记录决定依据。",
          "id": "HR-F08-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_acceptance.reason"
          ]
        },
        {
          "key": "orderId",
          "label": "订单编号",
          "kind": "引用",
          "type": "编号",
          "mapping": "personnel_acceptance.order_id",
          "rule": "与服务订单关联。",
          "id": "HR-F08-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_acceptance.order_id"
          ]
        },
        {
          "key": "id",
          "label": "验收记录编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_acceptance.id",
          "rule": "保留历次意见，不覆盖。",
          "id": "HR-F08-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_acceptance.id"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F08",
        "collection": "collection.html?form=HR-F08",
        "operations": "records.html?form=HR-F08",
        "analysis": "analysis.html?form=HR-F08",
        "development": "development.html?form=HR-F08"
      }
    },
    {
      "code": "HR-F09",
      "version": "hr-0.4.0",
      "title": "结算核对与锁定",
      "grain": "一份订单的一份锁定结算",
      "api": "POST /personnel/orders/:id/settlement-preview ; POST /personnel/orders/:id/transition",
      "table": "personnel_settlements",
      "entry": "collection.html?form=HR-F09",
      "relation": "必须已接受且无待审核加班、未完成附件；锁定后不能覆盖，修改应走后续独立调整流程。",
      "fields": [
        {
          "key": "orderId",
          "label": "服务订单",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_settlements.order_id",
          "rule": "读取订单及其履约记录。",
          "id": "HR-F09-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.order_id"
          ]
        },
        {
          "key": "regularMinutes",
          "label": "正常分钟合计",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_settlements.regular_minutes",
          "rule": "同一订单正常工时求和。",
          "id": "HR-F09-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.regular_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C010"
          ]
        },
        {
          "key": "approvedOvertimeMinutes",
          "label": "批准加班分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_settlements.approved_overtime_minutes",
          "rule": "只计已批准加班。",
          "id": "HR-F09-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.approved_overtime_minutes"
          ],
          "derivedFrom": [
            "HR-F05-C011",
            "HR-F07-C002"
          ]
        },
        {
          "key": "billableMinutes",
          "label": "本期结算分钟",
          "kind": "计算",
          "type": "分钟",
          "mapping": "personnel_settlements.billable_minutes",
          "rule": "正常分钟＋已批准加班。",
          "id": "HR-F09-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.billable_minutes"
          ],
          "derivedFrom": [
            "HR-F09-C002",
            "HR-F09-C003"
          ]
        },
        {
          "key": "currency",
          "label": "结算币种",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_settlements.currency",
          "rule": "订单币种快照。",
          "id": "HR-F09-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.currency"
          ]
        },
        {
          "key": "revenueMinor",
          "label": "客户服务收入",
          "kind": "计算",
          "type": "最小货币单位",
          "mapping": "personnel_settlements.revenue_minor",
          "rule": "结算分钟×客户时费率÷60，按货币最小单位四舍五入。",
          "id": "HR-F09-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.revenue_minor"
          ],
          "derivedFrom": [
            "HR-F09-C004",
            "HR-F03-C008"
          ]
        },
        {
          "key": "directLabourCostMinor",
          "label": "直接人工成本",
          "kind": "计算",
          "type": "最小货币单位",
          "mapping": "personnel_settlements.direct_labour_cost_minor",
          "rule": "本期采用相同结算分钟×人工时费率÷60。",
          "id": "HR-F09-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.direct_labour_cost_minor"
          ],
          "derivedFrom": [
            "HR-F09-C004",
            "HR-F03-C009"
          ]
        },
        {
          "key": "grossDifferenceMinor",
          "label": "收入减直接人工",
          "kind": "计算",
          "type": "最小货币单位",
          "mapping": "personnel_settlements.gross_difference_minor",
          "rule": "不含其他费用，不称净利润。",
          "id": "HR-F09-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.gross_difference_minor"
          ],
          "derivedFrom": [
            "HR-F09-C006",
            "HR-F09-C007"
          ]
        },
        {
          "key": "snapshot",
          "label": "结算依据快照",
          "kind": "系统",
          "type": "对象",
          "mapping": "personnel_settlements.snapshot_json",
          "rule": "保存来源与结果，锁定后不随上游变动。",
          "id": "HR-F09-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.snapshot_json"
          ]
        },
        {
          "key": "locked",
          "label": "锁定结果",
          "kind": "系统",
          "type": "确认",
          "mapping": "personnel_settlements.locked",
          "rule": "通过服务端验收条件后置为锁定。",
          "id": "HR-F09-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.locked"
          ]
        },
        {
          "key": "id",
          "label": "结算编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_settlements.id",
          "rule": "唯一关联订单。",
          "id": "HR-F09-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.id"
          ]
        },
        {
          "key": "version",
          "label": "结算版本",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_settlements.version",
          "rule": "保留锁定版本。",
          "id": "HR-F09-C012",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_settlements.version"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F09",
        "collection": "collection.html?form=HR-F09",
        "operations": "records.html?form=HR-F09",
        "analysis": "analysis.html?form=HR-F09",
        "development": "development.html?form=HR-F09"
      }
    },
    {
      "code": "HR-F10",
      "version": "hr-0.4.0",
      "title": "照片、视频与证据",
      "grain": "一个订单阶段的一份附件",
      "api": "POST /personnel/media/init ; PUT /personnel/media/:id",
      "table": "personnel_media",
      "entry": "collection.html?form=HR-F10",
      "relation": "D1 存元数据；R2 存字节；运营按订单、阶段和附件编号检索。不是另建一份孤立图库。",
      "fields": [
        {
          "key": "orderId",
          "label": "关联订单",
          "kind": "引用",
          "type": "编号",
          "mapping": "personnel_media.order_id",
          "rule": "当前订单。",
          "id": "HR-F10-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.order_id"
          ]
        },
        {
          "key": "stage",
          "label": "采集环节",
          "kind": "事实",
          "type": "选择",
          "mapping": "personnel_media.stage",
          "rule": "派遣、到场、出勤、绩效、验收。",
          "id": "HR-F10-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.stage"
          ]
        },
        {
          "key": "purpose",
          "label": "附件用途",
          "kind": "事实",
          "type": "文本",
          "mapping": "personnel_media.purpose",
          "rule": "必填，例如到场确认。",
          "id": "HR-F10-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.purpose"
          ]
        },
        {
          "key": "description",
          "label": "现场说明",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_media.description",
          "rule": "必填；模拟材料必须标明模拟。",
          "id": "HR-F10-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.description"
          ]
        },
        {
          "key": "capturedAt",
          "label": "拍摄时间",
          "kind": "事实",
          "type": "日期时间",
          "mapping": "personnel_media.captured_at",
          "rule": "可选；不能拿上传时间冒充拍摄时间。",
          "id": "HR-F10-C005",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.captured_at"
          ]
        },
        {
          "key": "originalName",
          "label": "文件名",
          "kind": "事实",
          "type": "文件",
          "mapping": "personnel_media.original_name",
          "rule": "浏览器读取文件名称。",
          "id": "HR-F10-C006",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.original_name"
          ]
        },
        {
          "key": "contentType",
          "label": "文件类型",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_media.content_type",
          "rule": "图像或视频白名单；服务端校验。",
          "id": "HR-F10-C007",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.content_type"
          ]
        },
        {
          "key": "sizeBytes",
          "label": "申报文件大小",
          "kind": "系统",
          "type": "字节",
          "mapping": "personnel_media.size_bytes",
          "rule": "浏览器读取；当前每份不超过 25 MiB。",
          "id": "HR-F10-C008",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.size_bytes"
          ]
        },
        {
          "key": "durationSeconds",
          "label": "视频时长",
          "kind": "系统",
          "type": "秒",
          "mapping": "personnel_media.duration_seconds",
          "rule": "浏览器读取视频元数据；服务端验证数值，不宣称已做云端转码校验。",
          "id": "HR-F10-C009",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.duration_seconds"
          ]
        },
        {
          "key": "byteCount",
          "label": "实收字节",
          "kind": "系统",
          "type": "字节",
          "mapping": "personnel_media.byte_count",
          "rule": "服务端从真实文件计算。",
          "id": "HR-F10-C010",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.byte_count"
          ]
        },
        {
          "key": "contentHash",
          "label": "内容校验值",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_media.content_hash",
          "rule": "服务端计算，用于一致性。",
          "id": "HR-F10-C011",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.content_hash"
          ]
        },
        {
          "key": "status",
          "label": "上传状态",
          "kind": "系统",
          "type": "枚举",
          "mapping": "personnel_media.status",
          "rule": "待上传、已上传、失败、已删除。",
          "id": "HR-F10-C012",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.status"
          ]
        },
        {
          "key": "failureReason",
          "label": "失败原因",
          "kind": "系统",
          "type": "文本",
          "mapping": "personnel_media.failure_reason",
          "rule": "运营排障用。",
          "id": "HR-F10-C013",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.failure_reason"
          ]
        },
        {
          "key": "objectKey",
          "label": "对象存储位置",
          "kind": "系统",
          "type": "私有文本",
          "mapping": "personnel_media.object_key",
          "rule": "服务端私有，不向页面暴露；按附件编号授权访问。",
          "id": "HR-F10-C014",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.object_key"
          ]
        },
        {
          "key": "id",
          "label": "附件编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_media.id",
          "rule": "业务关联标识。",
          "id": "HR-F10-C015",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.id"
          ]
        },
        {
          "key": "version",
          "label": "附件修订号",
          "kind": "系统",
          "type": "整数",
          "mapping": "personnel_media.version",
          "rule": "删除或变更使用版本校验。",
          "id": "HR-F10-C016",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_media.version"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F10",
        "collection": "collection.html?form=HR-F10",
        "operations": "records.html?form=HR-F10",
        "analysis": "analysis.html?form=HR-F10",
        "development": "development.html?form=HR-F10"
      }
    },
    {
      "code": "HR-F11",
      "version": "hr-0.4.0",
      "title": "派遣替换",
      "grain": "一名原派遣与一名替代人员的关系",
      "api": "POST /personnel/orders/:id/assignments/replacement",
      "table": "personnel_assignments",
      "entry": "collection.html?form=HR-F11",
      "relation": "原派遣保留为已替换，新记录指向原记录。本期只支持原人员尚未记录出勤的替换。",
      "fields": [
        {
          "key": "originalAssignmentId",
          "label": "原派遣人员",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_assignments.replaced_assignment_id",
          "rule": "选当前有效派遣；有出勤时禁止直接替换。",
          "id": "HR-F11-C001",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.replaced_assignment_id"
          ]
        },
        {
          "key": "personId",
          "label": "替代人员",
          "kind": "引用",
          "type": "选择",
          "mapping": "personnel_assignments.person_id",
          "rule": "需合格、可用且无排班冲突。",
          "id": "HR-F11-C002",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.person_id"
          ]
        },
        {
          "key": "reason",
          "label": "替换原因",
          "kind": "事实",
          "type": "长文本",
          "mapping": "personnel_assignments.replacement_reason",
          "rule": "必填；原记录保留。",
          "id": "HR-F11-C003",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.replacement_reason"
          ]
        },
        {
          "key": "id",
          "label": "新派遣编号",
          "kind": "系统",
          "type": "编号",
          "mapping": "personnel_assignments.id",
          "rule": "服务端生成。",
          "id": "HR-F11-C004",
          "definitionVersion": "1.0.0",
          "introducedIn": "hr-0.4.0",
          "sourceRefs": [
            "db:personnel_assignments.id"
          ]
        }
      ],
      "views": {
        "definition": "forms.html#HR-F11",
        "collection": "collection.html?form=HR-F11",
        "operations": "records.html?form=HR-F11",
        "analysis": "analysis.html?form=HR-F11",
        "development": "development.html?form=HR-F11"
      }
    }
  ],
  "common": [
    {
      "key": "expectedVersion",
      "meaning": "变更已有记录必须附带此前读取的记录版本；冲突后重新读取，不覆盖。",
      "id": "HR-COM-C001",
      "definitionVersion": "1.0.0",
      "introducedIn": "hr-0.4.0",
      "sourceRefs": []
    },
    {
      "key": "Idempotency-Key",
      "meaning": "每次新提交使用独立请求编号；网络重试沿用原编号，防止重复建单。",
      "id": "HR-COM-C002",
      "definitionVersion": "1.0.0",
      "introducedIn": "hr-0.4.0",
      "sourceRefs": []
    },
    {
      "key": "created_at / updated_at / created_by",
      "meaning": "服务端审计事实；不是现场自行输入。",
      "id": "HR-COM-C003",
      "definitionVersion": "1.0.0",
      "introducedIn": "hr-0.4.0",
      "sourceRefs": []
    }
  ],
  "kinds": {
    "事实": "人或设备观察到的事件、数值、时间，不凭公式臆造。",
    "引用": "选择已存在的业务记录，保存编号。",
    "规则": "商业约定或班次标准，有来源和生效版本。",
    "计算": "由事实及规则计算，页面只读，服务端重算。",
    "审批": "授权人员作出的决定，保留人和时间。",
    "系统": "编号、版本、审计及保存状态，由服务端维护。"
  },
  "schemaDefinition": {
    "version": "hr-0.4.0",
    "scope": "表单、字段、关系和共享控制的定义版本；不是每一条已存业务记录已经迁移到该定义。",
    "historicalSchemas": "历史记录保留其创建时的规则快照、字段可得性和 ruleVersion；不得用当前定义回填或改写历史事实。"
  }
}
