feat(P17A-1,P17A-2): 新增采购模型权限与系统种子

这个提交包含在:
2026-03-07 20:59:28 +08:00
父节点 9de1169d78
当前提交 1cd4290b4d
共修改 8 个文件,包含 354 行新增和 18 行删除
@@ -35,6 +35,15 @@ describe("Permission Constants", () => {
expect(hrPermissions).toEqual(expect.arrayContaining(["leave.view_all", "leave.manage"]));
});
it("grants procurement permissions to configured roles", () => {
expect(hasPermission(resolvePermissionsForRoles(["employee"]), "procurement.create")).toBe(true);
expect(hasPermission(resolvePermissionsForRoles(["employee"]), "procurement.view_own")).toBe(true);
expect(hasPermission(resolvePermissionsForRoles(["manager"]), "procurement.approve")).toBe(true);
expect(hasPermission(resolvePermissionsForRoles(["finance"]), "procurement.approve")).toBe(false);
expect(hasPermission(resolvePermissionsForRoles(["finance_mgr"]), "procurement.manage")).toBe(true);
expect(hasPermission(resolvePermissionsForRoles(["administration"]), "procurement.manage")).toBe(true);
});
it("maps workflow entities to correct permission codes", () => {
expect(resolveEntityPermission("reimbursement", "approve")).toBe("expense.approve");
expect(resolveEntityPermission("reimbursement", "transfer")).toBe("expense.transfer");
@@ -87,8 +87,8 @@ describe("documentSequence service", () => {
it("falls back to default purchase category when sequence row does not exist", async () => {
const prisma = buildPrisma({
categoryMap: {
purchase_general: {
code: "purchase_general",
PR_STANDARD: {
code: "PR_STANDARD",
entity_type: "purchase_request",
sequence_prefix: "CG",
number_length: 4,
@@ -102,15 +102,15 @@ describe("documentSequence service", () => {
const config = await resolveDocumentSequenceConfig(prisma, { documentType: "purchase_request" });
expect(config.source).toBe("document_category");
expect(config.documentCategoryCode).toBe("purchase_general");
expect(config.documentCategoryCode).toBe("PR_STANDARD");
expect(config.prefix).toBe("CG");
});
it("issues a document number using category-driven config", async () => {
const prisma = buildPrisma({
categoryMap: {
purchase_general: {
code: "purchase_general",
PR_STANDARD: {
code: "PR_STANDARD",
entity_type: "purchase_request",
sequence_prefix: "CG",
number_length: 4,