H1-H10 优化OCR实时体验闭环

这个提交包含在:
2026-05-09 11:48:57 +08:00
父节点 549bd81e30
当前提交 c26cf9b954
共修改 34 个文件,包含 1217 行新增和 184 行删除
+4 -43
查看文件
@@ -6,7 +6,7 @@ const { buildAuditLogData } = require("../../utils/audit");
const { signPayload, verifyToken } = require("../../utils/signedUrl");
const { openReadStream, StorageNotFoundError } = require("../../services/storage");
const { toMoneyString } = require("../../utils/workflow");
const { mapInvoiceUnavailableReason } = require("../../services/invoiceGovernance");
const { resolveInvoiceAvailability } = require("../../services/invoiceGovernance");
const {
mapInvoiceSummary,
normalizeInvoiceResponse,
@@ -106,48 +106,7 @@ function parseInvoiceStatusQuery(query) {
}
function resolveInvoiceStatusReason(invoice) {
if (invoice.status === "pending_ocr") {
return {
reason: "pending_ocr",
message: "发票正在识别,请稍后刷新",
};
}
if (invoice.status === "ocr_failed") {
const rawError = String(invoice.ocr_last_error ?? "");
if (rawError === "duplicate_invoice_code_number" || rawError.includes("duplicate_invoice")) {
return {
reason: "duplicate_invoice_code_number",
message: mapInvoiceUnavailableReason("used_by_company") ?? "发票重复,不能添加",
};
}
return {
reason: "ocr_failed",
message: rawError || "发票识别失败,请重新识别或手动处理",
};
}
if (invoice.status === "bound") {
return {
reason: "already_added",
message: "发票已添加到报销单",
};
}
if (invoice.status === "archived") {
return {
reason: invoice.archived_reason === "used_complete" ? "used_by_company" : "archived",
message:
invoice.archived_reason === "used_complete"
? "该发票已用于报销,不能重复添加"
: "发票已归档,不可添加",
};
}
return {
reason: "available",
message: "发票可添加",
};
return resolveInvoiceAvailability(invoice);
}
function ensureInvoiceReadableByUser(request, invoice) {
@@ -254,6 +213,8 @@ function registerInvoicePoolReadRoutes(fastify) {
status: invoice.status,
reason: statusReason.reason,
message: statusReason.message,
availabilityReason: statusReason.reason,
availabilityMessage: statusReason.message,
invoiceCode: invoice.invoice_code ?? null,
invoiceNumber: invoice.invoice_number ?? null,
invoiceDate: invoice.invoice_date?.toISOString?.()?.slice(0, 10) ?? null,