实现 B-2a 报销审批内容工作台(reimbursement-approval-content-workbench)

这个提交包含在:
2026-09-01 20:32:34 +08:00
父节点 4c8ee07abb
当前提交 c840574d36
共修改 36 个文件,包含 2271 行新增和 91 行删除
@@ -854,6 +854,40 @@ describe("reimbursements routes expense standard integration", () => {
exceededAmount: "60.00",
}),
]);
expect(state.workflowInstanceCreatePayload?.context_data).toEqual(expect.objectContaining({
budgetCheck: null,
budgetCheckRecorded: true,
}));
await app.close();
});
it("persists the calculated budget check in the workflow submission snapshot", async () => {
resolveEntityPrecheckMock.mockResolvedValue(buildPrecheck());
resolveApplicableBudgetPoolByContextMock.mockResolvedValue({
id: "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
code: "BUDGET-2026",
allocated_amount: "1000.00",
used_amount: "700.00",
warning_threshold_percent: 80,
});
const { app, state } = await buildApp();
const response = await app.inject({
method: "POST",
url: `/api/reimbursements/${REIMBURSEMENT_ID}/submit`,
});
expect(response.statusCode).toBe(200);
expect(state.workflowInstanceCreatePayload?.context_data?.budgetCheck).toEqual({
budgetId: "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
budgetCode: "BUDGET-2026",
controlMode: "warn",
usagePercent: 88,
exceededThreshold: true,
exceededBudget: false,
});
expect(state.workflowInstanceCreatePayload?.context_data?.budgetCheckRecorded).toBe(true);
await app.close();
});