tuqin
5 天以前 00b90cad71c30e7045c1a83c0ee6f536571fbf5f
Merge remote-tracking branch 'origin/dev_business' into dev_business
已删除2个文件
已添加22个文件
3970 ■■■■■ 文件已修改
.claude/rules/business-visualization-maintenance.md 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.claude/skills/project-business-analysis/SKILL.md 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.claude/skills/project-business-analysis/scripts/sync_index.js 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.playwright-mcp/page-snapshot-2.txt 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.playwright-mcp/page-snapshot.txt 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/Claude Code Agent:项目业务分析 + Mermaid + HTML 可视化生成 Prompt.md 1492 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/README.md 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/data/business.json 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/data/flows.json 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/data/modules.json 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/data/objects.json 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/data/roles.json 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/index.html 1145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/01-business-mindmap.mmd 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/02-sales-flow.mmd 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/03-purchase-flow.mmd 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/04-production-flow.mmd 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/05-quality-flow.mmd 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/06-warehouse-flow.mmd 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/07-after-sales-flow.mmd 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/08-module-relation.mmd 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/09-data-flow.mmd 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/10-business-object.mmd 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/project-business/mermaid/11-ai-business-flow.mmd 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.claude/rules/business-visualization-maintenance.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
# ä¸šåŠ¡å¯è§†åŒ–æ–‡æ¡£ç»´æŠ¤è§„åˆ™
## èƒŒæ™¯
`docs/project-business/` æ˜¯é¡¹ç›®ä¸šåŠ¡å¯è§†åŒ–æˆæžœï¼ˆMermaid ä¸šåС图 + JSON ä¸šåŠ¡æ•°æ® + å¯åŒå‡»æ‰“开的 index.html),分析方法与维护规程见技能 `project-business-analysis`(`.claude/skills/project-business-analysis/SKILL.md`)。
## è§„则
- å½“本次代码变更涉及**业务模块、核心业务对象/单据、业务流程步骤、状态流转、跨模块数据流、AI èƒ½åŠ›ã€è§’è‰²æƒé™**中的任一内容时:
  - è‹¥ `docs/project-business/` å·²å­˜åœ¨ï¼šä»»åŠ¡æ”¶å°¾å‰å¿…é¡»æŒ‰æŠ€èƒ½çš„ã€Œç»´æŠ¤æ¨¡å¼ã€å¢žé‡æ›´æ–°å¯¹åº” mmd/json/html,更新内容以变更后实际代码为准。
  - è‹¥å°šä¸å­˜åœ¨ï¼šä¸å¼ºåˆ¶ç”Ÿæˆï¼Œä½†éœ€åœ¨å®Œæˆæ±‡æŠ¥ä¸­æç¤ºç”¨æˆ·å¯è¿è¡Œç”Ÿæˆæ¨¡å¼å»ºç«‹ä¸šåŠ¡å…¨æ™¯ã€‚
- ç”¨æˆ·è¯¢é—®"系统是做什么的/某业务怎么流转/给我讲业务逻辑"时,优先调用技能 `project-business-analysis` çš„阅读模式,基于已有业务文档回答并与源码核对。
- ç»´æŠ¤åªåšå¢žé‡ï¼šåªæ”¹ä¸Žæœ¬æ¬¡å˜æ›´ç›¸å…³çš„æ–‡ä»¶ï¼Œç¦æ­¢æ— å˜æ›´å…¨é‡é‡ç”Ÿæˆã€‚
.claude/skills/project-business-analysis/SKILL.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
---
name: project-business-analysis
description: "项目业务分析与可视化 â€” ä»ŽçœŸå®žæºç è¿˜åŽŸä¸šåŠ¡ï¼Œå»ºç«‹ä¸šåŠ¡çŸ¥è¯†æ¨¡åž‹ï¼Œç”Ÿæˆ Mermaid ä¸šåС图 + å¯ç›´æŽ¥åŒå‡»æ‰“开的 HTML å¯è§†åŒ–页面(docs/project-business/)。三种使用模式:①生成模式(首次全量分析)②维护模式(业务变更后同步更新)③阅读模式(回答'这个系统是做什么的/业务怎么流转')。触发关键词: ä¸šåŠ¡åˆ†æž ä¸šåŠ¡é€»è¾‘ ä¸šåŠ¡å…¨æ™¯ ä¸šåŠ¡å¯è§†åŒ– ä¸šåŠ¡æµç¨‹å›¾ æ¨¡å—关系 æ•°æ®æµ æ–°äººåŸ¹è®­ äº†è§£é¡¹ç›® è®²è®²è¿™ä¸ªç³»ç»Ÿ ç”»ä¸šåС图 ç”Ÿæˆä¸šåŠ¡æ–‡æ¡£ æ›´æ–°ä¸šåŠ¡æ–‡æ¡£ project-business mermaid业务图 ä¸šåŠ¡ç»´æŠ¤."
---
# é¡¹ç›®ä¸šåŠ¡åˆ†æžä¸Žå¯è§†åŒ–
> æ ¸å¿ƒåŽŸåˆ™ï¼šä¸æ˜¯æŠŠé¡¹ç›®"画出来",而是先把项目"理解出来",再把理解结果可视化。
> æˆæžœæ ‡å‡†ï¼šä¸€ä¸ªå®Œå…¨ä¸äº†è§£é¡¹ç›®çš„人,打开 `docs/project-business/index.html` å³å¯ç†è§£é¡¹ç›®æ˜¯åšä»€ä¹ˆçš„、有哪些模块、核心业务怎么流转、模块间如何协作、数据如何流转。
源提示词文档:`docs/Claude Code Agent:项目业务分析 + Mermaid + HTML å¯è§†åŒ–生成 Prompt.md`(本技能是其可执行提炼,冲突时以源码事实为准并同步修正两份文件)。
## ä½¿ç”¨æ¨¡å¼
| åœºæ™¯ | æ¨¡å¼ |
|------|------|
| `docs/project-business/` ä¸å­˜åœ¨ï¼Œä¸”需要业务全景材料(培训/汇报/演示/自己理清业务) | ç”Ÿæˆæ¨¡å¼ |
| ä»£ç å˜æ›´æ¶‰åŠä¸šåŠ¡æ¨¡å—/流程/状态/对象/角色/数据流/AI èƒ½åŠ› | ç»´æŠ¤æ¨¡å¼ï¼ˆè§ä¸‹æ–‡ï¼‰ |
| ç”¨æˆ·è¯¢é—®"系统是做什么的、某业务怎么流转" | é˜…读模式:基于 `docs/project-business/` å›žç­”,并与当前源码核对,不一致以源码为准并回写文档 |
## è¾“出结构
```text
docs/project-business/
├── index.html              # å•文件可视化,双击直接打开
├── README.md               # é¡¹ç›®å®šä½ã€æ¨¡å—、图说明、使用方法、如何重新生成
├── mermaid/
│   â”œâ”€â”€ 01-business-mindmap.mmd      # ä¸šåŠ¡å…¨æ™¯æ€ç»´å¯¼å›¾
│   â”œâ”€â”€ 02-sales-flow.mmd            # é”€å”®æµç¨‹
│   â”œâ”€â”€ 03-purchase-flow.mmd         # é‡‡è´­æµç¨‹
│   â”œâ”€â”€ 04-production-flow.mmd       # ç”Ÿäº§æµç¨‹
│   â”œâ”€â”€ 05-quality-flow.mmd          # è´¨é‡æµç¨‹ï¼ˆIQC/IPQC/OQC/不合格品)
│   â”œâ”€â”€ 06-warehouse-flow.mmd        # ä»“储流程(入库/出库/领料/盘点)
│   â”œâ”€â”€ 07-after-sales-flow.mmd      # å”®åŽæµç¨‹ï¼ˆå¦‚存在)
│   â”œâ”€â”€ 08-module-relation.mmd       # æ¨¡å—/系统关系图
│   â”œâ”€â”€ 09-data-flow.mmd             # æ•°æ®æµå›¾
│   â”œâ”€â”€ 10-business-object.mmd       # ä¸šåŠ¡å¯¹è±¡å…³ç³»ï¼ˆerDiagram,只画核心业务对象)
│   â””── 11-ai-business-flow.mmd      # AI ä¸šåŠ¡æµç¨‹ï¼ˆå¦‚å­˜åœ¨ï¼‰
└── data/
    â”œâ”€â”€ business.json       # { project:{name,description}, modules, objects, flows, roles, aiCapabilities }
    â”œâ”€â”€ modules.json
    â”œâ”€â”€ objects.json
    â”œâ”€â”€ flows.json
    â””── roles.json
```
按项目实际业务裁剪文件(如项目无售后则不生成 07),保留编号前缀以稳定导航顺序。
## åˆ†æžå¯¹è±¡ï¼ˆå¿…须分析真实源码)
- **后端**:Controller / Service / Mapper / DO(Entity) / DTO / VO / Enum / Config / Job / Utils
- **数据库**:建表 SQL、字段、外键与逻辑关联、索引、状态字段
- **前端**(`mom-pro2-before`,只读):页面、API、路由、菜单、权限
- **配置**:application*.yml、MQ、Redis、第三方接口、AI ç›¸å…³é…ç½®
禁止:只看目录名称、按类名猜业务、只输出 Java æž¶æž„图/数据库全表 ER å›¾/Controller ç½—列/菜单罗列。要的是**业务理解图,不是代码结构图**。
## æœ¬é¡¹ç›®å·²çŸ¥åœ°å›¾ï¼ˆåˆ†æžèµ·ç‚¹å‡è®¾ï¼Œä»¥æºç æ ¸å¯¹ä¸ºå‡†ï¼‰
混合系统:MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å°ã€‚ä¸»æ¨¡å—ï¼ˆMaven module):`yudao-module-mes`(生产/仓储 WM/质检/设备)、`yudao-module-erp`(采购/销售/财务)、`yudao-module-crm`(客户/线索/商机/合同/回款/报价)、`yudao-module-mdm`(物料/单位主数据)、`yudao-module-hrm`(人事/交接,`HrmUserHandoverApi` å½±å“"我的数据"可见性)、`yudao-module-bpm`(审批流,手工部署)、`yudao-module-ai`、`yudao-module-system`(含 Storage é™„件体系)。
推测主线:CRM å•†æœº/合同 â†’ é”€å”®è®¢å• â†’ ç”Ÿäº§å·¥å•/报工(按工序顺序控制)→ è´¨æ£€ â†’ å…¥åº“ â†’ å‘货出库;采购链:采购申请 â†’ å®¡æ‰¹ â†’ é‡‡è´­è®¢å• â†’ åˆ°è´§ â†’ IQC â†’ å…¥åº“/退货/特采。分析时逐条验证并修正。
## ç”Ÿæˆæ¨¡å¼æ‰§è¡Œæµç¨‹
1. **判定项目类型**:输出 ç³»ç»Ÿç±»åž‹ / ä¸»ç³»ç»Ÿ / å­ç³»ç»Ÿ / ä¸šåŠ¡å®šä½ã€‚
2. **建立业务知识模型**(先建模后画图):系统定位、业务模块、业务对象、业务角色、业务流程、单据、状态、数据流、模块关系、权限关系、第三方系统、AI èƒ½åŠ›ã€‚
3. **识别业务模块**:按业务意义归类(不按 Java package)。每个模块提取:名称、定位、解决的问题、核心功能、核心业务对象、主要角色、上游模块、下游模块、核心数据库表、核心业务流程。
4. **识别核心业务对象**:从 Entity/SQL/Service/前端页面/状态字段/单据编号提取,只留有业务价值的对象(客户、物料、BOM、销售订单、工单、库存、质检单、出入库单……),不放技术表。
5. **识别业务主线**:一项业务从哪开始、经过哪些步骤、产生什么结果(销售→生产→仓储→发货类链路)。
6. **识别各条线流程**:采购(申请→审批→订单→到货→IQC→合格入库/不合格退货/特采)、生产(计划→任务→BOM→工艺→领料→生产→报工→过程质量→完工→成品入库,含 APS/排产/工序/工作中心/设备/工时/线边仓如有)、质量(IQC/IPQC/OQC/不合格品/判定/检验标准)、仓储(采购入库/生产入库/销售出库/领料/盘点/调整,含原材料/半成品/成品/线边/虚拟仓如有)、售后(反馈→工单→派工→处理→确认→关闭归档,含退换补/费用如有)。
7. **识别 AI èƒ½åŠ›**:不停留在"用了大模型",画清 ç”¨æˆ·é—®é¢˜â†’RAG/知识库→业务查询→AI åˆ†æžâ†’返回;如可 Function Calling è°ƒä¸šåŠ¡ API,重点展示。
8. **识别角色**:实际存在的角色(管理员/销售/采购/计划员/生产/仓库/质量/财务/管理层……),说明 è§’色→可操作业务→产生数据。
9. **识别状态流转**:搜索 status/state/type/auditStatus/approvalStatus/checkStatus/orderStatus ç­‰å­—段与对应枚举,还原真实状态机。**禁止添加代码中不存在的状态**。
10. **生成 mermaid/*.mmd â†’ data/*.json â†’ index.html â†’ README.md**。
11. **自检**(见检查清单),发现问题自动修复后再汇报。
## index.html è¦æ±‚
- çº¯ HTML5 + CSS3 + JS + Mermaid(CDN `mermaid@latest`,`theme:'dark'`;若项目已有 Mermaid ä¾èµ–则复用其版本)。双击即可运行:不依赖后端、不要求 Node/Vue/构建。
- é£Žæ ¼ï¼šæ·±è‰²ç§‘技风、企业数字化/工业互联网质感;高级、简洁、专业、信息密度合理;适配 1920×1080 ä¸Žæ™®é€šç¬”记本屏。禁止:大量发光/炫光/粒子特效/复杂 3D/无意义动画/过度渐变。视觉中心是业务逻辑。
- é¡¶éƒ¨ï¼šé¡¹ç›®åç§° + ä¸šåŠ¡å…¨æ™¯ + æ¦‚览指标(项目定位、模块数、核心业务链、核心对象、AI èƒ½åŠ›ï¼‰ã€‚
- å·¦ä¾§å›ºå®šå¯¼èˆªï¼šé¡¹ç›®æ¦‚览 / ä¸šåŠ¡å…¨æ™¯ / æ ¸å¿ƒä¸šåŠ¡ï¼ˆé”€å”®ã€é‡‡è´­ã€ç”Ÿäº§ã€ä»“å‚¨ã€è´¨é‡ã€å”®åŽå„æµç¨‹ï¼‰/ ç³»ç»Ÿå…³ç³» / æ•°æ®æµ / ä¸šåŠ¡å¯¹è±¡ / AI ä¸šåŠ¡ / è§’色权限;点击切换右侧内容。
- é¦–页为业务全景图(模块关系按分析结果生成)。
- äº¤äº’:①模块卡片(列出该模块核心单据/功能,点击进入对应流程图)②每张 Mermaid å›¾æ”¯æŒæ”¾å¤§/缩小/全屏 â‘¢ä¸šåŠ¡æœç´¢ï¼ˆè¾“å…¥"销售订单/工单/IQC"等,结果显示:所在模块、相关业务、关联单据、上游、下游)④业务对象点击详情(作用、上游、下游、相关模块)。
- **数据与页面分离**:业务数据放 `data/*.json`,HTML åŠ è½½æ¸²æŸ“ï¼Œç¦æ­¢å…¨éƒ¨ç¡¬ç¼–ç â€”â€”ä¸šåŠ¡å˜åŒ–æ—¶åªæ›´æ–° JSON å’Œ mmd。
- é¢œè‰²ï¼šæŒ‰ä¸šåŠ¡çº¿å°‘é‡åŒºåˆ†ï¼ˆåŸºç¡€æ•°æ®/销售/采购/生产/仓储/质量/售后/AI),保持企业级 UI,不过多色彩。
## è‡ªæ£€æ¸…单
- **文件**:index.html、README.md、*.mmd、*.json å…¨éƒ¨å­˜åœ¨ã€‚
- **Mermaid**:语法正确、节点命名可读、流程方向正确、无孤立节点、无明显错误关系。
- **HTML**:语法、CSS、JS、Mermaid åˆå§‹åŒ–、导航切换、搜索、全屏、图表渲染逐项验证(可用浏览器打开实测)。
- **业务准确性 10 é—®**(答不上来 â†’ å›žåˆ°æºç ç»§ç»­åˆ†æžï¼‰ï¼š
  1. é¡¹ç›®åˆ°åº•解决什么问题? 2. æ ¸å¿ƒä¸šåŠ¡æ˜¯ä»€ä¹ˆï¼Ÿ 3. å“ªæ¡æ˜¯ä¸»çº¿ï¼Ÿ 4. é”€å”®å¦‚何影响生产? 5. é‡‡è´­å¦‚何影响库存? 6. ç”Ÿäº§å¦‚何产生库存? 7. è´¨é‡åœ¨å“ªé‡Œä»‹å…¥ï¼Ÿ 8. å”®åŽå¦‚何闭环? 9. AI åœ¨å“ªé‡Œå‚与? 10. æ¨¡å—间如何产生数据关系?
## ç»´æŠ¤æ¨¡å¼
**触发时机**——一次代码变更涉及以下任一内容,若 `docs/project-business/` å·²å­˜åœ¨ï¼Œå¿…须同步维护;若尚不存在,向用户提示可生成,不强制:
- æ–°å¢ž/删除/重命名业务模块
- æ–°å¢ž/变更核心业务对象(DO、单据)
- æµç¨‹æ­¥éª¤æ–°å¢žæˆ–调整(如报工顺序、审批环节、退货联动)
- çŠ¶æ€æžšä¸¾/流转变化
- æ¨¡å—间关系/数据流变化(新增跨模块 API è°ƒç”¨ã€å­—段带入)
- AI èƒ½åŠ›æ–°å¢ž/变更
- è§’色/权限模型变化
**变更 â†’ æ›´æ–°ç›®æ ‡æ˜ å°„**:
| å˜æ›´ç±»åž‹ | æ›´æ–°å¯¹è±¡ |
|----------|----------|
| æ–°æ¨¡å— | modules.json、01 mindmap、08 module-relation、index.html å¯¼èˆª+卡片 |
| æ–°å•据/业务对象 | objects.json、10 business-object、所处链路的 flow mmd |
| æµç¨‹æ­¥éª¤è°ƒæ•´ | å¯¹åº” `NN-*-flow.mmd` + flows.json |
| çŠ¶æ€æµè½¬å˜åŒ– | å¯¹åº” flow mmd + objects.json ä¸­è¯¥å¯¹è±¡çŠ¶æ€æè¿° |
| è·¨æ¨¡å—数据带入/数据流变化 | 09 data-flow |
| AI èƒ½åŠ› | 11 ai-business-flow + business.json `aiCapabilities` |
| è§’色/权限 | roles.json + index.html è§’色权限页 |
**维护原则**:
- å¢žé‡æ›´æ–°ï¼Œåªæ”¹åŠ¨ä¸Žæœ¬æ¬¡å˜æ›´ç›¸å…³çš„æ–‡ä»¶ï¼Œä¸æ— è„‘å…¨é‡é‡ç”Ÿæˆï¼ˆåå·®ç´¯ç§¯è¿‡å¤§æ—¶æ‰å…¨é‡é‡åšï¼‰ã€‚
- æ›´æ–°å†…容必须来自本次变更后的实际代码行为,禁止沿用旧文档臆测。
- æ›´æ–°åŽé’ˆå¯¹å—影响图跑一遍对应自检项。
- âš  ä¿®æ”¹ `mermaid/*.mmd` æˆ– `data/*.json` åŽï¼Œ**必须**运行 `node .claude/skills/project-business-analysis/scripts/sync_index.js` å°†å†…容回写 index.html å†…嵌镜像(file:// åŒå‡»ä¾èµ–镜像;mmd å†…禁止出现 `<` å­—符,用 â†’/小于 ç­‰æ›¿ä»£ï¼‰ã€‚
## æ±‡æŠ¥æ ¼å¼
完成后简短汇报(不要把大量源码分析结果倾倒出来):
```text
生成/更新目录:docs/project-business/(列出本次涉及的文件)
项目定位:xxx
核心业务主线:xxx â†’ xxx â†’ xxx
核心模块:xxx、xxx
AI èƒ½åŠ›ï¼šxxx
发现的【待确认】业务:xxx(单独列出)
```
.claude/skills/project-business-analysis/scripts/sync_index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
#!/usr/bin/env node
// å°† docs/project-business/ ä¸‹çš„ mermaid/*.mmd ä¸Ž data/*.json åŒæ­¥è¿› index.html çš„内嵌镜像块。
// file:// åè®®ä¸‹æµè§ˆå™¨ fetch æœ¬åœ° JSON ä¼šè¢«æ‹¦æˆªï¼Œindex.html å†…嵌一份镜像数据保证双击可开。
// ç»´æŠ¤æµç¨‹ï¼šæ›´æ–° mermaid/*.mmd æˆ– data/*.json åŽè¿è¡Œï¼š
//   node .claude/skills/project-business-analysis/scripts/sync_index.js
'use strict';
const fs = require('fs');
const path = require('path');
const BASE = path.resolve(__dirname, '../../../../docs/project-business');
const HTML = path.join(BASE, 'index.html');
function sync() {
  if (!fs.existsSync(HTML)) {
    console.error(`[sync_index] æ‰¾ä¸åˆ° ${HTML}`);
    process.exit(1);
  }
  let text = fs.readFileSync(HTML, 'utf8');
  // 1) Mermaid é•œåƒ
  let nMmd = 0;
  text = text.replace(
    /(<pre style="display:none" class="mmd-src" data-mmd="([^"]+)">)([\s\S]*?)(<\/pre>)/g,
    (m, open, stem, content, close) => {
      const file = path.join(BASE, 'mermaid', stem + '.mmd');
      if (!fs.existsSync(file)) {
        console.log(`[sync_index] è·³è¿‡ï¼ˆæ–‡ä»¶ç¼ºå¤±ï¼‰: ${stem}.mmd`);
        return m;
      }
      const src = fs.readFileSync(file, 'utf8').trim();
      if (/</.test(src)) {
        throw new Error(`${stem}.mmd å« '<' å­—符,会破坏 HTML é•œåƒå—,请改用 â†’/小于 ç­‰å†™æ³•`);
      }
      nMmd++;
      return open + '\n' + src + '\n' + close;
    }
  );
  // 2) JSON é•œåƒ
  let nJson = 0;
  text = text.replace(
    /(<script type="application\/json" id="data-([^"]+)">)([\s\S]*?)(<\/script>)/g,
    (m, open, key, content, close) => {
      const file = path.join(BASE, 'data', key + '.json');
      if (!fs.existsSync(file)) {
        console.log(`[sync_index] è·³è¿‡ï¼ˆæ–‡ä»¶ç¼ºå¤±ï¼‰: ${key}.json`);
        return m;
      }
      const raw = fs.readFileSync(file, 'utf8');
      JSON.parse(raw); // æ ¡éªŒåˆæ³•性
      nJson++;
      return open + raw.trimEnd() + close;
    }
  );
  fs.writeFileSync(HTML, text, 'utf8');
  console.log(`[sync_index] å®Œæˆï¼šmermaid é•œåƒ ${nMmd} å¤„,JSON é•œåƒ ${nJson} å¤„`);
}
sync();
.playwright-mcp/page-snapshot-2.txt
ÎļþÒÑɾ³ý
.playwright-mcp/page-snapshot.txt
ÎļþÒÑɾ³ý
docs/Claude Code Agent£ºÏîĿҵÎñ·ÖÎö + Mermaid + HTML ¿ÉÊÓ»¯Éú³É Prompt.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1492 @@
# Claude Code Agent:项目业务分析与可视化生成
你现在是一名资深的:
- ä¼ä¸šæ•°å­—化架构师
- ä¸šåŠ¡æµç¨‹åˆ†æžå¸ˆ
- Java架构师
- å‰ç«¯å¯è§†åŒ–工程师
- é¡¹ç›®æ–‡æ¡£å·¥ç¨‹å¸ˆ
你的任务不是简单阅读代码,而是:
> **从当前项目源码中还原真实业务,建立项目业务知识模型,并自动生成 Mermaid ä¸šåŠ¡å›¾å’Œä¸€ä¸ªå¯ä»¥ç›´æŽ¥æµè§ˆçš„ HTML é¡¹ç›®ä¸šåŠ¡å¯è§†åŒ–é¡µé¢ã€‚**
最终目标:
> è®©ä¸€ä¸ªå®Œå…¨ä¸äº†è§£è¿™ä¸ªé¡¹ç›®çš„人,仅通过打开 `index.html`,就能够快速理解这个项目是做什么的、有哪些模块、核心业务怎么流转、模块之间如何协作、数据如何流转。
---
# ä¸€ã€æ‰§è¡ŒåŽŸåˆ™
## 1. å¿…须分析真实源码
优先分析:
```text
后端
├── Controller
├── Service
├── Mapper
├── Entity
├── DTO
├── VO
├── Enum
├── Config
├── Job
└── Utils
数据库
├── å»ºè¡¨SQL
├── å­—段
├── å¤–é”®
├── ç´¢å¼•
└── çŠ¶æ€å­—æ®µ
前端
├── é¡µé¢
├── API
├── è·¯ç”±
├── èœå•
└── æƒé™
系统配置
├── application.yml
├── application-*.yml
├── Docker
├── MQ
├── Redis
├── ç¬¬ä¸‰æ–¹æŽ¥å£
└── AI相关配置
```
不要只看目录名称。
不要根据类名直接猜业务。
---
# äºŒã€è‡ªåŠ¨åˆ¤æ–­é¡¹ç›®ç±»åž‹
首先判断当前项目属于什么类型:
例如:
```text
ERP
MES
MOM
WMS
SRM
CRM
OA
PLM
LIMS
财务系统
供应链系统
制造业数字化平台
综合业务系统
```
如果是混合系统,说明:
```text
系统类型:
主系统:
子系统:
业务定位:
```
---
# ä¸‰ã€å»ºç«‹ä¸šåŠ¡çŸ¥è¯†æ¨¡åž‹
分析项目后,先不要急着生成HTML。
先建立内部业务模型:
```text
项目
│
├── ç³»ç»Ÿå®šä½
│
├── ä¸šåŠ¡æ¨¡å—
│
├── ä¸šåŠ¡å¯¹è±¡
│
├── ä¸šåŠ¡è§’è‰²
│
├── ä¸šåŠ¡æµç¨‹
│
├── å•据
│
├── çŠ¶æ€
│
├── æ•°æ®æµ
│
├── æ¨¡å—关系
│
├── æƒé™å…³ç³»
│
├── ç¬¬ä¸‰æ–¹ç³»ç»Ÿ
│
└── AI能力
```
---
# å››ã€è¯†åˆ«ä¸šåŠ¡æ¨¡å—
不要简单按照 Java package åˆ†ç±»ã€‚
按照业务意义重新归类。
例如:
```text
项目
├── åŸºç¡€æ•°æ®
├── é”€å”®ç®¡ç†
├── é‡‡è´­ç®¡ç†
├── ç”Ÿäº§ç®¡ç†
├── ä»“储管理
├── è´¨é‡ç®¡ç†
├── å”®åŽç®¡ç†
├── è´¢åŠ¡ç®¡ç†
├── OA
├── ç³»ç»Ÿç®¡ç†
└── AI智能助手
```
实际项目有什么就生成什么。
每个模块必须提取:
```text
模块名称
模块定位
解决的问题
核心功能
核心业务对象
主要角色
上游模块
下游模块
核心数据库表
核心业务流程
```
---
# äº”、识别核心业务对象
从:
- Entity
- SQL
- Service
- Controller
- å‰ç«¯é¡µé¢
- çŠ¶æ€å­—æ®µ
- å•据编号
- ä¸šåŠ¡ID
提取真正的业务对象。
例如:
```text
客户
供应商
产品
物料
BOM
工艺
销售订单
采购订单
生产计划
生产任务
库存
质检单
入库单
出库单
售后工单
```
不要把所有技术表都放进去。
只保留真正有业务价值的对象。
---
# å…­ã€è¯†åˆ«ä¸šåŠ¡ä¸»çº¿
重点寻找:
> ä¸€é¡¹ä¸šåŠ¡ä»Žå“ªé‡Œå¼€å§‹ï¼Œç»è¿‡å“ªäº›æ­¥éª¤ï¼Œæœ€åŽäº§ç”Ÿä»€ä¹ˆç»“æžœã€‚
例如:
## é”€å”® â†’ ç”Ÿäº§ â†’ ä»“储 â†’ å‘è´§
```text
客户
 â†“
销售订单
 â†“
是否需要生产
 â†“
生产计划
 â†“
生产任务
 â†“
生产领料
 â†“
生产
 â†“
质量检验
 â†“
完工入库
 â†“
销售发货
 â†“
出库
```
实际项目必须以代码为准。
---
# ä¸ƒã€è¯†åˆ«é‡‡è´­æµç¨‹
例如:
```text
采购需求
 â†“
采购申请
 â†“
审批
 â†“
采购订单
 â†“
供应商送货
 â†“
到货
 â†“
IQC
 â”œâ”€â”€ åˆæ ¼ â†’ å…¥åº“
 â”œâ”€â”€ ä¸åˆæ ¼ â†’ é€€è´§
 â””── ç‰¹é‡‡ â†’ å…¥åº“
```
如果项目存在:
```text
供应商准入
询价
招标
报价
评标
定标
采购订单
到货
IQC
供应商绩效
```
请完整体现。
---
# å…«ã€è¯†åˆ«ç”Ÿäº§æµç¨‹
分析:
```text
生产需求
 â†“
生产计划
 â†“
生产任务
 â†“
BOM
 â†“
工艺路线
 â†“
领料
 â†“
生产
 â†“
报工
 â†“
过程质量
 â†“
完工
 â†“
成品入库
```
如果项目存在:
- APS
- æŽ’产
- å·¥åº
- å·¥ä½œä¸­å¿ƒ
- è®¾å¤‡
-ʌᴾѦ
- æŠ¥å·¥
- ç”Ÿäº§å¼‚常
- çº¿è¾¹ä»“
必须体现。
---
# ä¹ã€è¯†åˆ«è´¨é‡æµç¨‹
例如:
```text
采购到货
 â†“
IQC
 â†“
┌──────────────┐
│              â”‚
合格          ä¸åˆæ ¼
│              â”‚
↓              â†“
入库          é€€è´§/特采
```
同时分析:
```text
IPQC
OQC
不合格品
质量异常
质量判定
检验标准
```
实际存在什么就生成什么。
---
# åã€è¯†åˆ«ä»“储流程
分析:
```text
采购
 â†“
采购入库
生产
 â†“
生产入库
销售
 â†“
销售出库
生产
 â†“
生产领料
库存
 â†“
盘点
 â†“
库存调整
```
如果存在:
- åŽŸææ–™ä»“
- åŠæˆå“ä»“
- æˆå“ä»“
- çº¿è¾¹ä»“
- è™šæ‹Ÿä»“
需要体现。
---
# åä¸€ã€è¯†åˆ«å”®åŽæµç¨‹
如果存在售后业务:
```text
客户反馈
 â†“
售后工单
 â†“
派工
 â†“
处理
 â†“
质量确认
 â†“
客户确认
 â†“
关闭
 â†“
归档
```
如果存在:
```text
转退货
ç»´ä¿®
换货
补发
费用
客户确认
```
也需要体现。
---
# åäºŒã€è¯†åˆ«AI业务能力
如果项目中存在AI代码,重点分析:
```text
AI助手
├── ç”Ÿäº§åŠ©æ‰‹
├── é”€å”®åŠ©æ‰‹
├── é‡‡è´­åŠ©æ‰‹
├── è´¢åŠ¡åŠ©æ‰‹
├── è´¨é‡åŠ©æ‰‹
└── å”®åŽåŠ©æ‰‹
```
重点分析AI到底做了什么。
不要只写:
> ä½¿ç”¨äº†å¤§æ¨¡åž‹ã€‚
需要明确:
```text
用户问题
 â†“
AI
 â†“
知识库 / RAG
 â†“
业务系统查询
 â†“
业务数据
 â†“
AI分析
 â†“
返回结果
```
如果AI可以调用业务接口:
```text
AI
 â†“
Function Calling
 â†“
业务API
 â†“
数据库
 â†“
业务操作
```
必须重点展示。
---
# åä¸‰ã€è¯†åˆ«è§’色
分析:
```text
管理员
销售
采购
生产计划员
生产人员
仓库人员
质量人员
售后人员
财务
管理层
```
实际项目有哪些就生成哪些。
说明:
```text
角色
 â†“
可以操作哪些业务
 â†“
产生什么数据
```
---
# åå››ã€è¯†åˆ«çŠ¶æ€æµè½¬
重点寻找所有:
```text
status
state
type
auditStatus
approvalStatus
checkStatus
orderStatus
```
分析真实状态。
例如:
```text
草稿
 â†“
提交
 â†“
审批
 â†“
审核通过
 â†“
执行中
 â†“
完成
 â†“
关闭
```
以及:
```text
待检
 â†“
合格
 â†“
入库
```
不要自行增加代码不存在的状态。
---
# åäº”、生成 Mermaid æ€ç»´å¯¼å›¾
生成:
```text
docs/project-business/
├── mermaid/
│   â”œâ”€â”€ 01-business-mindmap.mmd
│   â”œâ”€â”€ 02-sales-flow.mmd
│   â”œâ”€â”€ 03-purchase-flow.mmd
│   â”œâ”€â”€ 04-production-flow.mmd
│   â”œâ”€â”€ 05-quality-flow.mmd
│   â”œâ”€â”€ 06-warehouse-flow.mmd
│   â”œâ”€â”€ 07-after-sales-flow.mmd
│   â”œâ”€â”€ 08-module-relation.mmd
│   â”œâ”€â”€ 09-data-flow.mmd
│   â”œâ”€â”€ 10-business-object.mmd
│   â””── 11-ai-business-flow.mmd
```
---
# åå…­ã€Mermaid思维导图
使用 Mermaid `mindmap`。
例如:
```mermaid
mindmap
  root((工厂数字化MOM))
    åŸºç¡€æ•°æ®
      ç‰©æ–™
      äº§å“
      BOM
      å·¥è‰º
      å·¥ä½œä¸­å¿ƒ
    é”€å”®ç®¡ç†
      å®¢æˆ·
      é”€å”®è®¢å•
      å‘è´§
    ç”Ÿäº§ç®¡ç†
      ç”Ÿäº§è®¡åˆ’
      ç”Ÿäº§ä»»åŠ¡
      é¢†æ–™
      æŠ¥å·¥
      å®Œå·¥å…¥åº“
    é‡‡è´­ç®¡ç†
      é‡‡è´­ç”³è¯·
      é‡‡è´­è®¢å•
      åˆ°è´§
      IQC
    ä»“储管理
      å…¥åº“
      å‡ºåº“
      åº“å­˜
      ç›˜ç‚¹
    è´¨é‡ç®¡ç†
      IQC
      IPQC
      OQC
      ä¸åˆæ ¼å“
    å”®åŽç®¡ç†
      å”®åŽå·¥å•
      æ´¾å·¥
      ç»´ä¿®
      å®¢æˆ·ç¡®è®¤
    AI智能助手
      ç”Ÿäº§åŠ©æ‰‹
      é”€å”®åŠ©æ‰‹
      é‡‡è´­åŠ©æ‰‹
      RAG知识库
```
实际内容必须来自项目。
---
# åä¸ƒã€ç”Ÿæˆ Mermaid ä¸šåŠ¡æµç¨‹å›¾
每条核心业务单独生成。
例如:
```mermaid
flowchart TD
    A[销售订单] --> B{是否需要生产}
    B -->|是| C[生产计划]
    C --> D[生产任务]
    D --> E[领料]
    E --> F[生产]
    F --> G[质量检验]
    G --> H[完工入库]
    H --> I[销售发货]
    I --> J[出库]
    B -->|否| K[备货]
    K --> I
```
---
# åå…«ã€ç”Ÿæˆ Mermaid ç³»ç»Ÿå…³ç³»å›¾
使用:
```mermaid
flowchart LR
```
展示:
```text
销售
生产
采购
仓储
质量
售后
财务
OA
AI
```
之间的关系。
---
# åä¹ã€ç”Ÿæˆ Mermaid æ•°æ®å…³ç³»å›¾
使用:
```mermaid
erDiagram
```
但只展示核心业务对象。
不要把几百张技术表全部画出来。
重点:
```text
客户
销售订单
生产计划
生产任务
采购订单
库存
入库
出库
质量检验
售后工单
```
---
# äºŒåã€ç”Ÿæˆ HTML å¯è§†åŒ–页面
这是本任务最重要的部分。
创建:
```text
docs/project-business/index.html
```
要求:
> **这是一个独立可打开的项目业务可视化页面。**
用户可以直接:
```text
双击 index.html
```
打开。
---
# äºŒåä¸€ã€HTML页面整体设计
页面风格:
> **高级企业数字化 / å·¥ä¸šäº’联网 / åˆ¶é€ ä¸šæ•°å­—孪生风格**
但不要做成花里胡哨的炫技页面。
要求:
- æ·±è‰²ç§‘技风
- é«˜çº§
- ç®€æ´
- ä¸“业
- ä¿¡æ¯å¯†åº¦åˆç†
- é€‚合项目汇报
- é€‚合新人培训
- é€‚合客户演示
---
# äºŒåäºŒã€HTML页面结构
页面顶部:
```text
项目名称
项目业务全景
```
下面显示:
```text
项目定位
业务模块数量
核心业务链
核心业务对象
AI能力
```
---
# äºŒåä¸‰ã€HTML左侧导航
左侧:
```text
项目概览
业务全景
核心业务
├── é”€å”®æµç¨‹
├── é‡‡è´­æµç¨‹
├── ç”Ÿäº§æµç¨‹
├── ä»“储流程
├── è´¨é‡æµç¨‹
└── å”®åŽæµç¨‹
系统关系
数据流
业务对象
AI业务
角色权限
```
点击后右侧内容切换。
---
# äºŒåå››ã€é¦–页:业务全景
首页展示:
```text
                    é¡¹ç›®åç§°
        åŸºç¡€æ•°æ® â”€â”€â†’ é”€å”®
            â”‚          â”‚
            â†“          â†“
          é‡‡è´­ â”€â”€â†’ ç”Ÿäº§
            â”‚          â”‚
            â†“          â†“
          ä»“储 â†â”€â”€â”€ è´¨é‡
                       â”‚
                       â†“
                     å”®åŽ
                       â†‘
                       â”‚
                     AI
```
实际项目关系按照分析结果生成。
---
# äºŒåäº”、HTML必须支持Mermaid
使用 Mermaid æ¸²æŸ“图。
可以通过 CDN:
```html
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.esm.min.mjs';
mermaid.initialize({
    startOnLoad: true,
    theme: 'dark'
});
</script>
```
但是:
> å¦‚果当前项目已经存在前端依赖,优先复用项目已有 Mermaid ç‰ˆæœ¬ã€‚
如果是纯HTML,则使用 CDN。
---
# äºŒåå…­ã€äº¤äº’功能
HTML至少支持:
### 1. å·¦ä¾§èœå•切换
点击:
```text
销售流程
```
显示销售流程图。
点击:
```text
生产流程
```
显示生产流程图。
---
### 2. æ¨¡å—卡片
每个业务模块做成卡片。
例如:
```text
┌──────────────────┐
│ ç”Ÿäº§ç®¡ç†          â”‚
│                  â”‚
│ ç”Ÿäº§è®¡åˆ’          â”‚
│ ç”Ÿäº§ä»»åŠ¡          â”‚
│ ç”Ÿäº§é¢†æ–™          â”‚
│ ç”Ÿäº§æŠ¥å·¥          â”‚
│ å®Œå·¥å…¥åº“          â”‚
│                  â”‚
│ æŸ¥çœ‹ä¸šåŠ¡æµç¨‹ â†’    â”‚
└──────────────────┘
```
点击进入对应流程。
---
### 3. Mermaid全屏
每张图提供:
```text
放大
缩小
全屏
```
---
### 4. æœç´¢
提供项目业务搜索:
```text
搜索:
销售订单
生产任务
采购订单
库存
IQC
售后
```
搜索后显示:
```text
所在模块
相关业务
关联单据
上游
下游
```
---
### 5. ä¸šåŠ¡å¯¹è±¡ç‚¹å‡»
点击:
```text
销售订单
```
显示:
```text
业务对象:销售订单
作用:
记录客户销售需求。
上游:
客户
下游:
生产计划
销售发货
相关模块:
销售、生产、仓储
```
---
# äºŒåä¸ƒã€HTML页面目录
最终生成:
```text
docs/project-business/
│
├── index.html
│
├── mermaid/
│   â”œâ”€â”€ 01-business-mindmap.mmd
│   â”œâ”€â”€ 02-sales-flow.mmd
│   â”œâ”€â”€ 03-purchase-flow.mmd
│   â”œâ”€â”€ 04-production-flow.mmd
│   â”œâ”€â”€ 05-quality-flow.mmd
│   â”œâ”€â”€ 06-warehouse-flow.mmd
│   â”œâ”€â”€ 07-after-sales-flow.mmd
│   â”œâ”€â”€ 08-module-relation.mmd
│   â”œâ”€â”€ 09-data-flow.mmd
│   â”œâ”€â”€ 10-business-object.mmd
│   â””── 11-ai-business-flow.mmd
│
├── data/
│   â”œâ”€â”€ business.json
│   â”œâ”€â”€ modules.json
│   â”œâ”€â”€ objects.json
│   â”œâ”€â”€ flows.json
│   â””── roles.json
│
└── README.md
```
---
# äºŒåå…«ã€æ•°æ®ä¸Žé¡µé¢åˆ†ç¦»
不要把所有业务数据全部硬编码在HTML里面。
尽量采用:
```text
business.json
modules.json
objects.json
flows.json
roles.json
```
HTML负责展示。
JSON负责业务数据。
Mermaid负责业务图。
这样以后业务发生变化,只需要重新分析项目并更新数据。
---
# äºŒåä¹ã€business.json结构
例如:
```json
{
  "project": {
    "name": "项目名称",
    "description": "项目描述"
  },
  "modules": [],
  "objects": [],
  "flows": [],
  "roles": [],
  "aiCapabilities": []
}
```
实际内容根据项目生成。
---
# ä¸‰åã€HTML技术要求
优先使用:
```text
HTML5
CSS3
JavaScript
Mermaid
```
不要为了这个页面引入复杂前端工程。
如果可以:
> å°½é‡åšåˆ°å•HTML直接运行。
不要依赖后端接口。
不要要求启动项目。
不要要求安装Node。
不要要求启动Vue。
最终:
```text
双击 index.html
```
即可查看。
---
# ä¸‰åä¸€ã€è§†è§‰è¦æ±‚
整体风格:
```text
企业数字化
工业互联网
制造业
高级
专业
现代
```
要求:
- å“åº”式布局
- å·¦ä¾§å›ºå®šå¯¼èˆª
- é¡¶éƒ¨é¡¹ç›®æ ‡é¢˜
- å¡ç‰‡å¼æ¨¡å—
- Mermaid业务图
- æ¸…晰的信息层级
- é€‚配1920×1080
- å…¼å®¹æ™®é€šç¬”记本屏幕
- æ”¯æŒæ·±è‰²æ¨¡å¼
不要:
- å¤§é‡å‘å…‰
- ç‚«å…‰
- ç²’子特效
- å¤æ‚3D
- æ— æ„ä¹‰åŠ¨ç”»
- è¿‡åº¦æ¸å˜
- èŠ±å“¨èƒŒæ™¯
重点是:
> **让业务逻辑成为视觉中心。**
---
# ä¸‰åäºŒã€ä¸šåŠ¡å…³ç³»é¢œè‰²
可以使用少量颜色区分:
```text
基础数据
销售
采购
生产
仓储
质量
售后
AI
```
但不要颜色过多。
保持企业级UI风格。
---
# ä¸‰åä¸‰ã€è‡ªåŠ¨ç”Ÿæˆé¡¹ç›®README
生成:
```text
docs/project-business/README.md
```
内容:
```text
项目业务分析文档
1. é¡¹ç›®å®šä½
2. ç³»ç»Ÿæ¨¡å—
3. æ ¸å¿ƒä¸šåŠ¡
4. Mermaid图说明
5. HTML使用方法
6. æ•°æ®æ–‡ä»¶è¯´æ˜Ž
7. å¦‚何重新生成
```
---
# ä¸‰åå››ã€è‡ªåŠ¨éªŒè¯
生成完成后必须检查:
## æ–‡ä»¶
确认:
```text
index.html
README.md
*.mmd
*.json
```
全部存在。
---
## Mermaid
检查:
- Mermaid语法
- èŠ‚ç‚¹åç§°
- æµç¨‹æ–¹å‘
- æ˜¯å¦å­˜åœ¨å­¤ç«‹èŠ‚ç‚¹
- æ˜¯å¦å­˜åœ¨æ˜Žæ˜¾é”™è¯¯å…³ç³»
---
## HTML
检查:
- HTML语法
- CSS
- JS
- Mermaid初始化
- å¯¼èˆªåˆ‡æ¢
- æœç´¢
- å…¨å±
- å›¾è¡¨æ˜¾ç¤º
---
# ä¸‰åäº”、业务准确性检查
最终必须重新回答:
```text
1. é¡¹ç›®åˆ°åº•解决什么问题?
2. æ ¸å¿ƒä¸šåŠ¡æ˜¯ä»€ä¹ˆï¼Ÿ
3. å“ªä¸ªä¸šåŠ¡æ˜¯ä¸»çº¿ï¼Ÿ
4. é”€å”®å¦‚何影响生产?
5. é‡‡è´­å¦‚何影响库存?
6. ç”Ÿäº§å¦‚何产生库存?
7. è´¨é‡åœ¨å“ªé‡Œä»‹å…¥ï¼Ÿ
8. å”®åŽå¦‚何形成闭环?
9. AI在哪里参与业务?
10. å„模块之间如何产生数据关系?
```
如果无法回答:
> å›žåˆ°æºç ç»§ç»­åˆ†æžã€‚
---
# ä¸‰åå…­ã€ç¦æ­¢äº‹é¡¹
禁止:
```text
只扫描文件名
只生成Java架构图
只生成数据库ER图
只罗列Controller
只罗列菜单
只罗列功能
```
我要的是:
> **业务理解图,而不是代码结构图。**
---
# ä¸‰åä¸ƒã€æ‰§è¡Œæ¨¡å¼
现在直接开始执行。
不要先问我:
> â€œæ˜¯å¦å¼€å§‹ï¼Ÿâ€
不要等待确认。
按照以下步骤执行:
```text
Step 1
扫描项目
↓
Step 2
识别技术架构
↓
Step 3
识别业务模块
↓
Step 4
识别业务对象
↓
Step 5
识别角色
↓
Step 6
识别核心业务流程
↓
Step 7
识别状态流转
↓
Step 8
识别模块关系
↓
Step 9
识别数据流
↓
Step 10
识别AI业务
↓
Step 11
建立业务知识模型
↓
Step 12
生成Mermaid
↓
Step 13
生成JSON
↓
Step 14
生成HTML
↓
Step 15
自动检查
↓
Step 16
发现问题自动修复
↓
Step 17
最终输出
```
---
# ä¸‰åå…«ã€æœ€ç»ˆæ±‡æŠ¥
任务完成后,不要把大量源码分析结果直接输出。
最终只需要告诉我:
```text
项目业务分析完成。
生成目录:
docs/project-business/
核心文件:
index.html
01-business-mindmap.mmd
02-sales-flow.mmd
03-purchase-flow.mmd
04-production-flow.mmd
05-quality-flow.mmd
06-warehouse-flow.mmd
07-after-sales-flow.mmd
08-module-relation.mmd
09-data-flow.mmd
10-business-object.mmd
11-ai-business-flow.mmd
数据:
business.json
modules.json
objects.json
flows.json
roles.json
HTML:
可直接打开 docs/project-business/index.html æŸ¥çœ‹ã€‚
```
同时给出:
```text
项目定位:
xxx
核心业务主线:
xxx â†’ xxx â†’ xxx â†’ xxx
核心模块:
xxx、xxx、xxx
AI能力:
xxx
发现的待确认业务:
xxx
```
如果存在【待确认】内容,单独列出。
---
# æœ€ç»ˆç›®æ ‡
请记住:
> **不要把项目“画出来”,而是先把项目“理解出来”,然后把理解结果可视化。**
最终成果应该让:
```text
老板
客户
业务人员
项目经理
Java开发
前端开发
运维人员
新员工
```
都可以通过这个HTML页面快速理解项目。
docs/project-business/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
# MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å° Â· é¡¹ç›®ä¸šåŠ¡åˆ†æž
基于真实源码(6 ç»„并行源码走读:MES ç”Ÿäº§è´¨é‡ / MES ä»“储 / ERP / CRM+SRM / å”®åŽ+HRM / AI+BI+MDM+BPM+底座)还原的业务知识模型与可视化,供新人培训、项目汇报、客户演示与开发查档使用。
## 1. é¡¹ç›®å®šä½
- **系统类型**:混合系统(MOM åˆ¶é€ è¿è¥ç®¡ç†ï¼‰
- **业务定位**:离散制造工厂产供销人财物一体化:覆盖『销售接单 â†’ é‡‡è´­/生产 â†’ è´¨æ£€ â†’ ä»“储 â†’ å‘è´§ â†’ å›žæ¬¾ â†’ å”®åŽã€å…¨é“¾è·¯é—­çޝ
- **技术底座**:yudao(ruoyi-vue-pro)二开,Spring Boot + MyBatis + Flowable + Redis + MySQL 8.4 + Milvus + é€šä¹‰åƒé—®ï¼›å‰ç«¯ mom-pro2-before(Vue3)
- **核心主线**:CRM åˆåŒ â†’ ERP é”€å”®è®¢å• â†’ MES ä¸»è®¡åˆ’/工单/报工 â†’ è´¨æ£€ä¸Žä»“储 â†’ é”€å”®å‡ºåº“ â†’ å¼€ç¥¨å›žæ¬¾ â†’ å”®åŽé—­çޝ
## 2. ç›®å½•结构
```text
docs/project-business/
├── index.html      # å¯è§†åŒ–页面:双击直接打开(file:// å³å¯ï¼Œæ— éœ€ä»»ä½•服务)
├── mermaid/        # 11 å¼  Mermaid ä¸šåŠ¡å›¾ï¼ˆæƒå¨æºï¼Œæ”¹è¿™é‡Œï¼‰
├── data/           # ä¸šåŠ¡æ•°æ®ï¼ˆæƒå¨æºï¼Œæ”¹è¿™é‡Œï¼‰
│   â”œâ”€â”€ business.json  # é¡¹ç›®å…ƒä¿¡æ¯/业务十问/AI能力/待确认事项
│   â”œâ”€â”€ modules.json   # 12 ä¸ªä¸šåŠ¡æ¨¡å—å®šä¹‰
│   â”œâ”€â”€ objects.json   # æ ¸å¿ƒä¸šåŠ¡å¯¹è±¡ï¼ˆä½œç”¨/上游/下游/表名)
│   â”œâ”€â”€ flows.json     # 7 æ¡æµç¨‹ï¼ˆæ‘˜è¦+步骤+角色)
│   â””── roles.json     # è§’色权限
└── README.md
```
> âš  `index.html` å†…嵌了 `mermaid/` ä¸Ž `data/` çš„**镜像**(file:// ä¸‹ fetch è¢«æµè§ˆå™¨æ‹¦æˆªï¼Œæ•…内嵌一份)。**修改 .mmd/.json åŽå¿…须同步镜像**:
>
> ```bash
> node .claude/skills/project-business-analysis/scripts/sync_index.js
> ```
## 3. Mermaid å›¾è¯´æ˜Ž
| æ–‡ä»¶ | å†…容 |
|------|------|
| 01-business-mindmap | ä¸šåŠ¡å…¨æ™¯æ€ç»´å¯¼å›¾ï¼ˆæ¨¡å—-能力树) |
| 02-sales-flow | é”€å”®ï¼šçº¿ç´¢â†’客户→商机→报价→合同(BPM)→销售订单→发货出库→开票回款 |
| 03-purchase-flow | é‡‡è´­ï¼šSRM å‡†å…¥/定标→申请(BPM)→订单→到货→IQC→入库/退货→来票→付款 |
| 04-production-flow | ç”Ÿäº§ï¼šé”€å”®è®¢å•→MPS→工单→任务→报工(工序顺序控制)→倒冲/IPQC/产出→完工事件 |
| 05-quality-flow | è´¨é‡ï¼šIQC/IPQC/OQC/RQC å››é—¸å£ + åˆ¤å®šå››æžœ + NCR å¤„置闭环 |
| 06-warehouse-flow | ä»“储:15 ç±»å•据、六元组库存台账、事务流水、调拨/盘点/批次SN/线边库 |
| 07-after-sales-flow | å”®åŽï¼šå·¥å•六态→维修/退货→MES è”动→质检入库退款三回调→关闭 |
| 08-module-relation | æ¨¡å—系统关系(调用与审批回调) |
| 09-data-flow | è·¨æ¨¡å—数据流(单据生成、字段带入、数量回写、事件) |
| 10-business-object | æ ¸å¿ƒä¸šåŠ¡å¯¹è±¡ ER(只含业务对象,非全库表) |
| 11-ai-business-flow | AI ä¸šåŠ¡é“¾è·¯ï¼ˆOCR/质检判定/四类预测/RAG,含 API ä¾èµ–) |
图中状态数字均为源码枚举真实值(如工单 0草稿/1已确认/2完成/3取消;ERP å®¡æ‰¹ 15审批中/20已审核)。
## 4. HTML ä½¿ç”¨æ–¹æ³•
1. èµ„源管理器双击 `index.html`(或浏览器拖入)。Mermaid èµ° CDN æ¸²æŸ“,**首次打开需联网**,之后浏览器有缓存。
2. å·¦ä¾§å¯¼èˆªåˆ‡æ¢é¡µé¢ï¼›é¡¶éƒ¨æœç´¢æ¡†æ”¯æŒæŒ‰åç§°/关键词搜索业务对象、流程、模块、角色,回车点结果直达。
3. æ¯å¼ å›¾å³ä¸Šè§’:-/+缩放、重置、全屏(适合投屏讲解)。
4. æ¦‚览页模块卡片、业务对象表格行均可点击钻取。
## 5. æ•°æ®æ–‡ä»¶è¯´æ˜Ž
- `data/*.json` æ˜¯é¡µé¢æ¸²æŸ“的数据源(页面优先 fetch æœ¬åœ°æ–‡ä»¶ï¼Œfile:// ä¸‹å›žé€€å†…嵌镜像)。
- å­—段结构自解释;新增对象请同时补 `keywords`(供搜索)。
## 6. å¦‚何重新生成 / ç»´æŠ¤
- æœ¬ç›®å½•由项目技能 **project-business-analysis** ç®¡ç†ï¼ˆ`.claude/skills/project-business-analysis/`),并有规则 `.claude/rules/business-visualization-maintenance.md` å¼ºåˆ¶ï¼šä¸šåŠ¡æ¨¡å—/流程/状态/对象/角色/AI å˜æ›´åŽéœ€åŒæ­¥ç»´æŠ¤æœ¬ç›®å½•。
- å¢žé‡ç»´æŠ¤ï¼šæ”¹å¯¹åº”çš„ `mermaid/*.mmd` + `data/*.json` â†’ è¿è¡Œä¸Šé¢çš„ sync è„šæœ¬ â†’ æµè§ˆå™¨éªŒè¯å—影响图。
- å…¨é‡é‡åšï¼ˆåå·®è¿‡å¤§æ—¶ï¼‰ï¼šå¯¹ Claude è¯´ã€Œé‡æ–°ç”Ÿæˆä¸šåŠ¡å…¨æ™¯ã€ï¼ŒæŠ€èƒ½ä¼šé‡æ–°èµ°è¯»æºç å¹¶æŒ‰ç”Ÿæˆæ¨¡å¼é‡å»ºã€‚
- ç”ŸæˆåŸºçº¿ï¼šdev_business @ 87bf4a99,2026-09-10。
## 7. å·²çŸ¥å¾…确认业务
见 `data/business.json` çš„ `pendingConfirm`(页面「待确认事项」栏),要点:仓库类型/合格仓改造未落地、HRM äº¤æŽ¥ expandUserIds å°šæœªè¢«ä¸šåŠ¡æŸ¥è¯¢æŽ¥å…¥ã€å›žæ¬¾ä¸Žæ”¶æ¬¾å•æœªèµ° BPM、财务勾稽回写方法为空、NCR å¤„置不回写源单等。
docs/project-business/data/business.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
{
  "project": {
    "name": "MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å°ï¼ˆmom-pro2)",
    "type": "混合系统",
    "mainSystem": "MOM åˆ¶é€ è¿è¥ç®¡ç†ç³»ç»Ÿ",
    "subSystems": [
      "MES(生产·仓储·质量·设备)",
      "ERP(进销存·财务)",
      "CRM(客户关系)",
      "SRM(供应商关系)",
      "HRM(人力资源)",
      "BPM(Flowable ååŒå®¡æ‰¹ï¼‰",
      "AI(通义千问 + Milvus RAG)",
      "BI(SQL é…ç½®å¼å¤§å±ï¼‰"
    ],
    "description": "基于 yudao(ruoyi-vue-pro)二次开发的制造业一体化数字工厂平台,覆盖『销售接单 â†’ é‡‡è´­/生产 â†’ è´¨æ£€ â†’ ä»“储 â†’ å‘è´§ â†’ å›žæ¬¾ â†’ å”®åŽã€å…¨é“¾è·¯ï¼Œå†…置审批流、主数据、附件、AI è¾…助与 BI é©¾é©¶èˆ±ã€‚",
    "businessPositioning": "让工厂的订单、物料、生产、库存、质量、人员、资金在一个系统内闭环流转,管理层可通过 BI å¤§å±æŽŒæ¡å…¨å±€ã€‚",
    "coreChain": "CRM å•†æœº/合同 â†’ ERP é”€å”®è®¢å• â†’ MES ä¸»ç”Ÿäº§è®¡åˆ’/工单/报工 â†’ MES è´¨æ£€ä¸Žä»“储 â†’ é”€å”®å‡ºåº“发货 â†’ å¼€ç¥¨å›žæ¬¾ â†’ å”®åŽé—­çޝ",
    "techBase": "Spring Boot + MyBatis + Flowable + Redis + Quartz/RocketMQ/Kafka + Milvus å‘量库 + é€šä¹‰åƒé—®",
    "database": "MySQL 8.4,413 å¼ è¡¨ï¼ˆå« system_*、bpm_*、act_* åº•座表与 mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_* ä¸šåŠ¡è¡¨ï¼‰ï¼Œå¤šç§Ÿæˆ·å·²å…³é—­",
    "frontend": "mom-pro2-before(Vue3 ç®¡ç†åŽå°ï¼ŒåŒä»“库存放,只读参考)"
  },
  "stats": {
    "businessModules": 12,
    "coreObjects": 46,
    "documentFlows": 6,
    "approvalListeners": 13,
    "aiCapabilities": 8,
    "wmBillTypes": 15
  },
  "businessAnswers": [
    [
      "项目解决什么问题",
      "离散制造工厂的产供销人财物一体化管理:从客户订单到生产交付、库存资金全链路数字化闭环"
    ],
    [
      "核心业务",
      "销售订单履约(合同→订单→生产→质检→入库→发货→回款)与采购供应(申请→订单→到货→IQC→入库→付款)"
    ],
    [
      "业务主线",
      "CRM åˆåŒ â†’ ERP é”€å”®è®¢å• â†’ MES MPS/工单 â†’ æŠ¥å·¥/IPQC â†’ å®Œå·¥å…¥åº“ â†’ å‘货通知 â†’ é”€å”®å‡ºåº“(OQC) â†’ å¼€ç¥¨ â†’ å›žæ¬¾"
    ],
    [
      "销售如何影响生产",
      "销售订单审批通过后,需生产明细自动创建 MES ä¸»ç”Ÿäº§è®¡åˆ’(MPS),MPS ä¸‹å‘驱动工单与任务"
    ],
    [
      "采购如何影响库存",
      "采购订单『确认收货』生成 MES åˆ°è´§é€šçŸ¥ â†’ IQC åˆæ ¼/特采 â†’ é‡‡è´­å…¥åº“单完成 â†’ åº“存台账 IN äº‹åŠ¡+N"
    ],
    [
      "生产如何产生库存",
      "报工审批通过后自动生成产品产出单入库(质检工序先待检、IPQC åŽæ‹†è¡Œå…¥åº“);倒冲工序按 BOM æ‰£çº¿è¾¹åº“"
    ],
    [
      "质量在哪里介入",
      "四道闸口:IQC(到货/外协入库)、IPQC(报工质检工序)、OQC(销售出库前)、RQC(退料/退货),不合格走 NCR å¤„ç½®"
    ],
    [
      "售后如何闭环",
      "工单判定退货 â†’ é€€è´§ç”³è¯·å®¡æ ¸ â†’ è‡ªåŠ¨å»º MES é”€å”®é€€è´§å• â†’ RQC è´¨æ£€/入库回调 â†’ é€€æ¬¾å›žè°ƒ â†’ å·¥å•完结关闭"
    ],
    [
      "AI åœ¨å“ªé‡Œå‚与",
      "发票/报价 OCR é¢„填、质检结果建议、缺料/时长/风险/交付四类预测;均为『业务组装 Prompt→模型→JSON→人工确认』模式"
    ],
    [
      "模块间数据关系",
      "MDM ä¸»æ•°æ®ç»Ÿä¸€ä¸‹å‘ï¼›CRM↔ERP åˆåŒç”Ÿå•ï¼›ERP↔MES å•据互建与数量回写;BPM äº‹ä»¶å›žè°ƒè§£é”çŠ¶æ€ï¼›HRM äº¤æŽ¥æ‰©å±•数据可见性"
    ]
  ],
  "aiCapabilities": [
    {
      "name": "采购发票 OCR",
      "flow": "上传 blobId â†’ å›¾ç‰‡èµ° chatWithImage è§†è§‰æ¨¡åž‹ / PDF·文本走 chat â†’ è§£æžå‘票号·抬头·供应商·价税合计·税率 â†’ é¢„填采购来票表单",
      "callsApis": [
        "SystemStorageBlobService"
      ]
    },
    {
      "name": "报价单 OCR",
      "flow": "PDF/Word/Excel/图片 â†’ POI/PDFBox/视觉模型 â†’ æŠ¥ä»·å¤´+产品明细 JSON â†’ é¢„填报价单",
      "callsApis": [
        "SystemStorageBlobService"
      ]
    },
    {
      "name": "质检结果智能判定",
      "flow": "质检单+指标结果+缺陷记录 ç»„装 Prompt â†’ chat â†’ å»ºè®®{合格/特采/退货/报废+理由}",
      "callsApis": [
        "MdmItemApi",
        "SrmSupplierApi",
        "CrmCustomerApi"
      ]
    },
    {
      "name": "物料短缺预测",
      "flow": "工单 BOM éœ€æ±‚ vs åº“å­˜(在库-冻结-占用) vs å·²æŠ•æ–™ â†’ chat â†’ é£Žé™©ç­‰çº§+缺口清单",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "生产时长预测",
      "flow": "工序标准工时+设备小时产量+传送倍率 â†’ chat â†’ é¢„测总时长+工序分解",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "生产风险预测",
      "flow": "IPQC ç¼ºé™·çއ+设备保养点检+物料可用率<20%+关键工序 â†’ chat â†’ ç»¼åˆé£Žé™©+因素",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "交付预测",
      "flow": "进度+剩余天数+任务完成状态+客户交期 â†’ chat â†’ èƒ½å¦æŒ‰æ—¶+置信度+延误因素",
      "callsApis": [
        "MdmItemApi",
        "CrmCustomerApi"
      ]
    },
    {
      "name": "RAG çŸ¥è¯†åº“",
      "flow": "文档 â†’ POI/Tika ææ–‡æœ¬ â†’ åˆ‡ç‰‡(800token) â†’ å‘量化入 Milvus â†’ æ£€ç´¢æŽ¥å£(topK3,阈值0.7)【当前无业务模块消费,预留能力】",
      "callsApis": []
    }
  ],
  "pendingConfirm": [
    "仓库类型/合格仓改造:需求称仓库应有 type å­—段(原料/成品/半成品/线边/合格仓),但 MesWmWarehouseDO å½“前无 type å­—段,仅硬编码虚拟线边库,改造似未完成【待确认】",
    "HrmUserHandoverApi.expandUserIds æŽ¥å£å·²å®žçŽ°ï¼Œä½† CRM/ERP/MES æŸ¥è¯¢ã€Žæˆ‘的数据』处均未实际调用,交接可见性功能未真正生效【与项目规则文档存在落差】",
    "回款(crm_receivable)未接 BPM,创建即审批中(10)靠手动更新;合同/开票均已接【待确认是否有意简化】",
    "MES ä»»åŠ¡æš‚åœ pauseTask ä»…允许草稿状态停工,疑似校验逻辑反转 bug",
    "付款单 BPM é©³å›žå›žé€€åˆ° PROCESS(10) è€Œéž REJECT(35),与其他单据不一致",
    "财务勾稽断裂:updatePurchasePrice/updateSalePrice æ–¹æ³•体为空,入库/出库金额不会自动回写收付款",
    "生产入库单(ProductReceipt) ä¸ŽæŠ¥å·¥äº§å‡º(ProductProduce) å¹¶å­˜ï¼Œå­˜åœ¨é‡å¤å…¥åº“风险需业务确认",
    "AI æ¨¡åž‹å·¥åŽ‚ä»…å®žçŽ°é€šä¹‰åƒé—®ï¼ŒDeepSeek/OpenAI/Ollama æžšä¸¾é¢„留未实现",
    "售后退货单 AUDITING(10) çŠ¶æ€æ— å†™å…¥ä»£ç ï¼Œç–‘ä¼¼é¢„ç•™æœªå¯ç”¨",
    "BI å›¾è¡¨ querySql ä»¥å­—符串拼接参数执行(仅单引号转义),存在 SQL æ³¨å…¥é£Žé™©é¢",
    "MesWmSnDO æ–°å¢žçš„ uuid å­—段生成/消费逻辑未在核心 Service ä¸­ç¡®è®¤",
    "转正申请(hrm_regularize_application)、培训证书等仅有 SQL ä¸Žèœå•初始化,Java ä¾§ Service/Controller æœªå®žçް",
    "NCR å¤„置结果(返工/退货)未回写触发源单据,仅台账记录",
    "MPS çŠ¶æ€æžšä¸¾ç‹¬ç«‹ç¼–å·(0/1/2/3),与通用单据常量(0/1/4/5)不一致"
  ],
  "generatedAt": "2026-09-10",
  "analysisBasis": "基于 dev_business åˆ†æ”¯ 87bf4a99 æºç ï¼Œ6 ç»„并行源码走读(MES ç”Ÿäº§è´¨é‡ / MES ä»“储 / ERP / CRM+SRM / å”®åŽ+HRM / AI+BI+MDM+BPM+底座)"
}
docs/project-business/data/flows.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
{
  "flows": [
    {"id": "sales", "name": "销售流程", "mermaid": "mermaid/02-sales-flow.mmd", "color": "#4f9cff",
     "summary": "线索转化客户 â†’ å•†æœºæŽ¨è¿› â†’ æŠ¥ä»·(可AI识别) â†’ åˆåŒ BPM å®¡æ‰¹ â†’ ç”Ÿæˆ ERP é”€å”®è®¢å•并审批 â†’ éœ€ç”Ÿäº§è¡Œè‡ªåŠ¨å»º MPS â†’ å‘货通知 â†’ é”€å”®å‡ºåº“(OQC)回写 â†’ å¼€ç¥¨(BPM) â†’ å›žæ¬¾(先开票校验)。",
     "steps": [
       {"stage": "获客", "action": "线索转化客户、建联系人、立项商机", "roles": ["销售内勤"]},
       {"stage": "报价", "action": "商机赢单后建报价单(AI OCR é¢„å¡«),转合同", "roles": ["销售内勤"]},
       {"stage": "签约", "action": "合同提交 BPM å®¡æ‰¹(可选流程定义),通过=20", "roles": ["销售", "审批人"]},
       {"stage": "接单", "action": "合同一键生成销售订单(XSDD),销售订单再走 BPM;审批通过自动为 needProduction æ˜Žç»†åˆ›å»º MPS", "roles": ["销售", "计划员"]},
       {"stage": "交付", "action": "发货通知审核(占用)→ é”€å”®å‡ºåº“ OQC â†’ å‘运 â†’ å‡ºåº“回写部分/全部出库", "roles": ["仓管", "质检"]},
       {"stage": "回款", "action": "开票 BPM(累计≤合同额) â†’ å›žæ¬¾å¼ºåˆ¶å…ˆå¼€ç¥¨(累计≤合同剩余与开票剩余)", "roles": ["财务", "销售"]}]},
    {"id": "purchase", "name": "采购流程", "mermaid": "mermaid/03-purchase-flow.mmd", "color": "#5fc79e",
     "summary": "SRM å‡†å…¥/定标供源 â†’ é‡‡è´­ç”³è¯· BPM â†’ é‡‡è´­è®¢å• BPM â†’ ç¡®è®¤æ”¶è´§ç”Ÿæˆ MES åˆ°è´§é€šçŸ¥ â†’ IQC(合格/特采入库·退货/报废) â†’ é‡‡è´­å…¥åº“回写订单与申请 â†’ æ¥ç¥¨(AI OCR) â†’ ä»˜æ¬¾å• BPM。",
     "steps": [
       {"stage": "寻源", "action": "供应商准入(BPM)建档;招标完整版或简易比价,定标审批通过自动生成采购订单", "roles": ["采购开发"]},
       {"stage": "申请", "action": "采购申请(CGSQ)提交 BPM,驳回可重置回草稿;通过且有供应商自动生成订单", "roles": ["采购员", "审批人"]},
       {"stage": "下单", "action": "采购订单(CGDD)自动提交 BPM(15→20)", "roles": ["采购员"]},
       {"stage": "收货", "action": "确认收货生成到货通知(0→待质检2/待入库3→4);需检物料自动创建 IQC", "roles": ["仓管", "IQC è´¨æ£€å‘˜"]},
       {"stage": "入库", "action": "IQC åˆæ ¼/特采→采购入库(待上架→待执行→完成)库存+,回写订单 inCount/inStatus ä¸Žç”³è¯·æ˜Žç»†", "roles": ["仓管"]},
       {"stage": "退货", "action": "IQC ä¸åˆæ ¼é€€è´§â†’供应商退货出库(选料锁定到订单行);报废走 NCR", "roles": ["仓管"]},
       {"stage": "付款", "action": "采购来票(FPD, AI OCR, â‰¤è®¢å•总价) â†’ ä»˜æ¬¾å•(FKD å…³è”来票+附件, â‰¤æ¥ç¥¨é‡‘额) BPM å®¡æ‰¹", "roles": ["财务", "审批人"]}]},
    {"id": "production", "name": "生产流程", "mermaid": "mermaid/04-production-flow.mmd", "color": "#e0b34f",
     "summary": "销售订单驱动 MPS â†’ ä¸‹å‘工单 â†’ æŒ‰å·¥è‰ºè·¯çº¿æ‹†å·¥åºä»»åŠ¡ â†’ é¢†æ–™/线边备料 â†’ æŠ¥å·¥(工序顺序硬校验+BPM) â†’ å€’冲消耗/产出入库/IPQC â†’ æœ«é“工序回写进度 â†’ è‡ªåŠ¨å®Œå·¥ â†’ ProductionFinishedEvent å›žå†™é”€å”®è®¢å•。",
     "steps": [
       {"stage": "计划", "action": "MPS åˆ›å»º(手工或销售订单自动)→下发或合并下发为工单", "roles": ["计划员"]},
       {"stage": "派工", "action": "工单确认按工艺路线逐工序生成任务,可指派/暂停/取消", "roles": ["车间主任"]},
       {"stage": "备料", "action": "生产领料单出库或线边虚拟库备料", "roles": ["仓管"]},
       {"stage": "报工", "action": "提交报工:上一道工序未报满直接拦截;启用 BPM èµ°å®¡æ‰¹", "roles": ["操作工"]},
       {"stage": "联动", "action": "审批通过按工序标记: å€’冲→自动物料消耗扣线边库(允许负库存);质检→产出待检行等 IPQC;关键非检→直接产出入库", "roles": ["系统自动"]},
       {"stage": "完工", "action": "仅末道工序回写工单已生产数量,达标自动完成;MPS ç´¯è®¡åˆ¤æ–­å®Œæˆå¹¶å‘事件给销售订单", "roles": ["系统自动"]}]},
    {"id": "quality", "name": "质量流程", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
     "summary": "四道检验闸口(IQC/IPQC/OQC/RQC,二态 0→4) + åˆ¤å®šå››æžœ(合格/特采/退货/报废) + NCR è¯„审处置关闭;AI æä¾›åˆ¤å®šå»ºè®®ï¼›NCR å½“前仅台账不触发返工单。",
     "steps": [
       {"stage": "来料", "action": "到货通知/外协入库→IQC,结论回写推进待入库或触发退货", "roles": ["IQC è´¨æ£€å‘˜"]},
       {"stage": "过程", "action": "报工质检工序产出行→IPQC,合格拆行入库、不合格生成 NCR", "roles": ["IPQC è´¨æ£€å‘˜"]},
       {"stage": "出货", "action": "销售出库提交→OQC,完成后出库单进入待拣货", "roles": ["OQC è´¨æ£€å‘˜"]},
       {"stage": "退货", "action": "退料/销售退货/售后退货→RQC,结论回调单据与售后", "roles": ["RQC è´¨æ£€å‘˜"]},
       {"stage": "不合格", "action": "NCR: å¾…评审→评审→处置(退货/报废/返工/让步接收/降级)→关闭", "roles": ["质量工程师"]}]},
    {"id": "warehouse", "name": "仓储流程", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
     "summary": "15 ç±»å•据驱动库存台账(六元组、四量)变动,全部经事务流水留痕;支持调拨在途、盘点调整、批次/SN è¿½æº¯ã€åº“存占用与四级冻结、线边虚拟库负库存;对外 WmsStockApi ä¾› ERP æ”¶å‘。",
     "steps": [
       {"stage": "入库", "action": "采购入库/生产入库/产出入库/退货入库/外协入库/杂项入库 â†’ IN äº‹åŠ¡ï¼Œæ‰¹æ¬¡æ··æ”¾æ ¡éªŒã€å››çº§å†»ç»“æ ¡éªŒ", "roles": ["仓管"]},
       {"stage": "出库", "action": "销售出库/领料/消耗/外协发料/供应商退货/杂项出库 â†’ OUT äº‹åŠ¡ï¼ŒcheckFlag æŽ§åˆ¶å¯å¦è´Ÿåº“å­˜", "roles": ["仓管", "系统自动"]},
       {"stage": "移库", "action": "内部/外部调拨成对 MOVE äº‹åŠ¡ï¼Œåœ¨é€”æ•°é‡è·Ÿè¸ª", "roles": ["仓管"]},
       {"stage": "盘点", "action": "方案→任务→明细行→结果,盘盈 ADJUST_IN、盘亏 ADJUST_OUT,可冻结与盲盘", "roles": ["盘点员"]},
       {"stage": "追溯", "action": "批次/SN(uuid)/条码(18ç±»)/装箱嵌套支撑正反向追溯", "roles": ["质量", "售后"]}]},
    {"id": "aftersales", "name": "售后流程", "mermaid": "mermaid/07-after-sales-flow.mmd", "color": "#c78bd6",
     "summary": "工单(六态+问题判定) â†’ ç»´ä¿®ä¸‰ç±»åž‹æˆ–退货申请 â†’ å®¡æ ¸è‡ªåŠ¨å»º MES é”€å”®é€€è´§å• â†’ RQC è´¨æ£€/入库/退款三回调逐级推进 â†’ å·¥å•完结关闭。",
     "steps": [
       {"stage": "受理", "action": "人工录入工单(关联客户/订单/合同),分配处理人进入处理中", "roles": ["客服"]},
       {"stage": "判定", "action": "问题判定: ä¸€èˆ¬/ç»´ä¿®/退货,严重度 0-3", "roles": ["售后工程师"]},
       {"stage": "ç»´ä¿®", "action": "现场/返厂/远程维修,费用与结果记录,完成联动工单完结", "roles": ["维修工程师"]},
       {"stage": "退货", "action": "退货申请审核→自动建 MES é”€å”®é€€è´§å•(RQC)→质检/入库回调→退款回调→关闭", "roles": ["售后", "质检", "财务"]}]},
    {"id": "ai", "name": "AI ä¸šåŠ¡æµç¨‹", "mermaid": "mermaid/11-ai-business-flow.mmd", "color": "#56c8d8",
     "summary": "统一模式:业务侧收集上下文(必要时调 MDM/SRM/CRM API å–名称)→组装 Prompt→chat/chatWithImage→解析 JSON→前端预填或建议;无 Function Calling;RAG çŸ¥è¯†åº“已建成但暂无业务消费。",
     "steps": [
       {"stage": "录入提效", "action": "发票 OCR(图片多模态/PDF文本)、报价单 OCR â†’ ç»“构化预填", "roles": ["采购员", "销售"]},
       {"stage": "辅助判定", "action": "质检单+指标+缺陷 â†’ å»ºè®®åˆæ ¼/特采/退货/报废+理由", "roles": ["质检员"]},
       {"stage": "决策预测", "action": "缺料/生产时长/生产风险/交付四类预测供计划排产参考", "roles": ["计划员"]},
       {"stage": "知识检索", "action": "文档→切片→Milvus å‘量→检索接口(预留)", "roles": ["—"]}]}
  ]
}
docs/project-business/data/modules.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
{
  "modules": [
    {"key": "mdm", "name": "基础主数据", "color": "#8a94a6", "tag": "MDM", "flow": null,
     "positioning": "全系统统一口径的主数据权威源",
     "problem": "物料、单位、仓库在 MES/ERP/CRM å¤šå¤„重复定义导致数据打架",
     "features": ["物料与SKU(含批次属性配置12开关)", "物料分类树", "计量单位与换算", "品牌", "仓库主数据(含type字段)", "MES ç‰©æ–™ç» MdmItemSyncApi åå‘同步"],
     "objects": ["物料", "SKU", "计量单位", "仓库"],
     "roles": ["主数据管理员"],
     "upstream": [], "downstream": ["生产", "进销存", "销售", "采购"],
     "coreTables": ["mdm_item", "mdm_item_sku", "mdm_item_category", "mdm_unit_measure", "mdm_brand", "mdm_warehouse"]},
    {"key": "crm", "name": "销售管理(客户关系)", "color": "#4f9cff", "tag": "CRM", "flow": "sales",
     "positioning": "销售前端:从线索到回款的客户经营",
     "problem": "客户资产沉淀、商机转化、合同审批与开票回款管控",
     "features": ["线索转化客户", "公海池与领取上限", "联系人", "商机自定义阶段", "跟进记录", "报价单(AI OCR)", "合同(BPM审批→生成销售订单)", "开票(BPM)→回款(先开票校验)", "回款计划", "销售目标", "数据权限三级(负责人/只读/读写)"],
     "objects": ["线索", "客户", "联系人", "商机", "报价单", "合同", "发票", "回款", "销售目标"],
     "roles": ["销售内勤", "销售经理", "财务(开票回款)"],
     "upstream": ["主数据(物料)"], "downstream": ["进销存(销售订单)", "售后(客户)", "AI(报价OCR)"],
     "coreTables": ["crm_clue", "crm_customer", "crm_contact", "crm_business", "crm_sale_quotation", "crm_contract", "crm_invoice", "crm_receivable", "crm_receivable_plan", "crm_permission"]},
    {"key": "srm", "name": "供应商管理", "color": "#c9a86a", "tag": "SRM", "flow": "purchase",
     "positioning": "供应商全生命周期:准入-资质-寻源-绩效",
     "problem": "供应商合规准入、阳光寻源(招标/比价)与绩效量化",
     "features": ["供应商档案与分类", "准入申请(BPM é‡‡è´­/质量/财务会签)", "资质证书有效期", "招标:公开/邀请/竞谈完整版+比价简易版", "投标·报价·开标·评标·定标", "定标自动生成采购订单", "四维绩效(质量/交付/ä»·æ ¼/服务)"],
     "objects": ["供应商", "准入申请", "资质证书", "招标项目", "投标", "定标", "绩效评价"],
     "roles": ["采购开发", "供应商管理员", "评审专家"],
     "upstream": ["主数据(物料)"], "downstream": ["进销存(采购订单)"],
     "coreTables": ["srm_supplier", "srm_supplier_apply", "srm_supplier_certificate", "srm_tender_project", "srm_tender_bid", "srm_bid_award", "srm_supplier_evaluation"]},
    {"key": "erp", "name": "进销存与财务", "color": "#5fc79e", "tag": "ERP", "flow": "purchase",
     "positioning": "商贸与资金单据中枢,向 MES å‘起实物收发",
     "problem": "采购销售单据审批、来票付款控制、订单执行进度回写",
     "features": ["采购申请(BPM)→订单(自动/手动生成)", "确认收货→MES到货通知", "入库/退货数量状态回写", "采购来票(金额≤订单)", "付款单(必须关联来票·BPM)", "销售订单(BPM·审批通过自动建MPS)", "出库状态回写", "收款单(关联CRM客户)", "结算账户", "AI发票OCR"],
     "objects": ["采购申请", "采购订单", "采购来票", "付款单", "销售订单", "收款单", "结算账户"],
     "roles": ["采购员", "销售员", "出纳", "会计"],
     "upstream": ["CRM(合同)", "SRM(定标)", "主数据"], "downstream": ["生产(MPS)", "仓储(收发)"],
     "coreTables": ["erp_purchase_request", "erp_purchase_order", "erp_purchase_invoice", "erp_finance_payment", "erp_sale_order", "erp_finance_receipt", "erp_account"]},
    {"key": "pro", "name": "生产管理", "color": "#e0b34f", "tag": "MES-PRO", "flow": "production",
     "positioning": "生产执行核心:计划-工单-任务-报工",
     "problem": "订单到车间执行的逐层拆解与过程可控",
     "features": ["MPS主生产计划(可由销售订单自动创建·合并下发)", "工单(按工艺路线自动生成工序任务)", "报工(按工序顺序控制·BPM审批)", "倒冲扣线边库/产出入库", "安灯", "工艺路线·工序·工单BOM", "研发设计项目(PD·审批归档)", "AI å››ç±»é¢„测"],
     "objects": ["MPS", "生产工单", "生产任务", "报工单", "工艺路线", "工单BOM", "设计项目"],
     "roles": ["计划员", "车间主任", "操作工", "工艺员"],
     "upstream": ["进销存(销售订单)"], "downstream": ["仓储(领料/入库)", "质量(IPQC)"],
     "coreTables": ["mes_pro_mps", "mes_pro_work_order", "mes_pro_task", "mes_pro_feedback", "mes_pro_route", "mes_pro_process", "mes_pro_work_order_bom", "mes_pd_project"]},
    {"key": "wm", "name": "仓储管理", "color": "#7e6bd6", "tag": "MES-WM", "flow": "warehouse",
     "positioning": "厂内 WMS:单据驱动的库存账实一致",
     "problem": "多来源出入库、批次/SN è¿½æº¯ã€åº“存精确到库位",
     "features": ["15种出入库单据", "库存台账(物料×仓库×库区×库位×批次×供应商)", "事务流水只读留痕", "调拨成对事务", "盘点(静态/动态·盲盘·盘盈盘亏调整)", "批次/SN/条码/装箱嵌套", "虚拟线边库(允许负库存)", "库存占用(5ç±»)", "四级冻结", "WMS审批配置+BPM", "对外 WmsStockApi/WmsTransactionApi"],
     "objects": ["到货通知", "采购入库", "领料", "完工入库", "销售出库", "发货通知", "销售退货", "供应商退货", "调拨", "盘点", "库存台账", "批次", "SN"],
     "roles": ["仓管员", "拣货员", "盘点员"],
     "upstream": ["采购(收货)", "生产(领退料)", "销售(发货)", "售后(退货)"], "downstream": ["进销存(数量回写)", "财务(成本基础)"],
     "coreTables": ["mes_wm_warehouse", "mes_wm_material_stock", "mes_wm_transaction", "mes_wm_item_receipt", "mes_wm_product_issue", "mes_wm_product_receipt", "mes_wm_product_sales", "mes_wm_return_sales", "mes_wm_transfer", "mes_wm_stock_taking_task", "mes_wm_batch", "mes_wm_sn", "mes_wm_stock_reserve"]},
    {"key": "qc", "name": "质量管理", "color": "#e06c6c", "tag": "MES-QC", "flow": "quality",
     "positioning": "四道检验闸口 + ä¸åˆæ ¼å“é—­çŽ¯å¤„ç½®",
     "problem": "来料/过程/出货/退货检验标准化,不合格可追溯处置",
     "features": ["IQC æ¥æ–™(到货/外协)", "IPQC è¿‡ç¨‹(联动报工)", "OQC å‡ºè´§(联动销售出库)", "RQC é€€è´§(联动退料/售后)", "质检方案·指标·缺陷库", "检测结果:合格/特采/退货/报废", "NCR:评审→处置(退货/报废/返工/让步/降级)→关闭", "AI åˆ¤å®šå»ºè®®"],
     "objects": ["IQC", "IPQC", "OQC", "RQC", "质检方案", "NCR", "缺陷记录"],
     "roles": ["质检员(IQC/IPQC/OQC)", "质量工程师"],
     "upstream": ["仓储(到货)", "生产(报工)", "销售(出库)", "售后(退货)"], "downstream": ["仓储(合格入库/报废出库)", "生产(NCR返工)"],
     "coreTables": ["mes_qc_iqc", "mes_qc_ipqc", "mes_qc_oqc", "mes_qc_rqc", "mes_qc_template", "mes_qc_indicator", "mes_qc_defect", "mes_qc_ncr"]},
    {"key": "dv", "name": "设备与工装排班", "color": "#59a8b8", "tag": "MES-DV/TM/CAL", "flow": null,
     "positioning": "设备资产健康与生产资源保障",
     "problem": "设备点检保养维修可执行、工装状态可控、班组排班有依据",
     "features": ["设备台账(停机/生产中/保养中)", "点检·保养方案与记录", "维修工单(草稿→维修→待验收→已确认)", "计量器具检定", "工装夹具(在库/领用/ç»´ä¿®/报废)", "班组·班次·排班计划·节假日"],
     "objects": ["设备", "点检记录", "维修工单", "工装", "排班计划"],
     "roles": ["设备员", "维修工", "工装管理员", "排班员"],
     "upstream": [], "downstream": ["生产(AI é£Žé™©é¢„测消费设备数据)", "薪酬(排班工时)"],
     "coreTables": ["mes_dv_machinery", "mes_dv_check_plan", "mes_dv_check_record", "mes_dv_repair", "mes_tm_tool", "mes_cal_plan", "mes_cal_team", "mes_cal_shift"]},
    {"key": "aftersales", "name": "售后服务", "color": "#c78bd6", "tag": "AFTER", "flow": "aftersales",
     "positioning": "客户反馈到退货/ç»´ä¿®/退款闭环",
     "problem": "售后工单流转、退货与质检入库退款的跨系统联动",
     "features": ["工单六态(草稿→处理中→待入库→待退款→完结→关闭)", "问题判定(一般/ç»´ä¿®/退货)", "ç»´ä¿®(现场/返厂/远程)", "退货申请→自动建 MES é”€å”®é€€è´§å•", "质检结论/入库/退款三重回调", "行级数据权限四视图"],
     "objects": ["售后工单", "维修记录", "退货申请"],
     "roles": ["客服", "维修工程师", "售后管理员"],
     "upstream": ["CRM(客户)", "ERP(销售订单)"], "downstream": ["仓储(销售退货)", "质量(RQC)", "财务(退款)"],
     "coreTables": ["after_sale_ticket", "after_sale_ticket_item", "after_sale_repair", "after_sale_return", "after_sale_permission"]},
    {"key": "hrm", "name": "人力资源", "color": "#9db85a", "tag": "HRM", "flow": null,
     "positioning": "员工入转调离与考勤薪酬",
     "problem": "人事流程审批化、离职数据不丢(交接)、算薪自动化",
     "features": ["员工档案(入职自动建系统账号)", "请假/加班/调岗/离职 BPM å®¡æ‰¹", "离职交接映射 expandUserIds", "考勤(打卡·规则·排班·补卡审批·月度汇总)", "薪酬(应发-社保公积金-个税-请假扣款·1.5/2/3倍加班费·发放台账)", "培训证书(SQL先行待实现)"],
     "objects": ["员工", "请假单", "离职申请", "交接映射", "考勤记录", "薪酬核算"],
     "roles": ["HR", "部门主管", "员工本人"],
     "upstream": [], "downstream": ["各模块(数据可见性扩展)", "system(账号)"],
     "coreTables": ["hrm_employee", "hrm_leave_application", "hrm_resignation_application", "hrm_user_handover", "hrm_attendance_record", "hrm_salary_calculation", "hrm_salary_payment"]},
    {"key": "bpm", "name": "协同审批", "color": "#e6a23c", "tag": "BPM", "flow": null,
     "positioning": "全系统单据审批中枢(Flowable)",
     "problem": "多模块单据需要灵活可配的多级审批",
     "features": ["BPMN+钉钉风格双设计器", "流程定义部署", "审批事件统一回调(BpmProcessInstanceStatusEvent)", "13个业务监听器", "表单·用户组·抄送·加签"],
     "objects": ["流程模型", "流程实例", "审批任务"],
     "roles": ["审批人(按流程配置)", "流程管理员"],
     "upstream": ["各业务提交审批"], "downstream": ["回调更新各业务单据状态"],
     "coreTables": ["bpm_process_definition_info", "bpm_process_instance", "bpm_task", "act_*", "flowable_*"]},
    {"key": "ai", "name": "AI æ™ºèƒ½", "color": "#56c8d8", "tag": "AI", "flow": "ai",
     "positioning": "单据录入提效与生产决策辅助",
     "problem": "人工录发票/报价慢、质检与排产依赖经验",
     "features": ["chat/chatWithImage åŒé€šé“", "OCR é¢„å¡«(发票/报价)", "质检判定建议", "缺料/时长/风险/交付四类预测", "RAG çŸ¥è¯†åº“(Milvus)", "AI不可用时 fallback äººå·¥"],
     "objects": ["知识库", "AI模型配置", "对话记录"],
     "roles": ["采购员", "销售", "质检员", "计划员"],
     "upstream": ["各业务提供上下文数据"], "downstream": ["结构化JSON建议返回业务侧"],
     "coreTables": ["ai_chat_conversation", "ai_chat_message", "ai_model", "ai_knowledge", "ai_knowledge_document", "ai_knowledge_segment"]}
  ],
  "platform": {
    "name": "系统底座",
    "capabilities": ["JWT+OAuth2 è®¤è¯Â·æ»‘块验证码", "RBAC è§’色-菜单-数据范围(全部/部门/本部门及下级/仅本人/自定义)", "字典", "附件中心(storage-blob æ–‡ä»¶ + storage-attachment æŒ‰ recordType+recordId å¤šæ€å…³è”,全模块强制使用)", "编码规则(各业务自实现 Redis å‰ç¼€+日期+流水)", "Quartz å®šæ—¶ä»»åŠ¡Â·RocketMQ/Kafka/Redis Stream MQ·WebSocket", "多租户已关闭", "实际 system_role ä»… 4 ä¸ªï¼šè¶…级管理员/普通角色/CRM管理员/租户管理员,业务分工靠数据权限而非多角色"],
    "unused": ["im æ¨¡å—(IM/RTC,业务未消费)", "member æ¨¡å—(C端会员,遗留)"]
  }
}
docs/project-business/data/objects.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
{
  "objects": [
    {"name": "物料", "module": "基础主数据", "table": "mdm_item", "doc": "MDM æƒå¨ç‰©æ–™/产品/半成品档案,含 SKU、批次属性、价格、安全库存", "upstream": ["MES ç‰©æ–™åå‘同步"], "downstream": ["报价单", "销售订单", "采购订单", "工单BOM", "库存台账"], "keywords": "物料 äº§å“ åŽŸææ–™ item"},
    {"name": "仓库", "module": "基础主数据", "table": "mdm_warehouse", "doc": "仓库主数据,type: 1原料/2成品/3半成品/4线边;MES è‡ªæœ‰ mes_wm_warehouse æ‰¿è½½åº“区库位", "upstream": [], "downstream": ["库存台账", "出入库单据"], "keywords": "仓库 warehouse åŽŸæ–™ä»“ æˆå“ä»“ çº¿è¾¹ä»“"},
    {"name": "客户", "module": "销售管理", "table": "crm_customer", "doc": "客户主档,公海池/锁定/成交状态,负责人数据权限", "upstream": ["线索"], "downstream": ["联系人", "商机", "报价单", "合同", "售后工单", "收款单"], "keywords": "客户 customer å…¬æµ·"},
    {"name": "线索", "module": "销售管理", "table": "crm_clue", "doc": "原始销售线索,仅一次转化为客户", "upstream": [], "downstream": ["客户"], "keywords": "线索 clue"},
    {"name": "联系人", "module": "销售管理", "table": "crm_contact", "doc": "客户下联系人,与商机多对多", "upstream": ["客户"], "downstream": ["商机"], "keywords": "联系人 contact"},
    {"name": "商机", "module": "销售管理", "table": "crm_business", "doc": "销售机会,DB é…ç½®å¼é˜¶æ®µæŽ¨è¿›ï¼Œç»“束态: èµ¢/输/无效", "upstream": ["客户"], "downstream": ["报价单", "合同"], "keywords": "商机 business èµ¢å• è¾“单 é˜¶æ®µ"},
    {"name": "报价单", "module": "销售管理", "table": "crm_sale_quotation", "doc": "QT编号,选 MDM ç‰©æ–™æŠ¥ä»·ï¼ŒAI OCR å½•入,草稿→已转合同", "upstream": ["商机"], "downstream": ["合同"], "keywords": "报价 quotation QT"},
    {"name": "合同", "module": "销售管理", "table": "crm_contract", "doc": "HT编号,BPM å®¡æ‰¹(0草稿/10审批中/20通过/30驳回/40取消/50作废),通过后可生成销售订单", "upstream": ["报价单"], "downstream": ["销售订单", "回款计划", "开票"], "keywords": "合同 contract å®¡æ‰¹"},
    {"name": "发票", "module": "销售管理", "table": "crm_invoice", "doc": "KP编号,BPM å®¡æ‰¹ï¼Œç´¯è®¡å¼€ç¥¨â‰¤åˆåŒé¢ï¼Œé™„ä»¶å¿…ä¼ ", "upstream": ["合同"], "downstream": ["回款"], "keywords": "开票 å‘票 invoice"},
    {"name": "回款", "module": "销售管理", "table": "crm_receivable", "doc": "HK编号,创建即审批中(手动审核),强制先开票,金额双校验", "upstream": ["合同", "发票"], "downstream": ["收款单(关联)"], "keywords": "回款 æ”¶æ¬¾è®¡åˆ’ receivable"},
    {"name": "销售目标", "module": "销售管理", "table": "crm_sales_target", "doc": "å¹´/å­£/月×个人/部门/产品维度的合同回款等目标", "upstream": [], "downstream": ["业绩统计"], "keywords": "目标 target ä¸šç»©"},
    {"name": "供应商", "module": "供应商管理", "table": "srm_supplier", "doc": "供应商档案:执照/税号/银行/联系人,ERP ä¸Ž MES å…±ç”¨", "upstream": ["准入申请"], "downstream": ["采购订单", "到货通知", "供应商退货", "绩效评价"], "keywords": "供应商 supplier vendor"},
    {"name": "准入申请", "module": "供应商管理", "table": "srm_supplier_apply", "doc": "AP编号,BPM å®¡æ‰¹(采购/质量/财务),通过自动建供应商档案", "upstream": [], "downstream": ["供应商"], "keywords": "准入 ä¾›åº”商申请 apply"},
    {"name": "招标项目", "module": "供应商管理", "table": "srm_tender_project", "doc": "完整版(发布→投标→开标→评标→定标)与简易比价两种模式", "upstream": [], "downstream": ["定标→采购订单"], "keywords": "招标 æŠ•æ ‡ æ¯”ä»· å®šæ ‡ tender å¯»æº"},
    {"name": "采购申请", "module": "进销存", "table": "erp_purchase_request", "doc": "CGSQ编号,BPM å®¡æ‰¹ï¼Œé€šè¿‡åŽæœ‰ä¾›åº”商自动生成订单", "upstream": ["生产缺口(人工)"], "downstream": ["采购订单"], "keywords": "采购申请 è¯·è´­ request"},
    {"name": "采购订单", "module": "进销存", "table": "erp_purchase_order", "doc": "CGDD编号,BPM å®¡æ‰¹(15审批中/20已审核),入库状态:未0部分1全部2", "upstream": ["采购申请", "定标"], "downstream": ["到货通知", "采购来票", "供应商退货(约束物料)"], "keywords": "采购订单 purchase"},
    {"name": "采购来票", "module": "进销存", "table": "erp_purchase_invoice", "doc": "FPD编号,AI OCR é¢„填,累计≤订单总价,付款单的前置", "upstream": ["采购订单"], "downstream": ["付款单"], "keywords": "来票 å‘票 é‡‡è´­å‘票"},
    {"name": "付款单", "module": "财务", "table": "erp_finance_payment", "doc": "FKD编号,必须关联来票+附件,累计≤来票金额,BPM å®¡æ‰¹", "upstream": ["采购来票"], "downstream": ["结算账户"], "keywords": "付款 åº”付 payment"},
    {"name": "收款单", "module": "财务", "table": "erp_finance_receipt", "doc": "SKD编号,关联 CRM å®¢æˆ·æ ¡éªŒï¼Œæ—  BPM(手动审核)", "upstream": ["销售(弱关联)"], "downstream": ["结算账户"], "keywords": "收款 åº”æ”¶ receipt"},
    {"name": "销售订单", "module": "进销存", "table": "erp_sale_order", "doc": "XSDD编号,BPM å®¡æ‰¹ï¼Œéœ€ç”Ÿäº§è¡Œè‡ªåŠ¨å»º MPS,出库状态:未0已预留1部分2全部3,生产完成事件回写", "upstream": ["合同"], "downstream": ["MPS", "发货通知", "销售出库", "售后工单"], "keywords": "销售订单 sale"},
    {"name": "主生产计划", "module": "生产", "table": "mes_pro_mps", "doc": "MPS计划,草稿0→已下发1→完成2/取消3,可合并下发", "upstream": ["销售订单"], "downstream": ["生产工单"], "keywords": "MPS ä¸»è®¡åˆ’ ç”Ÿäº§è®¡åˆ’"},
    {"name": "生产工单", "module": "生产", "table": "mes_pro_work_order", "doc": "草稿0→已确认1→完成2/取消3,确认时按工艺路线生成任务,最后一道工序报工回写已生产数量", "upstream": ["MPS"], "downstream": ["生产任务", "领料", "完工入库"], "keywords": "工单 ç”Ÿäº§å·¥å• work order"},
    {"name": "生产任务", "module": "生产", "table": "mes_pro_task", "doc": "工序粒度,预备0→生产中1→部分2→完成4,可暂停9取消5", "upstream": ["生产工单"], "downstream": ["报工"], "keywords": "任务 task å·¥åº"},
    {"name": "报工单", "module": "生产", "table": "mes_pro_feedback", "doc": "草稿0→审批中2→待检3/完成4,按工序顺序校验(上道工序报满才可报),联动倒冲消耗/产出入库/IPQC", "upstream": ["生产任务"], "downstream": ["产品产出", "物料消耗", "IPQC"], "keywords": "报工 feedback"},
    {"name": "工艺路线", "module": "生产", "table": "mes_pro_route", "doc": "工序顺序+质检/关键/倒冲标记,驱动工单任务与报工规则", "upstream": [], "downstream": ["生产工单"], "keywords": "工艺 è·¯çº¿ route å·¥åº"},
    {"name": "到货通知单", "module": "仓储", "table": "mes_wm_arrival_notice", "doc": "采购订单确认收货生成,草稿0→待质检2→待入库3→完成4", "upstream": ["采购订单"], "downstream": ["IQC", "采购入库"], "keywords": "到货 æ”¶è´§ arrival"},
    {"name": "采购入库单", "module": "仓储", "table": "mes_wm_item_receipt", "doc": "草稿0→待上架2→待执行3→完成4,完成后库存+并回写 ERP inCount/inStatus", "upstream": ["到货通知"], "downstream": ["库存台账", "采购订单(回写)"], "keywords": "采购入库 æ”¶è´§å…¥åº“ receipt"},
    {"name": "生产领料单", "module": "仓储", "table": "mes_wm_product_issue", "doc": "草稿0→待拣货2→待执行3→完成4,库存-", "upstream": ["生产工单"], "downstream": ["库存台账"], "keywords": "领料 issue"},
    {"name": "销售出库单", "module": "仓储", "table": "mes_wm_product_sales", "doc": "发货通知审核后生成,提交→OQC检测→拣货→发运10→待执行3→完成4,回写销售订单出库数与状态", "upstream": ["发货通知", "销售订单"], "downstream": ["库存台账", "OQC"], "keywords": "销售出库 å‘è´§ å‡ºåº“单 sales"},
    {"name": "销售退货单", "module": "仓储", "table": "mes_wm_return_sales", "doc": "草稿→待检验(RQC)→待上架→待入库→完成,售后与手工两来源", "upstream": ["售后退货申请"], "downstream": ["库存台账", "RQC"], "keywords": "销售退货 é€€è´§å…¥åº“"},
    {"name": "供应商退货单", "module": "仓储", "table": "mes_wm_return_vendor", "doc": "IQC ä¸åˆæ ¼é€€è´§å‘起,待拣货→待执行→完成,库存-", "upstream": ["IQC"], "downstream": ["库存台账", "采购订单(returnCount)"], "keywords": "供应商退货 é€€æ–™ é€€è´§ vendor"},
    {"name": "调拨单", "module": "仓储", "table": "mes_wm_transfer", "doc": "内部/外部调拨,成对 MOVE_OUT+MOVE_IN äº‹åŠ¡ï¼Œåœ¨é€”æ•°é‡", "upstream": [], "downstream": ["库存台账"], "keywords": "调拨 ç§»åº“ transfer"},
    {"name": "盘点任务", "module": "仓储", "table": "mes_wm_stock_taking_task", "doc": "静态/动态盘点,行结果:正常/盘盈(ADJUST_IN)/盘亏(ADJUST_OUT),可冻结库存、盲盘", "upstream": ["库存台账"], "downstream": ["库存台账(调整)"], "keywords": "盘点 ç›˜ç›ˆ ç›˜äº stock taking"},
    {"name": "库存台账", "module": "仓储", "table": "mes_wm_material_stock", "doc": "物料×仓库×库区×库位×批次×供应商六元组,数量/冻结/占用/在途四量", "upstream": ["全部入库单"], "downstream": ["全部出库单", "事务流水"], "keywords": "库存 å°è´¦ stock å¯ç”¨é‡"},
    {"name": "批次", "module": "仓储", "table": "mes_wm_batch", "doc": "关联物料/工单/供应商/客户/质量状态;SN ç å«æ‰¹æ¬¡ uuid;条码支持18种业务对象", "upstream": ["入库单据"], "downstream": ["库存台账"], "keywords": "批次 batch SN æ¡ç  è¿½æº¯"},
    {"name": "IQC来料检验", "module": "质量", "table": "mes_qc_iqc", "doc": "到货通知/外协入库触发,草稿0→完成4,结论回写来源单据", "upstream": ["到货通知", "外协入库"], "downstream": ["采购入库", "供应商退货", "NCR"], "keywords": "IQC æ¥æ–™æ£€éªŒ"},
    {"name": "IPQC过程检验", "module": "质量", "table": "mes_qc_ipqc", "doc": "报工质检工序产出行触发,完成回调推进报工与产出入库", "upstream": ["报工"], "downstream": ["产出入库", "NCR"], "keywords": "IPQC è¿‡ç¨‹æ£€éªŒ å·¡æ£€"},
    {"name": "OQC出货检验", "module": "质量", "table": "mes_qc_oqc", "doc": "销售出库提交触发,完成推进出库单待拣货", "upstream": ["销售出库单"], "downstream": ["销售出库单(推进)"], "keywords": "OQC å‡ºè´§æ£€éªŒ å‡ºåŽ‚æ£€éªŒ"},
    {"name": "RQC退货检验", "module": "质量", "table": "mes_qc_rqc", "doc": "生产退料/销售退货/售后退货触发,结论回调售后", "upstream": ["退料", "退货"], "downstream": ["退货入库", "售后回调"], "keywords": "RQC é€€è´§æ£€éªŒ"},
    {"name": "NCR不合格品", "module": "质量", "table": "mes_qc_ncr", "doc": "待评审0→已评审6→已处置7→已关闭8,处置:退货/报废/返工/让步接收/降级", "upstream": ["IQC/IPQC/OQC/RQC"], "downstream": ["退货/报废/返工(台账)"], "keywords": "NCR ä¸åˆæ ¼ å¤„ç½® ç‰¹é‡‡ æŠ¥åºŸ"},
    {"name": "设备", "module": "设备", "table": "mes_dv_machinery", "doc": "台账状态:停机/生产中/保养中;点检·保养·维修工单;AI é£Žé™©é¢„测消费其数据", "upstream": [], "downstream": ["点检", "ç»´ä¿®", "生产风险预测"], "keywords": "设备 ç‚¹æ£€ ä¿å…» ç»´ä¿® machinery"},
    {"name": "售后工单", "module": "售后", "table": "after_sale_ticket", "doc": "草稿0→处理中10→待入库30→待退款40→完结50→关闭60/取消99,判定:一般/ç»´ä¿®/退货", "upstream": ["客户反馈(人工录入)"], "downstream": ["维修记录", "退货申请"], "keywords": "售后 å·¥å• ticket ç»´ä¿®"},
    {"name": "退货申请", "module": "售后", "table": "after_sale_return", "doc": "草稿0→已审核20(自动建MES退货单)→已质检40→已入库50→已退款60→关闭70;类型:退款退货/换货/仅退款", "upstream": ["售后工单"], "downstream": ["销售退货单", "退款"], "keywords": "售后退货 return"},
    {"name": "员工", "module": "人力", "table": "hrm_employee", "doc": "在职1/试用2/离职3,入职自动建系统账号", "upstream": [], "downstream": ["交接映射", "考勤", "薪酬"], "keywords": "员工 å…¥èŒ employee"},
    {"name": "离职交接", "module": "人力", "table": "hrm_user_handover", "doc": "from→to æ˜ å°„,已完成20 åŽ expandUserIds æ‰©å±•交接人可见数据(当前各业务模块尚未实际接入调用)", "upstream": ["离职申请"], "downstream": ["各模块我的数据查询"], "keywords": "交接 ç¦»èŒ handover expandUserIds"},
    {"name": "排班计划", "module": "设备", "table": "mes_cal_plan", "doc": "班组×班次×日期排班,供生产与考勤引用", "upstream": [], "downstream": ["生产任务", "考勤"], "keywords": "排班 ç­ç»„ ç­æ¬¡ æ—¥åކ"}
  ]
}
docs/project-business/data/roles.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
{
  "note": "实际 system_role ä»… 4 ä¸ªæœ‰æ•ˆè§’色(超级管理员/普通角色/CRM管理员/租户管理员)+1 æµ‹è¯•角色;业务分工主要通过『菜单权限 + æ•°æ®æƒé™ï¼ˆè´Ÿè´£äººåˆ¶ï¼‰ã€å®žçŽ°ï¼Œè€Œéžç»†åˆ†è§’è‰²ã€‚ä»¥ä¸‹ä¸šåŠ¡è§’è‰²ç”±å„æ¨¡å—åŠŸèƒ½ä¸Žæ•°æ®æƒé™æ¨¡åž‹æŽ¨å¯¼ã€‚",
  "systemRoles": [
    {"name": "超级管理员", "code": "super_admin", "desc": "代码直返全部菜单"},
    {"name": "普通角色", "code": "common", "desc": "依赖 system_role_menu é…æƒ"},
    {"name": "CRM ç®¡ç†å‘˜", "code": "crm_admin", "desc": "CRM æŸ¥çœ‹å…¨éƒ¨æ•°æ®"},
    {"name": "租户管理员", "code": "tenant_admin", "desc": "多租户已关闭,遗留"}
  ],
  "businessRoles": [
    {"role": "销售内勤/销售", "modules": ["CRM", "ERP"], "operations": ["线索客户商机维护", "报价与合同", "销售订单", "跟进记录"], "data": ["crm_*", "erp_sale_order"], "scope": "负责人(owner)+数据权限三级:只读/读写/负责人;公海池可领取;交接人应可通过 expandUserIds çœ‹åˆ°ç¦»èŒäººæ•°æ®(接口已备、待接入)"},
    {"role": "销售经理", "modules": ["CRM"], "operations": ["商机/合同审批参与", "销售目标制定", "业绩排名漏斗分析"], "data": ["团队数据(下属用户)"], "scope": "AdminUserApi ä¸‹çº§ç”¨æˆ·æ‰©å±•"},
    {"role": "采购员", "modules": ["ERP", "SRM"], "operations": ["采购申请/订单", "确认收货", "来票与付款发起"], "data": ["erp_purchase_*", "srm_*"], "scope": "requestUserId/supplierOwner å½’属"},
    {"role": "采购开发/供应商管理员", "modules": ["SRM"], "operations": ["准入审批流转", "招标比价组织", "绩效评价"], "data": ["srm_supplier_apply", "srm_tender_*"], "scope": "BPM å¤šéƒ¨é—¨ä¼šç­¾(采购/质量/财务)"},
    {"role": "计划员", "modules": ["MES"], "operations": ["MPS ä¸Žå·¥å•", "工艺路线维护", "AI é¢„测参考"], "data": ["mes_pro_*"], "scope": "车间/部门数据范围"},
    {"role": "操作工/班组长", "modules": ["MES"], "operations": ["任务接收", "报工提交(受工序顺序约束)", "安灯"], "data": ["mes_pro_feedback", "mes_pro_task"], "scope": "任务指派人可见"},
    {"role": "仓管员", "modules": ["MES-WM"], "operations": ["15 ç±»å‡ºå…¥åº“单据执行", "调拨", "盘点", "条码装箱"], "data": ["mes_wm_*"], "scope": "仓库维度;WMS å¯æŒ‰ä»“库配置出入库/调拨/盘点是否走 BPM"},
    {"role": "质检员", "modules": ["MES-QC"], "operations": ["IQC/IPQC/OQC/RQC æ£€éªŒ", "NCR è¯„审处置"], "data": ["mes_qc_*"], "scope": "inspectorUserId å½’属"},
    {"role": "设备员/维修工", "modules": ["MES-DV"], "operations": ["点检保养", "维修工单", "工装领用"], "data": ["mes_dv_*", "mes_tm_*"], "scope": "chargeUserId å½’属"},
    {"role": "客服/售后工程师", "modules": ["售后"], "operations": ["工单受理派工", "ç»´ä¿®", "退货申请"], "data": ["after_sale_*"], "scope": "行级数据权限四视图:我负责/我参与/下属负责/全部(aftersales:view-all)"},
    {"role": "财务", "modules": ["ERP", "CRM"], "operations": ["收款单", "付款单", "开票审核", "结算账户"], "data": ["erp_finance_*", "crm_invoice", "crm_receivable"], "scope": "financeUserId å½’属"},
    {"role": "HR", "modules": ["HRM"], "operations": ["员工档案入转调离", "考勤规则排班", "薪酬核算发放", "离职交接"], "data": ["hrm_*"], "scope": "部门范围 dataScope"},
    {"role": "管理层", "modules": ["BI"], "operations": ["查看采购销售/仓库/生产设备/质量/人力五大主题大屏"], "data": ["bi_dashboard"], "scope": "只读"}
  ]
}
docs/project-business/index.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1145 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å° Â· é¡¹ç›®ä¸šåŠ¡å…¨æ™¯</title>
<style>
:root{
  --bg:#0b1220; --bg2:#101a2e; --panel:#131f36; --panel2:#182742;
  --line:#24344f; --text:#dbe4f0; --muted:#8fa1b8;
  --c-base:#8a94a6; --c-sale:#4f9cff; --c-sup:#c9a86a; --c-erp:#5fc79e;
  --c-prod:#e0b34f; --c-wm:#7e6bd6; --c-qc:#e06c6c; --c-dv:#59a8b8;
  --c-as:#c78bd6; --c-hrm:#9db85a; --c-bpm:#e6a23c; --c-ai:#56c8d8; --c-fin:#3ec9a7;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--text);font-family:"Segoe UI","Microsoft YaHei","PingFang SC",sans-serif;font-size:14px;line-height:1.6}
header{position:fixed;top:0;left:0;right:0;height:64px;background:linear-gradient(180deg,#0e1728,#0b1220);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:24px;padding:0 24px;z-index:50}
header .logo{width:30px;height:30px;border-radius:6px;background:linear-gradient(135deg,#2c5cff,#19c2d8);display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:13px}
header h1{font-size:17px;font-weight:600;letter-spacing:.5px}
header .sub{color:var(--muted);font-size:12px}
#globalSearchWrap{margin-left:auto;position:relative;width:280px}
#globalSearch{width:100%;background:var(--bg2);border:1px solid var(--line);color:var(--text);border-radius:6px;padding:7px 12px;font-size:13px;outline:none}
#globalSearch:focus{border-color:#2c5cff}
#searchResult{position:absolute;top:38px;right:0;width:430px;max-height:60vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;display:none;box-shadow:0 12px 40px rgba(0,0,0,.5)}
#searchResult .sr-item{padding:10px 14px;border-bottom:1px solid var(--line);cursor:pointer}
#searchResult .sr-item:hover{background:var(--panel2)}
#searchResult .sr-type{font-size:11px;color:var(--muted)}
#searchResult .sr-meta{font-size:12px;color:var(--muted);margin-top:2px}
nav{position:fixed;top:64px;left:0;bottom:0;width:210px;background:var(--bg2);border-right:1px solid var(--line);padding:14px 0;overflow:auto;z-index:40}
nav .group{color:#5f7188;font-size:11px;padding:12px 18px 4px;letter-spacing:1px}
nav a{display:flex;align-items:center;gap:8px;padding:8px 18px;color:var(--muted);text-decoration:none;font-size:13px;border-left:3px solid transparent;cursor:pointer}
nav a:hover{color:var(--text);background:#152238}
nav a.active{color:#fff;background:#16294a;border-left-color:#2c5cff}
nav a .dot{width:8px;height:8px;border-radius:2px;flex:none}
main{margin:64px 0 0 210px;padding:26px 32px 80px;max-width:1500px}
section.page{display:none}
section.page.on{display:block}
h2.pt{font-size:20px;font-weight:600;margin-bottom:4px}
p.desc{color:var(--muted);margin-bottom:18px;max-width:980px}
.grid{display:grid;gap:14px}
.stats{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.stat b{display:block;font-size:24px;font-weight:700;color:#fff}
.stat span{color:var(--muted);font-size:12px}
.cards{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.card{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acc,#2c5cff);border-radius:10px;padding:16px 18px;cursor:pointer;transition:border-color .15s,transform .15s}
.card:hover{transform:translateY(-2px);border-color:#3a5a8f}
.card h3{font-size:15px;color:#fff;margin-bottom:2px}
.card h3 .tag{font-size:10px;color:var(--acc,#2c5cff);border:1px solid currentColor;padding:1px 6px;border-radius:10px;margin-left:8px;vertical-align:2px}
.card p{color:var(--muted);font-size:12.5px;margin:6px 0}
.card .objs{font-size:12px;color:#a9b8cc}
.pill{display:inline-block;background:#1b2c4a;border:1px solid var(--line);color:#bcd0ea;border-radius:12px;padding:2px 10px;font-size:12px;margin:3px 4px 0 0;cursor:pointer}
.pill:hover{border-color:#3a5a8f;background:#22375c}
.banner{background:linear-gradient(90deg,#12213c,#0f1a2e);border:1px solid var(--line);border-radius:10px;padding:14px 18px;margin-bottom:18px}
.banner .chain{font-size:13.5px;color:#cfe0f5}
.banner .chain b{color:var(--c-prod)}
.fig{background:var(--panel);border:1px solid var(--line);border-radius:10px;margin:14px 0;overflow:hidden}
.fig .bar{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--line);background:#101c31}
.fig .bar .name{font-size:13px;color:#cfe0f5;font-weight:600}
.fig .bar .btns{margin-left:auto;display:flex;gap:6px}
.fig .bar button{background:#1a2a46;border:1px solid var(--line);color:#9fb2ca;font-size:12px;border-radius:5px;padding:3px 10px;cursor:pointer}
.fig .bar button:hover{color:#fff;border-color:#3a5a8f}
.fig .canvas{overflow:auto;padding:16px;background:var(--panel)}
.fig .canvas .stage{transform-origin:top left;transition:transform .15s}
.fig:fullscreen{width:100vw;height:100vh;border-radius:0;background:var(--bg)}
.fig:fullscreen .canvas{height:calc(100vh - 45px)}
.mermaid-wrap svg{max-width:100%}
table.steps{width:100%;border-collapse:collapse;margin:10px 0}
table.steps th{font-size:12px;color:var(--muted);text-align:left;font-weight:600;padding:7px 10px;border-bottom:1px solid var(--line);background:#101c31}
table.steps td{padding:8px 10px;border-bottom:1px solid #1b2a44;vertical-align:top;font-size:13px}
table.steps td.stage{white-space:nowrap;color:var(--acc,#7ea6e8);font-weight:600}
table.steps td.role{white-space:nowrap;color:var(--muted);font-size:12px}
table.data{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden}
table.data th{font-size:12px;color:var(--muted);text-align:left;padding:9px 12px;background:#101c31;border-bottom:1px solid var(--line)}
table.data td{padding:9px 12px;border-bottom:1px solid #1a2942;font-size:13px;vertical-align:top}
table.data tr:hover td{background:#16243c;cursor:pointer}
.detail{background:var(--panel2);border:1px solid #2c4468;border-radius:10px;padding:16px 20px;margin:12px 0}
.detail h4{color:#fff;margin-bottom:8px}
.detail .kv{margin:4px 0;font-size:13px}
.detail .kv b{color:var(--muted);font-weight:600;margin-right:8px}
.muted{color:var(--muted)} .small{font-size:12px}
#objDetail:empty{display:none}
h3.sec{font-size:15px;color:#cfe0f5;margin:26px 0 10px;padding-left:10px;border-left:3px solid #2c5cff}
footer{position:fixed;bottom:0;left:210px;right:0;background:#0d1526ee;border-top:1px solid var(--line);padding:8px 32px;color:#5f7188;font-size:12px;z-index:30}
.warn li{margin-left:18px;padding:3px 0;font-size:13px;color:#d9c4a0}
@media (max-width:1100px){nav{width:170px}main,footer{margin-left:0}}
</style>
</head>
<body>
<header>
  <div class="logo">MOM</div>
  <div>
    <h1 id="hProject">项目业务全景</h1>
    <div class="sub" id="hSub"></div>
  </div>
  <div id="globalSearchWrap">
    <input id="globalSearch" placeholder="搜索业务:销售订单 / å·¥å• / IQC / åº“å­˜ / å›žæ¬¾â€¦" autocomplete="off">
    <div id="searchResult"></div>
  </div>
</header>
<nav id="nav">
  <div class="group">总览</div>
  <a data-t="overview" class="active"><span class="dot" style="background:#2c5cff"></span>项目概览</a>
  <a data-t="panorama"><span class="dot" style="background:#56c8d8"></span>业务全景图</a>
  <div class="group">核心业务流程</div>
  <a data-t="flow-sales"><span class="dot" style="background:var(--c-sale)"></span>销售流程</a>
  <a data-t="flow-purchase"><span class="dot" style="background:var(--c-erp)"></span>采购流程</a>
  <a data-t="flow-production"><span class="dot" style="background:var(--c-prod)"></span>生产流程</a>
  <a data-t="flow-quality"><span class="dot" style="background:var(--c-qc)"></span>质量流程</a>
  <a data-t="flow-warehouse"><span class="dot" style="background:var(--c-wm)"></span>仓储流程</a>
  <a data-t="flow-aftersales"><span class="dot" style="background:var(--c-as)"></span>售后流程</a>
  <div class="group">结构与数据</div>
  <a data-t="relation"><span class="dot" style="background:var(--c-bpm)"></span>系统关系</a>
  <a data-t="dataflow"><span class="dot" style="background:var(--c-fin)"></span>数据流</a>
  <a data-t="objects"><span class="dot" style="background:var(--c-base)"></span>业务对象</a>
  <a data-t="roles"><span class="dot" style="background:var(--c-hrm)"></span>角色权限</a>
  <div class="group">扩展</div>
  <a data-t="ai"><span class="dot" style="background:var(--c-ai)"></span>AI ä¸šåŠ¡</a>
  <a data-t="pending"><span class="dot" style="background:var(--c-sup)"></span>待确认事项</a>
</nav>
<main>
<section class="page on" id="overview"></section>
<section class="page" id="panorama">
  <h2 class="pt">业务全景图</h2>
  <p class="desc">按业务意义(而非代码包结构)归类的模块-能力思维导图。</p>
  <div class="fig" data-fig="01-business-mindmap">
    <div class="bar"><span class="name">业务全景思维导图</span><div class="btns"><button data-z="-">-</button><button data-z="+">+</button><button data-z="0">重置</button><button data-fs>全屏</button></div></div>
    <div class="canvas"><div class="stage mermaid-wrap"><pre class="mermaid" data-mmd="01-business-mindmap"></pre></div></div>
  </div>
</section>
<section class="page" id="flow-sales"></section>
<section class="page" id="flow-purchase"></section>
<section class="page" id="flow-production"></section>
<section class="page" id="flow-quality"></section>
<section class="page" id="flow-warehouse"></section>
<section class="page" id="flow-aftersales"></section>
<section class="page" id="relation">
  <h2 class="pt">系统关系</h2>
  <p class="desc">模块之间的调用与数据依赖:实线=单据/数据流向,虚线=审批回调与辅助能力。</p>
  <div class="fig" data-fig="08-module-relation">
    <div class="bar"><span class="name">模块系统关系</span><div class="btns"><button data-z="-">-</button><button data-z="+">+</button><button data-z="0">重置</button><button data-fs>全屏</button></div></div>
    <div class="canvas"><div class="stage mermaid-wrap"><pre class="mermaid" data-mmd="08-module-relation"></pre></div></div>
  </div>
</section>
<section class="page" id="dataflow">
  <h2 class="pt">数据流</h2>
  <p class="desc">跨模块单据的生成与回写关系(字段带入、数量状态回写、事件通知)。</p>
  <div class="fig" data-fig="09-data-flow">
    <div class="bar"><span class="name">跨模块数据流</span><div class="btns"><button data-z="-">-</button><button data-z="+">+</button><button data-z="0">重置</button><button data-fs>全屏</button></div></div>
    <div class="canvas"><div class="stage mermaid-wrap"><pre class="mermaid" data-mmd="09-data-flow"></pre></div></div>
  </div>
</section>
<section class="page" id="objects">
  <h2 class="pt">核心业务对象</h2>
  <p class="desc">点击对象行查看作用、上游、下游与数据表。对象关系见文末 ER å›¾ï¼ˆä»…核心业务对象)。</p>
  <div class="grid" id="objGrid" style="grid-template-columns:1fr"></div>
  <div id="objDetail" class="detail"></div>
  <h3 class="sec">对象关系图(ER)</h3>
  <div class="fig" data-fig="10-business-object">
    <div class="bar"><span class="name">核心业务对象关系</span><div class="btns"><button data-z="-">-</button><button data-z="+">+</button><button data-z="0">重置</button><button data-fs>全屏</button></div></div>
    <div class="canvas"><div class="stage mermaid-wrap"><pre class="mermaid" data-mmd="10-business-object"></pre></div></div>
  </div>
</section>
<section class="page" id="roles"></section>
<section class="page" id="ai">
  <h2 class="pt">AI ä¸šåŠ¡</h2>
  <p class="desc">项目 AI ç»Ÿä¸€é‡‡ç”¨ã€Œä¸šåŠ¡ä¾§ç»„è£… Prompt â†’ æ¨¡åž‹ â†’ ç»“构化 JSON â†’ äººå·¥ç¡®è®¤ã€æ¨¡å¼ï¼Œæ—  Function Calling;AI ä¸å¯ç”¨æ—¶å„功能回退人工。</p>
  <div class="grid cards" id="aiGrid"></div>
</section>
<section class="page" id="pending">
  <h2 class="pt">待确认事项</h2>
  <p class="desc">源码走读中发现与文档/预期不一致、疑似未完成或需业务确认的点,均标注了出处行为。</p>
  <ul class="warn" id="pendingList"></ul>
</section>
</main>
<footer id="footer"></footer>
<script type="application/json" id="data-business">{
  "project": {
    "name": "MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å°ï¼ˆmom-pro2)",
    "type": "混合系统",
    "mainSystem": "MOM åˆ¶é€ è¿è¥ç®¡ç†ç³»ç»Ÿ",
    "subSystems": [
      "MES(生产·仓储·质量·设备)",
      "ERP(进销存·财务)",
      "CRM(客户关系)",
      "SRM(供应商关系)",
      "HRM(人力资源)",
      "BPM(Flowable ååŒå®¡æ‰¹ï¼‰",
      "AI(通义千问 + Milvus RAG)",
      "BI(SQL é…ç½®å¼å¤§å±ï¼‰"
    ],
    "description": "基于 yudao(ruoyi-vue-pro)二次开发的制造业一体化数字工厂平台,覆盖『销售接单 â†’ é‡‡è´­/生产 â†’ è´¨æ£€ â†’ ä»“储 â†’ å‘è´§ â†’ å›žæ¬¾ â†’ å”®åŽã€å…¨é“¾è·¯ï¼Œå†…置审批流、主数据、附件、AI è¾…助与 BI é©¾é©¶èˆ±ã€‚",
    "businessPositioning": "让工厂的订单、物料、生产、库存、质量、人员、资金在一个系统内闭环流转,管理层可通过 BI å¤§å±æŽŒæ¡å…¨å±€ã€‚",
    "coreChain": "CRM å•†æœº/合同 â†’ ERP é”€å”®è®¢å• â†’ MES ä¸»ç”Ÿäº§è®¡åˆ’/工单/报工 â†’ MES è´¨æ£€ä¸Žä»“储 â†’ é”€å”®å‡ºåº“发货 â†’ å¼€ç¥¨å›žæ¬¾ â†’ å”®åŽé—­çޝ",
    "techBase": "Spring Boot + MyBatis + Flowable + Redis + Quartz/RocketMQ/Kafka + Milvus å‘量库 + é€šä¹‰åƒé—®",
    "database": "MySQL 8.4,413 å¼ è¡¨ï¼ˆå« system_*、bpm_*、act_* åº•座表与 mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_* ä¸šåŠ¡è¡¨ï¼‰ï¼Œå¤šç§Ÿæˆ·å·²å…³é—­",
    "frontend": "mom-pro2-before(Vue3 ç®¡ç†åŽå°ï¼ŒåŒä»“库存放,只读参考)"
  },
  "stats": {
    "businessModules": 12,
    "coreObjects": 46,
    "documentFlows": 6,
    "approvalListeners": 13,
    "aiCapabilities": 8,
    "wmBillTypes": 15
  },
  "businessAnswers": [
    [
      "项目解决什么问题",
      "离散制造工厂的产供销人财物一体化管理:从客户订单到生产交付、库存资金全链路数字化闭环"
    ],
    [
      "核心业务",
      "销售订单履约(合同→订单→生产→质检→入库→发货→回款)与采购供应(申请→订单→到货→IQC→入库→付款)"
    ],
    [
      "业务主线",
      "CRM åˆåŒ â†’ ERP é”€å”®è®¢å• â†’ MES MPS/工单 â†’ æŠ¥å·¥/IPQC â†’ å®Œå·¥å…¥åº“ â†’ å‘货通知 â†’ é”€å”®å‡ºåº“(OQC) â†’ å¼€ç¥¨ â†’ å›žæ¬¾"
    ],
    [
      "销售如何影响生产",
      "销售订单审批通过后,需生产明细自动创建 MES ä¸»ç”Ÿäº§è®¡åˆ’(MPS),MPS ä¸‹å‘驱动工单与任务"
    ],
    [
      "采购如何影响库存",
      "采购订单『确认收货』生成 MES åˆ°è´§é€šçŸ¥ â†’ IQC åˆæ ¼/特采 â†’ é‡‡è´­å…¥åº“单完成 â†’ åº“存台账 IN äº‹åŠ¡+N"
    ],
    [
      "生产如何产生库存",
      "报工审批通过后自动生成产品产出单入库(质检工序先待检、IPQC åŽæ‹†è¡Œå…¥åº“);倒冲工序按 BOM æ‰£çº¿è¾¹åº“"
    ],
    [
      "质量在哪里介入",
      "四道闸口:IQC(到货/外协入库)、IPQC(报工质检工序)、OQC(销售出库前)、RQC(退料/退货),不合格走 NCR å¤„ç½®"
    ],
    [
      "售后如何闭环",
      "工单判定退货 â†’ é€€è´§ç”³è¯·å®¡æ ¸ â†’ è‡ªåŠ¨å»º MES é”€å”®é€€è´§å• â†’ RQC è´¨æ£€/入库回调 â†’ é€€æ¬¾å›žè°ƒ â†’ å·¥å•完结关闭"
    ],
    [
      "AI åœ¨å“ªé‡Œå‚与",
      "发票/报价 OCR é¢„填、质检结果建议、缺料/时长/风险/交付四类预测;均为『业务组装 Prompt→模型→JSON→人工确认』模式"
    ],
    [
      "模块间数据关系",
      "MDM ä¸»æ•°æ®ç»Ÿä¸€ä¸‹å‘ï¼›CRM↔ERP åˆåŒç”Ÿå•ï¼›ERP↔MES å•据互建与数量回写;BPM äº‹ä»¶å›žè°ƒè§£é”çŠ¶æ€ï¼›HRM äº¤æŽ¥æ‰©å±•数据可见性"
    ]
  ],
  "aiCapabilities": [
    {
      "name": "采购发票 OCR",
      "flow": "上传 blobId â†’ å›¾ç‰‡èµ° chatWithImage è§†è§‰æ¨¡åž‹ / PDF·文本走 chat â†’ è§£æžå‘票号·抬头·供应商·价税合计·税率 â†’ é¢„填采购来票表单",
      "callsApis": [
        "SystemStorageBlobService"
      ]
    },
    {
      "name": "报价单 OCR",
      "flow": "PDF/Word/Excel/图片 â†’ POI/PDFBox/视觉模型 â†’ æŠ¥ä»·å¤´+产品明细 JSON â†’ é¢„填报价单",
      "callsApis": [
        "SystemStorageBlobService"
      ]
    },
    {
      "name": "质检结果智能判定",
      "flow": "质检单+指标结果+缺陷记录 ç»„装 Prompt â†’ chat â†’ å»ºè®®{合格/特采/退货/报废+理由}",
      "callsApis": [
        "MdmItemApi",
        "SrmSupplierApi",
        "CrmCustomerApi"
      ]
    },
    {
      "name": "物料短缺预测",
      "flow": "工单 BOM éœ€æ±‚ vs åº“å­˜(在库-冻结-占用) vs å·²æŠ•æ–™ â†’ chat â†’ é£Žé™©ç­‰çº§+缺口清单",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "生产时长预测",
      "flow": "工序标准工时+设备小时产量+传送倍率 â†’ chat â†’ é¢„测总时长+工序分解",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "生产风险预测",
      "flow": "IPQC ç¼ºé™·çއ+设备保养点检+物料可用率<20%+关键工序 â†’ chat â†’ ç»¼åˆé£Žé™©+因素",
      "callsApis": [
        "MdmItemApi"
      ]
    },
    {
      "name": "交付预测",
      "flow": "进度+剩余天数+任务完成状态+客户交期 â†’ chat â†’ èƒ½å¦æŒ‰æ—¶+置信度+延误因素",
      "callsApis": [
        "MdmItemApi",
        "CrmCustomerApi"
      ]
    },
    {
      "name": "RAG çŸ¥è¯†åº“",
      "flow": "文档 â†’ POI/Tika ææ–‡æœ¬ â†’ åˆ‡ç‰‡(800token) â†’ å‘量化入 Milvus â†’ æ£€ç´¢æŽ¥å£(topK3,阈值0.7)【当前无业务模块消费,预留能力】",
      "callsApis": []
    }
  ],
  "pendingConfirm": [
    "仓库类型/合格仓改造:需求称仓库应有 type å­—段(原料/成品/半成品/线边/合格仓),但 MesWmWarehouseDO å½“前无 type å­—段,仅硬编码虚拟线边库,改造似未完成【待确认】",
    "HrmUserHandoverApi.expandUserIds æŽ¥å£å·²å®žçŽ°ï¼Œä½† CRM/ERP/MES æŸ¥è¯¢ã€Žæˆ‘的数据』处均未实际调用,交接可见性功能未真正生效【与项目规则文档存在落差】",
    "回款(crm_receivable)未接 BPM,创建即审批中(10)靠手动更新;合同/开票均已接【待确认是否有意简化】",
    "MES ä»»åŠ¡æš‚åœ pauseTask ä»…允许草稿状态停工,疑似校验逻辑反转 bug",
    "付款单 BPM é©³å›žå›žé€€åˆ° PROCESS(10) è€Œéž REJECT(35),与其他单据不一致",
    "财务勾稽断裂:updatePurchasePrice/updateSalePrice æ–¹æ³•体为空,入库/出库金额不会自动回写收付款",
    "生产入库单(ProductReceipt) ä¸ŽæŠ¥å·¥äº§å‡º(ProductProduce) å¹¶å­˜ï¼Œå­˜åœ¨é‡å¤å…¥åº“风险需业务确认",
    "AI æ¨¡åž‹å·¥åŽ‚ä»…å®žçŽ°é€šä¹‰åƒé—®ï¼ŒDeepSeek/OpenAI/Ollama æžšä¸¾é¢„留未实现",
    "售后退货单 AUDITING(10) çŠ¶æ€æ— å†™å…¥ä»£ç ï¼Œç–‘ä¼¼é¢„ç•™æœªå¯ç”¨",
    "BI å›¾è¡¨ querySql ä»¥å­—符串拼接参数执行(仅单引号转义),存在 SQL æ³¨å…¥é£Žé™©é¢",
    "MesWmSnDO æ–°å¢žçš„ uuid å­—段生成/消费逻辑未在核心 Service ä¸­ç¡®è®¤",
    "转正申请(hrm_regularize_application)、培训证书等仅有 SQL ä¸Žèœå•初始化,Java ä¾§ Service/Controller æœªå®žçް",
    "NCR å¤„置结果(返工/退货)未回写触发源单据,仅台账记录",
    "MPS çŠ¶æ€æžšä¸¾ç‹¬ç«‹ç¼–å·(0/1/2/3),与通用单据常量(0/1/4/5)不一致"
  ],
  "generatedAt": "2026-09-10",
  "analysisBasis": "基于 dev_business åˆ†æ”¯ 87bf4a99 æºç ï¼Œ6 ç»„并行源码走读(MES ç”Ÿäº§è´¨é‡ / MES ä»“储 / ERP / CRM+SRM / å”®åŽ+HRM / AI+BI+MDM+BPM+底座)"
}</script>
<script type="application/json" id="data-modules">{
  "modules": [
    {"key": "mdm", "name": "基础主数据", "color": "#8a94a6", "tag": "MDM", "flow": null,
     "positioning": "全系统统一口径的主数据权威源",
     "problem": "物料、单位、仓库在 MES/ERP/CRM å¤šå¤„重复定义导致数据打架",
     "features": ["物料与SKU(含批次属性配置12开关)", "物料分类树", "计量单位与换算", "品牌", "仓库主数据(含type字段)", "MES ç‰©æ–™ç» MdmItemSyncApi åå‘同步"],
     "objects": ["物料", "SKU", "计量单位", "仓库"],
     "roles": ["主数据管理员"],
     "upstream": [], "downstream": ["生产", "进销存", "销售", "采购"],
     "coreTables": ["mdm_item", "mdm_item_sku", "mdm_item_category", "mdm_unit_measure", "mdm_brand", "mdm_warehouse"]},
    {"key": "crm", "name": "销售管理(客户关系)", "color": "#4f9cff", "tag": "CRM", "flow": "sales",
     "positioning": "销售前端:从线索到回款的客户经营",
     "problem": "客户资产沉淀、商机转化、合同审批与开票回款管控",
     "features": ["线索转化客户", "公海池与领取上限", "联系人", "商机自定义阶段", "跟进记录", "报价单(AI OCR)", "合同(BPM审批→生成销售订单)", "开票(BPM)→回款(先开票校验)", "回款计划", "销售目标", "数据权限三级(负责人/只读/读写)"],
     "objects": ["线索", "客户", "联系人", "商机", "报价单", "合同", "发票", "回款", "销售目标"],
     "roles": ["销售内勤", "销售经理", "财务(开票回款)"],
     "upstream": ["主数据(物料)"], "downstream": ["进销存(销售订单)", "售后(客户)", "AI(报价OCR)"],
     "coreTables": ["crm_clue", "crm_customer", "crm_contact", "crm_business", "crm_sale_quotation", "crm_contract", "crm_invoice", "crm_receivable", "crm_receivable_plan", "crm_permission"]},
    {"key": "srm", "name": "供应商管理", "color": "#c9a86a", "tag": "SRM", "flow": "purchase",
     "positioning": "供应商全生命周期:准入-资质-寻源-绩效",
     "problem": "供应商合规准入、阳光寻源(招标/比价)与绩效量化",
     "features": ["供应商档案与分类", "准入申请(BPM é‡‡è´­/质量/财务会签)", "资质证书有效期", "招标:公开/邀请/竞谈完整版+比价简易版", "投标·报价·开标·评标·定标", "定标自动生成采购订单", "四维绩效(质量/交付/ä»·æ ¼/服务)"],
     "objects": ["供应商", "准入申请", "资质证书", "招标项目", "投标", "定标", "绩效评价"],
     "roles": ["采购开发", "供应商管理员", "评审专家"],
     "upstream": ["主数据(物料)"], "downstream": ["进销存(采购订单)"],
     "coreTables": ["srm_supplier", "srm_supplier_apply", "srm_supplier_certificate", "srm_tender_project", "srm_tender_bid", "srm_bid_award", "srm_supplier_evaluation"]},
    {"key": "erp", "name": "进销存与财务", "color": "#5fc79e", "tag": "ERP", "flow": "purchase",
     "positioning": "商贸与资金单据中枢,向 MES å‘起实物收发",
     "problem": "采购销售单据审批、来票付款控制、订单执行进度回写",
     "features": ["采购申请(BPM)→订单(自动/手动生成)", "确认收货→MES到货通知", "入库/退货数量状态回写", "采购来票(金额≤订单)", "付款单(必须关联来票·BPM)", "销售订单(BPM·审批通过自动建MPS)", "出库状态回写", "收款单(关联CRM客户)", "结算账户", "AI发票OCR"],
     "objects": ["采购申请", "采购订单", "采购来票", "付款单", "销售订单", "收款单", "结算账户"],
     "roles": ["采购员", "销售员", "出纳", "会计"],
     "upstream": ["CRM(合同)", "SRM(定标)", "主数据"], "downstream": ["生产(MPS)", "仓储(收发)"],
     "coreTables": ["erp_purchase_request", "erp_purchase_order", "erp_purchase_invoice", "erp_finance_payment", "erp_sale_order", "erp_finance_receipt", "erp_account"]},
    {"key": "pro", "name": "生产管理", "color": "#e0b34f", "tag": "MES-PRO", "flow": "production",
     "positioning": "生产执行核心:计划-工单-任务-报工",
     "problem": "订单到车间执行的逐层拆解与过程可控",
     "features": ["MPS主生产计划(可由销售订单自动创建·合并下发)", "工单(按工艺路线自动生成工序任务)", "报工(按工序顺序控制·BPM审批)", "倒冲扣线边库/产出入库", "安灯", "工艺路线·工序·工单BOM", "研发设计项目(PD·审批归档)", "AI å››ç±»é¢„测"],
     "objects": ["MPS", "生产工单", "生产任务", "报工单", "工艺路线", "工单BOM", "设计项目"],
     "roles": ["计划员", "车间主任", "操作工", "工艺员"],
     "upstream": ["进销存(销售订单)"], "downstream": ["仓储(领料/入库)", "质量(IPQC)"],
     "coreTables": ["mes_pro_mps", "mes_pro_work_order", "mes_pro_task", "mes_pro_feedback", "mes_pro_route", "mes_pro_process", "mes_pro_work_order_bom", "mes_pd_project"]},
    {"key": "wm", "name": "仓储管理", "color": "#7e6bd6", "tag": "MES-WM", "flow": "warehouse",
     "positioning": "厂内 WMS:单据驱动的库存账实一致",
     "problem": "多来源出入库、批次/SN è¿½æº¯ã€åº“存精确到库位",
     "features": ["15种出入库单据", "库存台账(物料×仓库×库区×库位×批次×供应商)", "事务流水只读留痕", "调拨成对事务", "盘点(静态/动态·盲盘·盘盈盘亏调整)", "批次/SN/条码/装箱嵌套", "虚拟线边库(允许负库存)", "库存占用(5ç±»)", "四级冻结", "WMS审批配置+BPM", "对外 WmsStockApi/WmsTransactionApi"],
     "objects": ["到货通知", "采购入库", "领料", "完工入库", "销售出库", "发货通知", "销售退货", "供应商退货", "调拨", "盘点", "库存台账", "批次", "SN"],
     "roles": ["仓管员", "拣货员", "盘点员"],
     "upstream": ["采购(收货)", "生产(领退料)", "销售(发货)", "售后(退货)"], "downstream": ["进销存(数量回写)", "财务(成本基础)"],
     "coreTables": ["mes_wm_warehouse", "mes_wm_material_stock", "mes_wm_transaction", "mes_wm_item_receipt", "mes_wm_product_issue", "mes_wm_product_receipt", "mes_wm_product_sales", "mes_wm_return_sales", "mes_wm_transfer", "mes_wm_stock_taking_task", "mes_wm_batch", "mes_wm_sn", "mes_wm_stock_reserve"]},
    {"key": "qc", "name": "质量管理", "color": "#e06c6c", "tag": "MES-QC", "flow": "quality",
     "positioning": "四道检验闸口 + ä¸åˆæ ¼å“é—­çŽ¯å¤„ç½®",
     "problem": "来料/过程/出货/退货检验标准化,不合格可追溯处置",
     "features": ["IQC æ¥æ–™(到货/外协)", "IPQC è¿‡ç¨‹(联动报工)", "OQC å‡ºè´§(联动销售出库)", "RQC é€€è´§(联动退料/售后)", "质检方案·指标·缺陷库", "检测结果:合格/特采/退货/报废", "NCR:评审→处置(退货/报废/返工/让步/降级)→关闭", "AI åˆ¤å®šå»ºè®®"],
     "objects": ["IQC", "IPQC", "OQC", "RQC", "质检方案", "NCR", "缺陷记录"],
     "roles": ["质检员(IQC/IPQC/OQC)", "质量工程师"],
     "upstream": ["仓储(到货)", "生产(报工)", "销售(出库)", "售后(退货)"], "downstream": ["仓储(合格入库/报废出库)", "生产(NCR返工)"],
     "coreTables": ["mes_qc_iqc", "mes_qc_ipqc", "mes_qc_oqc", "mes_qc_rqc", "mes_qc_template", "mes_qc_indicator", "mes_qc_defect", "mes_qc_ncr"]},
    {"key": "dv", "name": "设备与工装排班", "color": "#59a8b8", "tag": "MES-DV/TM/CAL", "flow": null,
     "positioning": "设备资产健康与生产资源保障",
     "problem": "设备点检保养维修可执行、工装状态可控、班组排班有依据",
     "features": ["设备台账(停机/生产中/保养中)", "点检·保养方案与记录", "维修工单(草稿→维修→待验收→已确认)", "计量器具检定", "工装夹具(在库/领用/ç»´ä¿®/报废)", "班组·班次·排班计划·节假日"],
     "objects": ["设备", "点检记录", "维修工单", "工装", "排班计划"],
     "roles": ["设备员", "维修工", "工装管理员", "排班员"],
     "upstream": [], "downstream": ["生产(AI é£Žé™©é¢„测消费设备数据)", "薪酬(排班工时)"],
     "coreTables": ["mes_dv_machinery", "mes_dv_check_plan", "mes_dv_check_record", "mes_dv_repair", "mes_tm_tool", "mes_cal_plan", "mes_cal_team", "mes_cal_shift"]},
    {"key": "aftersales", "name": "售后服务", "color": "#c78bd6", "tag": "AFTER", "flow": "aftersales",
     "positioning": "客户反馈到退货/ç»´ä¿®/退款闭环",
     "problem": "售后工单流转、退货与质检入库退款的跨系统联动",
     "features": ["工单六态(草稿→处理中→待入库→待退款→完结→关闭)", "问题判定(一般/ç»´ä¿®/退货)", "ç»´ä¿®(现场/返厂/远程)", "退货申请→自动建 MES é”€å”®é€€è´§å•", "质检结论/入库/退款三重回调", "行级数据权限四视图"],
     "objects": ["售后工单", "维修记录", "退货申请"],
     "roles": ["客服", "维修工程师", "售后管理员"],
     "upstream": ["CRM(客户)", "ERP(销售订单)"], "downstream": ["仓储(销售退货)", "质量(RQC)", "财务(退款)"],
     "coreTables": ["after_sale_ticket", "after_sale_ticket_item", "after_sale_repair", "after_sale_return", "after_sale_permission"]},
    {"key": "hrm", "name": "人力资源", "color": "#9db85a", "tag": "HRM", "flow": null,
     "positioning": "员工入转调离与考勤薪酬",
     "problem": "人事流程审批化、离职数据不丢(交接)、算薪自动化",
     "features": ["员工档案(入职自动建系统账号)", "请假/加班/调岗/离职 BPM å®¡æ‰¹", "离职交接映射 expandUserIds", "考勤(打卡·规则·排班·补卡审批·月度汇总)", "薪酬(应发-社保公积金-个税-请假扣款·1.5/2/3倍加班费·发放台账)", "培训证书(SQL先行待实现)"],
     "objects": ["员工", "请假单", "离职申请", "交接映射", "考勤记录", "薪酬核算"],
     "roles": ["HR", "部门主管", "员工本人"],
     "upstream": [], "downstream": ["各模块(数据可见性扩展)", "system(账号)"],
     "coreTables": ["hrm_employee", "hrm_leave_application", "hrm_resignation_application", "hrm_user_handover", "hrm_attendance_record", "hrm_salary_calculation", "hrm_salary_payment"]},
    {"key": "bpm", "name": "协同审批", "color": "#e6a23c", "tag": "BPM", "flow": null,
     "positioning": "全系统单据审批中枢(Flowable)",
     "problem": "多模块单据需要灵活可配的多级审批",
     "features": ["BPMN+钉钉风格双设计器", "流程定义部署", "审批事件统一回调(BpmProcessInstanceStatusEvent)", "13个业务监听器", "表单·用户组·抄送·加签"],
     "objects": ["流程模型", "流程实例", "审批任务"],
     "roles": ["审批人(按流程配置)", "流程管理员"],
     "upstream": ["各业务提交审批"], "downstream": ["回调更新各业务单据状态"],
     "coreTables": ["bpm_process_definition_info", "bpm_process_instance", "bpm_task", "act_*", "flowable_*"]},
    {"key": "ai", "name": "AI æ™ºèƒ½", "color": "#56c8d8", "tag": "AI", "flow": "ai",
     "positioning": "单据录入提效与生产决策辅助",
     "problem": "人工录发票/报价慢、质检与排产依赖经验",
     "features": ["chat/chatWithImage åŒé€šé“", "OCR é¢„å¡«(发票/报价)", "质检判定建议", "缺料/时长/风险/交付四类预测", "RAG çŸ¥è¯†åº“(Milvus)", "AI不可用时 fallback äººå·¥"],
     "objects": ["知识库", "AI模型配置", "对话记录"],
     "roles": ["采购员", "销售", "质检员", "计划员"],
     "upstream": ["各业务提供上下文数据"], "downstream": ["结构化JSON建议返回业务侧"],
     "coreTables": ["ai_chat_conversation", "ai_chat_message", "ai_model", "ai_knowledge", "ai_knowledge_document", "ai_knowledge_segment"]}
  ],
  "platform": {
    "name": "系统底座",
    "capabilities": ["JWT+OAuth2 è®¤è¯Â·æ»‘块验证码", "RBAC è§’色-菜单-数据范围(全部/部门/本部门及下级/仅本人/自定义)", "字典", "附件中心(storage-blob æ–‡ä»¶ + storage-attachment æŒ‰ recordType+recordId å¤šæ€å…³è”,全模块强制使用)", "编码规则(各业务自实现 Redis å‰ç¼€+日期+流水)", "Quartz å®šæ—¶ä»»åŠ¡Â·RocketMQ/Kafka/Redis Stream MQ·WebSocket", "多租户已关闭", "实际 system_role ä»… 4 ä¸ªï¼šè¶…级管理员/普通角色/CRM管理员/租户管理员,业务分工靠数据权限而非多角色"],
    "unused": ["im æ¨¡å—(IM/RTC,业务未消费)", "member æ¨¡å—(C端会员,遗留)"]
  }
}</script>
<script type="application/json" id="data-objects">{
  "objects": [
    {"name": "物料", "module": "基础主数据", "table": "mdm_item", "doc": "MDM æƒå¨ç‰©æ–™/产品/半成品档案,含 SKU、批次属性、价格、安全库存", "upstream": ["MES ç‰©æ–™åå‘同步"], "downstream": ["报价单", "销售订单", "采购订单", "工单BOM", "库存台账"], "keywords": "物料 äº§å“ åŽŸææ–™ item"},
    {"name": "仓库", "module": "基础主数据", "table": "mdm_warehouse", "doc": "仓库主数据,type: 1原料/2成品/3半成品/4线边;MES è‡ªæœ‰ mes_wm_warehouse æ‰¿è½½åº“区库位", "upstream": [], "downstream": ["库存台账", "出入库单据"], "keywords": "仓库 warehouse åŽŸæ–™ä»“ æˆå“ä»“ çº¿è¾¹ä»“"},
    {"name": "客户", "module": "销售管理", "table": "crm_customer", "doc": "客户主档,公海池/锁定/成交状态,负责人数据权限", "upstream": ["线索"], "downstream": ["联系人", "商机", "报价单", "合同", "售后工单", "收款单"], "keywords": "客户 customer å…¬æµ·"},
    {"name": "线索", "module": "销售管理", "table": "crm_clue", "doc": "原始销售线索,仅一次转化为客户", "upstream": [], "downstream": ["客户"], "keywords": "线索 clue"},
    {"name": "联系人", "module": "销售管理", "table": "crm_contact", "doc": "客户下联系人,与商机多对多", "upstream": ["客户"], "downstream": ["商机"], "keywords": "联系人 contact"},
    {"name": "商机", "module": "销售管理", "table": "crm_business", "doc": "销售机会,DB é…ç½®å¼é˜¶æ®µæŽ¨è¿›ï¼Œç»“束态: èµ¢/输/无效", "upstream": ["客户"], "downstream": ["报价单", "合同"], "keywords": "商机 business èµ¢å• è¾“单 é˜¶æ®µ"},
    {"name": "报价单", "module": "销售管理", "table": "crm_sale_quotation", "doc": "QT编号,选 MDM ç‰©æ–™æŠ¥ä»·ï¼ŒAI OCR å½•入,草稿→已转合同", "upstream": ["商机"], "downstream": ["合同"], "keywords": "报价 quotation QT"},
    {"name": "合同", "module": "销售管理", "table": "crm_contract", "doc": "HT编号,BPM å®¡æ‰¹(0草稿/10审批中/20通过/30驳回/40取消/50作废),通过后可生成销售订单", "upstream": ["报价单"], "downstream": ["销售订单", "回款计划", "开票"], "keywords": "合同 contract å®¡æ‰¹"},
    {"name": "发票", "module": "销售管理", "table": "crm_invoice", "doc": "KP编号,BPM å®¡æ‰¹ï¼Œç´¯è®¡å¼€ç¥¨â‰¤åˆåŒé¢ï¼Œé™„ä»¶å¿…ä¼ ", "upstream": ["合同"], "downstream": ["回款"], "keywords": "开票 å‘票 invoice"},
    {"name": "回款", "module": "销售管理", "table": "crm_receivable", "doc": "HK编号,创建即审批中(手动审核),强制先开票,金额双校验", "upstream": ["合同", "发票"], "downstream": ["收款单(关联)"], "keywords": "回款 æ”¶æ¬¾è®¡åˆ’ receivable"},
    {"name": "销售目标", "module": "销售管理", "table": "crm_sales_target", "doc": "å¹´/å­£/月×个人/部门/产品维度的合同回款等目标", "upstream": [], "downstream": ["业绩统计"], "keywords": "目标 target ä¸šç»©"},
    {"name": "供应商", "module": "供应商管理", "table": "srm_supplier", "doc": "供应商档案:执照/税号/银行/联系人,ERP ä¸Ž MES å…±ç”¨", "upstream": ["准入申请"], "downstream": ["采购订单", "到货通知", "供应商退货", "绩效评价"], "keywords": "供应商 supplier vendor"},
    {"name": "准入申请", "module": "供应商管理", "table": "srm_supplier_apply", "doc": "AP编号,BPM å®¡æ‰¹(采购/质量/财务),通过自动建供应商档案", "upstream": [], "downstream": ["供应商"], "keywords": "准入 ä¾›åº”商申请 apply"},
    {"name": "招标项目", "module": "供应商管理", "table": "srm_tender_project", "doc": "完整版(发布→投标→开标→评标→定标)与简易比价两种模式", "upstream": [], "downstream": ["定标→采购订单"], "keywords": "招标 æŠ•æ ‡ æ¯”ä»· å®šæ ‡ tender å¯»æº"},
    {"name": "采购申请", "module": "进销存", "table": "erp_purchase_request", "doc": "CGSQ编号,BPM å®¡æ‰¹ï¼Œé€šè¿‡åŽæœ‰ä¾›åº”商自动生成订单", "upstream": ["生产缺口(人工)"], "downstream": ["采购订单"], "keywords": "采购申请 è¯·è´­ request"},
    {"name": "采购订单", "module": "进销存", "table": "erp_purchase_order", "doc": "CGDD编号,BPM å®¡æ‰¹(15审批中/20已审核),入库状态:未0部分1全部2", "upstream": ["采购申请", "定标"], "downstream": ["到货通知", "采购来票", "供应商退货(约束物料)"], "keywords": "采购订单 purchase"},
    {"name": "采购来票", "module": "进销存", "table": "erp_purchase_invoice", "doc": "FPD编号,AI OCR é¢„填,累计≤订单总价,付款单的前置", "upstream": ["采购订单"], "downstream": ["付款单"], "keywords": "来票 å‘票 é‡‡è´­å‘票"},
    {"name": "付款单", "module": "财务", "table": "erp_finance_payment", "doc": "FKD编号,必须关联来票+附件,累计≤来票金额,BPM å®¡æ‰¹", "upstream": ["采购来票"], "downstream": ["结算账户"], "keywords": "付款 åº”付 payment"},
    {"name": "收款单", "module": "财务", "table": "erp_finance_receipt", "doc": "SKD编号,关联 CRM å®¢æˆ·æ ¡éªŒï¼Œæ—  BPM(手动审核)", "upstream": ["销售(弱关联)"], "downstream": ["结算账户"], "keywords": "收款 åº”æ”¶ receipt"},
    {"name": "销售订单", "module": "进销存", "table": "erp_sale_order", "doc": "XSDD编号,BPM å®¡æ‰¹ï¼Œéœ€ç”Ÿäº§è¡Œè‡ªåŠ¨å»º MPS,出库状态:未0已预留1部分2全部3,生产完成事件回写", "upstream": ["合同"], "downstream": ["MPS", "发货通知", "销售出库", "售后工单"], "keywords": "销售订单 sale"},
    {"name": "主生产计划", "module": "生产", "table": "mes_pro_mps", "doc": "MPS计划,草稿0→已下发1→完成2/取消3,可合并下发", "upstream": ["销售订单"], "downstream": ["生产工单"], "keywords": "MPS ä¸»è®¡åˆ’ ç”Ÿäº§è®¡åˆ’"},
    {"name": "生产工单", "module": "生产", "table": "mes_pro_work_order", "doc": "草稿0→已确认1→完成2/取消3,确认时按工艺路线生成任务,最后一道工序报工回写已生产数量", "upstream": ["MPS"], "downstream": ["生产任务", "领料", "完工入库"], "keywords": "工单 ç”Ÿäº§å·¥å• work order"},
    {"name": "生产任务", "module": "生产", "table": "mes_pro_task", "doc": "工序粒度,预备0→生产中1→部分2→完成4,可暂停9取消5", "upstream": ["生产工单"], "downstream": ["报工"], "keywords": "任务 task å·¥åº"},
    {"name": "报工单", "module": "生产", "table": "mes_pro_feedback", "doc": "草稿0→审批中2→待检3/完成4,按工序顺序校验(上道工序报满才可报),联动倒冲消耗/产出入库/IPQC", "upstream": ["生产任务"], "downstream": ["产品产出", "物料消耗", "IPQC"], "keywords": "报工 feedback"},
    {"name": "工艺路线", "module": "生产", "table": "mes_pro_route", "doc": "工序顺序+质检/关键/倒冲标记,驱动工单任务与报工规则", "upstream": [], "downstream": ["生产工单"], "keywords": "工艺 è·¯çº¿ route å·¥åº"},
    {"name": "到货通知单", "module": "仓储", "table": "mes_wm_arrival_notice", "doc": "采购订单确认收货生成,草稿0→待质检2→待入库3→完成4", "upstream": ["采购订单"], "downstream": ["IQC", "采购入库"], "keywords": "到货 æ”¶è´§ arrival"},
    {"name": "采购入库单", "module": "仓储", "table": "mes_wm_item_receipt", "doc": "草稿0→待上架2→待执行3→完成4,完成后库存+并回写 ERP inCount/inStatus", "upstream": ["到货通知"], "downstream": ["库存台账", "采购订单(回写)"], "keywords": "采购入库 æ”¶è´§å…¥åº“ receipt"},
    {"name": "生产领料单", "module": "仓储", "table": "mes_wm_product_issue", "doc": "草稿0→待拣货2→待执行3→完成4,库存-", "upstream": ["生产工单"], "downstream": ["库存台账"], "keywords": "领料 issue"},
    {"name": "销售出库单", "module": "仓储", "table": "mes_wm_product_sales", "doc": "发货通知审核后生成,提交→OQC检测→拣货→发运10→待执行3→完成4,回写销售订单出库数与状态", "upstream": ["发货通知", "销售订单"], "downstream": ["库存台账", "OQC"], "keywords": "销售出库 å‘è´§ å‡ºåº“单 sales"},
    {"name": "销售退货单", "module": "仓储", "table": "mes_wm_return_sales", "doc": "草稿→待检验(RQC)→待上架→待入库→完成,售后与手工两来源", "upstream": ["售后退货申请"], "downstream": ["库存台账", "RQC"], "keywords": "销售退货 é€€è´§å…¥åº“"},
    {"name": "供应商退货单", "module": "仓储", "table": "mes_wm_return_vendor", "doc": "IQC ä¸åˆæ ¼é€€è´§å‘起,待拣货→待执行→完成,库存-", "upstream": ["IQC"], "downstream": ["库存台账", "采购订单(returnCount)"], "keywords": "供应商退货 é€€æ–™ é€€è´§ vendor"},
    {"name": "调拨单", "module": "仓储", "table": "mes_wm_transfer", "doc": "内部/外部调拨,成对 MOVE_OUT+MOVE_IN äº‹åŠ¡ï¼Œåœ¨é€”æ•°é‡", "upstream": [], "downstream": ["库存台账"], "keywords": "调拨 ç§»åº“ transfer"},
    {"name": "盘点任务", "module": "仓储", "table": "mes_wm_stock_taking_task", "doc": "静态/动态盘点,行结果:正常/盘盈(ADJUST_IN)/盘亏(ADJUST_OUT),可冻结库存、盲盘", "upstream": ["库存台账"], "downstream": ["库存台账(调整)"], "keywords": "盘点 ç›˜ç›ˆ ç›˜äº stock taking"},
    {"name": "库存台账", "module": "仓储", "table": "mes_wm_material_stock", "doc": "物料×仓库×库区×库位×批次×供应商六元组,数量/冻结/占用/在途四量", "upstream": ["全部入库单"], "downstream": ["全部出库单", "事务流水"], "keywords": "库存 å°è´¦ stock å¯ç”¨é‡"},
    {"name": "批次", "module": "仓储", "table": "mes_wm_batch", "doc": "关联物料/工单/供应商/客户/质量状态;SN ç å«æ‰¹æ¬¡ uuid;条码支持18种业务对象", "upstream": ["入库单据"], "downstream": ["库存台账"], "keywords": "批次 batch SN æ¡ç  è¿½æº¯"},
    {"name": "IQC来料检验", "module": "质量", "table": "mes_qc_iqc", "doc": "到货通知/外协入库触发,草稿0→完成4,结论回写来源单据", "upstream": ["到货通知", "外协入库"], "downstream": ["采购入库", "供应商退货", "NCR"], "keywords": "IQC æ¥æ–™æ£€éªŒ"},
    {"name": "IPQC过程检验", "module": "质量", "table": "mes_qc_ipqc", "doc": "报工质检工序产出行触发,完成回调推进报工与产出入库", "upstream": ["报工"], "downstream": ["产出入库", "NCR"], "keywords": "IPQC è¿‡ç¨‹æ£€éªŒ å·¡æ£€"},
    {"name": "OQC出货检验", "module": "质量", "table": "mes_qc_oqc", "doc": "销售出库提交触发,完成推进出库单待拣货", "upstream": ["销售出库单"], "downstream": ["销售出库单(推进)"], "keywords": "OQC å‡ºè´§æ£€éªŒ å‡ºåŽ‚æ£€éªŒ"},
    {"name": "RQC退货检验", "module": "质量", "table": "mes_qc_rqc", "doc": "生产退料/销售退货/售后退货触发,结论回调售后", "upstream": ["退料", "退货"], "downstream": ["退货入库", "售后回调"], "keywords": "RQC é€€è´§æ£€éªŒ"},
    {"name": "NCR不合格品", "module": "质量", "table": "mes_qc_ncr", "doc": "待评审0→已评审6→已处置7→已关闭8,处置:退货/报废/返工/让步接收/降级", "upstream": ["IQC/IPQC/OQC/RQC"], "downstream": ["退货/报废/返工(台账)"], "keywords": "NCR ä¸åˆæ ¼ å¤„ç½® ç‰¹é‡‡ æŠ¥åºŸ"},
    {"name": "设备", "module": "设备", "table": "mes_dv_machinery", "doc": "台账状态:停机/生产中/保养中;点检·保养·维修工单;AI é£Žé™©é¢„测消费其数据", "upstream": [], "downstream": ["点检", "ç»´ä¿®", "生产风险预测"], "keywords": "设备 ç‚¹æ£€ ä¿å…» ç»´ä¿® machinery"},
    {"name": "售后工单", "module": "售后", "table": "after_sale_ticket", "doc": "草稿0→处理中10→待入库30→待退款40→完结50→关闭60/取消99,判定:一般/ç»´ä¿®/退货", "upstream": ["客户反馈(人工录入)"], "downstream": ["维修记录", "退货申请"], "keywords": "售后 å·¥å• ticket ç»´ä¿®"},
    {"name": "退货申请", "module": "售后", "table": "after_sale_return", "doc": "草稿0→已审核20(自动建MES退货单)→已质检40→已入库50→已退款60→关闭70;类型:退款退货/换货/仅退款", "upstream": ["售后工单"], "downstream": ["销售退货单", "退款"], "keywords": "售后退货 return"},
    {"name": "员工", "module": "人力", "table": "hrm_employee", "doc": "在职1/试用2/离职3,入职自动建系统账号", "upstream": [], "downstream": ["交接映射", "考勤", "薪酬"], "keywords": "员工 å…¥èŒ employee"},
    {"name": "离职交接", "module": "人力", "table": "hrm_user_handover", "doc": "from→to æ˜ å°„,已完成20 åŽ expandUserIds æ‰©å±•交接人可见数据(当前各业务模块尚未实际接入调用)", "upstream": ["离职申请"], "downstream": ["各模块我的数据查询"], "keywords": "交接 ç¦»èŒ handover expandUserIds"},
    {"name": "排班计划", "module": "设备", "table": "mes_cal_plan", "doc": "班组×班次×日期排班,供生产与考勤引用", "upstream": [], "downstream": ["生产任务", "考勤"], "keywords": "排班 ç­ç»„ ç­æ¬¡ æ—¥åކ"}
  ]
}</script>
<script type="application/json" id="data-flows">{
  "flows": [
    {"id": "sales", "name": "销售流程", "mermaid": "mermaid/02-sales-flow.mmd", "color": "#4f9cff",
     "summary": "线索转化客户 â†’ å•†æœºæŽ¨è¿› â†’ æŠ¥ä»·(可AI识别) â†’ åˆåŒ BPM å®¡æ‰¹ â†’ ç”Ÿæˆ ERP é”€å”®è®¢å•并审批 â†’ éœ€ç”Ÿäº§è¡Œè‡ªåŠ¨å»º MPS â†’ å‘货通知 â†’ é”€å”®å‡ºåº“(OQC)回写 â†’ å¼€ç¥¨(BPM) â†’ å›žæ¬¾(先开票校验)。",
     "steps": [
       {"stage": "获客", "action": "线索转化客户、建联系人、立项商机", "roles": ["销售内勤"]},
       {"stage": "报价", "action": "商机赢单后建报价单(AI OCR é¢„å¡«),转合同", "roles": ["销售内勤"]},
       {"stage": "签约", "action": "合同提交 BPM å®¡æ‰¹(可选流程定义),通过=20", "roles": ["销售", "审批人"]},
       {"stage": "接单", "action": "合同一键生成销售订单(XSDD),销售订单再走 BPM;审批通过自动为 needProduction æ˜Žç»†åˆ›å»º MPS", "roles": ["销售", "计划员"]},
       {"stage": "交付", "action": "发货通知审核(占用)→ é”€å”®å‡ºåº“ OQC â†’ å‘运 â†’ å‡ºåº“回写部分/全部出库", "roles": ["仓管", "质检"]},
       {"stage": "回款", "action": "开票 BPM(累计≤合同额) â†’ å›žæ¬¾å¼ºåˆ¶å…ˆå¼€ç¥¨(累计≤合同剩余与开票剩余)", "roles": ["财务", "销售"]}]},
    {"id": "purchase", "name": "采购流程", "mermaid": "mermaid/03-purchase-flow.mmd", "color": "#5fc79e",
     "summary": "SRM å‡†å…¥/定标供源 â†’ é‡‡è´­ç”³è¯· BPM â†’ é‡‡è´­è®¢å• BPM â†’ ç¡®è®¤æ”¶è´§ç”Ÿæˆ MES åˆ°è´§é€šçŸ¥ â†’ IQC(合格/特采入库·退货/报废) â†’ é‡‡è´­å…¥åº“回写订单与申请 â†’ æ¥ç¥¨(AI OCR) â†’ ä»˜æ¬¾å• BPM。",
     "steps": [
       {"stage": "寻源", "action": "供应商准入(BPM)建档;招标完整版或简易比价,定标审批通过自动生成采购订单", "roles": ["采购开发"]},
       {"stage": "申请", "action": "采购申请(CGSQ)提交 BPM,驳回可重置回草稿;通过且有供应商自动生成订单", "roles": ["采购员", "审批人"]},
       {"stage": "下单", "action": "采购订单(CGDD)自动提交 BPM(15→20)", "roles": ["采购员"]},
       {"stage": "收货", "action": "确认收货生成到货通知(0→待质检2/待入库3→4);需检物料自动创建 IQC", "roles": ["仓管", "IQC è´¨æ£€å‘˜"]},
       {"stage": "入库", "action": "IQC åˆæ ¼/特采→采购入库(待上架→待执行→完成)库存+,回写订单 inCount/inStatus ä¸Žç”³è¯·æ˜Žç»†", "roles": ["仓管"]},
       {"stage": "退货", "action": "IQC ä¸åˆæ ¼é€€è´§â†’供应商退货出库(选料锁定到订单行);报废走 NCR", "roles": ["仓管"]},
       {"stage": "付款", "action": "采购来票(FPD, AI OCR, â‰¤è®¢å•总价) â†’ ä»˜æ¬¾å•(FKD å…³è”来票+附件, â‰¤æ¥ç¥¨é‡‘额) BPM å®¡æ‰¹", "roles": ["财务", "审批人"]}]},
    {"id": "production", "name": "生产流程", "mermaid": "mermaid/04-production-flow.mmd", "color": "#e0b34f",
     "summary": "销售订单驱动 MPS â†’ ä¸‹å‘工单 â†’ æŒ‰å·¥è‰ºè·¯çº¿æ‹†å·¥åºä»»åŠ¡ â†’ é¢†æ–™/线边备料 â†’ æŠ¥å·¥(工序顺序硬校验+BPM) â†’ å€’冲消耗/产出入库/IPQC â†’ æœ«é“工序回写进度 â†’ è‡ªåŠ¨å®Œå·¥ â†’ ProductionFinishedEvent å›žå†™é”€å”®è®¢å•。",
     "steps": [
       {"stage": "计划", "action": "MPS åˆ›å»º(手工或销售订单自动)→下发或合并下发为工单", "roles": ["计划员"]},
       {"stage": "派工", "action": "工单确认按工艺路线逐工序生成任务,可指派/暂停/取消", "roles": ["车间主任"]},
       {"stage": "备料", "action": "生产领料单出库或线边虚拟库备料", "roles": ["仓管"]},
       {"stage": "报工", "action": "提交报工:上一道工序未报满直接拦截;启用 BPM èµ°å®¡æ‰¹", "roles": ["操作工"]},
       {"stage": "联动", "action": "审批通过按工序标记: å€’冲→自动物料消耗扣线边库(允许负库存);质检→产出待检行等 IPQC;关键非检→直接产出入库", "roles": ["系统自动"]},
       {"stage": "完工", "action": "仅末道工序回写工单已生产数量,达标自动完成;MPS ç´¯è®¡åˆ¤æ–­å®Œæˆå¹¶å‘事件给销售订单", "roles": ["系统自动"]}]},
    {"id": "quality", "name": "质量流程", "mermaid": "mermaid/05-quality-flow.mmd", "color": "#e06c6c",
     "summary": "四道检验闸口(IQC/IPQC/OQC/RQC,二态 0→4) + åˆ¤å®šå››æžœ(合格/特采/退货/报废) + NCR è¯„审处置关闭;AI æä¾›åˆ¤å®šå»ºè®®ï¼›NCR å½“前仅台账不触发返工单。",
     "steps": [
       {"stage": "来料", "action": "到货通知/外协入库→IQC,结论回写推进待入库或触发退货", "roles": ["IQC è´¨æ£€å‘˜"]},
       {"stage": "过程", "action": "报工质检工序产出行→IPQC,合格拆行入库、不合格生成 NCR", "roles": ["IPQC è´¨æ£€å‘˜"]},
       {"stage": "出货", "action": "销售出库提交→OQC,完成后出库单进入待拣货", "roles": ["OQC è´¨æ£€å‘˜"]},
       {"stage": "退货", "action": "退料/销售退货/售后退货→RQC,结论回调单据与售后", "roles": ["RQC è´¨æ£€å‘˜"]},
       {"stage": "不合格", "action": "NCR: å¾…评审→评审→处置(退货/报废/返工/让步接收/降级)→关闭", "roles": ["质量工程师"]}]},
    {"id": "warehouse", "name": "仓储流程", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
     "summary": "15 ç±»å•据驱动库存台账(六元组、四量)变动,全部经事务流水留痕;支持调拨在途、盘点调整、批次/SN è¿½æº¯ã€åº“存占用与四级冻结、线边虚拟库负库存;对外 WmsStockApi ä¾› ERP æ”¶å‘。",
     "steps": [
       {"stage": "入库", "action": "采购入库/生产入库/产出入库/退货入库/外协入库/杂项入库 â†’ IN äº‹åŠ¡ï¼Œæ‰¹æ¬¡æ··æ”¾æ ¡éªŒã€å››çº§å†»ç»“æ ¡éªŒ", "roles": ["仓管"]},
       {"stage": "出库", "action": "销售出库/领料/消耗/外协发料/供应商退货/杂项出库 â†’ OUT äº‹åŠ¡ï¼ŒcheckFlag æŽ§åˆ¶å¯å¦è´Ÿåº“å­˜", "roles": ["仓管", "系统自动"]},
       {"stage": "移库", "action": "内部/外部调拨成对 MOVE äº‹åŠ¡ï¼Œåœ¨é€”æ•°é‡è·Ÿè¸ª", "roles": ["仓管"]},
       {"stage": "盘点", "action": "方案→任务→明细行→结果,盘盈 ADJUST_IN、盘亏 ADJUST_OUT,可冻结与盲盘", "roles": ["盘点员"]},
       {"stage": "追溯", "action": "批次/SN(uuid)/条码(18ç±»)/装箱嵌套支撑正反向追溯", "roles": ["质量", "售后"]}]},
    {"id": "aftersales", "name": "售后流程", "mermaid": "mermaid/07-after-sales-flow.mmd", "color": "#c78bd6",
     "summary": "工单(六态+问题判定) â†’ ç»´ä¿®ä¸‰ç±»åž‹æˆ–退货申请 â†’ å®¡æ ¸è‡ªåŠ¨å»º MES é”€å”®é€€è´§å• â†’ RQC è´¨æ£€/入库/退款三回调逐级推进 â†’ å·¥å•完结关闭。",
     "steps": [
       {"stage": "受理", "action": "人工录入工单(关联客户/订单/合同),分配处理人进入处理中", "roles": ["客服"]},
       {"stage": "判定", "action": "问题判定: ä¸€èˆ¬/ç»´ä¿®/退货,严重度 0-3", "roles": ["售后工程师"]},
       {"stage": "ç»´ä¿®", "action": "现场/返厂/远程维修,费用与结果记录,完成联动工单完结", "roles": ["维修工程师"]},
       {"stage": "退货", "action": "退货申请审核→自动建 MES é”€å”®é€€è´§å•(RQC)→质检/入库回调→退款回调→关闭", "roles": ["售后", "质检", "财务"]}]},
    {"id": "ai", "name": "AI ä¸šåŠ¡æµç¨‹", "mermaid": "mermaid/11-ai-business-flow.mmd", "color": "#56c8d8",
     "summary": "统一模式:业务侧收集上下文(必要时调 MDM/SRM/CRM API å–名称)→组装 Prompt→chat/chatWithImage→解析 JSON→前端预填或建议;无 Function Calling;RAG çŸ¥è¯†åº“已建成但暂无业务消费。",
     "steps": [
       {"stage": "录入提效", "action": "发票 OCR(图片多模态/PDF文本)、报价单 OCR â†’ ç»“构化预填", "roles": ["采购员", "销售"]},
       {"stage": "辅助判定", "action": "质检单+指标+缺陷 â†’ å»ºè®®åˆæ ¼/特采/退货/报废+理由", "roles": ["质检员"]},
       {"stage": "决策预测", "action": "缺料/生产时长/生产风险/交付四类预测供计划排产参考", "roles": ["计划员"]},
       {"stage": "知识检索", "action": "文档→切片→Milvus å‘量→检索接口(预留)", "roles": ["—"]}]}
  ]
}</script>
<script type="application/json" id="data-roles">{
  "note": "实际 system_role ä»… 4 ä¸ªæœ‰æ•ˆè§’色(超级管理员/普通角色/CRM管理员/租户管理员)+1 æµ‹è¯•角色;业务分工主要通过『菜单权限 + æ•°æ®æƒé™ï¼ˆè´Ÿè´£äººåˆ¶ï¼‰ã€å®žçŽ°ï¼Œè€Œéžç»†åˆ†è§’è‰²ã€‚ä»¥ä¸‹ä¸šåŠ¡è§’è‰²ç”±å„æ¨¡å—åŠŸèƒ½ä¸Žæ•°æ®æƒé™æ¨¡åž‹æŽ¨å¯¼ã€‚",
  "systemRoles": [
    {"name": "超级管理员", "code": "super_admin", "desc": "代码直返全部菜单"},
    {"name": "普通角色", "code": "common", "desc": "依赖 system_role_menu é…æƒ"},
    {"name": "CRM ç®¡ç†å‘˜", "code": "crm_admin", "desc": "CRM æŸ¥çœ‹å…¨éƒ¨æ•°æ®"},
    {"name": "租户管理员", "code": "tenant_admin", "desc": "多租户已关闭,遗留"}
  ],
  "businessRoles": [
    {"role": "销售内勤/销售", "modules": ["CRM", "ERP"], "operations": ["线索客户商机维护", "报价与合同", "销售订单", "跟进记录"], "data": ["crm_*", "erp_sale_order"], "scope": "负责人(owner)+数据权限三级:只读/读写/负责人;公海池可领取;交接人应可通过 expandUserIds çœ‹åˆ°ç¦»èŒäººæ•°æ®(接口已备、待接入)"},
    {"role": "销售经理", "modules": ["CRM"], "operations": ["商机/合同审批参与", "销售目标制定", "业绩排名漏斗分析"], "data": ["团队数据(下属用户)"], "scope": "AdminUserApi ä¸‹çº§ç”¨æˆ·æ‰©å±•"},
    {"role": "采购员", "modules": ["ERP", "SRM"], "operations": ["采购申请/订单", "确认收货", "来票与付款发起"], "data": ["erp_purchase_*", "srm_*"], "scope": "requestUserId/supplierOwner å½’属"},
    {"role": "采购开发/供应商管理员", "modules": ["SRM"], "operations": ["准入审批流转", "招标比价组织", "绩效评价"], "data": ["srm_supplier_apply", "srm_tender_*"], "scope": "BPM å¤šéƒ¨é—¨ä¼šç­¾(采购/质量/财务)"},
    {"role": "计划员", "modules": ["MES"], "operations": ["MPS ä¸Žå·¥å•", "工艺路线维护", "AI é¢„测参考"], "data": ["mes_pro_*"], "scope": "车间/部门数据范围"},
    {"role": "操作工/班组长", "modules": ["MES"], "operations": ["任务接收", "报工提交(受工序顺序约束)", "安灯"], "data": ["mes_pro_feedback", "mes_pro_task"], "scope": "任务指派人可见"},
    {"role": "仓管员", "modules": ["MES-WM"], "operations": ["15 ç±»å‡ºå…¥åº“单据执行", "调拨", "盘点", "条码装箱"], "data": ["mes_wm_*"], "scope": "仓库维度;WMS å¯æŒ‰ä»“库配置出入库/调拨/盘点是否走 BPM"},
    {"role": "质检员", "modules": ["MES-QC"], "operations": ["IQC/IPQC/OQC/RQC æ£€éªŒ", "NCR è¯„审处置"], "data": ["mes_qc_*"], "scope": "inspectorUserId å½’属"},
    {"role": "设备员/维修工", "modules": ["MES-DV"], "operations": ["点检保养", "维修工单", "工装领用"], "data": ["mes_dv_*", "mes_tm_*"], "scope": "chargeUserId å½’属"},
    {"role": "客服/售后工程师", "modules": ["售后"], "operations": ["工单受理派工", "ç»´ä¿®", "退货申请"], "data": ["after_sale_*"], "scope": "行级数据权限四视图:我负责/我参与/下属负责/全部(aftersales:view-all)"},
    {"role": "财务", "modules": ["ERP", "CRM"], "operations": ["收款单", "付款单", "开票审核", "结算账户"], "data": ["erp_finance_*", "crm_invoice", "crm_receivable"], "scope": "financeUserId å½’属"},
    {"role": "HR", "modules": ["HRM"], "operations": ["员工档案入转调离", "考勤规则排班", "薪酬核算发放", "离职交接"], "data": ["hrm_*"], "scope": "部门范围 dataScope"},
    {"role": "管理层", "modules": ["BI"], "operations": ["查看采购销售/仓库/生产设备/质量/人力五大主题大屏"], "data": ["bi_dashboard"], "scope": "只读"}
  ]
}</script>
<pre style="display:none" class="mmd-src" data-mmd="01-business-mindmap">
mindmap
  root((MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å°))
    åŸºç¡€ä¸»æ•°æ® MDM
      ç‰©æ–™ä¸ŽSKU
      ç‰©æ–™åˆ†ç±»
      è®¡é‡å•位与品牌
      ä»“库主数据
    é”€å”®ç®¡ç† CRM
      çº¿ç´¢
      å®¢æˆ·ä¸Žè”系人
      å•†æœºä¸Žé˜¶æ®µ
      æŠ¥ä»·å•
      é”€å”®åˆåŒ
      å¼€ç¥¨ä¸Žå›žæ¬¾
      é”€å”®ç›®æ ‡
      æ•°æ®æƒé™ä¸Žå…¬æµ·
    ä¾›åº”商管理 SRM
      ä¾›åº”商档案
      å‡†å…¥å®¡æ‰¹
      èµ„质证书
      æ‹›æ ‡ä¸Žæ¯”ä»·
      ç»©æ•ˆè¯„ä»·
    è¿›é”€å­˜ä¸Žè´¢åŠ¡ ERP
      é‡‡è´­ç”³è¯·
      é‡‡è´­è®¢å•
      é‡‡è´­æ¥ç¥¨
      é”€å”®è®¢å•
      ä»˜æ¬¾å•
      æ”¶æ¬¾å•
      ç»“算账户
    ç”Ÿäº§ç®¡ç† MES
      ä¸»ç”Ÿäº§è®¡åˆ’ MPS
      ç”Ÿäº§å·¥å•
      ç”Ÿäº§ä»»åŠ¡
      ç”Ÿäº§æŠ¥å·¥
      å·¥è‰ºè·¯çº¿ä¸Žå·¥åº
      å·¥å•BOM
      ç ”发设计项目
      å®‰ç¯
    ä»“储管理 MES-WM
      ä»“库库区库位
      åˆ°è´§é€šçŸ¥
      é‡‡è´­å…¥åº“
      ç”Ÿäº§é¢†æ–™ä¸Žé€€æ–™
      ç”Ÿäº§å…¥åº“
      é”€å”®å‡ºåº“与退货
      è½¬ç§»è°ƒæ‹¨
      ç›˜ç‚¹
      åº“存台账与事务
      æ‰¹æ¬¡SN条码装箱
    è´¨é‡ç®¡ç† MES-QC
      IQC æ¥æ–™æ£€éªŒ
      IPQC è¿‡ç¨‹æ£€éªŒ
      OQC å‡ºè´§æ£€éªŒ
      RQC é€€è´§æ£€éªŒ
      NCR ä¸åˆæ ¼å“
      è´¨æ£€æ–¹æ¡ˆä¸ŽæŒ‡æ ‡ç¼ºé™·
    è®¾å¤‡ä¸ŽæŽ’班
      è®¾å¤‡å°è´¦
      ç‚¹æ£€ä¸Žä¿å…»
      ç»´ä¿®å·¥å•
      å·¥è£…夹具
      ç­ç»„班次与排班
    å”®åŽæœåŠ¡
      å”®åŽå·¥å•
      ç»´ä¿®è®°å½•
      é€€è´§ç”³è¯·
      æ•°æ®æƒé™
    äººåŠ›èµ„æº HRM
      å‘˜å·¥æ¡£æ¡ˆ
      è¯·å‡åŠ ç­è°ƒå²—ç¦»èŒ
      ç¦»èŒäº¤æŽ¥æ˜ å°„
      è€ƒå‹¤æŽ’班汇总
      è–ªé…¬æ ¸ç®—与发放
    ååŒå®¡æ‰¹ BPM
      Flowable å¼•擎
      ä¸šåŠ¡çŠ¶æ€å›žè°ƒç›‘å¬
    AI æ™ºèƒ½
      å‘票OCR识别
      æŠ¥ä»·å•OCR识别
      è´¨æ£€ç»“果判定
      ç‰©æ–™çŸ­ç¼ºé¢„测
      ç”Ÿäº§æ—¶é•¿ä¸Žé£Žé™©é¢„测
      äº¤ä»˜é¢„测
      RAG çŸ¥è¯†åº“
    BI ä¸Žç®¡ç†é©¾é©¶èˆ±
      SQL é…ç½®å¼å¤§å±
      é‡‡è´­é”€å”®åº“存生产质量人力主题
    ç³»ç»Ÿåº•座
      è®¤è¯ä¸ŽRBAC
      æ•°æ®æƒé™
      å­—å…¸
      é™„件中心
      å®šæ—¶ä»»åŠ¡ä¸Žæ¶ˆæ¯
</pre>
<pre style="display:none" class="mmd-src" data-mmd="02-sales-flow">
flowchart TD
  A[线索 crm_clue] -->|转化·仅一次| B[客户 crm_customer]
  B --> C[联系人 crm_contact]
  B --> D[商机 crm_business]
  D -->|自定义阶段推进| E{商机结束}
  E -->|赢单| F[报价单 QT·草稿0→已转合同10]
  E -->|输单或无效| X[结束]
  F -->|转合同·带入客户产品折扣| G[合同 HT·草稿0→审批中10]
  D -->|直接建合同| G
  G -->|BPM审批通过20| H[生成 ERP é”€å”®è®¢å• XSDD]
  H -->|提交BPM| I[销售订单审批·审批中15→已审核20]
  I -->|明细需生产·自动创建| J[MES ä¸»ç”Ÿäº§è®¡åˆ’ MPS]
  I --> K[发货通知单]
  K -->|审核通过| L[销售出库单·OQC→拣货→发运→出库完成]
  L -->|回写出库数量与状态| M[销售订单 éƒ¨åˆ†å‡ºåº“2/全部出库3]
  G --> N[回款计划·按期数分期]
  G -->|提交BPM| O[开票 KP·审批中10→通过20·累计不超合同额]
  O -->|回款前必须先开票| P[回款 HK·创建即审批中10→手动审核20]
  P -->|校验合同剩余额与开票剩余额| N
</pre>
<pre style="display:none" class="mmd-src" data-mmd="03-purchase-flow">
flowchart TD
  S0[SRM å‡†å…¥ç”³è¯· AP·待提交0→审批中10→已通过40] --> S1[供应商档案 srm_supplier]
  S1 --> S2[资质证书管理]
  S1 --> S3[绩效评价·质量交付价格服务四维]
  S4[SRM æ‹›æ ‡æ¯”价·发布→投标→开标→评标→定标] -->|定标审批通过生成订单| C3
  C1[采购申请 CGSQ·草稿0→审批中10] -->|提交BPM| C2{审批}
  C2 -->|驳回30→可重置回草稿| C1
  C2 -->|通过20且有供应商·自动生成| C3[采购订单 CGDD·审批中15→已审核20]
  C2 -->|通过20无供应商| C4[手动指定供应商生成订单]
  C4 --> C3
  C3 -->|确认收货| C5[到货通知单·草稿0→待质检2→待入库3→完成4]
  C5 -->|物料需检验·自动创建| C6[IQC æ¥æ–™æ£€éªŒ]
  C6 -->|合格1或特采2 å¯å…¥åº“| C7[采购入库单·草稿0→待上架2→待执行3→完成4]
  C6 -->|不合格退货3| C8[供应商退货·待拣货→待执行→完成·库存扣减]
  C6 -->|不合格报废4| C9[NCR ä¸åˆæ ¼å“å¤„ç½®]
  C7 -->|回写 inCount ä¸Ž inStatus æœªå…¥åº“0部分1全部2| C3
  C7 -->|回写申请明细 inCount| C1
  C3 -->|订单总价控制| C10[采购来票 FPD·累计金额≤订单总价]
  C10 -->|付款单必须关联来票| C11[付款单 FKD·审批中15→已审核20·累计付款≤来票金额]
</pre>
<pre style="display:none" class="mmd-src" data-mmd="04-production-flow">
flowchart TD
  P0[销售订单明细 needProduction=1] -->|审批通过自动创建| P1[MPS ä¸»ç”Ÿäº§è®¡åˆ’·草稿0→已下发1]
  P1 -->|下发或合并下发| P2[生产工单·草稿0→已确认1]
  P2 -->|按工艺路线工序自动生成| P3[生产任务×N·预备0→生产中1→部分完成2→完成4·可暂停9]
  P3 --> P4[生产领料 æˆ– çº¿è¾¹è™šæ‹Ÿåº“备料]
  P4 --> P5[报工提交·草稿0]
  P5 -->|校验:上一道工序未报满则拦截| P5
  P5 -->|启用BPM则提交审批| P6{报工审批}
  P6 -->|驳回| P5
  P6 -->|通过且倒冲工序| P7[按工单BOM自动生成物料消耗·扣线边虚拟库FIFO允许负库存]
  P6 -->|通过且质检工序| P8[产出行待检→IPQC è¿‡ç¨‹æ£€éªŒ]
  P6 -->|通过且非质检关键工序| P9[产品产出直接完工入库]
  P8 -->|检验合格| P10[拆合格与不合格行入库]
  P8 -->|不合格| P11[NCR ä¸åˆæ ¼å“]
  P9 --> P12[进度回写·仅最后一道工序报工才更新工单已生产数量]
  P10 --> P12
  P12 -->|已生产数量≥计划数量·自动| P13[工单完成2]
  P12 -->|累计| P14[MPS å›žå†™å·²ç”Ÿäº§æ•°é‡å¹¶åˆ¤æ–­å®Œæˆ2]
  P14 -->|全部完成| P15[发布 ProductionFinishedEvent→回写销售订单生产状态]
</pre>
<pre style="display:none" class="mmd-src" data-mmd="05-quality-flow">
flowchart TD
  T1[到货通知单 æˆ– å¤–协入库单] --> A1[IQC æ¥æ–™æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T2[报工质检工序通过后产出行] --> A2[IPQC è¿‡ç¨‹æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T3[销售出库单提交] --> A3[OQC å‡ºè´§æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T4[生产退料单 æˆ– é”€å”®é€€è´§å• æˆ– å”®åŽé€€è´§] --> A4[RQC é€€è´§æ£€éªŒÂ·è‰ç¨¿0→完成4]
  A1 --> R{检验判定 MesQcCheckResultEnum}
  A2 --> R
  A3 --> R
  A4 --> R
  R -->|1 åˆæ ¼| Q1[允许入库·回写来源单据推进状态]
  R -->|2 ç‰¹é‡‡| Q2[允许入库·并生成NCR留痕]
  R -->|3 ä¸åˆæ ¼é€€è´§| Q3[生成NCR·走供应商退货或销售退货]
  R -->|4 ä¸åˆæ ¼æŠ¥åºŸ| Q4[生成NCR·走报废出库]
  A2 -->|合格数量| Q5[报工转完成·产出拆行入库]
  A3 -->|完成| Q6[销售出库单推进待拣货]
  A4 -->|完成| Q7[退货单推进上架或入库·售后回调结论]
  N1[NCR å¾…评审0] -->|评审| N2[已评审6]
  N2 -->|处置方式:退货1报废2返工3让步接收4降级使用5| N3[已处置7]
  N3 -->|关闭| N4[已关闭8]
  Q8[支撑数据:质检方案·检验指标·缺陷库·指标结果] --- A1
</pre>
<pre style="display:none" class="mmd-src" data-mmd="06-warehouse-flow">
flowchart LR
  subgraph INB [入库·事务IN·库存加]
    I1[采购入库]
    I2[生产入库单]
    I3[报工产出自动入库]
    I4[销售退货入库]
    I5[外协入库]
    I6[杂项入库]
  end
  subgraph OUTB [出库·事务OUT·库存减]
    O1[销售出库]
    O2[生产领料]
    O3[物料消耗倒冲·允许负库存]
    O4[外协发料]
    O5[生产退料回仓]
    O6[供应商退货]
    O7[杂项出库·调整或报废]
  end
  W[(库存台账 mes_wm_material_stock ç‰©æ–™Ã—仓库×库区×库位×批次×供应商)]
  INB -->|getOrCreate åŠ æ•°é‡| W
  OUTB -->|校验可用量后扣减| W
  W -->|占用预留 reservedQuantity| RES[库存占用 é”€å”®å‡ºåº“·领料·外协·杂项·调拨]
  MV[转移调拨·内部或外部] -->|成对事务 MOVE_OUT+MOVE_IN åœ¨é€”| W
  ST[盘点 æ–¹æ¡ˆâ†’任务→明细行→结果] -->|盘盈 ADJUST_IN·盘亏 ADJUST_OUT·可冻结库存| W
  W --> TX[事务流水 mes_wm_transaction åªè¯»å…¨é‡ç•™ç—•]
  BT[批次 mes_wm_batch·SN码·条码·装箱嵌套] --- W
  WIP[[线边虚拟库 WIP_VIRTUAL_WAREHOUSE·懒初始化]] --- O3
  FR[四级冻结:仓库·库区·库位·库存记录] --- W
</pre>
<pre style="display:none" class="mmd-src" data-mmd="07-after-sales-flow">
flowchart TD
  F1[客户反馈·后台人工录入工单·关联客户联系人销售订单合同] --> K1[售后工单·草稿0]
  K1 -->|assignTicket åˆ†é…å¤„理人| K2[处理中10·问题判定:一般1ç»´ä¿®2退货3·严重度0-3]
  K2 -->|维修类| R1[维修记录·待处理0→维修中10→已完成20→已关闭30·现场返厂远程]
  R1 -->|completeRepair| K4[已完结50]
  K2 -->|退货类创建退货申请| T1[退货申请·草稿0]
  T1 -->|approveReturn å®¡æ ¸é€šè¿‡| T2[已审核20·自动创建MES销售退货单]
  T2 --> T3[MES é”€å”®é€€è´§Â·è‰ç¨¿â†’待检验RQC→待上架→待入库→完成]
  T3 -->|质检结论回调 onReturnQualityFinished åˆæ ¼ç‰¹é‡‡é€€è´§æŠ¥åºŸ| T4[已质检40]
  T3 -->|入库完成回调 onReturnInboundFinished| T5[已入库50]
  T5 -->|退款完成回调 onRefundCompleted è®°å½•实际退款额| T6[已退款60]
  T6 --> T7[已关闭70]
  T2 -.->|状态流转中| T8[审核中10·预留未启用]
  K2 -->|退货链路联动工单| K3[待入库30→待退款40]
  K3 --> K4
  K2 -->|resolveTicket| K4
  K4 -->|closeTicket| K5[已关闭60]
  K1 -->|cancelTicket| K9[已取消99]
  K2 -->|cancelTicket| K9
  PM[数据权限 bizType+bizId+userId+级别 è´Ÿè´£äººåªè¯»è¯»å†™Â·æˆ‘负责我参与下属全部四视图] --- K1
</pre>
<pre style="display:none" class="mmd-src" data-mmd="08-module-relation">
flowchart LR
  MDM[MDM ä¸»æ•°æ® ç‰©æ–™å•位仓库品牌分类] --> MES[MES ç”Ÿäº§Â·ä»“储·质量·设备]
  MDM --> ERP[ERP é‡‡è´­Â·é”€å”®Â·è´¢åŠ¡]
  MDM --> CRM
  CRM[CRM çº¿ç´¢å®¢æˆ·å•†æœºæŠ¥ä»·åˆåŒå›žæ¬¾] -->|合同生成销售订单| ERP
  SRM[SRM ä¾›åº”商准入资质证书招标绩效] -->|定标生成采购订单| ERP
  ERP -->|确认收货生成到货通知| MES
  ERP -->|销售订单审批生成MPS| MES
  MES -->|入库出库回写单据进度| ERP
  MES -->|ProductionFinishedEvent| ERP
  MES -->|退货质检入库回调| AS[售后工单维修退货]
  CRM -->|客户主数据| AS
  HRM[HRM å‘˜å·¥å…¥è½¬è°ƒç¦»äº¤æŽ¥è€ƒå‹¤è–ªé…¬] -.->|expandUserIds æ•°æ®å¯è§æ€§æ‰©å±•·接口已就绪待各模块接入| CRM
  BPM[BPM Flowable å®¡æ‰¹å¼•擎] -.->|状态事件回调·13个监听器| ERP
  BPM -.-> CRM
  BPM -.-> SRM
  BPM -.-> MES
  BPM -.-> HRM
  AI[AI å¹³å° é€šä¹‰åƒé—®+Milvus] -.->|发票OCR| ERP
  AI -.->|报价OCR| CRM
  AI -.->|质检判定与生产预测| MES
  MES --> BI[BI ç®¡ç†é©¾é©¶èˆ± SQL配置大屏]
  ERP --> BI
  CRM --> BI
  HRM --> BI
  SYS[系统底座 è®¤è¯Â·RBAC·字典·附件中心·定时任务] --- MDM
  SYS --- MES
  STG[附件中心 storage-blob+attachment å…¨æ¨¡å—统一挂附件] --- ERP
</pre>
<pre style="display:none" class="mmd-src" data-mmd="09-data-flow">
flowchart LR
  subgraph S1 [销售前端 CRM]
    CL[线索] --> CU[客户]
    CU --> BU[商机]
    BU --> QU[报价单]
    QU --> CT[合同]
    CT --> IV[开票]
    IV --> RK[回款]
    CT --> PL[回款计划]
  end
  subgraph S2 [执行链 ERP+MES]
    SO[销售订单] --> MP[MPS]
    MP --> WO[工单]
    WO --> TK[任务]
    TK --> FB[报工]
    FB --> PP[产品产出]
    PR[采购申请] --> PO[采购订单]
    PO --> AN[到货通知]
    AN --> IR[采购入库]
  end
  subgraph S3 [仓储与财务]
    ST[库存台账]
    PS[销售出库]
    RC[收款单]
    PI[采购来票] --> PA[付款单]
  end
  CT -->|generateSaleOrder å¸¦å…¥å®¢æˆ·äº§å“æŠ˜æ‰£å®šé‡‘·回写orderId| SO
  SO -->|审批通过带入 saleOrderId è¡ŒID æ•°é‡ å®¢æˆ· äº¤æœŸ| MP
  PO -->|确认收货带入订单行物料供应商数量| AN
  AN -->|IQC完成后生成·带入合格行| IR
  FB -->|BOM倒冲扣减| ST
  PP -->|IN事务入库| ST
  IR -->|IN事务入库·回写inCount| PO
  PS -->|OUT事务出库·回写outCount| SO
  FB -->|最后一道工序回写已生产数量| WO
  FB -->|ProductionFinishedEvent å›žå†™ç”Ÿäº§çŠ¶æ€| SO
  IV -->|回款强制先开票| RK
  RC -->|关联CRM客户校验| CU
  PA -->|关联来票与供应商| PI
</pre>
<pre style="display:none" class="mmd-src" data-mmd="10-business-object">
erDiagram
  crm_customer ||--o{ crm_business : "拥有商机"
  crm_business ||--o{ crm_sale_quotation : "形成报价"
  crm_sale_quotation |o--o| crm_contract : "转为合同"
  crm_contract ||--o| erp_sale_order : "生成销售订单"
  crm_contract ||--o{ crm_receivable_plan : "分期计划"
  crm_contract ||--o{ crm_invoice : "开票"
  crm_invoice ||--o{ crm_receivable : "凭票回款"
  erp_sale_order ||--o{ mes_pro_mps : "需生产行触发"
  mes_pro_mps ||--o{ mes_pro_work_order : "下发工单"
  mes_pro_work_order ||--o{ mes_pro_task : "按工序拆任务"
  mes_pro_task ||--o{ mes_pro_feedback : "报工"
  mes_pro_work_order ||--o{ mes_pro_work_order_bom : "工序投料BOM"
  erp_purchase_request ||--o{ erp_purchase_order : "生成采购订单"
  erp_purchase_order ||--o| mes_wm_arrival_notice : "确认收货"
  mes_wm_arrival_notice ||--o| mes_qc_iqc : "触发IQC"
  mes_wm_arrival_notice ||--o{ mes_wm_item_receipt : "生成采购入库"
  erp_sale_order ||--o{ mes_wm_product_sales : "销售出库"
  mes_wm_product_sales ||--o| mes_qc_oqc : "触发OQC"
  mes_pro_feedback ||--o| mes_qc_ipqc : "质检工序触发IPQC"
  mes_pro_feedback ||--o{ mes_wm_product_produce : "产出入库"
  mes_pro_feedback ||--o{ mes_wm_item_consume : "BOM倒冲消耗"
  mes_qc_iqc ||--o| mes_qc_ncr : "不合格生成NCR"
  mes_wm_item_receipt ||--o{ mes_wm_material_stock : "库存增加"
  mes_wm_material_stock ||--o{ mes_wm_transaction : "事务流水"
  mes_wm_material_stock }o--|| mes_wm_batch : "按批次"
  after_sale_ticket ||--o{ after_sale_return : "退货申请"
  after_sale_return ||--o| mes_wm_return_sales : "生成MES退货单"
  mdm_item ||--o{ erp_sale_order_items : "销售明细"
  mdm_item ||--o{ erp_purchase_order_items : "采购明细"
  mdm_item ||--o{ mes_wm_material_stock : "库存物料"
  srm_supplier ||--o{ erp_purchase_order : "供货"
  srm_supplier ||--o{ mes_wm_arrival_notice : "到货来源"
  erp_purchase_order ||--o{ erp_purchase_invoice : "来票"
  erp_purchase_invoice ||--o{ erp_finance_payment : "付款"
  hrm_employee ||--o| hrm_user_handover : "离职交接映射"
</pre>
<pre style="display:none" class="mmd-src" data-mmd="11-ai-business-flow">
flowchart TD
  U1[采购员上传发票文件 blobId] --> O1{文件类型}
  O1 -->|图片 png/jpg/gif/bmp| O2[chatWithImage å¤šæ¨¡æ€è§†è§‰æ¨¡åž‹]
  O1 -->|PDF| O3[PDFBox æŠ½å–文本 â†’ chat]
  O1 -->|txt/csv| O4[直读文本 â†’ chat]
  O2 --> O5[JSON å‘票号 æŠ¬å¤´ ä¾›åº”商 é‡‘额 ç¨Žçއ æ—¥æœŸ]
  O3 --> O5
  O4 --> O5
  O5 --> O6[预填采购来票表单·人工确认]
  Q1[销售上传报价单 PDF/Word/Excel/图片] --> Q2[POI/PDFBox/视觉识别]
  Q2 --> Q3[JSON æŠ¥ä»·å¤´+产品明细行] --> Q4[预填报价单表单]
  J1[质检单头+指标结果+缺陷记录] --> J2[业务侧组装Prompt â†’ chat]
  J2 --> J3[MdmItemApi ç‰©æ–™åÂ·SrmSupplierApi ä¾›åº”商名·CrmCustomerApi å®¢æˆ·å æ‹¼å…¥ä¸Šä¸‹æ–‡]
  J3 --> J4[建议结果:合格/特采/退货/报废+理由+要点]
  J4 --> J5[质检员参考判定·AI不可用时提示人工判定]
  R1[工单BOM+库存可用量+已投料] --> R2[物料短缺预测·风险等级与缺口清单]
  R3[工序标准工时+设备每小时产量+传送倍率] --> R4[生产时长预测]
  R5[IPQC缺陷率+设备保养点检+物料可用率+关键工序] --> R6[生产风险预测]
  R7[进度+剩余天数+任务完成状态+客户交期] --> R8[交付预测·能否按时+置信度+延误因素]
  KB1[知识库文档上传URL] --> KB2[POI/Tika提取文本] --> KB3[切片约800tokens→向量化→Milvus]
  KB3 --> KB4[分段检索接口 topK+相似度阈值]
  KB4 -.-> KB5[暂未接入业务问答流程·待确认]
  MODE[模型层:通义千问为主·预留DeepSeek/OpenAI/Ollama未实现] --- O2
  NOTE[全项目无Function Calling·AI只输出结构化JSON由业务侧解析] --- J2
</pre>
<script type="module">
const DATA = {};
async function loadJson(key){
  try{
    const r = await fetch('data/' + (key==='business'?'business':key) + '.json', {cache:'no-store'});
    if(r.ok) return await r.json();
  }catch(e){}
  return JSON.parse(document.getElementById('data-'+key).textContent);
}
function esc(s){return String(s ?? '').replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));}
const mermaid = (await import('https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs')).default;
mermaid.initialize({startOnLoad:false, theme:'dark', securityLevel:'loose',
  themeVariables:{fontFamily:'"Segoe UI","Microsoft YaHei",sans-serif',fontSize:'13px'},
  flowchart:{useMaxWidth:true, htmlLabels:true}});
const mmdSrc = {};
document.querySelectorAll('pre.mmd-src').forEach(p=>{ mmdSrc[p.dataset.mmd]=p.textContent.trim(); });
const flowColor = {sales:'var(--c-sale)',purchase:'var(--c-erp)',production:'var(--c-prod)',quality:'var(--c-qc)',warehouse:'var(--c-wm)',aftersales:'var(--c-as)',ai:'var(--c-ai)'};
async function boot(){
  DATA.business = await loadJson('business');
  DATA.modules  = await loadJson('modules');
  DATA.objects  = await loadJson('objects');
  DATA.flows    = await loadJson('flows');
  DATA.roles    = await loadJson('roles');
  const b = DATA.business.project, s = DATA.business.stats;
  document.getElementById('hProject').textContent = b.name + ' Â· ä¸šåŠ¡å…¨æ™¯';
  document.getElementById('hSub').textContent = b.type + ' | ' + b.mainSystem;
  document.getElementById('footer').innerHTML = DATA.business.analysisBasis + ' Â· ç”ŸæˆäºŽ ' + DATA.business.generatedAt + ' Â· ç»´æŠ¤è¯·èµ°æŠ€èƒ½ project-business-analysis';
  renderOverview(); renderFlows(); renderObjects(); renderRoles(); renderAI(); renderPending();
  bindNav(); bindSearch(); bindFigToolbar();
  showPage('overview');
}
function renderOverview(){
  const b = DATA.business.project, s = DATA.business.stats;
  const answers = DATA.business.businessAnswers;
  let html = `
  <h2 class="pt">${esc(b.name)}</h2>
  <p class="desc">${esc(b.description)}</p>
  <div class="banner">
    <div class="small muted" style="margin-bottom:4px">核心业务主线</div>
    <div class="chain"><b>主线</b> ${esc(b.coreChain)}</div>
  </div>
  <div class="grid stats">
    <div class="stat"><b>${s.businessModules}</b><span>业务模块</span></div>
    <div class="stat"><b>${s.coreObjects}</b><span>核心业务对象</span></div>
    <div class="stat"><b>${s.documentFlows}</b><span>端到端业务流程</span></div>
    <div class="stat"><b>${s.approvalListeners}</b><span>BPM å®¡æ‰¹ç›‘听器</span></div>
    <div class="stat"><b>${s.aiCapabilities}</b><span>AI èƒ½åŠ›</span></div>
    <div class="stat"><b>${s.wmBillTypes}</b><span>仓储出入库单据类型</span></div>
  </div>
  <h3 class="sec">业务模块</h3>
  <div class="grid cards">`;
  const targets = {crm:'flow-sales',erp:'flow-purchase',pro:'flow-production',wm:'flow-warehouse',qc:'flow-quality',aftersales:'flow-aftersales',ai:'ai',srm:'flow-purchase',mdm:'objects',dv:'objects',hrm:'objects',bpm:'relation'};
  const accs = {mdm:'var(--c-base)',crm:'var(--c-sale)',srm:'var(--c-sup)',erp:'var(--c-erp)',pro:'var(--c-prod)',wm:'var(--c-wm)',qc:'var(--c-qc)',dv:'var(--c-dv)',aftersales:'var(--c-as)',hrm:'var(--c-hrm)',bpm:'var(--c-bpm)',ai:'var(--c-ai)'};
  DATA.modules.modules.forEach(m=>{
    html += `<div class="card" style="--acc:${accs[m.key]||'#2c5cff'}" data-goto="${targets[m.key]||'panorama'}">
      <h3>${esc(m.name)}<span class="tag">${esc(m.tag)}</span></h3>
      <p>${esc(m.positioning)} â€” ${esc(m.problem)}</p>
      <div class="objs">核心对象:${esc(m.objects.slice(0,6).join('、'))}${m.objects.length>6?' ç­‰':''}</div>
      <div class="objs">上游 ${esc(m.upstream.join('、')||'—')} â†’ ä¸‹æ¸¸ ${esc(m.downstream.join('、')||'—')}</div>
    </div>`;
  });
  html += `</div><h3 class="sec">业务十问(准确性自检)</h3><div class="grid cards">`;
  answers.forEach(([q,a])=>{ html += `<div class="card" style="cursor:default"><h3 style="font-size:13.5px">${esc(q)}</h3><p style="color:#b9c8dc">${esc(a)}</p></div>`; });
  html += `</div>`;
  document.getElementById('overview').innerHTML = html;
  document.querySelectorAll('#overview .card[data-goto]').forEach(c=>c.addEventListener('click',()=>showPage(c.dataset.goto)));
}
function flowFigHtml(f, name){
  return `<div class="fig" style="--acc:${flowColor[f.id]||'#2c5cff'}">
      <div class="bar"><span class="name">${esc(name||f.name)} Â· ${esc(f.mermaid)}</span>
        <div class="btns"><button data-z="-">-</button><button data-z="+">+</button><button data-z="0">重置</button><button data-fs>全屏</button></div></div>
      <div class="canvas"><div class="stage mermaid-wrap"><pre class="mermaid" data-mmd="${f.mermaid.replace(/^mermaid\//,'').replace(/\.mmd$/,'')}"></pre></div></div>
    </div>`;
}
function flowStepsHtml(f){
  return `<h3 class="sec">步骤与角色</h3>
    <table class="steps" style="--acc:${flowColor[f.id]||'#7ea6e8'}"><tr><th>阶段</th><th>动作(含真实状态流转)</th><th>角色</th></tr>
    ${f.steps.map(st=>`<tr><td class="stage">${esc(st.stage)}</td><td>${esc(st.action)}</td><td class="role">${esc(st.roles.join('、'))}</td></tr>`).join('')}
    </table>`;
}
function renderFlows(){
  DATA.flows.flows.forEach(f=>{
    if(f.id==='ai') return;
    const sec = document.getElementById('flow-'+f.id);
    if(!sec) return;
    sec.innerHTML = `<h2 class="pt">${esc(f.name)}</h2><p class="desc">${esc(f.summary)}</p>${flowFigHtml(f)}${flowStepsHtml(f)}`;
  });
}
function renderObjects(){
  const groups = {};
  DATA.objects.objects.forEach(o=>{ (groups[o.module]=groups[o.module]||[]).push(o); });
  let html = `<h3 class="sec">对象清单(${DATA.objects.objects.length})</h3>
  <table class="data"><tr><th style="width:120px">对象</th><th style="width:110px">所属模块</th><th>作用</th><th style="width:190px">表名</th></tr>`;
  DATA.objects.objects.forEach((o,i)=>{
    html += `<tr data-obj="${i}"><td><b style="color:#fff">${esc(o.name)}</b></td><td class="muted">${esc(o.module)}</td><td>${esc(o.doc)}</td><td class="small muted">${esc(o.table||'—')}</td></tr>`;
  });
  html += `</table>`;
  document.getElementById('objGrid').innerHTML = html;
  document.querySelectorAll('#objGrid tr[data-obj]').forEach(tr=>tr.addEventListener('click',()=>{
    const o = DATA.objects.objects[+tr.dataset.obj];
    document.getElementById('objDetail').innerHTML = `
      <h4>${esc(o.name)} <span class="muted small">· ${esc(o.module)}${o.table?' Â· è¡¨ '+esc(o.table):''}</span></h4>
      <div class="kv"><b>作用</b>${esc(o.doc)}</div>
      <div class="kv"><b>上游</b>${esc((o.upstream&&o.upstream.length)?o.upstream.join('、'):'—')}</div>
      <div class="kv"><b>下游</b>${esc((o.downstream&&o.downstream.length)?o.downstream.join('、'):'—')}</div>`;
    document.getElementById('objDetail').scrollIntoView({behavior:'smooth',block:'nearest'});
  }));
}
function renderRoles(){
  const rs = DATA.roles;
  let html = `<h2 class="pt">角色与权限</h2><p class="desc">${esc(rs.note)}</p>
  <h3 class="sec">业务角色 â†’ å¯æ“ä½œä¸šåŠ¡ â†’ äº§ç”Ÿæ•°æ®</h3>
  <table class="data"><tr><th style="width:150px">角色</th><th style="width:130px">模块</th><th>操作</th><th style="width:180px">数据范围/机制</th></tr>
  ${rs.businessRoles.map(r=>`<tr><td><b style="color:#fff">${esc(r.role)}</b></td><td class="muted">${esc(r.modules.join('、'))}</td><td>${esc(r.operations.join(';'))}</td><td class="small">${esc(r.scope)}</td></tr>`).join('')}
  </table>
  <h3 class="sec">底座能力</h3>
  <div class="grid cards">${DATA.modules.platform.capabilities.map(c=>`<div class="card" style="cursor:default"><p style="color:#b9c8dc">${esc(c)}</p></div>`).join('')}</div>
  <p class="small muted" style="margin-top:10px">未启用模块:${esc(DATA.modules.platform.unused.join(';'))}</p>`;
  document.getElementById('roles').innerHTML = html;
}
function renderAI(){
  const aiFlow = DATA.flows.flows.find(f=>f.id==='ai');
  document.getElementById('ai').insertAdjacentHTML('afterbegin',
    (aiFlow? flowFigHtml(aiFlow) + flowStepsHtml(aiFlow) : '') );
  document.getElementById('aiGrid').innerHTML = DATA.business.aiCapabilities.map(a=>`
    <div class="card" style="--acc:var(--c-ai);cursor:default">
      <h3>${esc(a.name)}<span class="tag">AI</span></h3>
      <p>${esc(a.flow)}</p>
      ${a.callsApis&&a.callsApis.length?`<div class="objs">调用:${esc(a.callsApis.join(' Â· '))}</div>`:''}
    </div>`).join('');
}
function renderPending(){
  document.getElementById('pendingList').innerHTML = DATA.business.pendingConfirm.map(p=>`<li>${esc(p)}</li>`).join('');
}
// æ¸²æŸ“排队:同一时刻只跑一个 mermaid.run,避免快速切换导航时图表在隐藏容器里布局(产生 NaN transform)
let renderQueue = Promise.resolve();
function showPage(id){
  document.querySelectorAll('nav a').forEach(a=>a.classList.toggle('active', a.dataset.t===id));
  document.querySelectorAll('section.page').forEach(s=>s.classList.toggle('on', s.id===id));
  const sec = document.getElementById(id);
  const todo = sec ? [...sec.querySelectorAll('pre.mermaid[data-mmd]')].filter(p=>!p.dataset.done) : [];
  if(todo.length){
    renderQueue = renderQueue.then(async()=>{
      if(!sec.classList.contains('on')) return; // ç”¨æˆ·å·²åˆ‡èµ°ï¼Œä¸‹æ¬¡è¿›å…¥å†æ¸²æŸ“
      todo.forEach(p=>{ if(mmdSrc[p.dataset.mmd]) p.textContent = mmdSrc[p.dataset.mmd]; p.removeAttribute('data-processed'); });
      try{ await mermaid.run({nodes: todo}); }
      catch(e){ todo.forEach(p=>p.textContent = 'Mermaid æ¸²æŸ“失败:'+e.message); return; }
      if(sec.classList.contains('on')) todo.forEach(p=>p.dataset.done='1');
    });
  }
  window.scrollTo(0,0);
}
function bindNav(){
  document.querySelectorAll('nav a').forEach(a=>a.addEventListener('click',()=>showPage(a.dataset.t)));
  document.addEventListener('click',e=>{
    const card=e.target.closest('.card[data-goto]');
    if(card) showPage(card.dataset.goto);
  });
}
function bindFigToolbar(){
  document.addEventListener('click',e=>{
    const btn=e.target.closest('.fig button');
    if(!btn) return;
    const fig=btn.closest('.fig'), stage=fig.querySelector('.stage');
    let z=parseFloat(stage.dataset.z||'1');
    if(btn.dataset.z==='+'||btn.dataset.z==='-') z=Math.min(3,Math.max(.4, z + (btn.dataset.z==='+'?.2:-.2)));
    else if(btn.dataset.z==='0') z=1;
    stage.dataset.z=z; stage.style.transform='scale('+z+')';
    if(btn.hasAttribute('data-fs')){
      if(document.fullscreenElement) document.exitFullscreen();
      else fig.requestFullscreen();
    }
  });
}
function bindSearch(){
  const input=document.getElementById('globalSearch'), box=document.getElementById('searchResult');
  const items=[];
  DATA.objects.objects.forEach(o=>items.push({type:'业务对象',name:o.name,meta:o.module+' Â· '+o.doc,go:()=>{showPage('objects');const idx=DATA.objects.objects.indexOf(o);const tr=document.querySelector('#objGrid tr[data-obj="'+idx+'"]');if(tr)tr.click();}}));
  DATA.flows.flows.forEach(f=>items.push({type:'业务流程',name:f.name,meta:f.summary.slice(0,60)+'…',go:()=>showPage('flow-'+f.id)}));
  DATA.modules.modules.forEach(m=>items.push({type:'业务模块',name:m.name,meta:m.positioning,go:()=>showPage('overview')}));
  DATA.roles.businessRoles.forEach(r=>items.push({type:'角色',name:r.role,meta:r.modules.join('、'),go:()=>showPage('roles')}));
  input.addEventListener('input',()=>{
    const q=input.value.trim().toLowerCase();
    if(!q){box.style.display='none';return;}
    const hit=items.filter(i=>(i.name+i.meta).toLowerCase().includes(q)).slice(0,15);
    box.innerHTML = hit.length? hit.map((h,i)=>`<div class="sr-item" data-i="${i}"><div>${esc(h.name)} <span class="sr-type">${esc(h.type)}</span></div><div class="sr-meta">${esc(h.meta)}</div></div>`).join('') : '<div class="sr-item"><span class="muted">无匹配结果</span></div>';
    box.style.display='block';
    box.querySelectorAll('.sr-item[data-i]').forEach(el=>el.addEventListener('click',()=>{hit[+el.dataset.i].go();box.style.display='none';input.value='';}));
  });
  document.addEventListener('click',e=>{ if(!e.target.closest('#globalSearchWrap')) box.style.display='none'; });
}
await boot();
</script>
</body>
</html>
docs/project-business/mermaid/01-business-mindmap.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
mindmap
  root((MOM å·¥åŽ‚æ•°å­—åŒ–å¹³å°))
    åŸºç¡€ä¸»æ•°æ® MDM
      ç‰©æ–™ä¸ŽSKU
      ç‰©æ–™åˆ†ç±»
      è®¡é‡å•位与品牌
      ä»“库主数据
    é”€å”®ç®¡ç† CRM
      çº¿ç´¢
      å®¢æˆ·ä¸Žè”系人
      å•†æœºä¸Žé˜¶æ®µ
      æŠ¥ä»·å•
      é”€å”®åˆåŒ
      å¼€ç¥¨ä¸Žå›žæ¬¾
      é”€å”®ç›®æ ‡
      æ•°æ®æƒé™ä¸Žå…¬æµ·
    ä¾›åº”商管理 SRM
      ä¾›åº”商档案
      å‡†å…¥å®¡æ‰¹
      èµ„质证书
      æ‹›æ ‡ä¸Žæ¯”ä»·
      ç»©æ•ˆè¯„ä»·
    è¿›é”€å­˜ä¸Žè´¢åŠ¡ ERP
      é‡‡è´­ç”³è¯·
      é‡‡è´­è®¢å•
      é‡‡è´­æ¥ç¥¨
      é”€å”®è®¢å•
      ä»˜æ¬¾å•
      æ”¶æ¬¾å•
      ç»“算账户
    ç”Ÿäº§ç®¡ç† MES
      ä¸»ç”Ÿäº§è®¡åˆ’ MPS
      ç”Ÿäº§å·¥å•
      ç”Ÿäº§ä»»åŠ¡
      ç”Ÿäº§æŠ¥å·¥
      å·¥è‰ºè·¯çº¿ä¸Žå·¥åº
      å·¥å•BOM
      ç ”发设计项目
      å®‰ç¯
    ä»“储管理 MES-WM
      ä»“库库区库位
      åˆ°è´§é€šçŸ¥
      é‡‡è´­å…¥åº“
      ç”Ÿäº§é¢†æ–™ä¸Žé€€æ–™
      ç”Ÿäº§å…¥åº“
      é”€å”®å‡ºåº“与退货
      è½¬ç§»è°ƒæ‹¨
      ç›˜ç‚¹
      åº“存台账与事务
      æ‰¹æ¬¡SN条码装箱
    è´¨é‡ç®¡ç† MES-QC
      IQC æ¥æ–™æ£€éªŒ
      IPQC è¿‡ç¨‹æ£€éªŒ
      OQC å‡ºè´§æ£€éªŒ
      RQC é€€è´§æ£€éªŒ
      NCR ä¸åˆæ ¼å“
      è´¨æ£€æ–¹æ¡ˆä¸ŽæŒ‡æ ‡ç¼ºé™·
    è®¾å¤‡ä¸ŽæŽ’班
      è®¾å¤‡å°è´¦
      ç‚¹æ£€ä¸Žä¿å…»
      ç»´ä¿®å·¥å•
      å·¥è£…夹具
      ç­ç»„班次与排班
    å”®åŽæœåŠ¡
      å”®åŽå·¥å•
      ç»´ä¿®è®°å½•
      é€€è´§ç”³è¯·
      æ•°æ®æƒé™
    äººåŠ›èµ„æº HRM
      å‘˜å·¥æ¡£æ¡ˆ
      è¯·å‡åŠ ç­è°ƒå²—ç¦»èŒ
      ç¦»èŒäº¤æŽ¥æ˜ å°„
      è€ƒå‹¤æŽ’班汇总
      è–ªé…¬æ ¸ç®—与发放
    ååŒå®¡æ‰¹ BPM
      Flowable å¼•擎
      ä¸šåŠ¡çŠ¶æ€å›žè°ƒç›‘å¬
    AI æ™ºèƒ½
      å‘票OCR识别
      æŠ¥ä»·å•OCR识别
      è´¨æ£€ç»“果判定
      ç‰©æ–™çŸ­ç¼ºé¢„测
      ç”Ÿäº§æ—¶é•¿ä¸Žé£Žé™©é¢„测
      äº¤ä»˜é¢„测
      RAG çŸ¥è¯†åº“
    BI ä¸Žç®¡ç†é©¾é©¶èˆ±
      SQL é…ç½®å¼å¤§å±
      é‡‡è´­é”€å”®åº“存生产质量人力主题
    ç³»ç»Ÿåº•座
      è®¤è¯ä¸ŽRBAC
      æ•°æ®æƒé™
      å­—å…¸
      é™„件中心
      å®šæ—¶ä»»åŠ¡ä¸Žæ¶ˆæ¯
docs/project-business/mermaid/02-sales-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
flowchart TD
  A[线索 crm_clue] -->|转化·仅一次| B[客户 crm_customer]
  B --> C[联系人 crm_contact]
  B --> D[商机 crm_business]
  D -->|自定义阶段推进| E{商机结束}
  E -->|赢单| F[报价单 QT·草稿0→已转合同10]
  E -->|输单或无效| X[结束]
  F -->|转合同·带入客户产品折扣| G[合同 HT·草稿0→审批中10]
  D -->|直接建合同| G
  G -->|BPM审批通过20| H[生成 ERP é”€å”®è®¢å• XSDD]
  H -->|提交BPM| I[销售订单审批·审批中15→已审核20]
  I -->|明细需生产·自动创建| J[MES ä¸»ç”Ÿäº§è®¡åˆ’ MPS]
  I --> K[发货通知单]
  K -->|审核通过| L[销售出库单·OQC→拣货→发运→出库完成]
  L -->|回写出库数量与状态| M[销售订单 éƒ¨åˆ†å‡ºåº“2/全部出库3]
  G --> N[回款计划·按期数分期]
  G -->|提交BPM| O[开票 KP·审批中10→通过20·累计不超合同额]
  O -->|回款前必须先开票| P[回款 HK·创建即审批中10→手动审核20]
  P -->|校验合同剩余额与开票剩余额| N
docs/project-business/mermaid/03-purchase-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
flowchart TD
  S0[SRM å‡†å…¥ç”³è¯· AP·待提交0→审批中10→已通过40] --> S1[供应商档案 srm_supplier]
  S1 --> S2[资质证书管理]
  S1 --> S3[绩效评价·质量交付价格服务四维]
  S4[SRM æ‹›æ ‡æ¯”价·发布→投标→开标→评标→定标] -->|定标审批通过生成订单| C3
  C1[采购申请 CGSQ·草稿0→审批中10] -->|提交BPM| C2{审批}
  C2 -->|驳回30→可重置回草稿| C1
  C2 -->|通过20且有供应商·自动生成| C3[采购订单 CGDD·审批中15→已审核20]
  C2 -->|通过20无供应商| C4[手动指定供应商生成订单]
  C4 --> C3
  C3 -->|确认收货| C5[到货通知单·草稿0→待质检2→待入库3→完成4]
  C5 -->|物料需检验·自动创建| C6[IQC æ¥æ–™æ£€éªŒ]
  C6 -->|合格1或特采2 å¯å…¥åº“| C7[采购入库单·草稿0→待上架2→待执行3→完成4]
  C6 -->|不合格退货3| C8[供应商退货·待拣货→待执行→完成·库存扣减]
  C6 -->|不合格报废4| C9[NCR ä¸åˆæ ¼å“å¤„ç½®]
  C7 -->|回写 inCount ä¸Ž inStatus æœªå…¥åº“0部分1全部2| C3
  C7 -->|回写申请明细 inCount| C1
  C3 -->|订单总价控制| C10[采购来票 FPD·累计金额≤订单总价]
  C10 -->|付款单必须关联来票| C11[付款单 FKD·审批中15→已审核20·累计付款≤来票金额]
docs/project-business/mermaid/04-production-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
flowchart TD
  P0[销售订单明细 needProduction=1] -->|审批通过自动创建| P1[MPS ä¸»ç”Ÿäº§è®¡åˆ’·草稿0→已下发1]
  P1 -->|下发或合并下发| P2[生产工单·草稿0→已确认1]
  P2 -->|按工艺路线工序自动生成| P3[生产任务×N·预备0→生产中1→部分完成2→完成4·可暂停9]
  P3 --> P4[生产领料 æˆ– çº¿è¾¹è™šæ‹Ÿåº“备料]
  P4 --> P5[报工提交·草稿0]
  P5 -->|校验:上一道工序未报满则拦截| P5
  P5 -->|启用BPM则提交审批| P6{报工审批}
  P6 -->|驳回| P5
  P6 -->|通过且倒冲工序| P7[按工单BOM自动生成物料消耗·扣线边虚拟库FIFO允许负库存]
  P6 -->|通过且质检工序| P8[产出行待检→IPQC è¿‡ç¨‹æ£€éªŒ]
  P6 -->|通过且非质检关键工序| P9[产品产出直接完工入库]
  P8 -->|检验合格| P10[拆合格与不合格行入库]
  P8 -->|不合格| P11[NCR ä¸åˆæ ¼å“]
  P9 --> P12[进度回写·仅最后一道工序报工才更新工单已生产数量]
  P10 --> P12
  P12 -->|已生产数量≥计划数量·自动| P13[工单完成2]
  P12 -->|累计| P14[MPS å›žå†™å·²ç”Ÿäº§æ•°é‡å¹¶åˆ¤æ–­å®Œæˆ2]
  P14 -->|全部完成| P15[发布 ProductionFinishedEvent→回写销售订单生产状态]
docs/project-business/mermaid/05-quality-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
flowchart TD
  T1[到货通知单 æˆ– å¤–协入库单] --> A1[IQC æ¥æ–™æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T2[报工质检工序通过后产出行] --> A2[IPQC è¿‡ç¨‹æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T3[销售出库单提交] --> A3[OQC å‡ºè´§æ£€éªŒÂ·è‰ç¨¿0→完成4]
  T4[生产退料单 æˆ– é”€å”®é€€è´§å• æˆ– å”®åŽé€€è´§] --> A4[RQC é€€è´§æ£€éªŒÂ·è‰ç¨¿0→完成4]
  A1 --> R{检验判定 MesQcCheckResultEnum}
  A2 --> R
  A3 --> R
  A4 --> R
  R -->|1 åˆæ ¼| Q1[允许入库·回写来源单据推进状态]
  R -->|2 ç‰¹é‡‡| Q2[允许入库·并生成NCR留痕]
  R -->|3 ä¸åˆæ ¼é€€è´§| Q3[生成NCR·走供应商退货或销售退货]
  R -->|4 ä¸åˆæ ¼æŠ¥åºŸ| Q4[生成NCR·走报废出库]
  A2 -->|合格数量| Q5[报工转完成·产出拆行入库]
  A3 -->|完成| Q6[销售出库单推进待拣货]
  A4 -->|完成| Q7[退货单推进上架或入库·售后回调结论]
  N1[NCR å¾…评审0] -->|评审| N2[已评审6]
  N2 -->|处置方式:退货1报废2返工3让步接收4降级使用5| N3[已处置7]
  N3 -->|关闭| N4[已关闭8]
  Q8[支撑数据:质检方案·检验指标·缺陷库·指标结果] --- A1
docs/project-business/mermaid/06-warehouse-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
flowchart LR
  subgraph INB [入库·事务IN·库存加]
    I1[采购入库]
    I2[生产入库单]
    I3[报工产出自动入库]
    I4[销售退货入库]
    I5[外协入库]
    I6[杂项入库]
  end
  subgraph OUTB [出库·事务OUT·库存减]
    O1[销售出库]
    O2[生产领料]
    O3[物料消耗倒冲·允许负库存]
    O4[外协发料]
    O5[生产退料回仓]
    O6[供应商退货]
    O7[杂项出库·调整或报废]
  end
  W[(库存台账 mes_wm_material_stock ç‰©æ–™Ã—仓库×库区×库位×批次×供应商)]
  INB -->|getOrCreate åŠ æ•°é‡| W
  OUTB -->|校验可用量后扣减| W
  W -->|占用预留 reservedQuantity| RES[库存占用 é”€å”®å‡ºåº“·领料·外协·杂项·调拨]
  MV[转移调拨·内部或外部] -->|成对事务 MOVE_OUT+MOVE_IN åœ¨é€”| W
  ST[盘点 æ–¹æ¡ˆâ†’任务→明细行→结果] -->|盘盈 ADJUST_IN·盘亏 ADJUST_OUT·可冻结库存| W
  W --> TX[事务流水 mes_wm_transaction åªè¯»å…¨é‡ç•™ç—•]
  BT[批次 mes_wm_batch·SN码·条码·装箱嵌套] --- W
  WIP[[线边虚拟库 WIP_VIRTUAL_WAREHOUSE·懒初始化]] --- O3
  FR[四级冻结:仓库·库区·库位·库存记录] --- W
docs/project-business/mermaid/07-after-sales-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
flowchart TD
  F1[客户反馈·后台人工录入工单·关联客户联系人销售订单合同] --> K1[售后工单·草稿0]
  K1 -->|assignTicket åˆ†é…å¤„理人| K2[处理中10·问题判定:一般1ç»´ä¿®2退货3·严重度0-3]
  K2 -->|维修类| R1[维修记录·待处理0→维修中10→已完成20→已关闭30·现场返厂远程]
  R1 -->|completeRepair| K4[已完结50]
  K2 -->|退货类创建退货申请| T1[退货申请·草稿0]
  T1 -->|approveReturn å®¡æ ¸é€šè¿‡| T2[已审核20·自动创建MES销售退货单]
  T2 --> T3[MES é”€å”®é€€è´§Â·è‰ç¨¿â†’待检验RQC→待上架→待入库→完成]
  T3 -->|质检结论回调 onReturnQualityFinished åˆæ ¼ç‰¹é‡‡é€€è´§æŠ¥åºŸ| T4[已质检40]
  T3 -->|入库完成回调 onReturnInboundFinished| T5[已入库50]
  T5 -->|退款完成回调 onRefundCompleted è®°å½•实际退款额| T6[已退款60]
  T6 --> T7[已关闭70]
  T2 -.->|状态流转中| T8[审核中10·预留未启用]
  K2 -->|退货链路联动工单| K3[待入库30→待退款40]
  K3 --> K4
  K2 -->|resolveTicket| K4
  K4 -->|closeTicket| K5[已关闭60]
  K1 -->|cancelTicket| K9[已取消99]
  K2 -->|cancelTicket| K9
  PM[数据权限 bizType+bizId+userId+级别 è´Ÿè´£äººåªè¯»è¯»å†™Â·æˆ‘负责我参与下属全部四视图] --- K1
docs/project-business/mermaid/08-module-relation.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
flowchart LR
  MDM[MDM ä¸»æ•°æ® ç‰©æ–™å•位仓库品牌分类] --> MES[MES ç”Ÿäº§Â·ä»“储·质量·设备]
  MDM --> ERP[ERP é‡‡è´­Â·é”€å”®Â·è´¢åŠ¡]
  MDM --> CRM
  CRM[CRM çº¿ç´¢å®¢æˆ·å•†æœºæŠ¥ä»·åˆåŒå›žæ¬¾] -->|合同生成销售订单| ERP
  SRM[SRM ä¾›åº”商准入资质证书招标绩效] -->|定标生成采购订单| ERP
  ERP -->|确认收货生成到货通知| MES
  ERP -->|销售订单审批生成MPS| MES
  MES -->|入库出库回写单据进度| ERP
  MES -->|ProductionFinishedEvent| ERP
  MES -->|退货质检入库回调| AS[售后工单维修退货]
  CRM -->|客户主数据| AS
  HRM[HRM å‘˜å·¥å…¥è½¬è°ƒç¦»äº¤æŽ¥è€ƒå‹¤è–ªé…¬] -.->|expandUserIds æ•°æ®å¯è§æ€§æ‰©å±•·接口已就绪待各模块接入| CRM
  BPM[BPM Flowable å®¡æ‰¹å¼•擎] -.->|状态事件回调·13个监听器| ERP
  BPM -.-> CRM
  BPM -.-> SRM
  BPM -.-> MES
  BPM -.-> HRM
  AI[AI å¹³å° é€šä¹‰åƒé—®+Milvus] -.->|发票OCR| ERP
  AI -.->|报价OCR| CRM
  AI -.->|质检判定与生产预测| MES
  MES --> BI[BI ç®¡ç†é©¾é©¶èˆ± SQL配置大屏]
  ERP --> BI
  CRM --> BI
  HRM --> BI
  SYS[系统底座 è®¤è¯Â·RBAC·字典·附件中心·定时任务] --- MDM
  SYS --- MES
  STG[附件中心 storage-blob+attachment å…¨æ¨¡å—统一挂附件] --- ERP
docs/project-business/mermaid/09-data-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
flowchart LR
  subgraph S1 [销售前端 CRM]
    CL[线索] --> CU[客户]
    CU --> BU[商机]
    BU --> QU[报价单]
    QU --> CT[合同]
    CT --> IV[开票]
    IV --> RK[回款]
    CT --> PL[回款计划]
  end
  subgraph S2 [执行链 ERP+MES]
    SO[销售订单] --> MP[MPS]
    MP --> WO[工单]
    WO --> TK[任务]
    TK --> FB[报工]
    FB --> PP[产品产出]
    PR[采购申请] --> PO[采购订单]
    PO --> AN[到货通知]
    AN --> IR[采购入库]
  end
  subgraph S3 [仓储与财务]
    ST[库存台账]
    PS[销售出库]
    RC[收款单]
    PI[采购来票] --> PA[付款单]
  end
  CT -->|generateSaleOrder å¸¦å…¥å®¢æˆ·äº§å“æŠ˜æ‰£å®šé‡‘·回写orderId| SO
  SO -->|审批通过带入 saleOrderId è¡ŒID æ•°é‡ å®¢æˆ· äº¤æœŸ| MP
  PO -->|确认收货带入订单行物料供应商数量| AN
  AN -->|IQC完成后生成·带入合格行| IR
  FB -->|BOM倒冲扣减| ST
  PP -->|IN事务入库| ST
  IR -->|IN事务入库·回写inCount| PO
  PS -->|OUT事务出库·回写outCount| SO
  FB -->|最后一道工序回写已生产数量| WO
  FB -->|ProductionFinishedEvent å›žå†™ç”Ÿäº§çŠ¶æ€| SO
  IV -->|回款强制先开票| RK
  RC -->|关联CRM客户校验| CU
  PA -->|关联来票与供应商| PI
docs/project-business/mermaid/10-business-object.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
erDiagram
  crm_customer ||--o{ crm_business : "拥有商机"
  crm_business ||--o{ crm_sale_quotation : "形成报价"
  crm_sale_quotation |o--o| crm_contract : "转为合同"
  crm_contract ||--o| erp_sale_order : "生成销售订单"
  crm_contract ||--o{ crm_receivable_plan : "分期计划"
  crm_contract ||--o{ crm_invoice : "开票"
  crm_invoice ||--o{ crm_receivable : "凭票回款"
  erp_sale_order ||--o{ mes_pro_mps : "需生产行触发"
  mes_pro_mps ||--o{ mes_pro_work_order : "下发工单"
  mes_pro_work_order ||--o{ mes_pro_task : "按工序拆任务"
  mes_pro_task ||--o{ mes_pro_feedback : "报工"
  mes_pro_work_order ||--o{ mes_pro_work_order_bom : "工序投料BOM"
  erp_purchase_request ||--o{ erp_purchase_order : "生成采购订单"
  erp_purchase_order ||--o| mes_wm_arrival_notice : "确认收货"
  mes_wm_arrival_notice ||--o| mes_qc_iqc : "触发IQC"
  mes_wm_arrival_notice ||--o{ mes_wm_item_receipt : "生成采购入库"
  erp_sale_order ||--o{ mes_wm_product_sales : "销售出库"
  mes_wm_product_sales ||--o| mes_qc_oqc : "触发OQC"
  mes_pro_feedback ||--o| mes_qc_ipqc : "质检工序触发IPQC"
  mes_pro_feedback ||--o{ mes_wm_product_produce : "产出入库"
  mes_pro_feedback ||--o{ mes_wm_item_consume : "BOM倒冲消耗"
  mes_qc_iqc ||--o| mes_qc_ncr : "不合格生成NCR"
  mes_wm_item_receipt ||--o{ mes_wm_material_stock : "库存增加"
  mes_wm_material_stock ||--o{ mes_wm_transaction : "事务流水"
  mes_wm_material_stock }o--|| mes_wm_batch : "按批次"
  after_sale_ticket ||--o{ after_sale_return : "退货申请"
  after_sale_return ||--o| mes_wm_return_sales : "生成MES退货单"
  mdm_item ||--o{ erp_sale_order_items : "销售明细"
  mdm_item ||--o{ erp_purchase_order_items : "采购明细"
  mdm_item ||--o{ mes_wm_material_stock : "库存物料"
  srm_supplier ||--o{ erp_purchase_order : "供货"
  srm_supplier ||--o{ mes_wm_arrival_notice : "到货来源"
  erp_purchase_order ||--o{ erp_purchase_invoice : "来票"
  erp_purchase_invoice ||--o{ erp_finance_payment : "付款"
  hrm_employee ||--o| hrm_user_handover : "离职交接映射"
docs/project-business/mermaid/11-ai-business-flow.mmd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
flowchart TD
  U1[采购员上传发票文件 blobId] --> O1{文件类型}
  O1 -->|图片 png/jpg/gif/bmp| O2[chatWithImage å¤šæ¨¡æ€è§†è§‰æ¨¡åž‹]
  O1 -->|PDF| O3[PDFBox æŠ½å–文本 â†’ chat]
  O1 -->|txt/csv| O4[直读文本 â†’ chat]
  O2 --> O5[JSON å‘票号 æŠ¬å¤´ ä¾›åº”商 é‡‘额 ç¨Žçއ æ—¥æœŸ]
  O3 --> O5
  O4 --> O5
  O5 --> O6[预填采购来票表单·人工确认]
  Q1[销售上传报价单 PDF/Word/Excel/图片] --> Q2[POI/PDFBox/视觉识别]
  Q2 --> Q3[JSON æŠ¥ä»·å¤´+产品明细行] --> Q4[预填报价单表单]
  J1[质检单头+指标结果+缺陷记录] --> J2[业务侧组装Prompt â†’ chat]
  J2 --> J3[MdmItemApi ç‰©æ–™åÂ·SrmSupplierApi ä¾›åº”商名·CrmCustomerApi å®¢æˆ·å æ‹¼å…¥ä¸Šä¸‹æ–‡]
  J3 --> J4[建议结果:合格/特采/退货/报废+理由+要点]
  J4 --> J5[质检员参考判定·AI不可用时提示人工判定]
  R1[工单BOM+库存可用量+已投料] --> R2[物料短缺预测·风险等级与缺口清单]
  R3[工序标准工时+设备每小时产量+传送倍率] --> R4[生产时长预测]
  R5[IPQC缺陷率+设备保养点检+物料可用率+关键工序] --> R6[生产风险预测]
  R7[进度+剩余天数+任务完成状态+客户交期] --> R8[交付预测·能否按时+置信度+延误因素]
  KB1[知识库文档上传URL] --> KB2[POI/Tika提取文本] --> KB3[切片约800tokens→向量化→Milvus]
  KB3 --> KB4[分段检索接口 topK+相似度阈值]
  KB4 -.-> KB5[暂未接入业务问答流程·待确认]
  MODE[模型层:通义千问为主·预留DeepSeek/OpenAI/Ollama未实现] --- O2
  NOTE[全项目无Function Calling·AI只输出结构化JSON由业务侧解析] --- J2