You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发票审批工作流当前步骤查询适配OptionalReview规则的方案咨询

发票审核工作流当前步骤查询方案

核心判定逻辑

先明确每个审批节点(按Invoice、Line、ApprovalSeq三个字段分组)的通过规则:

  • 优先过滤掉节点内OptionalReviewer = 'Y'的可选审核人记录,该类记录不影响节点是否通过的判定
  • 剩余的必填审核人记录如果全部ApprovedYN = 'Y',则节点审批通过,进入下一节点
  • 特殊适配:如果节点内全为可选审核人(过滤后无必填记录),则只要存在至少1条ApprovedYN = 'Y'的记录,就判定节点通过

实现SQL(标准SQL语法,兼容绝大多数数据库)

WITH node_pass_flag AS (
    SELECT 
        Invoice,
        Line,
        ApprovalSeq,
        -- 标记节点是否通过:1=通过,0=未通过
        CASE 
            WHEN 
                -- 所有必填审核人全部通过
                SUM(CASE WHEN OptionalReviewer = 'N' AND ApprovedYN = 'N' THEN 1 ELSE 0 END) = 0
                AND
                -- 存在必填审核人 或 全可选时至少有1人通过
                (COUNT(CASE WHEN OptionalReviewer = 'N' THEN 1 END) > 0 OR SUM(CASE WHEN ApprovedYN = 'Y' THEN 1 ELSE 0 END) >= 1)
            THEN 1 
            ELSE 0 
        END AS is_pass
    FROM invoice_approval
    GROUP BY Invoice, Line, ApprovalSeq
),
current_min_node AS (
    -- 找到每张发票行最小的未通过审批节点
    SELECT 
        Invoice,
        Line,
        MIN(ApprovalSeq) AS current_approval_seq
    FROM node_pass_flag
    WHERE is_pass = 0
    GROUP BY Invoice, Line
)
-- 取出当前节点下待审批的必填审核人记录
SELECT a.*
FROM invoice_approval a
INNER JOIN current_min_node c
    ON a.Invoice = c.Invoice
    AND a.Line = c.Line
    AND a.ApprovalSeq = c.current_approval_seq
WHERE 
    a.OptionalReviewer = 'N'
    AND a.ApprovedYN = 'N'
ORDER BY a.Invoice, a.Line, a.ApprovalSeq;

场景适配验证

  • 场景1:节点1存在2个必填审核人未审批,判定为未通过,是最小未通过节点,返回对应2条记录,符合预期
  • 场景2:节点1全为可选审核人且存在通过记录,判定为通过;节点2存在必填审核人未审批,判定为未通过,返回对应1条记录,符合预期
  • 场景3:节点1必填审核人全部通过,判定为通过;节点2存在必填审核人未审批,判定为未通过,返回对应1条记录,符合预期

内容的提问来源于stack exchange,提问作者hjReads

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 09:15:04