feat:数据质量筛选规则需求整理
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# 营养管理功能说明书
|
||||
|
||||
> 文档版本:v2.0 | 更新日期:2026-07-15
|
||||
> 文档版本:v2.1 | 更新日期:2026-07-27
|
||||
|
||||
> 本说明书基于 `web-admin/nutrition/` 后台原型与 `other-module/mini-program/nutrition/` 小程序原型重新梳理,描述营养管理版块的功能清单与业务概况。各页面的逐页调整明细见同目录《原型调整记录.md》。
|
||||
> 本说明书基于 `web-admin/nutrition/` 后台原型与 `other-module/mini-program/nutrition/` 小程序原型重新梳理,描述营养管理版块的功能清单与业务概况。硬件终端设备原型参见 `other-module/canteen-device/`。各页面的逐页调整明细见同目录《原型调整记录.md》。
|
||||
|
||||
---
|
||||
|
||||
@@ -667,3 +667,83 @@ flowchart LR
|
||||
| 双端协同 | B 端精细化管理 + C 端便捷化服务,数据实时互通 |
|
||||
| 边缘云端协同 | 食堂边缘节点缓存中转,终端设备断网可用;数据下发/上报任务化追踪;异常告警集中处置 |
|
||||
| 多终端设备生态 | 餐线营养秤、净菜包装秤、净菜组配秤、毛菜验收秤、加工毛菜秤等专用终端设备覆盖生产全流程 |
|
||||
|
||||
---
|
||||
|
||||
## 七、硬件设备生态
|
||||
|
||||
### 7.1 硬件设备清单与后台功能映射
|
||||
|
||||
> 下表按业务域分组列出全部硬件终端设备,说明其核心硬件组件、关联后台模块及在业务链路中的上下游关系。
|
||||
> 关联后台模块名称对应本文第五章「模块功能概要说明」中的各模块。
|
||||
|
||||
#### 7.1.1 卫生供应域(8 款)
|
||||
|
||||
| 序号 | 设备名称 | 研发状态 | 核心硬件组件 | 关联后台模块 | 上游业务 | 下游业务 |
|
||||
|------|---------|---------|-------------|-------------|---------|---------|
|
||||
| 1 | 毛菜卫检设备 | 待硬件选型 | 农残/重金属/微生物检测传感器 | 卫生供应 | 绿色种采(采供管理→毛菜入库) | 卫生供应(卫生检测→仓储管理) |
|
||||
| 2 | 毛菜验收秤 | 已设计 | 称重传感器、食材识别摄像头、人脸识别摄像头、场景监控摄像头 | 卫生供应、绿色种采 | 绿色种采(采供管理、供商管理) | 卫生供应(毛菜入库、卫生检测) |
|
||||
| 3 | 毛菜库存柜 | 无需设计 | 温湿度传感器、库存货架 | 卫生供应 | 卫生供应(毛菜入库、卫生检测) | 卫生供应(净菜加工出库) |
|
||||
| 4 | 加工毛菜秤 | 已设计 | 称重传感器、AI识别摄像头、人脸识别摄像头 | 卫生供应 | 卫生供应(仓储管理→出库领料) | 卫生供应(净菜加工→净菜入库) |
|
||||
| 5 | 净菜加工秤 | 已设计 | 称重传感器、AI识别摄像头、人脸识别摄像头 | 卫生供应 | 卫生供应(仓储管理→毛菜出库) | 卫生供应(净菜入库、净菜包装) |
|
||||
| 6 | 净菜库存柜 | 无需设计 | 温湿度传感器、库存货架 | 卫生供应 | 卫生供应(净菜加工→净菜入库) | 卫生供应(净菜包装)、健康生产(净菜下单→配菜组合) |
|
||||
| 7 | 净菜组配秤 | 已设计 | 称重传感器(主辅材+调料双区)、食材识别摄像头、人脸识别摄像头 | 卫生供应、健康生产 | 卫生供应(净菜包装出库)、健康生产(净菜下单) | 卫生供应(净菜包装→内供/外售)、健康生产(配菜组合→烹饪加工) |
|
||||
| 8 | 净菜包装贴标秤 | 已设计 | 称重传感器、标签打印机、食材识别摄像头、人脸识别摄像头 | 卫生供应、健康生产 | 卫生供应(净菜组配)、健康生产(配菜组合) | 卫生供应(净菜内供配送、净菜外售发货) |
|
||||
|
||||
#### 7.1.2 健康生产域(4 款)
|
||||
|
||||
| 序号 | 设备名称 | 研发状态 | 核心硬件组件 | 关联后台模块 | 上游业务 | 下游业务 |
|
||||
|------|---------|---------|-------------|-------------|---------|---------|
|
||||
| 9 | 食安监控设备 | 待硬件选型 | 视频监控摄像头、温湿度传感器、烟感/燃气传感器 | 健康生产、异常事件 | 健康生产(烹饪加工、出餐管理) | 健康生产(日常质检)、异常事件(异常告警) |
|
||||
| 10 | 水电气计量表 | 无需设计 | 水表/电表/燃气表传感器 | 健康生产 | 健康生产(烹饪加工→能耗消耗) | 健康生产(加工统计→成本核算、日常质检→能耗检查) |
|
||||
| 11 | 净菜厨房柜 | 无需设计 | 温湿度传感器、冷藏/保鲜模块 | 健康生产 | 卫生供应(净菜内供→配送收货) | 健康生产(配菜组合→领料出柜、烹饪加工) |
|
||||
| 12 | 加工提示屏 | 无需设计 | 显示屏 | 健康生产 | 健康生产(配菜组合→烹制任务下发) | 健康生产(烹饪加工→操作指引展示) |
|
||||
|
||||
#### 7.1.3 营养用餐域(7 款)
|
||||
|
||||
| 序号 | 设备名称 | 研发状态 | 核心硬件组件 | 关联后台模块 | 上游业务 | 下游业务 |
|
||||
|------|---------|---------|-------------|-------------|---------|---------|
|
||||
| 13 | 营养检测设备 | 待硬件选型 | 近红外光谱/图像分析传感器 | 营养用餐、健康生产 | 营养用餐(菜品总库→餐品档案)、健康生产(烹饪加工→出品) | 健康生产(营养质检→四维检测)、营养用餐(营养数据→摄入统计) |
|
||||
| 14 | 吐盘机 | 无需设计 | 餐盘自动分配机构 | 营养用餐 | 营养用餐(餐线管理→餐线配置) | 营养用餐(排队取餐→自助取盘、取餐管理→回盘核销) |
|
||||
| 15 | 餐线充值屏 | 待产品设计 | 触摸屏、IC卡/NFC读卡器 | 营养用餐 | 营养用餐(用户管理→账户体系) | 营养用餐(消费数据→扣款流水)、小程序(我的余额→账户同步) |
|
||||
| 16 | 营养秤 | 已设计 | 称重传感器、AI菜品识别摄像头、人脸识别摄像头 | 营养用餐、健康生产 | 营养用餐(菜品总库、食谱管理)、健康生产(食谱排期→当日菜单) | 营养用餐(取餐管理→核销记录、营养数据→摄入统计)、档案(员工营养数据) |
|
||||
| 17 | 档口营养秤 | 已设计 | 称重传感器、AI菜品识别摄像头、人脸识别摄像头 | 营养用餐 | 营养用餐(菜品总库→菜品信息、食谱管理→当日食谱) | 营养用餐(点餐订单→下单、营养数据→营养素计算)、档案(员工营养数据) |
|
||||
| 18 | 结算设备 | 无需设计 | 触摸屏、IC卡/NFC/二维码读卡器 | 营养用餐 | 营养用餐(取餐管理→取餐核销、点餐订单→订单确认) | 营养用餐(消费数据→支付流水)、小程序(我的订单→记录、我的余额→扣款) |
|
||||
| 19 | 营养得分屏 | 无需设计 | 显示屏 | 营养用餐、档案管理 | 营养用餐(营养数据→摄入分析)、档案(员工营养数据→历史趋势) | 小程序(健康档案→数据同步、AI营养咨询→建议依据) |
|
||||
|
||||
### 7.2 设备与业务链路对照
|
||||
|
||||
下图为四条业务主线上各硬件设备的部署位置,展示设备在"从田间到餐桌"全链路中的节点角色。
|
||||
|
||||
```
|
||||
食材供应链(田间→仓库)
|
||||
土地环境 → 种养殖监控 → 收成入库 → 采供管理 → 供商管理
|
||||
↓
|
||||
毛菜验收秤 ②
|
||||
↓
|
||||
毛菜入库
|
||||
↓
|
||||
食材加工链(仓库→厨房) 毛菜卫检设备 ①
|
||||
毛菜入库 → 卫生检测 → 仓储管理 → 净菜加工 → 净菜入库 → 净菜包装 → 内供/外售
|
||||
↑ ↑ ↑ ↑ ↑ ↑ ↑
|
||||
毛菜库存柜 ③ 毛菜卫检 毛菜库存柜 加工毛菜秤 ④ 净菜库存柜 ⑥ 净菜包装 净菜组配秤 ⑦
|
||||
净菜加工秤 ⑤ 贴标秤 ⑧ 净菜包装贴标秤 ⑧
|
||||
|
||||
配餐生产链(厨房→餐桌)
|
||||
食谱排期 → 净菜下单 → 配菜组合 → 烹饪加工 → 出餐管理 → 余量处理
|
||||
↑ ↑
|
||||
净菜厨房柜 ⑪ 加工提示屏 ⑫
|
||||
净菜组配秤 ⑦ 食安监控设备 ⑨
|
||||
水电气计量表 ⑩
|
||||
|
||||
员工服务链(餐桌→健康)
|
||||
浏览食谱 → 在线订餐 → 取餐核销 → 营养分析 → 健康档案 → AI 咨询
|
||||
↑ ↑ ↑ ↑
|
||||
档口营养秤 ⑰ 档口营养秤 营养秤 ⑯ 营养得分屏 ⑲
|
||||
结算设备 ⑱ 吐盘机 ⑭ 营养检测设备 ⑬
|
||||
结算设备 ⑱
|
||||
餐线充值屏 ⑮
|
||||
```
|
||||
|
||||
> 图中编号对应 7.1 节硬件清单中的序号。同一设备可能横跨多个业务链环节(如净菜组配秤同时服务于食材加工链和配餐生产链)。
|
||||
|
||||
|
||||
@@ -0,0 +1,386 @@
|
||||
# 营养管理——规格管理体系分析与设计方案
|
||||
|
||||
> 撰写日期:2026-07-24 | 状态:**待评审**
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
营养管理从餐品总库、食物成分到后续的各个订单业务、采购、验收、入库等环节中都涉及"规格"概念,但目前:
|
||||
|
||||
- 规格没有统一维护入口
|
||||
- 各业务环节之间规格如何转换完全没有考虑
|
||||
- 同一概念在不同页面用不同数据格式表达,非常混乱
|
||||
|
||||
本文档对 10 个业务环节中"规格"的现状进行完整梳理,并给出统一设计方案。
|
||||
|
||||
---
|
||||
|
||||
## 二、全景总览:一个"规格",十种表达
|
||||
|
||||
```
|
||||
采购环节 加工/包装环节 消费/生产环节
|
||||
─────── ──────────── ────────────
|
||||
farm-purchase sup-in-cleanin prod-clean-order
|
||||
spec: "25kg/件" (自由文本) 入库规格: "袋装/500g" (下拉) specGram: 500 (自由输入)
|
||||
净菜类型: "丁(1.5cm)" (联动下拉) specLabel: "500g/袋"
|
||||
|
||||
raw-veg-inspection-scale sup-in-raw sup-clean-external
|
||||
采购规格: "斤" (14种下拉) 入库规格: "25kg/件" (7种下拉) spec: "5kg/箱" (自由输入+下拉)
|
||||
实收规格: "斤" (14种下拉)
|
||||
sup-pkg-label sup-clean-internal
|
||||
din-dish-all 净菜包: 500 (纯数字输入) spec: "500g/袋" (自由输入+下拉)
|
||||
specs: [{name:'标准份', 餐品包: "标准份(500g)" (下拉)
|
||||
weight:200, price:12}] prod-proc-combo
|
||||
餐品规格: "标准份(300g)" (硬编码下拉)
|
||||
din-ingredient
|
||||
vegTypes: [{name:'肉丁', prod-proc-cook
|
||||
yieldRate:'92'}] 餐品规格: "标准份(300g)" (只读)
|
||||
(此处的 vegTypes 实际是净菜类型)
|
||||
prod-proc-cabinet
|
||||
包装规格: "5kg/袋" (从订单回显)
|
||||
```
|
||||
|
||||
**问题本质**:缺少一个统一的规格主数据中心,导致:
|
||||
1. 同一概念(如"包装规格")在 6 个页面中以 6 种不同方式表达
|
||||
2. 不同层级规格之间(采购→净菜→餐品)完全没有转换规则
|
||||
3. 每个页面各自维护一套下拉选项,互不同步
|
||||
|
||||
---
|
||||
|
||||
## 三、各环节规格现状详析
|
||||
|
||||
### 3.1 餐品总库 `din-dish-all.html`——规格的定义源头(但只覆盖餐品层)
|
||||
|
||||
```javascript
|
||||
// 每个餐品对象内嵌 specs 数组
|
||||
specs: [
|
||||
{ name:'标准份', weight:200, price:12, cleanPrice:9, cleanSale:false, isDefault:true },
|
||||
{ name:'小份', weight:120, price:8, cleanPrice:6, cleanSale:false },
|
||||
{ name:'大份', weight:300, price:18, cleanPrice:13, cleanSale:false }
|
||||
]
|
||||
```
|
||||
|
||||
- 规格名称枚举:`标准份` / `小份` / `大份` / `迷你份` / `加大份`(在 `din-dish-add.html` 的下拉中定义)
|
||||
- 关键字段:name(份型名称)、weight(成品重量g)、price(餐品售价)、cleanPrice(净菜包售价)、cleanSale(是否外售上架)
|
||||
- **问题**:组配/烹制等下游环节使用另一套硬编码的规格下拉,与总库中定义的不联动
|
||||
|
||||
### 3.2 食物成分库 `din-ingredient.html`——食材级"规格"
|
||||
|
||||
```javascript
|
||||
// vegTypes 实际表达的是"净菜类型"而非规格
|
||||
vegTypes: [
|
||||
{ name:'肉片', yieldRate:'95' }, // 猪里脊可加工为肉片,出净率95%
|
||||
{ name:'肉丁', yieldRate:'92' }, // 可加工为肉丁,出净率92%
|
||||
{ name:'肉块', yieldRate:'97' } // 可加工为肉块,出净率97%
|
||||
]
|
||||
```
|
||||
|
||||
- 这里的"规格"实际上是**净菜加工类型 + 出净率**
|
||||
- **问题**:出净率数据存在食材库中,但采购→净菜入库的换算从未使用出净率;净菜类型字典散落在 3-4 个页面中重复定义(`cleanFoodTypeOptions`、`cleanTypeMap` 等)
|
||||
|
||||
### 3.3 采供管理 `farm-purchase.html`
|
||||
|
||||
```
|
||||
采购明细子表:溯源码 | 食材名称 | 食材分类 | 采购数量 | 规格 | 单价 | 小计
|
||||
|
||||
规格取值(自由文本输入,无约束):
|
||||
蔬菜/水产 → "散装(kg)"
|
||||
肉类 → "25kg/件"
|
||||
粮油 → "5L/桶" / "20kg/箱"
|
||||
```
|
||||
|
||||
- **问题**:完全自由文本,既不下拉也不关联食材目录。采购写了 "25kg/件",到毛菜入库环节还得重新选
|
||||
|
||||
### 3.4 毛菜验收秤 `01-verify-inspection.html`
|
||||
|
||||
```
|
||||
表格8列:食材 | 采购规格 | 采购量 | 采购单价 | 应付金额 | 实收规格 | 实收量 | 操作
|
||||
|
||||
食材目录(20种可称重食材): { price:3.5, unit:'斤' }
|
||||
调料目录(8种按规格验收): { price:12, unit:'瓶', spec:'500ml/瓶' }
|
||||
|
||||
UNIT_OPTIONS = ['斤','公斤','克','千克','袋','瓶','箱','桶','罐','份','个','只','条','把']
|
||||
```
|
||||
|
||||
- 采购规格 = 14 种单位下拉,默认取食材目录的 unit
|
||||
- 实收规格 = 同上,默认跟随采购规格但可修改
|
||||
- **核心差异**:调料类走"规格验收"(不能称重,直接点收数量),食材类走"称重验收"
|
||||
- **问题**:`UNIT_OPTIONS` 混在一起的东西太多——有重量单位(斤/公斤/克/千克)、容器单位(袋/瓶/箱/桶/罐)、计数单位(份/个/只/条/把),语义完全不同
|
||||
|
||||
### 3.5 毛菜入库 `sup-in-raw.html`
|
||||
|
||||
```
|
||||
入库规格下拉(7个固定选项):
|
||||
25kg/件 | 20kg/箱 | 15kg/箱 | 10kg/筐 | 5kg/袋 | 1kg/包 | 散装(kg)
|
||||
```
|
||||
|
||||
- **问题**:固定下拉与采购规格不联动,采购中选的 "25kg/件" 在这里要重新选一遍
|
||||
|
||||
### 3.6 净菜入库 `sup-in-cleanin.html`
|
||||
|
||||
```
|
||||
入库规格下拉:袋装/500g | 袋装/400g | 盒装/300g | 散装/整棵 | 其他
|
||||
|
||||
食材→净菜类型联动:
|
||||
土豆 → [土豆丝, 土豆块, 土豆泥]
|
||||
猪里脊 → [丁(1.5cm), 丝(0.8cm), 片(2mm)]
|
||||
西兰花 → [小朵, 西兰花段, 西兰花梗]
|
||||
```
|
||||
|
||||
- 两层选择:先选食材→联动净菜类型→再选入库规格(袋/盒/散装+克数组合)
|
||||
- **问题**:食材→净菜类型的映射(`cleanFoodTypeOptions`)在本页面独立维护,与 `din-ingredient.html` 中的 `vegTypes` 不联动
|
||||
|
||||
### 3.7 净菜订单 `prod-clean-order.html`
|
||||
|
||||
```
|
||||
nc模式(净菜包): 食材 | 净菜名称 | 包装规格(g) | 份数 | 计量(kg)
|
||||
cp模式(餐品包): 餐品名称 | 包装规格 | 份数 | 计量(kg)
|
||||
|
||||
nc: 包装规格 = 自由输入整数克数 → specLabel = "500g/袋"(自动拼接)
|
||||
cp: 包装规格 = 从 cpSpecOptions 下拉选择 → specLabel = "标准份(500g)"
|
||||
|
||||
重量公式: weight = specGram × qty / 1000
|
||||
```
|
||||
|
||||
```javascript
|
||||
// 硬编码的餐品规格选项(与餐品总库中的 specs 不联动)
|
||||
cpSpecOptions = {
|
||||
'宫保鸡丁': [{label:'标准份(500g)', grams:500}, {label:'加量份(750g)', grams:750}],
|
||||
'清蒸鱼': [{label:'标准份(600g)', grams:600}, {label:'大份(900g)', grams:900}],
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
- **问题**:nc 模式的规格自由输入整数,可能出现 499g、501g 等非标准包装;cp 模式的选项硬编码,总库改了这里不会同步
|
||||
|
||||
### 3.8 外售/内供 `sup-clean-external.html` / `sup-clean-internal.html`
|
||||
|
||||
与净菜订单结构相同(nc/cp 两套模式),但 Mock 数据规格格式不同:
|
||||
|
||||
| 环节 | nc 规格示例 | cp 规格示例 |
|
||||
|------|------------|------------|
|
||||
| 外售 | `5kg/箱`, `1kg/箱` | `标准份(500g)` |
|
||||
| 内供 | `500g/袋`, `2kg/盘` | `标准份(500g)` |
|
||||
|
||||
- **问题**:外售用 `箱`,内供用 `袋/盘`,包装容器类型没有统一约束
|
||||
|
||||
### 3.9 净菜组配 + 按单烹制 `prod-proc-combo.html` / `prod-proc-cook.html`
|
||||
|
||||
```
|
||||
组配: 餐品规格下拉 → 小份(200g) | 标准份(300g) | 大份(500g)【硬编码】
|
||||
烹制: 餐品规格只读显示 + 生重(kg)/熟重(kg)/生熟比
|
||||
```
|
||||
|
||||
```javascript
|
||||
// 组配中每份餐品的食材配方(重量以克为单位)
|
||||
recipeData = {
|
||||
'宫保鸡丁': [
|
||||
{trace:'NC-PROC-JXR-...', name:'鸡胸肉', type:'主材', amount:120, unit:'g'},
|
||||
{trace:'NC-PROC-HUS-...', name:'花生米', type:'辅材', amount:30, unit:'g'},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- **问题**:规格下拉选项 "小份(200g)/标准份(300g)/大份(500g)" 与餐品总库中定义的 specs(标准份=200g, 小份=120g, 大份=300g)完全不一致
|
||||
|
||||
### 3.10 净菜进柜 `prod-proc-cabinet.html`
|
||||
|
||||
- 规格从订单数据回显,不独立编辑
|
||||
- 跟踪 "初始重量(kg)" 和 "当前余量(kg)",规格只作为辅助标识
|
||||
|
||||
---
|
||||
|
||||
## 四、加工规格的额外维度
|
||||
|
||||
在净菜配比秤设置页 `clean-veg-ratio-scale/03-settings.html` 中:
|
||||
|
||||
```
|
||||
丝条粗细 → 丝条规格的标准粗细
|
||||
滚刀块大小 → 滚刀块规格的标准大小
|
||||
方丁大小 → 方丁规格的标准大小
|
||||
```
|
||||
|
||||
这些与净菜类型中的 "丁(1.5cm)"、"丝(0.8cm)" 概念重复但未统一。
|
||||
|
||||
---
|
||||
|
||||
## 五、核心问题总结
|
||||
|
||||
| # | 问题 | 严重程度 | 涉及页面数 |
|
||||
|---|------|---------|-----------|
|
||||
| 1 | **采购规格自由文本,无约束无联动**——下游入库要重选 | 🔴 高 | 3 |
|
||||
| 2 | **餐品总库定义了 specs,但组配/烹制用另一套硬编码下拉** | 🔴 高 | 3 |
|
||||
| 3 | **包装容器类型(袋/盒/箱/盘/筐/桶/瓶)散落各处,无统一枚举** | 🔴 高 | 6 |
|
||||
| 4 | **食材→净菜类型映射在 3+ 页面重复定义,互不同步** | 🟡 中 | 4 |
|
||||
| 5 | **采购→净菜→餐品三级规格之间没有任何转换规则** | 🔴 高 | 全部 |
|
||||
| 6 | **加工规格(切配参数)与净菜类型概念重复** | 🟡 中 | 2 |
|
||||
| 7 | **单位混用:重量单位、容器单位、计数单位混在一起** | 🟡 中 | 2 |
|
||||
|
||||
---
|
||||
|
||||
## 六、设计方案:四级规格主数据体系
|
||||
|
||||
### 6.1 架构总览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 规格主数据(统一维护入口) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ L1 采购规格 L2 净菜加工规格 L3 净菜包装规格 │
|
||||
│ ────────── ────────────── ────────────── │
|
||||
│ 采购单位 + 包装量 净菜类型 + 切配参数 容器类型 + 净含量 │
|
||||
│ 例: 25kg/件 例: 丁(1.5cm) 例: 袋装/500g │
|
||||
│ 散装(kg) 丝(0.8cm) 盒装/300g │
|
||||
│ 5L/桶 片(2mm) 箱装/5kg │
|
||||
│ │
|
||||
│ L4 餐品规格 │
|
||||
│ ────────── │
|
||||
│ 份型 + 成品重量(g) │
|
||||
│ 例: 标准份(300g) │
|
||||
│ 大份(500g) │
|
||||
│ │
|
||||
│ 转换链: L1 ──(出净率)──→ L2 ──(包装组合)──→ L3 ──(配方)──→ L4 │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 6.2 各级规格数据模型
|
||||
|
||||
#### L1 — 采购规格(在食材目录中维护)
|
||||
|
||||
| 字段 | 类型 | 说明 | 示例 |
|
||||
|------|------|------|------|
|
||||
| `purchaseUnit` | enum | 采购计量单位 | `kg`, `件`, `斤`, `L` |
|
||||
| `packSize` | number | 单件包装量 | `25`(25kg/件) |
|
||||
| `specLabel` | string | 规格标签(自动生成) | `25kg/件`, `散装(kg)` |
|
||||
| `allowLoose` | bool | 是否允许散装采购 | true/false |
|
||||
| `isWeightBased` | bool | 是否按重量验收(否则按规格验收) | true=称重, false=点收 |
|
||||
|
||||
#### L2 — 净菜加工规格(在食材目录中维护)
|
||||
|
||||
| 字段 | 类型 | 说明 | 示例 |
|
||||
|------|------|------|------|
|
||||
| `cleanTypeName` | string | 净菜类型名称 | `丁`, `丝`, `片`, `块`, `段` |
|
||||
| `cutParam` | string | 切配参数 | `1.5cm`, `0.8cm`, `2mm` |
|
||||
| `yieldRate` | number | 出净率(%) | `92` |
|
||||
| `displayName` | string | 完整显示名(自动生成) | `丁(1.5cm)` |
|
||||
|
||||
#### L3 — 净菜包装规格(独立字典)
|
||||
|
||||
| 字段 | 类型 | 说明 | 示例 |
|
||||
|------|------|------|------|
|
||||
| `containerType` | enum | 包装容器类型 | `袋`, `盒`, `箱`, `盘`, `筐`, `桶` |
|
||||
| `netWeight` | number | 净含量(g) | `500`, `300`, `5000` |
|
||||
| `specLabel` | string | 规格标签(自动生成) | `袋装/500g` |
|
||||
|
||||
#### L4 — 餐品规格(在餐品总库中维护,现有结构基本正确)
|
||||
|
||||
| 字段 | 类型 | 说明 | 示例 |
|
||||
|------|------|------|------|
|
||||
| `specName` | string | 份型名称 | `标准份`, `大份`, `小份` |
|
||||
| `finishedWeight` | number | 成品重量(g) | `300` |
|
||||
| `price` | number | 餐品售价(元) | `12` |
|
||||
| `cleanPrice` | number | 净菜包售价(元) | `9` |
|
||||
|
||||
### 6.3 规格转换规则
|
||||
|
||||
```
|
||||
采购规格(L1) → 净菜加工规格(L2):
|
||||
净料重量 = 采购量 × 出净率(来自食材目录 vegTypes.yieldRate)
|
||||
例:25kg/件 猪里脊 → 切肉丁(出净率92%) → 净料 = 25 × 0.92 = 23kg
|
||||
|
||||
净菜加工规格(L2) → 净菜包装规格(L3):
|
||||
可包装份数 = 净料重量(g) ÷ 包装规格净含量(g)
|
||||
例:23kg = 23000g → 袋装/500g → 可包 23000 ÷ 500 = 46 袋
|
||||
|
||||
净菜包装规格(L3) → 餐品规格(L4):
|
||||
可产出份数 = (袋数 × 净含量) ÷ 单品食材用量
|
||||
例:46袋 × 500g/袋 ÷ 120g(宫保鸡丁每份需肉丁量) ≈ 191 份
|
||||
```
|
||||
|
||||
### 6.4 规格字典管理页面(新增)
|
||||
|
||||
建议在营养管理后台新增"规格字典"维护入口:
|
||||
|
||||
```
|
||||
┌─ 规格字典管理 ──────────────────────────────────────┐
|
||||
│ │
|
||||
│ Tab: [包装容器] [切配类型] [份型] [包装规格组合] │
|
||||
│ │
|
||||
│ ▸ 包装容器字典(L3 基础) │
|
||||
│ 袋 | 盒 | 箱 | 盘 | 筐 | 桶 | 瓶 | 罐 │
|
||||
│ │
|
||||
│ ▸ 切配类型字典(L2 基础) │
|
||||
│ 丁 | 丝 | 片 | 块 | 段 | 末 | 泥 | 条 │
|
||||
│ └─ 可配置默认切配参数(丁→1.5cm, 丝→0.8cm, ...) │
|
||||
│ │
|
||||
│ ▸ 份型字典(L4 基础) │
|
||||
│ 标准份 | 小份 | 大份 | 迷你份 | 加大份 │
|
||||
│ │
|
||||
│ ▸ 包装规格组合(L3 = 容器 × 净含量) │
|
||||
│ 袋装/500g, 袋装/1000g, 盒装/300g, 箱装/5kg, ... │
|
||||
│ │
|
||||
│ ▸ 食材-净菜类型关联(在食材基础档案中维护,L1→L2) │
|
||||
│ 猪里脊 → 肉丁(1.5cm/出净率92%) │
|
||||
│ 肉丝(0.8cm/出净率95%) │
|
||||
│ 肉片(2mm/出净率97%) │
|
||||
└──────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 6.5 各环节改造对照表
|
||||
|
||||
| 环节 | 当前做法 | 改造后 |
|
||||
|------|---------|--------|
|
||||
| **食材目录** `din-ingredient` | vegTypes 表达净菜类型 | 增加 L1 采购规格字段 + L2 净菜类型(含切配参数、出净率) |
|
||||
| **餐品总库** `din-dish-all` | specs 基本正确 | 规格名称从份型字典读取,保持现有数据模型 |
|
||||
| **采供管理** `farm-purchase` | 规格自由文本 | 从食材目录 L1 自动带出,不可自由输入 |
|
||||
| **毛菜验收秤** | 14种单位混用 | 采购规格从订单 L1 带出;实收规格默认跟随,允许修正;区分重量/容器/计数三类单位 |
|
||||
| **毛菜入库** `sup-in-raw` | 7种固定下拉 | 从采购订单继承 L1,无需重选 |
|
||||
| **净菜入库** `sup-in-cleanin` | 净菜类型+入库规格分开选 | 从 L2+L3 字典联动选择 |
|
||||
| **净菜订单** `prod-clean-order` | nc 自由输克数 / cp 硬编码下拉 | nc 从 L3 包装规格字典选择;cp 从餐品总库 L4 动态拉取 |
|
||||
| **外售/内供** | nc 自由输克数 | 同上,从 L3 选择 |
|
||||
| **净菜组配** `prod-proc-combo` | 硬编码规格下拉 | 从餐品总库 L4 动态拉取 |
|
||||
| **按单烹制** `prod-proc-cook` | 规格只读 + 硬编码 | 规格从 L4 带出,生熟比关联 L2 出净率 |
|
||||
| **包装标签** `sup-pkg-label` | 纯数字输入 | 从 L3 选择 |
|
||||
| **加工秤设置** `clean-veg-ratio-scale/03-settings` | 丝条/滚刀块/方丁独立配置 | 从 L2 切配参数字典读取,作为默认值可覆盖 |
|
||||
|
||||
---
|
||||
|
||||
## 七、需要新增/修改的文件
|
||||
|
||||
### 新增
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `web-admin/nutrition/din-dict-spec.html` | 规格字典管理页面(容器/切配/份型/组合) |
|
||||
|
||||
### 修改
|
||||
|
||||
| 文件 | 改造内容 |
|
||||
|------|---------|
|
||||
| `web-admin/nutrition/din-ingredient.html` | 增加 L1 采购规格字段、L2 净菜类型(含切配参数+出净率) |
|
||||
| `web-admin/nutrition/din-dish-all.html` | 规格名称从份型字典读取 |
|
||||
| `web-admin/nutrition/din-dish-add.html` | 规格名称下拉从份型字典读取 |
|
||||
| `web-admin/nutrition/farm-purchase.html` | 规格从自由文本改为 L1 自动带出 |
|
||||
| `web-admin/nutrition/sup-in-raw.html` | 入库规格从采购订单继承 L1 |
|
||||
| `web-admin/nutrition/sup-in-cleanin.html` | 联动 L2+L3 字典 |
|
||||
| `web-admin/nutrition/prod-clean-order.html` | nc 从 L3 选 / cp 从 L4 拉取 |
|
||||
| `web-admin/nutrition/sup-clean-external.html` | nc 从 L3 选 / cp 从 L4 拉取 |
|
||||
| `web-admin/nutrition/sup-clean-internal.html` | nc 从 L3 选 / cp 从 L4 拉取 |
|
||||
| `web-admin/nutrition/sup-pkg-label.html` | 包装规格从 L3 选择 |
|
||||
| `web-admin/nutrition/prod-proc-combo.html` | 餐品规格从 L4 动态拉取 |
|
||||
| `web-admin/nutrition/prod-proc-cook.html` | 餐品规格从 L4 动态拉取 |
|
||||
| `other-module/canteen-device/raw-veg-inspection-scale/01-verify-inspection.html` | 单位下拉分类重构 |
|
||||
| `other-module/canteen-device/clean-veg-ratio-scale/03-settings.html` | 加工参数从 L2 读取 |
|
||||
|
||||
---
|
||||
|
||||
## 八、待讨论事项
|
||||
|
||||
1. **规格字典管理页面放在哪个菜单下?** —— 建议放在"营养用餐 > 字典管理"下的子页面,或新建 "基础数据 > 规格字典"
|
||||
2. **历史数据兼容?** —— 如果已有真实生产数据,规格升级需要迁移脚本
|
||||
3. **L1 采购规格的单位细分** —— 当前 14 种混用的 UNIT_OPTIONS 拆分后,是单独建表还是用标签分类?
|
||||
4. **转换规则的计算精度** —— 出净率% → 净料重量 → 可包装份数 → 可产出份数,这条链上每一步的取整规则(向上/向下/四舍五入)需要明确
|
||||
Reference in New Issue
Block a user