OAFLOW1 支持负责人本人报销兜底审批
这个提交包含在:
@@ -2,7 +2,7 @@ const { AppError } = require("../utils/AppError");
|
||||
const { resolveApplicableBudgetPoolByContext } = require("./budgetPool");
|
||||
const { FEATURE_FLAG_KEYS, evaluateFeatureFlag } = require("./featureFlags");
|
||||
const {
|
||||
buildWorkflowStepsFromApprovalRule,
|
||||
buildApprovalWorkflowSnapshot,
|
||||
parseWorkflowSteps,
|
||||
resolveActionableStep,
|
||||
} = require("../utils/workflow");
|
||||
@@ -590,20 +590,40 @@ async function buildReimbursementPrecheck(tx, { reimbursementId, config, logger
|
||||
level1_role: true,
|
||||
level2_role: true,
|
||||
level3_role: true,
|
||||
owner_self_fallback_role: true,
|
||||
priority: true,
|
||||
},
|
||||
});
|
||||
if (!approvalRule) {
|
||||
blocking.push(buildRiskFlagPreview("missing_approval_rule", RISK_LEVELS.high, "缺少审批规则", "当前金额范围未匹配到有效报销审批规则。"));
|
||||
} else {
|
||||
const workflowSteps = buildWorkflowStepsFromApprovalRule(approvalRule);
|
||||
const { actionable, skipped } = await resolveActionableStep({
|
||||
tx,
|
||||
steps: workflowSteps,
|
||||
startIndex: 0,
|
||||
ownerId: reimbursement.owner_id,
|
||||
logger,
|
||||
});
|
||||
let actionable = null;
|
||||
let skipped = [];
|
||||
try {
|
||||
const workflowSteps = await buildApprovalWorkflowSnapshot({
|
||||
tx,
|
||||
approvalRule,
|
||||
ownerId: reimbursement.owner_id,
|
||||
logger,
|
||||
});
|
||||
const resolved = await resolveActionableStep({
|
||||
tx,
|
||||
steps: workflowSteps,
|
||||
startIndex: 0,
|
||||
ownerId: reimbursement.owner_id,
|
||||
logger,
|
||||
blockOnUnresolvedAssignee: true,
|
||||
});
|
||||
actionable = resolved.actionable;
|
||||
skipped = resolved.skipped;
|
||||
} catch (error) {
|
||||
if (error instanceof AppError && error.details?.workflow === "no_actionable_approver") {
|
||||
actionable = null;
|
||||
skipped = [{ reason: error.details.reason ?? "no_actionable_approver" }];
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
if (!actionable || skipped.length) {
|
||||
blocking.push(buildRiskFlagPreview("no_actionable_approver", RISK_LEVELS.high, "缺少可执行审批人", "当前审批链未解析出有效审批人。"));
|
||||
}
|
||||
|
||||
在新工单中引用
屏蔽一个用户