import type { ProcessingProgress } from "../types/processingProgress"; export function resolveReimbursementPaymentHandoff({ status, deletedAt, progress, }: { status: string; deletedAt?: string | null; progress?: ProcessingProgress | null; }) { const unavailable = { nextStep: "付款进度暂不可用,请刷新后重试", canCreateBatch: false, targetHref: null as string | null }; if (deletedAt || !["approved", "paid"].includes(status)) return null; const stages = progress?.stages ?? []; const created = stages.find((stage) => stage.key === "payment_batch_created"); const review = stages.find((stage) => stage.key === "payment_batch_review"); const payment = stages.find((stage) => stage.key === "payment_and_receipt"); if (!created || !review || !payment) return unavailable; if (status === "paid") { return { ...unavailable, nextStep: payment.state === "completed" ? payment.detail ?? "查看付款结果" : unavailable.nextStep, targetHref: payment.state === "completed" ? payment.targetHref : null, }; } if (created.state === "current" && review.state === "pending" && payment.state === "pending" && !created.targetHref && !review.targetHref && !payment.targetHref) { return { ...unavailable, nextStep: created.detail ?? "待财务组建付款批次", canCreateBatch: true }; } if (created.state !== "completed") return unavailable; const current = [payment, review].find((stage) => stage.state === "current" || stage.state === "exception"); if (!current || !current.detail) return unavailable; return { ...unavailable, nextStep: current.detail, targetHref: current.targetHref }; }