仕兔平台 V1.0 MVP/技术规格附录
规划外补充 · 开发交付物 总览
本文档的定位:原型解决「长什么样」,本附录解决「字段叫什么、状态怎么迁、什么时候跑、边界怎么算」。两份产品文档均未定义这些内容,但它们决定后端实现。建议在开发启动前与产品逐条确认并锁定。

01 · 核心数据模型

字段命名沿用文档中已出现的口径(source_company_id / bound_company_id)。红色标记为业务关键字段,橙色标记为永不可变字段。

user · 用户

字段类型取值 / 示例可变说明
user_idstringU2026072301887注册即生成,全局唯一
phonestring加密存储,按角色脱敏展示注册唯一凭证,无密码
real_namestring加密存储实名认证后写入,绑定后不可改
id_cardstring加密存储,一证一号唯一索引实名认证后写入
birth_datedate由 OCR 识别,不采用用户自填年龄硬拦截的唯一依据
source_company_idstringC10023 / PLATFORM永不更改唯一决定人才流转费 80% 归属。注册时按渠道锁定;公司注销后保留仅存证,流转费改归平台
bound_company_idstringC10023 / NULL公私域的唯一判定依据。为空即公域
domain_tagderived私域 / 公域 / 临时私域派生不落库,由 bound_company_id + user_status 实时计算
user_statusenum枚举字典全局状态机主字段
match_scopederived全平台 / 仅本公司 / 仅内部调岗 / 不可匹配派生由 domain_tag + user_status 推导
response_deadlinedatetime2026-07-24 09:58:0024h 响应窗口截止时刻;每次阶段变更重置;公域用户为 NULL
profile_idstringPROFILE-…-R1AI 问薪画像版本,每次重新匹配 +1
match_countint0 – 不限重新匹配次数,≥3 次触发流转建议
blacklist_flagboolfalse平台级失信标记
advance_debtdecimal0.00未还清预支欠款,离职时强制结清

company · 劳务公司(租户)

字段类型取值 / 示例可变说明
company_idstringC10023租户主键
company_statusenum正常 / 限流 / 封禁 / 已注销 / 已倒闭注销与倒闭触发批量解绑
onboard_datedate2025-04-01免费期起算日
free_period_enddate2025-06-30入驻 + 3 个月
stock_baseint180锁定后不可变存量基数,免费期内导入人数;期满自动锁定,存量人员永久免费
stock_locked_atdatetime2025-07-01 02:00由定时任务写入
credit_scoreint0 – 100,初始 100<60 权重 ×0.2;<30 永久停服
penalty_levelenum无 / 1 级警告 / 2 级限流 / 3 级封禁由每日风控任务计算
verified_clientsarray已备案甲方企业列表岗位审核时校验关联性

job · 岗位

字段类型取值 / 示例可变说明
job_id / company_id / project_idstringJ20260701008归属链
job_statusenum待审核 / 招聘中 / 暂停招聘 / 已下架 / 强制下架暂停不删数据,恢复后权重从新岗位重算
salary_min / salary_maxdecimal5800 / 6800综合月收入区间
quota_remainingint12并发热点,报名时乐观锁扣减,取消/爽约回补
posted_daysderived6派生挂岗天数,驱动权重衰减
match_weightdecimal0.00 – 1.15企业端与用户端均不可见(文档 12.1 隐形限流)
client_companystring立讯精密工业(昆山)须在 verified_clients
contract_filefile甲方合作合同发布前必传,平台审核依据
complaint_countint0核实属实累计 ≥3 → 自动下架

application · 报名 / 报备

字段类型取值 / 示例可变说明
application_idstringBM202607231014
app_statusenum待确认 / 待面试 / 待确权 / 已入职 / 已取消 / 已超时 / 面试未通过 / 爽约对应 C 端「我的报备」六标签
cancel_operatorstring驻场 / 项目经理 user_id用户不可自行取消,必须有后台操作人
disclaimer_logjson{user_id, time, ip}告知书同意留痕,永久存档
expire_atdatetime报备发起 + N 小时超时未确认自动作废

billing_daily · 每日计费快照

字段类型取值 / 示例说明
biz_date + company_id + user_id联合唯一索引幂等键,重跑不重复计费
fee_typeenumGROWTH_SERVICE / TRANSFER增长技术服务费 / 人才流转费
unit_pricedecimal0.10 / 10.00V1.0 服务费统一 0.10;阶梯属 V1.5
payer / payee_supply / payee_platformstring接收方 / 供给方 8 元 / 平台 2 元供给方为平台时 10 元全归平台
is_stockbooltrue 则不计费存量人员永久免费

02 · 枚举字典

全部枚举建议以英文常量落库、中文仅用于展示,避免多端文案不一致导致状态判断出错。

user_status · 用户状态

常量中文公私域匹配范围
GUEST游客公域不展示岗位
PUBLIC_SEEKING公域求职公域全平台
PRIVATE_PENDING私域待匹配私域仅本公司
PENDING_INTERVIEW待面试临时私域不可再匹配
PENDING_CONFIRM待确权临时私域不可再匹配
EMPLOYED已入职在岗私域仅本公司内部调岗
RESIGNED已离职公域全平台
UNFOLLOWED未被跟进公域全平台(24h 超时释放)

其他枚举

job_status
PENDING_AUDIT 待审核RECRUITING 招聘中PAUSED 暂停招聘OFFLINE 已下架FORCE_OFFLINE 强制下架
company_status
NORMAL 正常THROTTLED 限流BANNED 封禁DEREGISTERED 已注销BANKRUPT 已倒闭
contract_status
EFFECTIVE 生效中EXPIRED 已到期DISSOLVED 已解除TERMINATED 已终止
advance_status
SUBMITTED 已提交SITE_APPROVED 驻场初审通过PM_APPROVED 经理终审通过PAID 已拨款REPAID 已抵扣REJECTED 已驳回
release_reason · 释放原因
MANUAL 主动释放TIMEOUT_24H 24h 超时INTERVIEW_FAILED 面试未通过CONFIRM_TIMEOUT 确权超时NO_SHOW 爽约CANCELLED 取消报名RESIGNED 离职COMPANY_CLOSED 公司注销

03 · 用户状态机迁移表

这是全系统最核心的一张表。每一次迁移都必须写入 user_status_log(含操作人、原因、时间、IP) —— 释放与取消在纠纷时是关键证据。

FromTo触发事件触发方必须执行的副作用
GUESTPRIVATE_PENDING扫码 / 分享链接注册用户source_company_id(永久)+ bound_company_id;启动 24h 窗口;推送驻场
GUESTPUBLIC_SEEKING自主注册 / 品牌广告 / 已入职员工分享用户source = PLATFORM;bound = NULL;不启动 24h 窗口
GUESTEMPLOYED花名册导入平台/企业直接为私域在岗;计入存量基数(免费期内)
PUBLIC_SEEKINGPENDING_INTERVIEW报名岗位用户公域→私域唯一转变点:写 bound_company_idquota_remaining -1;启动 24h;通知驻场
PRIVATE_PENDINGPENDING_INTERVIEW报名岗位用户bound 不变;quota_remaining -1;重置 24h
PENDING_INTERVIEWPENDING_CONFIRM到厂确认 + 面试通过驻场重置 24h(确权窗口);生成待签合同
PENDING_CONFIRMEMPLOYED入职确权 + 电子签约驻场唯一统计节点:bound 写入;合同生效;启动计费(服务费 + 流转费);推送项目经理/老板;清空 response_deadline
PENDING_INTERVIEWPUBLIC_SEEKING面试未通过 / 取消报名 / 爽约 / 24h 超时驻场 / 系统bound 清空;quota_remaining +1source 不变;记录 release_reason
PENDING_CONFIRMPUBLIC_SEEKING确权超时 24h系统bound 清空;quota +1;作废待签合同
PRIVATE_PENDINGPUBLIC_SEEKING主动释放 / 24h 无跟进被动释放经纪人 / 系统bound 清空;source 保留(后续流转费仍归原公司 8 元/天)
EMPLOYEDRESIGNED离职确认项目经理bound 清空;停止全部计费;合同 → 已终止;结清 advance_debt;释放宿舍/工号
EMPLOYEDEMPLOYED内部调岗项目经理bound 不变;计费不中断;换 job_id / project_id
* (bound ≠ NULL)PUBLIC_SEEKING公司注销 / 倒闭平台批量 bound 清空;source 保留仅存证;后续流转费 10 元全归平台;历史数据不删
禁止的迁移:用户不可自行触发任何释放类迁移;企业不可在 EMPLOYED 状态下单方面置为公域(必须走离职流程);source_company_id 在任何迁移中都不得写入。

04 · 其他状态机

job · 岗位

From → To触发副作用
待审核 → 招聘中平台审核通过进入匹配池,weight = 1.0
待审核 → 已下架审核驳回同步驳回说明至企业端
招聘中 → 暂停招聘企业操作 / 满员移出匹配池,数据保留
暂停招聘 → 招聘中企业恢复posted_days 重置,权重从新岗位算
招聘中 → 强制下架投诉 ≥3 属实 / 低转化 >90 天weight = 0;扣诚信分

advance · 薪酬预支

From → To触发副作用
— → 已提交员工本人发起校验 5 项准入;占用 1 次机会
已提交 → 驻场通过驻场初审推送项目经理
驻场通过 → 经理终审通过项目经理双级即终审,进入拨款
终审通过 → 已拨款财务advance_debt += 500
已拨款 → 已抵扣发薪日定时任务实发不足则部分抵扣并结转
任意 → 已驳回任一节点驳回退回本次机会

05 · 定时任务清单

系统约一半的业务逻辑发生在无人操作的后台任务里 —— 计费、超时释放、账单、抵扣、降权全靠它们。原型无法表达这一层,但它决定系统是否真的能跑起来。所有任务必须幂等。

任务频率幂等键职责与关键约定
daily_billing每日 00:05biz_date + user_id + fee_type核心:按 00:00 在岗快照生成计费明细。增量 = 当前在岗 − 存量基数;流转费按 source 判定分账。离职当日是否计费需产品裁定(原型按不计)
response_timeout_scan每 5 分钟user_id + stage + deadline核心:扫描 response_deadline 到期的私域用户 → 被动释放为公域,写 release_reason=TIMEOUT_24H,推送用户与企业
follow_up_push白天每 6h
夜间每 12h
user_id + round_no向驻场 / 项目经理 / 老板三方推送跟进提醒(文档第四节)。需定义"白天"时段边界
job_weight_recalc每日 01:00job_id + biz_date重算挂岗衰减 × 诚信系数 × 限流系数 × 名额系数;结果仅平台可见
zombie_job_scan每日 01:30job_id挂岗 >60 天零报名零入职 → weight=0 移出匹配池
job_stale_notify每日 09:00job_id + rule_code15 天无新报名 / 30 天无新入职 / 45 天强制更新三档提醒
stock_base_lock每日 02:00company_id免费期满自动锁定存量基数,锁定后不可变
credit_score_calc每日 03:00company_id + biz_date诚信分扣分归集 + 三级处罚判定(单月 3 次异常 / 连续 2 月 / 连续 3 月)
report_expire每 10 分钟application_id报备超时未确认自动作废(文档 6.3)
monthly_bill_gen每月最后一天 23:30company_id + month汇总 billing_daily 生成企业月账单,推送企业端,开启 5 个工作日异议期
advance_deduct发薪日(企业可配)advance_id从实发工资抵扣;不足则部分抵扣 + 结转,不计息
advance_quota_grant每日 04:00user_id + biz_month每满 7 个在岗日 +1 次机会;月上限 4 次;月末清零不结转
contract_expire_notify每日 10:00contract_id + days合同到期前 60/30/7 天提醒

06 · 事件与消息清单

文档定义了十余种推送但没有统一的事件模型。建议以事件驱动,订阅方与通道可配置,避免推送逻辑散落在各业务代码里。

事件触发点订阅方通道 / 备注
APPLICATION_CREATED报名成功驻场站内 + Push;驻场需「点击知悉」
INTERVIEW_INFO_PUSHED驻场知悉后推送求职者站内 + 短信;含时间/地点/路线/证件清单
ARRIVAL_CONFIRMED到厂确认求职者、项目经理站内
CONTRACT_SIGNED电子签约完成项目经理 + 劳务老板文档 7.3 明确要求双端推送
FOLLOW_UP_REMINDER24h 窗口定时驻场 + 项目经理 + 老板三方同步,白天 6h / 夜间 12h
USER_RELEASED任意释放路径求职者、原归属公司必须告知用户,否则产生"莫名看不到岗位"的信任损耗
TRANSFER_FEE_STARTED流转人员入职确权供给方公司、平台财务流转费开始计费通知
ADVANCE_PENDING_APPROVAL预支流转至下一节点驻场 → 项目经理逐级推送,含催办
INJURY_ALERT工伤上报项目经理 + 老板文档 10.2「工伤紧急异常推送」,需最高优先级通道
MONTHLY_BILL_ISSUED月账单生成劳务老板含异议入口
COMPLAINT_VERIFIED投诉核实属实企业、平台风控触发扣分与下架
缺口提示:两份文档均未定义通知模板管理与渠道配置(站内 / 短信 / 微信 / Push),也未定义免打扰时段。建议 V1.0 至少支持模板文案可配置,避免改文案就发版。

07 · 关键计算公式

公私域与匹配范围(派生,不落库)
domain_tag =
 bound_company_id == NULL ? "公域"
 : status ∈ (PENDING_INTERVIEW, PENDING_CONFIRM) ? "临时私域"
 : "私域"

match_scope =
 status ∈ (PENDING_INTERVIEW, PENDING_CONFIRM) ? "不可匹配"
 : status == EMPLOYED ? "仅本公司内部调岗"
 : domain_tag == "私域" ? "仅本公司"
 : "全平台"
增长技术服务费(V1.0)
# 每日 00:00 快照
增量 = 当前在岗人数 − stock_base
当日费用 = max(增量, 0) × 0.10
# 阶梯定价 0.10/0.09/0.08 属 V1.5
# 存量人员永久免费,不受离职影响
人才流转费分账
payer = bound_company_id // 接收方付 10 元/人/天
if source_company_id == "PLATFORM"
  platform_income = 10.00 // 全归平台
elif source 公司已注销
  platform_income = 10.00 // 平台继承权益
else
  supply_income = 8.00;platform_income = 2.00
薪酬预支准入(5 项全通过)
can_apply =
 status == EMPLOYED
 && bound_company_id != NULL
 && 在岗天数 >= 7
 && 本月已用次数 < 4
 && 剩余机会 > 0 // 每满 7 在岗日 +1

08 · 边界与幂等约定

以下均为两份文档未覆盖、但开发必然遇到的问题。需产品逐条裁定并写入验收标准。

编号场景问题原型采用的口径(待确认)
E-01岗位名额并发多人同时报名最后 1 个名额乐观锁 + 版本号;扣减失败提示「名额已满」并引导重新匹配
E-02名额扣减时点报名时扣还是入职时扣?取消/爽约是否回补?报名即扣 −1;取消 / 爽约 / 面试未通过 / 超时均 +1 回补
E-03计费日切当日入职、当日离职是否计费00:00 在岗快照:当日入职不计,次日起计;离职当日不计
E-04跨月入离职月中入职的账单归属按自然日累计,不做整月折算
E-0524h 窗口起点从注册算还是从每阶段完成算每个阶段完成时刻重置(注册 / 报名 / 面试通过各自起算)
E-06存量人员回流存量员工离职后再入职原公司恢复存量身份,基数不变,仍免费
E-07内部调岗计费同公司换项目是否中断计费不中断,视为持续在岗
E-08流转费与服务费叠加流转人员是否同时计两种费叠加(文档 2.4 资金流向表已明确)
E-09预支欠款跨公司A 公司欠款未清即入职 B 公司离职时强制结清;未清则打失信标记,新公司不承接旧债
E-10重复实名同一身份证多次注册一证一号;24h 内多手机号注册判定代刷,扣引流企业 30 分
E-11释放后立即再报名被释放用户能否马上报回原公司可以;但同一岗位 24h 内不重复推荐
E-12时区与节假日24h / 5 个工作日 / 自然周的口径统一 Asia/Shanghai;「工作日」需接入法定节假日日历

数据安全与留痕(合规底线)

加密存储

手机号、姓名、身份证号必须加密落库;证件照片 OCR 后不留存原图

分级脱敏

驻场可见完整手机号;项目经理隐藏手机与证件;老板仅聚合数据

永久留痕

告知书同意(ID+时间+IP)、状态迁移、释放/取消操作人、诚信分人工调整