# 入场隔离登记 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 入场隔离登记(交易市场平台) | | 目标 | 在业务后台登记牲畜**进场隔离**信息(检疫证、数量、耳标、分圈及隔离期限),形成可查询、可维护的隔离台账,为隔离期满判定、隔离巡查等下游业务提供依据 | | 关联系统 | 业务后台;**供应商管理**(供应商主数据);**隔离圈位管理**(圈位编号、全局默认隔离天数) | | 修订依据 | 同目录 `入场隔离登记-草稿.md`、界面原型(`入场隔离登记.png`) | 本文档**仅描述功能需求与业务规则**,不涉及数据库表结构、接口路径、请求体字段命名、HTTP 报文及技术栈选型。 --- ## 2. 术语与业务对象 ### 2.1 入场隔离登记(一条台账记录) - 表示一批(或一头)牲畜**进入交易市场隔离区**的一次登记事件。 - 由运营人员在后台**手工登记**为主;检疫证文件识别(OCR)为**后续扩展**,本期默认手工录入。 - 单条记录包含:进场时间、供应商、检疫证文件、检疫证号、总数量、耳标号集合、分圈明细、隔离天数、预计解除日期及审计信息。 ### 2.2 分圈明细(子业务对象) - 隶属于一条入场隔离登记,表示将部分耳标分配到**某一个隔离圈位**。 - 一条登记可包含 **0~N 条**分圈明细(保存前须完成分圈且满足 **§2.6** 一致性规则,见 **§5.1**)。 - 单条分圈包含:**圈位编号**、**本圈数量(头)**、**本圈耳标号集合**。 ### 2.3 耳标号集合(主表字段) - 在登记表单中以**文本**录入,多个耳标用**英文逗号 `,` 或中文逗号 `,`** 分隔。 - 保存前须解析为列表:去除首尾空白、忽略空段;**同一登记内耳标号不可重复**(重复时拒绝保存并提示)。 - 耳标号**字符规则**与项目全局牲畜耳标规则一致;若暂无全局规则,默认单段长度 **1~32** 字符,不允许仅空白。 ### 2.4 数量(头) - 表示本批进场牲畜**总头数**,单位固定为 **头**,取值为**正整数**。 - 与耳标号集合的关系见 **§2.6**:保存时要求 **总数量 = 有效耳标个数**(每头对应一个耳标)。 ### 2.5 隔离天数与预计解除日期 | 项 | 规则 | | --- | --- | | **隔离天数** | 正整数,单位 **天**;新增时默认值取自 **隔离圈位管理** 模块维护的**全局默认隔离天数**(见该模块功能需求 **§2.4**);若全局未配置,界面默认 **3** 天(产品可在评审时调整兜底值) | | **预计解除日期** | 由系统根据 **进场时间(日期部分)+ 隔离天数** 自动计算,**只读展示**;用户不可手工改日期而绕过天数逻辑 | | **联动** | 用户修改「进场时间」或「隔离天数」时,**实时重算**预计解除日期 | > **计算说明:** 进场时间含时分秒时,预计解除日期取**进场日期的日历日**加隔离天数(与原型「进场时间 + 隔离天数」一致);具体是否含「进场当日为第 1 天」由评审确认,**默认:进场日为第 1 天,满 N 天后第 N 日 24:00 前解除**(仅展示日期 `YYYY-MM-DD` 时,展示为「进场日期 + (隔离天数 − 1) 天」或「进场日期 + 隔离天数 天」择一后全文一致,**默认展示:进场日期 + 隔离天数(自然日相加)**)。 ### 2.6 数量、耳标与分圈一致性(核心规则) 保存(新增/修改)前必须同时满足: | 编号 | 规则 | | --- | --- | | R1 | **总数量(头)** = 主表解析后的**耳标号个数** | | R2 | 所有分圈明细的**本圈数量之和** = **总数量(头)** | | R3 | 所有分圈明细中的耳标号**并集** = 主表耳标号集合(无遗漏、无多余) | | R4 | 任一耳标号在分圈明细中**最多出现一次**(不可重复分圈) | | R5 | 每条分圈明细:**本圈数量** = 该条所选耳标号**个数** | 不满足时拒绝保存,并给出明确提示(示例见 **§8**)。 ### 2.7 检疫证文件 - **单文件**上传,非结构化文档。 - 允许后缀:**pdf、md、doc、docx、xls、xlsx、ppt、pptx**(大小写不敏感)。 - 单文件大小 **≤ 30 MB**。 - **本期**:上传仅作存档与下载/预览(若项目支持);**不**从文件自动填充检疫证号、数量、耳标(OCR 见 **§3.2**)。 - 是否必填:评审确认;**默认建议选填**(有检疫证号即可业务闭环),原型有上传入口则界面保留。 ### 2.8 供应商与圈位(外部主数据) | 关联模块 | 本模块用法 | | --- | --- | | **供应商管理** | 登记表单、列表筛选:**单选**供应商;下拉数据来自未删除的供应商台账;支持按名称**模糊检索**后选择(登记时);列表筛选为**下拉精确匹配**(选中某供应商则只查该供应商记录) | | **隔离圈位管理** | 分圈时 **圈位编号** 下拉仅可选未删除的圈位;编号为系统自动生成的 2 位数字,**不可手工输入** | ### 2.9 删除与可见性 - 删除采用与项目其他业务台账一致的**逻辑删除**:删除后默认不在列表展示,数据保留供审计。 - **本期不提供**回收站。 - 若登记已被**隔离巡查登记**、出圈、交易等下游引用,**宜禁止删除**并提示「存在关联业务,无法删除」(**默认建议禁止**)。 --- ## 3. 功能范围 ### 3.1 本期实现 | 能力 | 说明 | | --- | --- | | 登记列表 | 进场日期范围、检疫证号、供应商筛选;分页;**§5.2** | | 新增登记 | 主表字段 + 分圈明细;一致性校验;**§5.1** | | 修改登记 | 主表与分圈均可改;校验同新增;**§5.3** | | 查看登记 | 只读含分圈明细;**§5.4** | | 删除登记 | 单条逻辑删除;**§5.5** | | 工具栏 | 搜索、重置、新增 | ### 3.2 本期不实现(除非后续单独立项) | 项 | 说明 | | --- | --- | | **检疫证 OCR 自动识别** | 自动识别检疫证号、数量、耳标并回填表单;本期仅预留上传入口与文案说明 | | 批量导入/导出、打印检疫证 | | 隔离期满自动出圈、消息提醒、与巡查单自动生成 | | 圈位占用状态实时看板、同一圈位容量上限校验(若圈位模块未维护容量则不做) | | 按耳标号单独列表筛选(原型未要求) | --- ## 4. 业务流程 ### 4.1 模块总览 ```mermaid flowchart TD A[进入入场隔离登记] --> B[列表查询] B --> C{操作} C --> D[新增登记] C --> E[查看] C --> F[修改] C --> G[删除] D --> H[填写主表与上传检疫证] H --> I[录入耳标与数量] I --> J[添加分圈明细] J --> K{一致性 R1~R5} K -->|否| J K -->|是| L[保存台账] L --> B F --> M[调整主表/分圈] M --> K G --> N{有关联?} N -->|是| O[拒绝删除] N -->|否| P[逻辑删除] P --> B ``` ### 4.2 新增登记典型顺序 1. 点击 **新增**,确认 **进场时间**(默认当前时刻)、选择 **供应商**。 2. (可选)上传 **检疫证文件**;手工填写 **检疫证号**、**数量**、**耳标号**(逗号分隔)。 3. 确认 **隔离天数**(默认带出全局配置),核对 **预计解除日期**。 4. 点击 **添加分圈**,在子界面为每个圈位选择耳标(不可与其它圈重复),确认后回到主表单分圈表格。 5. 系统校验 **§2.6**,通过后 **确定** 保存。 ### 4.3 分圈子流程 ```mermaid flowchart TD A[点击添加分圈] --> B[选择圈位编号] B --> C[多选耳标号] C --> D[系统计算本圈数量] D --> E{耳标是否已被其他圈占用?} E -->|是| C E -->|否| F[确定写入分圈表格] F --> G[可继续添加或编辑/删除行] G --> H[主表单保存时校验 R1~R5] ``` --- ## 5. 详细功能需求 ### 5.1 新增入场隔离登记 #### 5.1.1 主表业务字段 | 字段 | 必填 | 规则摘要 | | --- | --- | --- | | 进场时间 | 是 | `YYYY-MM-DD HH:mm:ss`;默认**当前系统时间**;不得为空 | | 供应商 | 是 | 单选;数据来自供应商管理;支持名称模糊搜索后选定一条 | | 检疫证文件 | 否* | 单文件;后缀与大小见 **§2.7**;*默认选填 | | 检疫证号 | 是 | 文本;**1~50** 字符(trim 后);同一系统内是否唯一由评审确认,**默认建议不强制唯一** | | 数量(头) | 是 | 正整数;与耳标个数一致见 **§2.6 R1** | | 耳标号 | 是 | 逗号分隔多个;解析规则见 **§2.3**;至少 1 个有效耳标 | | 隔离天数(天) | 是 | 正整数;默认取全局默认隔离天数;建议范围 **1~3650** | | 预计解除日期 | — | **只读**;由进场时间与隔离天数自动计算,见 **§2.5** | | 分圈明细 | 是 | 至少 **1** 条分圈记录且满足 **§2.6** | #### 5.1.2 分圈明细表格(主表单内) | 列/能力 | 说明 | | --- | --- | | 圈位编号 | 展示所选圈位编号(来自隔离圈位管理) | | 数量(头) | 展示本圈数量(= 本圈耳标个数,**§2.6 R5**) | | 耳标号 | 展示本圈已选耳标,多个以逗号或顿号拼接,过长省略 | | 操作 | **编辑**、**删除** 单行分圈 | | 添加分圈 | 打开 **§5.1.3** 子界面 | #### 5.1.3 添加/编辑分圈(子界面) | 字段 | 必填 | 规则摘要 | | --- | --- | --- | | 圈位编号 | 是 | 下拉单选;仅可选隔离圈位管理中**未删除**的圈位;**同一登记内同一圈位不可重复添加**(重复时提示) | | 耳标号 | 是 | **多选**下拉;选项来源 = 主表「耳标号」解析列表;**已被其他分圈行占用的耳标不可再选**;至少选 1 个 | | 数量(头) | 是 | **只读或自动带出** = 已选耳标个数;用户不可改数量而与耳标数不一致 | | 操作 | 行为 | | --- | --- | | **确定** | 校验通过后,新增一行或更新当前编辑行到主表单分圈表格,关闭子界面 | | **取消** | 关闭子界面,不改动表格(编辑中则放弃本次修改) | #### 5.1.4 保存与取消 | 操作 | 行为 | | --- | --- | | **确定** | 主表 + 分圈全量校验(含 **§2.6**)通过后保存;关闭弹窗并刷新列表 | | **取消** | 关闭弹窗,不保存 | --- ### 5.2 查询入场隔离登记列表 #### 5.2.1 筛选条件 | 条件 | 规则 | | --- | --- | | 进场日期 | 选填;**开始日期~结束日期**区间(一个日期范围控件);与记录「进场时间」的**日期部分**匹配;空则不过滤 | | 检疫证号 | 选填;对检疫证号**模糊**匹配(包含输入片段即可);空则不过滤 | | 供应商 | 选填;下拉**精确**匹配(选中某供应商则只查该供应商的记录);空则不过滤 | 支持多条件**组合**筛选(同时满足)。 #### 5.2.2 列表规则 - 默认每页 **20** 条。 - 默认排序:**进场时间倒序**(新的在前)。 - 工具栏:**搜索**、**重置**、**新增**。 #### 5.2.3 展示列(与原型一致) | 列 | 说明 | | --- | --- | | 进场时间 | 格式 `YYYY-MM-DD HH:mm:ss` | | 供应商 | 展示供应商名称 | | 检疫证号 | — | | 数量(头) | — | | 圈位分配情况 | 提供 **「圈位分配表」** 链接或按钮;点击后查看本分圈明细(弹窗只读表格,列:圈位编号、数量、耳标号) | | 隔离天数(天) | — | | 解除隔离日期 | 展示预计解除日期(与表单「预计解除日期」一致) | | 操作 | **查看**、**编辑**、**删除** | --- ### 5.3 修改入场隔离登记 | 项 | 规则 | | --- | --- | | 可改范围 | **主表全部业务字段**及**全部分圈明细**(增删改分圈行)均可修改 | | 校验 | 与 **§5.1** 相同(含 **§2.6**、耳标不可跨圈重复、圈位不可重复) | | 进场时间/隔离天数 | 修改后**重新计算**预计解除日期 | | 保存后 | 不自动触发下游出圈或巡查;仅更新本台账 | > **说明:** 草稿写「所有均可修改」;**进场时间、检疫证号等业务字段均可改**;分圈须重新满足一致性。若未来存在「已解除隔离不可改」等状态,须单独立项,**本期无状态机,默认可改**。 --- ### 5.4 查看入场隔离登记 - **任意记录**可查看;只读展示主表全部字段、检疫证文件(可下载/预览)、预计解除日期、分圈明细表。 - 列表「圈位分配表」与查看内分圈展示**数据一致**。 - 查看界面可提供 **编辑** 入口(跳转或打开编辑弹窗,权限控制见 **§6**)。 --- ### 5.5 删除入场隔离登记 | 项 | 规则 | | --- | --- | | 方式 | **单条**删除;二次确认;确认文案宜展示检疫证号或进场时间便于识别 | | 效果 | **逻辑删除**;删除后列表不可见 | | 拒绝 | 存在下游关联时禁止删除(见 **§2.9**) | --- ## 6. 操作与权限(业务层) | 操作 | 说明 | | --- | --- | | 列表查询 | 进入模块、搜索、重置 | | 新增 | 工具栏「新增」 | | 查看 | 行内「查看」、圈位分配表 | | 修改 | 行内「编辑」、查看页进入编辑 | | 删除 | 行内「删除」 | 无权限时对应按钮不展示或禁用(权限标识命名由实施阶段定义,**本文档不展开**)。 --- ## 7. 与下游及关联模块衔接 | 模块/下游 | 本模块提供 | | --- | --- | | **供应商管理** | 登记与筛选时选择合法供应商 | | **隔离圈位管理** | 分圈选择合法圈位;新增默认隔离天数引用全局配置 | | **隔离巡查登记**(规划) | 可按本台账进场时间、圈位、耳标开展巡查(集成规则另文档约定) | | **隔离期满/出圈**(规划) | 可参考「预计解除日期」与隔离天数(自动出圈本期不做) | --- ## 8. 提示约定(示例) | 场景 | 示例文案 | | --- | --- | | 必填 | 「请填写检疫证号」「请选择供应商」 | | 耳标格式 | 「耳标号格式不正确」「存在重复耳标:{tag}」 | | 数量与耳标 | 「总数量须与耳标个数一致」 | | 分圈一致性 | 「分圈数量之和须等于总数量」「存在未分圈的耳标」「耳标 {tag} 已分配至其他圈位」 | | 圈位重复 | 「圈位 {code} 已添加,不可重复」 | | 文件 | 「仅支持 pdf/doc/docx 等格式,且不超过 30MB」 | | 删除 | 「确认删除该条入场隔离登记?」「存在关联业务,无法删除」 | | OCR 预留 | 「检疫证自动识别功能即将上线,请手工填写」 | --- ## 9. 非功能建议(业务侧) - 进场登记、分圈调整、删除宜记**操作审计**(操作人、时间)。 - 列表与表单文案支持 **i18n**(汉语 + 藏文),与项目前端规范一致。 - 耳标、数量、分圈校验宜在**保存前**前端预校验,服务端**再次校验**以保证 **§2.6** 不被绕过。 --- ## 10. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 依据草稿与原型整理:主表/分圈结构、一致性规则 R1~R5、流程图;剔除库表/接口/技术栈;OCR 列为本期不实现;默认隔离天数关联隔离圈位管理 |