Files
yovision/docs/03-business-rules-and-glossary.md
T

101 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- gitea-wiki-mirror:start -->
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Business-Rules-and-Glossary
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Business-Rules-and-Glossary.-
wiki_revision: 06b68d16bf907decdaf85a813d417896f7920f4c
synchronized_at: 2026-08-13T14:06:00Z
<!-- gitea-wiki-mirror:end -->
# 业务规则与术语
## 核心术语
| 术语 | 定义 |
|---|---|
| Sense | 独立销售的视频接入、媒体、区域配置和运维产品 |
| Brain | 无界面的推理交付单元,输出观测和标准事件 |
| Bell | 独立销售的事件预警与处置产品 |
| Device | 设备根实体;通过 modality/capabilities 表达视频、雷达、门磁等能力 |
| Site | 一个客户部署中的站点边界 |
| Area | 多边形区域、警戒线及其隐私/准入策略 |
| Event | 已发生的不可变结构化事实及证据引用 |
| Alert | Bell 根据一个或多个 Event 和规则创建的处置对象 |
| ack | 明确由某人接手 Alert,不等同于消息已送达或已看到 |
| Outbox | 与本地状态同事务持久化、可重试投递的消息队列记录 |
| producer identity | Bell 为每个外部产品实例分配的机器身份 |
| 场景包 | 规则模板、升级策略、话术和报表口径的版本化配置包 |
## 工单状态
- 待确认:需求或方案等待负责人确认。
- 待实施:方案已确认,但依赖或排期尚未满足。
- 进行中:主 agent 正在工单声明的写路径内实施。
- 阻塞:出现计划外且当前无法解除的问题。
- 待验收:实现、测试和文档证据完成,等待负责人验收。
- 已完成:负责人明确验收并完成归档、关闭。
旧仓库任务的 DONE 不继承到新仓库。所有迁移项初始均为“待迁移”,必须用新代码、新测试和新验收重新证明。
## 稳定业务规则
1. Sense 与 Bell 完全独立认证;同一自然人在两个产品中是两个账户。
2. 任一产品可独立部署、升级、备份、恢复和验收,另一产品不作为启动依赖。
3. Brain 不拥有用户、Alert、通知或业务审计真相。
4. 产品集成使用机器身份和版本化契约,不共享数据库、用户会话或内部模型。
5. Bell 以 `(producer_id, source_event_id)` 保持跨重启幂等。
6. Event 不可变;误报只追加 outcome/反馈,不改写原始事实。
7. `sent`、`delivered`、`seen`、`ack` 是不同事实;无回执不能当成功。
8. 未 ack 自动升级且进程重启后续跑;并发 ack 只有首个成功者成为处置人。
9. 联系人、排班和升级策略共享主数据但分对象、分版本;投递创建时固化实际收件人、通道和解析版本。
10. 静默必须限时并自动恢复,单次不超过 4 小时。
11. 默认 16 路,按 32/64/128 横向扩展;128 路不等于单机或单 GPU 承诺。
12. 首期 S2 民办寄宿学校只做匿名规则,不启用人脸。
13. 家庭卧室、卫生间禁止摄像头,只能使用非成像传感器。
14. 摄像头凭据、客户数据、真实视频、JWT secret 和生产配置不得进入仓库、工单或 Wiki。
15. 业务预警与设备/媒体/推理运维告警使用不同通道和责任人。
## 新项目需要补充什么
以下事实必须由后续工单和负责人确认后补充:
- GoAdmin/go-admin-ui 的固定上游 commit、许可证记录和裁剪模块;
- Go、Node、Python、CUDA、PostgreSQL、MediaMTX 的精确版本;
- Sense/Bell 数据库 schema、Cookie 名称、部署域名和备份命令;
- Brain 模型、推理 FPS、硬件容量和商用许可;
- 试点最终留存期、通知供应商和验收阈值;
- 三个交付单元的正式版本与发布流程。
未确认项不得从旧代码或模板默认值推断为当前事实。
<!-- sense-mvp:start -->
## Sense MVP 业务与安全规则
- **Sense 账户**:只登录 Sense;不得接受 Bell JWT、Cookie 或用户数据。角色为系统管理员、实施/运维、站点管理员和只读用户,后端权限是最终边界。
- **安全初始化**:系统不提供默认账户、默认密码或默认签名密钥;首次管理员由仓库外一次性令牌创建。所有模式的密码仅要求至少 6 个字符,不限制字符种类并允许包含用户名。负责人已明确接受该生产密码策略的字典猜测与凭据填充风险。
- **Device**:设备不可变逻辑 ID 是后续 Profile、媒体和区域的内部引用。非视频适配器未实现时必须显示 `adapter_not_ready`。
- **摄像机凭据**:ONVIF 与 RTSP 可使用不同账号,也可显式复用;两组均只写不读,使用仓库外 32 字节密钥分别加密。密码不得进入 URL、日志、审计、工单或响应。
- **受控发现**:ONVIF Discovery 默认关闭,只有显式设置获准本机 IP 才能发送发现;不得扫描未授权网段。
- **Profile**:主辅码流按分辨率分类并使用 RTSP 凭据分别验证;脱敏 Stream URI、验证状态和时间持久化,重启后保留。至少一个 Profile 验证成功后 Device 进入 `active`;认证失败、不可达、超时与校时问题使用可定位状态。
- **自动媒体路径**:接入检查中每个验证成功的 Profile 都按 Device/Profile 幂等建立并立即对账媒体路径;首次配置使用 MediaMTX add、已有配置使用 replace,Sense 启动时从数据库恢复所有 `desired=running` 路径;路径不存在属于配置失败,不属于等待拉流。MediaMTX 不可用不回滚摄像机接入,接入结果记录“需要处理”并引导到视频服务排错。
- **MediaMTX**:保持外部进程。Sense 只停止自己启动并持有句柄的进程,最多自动重启三次;摄像机凭据只在 localhost 控制请求中瞬时组装,不持久化、不返回。
- **播放会话**:由当前 Sense 用户创建,最长两分钟;实时监看以设备名称、位置和主/子码流等业务标签供用户选择,内部 ID 只用于系统关联;`waiting` 表示等待第一个播放器触发按需拉流,不是播放失败,播放器连接后会话轮询刷新为实际状态;播放器导航必须携带有效 Sense 会话 Cookie,且 Fetch Metadata 必须表明是同源 iframe,普通 API 的 `X-Product` 边界不变;设备分页和媒体路径不以 16 路作为硬上限,页面一次只打开一路流。
- **区域版本**:坐标为 0..1 归一化值,并绑定 Device、Profile、宽高。每次发布或停用形成新版本;范围、点数、自交、退化、方向和期望版本由后端校验。Profile 分辨率变化后旧版本必须标记为需要重新校准。
<!-- sense-mvp:end -->
<!-- bell-mvp:start -->
## Bell MVP 业务与安全规则
- **独立身份**:Bell 仅接受自己的 `bell_session`;管理员管理用户、角色与规则,操作员读取事件/预警并处置,只读用户仅查询。后端权限是最终边界。
- **安全初始化**:系统没有默认用户、密码或签名密钥;首次管理员密码只通过一次性进程环境传入,密码至少 12 位且包含大小写字母和数字。
- **Event 与 Receipt**:Event 正文不可更新或删除。相同 `(producer_id, source_event_id)` 与相同 payload 返回原回执;相同键但不同 payload 返回冲突,跨进程重启仍成立。
- **合成事件**:只在 development/test 注册,使用虚构匿名 fixture,并走与未来生产者适配器相同的 Event/Receipt 服务;production 直接请求返回 404。
- **规则评估**:每个已接收 Event 都记录匹配或未匹配解释。匹配时固化实际规则快照;未匹配 Event 保持可查询,不能标成已通知或已处置。
- **Alert 关联**:同一 Event 可产生多个 Alert;同一规则与地点的多个 Event 可聚合到同一未关闭 Alert,Event 与 Alert 双向可追溯。
- **处置状态**:界面“待处理”对应新 Alert,“处理中/已看到”对应首个成功 ack,“已完成”对应记录现场结果后的 close。普通用户不需要理解 Event/Alert 内部模型,技术详情仍保留完整事实链。
- **并发 ack**:PostgreSQL 条件更新只允许首个操作员成为处置人;后来者得到真实处置人,不能覆盖。
- **close**:只有处置人或管理员可以完成;必须选择“确认有危险、误报、现场正常、无法确认”之一,可附备注。相同重复请求幂等,其他改变结果的请求被拒绝。
- **审计事实**:成功生命周期事实只追加;失败、重复和拒绝尝试写入安全审计,但不记录令牌、密码或连接密钥。
<!-- bell-mvp:end -->