鼠仓 MouseKeeper — 实验小鼠管理工作站
v0.3 变更记录:移除角色权限体系,改为无权限限制——3.1 改为「角色与成员」(角色仅作身份标识用于留痕与待办路由);FR-3 死亡登记不再按角色分流;FR-8a 由「管理员代登记」改为全员可用的「快速登记 + 归因确认」模式;撤销规则改为当日留痕撤销,不限定操作人。
v0.2 变更记录:新增 FR-8a 管理员代登记死亡(含三场景交互演示);同步修订 3.1 权限矩阵、FR-3 扫码分流、FR-7 用量口径、FR-8 撤销规则、共享规则 S-1;原开放问题「管理员是否需要代登记死亡权限」已由本版设计解决并移除。
1. 背景与目标
小型实验室的小鼠管理普遍依赖纸质笼卡 + Excel:研究生换笼时手抄笼号,繁育对的合笼、断乳日期记在个人备忘录里,基因型鉴定结果以文件名混乱的 PDF 散落在群里。可观察的后果是:找不到某只鼠的父本母本、错过断乳日龄导致同笼打架、伦理年审时花数天从 Excel 反推实际用鼠数量。
本产品面向单 PI 课题组(1 名 PI、数名研究生/博士后、共享的动物房管理员),提供一个以小鼠个体档案为中心、以笼位视图为工作台、以扫码为现场操作入口的轻量管理系统。
目标(可观察表述):
- 任意一只在养小鼠,10 秒内可从笼位图或扫码定位到其档案、谱系和所属实验计划;
- 每一窝仔鼠在断乳日龄到达前自动生成提醒,不出现"靠人脑记"的环节;
- 任意时间点,系统可按伦理编号导出实际用鼠数量与死亡记录(含死因确认状态),无需人工对账;
- 换笼、分笼、死亡登记等现场操作可在手机浏览器上扫码完成,巡查中发现的死亡可即时快速登记,尸体不因流程等待而滞留笼内。
2. 范围
P0(本次必须完成,构成最小完整旅程)
最小完整旅程定义:新鼠入库建档 → 日常换笼/观察(扫码)→ 繁育记录与断乳提醒 → 基因型鉴定 → 分配至实验计划 → 死亡/安乐死离群(完整登记或快速登记)。支撑该旅程的模块:
| ID | 模块 | 一句话能力 | 优先级 |
|---|---|---|---|
| FR-1 | 笼架与笼位看板 | 房间-笼架-笼位三级可视化,一眼看到每笼状态 | P0 |
| FR-2 | 小鼠个体档案 | 唯一 ID、品系、性别、出生日期、状态全生命周期 | P0 |
| FR-3 | 扫码工作台 | 手机扫笼卡/鼠标二维码,现场完成换笼、观察、死亡登记 | P0 |
| FR-4 | 繁育与谱系 | 繁育对管理、窝次记录、自动推算断乳/分笼日期、谱系树 | P0 |
| FR-5 | 基因型鉴定管理 | 送检登记、结果录入、按鉴定结果筛选分笼 | P0 |
| FR-6 | 繁育任务提醒 | 断乳、分笼、超龄等规则驱动的待办 | P0 |
| FR-7 | 实验计划与伦理编号 | 按伦理编号建计划、分配小鼠、自动核算实际用鼠数 | P0 |
| FR-8 | 安乐死与离群记录 | 合规原因必填、数量自动回写、当日撤销留痕 | P0 |
| FR-8a | 死亡快速登记与归因确认 | 事实即时生效、死因归因 48h 闭环、双操作人留痕 | P0 |
P1(支撑项,P0 稳定后迭代)
- FR-9 盘点对账:扫码批量盘点,生成"系统账面 vs 实际在笼"差异清单;
- FR-10 繁育与存活统计:月度死亡率、基因型性别比、HE/WT 比例与孟德尔偏离预警(详见 FR-10);
- 笼卡二维码批量打印排版;
- 按伦理编号的用量报表导出(CSV);
- 笼位占用与动物房计费的对账字段。
明确排除(避免评审分歧)
- 不做法规全文意义上的 IACUC 在线审批流 —— 系统只关联伦理编号,不替代机构伦理委员会的审批系统;
- 不做环境监测(温湿度、氨浓度传感器接入);
- 不做多实验室/多租户 SaaS 化与跨机构数据隔离;
- 不做采购、库存(饲料垫料)管理;
- 不做大鼠、斑马鱼等其他物种(字段模型按小鼠设计,物种扩展不在本期)。
3. 产品模型
3.1 角色与成员(无权限限制)
系统不设权限限制:PI、研究生/博士后、动物房管理员三种角色仅作为身份标识,用于时间线留痕、待办指派与展示口径。所有成员可执行全部操作——建档、换笼、繁育、送检、计划管理、终态登记与撤销、成员与房间笼架结构管理。
3.2 核心对象与状态机
小鼠(Mouse)
| 字段 | 类型/规则 | 必填 |
|---|---|---|
| mouse_id | 系统生成,规则 MK-年份-序号(MK-2026-0183),全系统唯一,即二维码内容 | 是 |
| 品系 strain | 自由文本 + 常用品系字典(C57BL/6J、BALB/c…),允许课题组自建 | 是 |
| 性别 | 公 / 母 | 是 |
| 出生日期 | 日期;购入鼠可填周龄由系统反推近似值并标记"约" | 是 |
| 基因型 | 本实验室内部命名;可多值(如 Cre+; flox/flox) | 否(未鉴定时为"待鉴定") |
| 耳标/标记 | 耳缺编码、耳标号或"无" | 否 |
| 来源 | 本室繁育(关联窝次)/ 外购(供应商+批号) | 是 |
| 所属笼位 | 任一时刻至多一个;操作留历史 | 是(在养时) |
| 所属实验计划 | 可空;关联伦理编号 | 否 |
| 状态 + 终态日期/原因 | 见状态机;快速登记死亡的终态原因带「初判-待确认」标记直至归因确认(FR-8a) | 是 |
窝次(Litter)
一胎仔鼠为一个窝次,是断乳/分笼提醒与未断乳仔鼠数量修正的计算单元:出生日期、母本、父本(可多只,见 FR-4)、存栏数(可因死亡修正扣减,见 FR-8a 边界场景)、断乳日期(出生 + 21 天,可改,见共享规则 S-2)。
繁育对(BreedingPair)
实验计划(Project)
关键字段:伦理编号(必填,唯一约束放宽规则见 S-4)、批准用鼠上限、实际用鼠数(系统由"分配且进入终态"的小鼠数自动累加,含快速登记死亡,口径一致,只读)、起止日期。
3.3 笼位模型
三级结构:房间 Room → 笼架 Rack → 笼位 CagePosition。笼架为行列网格(如 5×6),每个笼位有坐标(R3-C2)。笼位非对象实体,笼子(Cage)才是实体:一个笼子占一个笼位,含若干小鼠,笼卡二维码 = 笼子 ID。笼子可整体移动到空笼位(换笼/腾笼操作),小鼠不可同时属于两个笼子。
4. 功能需求
目的:研究员进入动物房前,在浏览器上即看到所有房间笼位占用、每笼鼠数与待办标记,替代"挨个掀笼卡"。
触发:任何成员打开"笼位"页,选择房间与笼架。
处理规则:
- 笼位格显示:笼号、在养鼠数;鼠标悬停/点按展开笼详情面板;
- 笼格颜色语义:空笼 = 白;正常 = 蓝边;有未完成提醒(待断乳/待分笼/待鉴定)= 黄边黄底;
- 选中空笼位可发起"放入新笼";选中占用笼可发起"移动笼子到空位";
- 笼详情面板列出每只鼠:ID、性别(公蓝/母粉)、日龄、基因型徽标、状态标记。
结果与状态变化:移动笼子即时持久化并写入笼位历史(笼子 X 于 T 时刻从 A1 移至 B4,操作人 Y)。
异常:目标笼位已被占用时移动按钮置灰并提示"该笼位已占用";笼架无数据时显示空态引导"先创建房间与笼架结构"。
目的:每只鼠一页档案,聚合身份、谱系、鉴定、所属计划与操作历史,是全局检索与扫码跳转的落点。
触发:建档(手动录入 / 从窝次批量生成仔鼠档案)、笼位面板点击鼠 ID、扫码跳转。
处理规则:
- 手动建档:必填字段见 3.2 表;外购鼠允许填"周龄"反推出生日期并标记
约; - 从窝次生成:选择窝次 → 按存栏数(经数量修正后)输入公/母数量 → 批量生成档案,自动继承父母本品系、出生日期=窝次出生日期、初始笼位=繁殖笼;
- 档案页时间线倒序展示全部事件:换笼、鉴定、配种参与、计划分配、终态(含快速登记死亡的两段留痕,见 FR-8a);
- 检索支持 mouse_id 精确、品系/基因型/计划/状态组合筛选。
字段可编辑性:出生日期、性别、来源在存在下游事件(鉴定、繁育)后锁定,可解锁修改(留痕);终态小鼠档案整体只读。
异常:删除档案仅允许"无任何下游事件且建档 24h 内"的情形,二次确认后执行;其余情况以"淘汰"终态替代删除,保证谱系不断链。
目的:换笼间里戴手套不方便打字 —— 手机扫笼卡二维码后,三步内完成当日现场操作。
触发:手机浏览器进入"扫码"页调起摄像头;扫出笼 ID 或鼠 ID。
扫出笼子后的操作面板(按频次排序):
- 快速换笼:扫新笼位或从空位列表选择 → 确认;
- 观察记录:选择预设项(正常/精神差/打斗受伤/死亡)+ 可选备注;选"死亡"→ 进入 FR-8 登记流程:死因已知时直接选择完整死因枚举;现场无法判断时选用快速登记(初判 + 归因确认,见 FR-8a);
- 产仔登记(繁殖笼专属入口):输入仔鼠数与出生日期 → 生成窝次;
- 查看本笼待办:跳转 FR-6 该笼的未完成提醒。
结果与反馈:每次操作返回绿色成功条并震动一次(Assumption, TBD:目标机型支持浏览器震动 API);连续扫码模式下成功条 1.5 秒后自动回到摄像头,支持不换页连续处理多笼。
异常:扫出未注册 ID → 提供"以此 ID 现场建档"入口;摄像头不可用(权限拒绝/老旧浏览器)→ 降级为手动输入笼号;网络中断 → 操作进入本地待同步队列并在顶部显示"待同步 N 条",恢复后自动重传(防换笼间信号死角丢数据)。
目的:谁和谁配、哪天合的笼、仔鼠哪天该断乳、祖代是谁 —— 全部可追,替代研究生个人备忘录。
触发:创建繁育对(选 1 公 + 1~2 母 Assumption, TBD:支持 1 公 2 母合繁);产仔登记;分笼/结束繁育对。
处理规则:
- 繁育对要求参与者均为在养、未处于另一"合笼中"繁育对;
- 产仔登记后生成窝次 L-编号,仔鼠档案按 FR-2 批量生成,谱系自动挂接父母;
- 1 公 2 母笼内产仔时,母本归属允许标记"不确定",谱系树中该窝母本显示"母A 或 母B",待基因型鉴定后可人工确认修正;
- 谱系视图:以任意鼠为中心,向上两代、向下两代渲染谱系树;点击节点跳转档案;
- 近交提示:所选公母在谱系树两代内存在共同祖先时,创建繁育对页面显示黄色提示(不阻断,仅提示)。
Cre+ ♀ MK-2025-0058
flox/flox
Cre+; flox/+ ♀ MK-2026-0202
待鉴定
断乳提醒:3 天后
异常:参与繁育的任一方进入终态时,其"合笼中"繁育对自动置为"已结束"并生成一条提醒通知创建人。
目的:把"送检-回收结果-按结果分笼"从 Excel 三张表合并成一条流水线。
流程:从窝次或筛选结果勾选小鼠 → 生成送检批(检测项目如 Cre PCR,系统生成送检清单含鼠 ID 与取样要求)→ 结果回收时逐条录入阳性/阴性/杂合/无效 → 档案基因型更新、谱系同步、"待鉴定"提醒关闭。
处理规则:
- 结果录入支持按送检清单顺序的键盘速录模式(+/-/±/F 四键);
- "无效"结果自动重新挂入该鼠待办"需重新取样鉴定";
- 分笼辅助视图:同一窝次按鉴定结果分组列出,勾选目标基因型 → 一键分配新笼并生成换笼操作记录。
| 鼠 ID | 性别 | Cre | flox | 目标笼 | |
|---|---|---|---|---|---|
| ☑ | MK-2026-0201 | ♂ | + | flox/flox | 新笼 R2-B3 |
| ☑ | MK-2026-0203 | ♀ | + | flox/flox | 新笼 R2-B4 |
| ☐ | MK-2026-0202 | ♀ | − | flox/+ | — |
| ☐ | MK-2026-0204 | ♂ | 无效 | — | 待重取 |
目的:把日期驱动的工作从人脑迁移到系统待办。
| 提醒类型 | 触发规则 | 提前量 | 完成动作 |
|---|---|---|---|
| 待断乳 | 窝次出生日期 + 21 天 | 前 2 天生成 | 执行断乳分笼(FR-5 辅助视图)或标记已处理 |
| 待分笼(查栓) | 合笼日期 + 19 天未见窝次 | 当天生成 | 确认未孕并分笼 / 继续观察 |
| 待鉴定 | 仔鼠断乳完成且基因型为"待鉴定" | 断乳完成时生成 | 送检并录入结果(FR-5) |
| 超龄 | 在养鼠日龄 > 阈值(默认 8 月龄,S-2 可配)且不属于任何进行中计划与繁育对 | 每月检查 | 加入计划 / 淘汰 |
| 死亡归因确认 | 快速登记死亡(FR-8a) | 登记时生成,24h/48h 分级提醒 | 责任人确认正式死因 / 当日撤销(留痕) |
展示:首页待办列表按到期日升序;笼位看板对应笼格变黄;每日 8:00 向相关操作人生成站内汇总(无邮件/IM 推送,Assumption, TBD:团队接受进系统看)。提醒被处理后关闭;到期未处理每天重复置顶,不产生升级通知(死亡归因确认除外,见 FR-8a)。
目的:伦理年审时一键回答"这个编号下实际用了多少只鼠、都是谁、怎么处理的"。
触发:PI 创建计划并填写伦理编号与批准上限;成员将小鼠分配至计划。
处理规则:
- 分配校验:仅在养小鼠可分配;一只小鼠同时只属于一个进行中计划;
- 实际用鼠数 = 该计划下已进入任一终态的小鼠数(含快速登记的死亡,与安乐死口径一致;死因未确认不阻断计数,报表单列「原因待确认」数量),只读,实时回写;
- 当实际用鼠数达到批准上限的 90% 时,计划卡片与首页显示黄色预警;达到 100% 时阻断新的分配操作并提示"已达伦理批准上限",须修改批准上限(留痕)后才可继续;
- 计划关闭(完成/中止)后其小鼠保留关联,只读。
目的:终态登记是合规证据链的最后一环,必须"原因必填、操作留痕、数量回写"。本节定义完整登记流程(含完整死因枚举与撤销规则);现场无法判定死因时的快速登记见 FR-8a。
触发:档案页、扫码工作台、或筛选列表批量选择 → "登记离群"。
处理规则:
- 三选一终态:已用于实验(安乐死)/ 自然死亡 / 淘汰;
- 原因必填:预设枚举(实验终点 / 人道终点-发病 / 人道终点-体重下降 / 基因型不符 / 超龄 / 其他-备注必填);
- 批量登记时对每只鼠继承同一原因,可逐只修改;
- 确认弹窗列出将受影响的小鼠清单与所属计划,输入确认文字
确认后执行; - 执行后:状态置终态、笼内移除、实际用鼠数回写计划、时间线写入操作人/时间/原因;
- 撤销(当日留痕撤销):
- 「已用于实验」与快速登记(初判)的「自然死亡」:登记当日可撤销,不限定操作人(防误操作毁数据、容纳低体温蛰伏等误判,见 FR-8a);
- 直登完整死因的「自然死亡」与「淘汰」:不可撤销(产品判断:这两类死因明确、不存在误判空间,撤销反而破坏审计链);
- 所有撤销均留痕,用鼠数同步回退。
目的:动物福利要求尸体及时移出(登记不能被任何确认流程阻塞),但现场往往无法立即判定死因。本模块提供快速登记(初判)模式,设计原则是「事实与归因分离」:死亡是客观事实 → 登记即生效;死因是实验数据 → 由最了解实验语境的分配人在 48h 内补全。系统不设权限限制,本模式对所有成员开放——选择它的是登记策略,而非身份。
触发与范围:任何成员在扫码工作台(FR-3)或档案页选择「快速登记(初判)」。初判记录的状态同样立即生效;后续补全死因走归因确认闭环。范围仅限「自然死亡」——「已用于实验(安乐死)」与「淘汰」是明确决策,始终走 FR-8 完整登记。
处理规则:
| 环节 | 规则 |
|---|---|
| 登记 | 必填:死亡个体(逐只勾选,防整笼误标)、发现时间(默认当前,可改)、发现场景(日常巡查/换笼/其他);死因只能从受限初判枚举选择(外观无异常/明显病变/打斗外伤/无法判断),标记「初判-待确认」;照片可选留存 |
| 生效 | 提交后小鼠状态立即置为「自然死亡」、笼内移除——事实登记不等待任何确认 |
| 通知 | 向该鼠所属实验计划的责任人(分配人)与 PI 生成待办「死亡归因确认」;未关联计划的仅通知 PI |
| 归因确认 | 责任人 48h 内将初判转换为正式死因(实验语义完整枚举:人道终点-发病/实验操作相关/环境管理相关/其他-备注必填);确认后记录转为正式,报表中「原因待确认」标记关闭 |
| 超时升级 | 24h 再次提醒责任人 → 48h 升级提醒至课题组长;未确认记录在用量报表中带「原因待确认」标记,不阻塞其他任何流程 |
与其他模块的衔接:
- S-1 留痕:快速登记记录采用双操作人结构——发现人与归因确认人,时间线分两段、只增不改;
- FR-8 撤销:快速登记(初判)记录登记当日可撤销,不限定操作人;
- FR-7 用量核算:快速登记死亡计入实际用鼠数,与完整登记口径一致。
08:32 · 日常巡查 · 初判「外观无异常」
→ PI 张老师:同步知会
要点:事实与归因分离
发现人:王同学 · 08:32 · 初判「外观无异常」 · 剩余 46h
要点:归因闭环
分支 B · 误判复活 → 当日撤销
要点:为什么必须有这两个分支
异常汇总:扫错鼠/笼 → 当日撤销(留痕);对已终态个体重复登记 → 状态机拦截并提示"该鼠已终态";误判复活 → 场景③分支 B 流程。
目的:月度盘点时用手机连续扫笼卡,系统自动比对"账面在养"与"实际扫码"。
处理规则:开始盘点 → 连续扫码累积清单 → 结束后生成差异报告(账面有而未扫到 / 扫到但账面已终态 / 位置不符)→ 差异项逐条处理(确认死亡补登记 / 修正笼位)。盘点期间系统只读提示其他成员暂缓批量操作。Assumption, TBD:盘点为月度频率。
目的:把 colony 健康的三个关键指标——死亡率、基因型性别比、HE/WT 比例——从 Excel 手工汇总变为实时聚合视图,支撑繁育决策(保留/合并哪些繁育对、品系是否存在生存或传递问题)。统计页为只读聚合,无独立录入;数据来自 FR-8/FR-8a 终态记录与 FR-5 鉴定结果,口径统一见 S-7。
1) 死亡率
- 指标:月度死亡率 = 当月死亡个体数 ÷ 当月平均在养数(S-7);支持按品系、房间、月龄段、死因分类下钻;
- 视图:近 12 个月趋势、品系对比、死因构成比;快速登记且死因未确认的死亡计入死亡率分子,但在死因构成中单列「原因待确认」,不与确认死因混算;
- 除零保护:期间在养数为 0 时显示「—」,不显示 0%。
2) 基因型性别比
- 口径:按「有效鉴定结果 × 建档性别」交叉聚合,输出每种基因型的公/母数量与占比(S-7);
- 视图:品系 → 基因型 → 公母计数与百分比;支持按窝次批次查看;
- 用途:X 连锁传递或性别致死偏离时直接可见(如某基因型公鼠占比持续异常低),辅助繁育对取舍。
3) HE/WT 比例(孟德尔期望对比)
- 口径:按繁育对/窝次聚合已鉴定子代的基因型分布,与配型的孟德尔期望对比;系统内置常见配型期望表(杂合×WT = 1:1、杂合×杂合 = 1:2:1、纯合×杂合 = 1:1),支持课题组自定义配型期望;
- 偏离预警:有效样本 ≥ 8 只且实际占比相对期望的偏差超过阈值(默认 1/3,S-2 可配 Assumption, TBD)时,繁育对卡片标黄并提示可能原因(纯合致死 / 鉴定错误 / 样本偏倚);预警只提示不阻断;
- 视图:单繁育对分布条形图 + 跨窝累计分布。
| 月份 | 在养均值 | 死亡数 | 死亡率 |
|---|---|---|---|
| 2026-08 | 142 | 1 | 0.7% |
| 2026-09 | 138 | 2 | 1.4% |
| 2026-10 | 141 | 1 | 0.7% |
异常:鉴定「无效」结果不计入任何比例的分母(S-7),避免拉偏统计;筛选条件下无数据时显示空态「暂无符合条件的记录」。
5. 共享规则
| ID | 规则 | 内容 |
|---|---|---|
| S-1 | 操作留痕 | 所有改变小鼠状态、笼位、计划关联的操作均写入时间线:操作人、时间、前后值。时间线只增不改,无删除入口。快速登记死亡采用双操作人结构:发现人 + 归因确认人,时间线分两段独立记录(见 FR-8a)。 |
| S-2 | 课题组级参数 | 断乳日龄(默认 21 天)、查栓分笼天数(默认 19 天)、超龄阈值(默认 8 月龄)、归因确认时限(默认 48h)、孟德尔偏离预警阈值(默认相对期望偏差 1/3,FR-10)在设置中调整;调整仅影响之后生成的提醒,不回溯。 |
| S-3 | 二维码规范 | 笼码 = 笼 ID;鼠码 = mouse_id。打印模板 P1 提供;扫描解析失败按 FR-3 异常处理。 |
| S-4 | 伦理编号约束 | 同一伦理编号允许关联多个计划(多年度延续),但"进行中"状态的计划共享同一批准上限核算池。Assumption, TBD:需与实验室实际伦理批准结构核对。 |
| S-5 | 通知通道 | 本期仅站内待办与首页聚合,无邮件/短信/IM 推送。死亡归因确认的 24h/48h 分级提醒同样走站内待办。 |
| S-6 | 数据归属 | 单实验室单租户,全部数据归课题组;成员离职后其账号禁用,历史操作人名称保留不改。 |
| S-7 | 统计口径(FR-10) | 死亡率 = 期间死亡个体数 ÷ 期间平均在养数,最小粒度按月;基因型相关比例仅计入「鉴定结果有效」的个体,无效结果不计入分母;性别按建档时记录计;快速登记且死因未确认的死亡计入死亡率分子,但在死因构成中单列「原因待确认」。统计页为只读聚合,随数据实时更新。 |
6. 开放问题
| 问题 | 影响 | 建议动作 |
|---|---|---|
| TBD 伦理批准上限是按"编号"还是按"编号+年度"核算? | 影响 FR-7 阻断逻辑与 S-4 | 与机构 IACUC 模板核对后定稿 |
| TBD 是否需要导入现有 Excel 存量数据? | 影响上线策略与是否开发导入工具 | 评估存量数据质量,决定导入或"新鼠新录、旧鼠补录" |
| 已解决 管理员是否需要"代研究生登记死亡"的权限? | —— | 已由快速登记 + 归因确认机制覆盖(FR-8a):死亡登记对全员开放,现场无法判定死因时走初判快速登记 |