feat(G1,P16A,P16B): 收口主数据核心与节假日日历增强

这个提交包含在:
2026-03-07 17:29:03 +08:00
父节点 32a3d3724d
当前提交 195f46a2e3
共修改 35 个文件,包含 4556 行新增和 27 行删除
+49
查看文件
@@ -1,5 +1,6 @@
const {
calculateRequestedDays,
calculateRequestedDaysByWorkingCalendar,
leaveRangesOverlap,
summarizeLeaveLedgerEntries,
} = require("../../../src/services/leave");
@@ -49,6 +50,54 @@ describe("Leave Service", () => {
});
});
describe("calculateRequestedDaysByWorkingCalendar", () => {
it("skips weekend days by default and respects adjusted workdays", () => {
expect(
calculateRequestedDaysByWorkingCalendar({
startDate: "2026-03-20",
endDate: "2026-03-22",
startSession: "am",
endSession: "pm",
calendarDays: [],
}),
).toBe(1);
expect(
calculateRequestedDaysByWorkingCalendar({
startDate: "2026-03-20",
endDate: "2026-03-22",
startSession: "am",
endSession: "pm",
calendarDays: [{ date: "2026-03-21", day_type: "adjusted_workday" }],
}),
).toBe(2);
});
it("skips configured holidays inside a weekday span", () => {
expect(
calculateRequestedDaysByWorkingCalendar({
startDate: "2026-03-16",
endDate: "2026-03-17",
startSession: "am",
endSession: "pm",
calendarDays: [{ date: "2026-03-17", day_type: "holiday" }],
}),
).toBe(1);
});
it("rejects ranges that become fully non-working after calendar adjustment", () => {
expect(() =>
calculateRequestedDaysByWorkingCalendar({
startDate: "2026-03-21",
endDate: "2026-03-22",
startSession: "am",
endSession: "pm",
calendarDays: [],
}),
).toThrow(/参数校验失败/);
});
});
describe("leaveRangesOverlap", () => {
it("detects overlapping half-day ranges", () => {
expect(