云
2026-09-29 f87ce86307056f63f79312178037cc8714eb2b13
docs/project-business/data/flows.json
@@ -82,7 +82,19 @@
       {"stage": "专家评审", "action": "申报单处于审批中(15)时录入专家评分明细(一位专家一行:姓名/单位/职称 + 选题价值0.3/研究方案0.3/团队基础0.2/预期成果0.2 四项分值 + 结论 + 意见);后端每次增删改后重算 compositeScore 加权合计、按加权分降序重排 ranking,并回写主单 reviewAvgScore(全部专家均分)与 reviewPass(均分达标且多数结论为推荐立项);明细全部删除时汇总值清空为未汇总;四项分值均在 0~100 之外时提示指出具体维度与实际值", "roles": ["评审专家", "学会秘书处", "课题管理员"]},
       {"stage": "立项审批", "action": "BPM 流程 research_topic_approve 顺序走三节点:秘书处形式审查 → 专家评审 → 学会立项审批。审批方法与审批人在流程定义内配置,部署后由管理员在 BPM 流程设计器按学会实际组织调整;审批中心内的自定义表单只读回显申报单 + 评审明细 + 拨付记录。通过→20 已立项、驳回→35 已驳回、取消→退回 0 草稿", "roles": ["学会秘书处(形式审查)", "评审专家(评审节点)", "学会理事会(立项审批)"]},
       {"stage": "立项与通知", "action": "监听器 ResearchApplicationStatusListener 先回写审批状态,审批通过后再调 approveApplication:生成立项编号 LX+yyyyMMdd+6位流水 与 approveTime(已有编号则幂等跳过)。点「发布立项通知」生成 system_notice 公告(标题『关于公布立项课题的通知』,正文含课题名/立项编号/类别/申报人/单位/资助金额),写回 noticeId 防重复——重复点击按已发布拦截并告知上次发布时间", "roles": ["课题管理员", "学会秘书处"]},
       {"stage": "经费拨付", "action": "仅「已立项(20)」的申报单可登记拨款记录(批次名称/拨付金额/拨付日期/收款单位/备注/凭证附件),凭证必填。登记时一条龙完成:① 课题侧落 research_fund_record 台账(先置待拨付)② 同一批 blob 双绑到课题台账与财务报销单 ③ 经 yudao-module-finance-api 自动生成 1:1 的 finance_reimbursement 报销单(1 行明细:费用类型=其他、发票金额=拨付金额、发票日期=拨付日期、费用说明=「课题〔课题名〕第N期/第N次经费拨款」)④ 立即提交 BPM 报销审批 ⑤ 台账回写报销单号并置「报销审批中(15)」。金额校验:已登记金额 + 本次金额 不得超出该单申请经费,超出时提示报出本次、已登记、合计、预算四项数值。状态由系统驱动:0待拨付/15报销审批中/20已拨付/30已驳回;只有「待拨付」可删(删除联动清理财务侧草稿报销单),「待拨付」「已驳回」可改并重新发起报销(已驳回改后清空驳回原因与时间);取消流程则退回「待拨付(0)」(发起人撤回只把实例退回发起节点、流程未结束,台账保持「报销审批中(15)」,需重新提交后才继续走审批)。财务审批分类下没有已发布流程时直接报错且不建单,不留孤儿草稿报销单", "roles": ["学会财务", "课题管理员", "财务审核人", "财务主管"]}]},
     {"stage": "经费拨付", "action": "仅「已立项(20)」的申报单可登记拨款记录(批次名称/拨付金额/拨付日期/收款单位/备注/凭证附件),凭证必填。登记时一条龙完成:① 课题侧落 research_fund_record 台账(先置待拨付)② 同一批 blob 双绑到课题台账与财务报销单 ③ 经 yudao-module-finance-api 自动生成 1:1 的 finance_reimbursement 报销单(1 行明细:费用类型=其他、发票金额=拨付金额、发票日期=拨付日期、费用说明=「课题〔课题名〕第N期/第N次经费拨款」)④ 立即提交 BPM 报销审批 ⑤ 台账回写报销单号并置「报销审批中(15)」。金额校验:已登记金额 + 本次金额 不得超出该单申请经费,超出时提示报出本次、已登记、合计、预算四项数值。状态由系统驱动:0待拨付/15报销审批中/20已拨付/30已驳回;只有「待拨付」可删(删除联动清理财务侧草稿报销单),「待拨付」「已驳回」可改并重新发起报销(已驳回改后清空驳回原因与时间);取消流程则退回「待拨付(0)」(发起人撤回只把实例退回发起节点、流程未结束,台账保持「报销审批中(15)」,需重新提交后才继续走审批)。财务审批分类下没有已发布流程时直接报错且不建单,不留孤儿草稿报销单", "roles": ["学会财务", "课题管理员", "财务审核人", "财务主管"]}]},
    {"id": "archive", "name": "档案管理流程", "mermaid": "mermaid/15-archive-flow.mmd", "color": "#7fb3d5",
     "summary": "独立档案模块(yudao-module-archive):书架分类(分层分列)规整 → 档案登记(电子附件 + 实体位置四字段,密级三档)→ 借阅登记走 BPM 两级审批(档案管理员审核 → 分管领导审批)→ 审批通过档案转「借出中」→ 归还登记回「在库」形成流转闭环 → 逾期未还查询时实时计算并在列表标红 → 存量与流转统计(总数/在库/借出中/逾期 + 分类·密级·载体三组分布)。同时接收课题(已立项)、会员(正常)、财务(已通过)三方的「归档」联动,经新建的 yudao-module-archive-api 生成档案并回写来源表 archive_document_id。会议/党建档案系统内无来源模块,仅手工录入。",
     "steps": [
       {"stage": "建分类", "action": "新建分类可挂父分类形成分类树(编码 code 全局唯一),设排序、说明、默认密级与启用状态;6 条初始分类:会员档案/课题档案/会议档案/财务档案(默认密级=保密 3)/文书档案/党建档案。有子分类或该分类下已有档案时禁止删除;父分类不能设为自身或其子分类", "roles": ["档案管理员"]},
       {"stage": "登记档案", "action": "填标题、分类、密级(1公开/2内部/3保密)、载体(1电子/2实体/3电子+实体)、归档日期、摘要、关键词;选电子则上传附件(走 system 附件中心,recordType=archive_document,先 /system/storage-blob/upload 取 blobId 再随保存请求的 blobIds 提交,全量替换语义),选实体则填书架号/层号/列号/册号档案盒与存放位置描述;后端生成档案编号 DA+yyyyMMdd+6位流水(Redis 每日重置),状态「在库(10)」", "roles": ["档案管理员"]},
       {"stage": "检索", "action": "按档案编号/标题/关键词 tags/来源单号/分类/密级/载体/状态/归档日期区间多条件检索,支持 Excel 导出。密级=保密(3) 的档案:当前用户无 archive:document:sensitive 时列表与导出强制过滤掉、直连详情接口报无权限错误", "roles": ["档案管理员", "全员可查公开档"]},
       {"stage": "三方归档", "action": "课题申报书(仅已立项 20)、会员(仅正常 1)、财务报销单(仅已通过 20)的列表页各有一个「归档」按钮,经 yudao-module-archive-api 的 archiveBySource 按「来源类型 + 来源单据 ID」幂等生成档案(来源单号/标题作为快照存入档案,源单附件一并带入档案;财务档案密级固定为「保密」),并回写来源表 archive_document_id 作为已归档硬标记;重复点击由来源侧拦截并提示已生成的档案编号。财务侧「归档」与其既有 20→40 状态推进在同一事务内叠加执行", "roles": ["课题管理员", "会员管理员", "财务"]},
       {"stage": "借阅登记", "action": "选档案(仅「在库(10)」可选)、填借阅人/部门/联系电话、借阅日期、借阅目的、归还期限;生成借阅单号 JY+yyyyMMdd+6位流水,状态「草稿(0)」。提交前校验同一档案不得存在「审批中(15)」或「借出中(20)」的借阅单,命中时按已存在的借阅单号精确报错;submit 先解析流程列表(无已发布流程直接报错、不留孤儿草稿)再建单,回写 processInstanceId 并置「审批中(15)」", "roles": ["借阅人", "档案管理员"]},
       {"stage": "借阅审批", "action": "BPM 流程 archive_borrow_approve 两级顺序审批:档案管理员审核 → 分管领导审批(审批方法与审批人在流程定义内配置,前端只选流程不写死 key;审批中心经自定义表单查看路径 /archive/borrow/detail/approve/index.vue 只读回显借阅单与档案信息)。审批通过由 ArchiveBorrowStatusListener 置「借出中(20)」并回写 approveTime,同时条件更新档案状态为「借出中」(影响 0 行说明档案已被其它流程占用 → 报错并回滚,保证同一档案不会被两条流程同时借出);驳回置「已驳回(35)」并回写驳回原因与时间,修改后可重新提交;取消流程退回「草稿(0)」", "roles": ["档案管理员(审核)", "分管领导(审批)"]},
       {"stage": "归还登记", "action": "仅「借出中(20)」可登记归还:填归还备注 → 条件更新借阅单状态到「已归还(30)」并回写 returnTime 与归还确认人,同时条件更新档案回「在库(10)」,形成完整流转闭环;更新 0 行说明状态已变化,报明确错误", "roles": ["档案管理员"]},
       {"stage": "逾期提醒", "action": "不建定时任务、不发站内信:逾期仅在查询时实时计算(状态=借出中 且 归还期限早于今天,逾期天数=今天−归还期限),借阅列表的「逾期」列渲染红色「逾期 N 天」标签;另提供 /archive/borrow/overdue-page 独立入口,列表页有「只看逾期」切换在 /page 与 /overdue-page 之间切换数据源", "roles": ["档案管理员"]},
       {"stage": "档案统计", "action": "统计页展示档案总数、在库数、借出中数、逾期未还数四张卡片,以及按分类分布(饼图)、按密级分布(柱图)、按载体分布(饼图)三组分布,数据来自 /archive/stat/overview 的单次聚合查询", "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": [