From 9bad721754fe8bbe2e5f459d0706e0fefac569f3 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 20 九月 2026 09:05:41 +0800
Subject: [PATCH] feat(mes): 添加智能质检报告功能与AI导入能力

---
 docs/project-business/index.html |  155 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 146 insertions(+), 9 deletions(-)

diff --git a/docs/project-business/index.html b/docs/project-business/index.html
index ec3a7aa..72f2500 100644
--- a/docs/project-business/index.html
+++ b/docs/project-business/index.html
@@ -201,8 +201,8 @@
     "frontend": "mom-pro2-before锛圴ue3 绠$悊鍚庡彴锛屽悓浠撳簱瀛樻斁锛屽彧璇诲弬鑰冿級"
   },
   "stats": {
-    "businessModules": 12,
-    "coreObjects": 46,
+    "businessModules": 13,
+    "coreObjects": 48,
     "documentFlows": 6,
     "approvalListeners": 13,
     "aiCapabilities": 8,
@@ -386,6 +386,14 @@
      "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": "qcreport", "name": "鏅鸿兘璐ㄦ鎶ュ憡", "color": "#b06ce0", "tag": "QC-REPORT", "flow": "quality",
+     "positioning": "鍙鍖栬璁℃姤鍛婃ā鏉� 鈫� 涓�閿嚭浠跺苟鍐荤粨鍘嗗彶鎶ュ憡",
+     "problem": "鍚勮涓氳川妫�鎶ュ憡鏍煎紡鍚勫紓锛屾帓鐗堢‖缂栫爜鏀逛竴娆″彂涓�娆$増锛涗笖鍘嗗彶鎶ュ憡蹇呴』鍙鐜般�佷笉闅忎笟鍔℃暟鎹彉鍖�",
+     "features": ["GrapesJS 鍙鍖栬璁″櫒锛堣川妫�缁勪欢璧版敞鍐屾満鍒讹紝涓嶇‖缂栫爜杩涚紪杈戝櫒锛�", "妯℃澘 + 澶氱増鏈細鑽夌0/宸插彂甯�1/宸插仠鐢�2锛屽凡鍙戝竷鐗堟湰鍐呭涓嶅彲瑕嗙洊", "缁勪欢鏁版嵁缁戝畾涓庣嫭绔嬪垽瀹氳鍒欏紩鎿庯紙绂佺敤 eval / ScriptEngine锛�", "涓庡墠绔�愬瓧瀵归綈鐨� Java 娓叉煋寮曟搸锛屽嚭绔� HTML 鍓ョ on* 浜嬩欢灞炴�т笌 javascript:/vbscript:/data: 鍗忚", "鍑轰欢鎺ュ彛锛歱review 鍙覆鏌撲笉钀藉簱涓嶆秷鑰楃紪鍙� / generate 娓叉煋+钀藉簱+鍐荤粨 data_snapshot / regenerate 鐢ㄥ喕缁撳揩鐓т笌鍚屼竴鐗堟湰閲嶆覆", "鎶ュ憡缂栧彿 QR+yyyyMMdd+4浣嶆祦姘达紝鎸夊ぉ鐙珛锛屽彲鏄惧紡鎸囧畾锛堟挒鍙蜂細鎶ュ嚭鍏蜂綋缂栧彿锛�", "缂哄彛娓呭崟鍙湪 preview/generate/regenerate 鍝嶅簲閲岃繑鍥烇紝涓嶈惤搴�", "PDF(Playwright) 褰掓。涓� MES 鍥涚璐ㄦ鍗曞綊涓�鍖栧鎺ュ緟鍚庣画杞"],
+     "objects": ["鎶ュ憡妯℃澘", "鎶ュ憡瀹炰緥"],
+     "roles": ["鎶ュ憡璁捐鍛�", "璐ㄦ鍛橈紙鍑轰欢锛�"],
+     "upstream": ["璐ㄩ噺锛堣川妫�鍗曚笂涓嬫枃锛屾湰杞敱璋冪敤鏂逛紶鍏ワ級"], "downstream": ["闄勪欢涓績锛圥DF 褰掓。路鍚庣画杞锛�", "BI"],
+     "coreTables": ["qc_report_template", "qc_report_template_version", "qc_report_instance", "qc_report_data_source", "qc_report_rule", "qc_report_render_record"]},
     {"key": "dv", "name": "璁惧涓庡伐瑁呮帓鐝�", "color": "#59a8b8", "tag": "MES-DV/TM/CAL", "flow": null,
      "positioning": "璁惧璧勪骇鍋ュ悍涓庣敓浜ц祫婧愪繚闅�",
      "problem": "璁惧鐐规淇濆吇缁翠慨鍙墽琛屻�佸伐瑁呯姸鎬佸彲鎺с�佺彮缁勬帓鐝湁渚濇嵁",
@@ -470,17 +478,19 @@
     {"name": "鐩樼偣浠诲姟", "module": "浠撳偍", "table": "mes_wm_stock_taking_task", "doc": "闈欐��/鍔ㄦ�佺洏鐐癸紝琛岀粨鏋�:姝e父/鐩樼泩(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": "閿�鍞嚭搴撴彁浜よЕ鍙戯紝瀹屾垚鎺ㄨ繘鍑哄簱鍗曞緟鎷h揣", "upstream": ["閿�鍞嚭搴撳崟"], "downstream": ["閿�鍞嚭搴撳崟(鎺ㄨ繘)"], "keywords": "OQC 鍑鸿揣妫�楠� 鍑哄巶妫�楠�"},
-    {"name": "RQC閫�璐ф楠�", "module": "璐ㄩ噺", "table": "mes_qc_rqc", "doc": "鐢熶骇閫�鏂�/閿�鍞��璐�/鍞悗閫�璐цЕ鍙戯紝缁撹鍥炶皟鍞悗", "upstream": ["閫�鏂�", "閫�璐�"], "downstream": ["閫�璐у叆搴�", "鍞悗鍥炶皟"], "keywords": "RQC 閫�璐ф楠�"},
+    {"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": "閿�鍞嚭搴撴彁浜よЕ鍙戯紝瀹屾垚鎺ㄨ繘鍑哄簱鍗曞緟鎷h揣锛涜鎿嶄綔銆屽嚭鎶ュ憡銆嶄粎鍦ㄥ凡瀹屾垚鏃跺彲瑙�", "upstream": ["閿�鍞嚭搴撳崟"], "downstream": ["閿�鍞嚭搴撳崟(鎺ㄨ繘)", "鎶ュ憡瀹炰緥(鍑烘姤鍛�)"], "keywords": "OQC 鍑鸿揣妫�楠� 鍑哄巶妫�楠� 鍑烘姤鍛�"},
+    {"name": "RQC閫�璐ф楠�", "module": "璐ㄩ噺", "table": "mes_qc_rqc", "doc": "鐢熶骇閫�鏂�/閿�鍞��璐�/鍞悗閫�璐цЕ鍙戯紝缁撹鍥炶皟鍞悗锛涜鎿嶄綔銆屽嚭鎶ュ憡銆嶄粎鍦ㄥ凡瀹屾垚鏃跺彲瑙併�傛帾杈炲凡缁熶竴涓恒�岄��璐ф楠屻�嶏紙鍘熻彍鍗曠埗椤逛笌 mes_qc_type 瀛楀吀鍐欍�岄��鏂欐楠屻�嶏紝涓庡悗绔灇涓�/琛ㄦ敞閲�/鑿滃崟鏉冮檺瀛愰」涓嶄竴鑷达紱RQC 涓夎�呴兘瑕嗙洊锛屾晠鍙栥�岄��璐ф楠屻�嶏級", "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": "鍙拌处鐘舵��:鍋滄満/鐢熶骇涓�/淇濆吇涓紱鐐规路淇濆吇路缁翠慨宸ュ崟锛汚I 椋庨櫓棰勬祴娑堣垂鍏舵暟鎹�", "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(鑷姩寤篗ES閫�璐у崟)鈫掑凡璐ㄦ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鈫抰o 鏄犲皠锛屽凡瀹屾垚20 鍚� expandUserIds 鎵╁睍浜ゆ帴浜哄彲瑙佹暟鎹紙褰撳墠鍚勪笟鍔℃ā鍧楀皻鏈疄闄呮帴鍏ヨ皟鐢級", "upstream": ["绂昏亴鐢宠"], "downstream": ["鍚勬ā鍧楁垜鐨勬暟鎹煡璇�"], "keywords": "浜ゆ帴 绂昏亴 handover expandUserIds"},
-    {"name": "鎺掔彮璁″垝", "module": "璁惧", "table": "mes_cal_plan", "doc": "鐝粍脳鐝脳鏃ユ湡鎺掔彮锛屼緵鐢熶骇涓庤�冨嫟寮曠敤", "upstream": [], "downstream": ["鐢熶骇浠诲姟", "鑰冨嫟"], "keywords": "鎺掔彮 鐝粍 鐝 鏃ュ巻"}
+    {"name": "鎺掔彮璁″垝", "module": "璁惧", "table": "mes_cal_plan", "doc": "鐝粍脳鐝脳鏃ユ湡鎺掔彮锛屼緵鐢熶骇涓庤�冨嫟寮曠敤", "upstream": [], "downstream": ["鐢熶骇浠诲姟", "鑰冨嫟"], "keywords": "鎺掔彮 鐝粍 鐝 鏃ュ巻"},
+    {"name": "鎶ュ憡妯℃澘", "module": "璐ㄦ鎶ュ憡", "table": "qc_report_template", "doc": "鏅鸿兘璐ㄦ鎶ュ憡妯℃澘锛屽惎鐢�0/鍋滅敤1锛涚敾甯冨唴瀹瑰瓨鍦� qc_report_template_version锛堣崏绋�0/宸插彂甯�1/宸插仠鐢�2锛屽凡鍙戝竷涓嶅彲瑕嗙洊锛夛紝currentVersion 鎸囧悜褰撳墠宸插彂甯冪増鏈紱婧愭枃浠剁粡 AI 瀵煎叆璇嗗埆鎴愯崏绋垮悗鐢变汉宸ョ‘璁ゆ墠鎴愪负鐗堟湰锛涘悓涓�妯℃澘閲嶅瀵煎叆鎸夈�愭浛鎹€�戝鐞嗏�斺�斿厛鍒犳棫闄勪欢锛堣繛甯� blob 琛屼笌纾佺洏鏂囦欢锛夊啀缁戞柊鐨勶紝涓嶇暀瀛ゅ効鏂囦欢锛涘垹闄ゆā鏉夸細杩炲甫娓呴檮浠�", "upstream": ["浜哄伐璁捐(GrapesJS 璁捐鍣�)", "AI 瀵煎叆鑽夌(qc-report/ai-import/draft)"], "downstream": ["妯℃澘鐗堟湰", "鎶ュ憡瀹炰緥"], "keywords": "鎶ュ憡妯℃澘 璐ㄦ鎶ュ憡 template 璁捐鍣� 鐗堟湰 AI瀵煎叆 璇嗗埆 鑽夌 婧愭枃浠舵浛鎹�"},
+    {"name": "鎶ュ憡瀹炰緥", "module": "璐ㄦ鎶ュ憡", "table": "qc_report_instance", "doc": "鍑轰欢浜х墿锛岀紪鍙� QR+yyyyMMdd+4浣嶆祦姘存寜澶╃嫭绔嬩笖涓氬姟鍞竴锛屽彲鏄惧紡鎸囧畾瑕嗙洊锛堟敞鎰� uk_report_no 涓嶅尯鍒嗚蒋鍒犻櫎锛屽垹鎺夌殑鍙蜂笉鍥炴敹锛夛紱涓ゆ潯鍑轰欢鍏ュ彛锛氶�氱敤 generate锛堣皟鐢ㄦ柟鑷甫 context锛変笌 generate-from-qc锛堟暟鎹粠 MES 璐ㄦ鍗曞彇锛屾潈闄愮爜 qc-report:instance:generate 宸插叆 system_menu id=1075416锛屼簲閬撴牎楠屾寜涓氬姟浼樺厛绾у彧鎶ョ涓�澶勶細105_000 绫诲瀷闈炴硶 / 105_001 鍗曟嵁涓嶅瓨鍦� / 105_002 鏈畬鎴� / 105_003 鏈垽瀹� / 105_005 妯℃澘绫诲瀷涓嶇 / 105_006 鏃犲彲鐢ㄦ楠岄」锛涘洓寮犺川妫�鍗曞垪琛ㄧ殑琛屾搷浣溿�屽嚭鎶ュ憡銆嶄粎鍦� status=宸插畬鎴愭椂鍙锛屽脊绐楀彧鍒� reportType 涓�鑷淬�佹ā鏉垮惎鐢ㄣ�佷笖 currentVersion 鎸囧悜鐨勭増鏈凡鍙戝竷鐨勬ā鏉匡紙鍚庣 /qc-report/template/selectable 鍒ゅ畾鈥斺�斿仠鐢ㄧ増鏈笉娓呯┖ currentVersion锛屽墠绔嬁鍒嗛〉缁撴灉鑷繁鎺ㄥ浼氭紡锛夛紝缁撴灉灏卞湴灞曠ず骞惰烦鏈〉鍒楄〃锛夛紱鍐荤粨 data_snapshot锛堝垽瀹氬悗鏁版嵁锛屽惈鍚庣绠楀ソ鐨� PASS/FAIL 涓庡悎鏍肩巼锛変笌 render_html锛況egenerate 鍙噸娓叉帓鐗堛�佹暟鎹笌缂栧彿涓嶅彉锛沚usiness_id/business_type 瀛� MES 琛ㄥ悕锛坢es_qc_iqc 绛夛級涓庡崟鎹� ID锛屽彲鍙嶆煡銆佷竴鍗曞彲鍑哄浠斤紱鎶ュ憡澶村彟甯﹀崟鎹師鍒ゅ畾 qcResult(鏁�)/qcResultText(涓枃锛屽悎鏍�/鐗归噰/涓嶅悎鏍奸��璐�/涓嶅悎鏍兼姤搴�)锛屼笌寮曟搸涓夋�佸垽瀹氬苟瀛樹簰涓嶈鐩栵紱鍝嶅簲甯� undecidableCount=蹇収涓� result 涓虹┖涓茬殑椤规暟涓� warnings锛堝垎缁勬爣棰樿烦杩�/鎸囨爣宸插垹/鏈綍瀹炴祴鍊�/鏍峰搧瓒�3锛夛紝涓よ�呴兘涓嶈惤搴撱�佷簨鍚庣湅涓嶅埌", "upstream": ["鎶ュ憡妯℃澘鐗堟湰", "璐ㄦ鍗曚笂涓嬫枃(閫氱敤 generate 鐢辫皟鐢ㄦ柟浼犲叆)", "MES 璐ㄦ鍗� IQC/IPQC/OQC/RQC(generate-from-qc 缁� MesQcReportApi 鍙栨暟)"], "downstream": ["鍓嶇瀹炰緥椤� /qc/report-instance(鍒楄〃路iframe棰勮路蹇収椤电路瀵煎嚭PDF)", "PDF褰掓。(system_storage_attachment recordType=qc_report_instance)"], "keywords": "鎶ュ憡瀹炰緥 鍑轰欢 QR缂栧彿 蹇収 澶嶇幇 regenerate PDF褰掓。 鎶ュ憡瀹炰緥椤� 瀵煎嚭PDF generate-from-qc 璐ㄦ鍗曞嚭鎶ュ憡 鍑烘姤鍛婂脊绐� qcResult undecidableCount warnings 寰呭垽瀹� 鍙嶆煡 涓氬姟鍗曟嵁绛涢��"}
   ]
 }</script>
 <script type="application/json" id="data-flows">{
@@ -514,13 +524,15 @@
        {"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 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曘��",
+     "summary": "鍥涢亾妫�楠岄椄鍙�(IQC/IPQC/OQC/RQC锛屼簩鎬� 0鈫�4) + 鍒ゅ畾鍥涙灉(鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾) + NCR 璇勫澶勭疆鍏抽棴锛汚I 鎻愪緵鍒ゅ畾寤鸿锛汵CR 褰撳墠浠呭彴璐︿笉瑙﹀彂杩斿伐鍗曪紱妫�楠屽崟鍙敱鏅鸿兘璐ㄦ鎶ュ憡骞冲彴涓�閿嚭浠讹紙generate-from-qc锛氭暟鎹粠 MES 鍙栵紝浜旈亾鏍¢獙鍚庢覆鏌撹惤搴擄級銆�",
      "steps": [
        {"stage": "鏉ユ枡", "action": "鍒拌揣閫氱煡/澶栧崗鍏ュ簱鈫扞QC锛岀粨璁哄洖鍐欐帹杩涘緟鍏ュ簱鎴栬Е鍙戦��璐�", "roles": ["IQC 璐ㄦ鍛�"]},
        {"stage": "杩囩▼", "action": "鎶ュ伐璐ㄦ宸ュ簭浜у嚭琛屸啋IPQC锛屽悎鏍兼媶琛屽叆搴撱�佷笉鍚堟牸鐢熸垚 NCR", "roles": ["IPQC 璐ㄦ鍛�"]},
        {"stage": "鍑鸿揣", "action": "閿�鍞嚭搴撴彁浜も啋OQC锛屽畬鎴愬悗鍑哄簱鍗曡繘鍏ュ緟鎷h揣", "roles": ["OQC 璐ㄦ鍛�"]},
        {"stage": "閫�璐�", "action": "閫�鏂�/閿�鍞��璐�/鍞悗閫�璐р啋RQC锛岀粨璁哄洖璋冨崟鎹笌鍞悗", "roles": ["RQC 璐ㄦ鍛�"]},
-       {"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]}]},
+       {"stage": "涓嶅悎鏍�", "action": "NCR: 寰呰瘎瀹♀啋璇勫鈫掑缃�(閫�璐�/鎶ュ簾/杩斿伐/璁╂鎺ユ敹/闄嶇骇)鈫掑叧闂�", "roles": ["璐ㄩ噺宸ョ▼甯�"]},
+       {"stage": "鍑轰欢", "action": "涓ゆ潯鍑轰欢鍏ュ彛锛氣憼閫氱敤 generate/preview(璋冪敤鏂硅嚜甯︿笂涓嬫枃) 娓叉煋 HTML 骞跺喕缁撴暟鎹揩鐓э紝缂栧彿 QR+鏃ユ湡+4浣嶆祦姘存寜澶╃嫭绔嬶紝preview 鍙覆鏌撲笉钀藉簱涓嶆秷鑰楃紪鍙凤紝regenerate 鐢ㄥ喕缁撳揩鐓ч噸娓蹭笖鏁版嵁涓庣紪鍙蜂笉鍙樺苟浣滃簾宸插綊妗� PDF锛屽鍑� PDF 鐢卞悗绔皟 Chromium 鎵撳嵃瀹炰緥宸插瓨鐨� HTML 鍚庡綊妗i檮浠朵腑蹇冿紱鈶enerate-from-qc 鐢辫川妫�鍗曠洿鎺ュ嚭浠�(鏁版嵁缁� MesQcReportApi 浠� MES 鍙栵紝鍓嶇涓嶆嫾涓婁笅鏂�)锛屽嚭浠跺墠浜旈亾鏍¢獙鎸変笟鍔′紭鍏堢骇鍙姤绗竴澶勶細绫诲瀷闈炴硶/鍗曟嵁涓嶅瓨鍦�/鏈畬鎴愭楠�/鏈~鍒ゅ畾/妯℃澘绫诲瀷涓嶇/鏃犲彲鐢ㄦ楠岄」锛屾姤鍛婂ご鍙﹀甫鍗曟嵁鍘熷垽瀹� qcResult+qcResultText 涓庡紩鎿庡垽瀹氬苟瀛橈紝鍝嶅簲鍥� undecidableCount 寰呭垽瀹氶」鏁颁笌 warnings(鍒嗙粍鏍囬璺宠繃/鎸囨爣宸插垹/鏈綍瀹炴祴鍊�/鏍峰搧瓒�3)锛屽悓涓�寮犲崟鎹彲鍙嶅鍑哄浠�", "roles": ["璐ㄦ鍛�"]},
+       {"stage": "寤烘ā鏉�", "action": "AI 瀵煎叆锛氫笂浼犳棦鏈夋楠屾姤鍛婃枃浠�(鎵弿浠�/鐓х墖銆佺數瀛愮増 PDF銆乄ord/Excel) 鈫� 璇嗗埆鎴愭ā鏉胯崏绋�(涓嶈惤搴�) 鈫� 浜哄伐鍦ㄨ璁″櫒纭璋冩暣鍚庝繚瀛樹负鐗堟湰锛�.doc/.xls 鏃ф牸寮忎笉鏀寔", "roles": ["璐ㄦ鍛�", "璐ㄩ噺宸ョ▼甯�"]}]},
     {"id": "warehouse", "name": "浠撳偍娴佺▼", "mermaid": "mermaid/06-warehouse-flow.mmd", "color": "#7e6bd6",
      "summary": "15 绫诲崟鎹┍鍔ㄥ簱瀛樺彴璐�(鍏厓缁勩�佸洓閲�)鍙樺姩锛屽叏閮ㄧ粡浜嬪姟娴佹按鐣欑棔锛涙敮鎸佽皟鎷ㄥ湪閫斻�佺洏鐐硅皟鏁淬�佹壒娆�/SN 杩芥函銆佸簱瀛樺崰鐢ㄤ笌鍥涚骇鍐荤粨銆佺嚎杈硅櫄鎷熷簱璐熷簱瀛橈紱瀵瑰 WmsStockApi 渚� ERP 鏀跺彂銆�",
      "steps": [
@@ -542,6 +554,7 @@
        {"stage": "褰曞叆鎻愭晥", "action": "鍙戠エ OCR(鍥剧墖澶氭ā鎬�/PDF鏂囨湰)銆佹姤浠峰崟 OCR 鈫� 缁撴瀯鍖栭濉�", "roles": ["閲囪喘鍛�", "閿�鍞�"]},
        {"stage": "杈呭姪鍒ゅ畾", "action": "璐ㄦ鍗�+鎸囨爣+缂洪櫡 鈫� 寤鸿鍚堟牸/鐗归噰/閫�璐�/鎶ュ簾+鐞嗙敱", "roles": ["璐ㄦ鍛�"]},
        {"stage": "鍐崇瓥棰勬祴", "action": "缂烘枡/鐢熶骇鏃堕暱/鐢熶骇椋庨櫓/浜や粯鍥涚被棰勬祴渚涜鍒掓帓浜у弬鑰�", "roles": ["璁″垝鍛�"]},
+       {"stage": "妯℃澘璇嗗埆", "action": "涓婁紶鏃㈡湁妫�楠屾姤鍛婃枃浠�(鎵弿浠�/鐓х墖銆佺數瀛愮増 PDF銆乄ord/Excel) 鈫� 鍒嗛�氶亾鎶藉彇(鏈夋枃鏈眰璧版枃鏈�佹壂鎻忕増閫愰〉杞浘) 鈫� 澶фā鍨嬫寜鍓嶇涓婁紶鐨勭粍浠舵竻鍗曚骇鍑烘墎骞崇粍浠惰崏绋� 鈫� 浜哄伐鍦ㄨ璁″櫒纭鍚庝繚瀛樹负妯℃澘鐗堟湰", "roles": ["璐ㄦ鍛�", "璐ㄩ噺宸ョ▼甯�"]},
        {"stage": "鐭ヨ瘑妫�绱�", "action": "鏂囨。鈫掑垏鐗団啋Milvus 鍚戦噺鈫掓绱㈡帴鍙�(棰勭暀)", "roles": ["鈥�"]}]}
   ]
 }</script>
@@ -627,6 +640,13 @@
       RQC 閫�璐ф楠�
       NCR 涓嶅悎鏍煎搧
       璐ㄦ鏂规涓庢寚鏍囩己闄�
+    鏅鸿兘璐ㄦ鎶ュ憡 QC-REPORT
+      鎶ュ憡妯℃澘涓庡鐗堟湰
+      鍙鍖栬璁″櫒
+      缁勪欢缁戝畾涓庡垽瀹氳鍒�
+      HTML 娓叉煋寮曟搸
+      鎶ュ憡鍑轰欢涓庣紪鍙�
+      鏁版嵁蹇収鍐荤粨
     璁惧涓庢帓鐝�
       璁惧鍙拌处
       鐐规涓庝繚鍏�
@@ -749,6 +769,69 @@
   N2 -->|澶勭疆鏂瑰紡:閫�璐�1鎶ュ簾2杩斿伐3璁╂鎺ユ敹4闄嶇骇浣跨敤5| N3[宸插缃�7]
   N3 -->|鍏抽棴| N4[宸插叧闂�8]
   Q8[鏀拺鏁版嵁:璐ㄦ鏂规路妫�楠屾寚鏍嚶风己闄峰簱路鎸囨爣缁撴灉] --- A1
+  Q8H["妫�楠屾寚鏍囩殑灞傜骇鍙湪璐ㄦ鎸囨爣椤电淮鎶ぢ锋潯鐩被鍨� 鎵�灞炲垎缁� 鍏紡 鎺掑簭鍙仿峰彧鍏佽涓ゅ眰路鍒犲垎缁勭骇鑱斿垹瀛愰」"] --- Q8
+  A1 -->|鍑轰欢 generate-from-qc| GATE{鍑轰欢鍏亾鏍¢獙路鎸変笟鍔′紭鍏堢骇鍙姤绗竴澶剗
+  A2 -->|鍑轰欢 generate-from-qc| GATE
+  A3 -->|鍑轰欢 generate-from-qc| GATE
+  A4 -->|鍑轰欢 generate-from-qc| GATE
+  GATE -->|000 绫诲瀷闈炴硶| GE0[105_000 qcType 涓嶅湪 1~4]
+  GATE -->|001 鍗曟嵁涓嶅瓨鍦▅ GE1[105_001]
+  GATE -->|002 鏈畬鎴愭楠寍 GE2[105_002路甯﹀綋鍓嶇姸鎬佷腑鏂囧悕]
+  GATE -->|003 鏈~鍒ゅ畾| GE3[105_003路鍒楀嚭鍥涗釜鍙�夊垽瀹歖
+  GATE -->|005 妯℃澘绫诲瀷涓嶇| GE5[105_005路涓よ竟绫诲瀷涓枃鍚嶉兘缁櫬峰墠绔寜 reportType 棰勮繃婊
+  GATE -->|006 鏃犲彲鐢ㄦ楠岄」| GE6[105_006]
+  GATE -->|閫氳繃路鍙厑璁稿悓绫诲瀷宸插彂甯冩ā鏉縷 RP[鏅鸿兘璐ㄦ鎶ュ憡骞冲彴 qcreport]
+  RP --> RPT[鎶ュ憡妯℃澘 qc_report_template路鍚敤0鍋滅敤1]
+  RPT --> RPTV[妯℃澘鐗堟湰 qc_report_template_version路鑽夌0宸插彂甯�1宸插仠鐢�2路褰撳墠鐗堟湰涓嶅彲鍋滅敤 101_010]
+  RPTVSAVE[璁捐鍣ㄤ繚瀛� create 鎴� update] -->|鍐欏叆渚ч椄闂疯鍒�101_006 涓庣敾甯冨畨鍏�101_009 涓嶅悎鏍间竴寰嬩笉钀藉簱| RPTV
+  RPTVSAVE -.->|鍙崱鏂板啓鍏ヂ峰瓨閲忚剰鐢诲竷涓嶅洖婧牳鏌 CVNOTE[鐢诲竷鏍¢獙瑕嗙洊涓夊娉ㄥ叆闈⒙穞agName 灞炴�у悕 鏁存CSS]
+  RPTV -->|鎸夊凡鍙戝竷鐗堟湰娓叉煋| RPI[鎶ュ憡瀹炰緥 qc_report_instance路缂栧彿 QR+yyyyMMdd+4浣嶆祦姘绰锋寜澶╃嫭绔媇
+  RPI --> SNAP[鍐荤粨 data_snapshot路鍒ゅ畾鍚庢暟鎹惈 PASS FAIL 涓庡悎鏍肩巼]
+  RPI --> RHTML[render_html 瀹屾暣 HTML 鏂囨。路鍑虹珯宸插墺绂讳簨浠跺睘鎬т笌鍗遍櫓鍗忚]
+  RPI --> RREGEN[閲嶆柊鐢熸垚 regenerate路鍐荤粨蹇収+鍚屼竴妯℃澘鐗堟湰閲嶆覆路鏁版嵁涓庣紪鍙蜂笉鍙樎峰苟浣滃簾宸插綊妗DF]
+  RPI --> RPDF[瀵煎嚭PDF 鍚庣璋僀hromium鎵撳嵃宸插瓨HTML路褰掓。 system_storage_attachment路recordType=qc_report_instance]
+  RPI --> RUI[鎶ュ憡瀹炰緥椤� /qc/report-instance路鑿滃崟鎸傝川閲忕鐞� parent_id=5500]
+  RUI -->|鏉冮檺鐮亅 RPERM["qc-report:instance:query 鏌ヨ路:export 瀵煎嚭PDF路:delete 鍒犻櫎路:create 閫氱敤鍑轰欢路:generate 璐ㄦ鍗曞嚭浠�(menu 1075416)"]
+  RUI -->|鍙嶆煡 businessType=mes_qc_iqc 绛夎〃鍚� + businessId| RBACK[鍚屼竴寮犺川妫�鍗曞彲鍑哄浠芥姤鍛娐峰巻鍙茬暀鐥曢渶瑕伮蜂笉鍋氶噸澶嶆嫤鎴猐
+  RUI --> RPREVIEW[璇︽儏寮圭獥路iframe sandbox绌哄睘鎬ф覆鏌� render_html路鏁版嵁蹇収椤电灞曠ず鍐荤粨 data_snapshot]
+  A1 -.->|鍓嶇鍏ュ彛路琛屾搷浣溿�屽嚭鎶ュ憡銆嶄粎 status=宸插畬鎴愬彲瑙亅 UIREP[鍑烘姤鍛婂脊绐椔稩QC IPQC OQC RQC 鍥涢〉鍏辩敤]
+  A2 -.->|鍚屼笂| UIREP
+  A3 -.->|鍚屼笂| UIREP
+  A4 -.->|鍚屼笂| UIREP
+  UIREP -->|鍙垪 reportType 涓庢湰鍗曚竴鑷绰峰惎鐢峰綋鍓嶇増鏈凡鍙戝竷涓旂敾甯冮潪绌郝烽伩鍏嶉�変腑蹇呰鎷掔殑缁勫悎| UIPICK[鐢ㄦ埛閫夋ā鏉縘
+  UIPICK -->|POST generate-from-qc| GATE
+  UIREP -->|缁撴灉灏卞湴灞曠ず reportNo itemCount| UIRES["undecidableCount>0 钃濊壊淇℃伅鏉★紙澶氫负杩囩▼鍙傛暟鏃犲垽瀹氳鍒櫬烽粍鑹蹭細鍑犱箮姣忓崟璇姤锛壜穡arnings 涓� errors 閫愭潯灞曠ず路涓嶈惤搴撲簨鍚庣湅涓嶅埌"]
+  UIRES -->|鏌ョ湅鎶ュ憡鍒楄〃| RUI
+  RUI -->|璺敱 query 甯﹀叆 businessType+businessId 骞堕濉悳绱 RBACK
+  GATE -->|MesQcReportApi.getQcReportData| MESMAP[MES 鍥涘眰鍙栨暟褰掍竴路鍗曞ご / 鍒ゅ畾渚濇嵁琛� max min threshold / 鏍峰搧 indicator_result / 瀹炴祴鍊� result_detail]
+  MESMAP --> RCTX[鎶ュ憡涓婁笅鏂� report+inspectionItems路鐢卞悗绔槧灏勫櫒浜у嚭路鍓嶇涓嶅啀鑷繁鎷糫
+  RCTX --> RCITEM[妫�楠岄」=鏍峰搧脳鎸囨爣浜ゅ弶灞曞紑路鍏ㄦ寚鏍囪繘涓嶈繃婊ぢ峰鏍峰搧鏃舵牱鍝佸彿鎶樿繘 remark]
+  RCTX --> RCQC[鎼哄甫鍗曟嵁鍘熷垽瀹� qcResult 鏁奥穛cResultText 涓枃路涓庡紩鎿庡垽瀹氬苟瀛樹簰涓嶈鐩朷
+  MESMAP -->|鍒嗙粍椤� item_type=2 涓庡畠鐨勫瓙椤规寜 parent_id 杩樺師涓ゅ眰路褰掑睘涓嶇湅 type 涔熶笉鐪嬭搴弢 RCTXG
+  RCTXG["鍒嗙粍杩樺師路缁勫ご琛岃儗缁勫悕涓� formula_text 鍏紡路缁勫唴绗竴琛岃儗 span=璇ョ粍鎬昏鏁奥峰悓缁勫叾浣欒 span=1 涓� hidden 璁╀綅路鍙悎骞舵楠岄」鐩竴鍒�"] --- RCTX
+  MESMAP -.->|鍒嗙粍椤规湰鍗曟病鏈夊睘浜庡畠鐨勫瓙椤� / 缁勫ご鏈崟娌℃湁琛岀敱鍚庣琛ヤ竴琛寍 RCWARN
+  MESMAP -.->|鎸囨爣宸插垹 / 鏈綍瀹炴祴鍊硷紙缁勫ご閿氱偣琛屾寜瀹氫箟鏃犲�悸蜂笉鎶ワ級 / 鏍峰搧瓒� 3 涓疯繘 warnings| RCWARN
+  RCWARN[warnings 杞彁绀郝蜂笉钀藉簱路浜嬪悗鐪嬩笉鍒伴渶鑷鐣欑棔] --- RCTX
+  RCITEM --- RCTX
+  RCQC --- RCTX
+  RCTX --> RPI
+  RCTX --> RUNDEC["undecidableCount 娌℃湁鍒ゅ畾缁撹鐨勯」鏁�=蹇収閲� result 涓虹┖涓茬殑椤孤峰惈鏃犲垽瀹氳鍒欎笌寰呭垽瀹氫袱绉嵚蜂笉璁″叆鍚堟牸鐜囧垎姣嶄笌鎶ュ憡缁撹路鐢熸垚鏃跺脊鎻愮ず涓嶅洖濉�"]
+  RPT -->|杩涘叆璁捐鍣ㄥ苟甯� templateId路鏉冮檺 qc-report:template:ai-import| AIIMP[AI瀵煎叆 qc-report/ai-import/draft]
+  AISRC["婧愭枃浠� 鎵弿浠剁収鐗嚶风數瀛愮増PDF路Word(.docx) Excel(.xlsx)路txt csv"] -->|涓婁紶璧� system Storage API 鍙� blobId路缁戜负 qc_report_template 闄勪欢| AIIMP
+  AISRC -.->|鍚屼竴妯℃澘閲嶅瀵煎叆鎸夋浛鎹㈠鐞喡峰厛鍒犳棫闄勪欢鍐嶇粦鏂扮殑路杩炲悓 blob 琛屼笌纾佺洏鏂囦欢涓�璧锋竻| AIIMP
+  AISRC -.->|docx 鐨� Word 椤电湁椤佃剼璇诲彇骞朵互 椤电湁 椤佃剼 鏍囪骞跺叆璇嗗埆鍐呭路椤电湁鍦ㄦ鏂囧墠椤佃剼鍦ㄦ鏂囧悗路鍚屾椂杩� warnings路鎵弿浠剁収鐗囦笉鍙楀奖鍝峾 AIIMP
+  AIIMP -->|璇嗗埆路鍙骇鑽夌涓嶈惤搴搢 AIRD[妯℃澘鑽夌 鎵佸钩缁勪欢+灞炴�ф竻鍗昡
+  AIHINT[绉湪娓呭崟姣忛」甯� hint 閫夊瀷璇存槑路鏉ヨ嚜鍓嶇娉ㄥ唽琛� aiHint路缁勪欢閫夊瀷鐨勫敮涓�鐪熺浉鏉ユ簮] -.->|閫夊瀷浠� hint 涓哄噯路鏈変笓闂ㄧ粍浠跺氨涓嶉��鐢ㄩ�氱敤缁勪欢鍑戞暟| AIIMP
+  AIIMP -->|琛ㄦ牸鏈鐨勮惤娆剧缃茶灞炶惤娆句笉灞炴暟鎹路涓庡師浠堕〉鑴氬悎骞朵笖浜哄悕鏃ユ湡鐣欑┖鎵嬪~路涓嶅緱鑷�犵粦瀹氶敭| AIRD
+  AIIMP -.->|鍘熶欢鍒楁瘮榛樿澶氭垨琛ㄥご鍒嗕袱灞傛垨鏍峰搧瀛楁涓嶅悓鏃堵峰啓杩涚粍浠剁殑 columns headerSpans fields 涓変釜鏂囨湰灞炴�ц鐩柭蜂笉鎹㈢粍浠秥 AIRD
+  AIKEY[鎶ュ憡鍙粦瀹氶敭鐧藉悕鍗暵风敱鍚庣 ReportFields 鍙嶅皠鐢熸垚路涓嶆墜鍐橾 -.->|鍙缂栭�犱笉缁欏彲閫夐泦鍚堟ā鍨嬪彧鑳界寽路鏁呭叏閲忔灇涓緗 AIIMP
+  AIRD -->|浜哄伐鍦ㄨ璁″櫒纭路瑁呴厤鍣ㄧ紪璇戣繘鐢诲竷鍚庝繚瀛榺 RPTV
+  AIRD -.->|鐢诲竷涓婄殑 ReportHeader ReportFooter 鏄鏂囬噷鐨勬姮澶磋惤娆韭蜂笌 PDF 姣忛〉閲嶅鐨勭増寮忛〉鐪夐〉鑴氫笉鏄竴鍥炰簨| RPTV
+  AIIMP -.->|琛ㄥご鏌愬垪鑷繁鏃㈡槸鍒楀悕鍙堟槸涓婃牸路鍘熶欢閲屾槸涓�鏍肩旱鍚戝悎骞惰法浣忎笂涓嬩袱灞傘�佷笅灞傞偅鏍煎湪鎻愬彇鏂囨湰閲屽啓鐫�鈫戝悓涓妡 AIRD
+  AIIMP -.->|璇ユ鏍囬涓庡垪鍚嶄竴瀛椾笉宸墠璁ゆ垚绾靛悜鍚堝苟鏍笺�佸嚭 rowspan=2 涓�鏍间笖涓嬪眰璺宠繃璇ュ垪路涓嶄竴鑷村氨琚綋鎴愬彟涓�灞傚垎缁勬爣棰樸�佺粨璁轰簩瀛椾笂涓嬪悇鍗颁竴閬峾 AIRD
+  RPTVSAVE -.->|璁捐鍣ㄧ敾甯冧笉璺戠粦瀹毬风粍鍚嶆牸鐨� hidden 鍗犱綅绗︿細琚祻瑙堝櫒褰撴垚鐪� hidden 璁╂暣琛屽乏绉汇�佹湯鍒楁尋鎴愮珫鎺掔粏鏉 CVNOTE
+  RPTVSAVE -.->|鑷畾鍒椾笉甯﹀搴﹀0鏄幝峰垪瀹藉彧鑳界敱鏈�灏忓唴瀹瑰搴﹀�掓帹路鑰屽�兼槸鍗犱綅绗﹁繖绫讳笉鍚┖鏍肩殑闀夸覆路鏁磋〃浼氳鎾戝嚭绾稿紶銆佹湯鍒楁尋鎴愮珫鏉 CVWIDTH
+  CVWIDTH["鏁呰嚜瀹氬垪鐨勫崟鍏冩牸甯� overflow-wrap:anywhere 鍏佽闀夸覆鎶樿路榛樿鍒楁湁鎵嬪伐瀹藉害澹版槑涓嶅姞路瀹炴祴鍔犱簡鍙嶈�屾妸妫�楠岄」鐩瓙椤规尋鍒� 30 浣欏儚绱犮�佽楂樼炕鍑犲��"] --- RPTVSAVE
 </pre>
 <pre style="display:none" class="mmd-src" data-mmd="06-warehouse-flow">
 flowchart LR
@@ -824,6 +907,8 @@
   AI[AI 骞冲彴 閫氫箟鍗冮棶+Milvus] -.->|鍙戠エOCR| ERP
   AI -.->|鎶ヤ环OCR| CRM
   AI -.->|璐ㄦ鍒ゅ畾涓庣敓浜ч娴媩 MES
+  MES -.->|璐ㄦ鍗曚笂涓嬫枃路鏈疆鐢辫皟鐢ㄦ柟浼犲叆 寰� MesQcReportApi 鎵撻�殀 QCR[鏅鸿兘璐ㄦ鎶ュ憡 qcreport 妯℃澘鐗堟湰瀹炰緥蹇収]
+  QCR -.->|PDF 褰掓。路鍚庣画杞| STG
   MES --> BI[BI 绠$悊椹鹃┒鑸� SQL閰嶇疆澶у睆]
   ERP --> BI
   CRM --> BI
@@ -872,6 +957,39 @@
   IV -->|鍥炴寮哄埗鍏堝紑绁▅ RK
   RC -->|鍏宠仈CRM瀹㈡埛鏍¢獙| CU
   PA -->|鍏宠仈鏉ョエ涓庝緵搴斿晢| PI
+  subgraph S4 [鏅鸿兘璐ㄦ鎶ュ憡 qcreport]
+    RPT[鎶ュ憡妯℃澘] --> RPTV[妯℃澘鐗堟湰]
+    RPTVSAVE[璁捐鍣ㄤ繚瀛� create 鎴� update] -->|鍐欏叆渚ч椄闂� 瑙勫垯101_006 鐢诲竷瀹夊叏101_009 涓嶅悎鏍间笉钀藉簱| RPTV
+    RPTVSAVE -.->|鍙崱鏂板啓鍏� 瀛橀噺鑴忕敾甯冧笉鍥炴函鏍告煡| CVNOTE[鐢诲竷鏍¢獙瑕嗙洊 tagName 灞炴�у悕 鏁存CSS 涓夊娉ㄥ叆闈
+    RPTV --> RPI[鎶ュ憡瀹炰緥]
+    RPI --> SNAP[鏁版嵁蹇収鍐荤粨]
+    RPI --> RHTML[HTML 娓叉煋浜х墿]
+    RPI --> RPDF[PDF 浜х墿]
+    AISRC[婧愭枃浠� 鎵弿浠剁収鐗嚶风數瀛愮増PDF路Word Excel路txt csv] -->|涓婁紶璧� system Storage API 鍙� blobId 骞剁粦涓烘ā鏉块檮浠秥 AIRD[AI 璇嗗埆鑽夌]
+    AIRD -->|浜哄伐鍦ㄨ璁″櫒纭鍚庝繚瀛榺 RPTV
+  end
+  QCDOC[璐ㄦ鍗� IQC IPQC OQC RQC] -->|generate-from-qc路甯� qcType qcId templateId| QCGATE{浜旈亾鏍¢獙 绫诲瀷 瀛樺湪 宸插畬鎴� 宸插垽瀹� 妯℃澘绫诲瀷 鏈夋楠岄」}
+  QCGATE -->|浠讳竴涓嶈繃路鎸変笟鍔′紭鍏堢骇鍙姤绗竴澶剕 QCERR[105_000~105_006]
+  QCGATE -->|閫氳繃| MESQCAPI[MesQcReportApi 鍥涘眰鍙栨暟路鍗曞ご 鍒ゅ畾渚濇嵁琛� 鏍峰搧 瀹炴祴鍊糫
+  MESQCAPI -->|绾嚱鏁版槧灏勫櫒褰掍竴 鍚師鍒ゅ畾 qcResult qcResultText| RPI
+  MESQCAPI -.->|鍒嗙粍鏍囬璺宠繃 鎸囨爣宸插垹 鏈綍瀹炴祴鍊� 鏍峰搧瓒�3| QCWARN[warnings 杞彁绀郝蜂笉钀藉簱]
+  QCWARN -.-> RPI
+  RPI -.->|undecidableCount=蹇収 result 涓虹┖涓茬殑椤孤风敓鎴愭椂寮规彁绀簗 QCFE
+  RPI -.->|businessType=mes_qc_iqc 绛夎〃鍚� + businessId 鍙嶆煡路涓�鍗曞彲鍑哄浠絴 QCFE
+  RPT -.->|report_type 鏁板瓧瀛楃涓查』绛変簬 qcType路鍓嶇鎹杩囨护妯℃澘鍒楄〃| QCGATE
+  RPTV -->|妯℃澘鍋滅敤鍚庝笉鍐嶅嚭鏂颁欢路鍘嗗彶瀹炰緥涓嶅彈褰卞搷路褰撳墠鐗堟湰涓嶅彲鍋滅敤 101_010| RPI
+  RPT -->|杩涘叆璁捐鍣ㄥ甫 templateId 璋� AI 瀵煎叆| AIRD
+  RPI -->|鍒楄〃 璇︽儏 棰勮 鎵撳嵃| QCFE["鍓嶇鎶ュ憡椤甸潰 /qc/report-instance 宸茶惤鍦奥穒frame 娓叉煋 render_html + 蹇収椤电 + 瀵煎嚭PDF"]
+  RPDF -->|褰掓。 闄勪欢涓績 recordType=qc_report_instance| PDFARCH[system_storage_attachment]
+  AISRC -.->|褰掑睘 闄勪欢涓績 recordType=qc_report_template| PDFARCH
+  AISRC -.->|鍚屼竴妯℃澘閲嶅瀵煎叆鎸夋浛鎹㈠鐞喡峰厛鍒犳棫闄勪欢路杩炲悓 blob 琛屼笌纾佺洏鏂囦欢涓�璧锋竻| PDFARCH
+  QCFE -.->|鏉冮檺鐮� qc-report:instance:query/export/delete/create 宸插叆 system_menu| SYS1[system_menu]
+  QCGATE -.->|鏉冮檺鐮� qc-report:instance:generate 宸插叆 system_menu id=1075416| SYS1[system_menu]
+  QCDOC -.->|鍓嶇鍏ュ彛 琛屾搷浣溿�屽嚭鎶ュ憡銆嶄粎 status=宸插畬鎴愬彲瑙伮峰洓椤靛叡鐢ㄥ悓涓�寮圭獥| UIREP[鍑烘姤鍛婂脊绐椔峰彧鍒楀悓绫诲瀷 鍚敤 涓旀湁鐢熸晥鐗堟湰鐨勬ā鏉縘
+  UIREP -->|閫夋ā鏉垮悗 POST generate-from-qc| QCGATE
+  UIREP -.->|缁撴灉灏卞湴灞曠ず reportNo itemCount 涓� undecidableCount 鍛婅| QCFE
+  QCFE -.->|杩涘叆鏃跺甫 businessType+businessId 璺敱 query路棰勫~鎼滅储琛ㄥ崟鐨勩�屼笟鍔″崟鎹�嶅瓧娈祙 UIREP
+  RPT -.->|鏉冮檺鐮� qc-report:template:ai-import 宸插叆 system_menu| SYS1
 </pre>
 <pre style="display:none" class="mmd-src" data-mmd="10-business-object">
 erDiagram
@@ -910,6 +1028,8 @@
   erp_purchase_order ||--o{ erp_purchase_invoice : "鏉ョエ"
   erp_purchase_invoice ||--o{ erp_finance_payment : "浠樻"
   hrm_employee ||--o| hrm_user_handover : "绂昏亴浜ゆ帴鏄犲皠"
+  qc_report_template ||--o{ qc_report_template_version : "澶氱増鏈�"
+  qc_report_template_version ||--o{ qc_report_instance : "鍐荤粨鍑轰欢鐗堟湰"
 </pre>
 <pre style="display:none" class="mmd-src" data-mmd="11-ai-business-flow">
 flowchart TD
@@ -931,6 +1051,23 @@
   R3[宸ュ簭鏍囧噯宸ユ椂+璁惧姣忓皬鏃朵骇閲�+浼犻�佸�嶇巼] --> R4[鐢熶骇鏃堕暱棰勬祴]
   R5[IPQC缂洪櫡鐜�+璁惧淇濆吇鐐规+鐗╂枡鍙敤鐜�+鍏抽敭宸ュ簭] --> R6[鐢熶骇椋庨櫓棰勬祴]
   R7[杩涘害+鍓╀綑澶╂暟+浠诲姟瀹屾垚鐘舵��+瀹㈡埛浜ゆ湡] --> R8[浜や粯棰勬祴路鑳藉惁鎸夋椂+缃俊搴�+寤惰鍥犵礌]
+  W1[璐ㄦ鍛樹笂浼犳棦鏈夋楠屾姤鍛婃枃浠� blobId] --> W2{鎵╁睍鍚嶄笌鍐呭鍒ゅ畾}
+  W2 -->|png/jpg/bmp/gif/webp| W3[鍘熷瓧鑺傝蛋 chatWithImage]
+  W2 -->|PDF 鏈夋枃鏈眰| W4[PDFBox 鎶藉彇鏂囨湰 鈫� chat]
+  W2 -->|PDF 鎵弿鐗坾 W5[PDFRenderer 閫愰〉杞琍NG 鈫� 姣忛〉 chatWithImage]
+  W2 -->|docx/xlsx| W6["POI 鎶藉彇路琛ㄦ牸褰掍竴鎴愮ǔ瀹氱綉鏍硷紙gridSpan 琛ョ┖鍗犱綅 / vMerge 缁牸鏍� 鈫戝悓涓婏級"]
+  W2 -->|txt/csv| W7[鐩磋鏂囨湰 鈫� chat]
+  W2 -->|doc/xls| W8[鎷掔粷路鎻愮ず鍙﹀瓨涓� docx/xlsx]
+  W3 --> W9[澶氶〉閫愰〉璇嗗埆]
+  W4 --> W9
+  W5 --> W9
+  W6 --> W9
+  W7 --> W9
+  W9 --> W10["鎸�(type,props)鍘婚噸鍚堝苟鈫掓墎骞崇粍浠惰崏绋�+summary+warnings"]
+  W10 --> W11[寮圭獥棰勮路浜哄伐纭鍚庤杩涜璁″櫒鐢诲竷]
+  W11 --> W12[浜哄伐璋冩暣鈫掍繚瀛樹负妯℃澘鐗堟湰路杩欐槸鍞竴钀藉簱鐐筣
+  WCL[缁勪欢绉湪娓呭崟鐢卞墠绔粠娲绘敞鍐岃〃鐢熸垚骞堕殢璇锋眰涓婁紶] --- W9
+  WSAFE[鍙骇鑽夌涓嶈惤搴撀锋湭娉ㄥ唽type鍦ㄨ閰嶉樁娈佃璺宠繃路姘歌繙浜т笉鍑轰换鎰廐TML] --- W10
   KB1[鐭ヨ瘑搴撴枃妗d笂浼燯RL] --> KB2[POI/Tika鎻愬彇鏂囨湰] --> KB3[鍒囩墖绾�800tokens鈫掑悜閲忓寲鈫扢ilvus]
   KB3 --> KB4[鍒嗘妫�绱㈡帴鍙� topK+鐩镐技搴﹂槇鍊糫
   KB4 -.-> KB5[鏆傛湭鎺ュ叆涓氬姟闂瓟娴佺▼路寰呯‘璁

--
Gitblit v1.9.3