# 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)` 不重复解锁。