This commit is contained in:
2026-06-25 18:24:29 +08:00
commit a1190d7d9a
90 changed files with 5459 additions and 0 deletions

69
docs/05-业务规则.md Normal file
View File

@@ -0,0 +1,69 @@
# 05 · 业务规则(必落地)
> 这些规则散落在 PRD 与原型的橙色虚线注释里,是产品的「魂」。开发时务必逐条实现,不可省略。
## R1 · 登录与建档分流
- 微信授权登录后:**无任何狗狗 → 直接进建档0b**;已有狗狗 → 跳过,进首页。
- 协议/隐私为必须合规要素,登录页底部展示。
## R2 · 建档门槛最低
-**名字、犬种** 必填,其余(性别/年龄/体重/头像)全选填——降低首次门槛。
- 建档与编辑**复用同一表单**;编辑时预填已有值,标题改「编辑资料」。
- 犬种用于映射体型档位;中华田园犬、串串、找不到的犬种必须让用户手动选体型档位。
## R3 · 狗步算法
- 狗步公式:`dogStepsByDog[dogId] = round(distanceMeters / dog.stride)`
- `stride` 由体型档位决定,不做「每品种一个系数」。体型档位与基础步幅:超小型 `0.20m`、小型/短腿 `0.25m`、中型 `0.35m`、大型 `0.45m`、超大型 `0.55m`
- 填了体重时,在基础步幅上做二次校准:`stride = baseStride * (1 + (weight - 档位标准体重) * 0.005)`,修正幅度封顶 ±15%。
- 狗步只是展示层:多狗同遛时按每只狗分别计算;成就、未来排行榜和防刷统计只用距离、时长、连续天数等客观量。
## R4 · 多狗选择
- 仅多狗用户点遛狗时弹出选择层;单狗直接进遛狗中。
- 选择层**可多选**,支持多只狗一起遛(一条 walk 关联多个 dogId
## R5 · 遛狗计时与暂停
- 计时基于时间戳差值,扣除暂停时长;**切后台/锁屏不丢**。
- **暂停 = 停止计时 + 数据置灰**,主按钮变「继续」。意义:遛狗常有等狗、捡便便的停顿,暂停防止污染数据。
- 结束必须**二次确认**再生成成果卡。
## R6 · 定位与数据降级
- V1 纳入可选 GPS 距离与狗步:授权时累计距离并换算狗步。
- 未授权定位时,**距离 / 狗步隐藏**(存 null时长照常。不阻断遛狗闭环。
- 首次打开不强制索权;定位应在开始遛狗或用户主动开启增强能力时请求。
- 地图轨迹回放、精准轨迹去噪后置,不阻塞 V1。
## R7 · 成果卡全选填
- 照片、备注、天气、状态等所有输入字段**全部选填,跳过也能保存**——遛狗时用户腾不出手。
- 视角为「狗狗走了」而非「你遛了」。
- **分享朋友圈是首选 CTA**(拉新入口)。
- 核心记录在结束遛狗时先保存;成果卡补充字段通过回写接口保存,跳过不影响记录沉淀。
## R8 · 手动补记
- 入口:历史页 / 记录 Tab 右上「+」。
- 数据层标记 `source='manual'``isManual=true`
- **补记可维持连续打卡不断签**(参与连续天数计算)。
- **补记不计入排行榜**`countsForRanking=false`,防刷量)。
- 补记记录列表带「补记」标识区分。
## R9 · 统计维度
- 累计只用 **次数 / 公里 / 连续天数**
- **不要配速、不要卡路里**——记录陪伴厚度,而非运动表现。
## R10 · 连续天数算法
-`walkDate`(本地时区 yyyy-mm-dd为单位。
- 同日多次遛狗:连续天数不变。
- 距上次为「昨天」:`currentStreak += 1`
- 距上次 > 1 天(断签):重置为 1。
- 补记同样按其 `walkDate` 参与此计算。
## R11 · 成就体系
- 成就**按狗维度**,基于 **连续 / 累计 / 场景**,而非「最多 / 最快」。
- 未解锁项显示进度(「还差 X」强化收集与坚持动机。
- 成就墙露灰锁制造收集欲;新用户也显示全灰待解锁(含「首遛」)。
- 「记录」Tab 与「我的→成就」两入口指向**同一页**,文案统一叫「成就」。
## R12 · 安全与防刷
- 所有写操作 + 统计累加 + 成就解锁**只在云函数执行**,客户端集合权限禁写。
- openid 一律服务端取,不信任客户端传参。
- 同一 `(dogId, achievementKey)` 不重复解锁。