diff --git a/other-module/bluetooth-scale-miniprogram/doc/PRD.md b/other-module/bluetooth-scale-miniprogram/doc/PRD.md index c01f4ae..1265e44 100644 --- a/other-module/bluetooth-scale-miniprogram/doc/PRD.md +++ b/other-module/bluetooth-scale-miniprogram/doc/PRD.md @@ -565,5 +565,84 @@ --- +## 五、数据过滤规则 + +### 5.1 规则背景 + +蓝牙秤上传的测量数据可能存在两类典型异常: + +1. **绝对值异常**:单次测量值超出合理生理范围(如身高>300cm、体重<20kg),通常由设备故障、数据传输错误或误操作导致 +2. **时序变化异常**:单次测量值在生理范围内,但与用户历史数据差异过大(如早上80kg、下午60kg,差20kg),通常由站姿异常(单脚着地)、衣物干扰、非本人操作、设备故障等原因导致 + +针对这两类异常,分别采用硬性阈值过滤和相对变化检测两种策略。 + +### 5.2 绝对值过滤规则(硬性阈值) + +设备上传数据首先经过绝对值校验,超出合理范围的数据直接丢弃,不写入数据库。 + +| 指标 | 合理范围 | 超出处理 | +|------|---------|---------| +| 身高 (cm) | 50 ≤ 身高 ≤ 250 | 丢弃,记录过滤日志 | +| 体重 (kg) | 20 ≤ 体重 ≤ 300 | 丢弃,记录过滤日志 | +| 体脂率 (%) | 3 ≤ 体脂率 ≤ 60 | 丢弃,记录过滤日志 | +| BMI | 10 ≤ BMI ≤ 60 | 丢弃,记录过滤日志 | + +### 5.3 时序变化过滤规则(相对变化检测) + +针对不可控因素导致的短期数据偏差,基于用户历史数据进行相对变化检测,**任一条件命中即标记为"异常待验证"**。 + +**检测条件1:短时间对比** +- 24小时内体重变化 > 5kg 或 > 10%(取较小值) +- 若24小时内存在多条测量数据,在校验时不能每次都取最新数据作为基准,而是要取24小时内最早的数据作为基准,防止在连续称重时可能会绕开此限制; + +**检测条件2:7天均值对比** +- 与近7天有效数据均值偏离 > 15% + +**检测条件3:30天均值对比** +- 与近30天有效数据均值偏离 > 20% + +**校验流程**: + +``` +数据上传 + ↓ +24小时短时对比 → 命中?─是─┐ + ↓否 │ +7天均值偏离>15%? → 命中?─是─┤─ 标记"异常待验证" + ↓否 │ +30天均值偏离>20%? → 命中?─是─┘ + ↓否 +数据正常,写入并进入统计 +``` + +**边界情况处理**: +- 历史数据不足7天 → 跳过7天均值校验,仅执行30天校验(若数据足够) +- 历史数据不足30天 → 跳过30天均值校验,仅执行7天校验(若数据足够) +- 无历史数据(首次测量)→ 跳过相对变化校验,仅执行绝对值过滤 +- 最新历史数据记录时间超过30天 → 跳过相对变化校验,仅执行绝对值过滤 + +### 5.4 异常数据处理策略 + +**绝对值异常**: +- 直接丢弃,不写入数据库 +- 记录过滤日志(设备编码、测量时间、原始数据、过滤原因) + +**时序变化异常("异常待验证")**: +- 保留原始记录,标记状态为"异常待验证",业务数据中不显示该数据 +- 记录过滤日志 + +### 5.5 新用户首次测量 + +- 无历史数据时,仅执行绝对值过滤 +- 用户完善信息时填写的身高、体重作为首次基准数据,未完善个人数据使用首次测量数据作为基准数据 + +### 5.6 特殊说明 + +- 过滤日志需记录:设备编码、测量时间、原始数据、过滤原因、处理结果、操作时间 +- 同步至设备端的成员数据(姓名、性别、身高、体重等)不做过滤,仅过滤测量数据 +- 过滤规则在服务端异步执行,设备端不感知且不影响数据上传接口的吞吐效率 + +--- +