H1-H10 优化OCR实时体验闭环
这个提交包含在:
@@ -10,6 +10,7 @@ const { sha256Hex } = require("../utils/crypto");
|
||||
const { toMoneyString } = require("../utils/workflow");
|
||||
const { findActiveDelegationForDelegate } = require("../utils/delegation");
|
||||
const { getMissingRequiredOcrFields, isOcrEnabledForType } = require("../services/ocr");
|
||||
const { enqueueOcrInvoice } = require("../jobs/pgBossJobs");
|
||||
const { registerInvoiceVerificationRoutes } = require("./invoicePool/verification");
|
||||
const { registerInvoicePoolReadRoutes } = require("./invoicePool/read");
|
||||
const { normalizeInvoiceResponse } = require("./invoicePool/shared/mappers");
|
||||
@@ -17,6 +18,7 @@ const { buildInvoiceDetailSelect } = require("./invoicePool/shared/selects");
|
||||
const { writeBuffer } = require("../services/storage");
|
||||
const {
|
||||
mapInvoiceUnavailableReason,
|
||||
resolveInvoiceAvailability,
|
||||
resolveInvoiceDedupBlocker,
|
||||
resolveUploadDedupDecision,
|
||||
} = require("../services/invoiceGovernance");
|
||||
@@ -509,6 +511,8 @@ async function invoicePoolRoutes(fastify) {
|
||||
uploadAction: uploadDedupDecision.action,
|
||||
unavailableReason: uploadDedupDecision.reason,
|
||||
unavailableMessage: message,
|
||||
availabilityReason: uploadDedupDecision.reason,
|
||||
availabilityMessage: message,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -570,10 +574,20 @@ async function invoicePoolRoutes(fastify) {
|
||||
return created;
|
||||
});
|
||||
|
||||
if (invoice.status === "pending_ocr") {
|
||||
enqueueOcrInvoice(fastify, invoice.id).catch((error) => {
|
||||
request.log.warn({ err: error, invoiceId: invoice.id }, "Failed to enqueue OCR invoice job");
|
||||
});
|
||||
}
|
||||
|
||||
const availability = resolveInvoiceAvailability(invoice);
|
||||
return sendData(reply, request, {
|
||||
invoicePoolId: invoice.id,
|
||||
status: invoice.status,
|
||||
fileSha256: invoice.file_sha256,
|
||||
uploadAction: "create",
|
||||
availabilityReason: availability.reason,
|
||||
availabilityMessage: availability.message,
|
||||
});
|
||||
},
|
||||
);
|
||||
@@ -1231,6 +1245,10 @@ async function invoicePoolRoutes(fastify) {
|
||||
return updated;
|
||||
});
|
||||
|
||||
enqueueOcrInvoice(fastify, invoice.id).catch((error) => {
|
||||
request.log.warn({ err: error, invoiceId: invoice.id }, "Failed to enqueue retry OCR invoice job");
|
||||
});
|
||||
|
||||
return sendData(reply, request, normalizeInvoiceResponse(invoice));
|
||||
},
|
||||
);
|
||||
|
||||
在新工单中引用
屏蔽一个用户