实现腾讯通用票据OCR安全适配(07-28-travel-reimbursement-guide)

这个提交包含在:
2026-07-28 22:02:11 +08:00
父节点 b4bd484260
当前提交 ac17092fa0
共修改 19 个文件,包含 1277 行新增和 127 行删除
+45 -1
查看文件
@@ -14,9 +14,15 @@ const OCR_FIELD_LABELS = {
invoiceDate: "开票日期",
totalAmount: "总金额",
sellerName: "销售方",
buyerName: "购买方",
};
function buildInvoiceDedupFilters({ fileSha256 = null, invoiceCode = null, invoiceNumber = null }) {
function buildInvoiceDedupFilters({
fileSha256 = null,
invoiceCode = null,
invoiceNumber = null,
deduplicateByInvoiceNumberOnly = false,
}) {
const filters = [];
if (fileSha256) {
filters.push({ file_sha256: fileSha256 });
@@ -26,6 +32,11 @@ function buildInvoiceDedupFilters({ fileSha256 = null, invoiceCode = null, invoi
invoice_code: invoiceCode,
invoice_number: invoiceNumber,
});
} else if (deduplicateByInvoiceNumberOnly && invoiceNumber) {
filters.push({
invoice_code: null,
invoice_number: invoiceNumber,
});
}
return filters;
}
@@ -217,6 +228,39 @@ function formatInvoiceOcrFailureMessage(rawError) {
return "票据识别失败,请重试或人工补齐关键信息。";
}
if (rawError === "invoice_not_detected") {
return "未识别到支持的发票,请确认 PDF 第一页只有一张有效票据。";
}
if (rawError === "multiple_invoices_not_supported") {
return "一个 PDF 第一页只能包含一张发票,请拆分后重新上传。";
}
if (rawError === "unsupported_invoice_subtype") {
return "当前仅支持住宿增值税发票和铁路电子客票。";
}
if (rawError === "invoice_recognition_failed") {
return "腾讯 OCR 未能识别该发票,请检查 PDF 清晰度后重试。";
}
if (
rawError.includes("ResourceUnavailable.ResourcePackageRunOut") ||
rawError.includes("ResourceUnavailable.InArrears") ||
rawError.includes("ResourcesSoldOut.ChargeStatusException")
) {
return "票据识别额度或计费状态暂不可用,请联系管理员。";
}
if (
rawError.includes("ocr_credentials_missing") ||
rawError.includes("AuthFailure") ||
rawError.includes("UnauthorizedOperation") ||
rawError.includes("FailedOperation.UnOpenError")
) {
return "票据识别服务配置暂不可用,请联系管理员。";
}
if (!rawError) {
return "票据识别失败,请稍后重试。";
}