修复(08-28-reimbursement-review-routing-copy): 规范财务兜底文案

这个提交包含在:
2026-08-28 20:30:04 +08:00
父节点 1bb066ddb7
当前提交 be057e665d
共修改 12 个文件,包含 291 行新增和 8 行删除
+4 -2
查看文件
@@ -57,6 +57,7 @@ const {
buildApprovalWorkflowSnapshot,
getWorkflowStepsSnapshot,
resolveActionableStep,
resolveWorkflowStepDisplayName,
toMoneyString,
} = require("../utils/workflow");
@@ -355,11 +356,12 @@ function isOrdinalApprovalLabel(value) {
}
function resolveApprovalStageLabel(task) {
const stepName = String(task?.step_name ?? "").trim();
const stepName = resolveWorkflowStepDisplayName(task);
const stepId = String(task?.step_id ?? "").trim();
const isTechnicalIdentifier = /^[a-z][a-z0-9]*(?:[_-][a-z0-9]+)+$/i.test(stepName);
const isGenericLabel = ["审批", "审核", "复核"].includes(stepName);
if (stepName && stepName !== stepId && !isOrdinalApprovalLabel(stepName) && !isTechnicalIdentifier && !isGenericLabel) {
if (stepName && stepName !== stepId && !isOrdinalApprovalLabel(stepName)
&& !isTechnicalIdentifier && !isGenericLabel) {
return stepName;
}
+6 -4
查看文件
@@ -8,6 +8,7 @@ const {
getWorkflowStepsSnapshot,
isBusinessApprovalRoleCode,
resolveActionableStep,
resolveWorkflowStepDisplayName,
toMoneyString,
} = require("../utils/workflow");
const { consumeReservedLeave, releaseReservedLeave, formatDateOnly } = require("../services/leave");
@@ -336,6 +337,7 @@ function isoOrNull(value) {
function mapTaskSummary(task, allowedActions = []) {
const businessSummary = buildTaskBusinessSummary(task);
const stepDisplayName = resolveWorkflowStepDisplayName(task);
const workflowInstance = task.workflow_instance
? {
entity_type: task.workflow_instance.entity_type,
@@ -348,7 +350,7 @@ function mapTaskSummary(task, allowedActions = []) {
id: task.id,
instance_id: task.instance_id,
step_id: task.step_id,
step_name: task.step_name,
step_name: stepDisplayName,
assignee_id: task.assignee_id,
assignee_role: task.assignee_role,
status: task.status,
@@ -359,7 +361,7 @@ function mapTaskSummary(task, allowedActions = []) {
instanceId: task.instance_id,
stepId: task.step_id,
stepName: task.step_name,
stepName: stepDisplayName,
assigneeId: task.assignee_id,
assigneeRole: task.assignee_role,
createdAt: isoOrNull(task.created_at),
@@ -531,7 +533,7 @@ function buildWorkflowTaskSummaryPayload(tasks, scope = "mine", now = new Date()
}
incrementSummaryBucket(byEntityType, task.workflow_instance?.entity_type ?? "unknown", task, now);
incrementSummaryBucket(byStep, task.step_name ?? task.step_id ?? "unknown", task, now);
incrementSummaryBucket(byStep, resolveWorkflowStepDisplayName(task) || task.step_id || "unknown", task, now);
incrementSummaryBucket(byAssigneeRole, task.assignee_role ?? (task.assignee_id ? "指定审批人" : "未分配"), task, now);
}
@@ -2433,7 +2435,7 @@ async function workflowRoutes(fastify) {
id: task.id,
instanceId: task.instance_id,
stepId: task.step_id,
stepName: task.step_name,
stepName: resolveWorkflowStepDisplayName(task),
assigneeId: task.assignee_id,
assigneeRole: task.assignee_role,
status: task.status,
+14 -1
查看文件
@@ -107,13 +107,25 @@ function getRoleCodeFromStep(step) {
return rule?.type === "role" && typeof rule.value === "string" ? rule.value : null;
}
function resolveWorkflowStepDisplayName(step) {
const stepName = String(step?.step_name ?? step?.stepName ?? step?.name ?? "").trim();
const assigneeRole = String(step?.assignee_role ?? step?.assigneeRole ?? "").toLowerCase();
const isLegacyOwnerFallback = /^负责人本人申请兜底\s*[::]/u.test(stepName);
if (isLegacyOwnerFallback && ["finance", "finance_mgr"].includes(assigneeRole)) {
return "财务复核";
}
return stepName;
}
function buildRoleApprovalStep(roleCode, index, sourceStep, reason) {
const suffix = reason === "owner_self_fallback" ? "_owner_self_fallback" : "";
return {
id: `approval_${index + 1}_${roleCode}${suffix}`,
name:
reason === "owner_self_fallback"
? `负责人本人申请兜底:${roleCode}`
? "财务复核"
: sourceStep?.name ?? `审批节点${index + 1}`,
type: sourceStep?.type ?? "approval",
assignee_rule: { type: "role", value: roleCode },
@@ -565,5 +577,6 @@ module.exports = {
resolveActionableStep,
resolveAssigneeFromRule,
resolveDepartmentManagerAssignee,
resolveWorkflowStepDisplayName,
toMoneyString,
};