feat: 完成P6-P8后端能力与P9路由重构(V1-V2,D1,D3,B1-B2,B4,I1-I4,P9A2-P9A3)

这个提交包含在:
2026-02-10 11:28:28 +08:00
父节点 bec21e1b38
当前提交 6bc09f557b
共修改 33 个文件,包含 3467 行新增和 13 行删除
+59
查看文件
@@ -0,0 +1,59 @@
function normalizeAmount(value) {
if (value == null) {
return null;
}
const numberValue = Number(value);
if (!Number.isFinite(numberValue)) {
return null;
}
return numberValue.toFixed(2);
}
async function runMockVerification({ invoice }) {
const remarks = String(invoice.remarks ?? "").toLowerCase();
const invoiceCode = String(invoice.invoice_code ?? "").toUpperCase();
const invoiceNumber = String(invoice.invoice_number ?? "").toUpperCase();
if (remarks.includes("verify-error") || invoiceNumber.includes("ERR")) {
return {
status: "error",
resultCode: "mock_transport_error",
resultMessage: "mock provider transport error",
payload: {
provider: "mock",
marker: "verify-error",
},
};
}
if (remarks.includes("verify-fail") || invoiceCode.includes("FAIL") || invoiceNumber.includes("FAIL")) {
return {
status: "failed",
resultCode: "invoice_mismatch",
resultMessage: "invoice metadata mismatch",
payload: {
provider: "mock",
matched: false,
},
};
}
return {
status: "passed",
resultCode: "verified",
resultMessage: "invoice verified",
payload: {
provider: "mock",
matched: true,
invoiceCode: invoice.invoice_code ?? null,
invoiceNumber: invoice.invoice_number ?? null,
totalAmount: normalizeAmount(invoice.total_amount),
},
};
}
module.exports = {
runMockVerification,
};